From ffe34ae2ff4a3371cb46dda3e0ad72c2f51758ec Mon Sep 17 00:00:00 2001 From: vsoch Date: Sat, 4 Jul 2026 19:05:54 -0700 Subject: [PATCH] hpcic-2026: preparing to test Signed-off-by: vsoch --- 2026/HPCIC-AWS/README.md | 382 + 2026/HPCIC-AWS/build/build-ubuntu.sh | 429 + 2026/HPCIC-AWS/ec2/docker-compose.yaml | 61 + 2026/HPCIC-AWS/ec2/ec2_spawner.py | 313 + 2026/HPCIC-AWS/ec2/jupyter-launcher.yaml | 112 + .../ec2/jupyterhub-braket-policy.json | 42 + 2026/HPCIC-AWS/ec2/jupyterhub-ec2-policy.json | 16 + .../ec2/jupyterhub-passrole-policy.json | 10 + 2026/HPCIC-AWS/ec2/jupyterhub_config.py | 173 + 2026/HPCIC-AWS/ec2/login.html | 168 + 2026/HPCIC-AWS/ec2/start-usernetes.sh | 32 + 2026/HPCIC-AWS/tutorial/.gitignore | 2 + 2026/HPCIC-AWS/tutorial/README.md | 3 + 2026/HPCIC-AWS/tutorial/assets/Flux-logo.svg | 1 + 2026/HPCIC-AWS/tutorial/assets/flux-icon.png | Bin 0 -> 117673 bytes .../flux-workflow-examples/.mergify.yml | 18 + .../assets/flux-workflow-examples/Makefile | 25 + .../assets/flux-workflow-examples/README.md | 72 + .../async-bulk-job-submit/README.md | 113 + .../async-bulk-job-submit/bulksubmit.py | 62 + .../bulksubmit_executor.py | 67 + .../flux-workflow-examples/bulksubmit/0.sh | 3 + .../flux-workflow-examples/bulksubmit/1.sh | 3 + .../flux-workflow-examples/bulksubmit/2.sh | 3 + .../flux-workflow-examples/bulksubmit/3.sh | 3 + .../flux-workflow-examples/bulksubmit/4.sh | 3 + .../flux-workflow-examples/bulksubmit/5.sh | 3 + .../flux-workflow-examples/bulksubmit/6.sh | 3 + .../comms-module/Makefile | 19 + .../comms-module/README.md | 93 + .../flux-workflow-examples/comms-module/app.c | 129 + .../comms-module/compute.lua | 62 + .../comms-module/io-forwarding.lua | 57 + .../assets/flux-workflow-examples/conf.py | 83 + .../data-conduit/Makefile | 13 + .../data-conduit/README.md | 102 + .../data-conduit/compute.py | 39 + .../data-conduit/conduit.c | 182 + .../data-conduit/datastore.py | 68 + .../hierarchical-launching/README.md | 39 + .../hierarchical-launching/ensemble.sh | 12 + .../hierarchical-launching/parent.sh | 14 + .../assets/flux-workflow-examples/index.rst | 95 + .../job-cancel/README.md | 42 + .../job-cancel/submitter.py | 51 + .../job-ensemble/README.md | 94 + .../job-ensemble/compute.lua | 18 + .../job-ensemble/ensemble.sh | 21 + .../job-ensemble/io-forwarding.lua | 18 + .../job-ensemble/kvs-watch-until.lua | 82 + .../job-status-control/README.md | 71 + .../job-status-control/bookkeeper.py | 54 + .../job-status-control/compute.py | 17 + .../job-status-control/io-forwarding.py | 17 + .../job-submit-api/README.md | 115 + .../job-submit-api/compute.py | 17 + .../job-submit-api/io-forwarding.py | 17 + .../job-submit-api/submitter.py | 23 + .../job-submit-api/submitter2.py | 23 + .../job-submit-cli/README.md | 61 + .../job-submit-cli/compute.lua | 17 + .../job-submit-cli/compute.py | 17 + .../job-submit-cli/io-forwarding.lua | 17 + .../job-submit-cli/io-forwarding.py | 17 + .../job-submit-wait/README.md | 159 + .../job-submit-wait/compute.py | 17 + .../submitter_sliding_window.py | 54 + .../job-submit-wait/submitter_wait_any.py | 45 + .../submitter_wait_in_order.py | 44 + .../job-watch/job-watch.sh | 11 + .../kvs-python-bindings/README.md | 69 + .../kvs-python-bindings/kvsput-usrdata.py | 24 + .../flux-workflow-examples/requirements.txt | 3 + .../synchronize-events/README.md | 54 + .../synchronize-events/compute.lua | 23 + .../synchronize-events/io-forwarding.lua | 23 + .../tutorial/ch1/01_flux_tutorial.ipynb | 726 + 2026/HPCIC-AWS/tutorial/ch1/Makefile | 2 + 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/0.sh | 4 + 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/1.sh | 4 + 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/2.sh | 4 + 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/3.sh | 4 + 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/4.sh | 4 + 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/5.sh | 4 + 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/6.sh | 4 + 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/7.sh | 4 + 2026/HPCIC-AWS/tutorial/ch1/hello-batch.sh | 8 + 2026/HPCIC-AWS/tutorial/ch1/hello.c | 94 + 2026/HPCIC-AWS/tutorial/ch1/job-watch.sh | 11 + 2026/HPCIC-AWS/tutorial/ch1/sleep_batch.sh | 15 + 2026/HPCIC-AWS/tutorial/ch1/sub_job1.sh | 6 + 2026/HPCIC-AWS/tutorial/ch1/sub_job2.sh | 4 + .../tutorial/ch2/02_flux_framework.ipynb | 11118 ++++++++++++++++ .../tutorial/ch2/bulksubmit_executor.py | 68 + 2026/HPCIC-AWS/tutorial/ch2/compute.py | 17 + .../tutorial/ch3/03_flux_tutorial.ipynb | 589 + .../ch4/04_flux_framework_usernetes.ipynb | 453 + .../flux-mummi-cganalysis.yaml | 22 + .../mummi-components/flux-mummi-mlrunner.yaml | 23 + .../tutorial/ch4/extra/usernetes-load.sh | 22 + .../tutorial/ch4/flux-minicluster-lammps.yaml | 34 + .../tutorial/ch4/flux-mummi-createsims.yaml | 22 + .../ch4/img/flux-usernetes-turkducken.png | Bin 0 -> 102609 bytes 2026/HPCIC-AWS/tutorial/ch4/img/mummi.png | Bin 0 -> 103340 bytes 2026/HPCIC-AWS/tutorial/ch4/img/mummi.svg | 1 + .../tutorial/ch4/img/usernetes-flux.png | Bin 0 -> 59196 bytes .../tutorial/ch4/ml-server-deployment.yaml | 64 + .../ch4/model-scripts/1-create-models.py | 36 + .../ch4/model-scripts/2-run-lammps-flux.py | 379 + .../HPCIC-AWS/tutorial/ch4/pytorch-mnist.yaml | 14 + .../usernetes-workspace.jupyterlab-workspace | 1 + .../tutorial/ch5/05_flux_quantum_braket.ipynb | 271 + 2026/HPCIC-AWS/tutorial/ch5/README.md | 46 + .../tutorial/ch5/braket-qaoa-local.yaml | 38 + .../tutorial/ch5/scripts/qaoa_maxcut.py | 279 + .../HPCIC-AWS/tutorial/img/dl-training-io.png | Bin 0 -> 36427 bytes 2026/HPCIC-AWS/tutorial/img/flux-batch.jpg | Bin 0 -> 55655 bytes .../tutorial/img/flux-broker-design.png | Bin 0 -> 35296 bytes .../tutorial/img/flux-instance-pre-tbon.png | Bin 0 -> 12218 bytes .../tutorial/img/flux-instance-w-tbon.png | Bin 0 -> 34570 bytes 2026/HPCIC-AWS/tutorial/img/flux-tree.png | Bin 0 -> 47131 bytes .../tutorial/img/instance-submit.png | Bin 0 -> 68509 bytes 2026/HPCIC-AWS/tutorial/img/scaled-submit.png | Bin 0 -> 77025 bytes 2026/HPCIC-AWS/tutorial/img/single-submit.png | Bin 0 -> 26094 bytes 124 files changed, 18859 insertions(+) create mode 100644 2026/HPCIC-AWS/README.md create mode 100644 2026/HPCIC-AWS/build/build-ubuntu.sh create mode 100644 2026/HPCIC-AWS/ec2/docker-compose.yaml create mode 100644 2026/HPCIC-AWS/ec2/ec2_spawner.py create mode 100644 2026/HPCIC-AWS/ec2/jupyter-launcher.yaml create mode 100644 2026/HPCIC-AWS/ec2/jupyterhub-braket-policy.json create mode 100644 2026/HPCIC-AWS/ec2/jupyterhub-ec2-policy.json create mode 100644 2026/HPCIC-AWS/ec2/jupyterhub-passrole-policy.json create mode 100644 2026/HPCIC-AWS/ec2/jupyterhub_config.py create mode 100644 2026/HPCIC-AWS/ec2/login.html create mode 100644 2026/HPCIC-AWS/ec2/start-usernetes.sh create mode 100644 2026/HPCIC-AWS/tutorial/.gitignore create mode 100644 2026/HPCIC-AWS/tutorial/README.md create mode 100644 2026/HPCIC-AWS/tutorial/assets/Flux-logo.svg create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-icon.png create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/.mergify.yml create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/Makefile create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/README.md create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/bulksubmit.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/bulksubmit_executor.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/0.sh create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/1.sh create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/2.sh create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/3.sh create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/4.sh create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/5.sh create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/6.sh create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/Makefile create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/README.md create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/app.c create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/compute.lua create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/io-forwarding.lua create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/conf.py create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/Makefile create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/README.md create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/compute.py create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/conduit.c create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/datastore.py create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/ensemble.sh create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/parent.sh create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/index.rst create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-cancel/README.md create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-cancel/submitter.py create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/compute.lua create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/ensemble.sh create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/io-forwarding.lua create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/kvs-watch-until.lua create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/bookkeeper.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/compute.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/io-forwarding.py create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/compute.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/io-forwarding.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/submitter.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/submitter2.py create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/compute.lua create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/compute.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/io-forwarding.lua create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/io-forwarding.py create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/compute.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_sliding_window.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_wait_any.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_wait_in_order.py create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-watch/job-watch.sh create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/kvs-python-bindings/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/kvs-python-bindings/kvsput-usrdata.py create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/requirements.txt create mode 100644 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/README.md create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/compute.lua create mode 100755 2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/io-forwarding.lua create mode 100644 2026/HPCIC-AWS/tutorial/ch1/01_flux_tutorial.ipynb create mode 100644 2026/HPCIC-AWS/tutorial/ch1/Makefile create mode 100755 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/0.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/1.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/2.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/3.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/4.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/5.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/6.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/bulksubmit/7.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/hello-batch.sh create mode 100644 2026/HPCIC-AWS/tutorial/ch1/hello.c create mode 100755 2026/HPCIC-AWS/tutorial/ch1/job-watch.sh create mode 100644 2026/HPCIC-AWS/tutorial/ch1/sleep_batch.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/sub_job1.sh create mode 100755 2026/HPCIC-AWS/tutorial/ch1/sub_job2.sh create mode 100644 2026/HPCIC-AWS/tutorial/ch2/02_flux_framework.ipynb create mode 100755 2026/HPCIC-AWS/tutorial/ch2/bulksubmit_executor.py create mode 100755 2026/HPCIC-AWS/tutorial/ch2/compute.py create mode 100644 2026/HPCIC-AWS/tutorial/ch3/03_flux_tutorial.ipynb create mode 100644 2026/HPCIC-AWS/tutorial/ch4/04_flux_framework_usernetes.ipynb create mode 100644 2026/HPCIC-AWS/tutorial/ch4/extra/mummi-components/flux-mummi-cganalysis.yaml create mode 100644 2026/HPCIC-AWS/tutorial/ch4/extra/mummi-components/flux-mummi-mlrunner.yaml create mode 100755 2026/HPCIC-AWS/tutorial/ch4/extra/usernetes-load.sh create mode 100644 2026/HPCIC-AWS/tutorial/ch4/flux-minicluster-lammps.yaml create mode 100644 2026/HPCIC-AWS/tutorial/ch4/flux-mummi-createsims.yaml create mode 100644 2026/HPCIC-AWS/tutorial/ch4/img/flux-usernetes-turkducken.png create mode 100644 2026/HPCIC-AWS/tutorial/ch4/img/mummi.png create mode 100644 2026/HPCIC-AWS/tutorial/ch4/img/mummi.svg create mode 100644 2026/HPCIC-AWS/tutorial/ch4/img/usernetes-flux.png create mode 100644 2026/HPCIC-AWS/tutorial/ch4/ml-server-deployment.yaml create mode 100644 2026/HPCIC-AWS/tutorial/ch4/model-scripts/1-create-models.py create mode 100644 2026/HPCIC-AWS/tutorial/ch4/model-scripts/2-run-lammps-flux.py create mode 100644 2026/HPCIC-AWS/tutorial/ch4/pytorch-mnist.yaml create mode 100644 2026/HPCIC-AWS/tutorial/ch4/usernetes-workspace.jupyterlab-workspace create mode 100644 2026/HPCIC-AWS/tutorial/ch5/05_flux_quantum_braket.ipynb create mode 100644 2026/HPCIC-AWS/tutorial/ch5/README.md create mode 100644 2026/HPCIC-AWS/tutorial/ch5/braket-qaoa-local.yaml create mode 100644 2026/HPCIC-AWS/tutorial/ch5/scripts/qaoa_maxcut.py create mode 100644 2026/HPCIC-AWS/tutorial/img/dl-training-io.png create mode 100644 2026/HPCIC-AWS/tutorial/img/flux-batch.jpg create mode 100644 2026/HPCIC-AWS/tutorial/img/flux-broker-design.png create mode 100644 2026/HPCIC-AWS/tutorial/img/flux-instance-pre-tbon.png create mode 100644 2026/HPCIC-AWS/tutorial/img/flux-instance-w-tbon.png create mode 100644 2026/HPCIC-AWS/tutorial/img/flux-tree.png create mode 100644 2026/HPCIC-AWS/tutorial/img/instance-submit.png create mode 100644 2026/HPCIC-AWS/tutorial/img/scaled-submit.png create mode 100644 2026/HPCIC-AWS/tutorial/img/single-submit.png diff --git a/2026/HPCIC-AWS/README.md b/2026/HPCIC-AWS/README.md new file mode 100644 index 00000000..f2eea8ce --- /dev/null +++ b/2026/HPCIC-AWS/README.md @@ -0,0 +1,382 @@ +# Flux + Usernetes + Jupyter via KubeSpawner + +This set of tutorials provides: + + - [Building Base Images](#build-images) + - [Deploy A Cluster to AWS](#deploy-to-kubernetes) + +Pre-requisites: + + - AWS account and aws client installed locally + - Excitement to learn about Flux! + +For AWS Tutorial Day users: + +> To run the AWS tutorial, visit https://tutorial.flux-framework.org. You can use any login you want, but choose something relatvely uncommon (like your email address) or you may end up sharing a JupyterLab instance with another user. The tutorial password will be provided to you. + +Since we start usernetes and build the container, the startup takes a few minutes, and we should start a little early (before the user expects to need it). + +## Build Images + +Unlike previous tutorials, since this one uses Usernetes and Flux, it is done via an EC2 instance, and we have built a custom EC2 spawner for it. This was built on a hpc7g.16xlarge (Graviton 3) instance, and then saved to an AMI. Incremental changes were saved from the image directly. Note that we needed to build the docker image for usernetes to be cached on the node before a save: + +```bash +cd /home/ubuntu/usernetes +docker build -t usernetes_node . +``` + +The base logic is in [build](build). + +## Deploy to AWS + +**Do not forget to use the RADIUSS account** + +### 1. Setup + +#### IAM Policy + +```bash +# Create the IAM policies +aws iam create-policy --policy-name JupyterHub-EC2-Manager-Policy --policy-document file://ec2/jupyterhub-ec2-policy.json +``` +```console +{ + "Policy": { + "PolicyName": "JupyterHub-EC2-Manager-Policy", + "PolicyId": "ANPAZHDKVUIEA2NWPQFS4", + "Arn": "arn:aws:iam::633731392008:policy/JupyterHub-EC2-Manager-Policy", + "Path": "/", + "DefaultVersionId": "v1", + "AttachmentCount": 0, + "PermissionsBoundaryUsageCount": 0, + "IsAttachable": true, + "CreateDate": "2025-07-31T22:54:06+00:00", + "UpdateDate": "2025-07-31T22:54:06+00:00" + } +} +``` +And: + +```bash +aws iam create-policy --policy-name JupyterHub-PassRole-Policy --policy-document file://ec2/jupyterhub-passrole-policy.json +``` +```console +{ + "Policy": { + "PolicyName": "JupyterHub-PassRole-Policy", + "PolicyId": "ANPAZHDKVUIEMA2OTJQQS", + "Arn": "arn:aws:iam::633731392008:policy/JupyterHub-PassRole-Policy", + "Path": "/", + "DefaultVersionId": "v1", + "AttachmentCount": 0, + "PermissionsBoundaryUsageCount": 0, + "IsAttachable": true, + "CreateDate": "2025-08-01T00:47:28+00:00", + "UpdateDate": "2025-08-01T00:47:28+00:00" + } +} +``` + +```bash +# Create the IAM role that EC2 can assume +aws iam create-role --role-name JupyterHub-EC2-Manager-Role --assume-role-policy-document '{ + "Version": "2012-10-17", + "Statement": { + "Effect": "Allow", + "Principal": {"Service": "ec2.amazonaws.com"}, + "Action": "sts:AssumeRole" + } +}' +``` +```console +{ + "Role": { + "Path": "/", + "RoleName": "JupyterHub-EC2-Manager-Role", + "RoleId": "AROAZHDKVUIEJADZRZUZQ", + "Arn": "arn:aws:iam::633731392008:role/JupyterHub-EC2-Manager-Role", + "CreateDate": "2025-07-31T22:54:22+00:00", + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": { + "Effect": "Allow", + "Principal": { + "Service": "ec2.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + } + } +} +``` + +```bash +aws iam attach-role-policy \ + --role-name JupyterHub-EC2-Manager-Role \ + --policy-arn arn:aws:iam::633731392008:policy/JupyterHub-PassRole-Policy +``` + +```bash +# Create an instance profile, which is the container for the role that EC2 uses +aws iam create-instance-profile --instance-profile-name JupyterHub-EC2-Manager-Profile +``` +```console +{ + "InstanceProfile": { + "Path": "/", + "InstanceProfileName": "JupyterHub-EC2-Manager-Profile", + "InstanceProfileId": "AIPAZHDKVUIEA6K5RNA33", + "Arn": "arn:aws:iam::633731392008:instance-profile/JupyterHub-EC2-Manager-Profile", + "CreateDate": "2025-07-31T22:55:40+00:00", + "Roles": [] + } +} +``` +```bash +aws iam add-role-to-instance-profile --instance-profile-name JupyterHub-EC2-Manager-Profile --role-name JupyterHub-EC2-Manager-Role +``` + +#### Braket Policy (for the Chapter 5 quantum demo) + +The Chapter 5 notebook runs a hybrid quantum-classical QAOA workload against the AWS Braket SV1 simulator. The spawned user instances use the `JupyterHub-EC2-Manager-Role` (see `iam_instance_profile_arn` in `ec2/jupyterhub_config.py`), so we attach a Braket policy to that same role. The Braket SDK then picks up the instance-role credentials from instance metadata — no keys are stored on the VM. + +The policy in `ec2/jupyterhub-braket-policy.json` is least-privilege and, per our AWS admin's recommendation, scopes the device-level actions (`braket:GetDevice`, `braket:CreateQuantumTask`) to just the SV1 device ARN `arn:aws:braket:::device/quantum-simulator/amazon/sv1`. It also allows the task polling/search actions (which do not accept a device ARN as a resource) and S3 access to the `amazon-braket-*` results bucket that SV1 writes to. + +First, capture your AWS account ID into an environment variable so the rest of the commands are copy-paste ready: + +```bash +export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +echo "Using account: ${ACCOUNT_ID}" +``` + +Create the Braket policy and capture its ARN directly from the API response: + +```bash +export BRAKET_POLICY_ARN=$(aws iam create-policy \ + --policy-name JupyterHub-Braket-SV1-Policy \ + --policy-document file://ec2/jupyterhub-braket-policy.json \ + --query 'Policy.Arn' --output text) +echo "Created policy: ${BRAKET_POLICY_ARN}" +``` + +If the policy already exists (so `create-policy` errored), derive its ARN from the account ID instead: + +```bash +export BRAKET_POLICY_ARN="arn:aws:iam::${ACCOUNT_ID}:policy/JupyterHub-Braket-SV1-Policy" +``` + +Attach it to the role used by the spawned user instances: + +```bash +aws iam attach-role-policy \ + --role-name JupyterHub-EC2-Manager-Role \ + --policy-arn "${BRAKET_POLICY_ARN}" +``` + +Finally, enable Braket in the account once by creating its service-linked role (this is an account-level admin step, intentionally NOT granted to the instance role). It is safe to re-run — if the role already exists you get a harmless error. + +```bash +aws iam create-service-linked-role --aws-service-name braket.amazonaws.com +``` + +> Note: if `braket:CreateQuantumTask` is ever denied despite the device-scoped statement, widen the resource on that one action to also include the account's quantum-task ARN. Using the `ACCOUNT_ID` env var from above, that is `arn:aws:braket:us-east-1:${ACCOUNT_ID}:quantum-task/*`. The device-ARN scoping matches AWS's documented device-restriction model and is what the admin recommended, so start there. + +#### Security Grouph + +Create the security group (we will do this once): + +```bash +# Get the default VPC (if subnets are in right region) +VPC_ID=$(aws ec2 describe-vpcs --filters "Name=isDefault,Values=true" --query "Vpcs[0].VpcId" --output text --region us-east-1) + +# Create a new VPC + +# create the security group +SG_ID=$(aws ec2 create-security-group --group-name "JupyterHub-Hub-SG" --description "Security group for the main JupyterHub instance" --vpc-id $VPC_ID --query 'GroupId' --output text --region us-east-1) + +# add rules to the security group for ssh from my address (so nobody is angry with me) +MY_IP=$(curl -s http://checkip.amazonaws.com) +aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 22 --cidr $MY_IP/32 --region us-east-1 + +# Allow HTTP (port 80) and HTTPS (port 443) from anywhere for users +aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 80 --cidr 0.0.0.0/0 --region us-east-1 +aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 443 --cidr 0.0.0.0/0 --region us-east-1 +aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 8888 --cidr 0.0.0.0/0 --region us-east-1 +aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 8000 --cidr 0.0.0.0/0 --region us-east-1 +aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 8001 --cidr 0.0.0.0/0 --region us-east-1 + +# Flux +# Created Security Group with ID: sg-0ddfbe3cd0f9253d3 +``` + +#### Subnet + +```bash +SUBNET_ID=$(aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPC_ID" "Name=map-public-ip-on-launch,Values=true" --query "Subnets[0].SubnetId" --output text --region us-east-1) +echo "Using Subnet ID: $SUBNET_ID" +# Using Subnet ID: subnet-0e3f3782bee64eede +``` + +#### Launch Instance + +```bash +# 1) Which AZs actually offer hpc7g.16xlarge in us-east-1? +aws ec2 describe-instance-type-offerings \ + --region us-east-1 \ + --location-type availability-zone \ + --filters Name=instance-type,Values=hpc7g.16xlarge \ + --query 'InstanceTypeOfferings[].Location' --output text + +# 2) Grab the first offered AZ into an env var +export TARGET_AZ=$(aws ec2 describe-instance-type-offerings \ + --region us-east-1 \ + --location-type availability-zone \ + --filters Name=instance-type,Values=hpc7g.16xlarge \ + --query 'InstanceTypeOfferings[0].Location' --output text) +echo "Target AZ: $TARGET_AZ" + +# 3) Find the VPC your current (wrong-AZ) subnet belongs to +export VPC_ID=$(aws ec2 describe-subnets --region us-east-1 \ + --subnet-ids "$SUBNET_ID" --query 'Subnets[0].VpcId' --output text) +echo "VPC: $VPC_ID" + +# 4) Reassign SUBNET_ID to a subnet in that VPC that lives in the target AZ +export SUBNET_ID=$(aws ec2 describe-subnets --region us-east-1 \ + --filters Name=vpc-id,Values=$VPC_ID Name=availability-zone,Values=$TARGET_AZ \ + --query 'Subnets[0].SubnetId' --output text) +echo "New subnet: $SUBNET_ID" +``` +```console +us-east-1a +Target AZ: us-east-1a +VPC: vpc-0231726e66ed7bb8b +New subnet: subnet-0b0e2408f9960d3f6 +``` + +```bash +# This AMI has Flux, LAMMPS, Usernetes +AMI_ID="ami-0f8da7e8cf5544ed0" +KEY_NAME="ed-the-dinosaur" +SECURITY_GROUP_ID="sg-0ddfbe3cd0f9253d3" + +aws ec2 run-instances \ + --image-id "$AMI_ID" \ + --region us-east-1 \ + --instance-type "hpc7g.16xlarge" \ + --iam-instance-profile Name="JupyterHub-EC2-Manager-Profile" \ + --key-name "$KEY_NAME" \ + --security-group-ids "$SECURITY_GROUP_ID" \ + --subnet-id "$SUBNET_ID" \ + --associate-public-ip-address \ + --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=jupyter-hub-instance},{Key=Project,Value=HPCIC-2025-Tutorial}]' + +# If we make a startup script. +# --user-data file://hub-startup-script.sh +``` + +You can describe the instance to get the public ip. + +```bash +aws ec2 describe-instances --region us-east-1 +``` + +And ssh. + +```bash +ssh -i ~/.ssh/.pem -o IdentitiesOnly=yes ubuntu@13.220.230.82 +sudo mkdir -p /srv/jupyterhub +# I copied jupyterhub_config.py and ec2_spawner.py there. +# Our custom login page needs to be in ./templates there too +``` + +I added access for my ip address: + +```bash +aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 8000 --cidr $MY_IP/32 --region us-east-2 +aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 8081 --cidr $MY_IP/32 --region us-east-2 +``` + +- submit slides to IM + +#### Start Jupyter + +```bash +sudo chown -R ubuntu /srv/jupyterhub/ +TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") +export HUB_CONNECT_IP=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/local-ipv4) + +# Kolomogorov + +# Development (no culling) +# ~/.local/bin/jupyterhub -f /srv/jupyterhub/jupyterhub_config_no_culler.py + +# With culling +~/.local/bin/jupyterhub -f /srv/jupyterhub/jupyterhub_config.py + +# To keep running +screen +nohup ~/.local/bin/jupyterhub -f /srv/jupyterhub/jupyterhub_config.py & +``` + +#### SSL / Certificates + +Note that we will want to generate a certificate. First, install and configure certbot. + +```bash +# Certbot! +# tutorial.flux-framework.org +sudo systemctl stop nginx +sudo certbot certonly --standalone +sudo chown -R ubuntu /etc/letsencrypt/ +``` + +Then add this content to `/etc/nginx/sites-available/default` + +And restart: + +```bash +sudo systemctl reload nginx +``` + +#### SSL and Snapshots + +I originally created the AMI in the wrong account. To share between accounts I needed to take off automatic encryption of snapshots. This is `/etc/nginx/sites-enabled/default` + +``` +server { + listen 80; + server_name tutorial.flux-framework.org; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl; + server_name tutorial.flux-framework.org; + + ssl_certificate /etc/letsencrypt/live/tutorial.flux-framework.org/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/tutorial.flux-framework.org/privkey.pem; + + location / { + proxy_pass http://127.0.0.1:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # WebSocket support + proxy_http_version 1.1; + #proxy_set_header Upgrade $websocket_upgrade; + proxy_set_header Connection "upgrade"; + } +} +``` + +And then save a new one, getting the volume from the name. + +```bash +# Create the snapshot +aws ec2 create-snapshot --volume-id vol-0db075348c995f4c1 --description "HPCIC Flux Tutorial 2025 JupyterHub EC2 Spawner (save August 5, 2025)" --region us-east-2 + +# and the image +aws ec2 register-image --name "hpcic-flux-tutorial-2025" --description "HPCIC Flux Framework Tutorial (JupyterHub Spawner EC2) 2025" --root-device-name /dev/sda1 --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0786282c76b84f55e}" --region us-east-2 +``` diff --git a/2026/HPCIC-AWS/build/build-ubuntu.sh b/2026/HPCIC-AWS/build/build-ubuntu.sh new file mode 100644 index 00000000..f3fe29fc --- /dev/null +++ b/2026/HPCIC-AWS/build/build-ubuntu.sh @@ -0,0 +1,429 @@ +#!/bin/bash + +set -euo pipefail + +################################################################ +# +# Flux, Usernetes, Jupyter, and EFA +# I started with ubuntu 24.04 ARM server edition + +sudo apt-get update && sudo apt-get install -y build-essential \ + tar \ + autoconf \ + automake \ + make \ + wget \ + git \ + gcc \ + g++ \ + zip \ + libblas-dev \ + liblapack-dev \ + libfftw3-dev libfftw3-bin \ + libxml2-16 libxml2-dev \ + hdf5-tools \ + libhdf5-dev \ + cmake \ + libboost-all-dev \ + && sudo apt-get clean + +# Utilities +sudo apt-get update && \ + sudo apt-get -qq install -y --no-install-recommends \ + apt-utils \ + locales \ + ca-certificates \ + wget \ + man \ + git \ + flex \ + ssh \ + sudo \ + vim \ + luarocks \ + munge \ + lcov \ + ccache \ + lua5.4 \ + python3-dev \ + python3-pip \ + valgrind \ + jq && \ + sudo rm -rf /var/lib/apt/lists/* + +# Compilers, autotools +sudo apt-get update && \ + sudo apt-get -qq install -y --no-install-recommends \ + build-essential \ + pkg-config \ + autotools-dev \ + libtool \ + libffi-dev \ + autoconf \ + automake \ + make \ + clang \ + clang-tidy \ + gcc \ + g++ && \ + sudo rm -rf /var/lib/apt/lists/* + +sudo pip install --upgrade --ignore-installed --break-system-packages \ + "markupsafe==2.0.0" \ + coverage cffi ply six pyyaml "jsonschema>=2.6,<4.0" \ + sphinx sphinx-rtd-theme sphinxcontrib-spelling + +sudo apt-get update && \ + sudo apt-get -qq install -y --no-install-recommends \ + libsodium-dev \ + libzmq3-dev \ + certbot \ + nginx \ + libczmq-dev \ + libjansson-dev \ + libmunge-dev \ + libncursesw5-dev \ + liblua5.2-dev \ + liblz4-dev \ + libsqlite3-dev \ + uuid-dev \ + libhwloc-dev \ + libs3-dev \ + libevent-dev \ + libarchive-dev \ + libpam-dev && \ + sudo rm -rf /var/lib/apt/lists/* + +# Testing utils and libs +sudo apt-get update && \ + sudo apt-get -qq install -y --no-install-recommends \ + faketime \ + libfaketime \ + pylint \ + cppcheck \ + enchant-2 \ + aspell \ + aspell-en && \ + sudo rm -rf /var/lib/apt/lists/* + +sudo locale-gen en_US.UTF-8 + +# NOTE: luaposix installed by rocks due to Ubuntu bug: #1752082 https://bugs.launchpad.net/ubuntu/+source/lua-posix/+bug/1752082 +sudo luarocks install luaposix + +# Install openpmix, prrte. Openpmix (pmix2) seems to be installed by hwloc, v5.x +sudo mkdir -p /opt/flux +sudo chown -R ubuntu /opt/flux +cd /opt/flux +git clone --recurse-submodules https://github.com/openpmix/prrte.git && \ + cd prrte && \ + git checkout v3.0.1 && \ + ./autogen.pl && \ + ./configure --prefix=/opt/prrte && \ + make -j && sudo make -j all install + +export LANG=C.UTF-8 +export FLUX_SECURITY_VERSION=0.15.0 + +cd /opt/flux +CCACHE_DISABLE=1 && \ + V=$FLUX_SECURITY_VERSION && \ + PKG=flux-security-$V && \ + URL=https://github.com/flux-framework/flux-security/releases/download && \ + wget ${URL}/v${V}/${PKG}.tar.gz && \ + tar xvfz ${PKG}.tar.gz && \ + cd ${PKG} && \ + ./configure --prefix=/usr --sysconfdir=/etc || cat config.log && \ + make -j 4 && \ + sudo make install && \ + cd .. && \ + rm -rf flux-security-* + +# Setup MUNGE directories & key +sudo mkdir -p /var/run/munge && \ + dd if=/dev/urandom bs=1 count=1024 > munge.key && sudo mv munge.key /etc/munge/munge.key && \ + sudo chown -R munge /etc/munge/munge.key /var/run/munge && \ + sudo chmod 600 /etc/munge/munge.key + +cd /opt/flux +export FLUX_CORE_VERSION=0.86.0 +wget https://github.com/flux-framework/flux-core/releases/download/v${FLUX_CORE_VERSION}/flux-core-${FLUX_CORE_VERSION}.tar.gz && \ + tar xzvf flux-core-${FLUX_CORE_VERSION}.tar.gz && \ + cd flux-core-${FLUX_CORE_VERSION} && \ + ./configure --prefix=/usr --sysconfdir=/etc && \ + make clean && \ + make -j && \ + sudo make install + +sudo apt-get update +sudo apt-get -qq install -y --no-install-recommends \ + libboost-graph-dev \ + libboost-system-dev \ + libboost-filesystem-dev \ + libboost-regex-dev \ + libyaml-cpp-dev \ + libedit-dev \ + libboost-dev \ + libyaml-cpp-dev \ + curl + +export FLUX_SCHED_VERSION=0.52.0 +cd /opt/flux +wget https://github.com/flux-framework/flux-sched/releases/download/v${FLUX_SCHED_VERSION}/flux-sched-${FLUX_SCHED_VERSION}.tar.gz && \ + tar -xzvf flux-sched-${FLUX_SCHED_VERSION}.tar.gz && \ + cd flux-sched-${FLUX_SCHED_VERSION} && \ + ./configure --prefix=/usr --sysconfdir=/etc && \ + make -j && \ + sudo make install && \ + sudo ldconfig + +sudo apt-get update && \ + sudo apt-get install -y libfftw3-dev libfftw3-bin pdsh libfabric-dev libfabric1 \ + openssh-client openssh-server \ + dnsutils telnet strace git g++ \ + unzip bzip2 + +# Additional debugging +sudo apt-get update && \ + sudo apt-get install -y pdsh \ + openssh-client openssh-server \ + dnsutils telnet strace \ + unzip bzip2 + +# Install oras for saving artifacts +export VERSION="1.2.0" && \ + curl -LO "https://github.com/oras-project/oras/releases/download/v${VERSION}/oras_${VERSION}_linux_arm64.tar.gz" && \ + mkdir -p oras-install/ && \ + tar -zxf oras_${VERSION}_*.tar.gz -C oras-install/ && \ + sudo mv oras-install/oras /usr/local/bin/ && \ + rm -rf oras_${VERSION}_*.tar.gz oras-install/ + +# Additional packages +sudo apt-get update && sudo apt-get install -y ibverbs-utils libibverbs-dev libibverbs1 && sudo apt-get clean + +sudo curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.42.0.tar.gz && \ + tar -xzvf aws-efa-installer-1.42.0.tar.gz && \ + rm -rf aws-efa-installer-1.42.0.tar.gz && \ + cd aws-efa-installer && \ + sudo ./efa_installer.sh --skip-kmod --yes + +export PATH=/opt/amazon/openmpi/bin/:$PATH +cd /opt/ +sudo git clone https://github.com/lammps/lammps.git && \ + sudo chown -R ubuntu /opt/lammps && \ + cd /opt/lammps && \ + git fetch --depth 1 origin a8687b53724b630fb5f454c8d7be9f9370f8bb3b && \ + git checkout FETCH_HEAD && \ + mkdir build && \ + cd build && \ + cmake ../cmake -D PKG_REAXFF=yes -D BUILD_MPI=yes -D PKG_OPT=yes -D FFT=FFTW3 -D MPI_CXX_COMPILER=mpicxx \ + -D CMAKE_INSTALL_PREFIX=/usr \ + && make && sudo make install + +# Flux curve.cert +# Ensure we have a shared curve certificate +flux keygen /tmp/curve.cert && \ + sudo mkdir -p /etc/flux/system && \ + sudo cp /tmp/curve.cert /etc/flux/system/curve.cert && \ + sudo chown ubuntu /etc/flux/system/curve.cert && \ + sudo chmod o-r /etc/flux/system/curve.cert && \ + sudo chmod g-r /etc/flux/system/curve.cert && \ + # Permissions for imp + sudo chmod u+s /usr/libexec/flux/flux-imp && \ + sudo chmod 4755 /usr/libexec/flux/flux-imp && \ + # /var/lib/flux needs to be owned by the instance owner + sudo mkdir -p /var/lib/flux && \ + sudo chown ubuntu -R /var/lib/flux + +# Install Usernetes +cd /opt +echo "START updating cgroups2" +cat /etc/default/grub | grep GRUB_CMDLINE_LINUX= +GRUB_CMDLINE_LINUX="" +sudo sed -i -e 's/^GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1"/' /etc/default/grub +sudo update-grub +sudo mkdir -p /etc/systemd/system/user@.service.d + +cd /opt/lammps +cat </dev/null +br_netfilter +vxlan +EOF + +sudo mv ./usernetes.conf /etc/modules-load.d/usernetes.conf +sudo systemctl restart systemd-modules-load.service +echo "DONE updating kernel modules" + +echo "START 99-usernetes.conf" +echo "net.ipv4.conf.default.rp_filter = 2" > /tmp/99-usernetes.conf +sudo mv /tmp/99-usernetes.conf /etc/sysctl.d/99-usernetes.conf +sudo sysctl --system +echo "DONE 99-usernetes.conf" + +echo "START modprobe" +sudo modprobe vxlan +sudo systemctl daemon-reload + +# https://github.com/rootless-containers/rootlesskit/blob/master/docs/port.md#exposing-privileged-ports +cp /etc/sysctl.conf ./sysctl.conf +echo "net.ipv4.ip_unprivileged_port_start=0" | tee -a ./sysctl.conf +echo "net.ipv4.conf.default.rp_filter=2" | tee -a ./sysctl.conf +sudo mv ./sysctl.conf /etc/sysctl.conf + +sudo sysctl -p +sudo systemctl daemon-reload +echo "DONE modprobe" + +echo "START kubectl" +cd /tmp +curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl" +chmod +x ./kubectl +sudo mv ./kubectl /usr/bin/kubectl +echo "DONE kubectl" + +echo "Installing docker" +curl -o install.sh -fsSL https://get.docker.com +chmod +x install.sh +sudo ./install.sh +echo "done installing docker" + +# https://github.com/docker/docs/issues/14491 +sudo apt install -y systemd-container + +sudo chown -R ubuntu /home/ubuntu +echo "Setting up usernetes" +echo "export PATH=/usr/bin:$PATH" >> ~/.bashrc +echo "export XDG_RUNTIME_DIR=/home/ubuntu/.docker/run" >> ~/.bashrc +# This wants to write into run, which is probably OK (under userid) +echo "export DOCKER_HOST=unix:///home/ubuntu/.docker/run/docker.sock" >> ~/.bashrc + +echo "Installing docker user" +sudo loginctl enable-linger ubuntu +ls /var/lib/systemd/linger +mkdir -p /home/ubuntu/.docker/run + +# This might show failure because it creates the docker.sock in /run/user/UID/docker.sock +# but then we link to the expected path below +sudo apt-get install -y uidmap +dockerd-rootless-setuptool.sh install +sleep 10 +systemctl --user enable docker.service +systemctl --user start docker.service + +# Not sure why this is happening, but it's starting here +# As long as docker run hello world works we are good! +ln -s /run/user/1000/docker.sock /home/ubuntu/.docker/run/docker.sock +docker run hello-world + +sudo sysctl -w net.ipv4.ip_unprivileged_port_start=0 +sysctl net.ipv4.ip_unprivileged_port_start # confirm it reads 0 + +# Write scripts to start control plane and worker nodes +# Clone usernetes and usernetes-python +git clone https://github.com/rootless-containers/usernetes ~/usernetes + +echo "Done installing docker user" +sudo chown ubuntu /etc/flux/system/curve.cert +sudo chown -R ubuntu /home/ubuntu + +# Additional requirements for Jupyter +export NB_USER=ubuntu +export NB_UID=1000 + +sudo apt-get install -y dnsutils \ + iputils-ping \ + python3 \ + python3-dev \ + python3-pip \ + python3-venv \ + tini + +sudo apt-get install -y python3-greenlet +pip3 install ruamel.yaml.clib --break-system-packages +wget https://gist.githubusercontent.com/vsoch/2b66b6f2b3885fc9c747e38cc73b78e2/raw/7d596101d87e20e55b5cac589acadb232b29ed3c/requirements.txt +sudo python3 -m pip install -r requirements.txt --break-system-packages +sudo python3 -m pip install ipykernel --break-system-packages +sudo python3 -m pip install pycurl --break-system-packages +sudo python3 -m pip install ipython --break-system-packages && sudo python3 -m IPython kernel install + +# Flux accounting +git clone https://github.com/flux-framework/flux-accounting && \ + cd flux-accounting && \ + ./autogen.sh && \ + ./configure --prefix=/usr && \ + make -j && sudo make install + +# This is for arm +wget https://nodejs.org/dist/v20.15.0/node-v20.15.0-linux-arm64.tar.xz && \ + sudo apt-get update && sudo apt-get install -y xz-utils && sudo rm -rf /var/lib/apt/lists/* && \ + xz -d -v node-v20.15.0-linux-arm64.tar.xz && \ + sudo tar -C /usr/local --strip-components=1 -xvf node-v20.15.0-linux-arm64.tar + +# sudo apt-get purge -y nodejs npm +# sudo apt-get autoremove -y +# curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - +# sudo apt-get install -y nodejs +# sudo rm -rf /usr/local/bin/node + +# This customizes the launcher UI +# https://jupyter-app-launcher.readthedocs.io/en/latest/usage.html +sudo python3 -m pip install jupyter_app_launcher --break-system-packages && \ +sudo python3 -m pip install --upgrade jupyter-server --break-system-packages && \ +sudo python3 -m pip install jupyter-launcher-shortcuts --break-system-packages && \ +sudo python3 -m pip install jupyterhub_idle_culler --break-system-packages +sudo mkdir -p /usr/local/share/jupyter/lab/jupyter_app_launcher +python3 -m pip install jupyterhub boto3 --break-system-packages +python3 -m pip install git+https://github.com/kubeflow/sdk.git@main#subdirectory=python --break-system-packages +sudo python3 -m pip install river riverapi --break-system-packages +sudo python3 -m pip install ipywidgets --break-system-packages + +# For Chapter 5: hybrid quantum-classical QAOA on AWS Braket SV1 +sudo python3 -m pip install amazon-braket-sdk scipy --break-system-packages + +sudo apt-get install -y bash-completion + +# This is for riverML +sudo python3 -m pip install river riverapi --break-system-packages + +# COPY ./tutorial /home/jovyan/ +# COPY ./docker/jupyter-launcher.yaml /usr/local/share/jupyter/lab/jupyter_app_launcher/jp_app_launcher.yaml +# ENV JUPYTER_APP_LAUNCHER_PATH=/usr/local/share/jupyter/lab/jupyter_app_launcher/ +# Give jovyan user permissions to tutorial materials +# RUN chmod -R 777 ~/ /home/jovyan +# COPY ./docker/flux-icon.png $HOME/flux-icon.png +# note that previous examples are added via git volume in config.yaml +# ENV SHELL=/usr/bin/bash +# ENV FLUX_URI_RESOLVE_LOCAL=t +# This is for JupyterHub +# COPY ./docker/entrypoint.sh /entrypoint.sh +# This is for a local start +# COPY ./docker/start.sh /start.sh +mkdir -p $HOME/.local/share && \ +chmod 777 $HOME/.local/share + +# Quick setup of flux-accounting (not working due to needing system service) +# RUN flux start /bin/bash -c "nohup flux account create-db && flux account-service & flux account add-bank root 1" && \ +# flux start flux account add-bank --parent-bank=root default 1 && \ +# flux start flux account add-user --username=jovyan --bank=default && \ +# flux start flux jobtap load mf_priority.so && \ +# flux start flux account-update-db + +# sudo rm /usr/local/bin/node +sudo npm install -g configurable-http-proxy +# CMD ["flux", "start", "--test-size=4", "jupyter", "lab"] +# +# Build usernetes image +cd /home/ubuntu/usernetes +docker build -t usernetes_node . +# At this point we have what we need! diff --git a/2026/HPCIC-AWS/ec2/docker-compose.yaml b/2026/HPCIC-AWS/ec2/docker-compose.yaml new file mode 100644 index 00000000..c4394bfa --- /dev/null +++ b/2026/HPCIC-AWS/ec2/docker-compose.yaml @@ -0,0 +1,61 @@ +# Use `make up`, not `docker compose up`, +# as this YAML requires ${...} variables to be set. +--- +services: + node: + image: usernetes_node + #build: . + hostname: ${NODE_NAME} + privileged: true + restart: always + networks: + default: + ipv4_address: ${NODE_IP} + ports: + # This maps Host Port 80 to Container Port 80 + - "80:80" + # : + # etcd (default: 2379) + - ${PORT_ETCD}:${PORT_ETCD} + # kube-apiserver (default: 6443) + - ${PORT_KUBE_APISERVER}:${PORT_KUBE_APISERVER} + # kubelet (default: 10250) + - ${PORT_KUBELET}:${PORT_KUBELET} + # flannel (default: 8472) + - ${PORT_FLANNEL}:${PORT_FLANNEL}/udp + volumes: + - .:/usernetes:ro + - /boot:/boot:ro + - /lib/modules:/lib/modules:ro + - node-var:/var + - node-opt:/opt + - node-etc:/etc + - type: tmpfs + target: /run + - type: tmpfs + target: /tmp + working_dir: /usernetes + environment: + KUBECONFIG: /etc/kubernetes/admin.conf + HOST_IP: ${HOST_IP} + sysctls: + - net.ipv4.ip_forward=1 + # In addition, `net.ipv4.conf.default.rp_filter` + # has to be set to 0 (disabled) or 2 (loose) + # in the daemon's network namespace. + annotations: + # Accelerate network for nerdctl >= 2.0.0-beta.4 with bypass4netns >= 0.4.1 + "nerdctl/bypass4netns": "${BYPASS4NETNS:-false}" + "nerdctl/bypass4netns-ignore-bind": "true" + "nerdctl/bypass4netns-ignore-subnets": "${BYPASS4NETNS_IGNORE_SUBNETS:-}" +networks: + default: + ipam: + config: + # Each of the nodes has to have a different IP. + # The node IP here is not accessible from other nodes. + - subnet: ${NODE_SUBNET} +volumes: + node-var: {} + node-opt: {} + node-etc: {} diff --git a/2026/HPCIC-AWS/ec2/ec2_spawner.py b/2026/HPCIC-AWS/ec2/ec2_spawner.py new file mode 100644 index 00000000..9826ab05 --- /dev/null +++ b/2026/HPCIC-AWS/ec2/ec2_spawner.py @@ -0,0 +1,313 @@ +import asyncio + +import boto3 +from jupyterhub.spawner import Spawner +from traitlets import Bool, Dict, List, Unicode + +# The default AMI disk size is small and we get disk pressure +# So let's try increasing. +desired_root_volume_size_gb = 256 + +# Define the block device mappings - note that lsblk will show /dev/nvme0n1 but it's this one +block_device_mappings = [ + { + "DeviceName": "/dev/sda1", + "Ebs": { + "VolumeSize": desired_root_volume_size_gb, + "DeleteOnTermination": True, + "VolumeType": "gp2", + }, + } +] + + +class EC2Spawner(Spawner): + """ + A Spawner for JupyterHub that launches a user's server on a new EC2 instance. + """ + + ami = Unicode( + "ami-06cebbfb446ee0ceb", + config=True, + help="The AMI ID for the Flux + Usernetes VM.", + ) + + # The EC2 instance type + instance_type = Unicode( + "hpc7g.16xlarge", config=True, help="The EC2 instance type." + ) + + # Always need the region + region = Unicode("us-east-1", config=True, help="Region to deploy instance to") + + # The name of the EC2 key pair (leaving empty to not allow access) + key_name = Unicode( + "", config=True, help="The name of the EC2 key pair for ssh access." + ) + + # List of security group IDs + security_group_ids = List( + [], config=True, help="List of security group IDs for the instance." + ) + + # The IAM instance profile to attach to the instance + iam_instance_profile_arn = Unicode( + "", + config=True, + help="The ARN of the IAM instance profile to attach to the instance.", + ) + + # Tags to apply to the instance + instance_tags = Dict( + {"ManagedBy": "JupyterHub"}, + config=True, + help="Tags to apply to the spawned EC2 instance.", + ) + + # The subnet to launch the instance in + subnet_id = Unicode( + "", config=True, help="The subnet ID to launch the instance in." + ) + + # We need to save the instance ID to be able to stop and poll it later. + instance_id = Unicode() + + def _get_user_data(self): + """ + Generates the UserData script to start the jupyter-lab server. + This version correctly handles single quotes in environment variables. + """ + user = "ubuntu" + + # Get environment variables from JupyterHub + env_vars = self.get_env() + + # Properly escape single quotes within environment variable values + # before wrapping them in single quotes for the export command. + env_export_cmds = [] + for key, value in env_vars.items(): + # 1. Convert value to string + value_str = str(value) + # 2. Escape any single quotes by replacing ' with '\'' + escaped_value = value_str.replace("'", r"'\''") + # 3. Create the export command + env_export_cmds.append(f"export {key}='{escaped_value}'") + + # The user under which the jupyter-lab server will run + # Script is written to: /var/lib/cloud/instance/scripts/part-001 + script = f"""#!/bin/bash +exec >> /var/log/user-data.log 2>&1 +date +# This should be the script path +echo "$0" + +# Load modules for usernetes +sudo modprobe ip6_tables +sudo modprobe ip6table_nat +sudo modprobe iptable_nat +sudo chown -R ubuntu /home/ubuntu + +# Just in case... +rm -rf ~/.aws + +# Someone is going to type this +# sudo ln -s $(which python3) /usr/bin/python + +# Clone repository tutorials, expose tutorial notebooks +mkdir -p /home/ubuntu/.local/share/jupyter/jupyter_app_launcher /home/ubuntu/.jupyter/lab/static /srv/jupyterlab/static +git clone --depth 1 -b hpcic-2026 https://github.com/flux-framework/Tutorials /tmp/tutorials +cp -R /tmp/tutorials/2026/HPCIC-AWS/tutorial /home/ubuntu/tutorial +cp /tmp/tutorials/2026/HPCIC-AWS/ec2/jupyter-launcher.yaml /home/ubuntu/.local/share/jupyter/jupyter_app_launcher/jp_app_launcher.yaml +sudo chown -R ubuntu /home/ubuntu/.local/share/jupyter + +cp /tmp/tutorials/2026/HPCIC-AWS/ec2/start-usernetes.sh /home/ubuntu/start-usernetes.sh +chmod +x /home/ubuntu/start-usernetes.sh +sudo chown -R ubuntu /home/ubuntu/ + +# We need to stop nginx if it's running +sudo systemctl stop nginx || true +sudo systemctl disable nginx || true + +sudo rm -rf /home/ubuntu/.jupyter/lab/workspaces +sudo mkdir -p /home/ubuntu/.jupyter/lab/workspaces +sudo chown -R ubuntu /home/ubuntu + +# Use sudo to switch to the user and bash to execute the script +sudo -i -u {user} bash << 'EOF' +#!/bin/bash +set -euo pipefail + +echo "Running as user $(whoami) in $(pwd)" + +# Export all the necessary environment variables for this shell +{chr(10).join(env_export_cmds)} + +echo "Starting JupyterLab..." + +export PYTHONPATH=/usr/lib/python3.12/site-packages +cd /home/ubuntu + +flux start --test-size=4 /usr/local/bin/jupyter-lab \\ + --ip=0.0.0.0 \\ + --port=8888 \\ + --notebook-dir=/home/ubuntu \\ + --preferred-dir=/home/ubuntu \\ + --IdentityProvider.token="" \\ + --ServerApp.password="" \\ + --ServerApp.base_url=$JUPYTERHUB_SERVICE_PREFIX \\ + --JupyterLabApp.hub_api_url=$JUPYTERHUB_API_URL \\ + --JupyterLabApp.hub_activity_url=$JUPYTERHUB_ACTIVITY_URL \\ + --JupyterLabApp.hub_prefix=$JUPYTERHUB_BASE_URL + +echo "JupyterLab command finished." +EOF + +echo "UserData Script Finished ---" +date +""" + return script + + async def start(self): + """ + Start the user's EC2 instance. + """ + self.log.info(f"User {self.user.name}: Requesting to start EC2 instance.") + + ec2 = boto3.resource("ec2", region_name=self.region) + + # Create a unique tag for this user's instance + tags = self.instance_tags.copy() + tags["jupyterhub-user"] = self.user.name + + tag_spec = [ + { + "ResourceType": "instance", + "Tags": [{"Key": k, "Value": v} for k, v in tags.items()], + } + ] + try: + instance = ec2.create_instances( + ImageId=self.ami, + InstanceType=self.instance_type, + KeyName=self.key_name, + BlockDeviceMappings=block_device_mappings, + SecurityGroupIds=self.security_group_ids, + SubnetId=self.subnet_id, + IamInstanceProfile={"Arn": self.iam_instance_profile_arn}, + TagSpecifications=tag_spec, + UserData=self._get_user_data(), + MinCount=1, + MaxCount=1, + )[0] + except Exception as e: + self.log.error( + f"Failed to create EC2 instance for user {self.user.name}: {e}" + ) + raise e + + self.instance_id = instance.id + self.log.info(f"User {self.user.name}: Started instance {self.instance_id}") + + # Wait for the instance to be in 'running' state + self.log.info( + f"User {self.user.name}: Waiting for instance {self.instance_id} to be running..." + ) + + # Poll until the instance is running and has an IP + while True: + await asyncio.sleep(5) + instance.reload() + + if instance.state["Name"] == "running": + if instance.public_ip_address: + self.log.info( + f"User {self.user.name}: Instance {self.instance_id} is running at IP {instance.public_ip_address}" + ) + # Return the IP and port for JupyterHub to proxy to + return (instance.public_ip_address, 8888) + else: + self.log.info( + f"User {self.user.name}: Instance running but waiting for public IP..." + ) + elif instance.state["Name"] in [ + "shutting-down", + "terminated", + "stopping", + "stopped", + ]: + error_msg = f"Instance {self.instance_id} entered state '{instance.state['Name']}' unexpectedly." + self.log.error(error_msg) + raise RuntimeError(error_msg) + + async def stop(self, now=False): + """ + Stop and terminate the user's EC2 instance. + """ + if not self.instance_id: + self.log.info(f"User {self.user.name}: No instance ID found to stop.") + return + + self.log.info( + f"User {self.user.name}: Requesting to terminate instance {self.instance_id}" + ) + ec2 = boto3.resource("ec2", region_name=self.region) + instance = ec2.Instance(self.instance_id) + + try: + instance.terminate() + self.log.info( + f"User {self.user.name}: Successfully terminated instance {self.instance_id}" + ) + except Exception as e: + # Handle cases where instance might already be terminated + if "InvalidInstanceID.NotFound" in str(e): + self.log.warning(f"Instance {self.instance_id} already terminated.") + else: + self.log.error(f"Failed to terminate instance {self.instance_id}: {e}") + raise e + + self.clear_state() + + async def poll(self): + """ + Check if the EC2 instance is still running. + Returns: + None if the instance is running. + 0 if the instance is stopped or terminated. + """ + if not self.instance_id: + return 0 # Not running + + ec2 = boto3.resource("ec2", region_name=self.region) + instance = ec2.Instance(self.instance_id) + + try: + instance.reload() + state = instance.state["Name"] + self.log.debug(f"Polling instance {self.instance_id}, state is: {state}") + + if state == "running": + return None # Still running + else: + return 0 # Not running (stopped, terminated, etc.) + except Exception: + # Instance not found, so it's not running + self.log.warning( + f"Polling failed for instance {self.instance_id}. Assuming it's terminated." + ) + return 0 + + # JupyterHub can remember the instance ID across restarts. + def load_state(self, state): + super().load_state(state) + self.instance_id = state.get("instance_id", "") + + def get_state(self): + state = super().get_state() + if self.instance_id: + state["instance_id"] = self.instance_id + return state + + def clear_state(self): + super().clear_state() + self.instance_id = "" diff --git a/2026/HPCIC-AWS/ec2/jupyter-launcher.yaml b/2026/HPCIC-AWS/ec2/jupyter-launcher.yaml new file mode 100644 index 00000000..da9d3740 --- /dev/null +++ b/2026/HPCIC-AWS/ec2/jupyter-launcher.yaml @@ -0,0 +1,112 @@ +- title: Flux Tutorial Notebook + description: This is the main Flux Framework Tutorial + type: jupyterlab-commands + icon: ./static/flux-icon.png + source: + - label: Flux Tutorial + id: 'filebrowser:open-path' + args: + path: ./tutorial/ch1/01_flux_tutorial.ipynb + icon: ./static/flux-icon.png + catalog: Notebook + +- title: Flux Python SDK Tutorial + description: This notebook will teach you about the Flux Python SDK + type: jupyterlab-commands + icon: ./static/flux-icon.png + source: + - label: Flux Tutorial + id: 'filebrowser:open-path' + args: + path: ./tutorial/ch2/02_flux_framework.ipynb + icon: ./static/flux-icon.png + catalog: Notebook + +- title: Flux Process, Monitoring, Utilities Tutorial + description: This will teach you about Flux utilities + type: jupyterlab-commands + icon: ./static/flux-icon.png + source: + - label: Flux Tutorial + id: 'filebrowser:open-path' + args: + path: ./tutorial/ch3/03_flux_tutorial.ipynb + icon: ./static/flux-icon.png + catalog: Notebook + +- title: Flux Framework and User-space Kubernetes + description: This will teach you about running AI/ML workloads with Flux and Kubernetes + type: jupyterlab-commands + icon: ./static/flux-icon.png + source: + - label: Flux Tutorial + id: 'filebrowser:open-path' + args: + path: ./tutorial/ch4/04_flux_framework_usernetes.ipynb + icon: ./static/flux-icon.png + catalog: Notebook + +- title: Flux Framework and Quantum Computing with AWS Braket + description: This will teach you about running hybrid quantum-classical workflows with Flux and AWS Braket + type: jupyterlab-commands + icon: ./static/flux-icon.png + source: + - label: Flux Tutorial + id: 'filebrowser:open-path' + args: + path: ./tutorial/ch5/05_flux_quantum_braket.ipynb + icon: ./static/flux-icon.png + catalog: Notebook + +- title: Flux Framework Portal + description: Flux Framework portal for projects, releases, and publication. + source: https://flux-framework.org/ + type: url + catalog: Flux Resources + args: + sandbox: [ 'allow-same-origin', 'allow-scripts', 'allow-downloads', 'allow-modals', 'allow-popups'] +- title: Flux Documentation + source: https://flux-framework.readthedocs.io/en/latest/ + type: url + catalog: Flux Resources + args: + sandbox: [ 'allow-same-origin', 'allow-scripts', 'allow-downloads', 'allow-modals', 'allow-popups'] +- title: Flux Cheat Sheet + source: https://flux-framework.org/cheat-sheet/ + type: url + catalog: Flux Resources + args: + sandbox: [ 'allow-same-origin', 'allow-scripts', 'allow-downloads', 'allow-modals', 'allow-popups'] +- title: Flux Glossary of Terms + source: https://flux-framework.readthedocs.io/en/latest/glossary.html + type: url + catalog: Flux Resources + args: + sandbox: [ 'allow-same-origin', 'allow-scripts', 'allow-downloads', 'allow-modals', 'allow-popups'] +- title: Flux Comics + source: https://flux-framework.readthedocs.io/en/latest/comics/fluxonomicon.html + description: come and meet FluxBird - the pink bird who knows things! + type: url + catalog: Flux Resources + args: + sandbox: [ 'allow-same-origin', 'allow-scripts', 'allow-downloads', 'allow-modals', 'allow-popups'] +- title: Flux Learning Guide + source: https://flux-framework.readthedocs.io/en/latest/guides/learning_guide.html + description: learn about what Flux does, how it works, and real research applications + type: url + catalog: Flux Resources + args: + sandbox: [ 'allow-same-origin', 'allow-scripts', 'allow-downloads', 'allow-modals', 'allow-popups'] +- title: Getting Started with Flux and Go + source: https://converged-computing.github.io/flux-go + type: url + catalog: Flux Resources + args: + sandbox: [ 'allow-same-origin', 'allow-scripts', 'allow-downloads', 'allow-modals', 'allow-popups'] +- title: Getting Started with Flux in C + source: https://converged-computing.github.io/flux-c-examples/ + description: ...looking for contributors! + type: url + catalog: Flux Resources + args: + sandbox: [ 'allow-same-origin', 'allow-scripts', 'allow-downloads', 'allow-modals', 'allow-popups'] diff --git a/2026/HPCIC-AWS/ec2/jupyterhub-braket-policy.json b/2026/HPCIC-AWS/ec2/jupyterhub-braket-policy.json new file mode 100644 index 00000000..806852c6 --- /dev/null +++ b/2026/HPCIC-AWS/ec2/jupyterhub-braket-policy.json @@ -0,0 +1,42 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "BraketSV1DeviceScoped", + "Effect": "Allow", + "Action": [ + "braket:GetDevice", + "braket:CreateQuantumTask" + ], + "Resource": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + { + "Sid": "BraketTaskPollingAndSearch", + "Effect": "Allow", + "Action": [ + "braket:GetQuantumTask", + "braket:SearchQuantumTasks", + "braket:CancelQuantumTask", + "braket:SearchDevices" + ], + "Resource": "*" + }, + { + "Sid": "BraketResultsBucket", + "Effect": "Allow", + "Action": [ + "s3:CreateBucket", + "s3:ListBucket", + "s3:GetBucketLocation", + "s3:PutObject", + "s3:GetObject", + "s3:PutBucketPublicAccessBlock", + "s3:PutBucketPolicy" + ], + "Resource": [ + "arn:aws:s3:::amazon-braket-*", + "arn:aws:s3:::amazon-braket-*/*" + ] + } + ] +} diff --git a/2026/HPCIC-AWS/ec2/jupyterhub-ec2-policy.json b/2026/HPCIC-AWS/ec2/jupyterhub-ec2-policy.json new file mode 100644 index 00000000..cd347f1c --- /dev/null +++ b/2026/HPCIC-AWS/ec2/jupyterhub-ec2-policy.json @@ -0,0 +1,16 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:RunInstances", + "ec2:TerminateInstances", + "ec2:DescribeInstances", + "ec2:DescribeInstanceStatus", + "ec2:CreateTags" + ], + "Resource": "*" + } + ] +} diff --git a/2026/HPCIC-AWS/ec2/jupyterhub-passrole-policy.json b/2026/HPCIC-AWS/ec2/jupyterhub-passrole-policy.json new file mode 100644 index 00000000..133d0c76 --- /dev/null +++ b/2026/HPCIC-AWS/ec2/jupyterhub-passrole-policy.json @@ -0,0 +1,10 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "iam:PassRole", + "Resource": "arn:aws:iam::633731392008:role/JupyterHub-EC2-Manager-Role" + } + ] +} diff --git a/2026/HPCIC-AWS/ec2/jupyterhub_config.py b/2026/HPCIC-AWS/ec2/jupyterhub_config.py new file mode 100644 index 00000000..b1a535cc --- /dev/null +++ b/2026/HPCIC-AWS/ec2/jupyterhub_config.py @@ -0,0 +1,173 @@ +# jupyterhub_config.py +# +# Configuration for JupyterHub running on a dedicated EC2 instance, +# spawning single-user servers on separate EC2 instances. +# +# This file should be placed in the same directory as ec2_spawner.py +# and where you run the 'jupyterhub' command. +# +# Assumed Directory Structure: +# /srv/jupyterhub/ +# ├── jupyterhub_config.py (this file) +# └── ec2_spawner.py (the custom spawner class file) + +import os +import sys + +# c is a global traitlets config object that JupyterHub provides. +c = get_config() + +# ----------------------------------------------------------------------------- +# Core JupyterHub Settings +# ----------------------------------------------------------------------------- + +# Tell JupyterHub to use your custom spawner class. +# We add '.' to the path to make sure Python can find ec2_spawner.py +# in the current directory. +sys.path.insert(0, os.path.dirname(__file__)) +c.JupyterHub.spawner_class = "ec2_spawner.EC2Spawner" + +# Custom login page +c.JupyterHub.template_paths = ["/srv/jupyterhub/templates"] +c.JupyterHub.static_paths = ["/srv/jupyterhub/static"] + +# IP and Port for the Hub to listen on. +# '0.0.0.0' makes it listen on all network interfaces. +c.JupyterHub.hub_ip = "127.0.0.1" +c.JupyterHub.hub_port = 8081 +c.JupyterHub.ip = "0.0.0.0" +c.JupyterHub.port = 443 +c.JupyterHub.hub_connect_url = "http://127.0.0.1:8081" + +# Hub and proxy are on the same machine +c.JupyterHub.internal_ssl = False + +# When you add ssl, put the certs here and uncomment the below lines. +# Also comment out he proxy api ip and port above. +c.JupyterHub.ssl_cert = ( + "/etc/letsencrypt/live/tutorial.flux-framework.org/fullchain.pem" +) +c.JupyterHub.ssl_key = ( + "/etc/letsencrypt/live/tutorial.flux-framework.org/privkey.pem" +) + +# The public IP of this Hub machine. +hub_connect_ip = os.environ.get("HUB_CONNECT_IP") +if not hub_connect_ip: + raise RuntimeError( + "HUB_CONNECT_IP environment variable must be set to the private IP of the Hub instance." + ) +c.JupyterHub.hub_connect_ip = hub_connect_ip + + +# ----------------------------------------------------------------------------- +# Authenticator Settings +# ----------------------------------------------------------------------------- +# For a tutorial, DummyAuthenticator is simple. Users can enter any username +# and the password specified below. +# For production, you would switch to OAuthenticator (e.g., with GitHub or Google). +c.JupyterHub.authenticator_class = "dummy" +c.DummyAuthenticator.password = "REPLACEME" + +# Grant admin rights to a specific user for monitoring and management. +c.Authenticator.admin_users = {"admin"} + +# We need to make this longer for usernetes to start +c.Spawner.start_timeout = 300 +c.Spawner.http_timeout = 300 +c.EC2Spawner.http_timeout = 300 +c.EC2Spawner.start_timeout = 300 + +# ----------------------------------------------------------------------------- +# Custom EC2Spawner Settings +# ----------------------------------------------------------------------------- +# These are the settings for your custom ec2_spawner.py class. + +# The AMI ID for the tutorial user VM. This AMI should have Python, JupyterLab, +# Usernetes, and all tutorial dependencies pre-installed. +c.EC2Spawner.ami = "ami-04fde965376f2d904" + +# Instance type for each user's server. +# 't4g.2xlarge' is what had a maximum fom per core ratio in my experiments +c.EC2Spawner.instance_type = "hpc7g.16xlarge" + +# The name of the EC2 key pair for SSH access (for debugging). +# We should remove this for actual tutorial. +c.EC2Spawner.key_name = "dinosaur" +c.Spawner.notebook_dir = "/home/ubuntu" + +# Security Group for the spawned instances. Must allow port 8888 ingress +# from this Hub's security group, and port 22 for SSH access. +c.EC2Spawner.security_group_ids = ["sg-0ddfbe3cd0f9253d3"] + +# The VPC subnet to launch the instances in. Must have internet access. +c.EC2Spawner.subnet_id = "subnet-0b0e2408f9960d3f6" + +# The IAM role for the *spawned* user instances. This role can grant permissions +# to S3, etc., if the tutorial needs it. This is attached to the user VM. +c.EC2Spawner.iam_instance_profile_arn = ( + "arn:aws:iam::633731392008:instance-profile/JupyterHub-EC2-Manager-Profile" +) + +# Custom tags to apply to each spawned EC2 instance for tracking. +c.EC2Spawner.instance_tags = { + "ManagedBy": "JupyterHub", + "Project": "HPCIC-2025-Tutorial", + "Purpose": "User-Server", +} + + +# ----------------------------------------------------------------------------- +# Service: Idle Culler +# ----------------------------------------------------------------------------- +# Shut down (and terminate, via our spawner's stop() method) idle user servers. + +c.JupyterHub.load_roles = [ + { + "name": "jupyterhub-idle-culler-role", + "scopes": [ + "list:users", + "read:users:activity", + "delete:servers", + # The admin:servers scope is required for the culler to see and stop all servers. + "admin:servers", + ], + "services": ["jupyterhub-idle-culler-service"], + } +] + +c.JupyterHub.services = [ + { + "name": "jupyterhub-idle-culler-service", + "admin": True, # The service needs admin permissions to stop other user's servers + "command": [ + sys.executable, + "-m", + "jupyterhub_idle_culler", + # Timeout in seconds. 3600 = 1 hour. + # Set this to a value appropriate for your tutorial. + "--timeout=3600", + # Check every 5 minutes + "--cull-every=300", + ], + } +] + +# ----------------------------------------------------------------------------- +# Persistence +# ----------------------------------------------------------------------------- +# Store the JupyterHub database in a persistent location on the Hub VM. +# This ensures that if you restart JupyterHub, it remembers active users and their +# associated EC2 instance IDs. +c.JupyterHub.db_url = "sqlite:////srv/jupyterhub/jupyterhub.sqlite" + +# ----------------------------------------------------------------------------- +# Other Optional Settings +# ----------------------------------------------------------------------------- + +# Concurrent spawn limit to prevent runaway costs if many people log in at once +c.JupyterHub.concurrent_spawn_limit = 120 + +# Memory limit for the Hub process itself (not the user servers). +# The default is usually fine. +# c.JupyterHub.cookie_secret_file = '/srv/jupyterhub/jupyterhub_cookie_secret' # Optional, but good practice diff --git a/2026/HPCIC-AWS/ec2/login.html b/2026/HPCIC-AWS/ec2/login.html new file mode 100644 index 00000000..d997a0f5 --- /dev/null +++ b/2026/HPCIC-AWS/ec2/login.html @@ -0,0 +1,168 @@ +{% extends "page.html" %} +{% if announcement_login is string %} + {% set announcement = announcement_login %} +{% endif %} + +{% block login_widget %} +{% endblock %} + +{% block stylesheet %} +{{ super() }} + +{% endblock %} + +{% block main %} + +{% block login %} +
+{% block login_container %} + +
+ + + +
+

Flux Tutorial running on AWS

+ +
+
+
+

Sign in

+
+
+ + + + {% if login_error %} + + {% endif %} + + + + + + + + + {% block login_terms %} + {% if login_term_url %} + + {% endif %} + {% endblock login_terms %} + +
+
+
+{% endblock login_container %} +
+{% endblock login %} + +{% endblock %} + +{% block script %} +{{ super() }} + +{% endblock %} diff --git a/2026/HPCIC-AWS/ec2/start-usernetes.sh b/2026/HPCIC-AWS/ec2/start-usernetes.sh new file mode 100644 index 00000000..ab8d78e8 --- /dev/null +++ b/2026/HPCIC-AWS/ec2/start-usernetes.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +cd /home/ubuntu/usernetes +docker rmi usernetes_node +docker build --no-cache -t usernetes_node . +cd - + +make -C /home/ubuntu/usernetes up +sleep 10 +make -C /home/ubuntu/usernetes kubeadm-init +sleep 10 +make -C /home/ubuntu/usernetes install-flannel +make -C /home/ubuntu/usernetes kubeconfig +export KUBECONFIG=/home/ubuntu/usernetes/kubeconfig + +# Untaint the control plane to schedule jobs, etc. on +echo " 🍑 Untainting control plane and labeling node" +control_plane_node=$(kubectl get nodes -l node-role.kubernetes.io/control-plane -o jsonpath='{.items[0].metadata.name}' 2>/dev/null) + +# Ensure the user interacts with default kubeconfig +sudo cp /home/ubuntu/usernetes/kubeconfig /home/ubuntu/.kube/config + +# Taint away! +kubectl taint node "${control_plane_node}" node-role.kubernetes.io/control-plane:NoSchedule- +kubectl label node "${control_plane_node}" node.kubernetes.io/exclude-from-external-load-balancers- + +# This ensures the node is ingress ready +kubectl label node u7s-$(hostname) ingress-ready=true + +echo "Cluster is ready. 🤓" +# echo "export KUBECONFIG=/home/ubuntu/usernetes/kubeconfig" + diff --git a/2026/HPCIC-AWS/tutorial/.gitignore b/2026/HPCIC-AWS/tutorial/.gitignore new file mode 100644 index 00000000..3ebb2aab --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/.gitignore @@ -0,0 +1,2 @@ +flux*.out +.ipynb_checkpoints diff --git a/2026/HPCIC-AWS/tutorial/README.md b/2026/HPCIC-AWS/tutorial/README.md new file mode 100644 index 00000000..9001bfd9 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/README.md @@ -0,0 +1,3 @@ +# Final Survey + +Please go to: https://converged-computing.org/community-survey-2025 for our 2025 survey. diff --git a/2026/HPCIC-AWS/tutorial/assets/Flux-logo.svg b/2026/HPCIC-AWS/tutorial/assets/Flux-logo.svg new file mode 100644 index 00000000..f2d126bb --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/Flux-logo.svg @@ -0,0 +1 @@ +Flux-logo-3 \ No newline at end of file diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-icon.png b/2026/HPCIC-AWS/tutorial/assets/flux-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d50aa52d32a78c54ffcbd597b84d489fa3d80ae7 GIT binary patch literal 117673 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

1EHvr9mpbNpSP2MBiWfYkH?TkxkzQ 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 z zZ@-AkskBvr@~Kjd`Ry|l8#1TKd^7vl*yj;ya z6sE4fC=5sC09)uRNVylQyc-K>tRVG~x8Bb)U8Tklo||C54KIjRrN6Ltn#`V%dUZ4f z8XvWIY#eXq^@=qYBs%aywz1*rw&wsN6jH0~XT_O(ag57+aGYK^@mdwPnP>k_{LKU} zOKw*t;YY{$48nTyn<;+Jw>WX|?}|jU!-T{L^tJDF)bHP=*2iUbC1Zcu1Fu?@7H zPi_+Fdeer~RVz*Ih0Dc{v$}Lt4qdUfz|J_-w%6_pX$1P{>cjoYmki4+SKh&2U)Xi*%ADC z%T55N!|neSw}4Z^S&C3@n*21)R%_SG%@BdMEl4n+-GqdVcKq$ygM4A1USmeejIf{H z?Pa9wwiLGLsUjEw2{Wd(YeIMl@-4#1Gd0ZZ7!>)hA}_imPyZ{!Je{E!mMiF9JN^G? zy6S+any-C<1s17AQes&`L8J}3yAe>3E(Ph9W|vk{k&s3SK|w&eLkUSiLh0^K$#3xe zeSfmtJ9SSy=Q(F)zVUxZkww4_^ONz6aLOF)SN!oeLx037PqJ-Dy4+OCdFfU>!>t65 zNvgWc8cf_-n4fXN0&qx6^5D!&|j|zm6PBO*9zaClrhMt&B($=2`#2S{StxD@acU3*Hps`{WoiW7JFR z-#1XuvY*3_qxMm^<$eD;UiuJhjNV&Fs7F8AVSt2C3gwi=4RdVVR6fA>ad0aNWwYQg z^R3gB645f~xt$~bM%k-$I>SIPUxTh(Fixyvh5A$Hb26HB&-(ac1PuFeL9U$9bfA4 z`MHj82n#_WiZ!VNx$`hR{KNB<`tupudlPkPDz@?Y*j9>bDnTc^o0&oFA0FwX(CU}K zyYay^HFIoiEW+M9UzwQ8xv8zg#i+4`9+nNk8kFHnb#l6u6`P3n@*Csw_}cXj>q;C8 zrYYZEFn^IVRjn;Z)OOi(!0M24ijXWXQ<~?{J;C!R_%hPNa?)C~{N2>zgA^8V{+^4} zV9QV*t{u;Nb%@Tz5Vm?fa@m04H5?mrZKrfQKG8V)+2*P4q)}UEjrPc5&Yi9lvS62)7A@RD-FmC*Y@U3@zXGuM$h%Vu1k7gE3?y$E3twl=-Au|SX1Z6OP*Kt`o1dppe7vUQ1_ zZ*tN1xI7A%mbh3se&fC6K?X+@3>L# z`lope%nLC-v9&TNhOZ;QheqVs{Q2@$7%{N-w`seGy-i}F>@I&2UiH9N&8bj^s%*pK zy1CK$y1RNm1M@_{q$J-KtTe~27UNYI`>qE}?ln3%O&3ux=aIHfYsZ#79$^zbFV(cW zXSjJ&&90k$xRQl)f4#%Ys@R-tR16FYC0)x|CzuWkP^x;Q9?@K#t+m;AIf?c6hnIHv zo8QfMMb##Ry7EK_GwZeP6La9!tP~WQcuYG`sGH#RnXzpr&?`7&$t#MPrbjf1Q(@|v z$Y9u#v^43dRIaS7POmWDk_%(KUL&z^Y^NXgBZe1=V;&Mo<*ld zWLzgP+WC2*`18!ldZ&V*;#a5O5dC^$Eqb(X%A zn?_P$7JsV_08SlC^=Hqk1 z!GvY9?5=y6dQ#I-xuBxF8N2_E?T(v1;b-2&#!(1YX~wl+3Xfhk)>OWoCcSdEX>H86 zr%X%P1eugQ-0@lK{{2T0+8?t%@#tpw_G!GqTl}UOHEgJL`^dmY(<#~z&*A7sY}gnu zqi?M0^*CWAoN4^sj3O7)Rt@}l`-KK0b${_2zIqLwh+OPl9>xWe_(h zU80-!2bFSE@2-aDl%IUmS{2t;KrJQfx?w_4#!Ic28;+NaQ>PJ))r;FDbJfUHfrgn> zQm(T@o-+;w(G&zXVZc6vKtAdCzD(T?o%yzmj|srvB0H#u@K$&9ALHi{Fcm%cY+2=H zZ$^Oo<(vr@wVSMi9=*o0*>Da*ziqwFJfeY9mDW0`*#r6K9DIb;?jX6%YkCmJgWxJK zhF^VWlNp!4STZhGGxUY8`%tyV5u}Io2FKz7ixbf$iOX*|_&t!97nchqXBzB%3kXBeMyFowM2w14kiD*3q>->nW}MaK?w0JwkFoGK``Mfg*5`l{yIMaRARM`_s2e^D={H3&`tk z8*=y`cnuQ!kpdLwUAok^v09+Qqs5A|$yfKaD&9d}SW#K8uIw>S%^1|#sGtXzZ)ugA zejYKW^y~JUzUR|`zW88(c=ROHKnn5FHCc!(&qy!m*O=DkbwKhgQI#&X2 z5$^;0G3I~1F%prQt(CrWK(nai;j?zsC_-PYvX4UyBW#ug%llexT5i>VUgLe$*|aU~ zs1|iqa7bq3HM@ItwDr975lnt>ChBFPEB=~e(Ijc<#5~|;;>L~_Et;mL%&}Ru*Pa}f z%hXzR5IKT*fi*QUF1=MaWN%{Df0Mg1x7>TLaV+m`^0vD(J7GiH`@Vw;V@?Q1j+rJ? z>wcQk@-Bv;xsUDeKC#^-{QxkTRQOcEX-SWjSH91@?U6Gdly;PK5O?@vfkh)o6^ON4 z|JR94dQxtEO?4)rhbgZFK@=yG82PoIT$A>GIQ~LK@?u%TGQ+Uk`w4AUJvd(5l0U}i zng>x@4B_A0+@FP;z;y6^dO;#DRGbg{n?-6G3?BM+lZUQ-`VMxHy}Y}mDvB^1 zGN;<4c$mA_Xr)TaQV~~vO#NJL`~|gEXor&P>TObwZ*9RY#HpANQiCj9UOm7?PN-I9?rLZx*k+@9>CbiUjhqZTPHY|P^*|KJ}PRQDPz zcEX~I5k%-;3C%JtN>iU6^DzLcpVG*-9lxJru&TzUG$YG8L83ZW%2NXrf#}}pexj~> znh`7JXLqptgEthbojYFKsN4 z_ravDO z^=Tnlc7l{RVPd)kxfD1)xjJg?zBYM3TibvkYlSNjDI}X%lnT-(;C}ehIg|SKShaLn z=BG8|Ts0s_YvLLm2jwhhHhUa8jXm%OAK(?ms&wHf=llO1T=ZEe+t*2*8Q?aQW?q)C zu@Ze)kc-p6i7jGHMJ%Yn&86Y)D)Dq@v|lM>pzTOPIvJl4AgpVsh$c2)!C`N^@hjCF z;mPPZnuNZ;`EDVj8==^wzzLfv+!DF06Jp$~)re?f7<*uq#?Y-O1Z@MC;<@%lZAoP6 z{kJ^1>8r5X!>*Qf@F??;06KG_>ZA5`zo;o!=MlEF2&ax{^6}XE711Q7oL^5e&HzbD zDT0>AivF_os_VR_;xpbC_A&JwLEiXV&RRI6;FIbp4R!^3hK6Kb=2}b$rRw}pS6_^M z_OthhVBMh6;i9^JtD*Q{YHcogc(vYF1?*63x@$;#$awz=$?Zpj+UfTqCI=nJl5h_& z&@|(9smm1=Z_>8IO!o|t#N)EtvSFBrxtF@G(OA&4ShzR$FzG%+qP<71yJ~*2x_2o& zbvRCssQy_J4-tf9CJRpNmDn1;v^@1sELdqn3OpJu_H!0pv0jzxvJ6p=@^YbvAT=N% zW-%IjwtK~w^#TF?i+xAdZF}Rho&!@0BX0EwRgR|*UP0)vs(bWkAlAPhaAf_g$9gIg zP8!if=M5MrV=Az}QsOl{)M7YpqQDqHgnB{m?zmI&TETQ8%i|OFF)}R4NT5WocY+wZ ztd$|ZCoqTdZT%$f<0UM}MVgr=!8%1{sZdAlVBt_i6x=Yz6U|n!xThke>lNg(AP+4KfiHZpc+fMTZ!|)ITwb(&qbzi^gbisDU2onV zpZ@u@JDpzKqwZ&|qn)$pyVZkJ03~B1<@U-ev`p~CllG42d;gwdLG<#>G^iN;l%)QT zy0*rs2OiC#E~=46cwzH5JK z25r;%!Eh=C(?7q)#XZZ)_#&RRN>vW0V5yUbP~5;5qc-H80S*UQTn^b)^|c4#LCXw) zT+M;nD*zFFy~g-6NL)R*^L%Dyn8(O>=d!;<2bAw(dp&o?#)3g)z;M{b=!n zpnVX~2m?nM#BcE6aQN=mH)lP9PA2Lqw(jR=qKh39&)or`>6%Xu(YHz?#DIEXJ)!Uz zbNQxwx(|Oa!gEShZsFYLpbLJEu`k5t<5PN;kE}x*pP#pQy?a9E~9I875!E}Ga z#gy=%rDBBavo~*uy9%8NyncQ4xHnk3{h@&vLJ(60cBFCU;?Yg%aNdDAycJIT5vxh;Ds~gBG0W!3 zf4lMp4n+$^u))w~K6)^0bP5Q^c%MJWe=GC(I}D8iL4C{Dk$8o-IzMno#)+XOe(?Vp zXJ(9rD;%ndxeD;IwLHxBCmvt*Yf8xp!}YoKKCfWF^7kbm{s#6mfMr3Lq^e$O!jCo3p|um*x4y@&dr zNI7zlcb(rZ8-nYEcdGcorNNNt6TkvHauDe#tGUjD8?ulX6!;Y#uSzQ_Y(eh@uAFX9 z0IfifJqRO;wN}k!6vA#)g65<{{yn&m^m+P&Fam;9;8%S@bgCoX>?9b8QF%+LJ|r`$nP6_|Da)-vBkvh652H z#h}1%=)nQ~dXwAk_025&%|G#=CT?sg@H5mCs)mfp)_PXU3$D5%`!`8zkBsIIB{3|- z5Zdp*ZW6M~YksauhQ5TLX}tg5Bff>xyaKwIQ3PEuVo+CY88HYp@sfc%hBars@W9`i z;4f?`J>czw)FdiR9BkqP5{JlgbZq79)*4fQQH$O#06SkXDDW(_!5ySv#-l)!rfhqV z18oKPZltvGqzig&3M|DK`_9gHNo=>M@R(F>&#EjT#V!V_)9JenbWa(Thssj6Dp8o( z=EbpDPyYB7W9;yOWbHiloo*b^ESZY!0a?zkAiS8S;VUh%I zw`oG2v~`K?_16NTVwZKo&Mth1trq$$vZ-$*+#fMFMnM0*33@cAyoTi3q|Gw#vKey_ z!&$(#4v+=0i}||}M?G8IXQMOJ>ULhc{i0GC0gK6jt@+<~g0Uner~i99yz{WTod}8f z7l@7|H3B)C%Q)Ydx}5zv$Ft#o_?J3hxv7$L(3?Y?FsfMd_I;&zrfG?PON}xI@&0e6 zFJF;dtns_@#wPy9Sw5G`CiT1Z+Kt=mdpu`@OD4Y0?bq9J7>2MeJ0a-5I|6KjL*lMe z@w4M@Ll_iT3B>J{4UeYj4~-I60`6D+K}XG9Qe^*pDI-zz=qzH)LITNalXaUlTbag* zC}$G9Az2qnEU`;qY;Xwts^-f2*U9?hA4mQL2kKWZkTDSGxnQ(bN&IZz<<^-r3Lvgy zdpx|l@D`HgC>&BtC*oDjMgcO2XQrsZ{^hI`3v10AC)KG@2O^3va5@$Qg0ds|drN!sOy=9-TP+qlKD=Ey(kt;r z@q@Lo<|We6nh4^KFIYj7h-YunqIFkz&&XC}s!;JkM0c?H-%J1NO%?Q}oMJ#MzFG*> zD0XD%2auhTgCp<6Ew<_6TIzOkZb?WCb#;UT#QbJ>wFZ9zD<~$(jJYcoirr|Gyl`8X z?gt|Fy#!ad^`AbYxN|H2JS=2U9&*!+7NA6sAmi-6p8`i}7A;WB&vB*CXhonu zNG<2l=?_ufN#UvxG6x?u9sDGpHro%YACK}%l_f>xi6jP=3vg71++?Mj24!U0emwv3VmVvH@aCfVMHqYTv3^FI%y`06WaaIdcro`uvQuExAiOkS~F^! zqk`z4^aGNI0Z-g|`!$}3s;oDbIxi7ydy1~l=roF2J@stn`_4REgUww2pBX~nR}jAV zsG}zEW2dGsLWC&Of+tn*Z%|F*YEI++wn@Obz@cILYnjg<|BV6rifo!)Y{g^DIck*! zDT>L*h6LZy`0FozXL(<4 z@71C3{@EtUQB__1RWoLMBe6h!gymyDLbx4n# z_`;^t$0$;?zX9^eDgokR0Xkyt*5Ze)$S6<}n3FE*b_}e{MYb05)ww6ikcbj|b_g4E zrJak@oULVSak|V$DM*y_wa+_$D{9Gq;mqCfcwBo*{49Vwnoa%C6__c^$=#{*rGTRY ztIMb7@3zi5T>BcUCNZ@kscE$p*_&Rcy^g6zp|1Xd`EO&Ke9374TQo^6hU26eg$htM zq~@sPpdu}4l;-&TGk5sF0vL zY^q^zIfQQ5NSQr6wqNE-yWpx)^*B}$a2x`xdcM5V2W=D=<*vQIt%$2$e2E=uznpia zyP5$HM-KObDKo`?-_En`nx|}AAmeWmQ6>2DJ?y3j4X*p1zpF(;y46z+bsBd~#P@=h z>St1w@S;!@b~mn^3O3Np6Uzg#!5H=}Gv@2qtEjk*1PA@tB`ePCh5)ZOHp4hGqReGA z>$7UBy(uq1CgEwIlV{Aef98Vo1FmTDxtHGut@}eVO33cDQzqR(<@_r>K!v%xC)Ve0 zooo1=7O%Y^zai>wZG8TF>f(G00cVE&H((U7+j_SThOv=qxm=w&Hp1)%fjk{s+)Qjo z+PI@BGK4&aOLOP)FD_20FK39iEB&jMK3;7O>iWRW6 zf@Fi9ajt!9DQ_&QpD*~WfyzCRr6I)^1vlMoX~6=w=`koUYXllF;RcSC6x)h5e>gyZ zF0*@I2d5?o!E2>;@Ji8lZTsiffa3;@vp>{Zjpsq4OWTzHy%+laWZRtro=~s?!;wyP zy`1&blBIke8EPQ`mHb^i+dC0rLj+g;2Rr(5%Do@P8w19(ZXNwn>pnwlQ*2?}W`B@W z=rV!zxaM>WDOY;HPL9CJkN)pF*=tnS(1icJ83W#I)LJbHL`sdVN><>CSV`sLXtepG zUZKW9yf)gE8jr}}Eh_(306leW4JT3O2Uw3Bn}W)2vF^3@8>ctn*|f!a`=pVHBrpYY z3HUbozwuA!mpx|WaI)EIXfuIhr+u{o;jPUmp^MyQlP4u#2LZ2n50G%dQm{nmumSyZ zQw&?Sz}ex4n5oP8tiNe>k5e-%an~-M-YsE-r&!i*TkIgQmXG95;4KROStcZa8?WED zG=bV|eZSeSCb#yTT0g@uc7z@{V54MjPsXsjW3o&-iyQ0j3m3F%?kguW#aOMMAYBK`8M45*#$cfZr5-^@5P_a@47`o z7d|frSP58@od^x{xy(Y&rd=FJtci1v!ZkqnS${?h%@T7X~MKr1) z;GUKe8dSb=03u@EgznwBU$gm)V=_|9rkeaM3&8fRYjCJr8H85p{<_8z!5Ah7&sL$F zt@@Qf0g{W>FH;XA&h;Q9|DQfe-m6vN1Qtu4cjVYrl2+&FPEN(~_E~nhcLI+|Y}3OO zn~S^oZ}So^`JwP$OC+i1#i;W^O2!GjA2x$iPYTbC%Qe!5bE6VQ{Jxd@-3KL%!HPXx z(QMUqJU9=49g>V@9bZcv%hbq9m!rPNl}#5gnI}w0YnAhQFY>H<|L6*?Qlc|E9?x`V zuw9Orh-EdL9awoe>m4TaP;;N1Xoqdak`du<+#;Rwn&WBr=adHM)!Y79Z@ryK z`fJ2or*feev;@e$z1>N4;@sGkVQ#JihjO*pXni{0TV?m^hBE96+zoT^R zjgF}$PN)j7adZlDQ+3*{?hJ;^hya0Tj{EUSe)`3oK0z1$F*s42^1BN@C=$5qiQIyUCkP3zHlHj7dPQ*uch!*p;W+U#6y^okd?INkqPkmZlw2nB94#J#qI$5=`s* z6(6%t0&?asEKfQ0Xj*}a!xn{_QcaUb>3|%nNQSIcPDYTMhs&b-%X6#wGJEtoU2b2R zNYC9CzDVqo>l#rXV8RvilMfAh2pz8&hfuE?#5FKSb>?H4VE8qxR8VQGJ)u(e)=@sAKz}WOsf7e!PY8H*$V|0xE44D z+ledg1f!>^Ow6lBlf{gHnZjlmHLITIvs$h)Oy6Fi^K>eIe4~bATR`GK=&D#h-3EW1 zwn}w_cJ#^(1M@}YNttDeI0OqTQ^E)fj*>)3KGW*qRb_eFBy`HknmU`0HGYMkQdSIf zYd&QB{gIk{)}rh6fMI7c<;6#PYR5mV-)YLsPm42#*$>Wc=Mm!4%veAnIM*hFR1Y*%LvVyL^XXaZ-1^u_kx~&X3v}4N6?_j0|FpgDv)% zVe3k^2b7i6{@#m92P^OLJVWW7LEigUn!r~7R>pbVi}&PqOdex@ftS`;3|JGZ{N_)O zU<4oEDmL!T!y?N=%g54U49hEA$qFB7*%N|ao?l0i{Fw6MdZC^%t*%JP#8xedHSf3f z(nCT?7uSD2ZgBNmr(F6qg{$NjZOw^GXjmp2aI{hp3@_dam>mC_@|(A+{0=(d!Ina~ zz|aiu;?a)s1&8pzqHG3JbXhZ*XK7s9UleeeO#78(WItYW>-!%AYzfGsyVlS<1ks-l zm8X}#4g~_{Y64tVNWWG{t;1oM4g}QD8yM`TBG4j!PjRT%bTFzZ78xvAbmdppmiWNp zzL{Ye`bnoG(CPuF$cJ)(p8T^id|V zGq*qH6Q)D9z}rnxkTsy~06H_&yKh1v7Y_%vu-r!PI261{dL3UU)&FU-dW@Al=Nw*>772? zHEqh}++5ymyn;+K?fm3u`Lfl1V(A4W3D;+ky6{J1LOi zF|(fdExp8@~O75LY?%!ou6PFbx9)v&J$vbXf zP}7KfBn{!`#?i9i06R*U3zg|9)FK5_I0-}gFaK;G0vkiT0vY6J!u86CBnB%9_rJfI zV>5Z&*OAe#!OdNM-`e`Da$%YG%kPSa(}auXd%1h=jOy+$&#D6#XVBU@7g*mxAj=u& zFKq#^jA3lMG%0CQU~XX>QyDdiKKRIu=J1~isj zx=#JQiqrOpY9gMuKxjQ+s&IknAQQTMBm_%MAa|weM&|*>aA_r2n4W%C3|<71a)X1x zGetm#9_Xh)khu&BPD3Gi6NQCB@aCgHc}c|1=is3I8-dy&yyVDiNSCU$I#MrxeqJNC z?gl~M!X*(M@9zE0*uMw+hozjHYUi4Mz zOANqhP$n>D3tm+>lgN#rVXp!0N4mr$ET~HFN0vS>^`YJ{zdV}C|_y6rs8LI}=PLnNYd!zs>Pc-Ses)QtDyo;jG z{z2Pi{;Igq@;z^}1O#!xVPy9;3a|*UuwdVJ(u2NwBW}ly{?shUy^A#Dm8Gl2276{w z;WNP%16)WA03+RJYQj}&ai+Z3ApYR#o}fN;-u`{+Q2p4b^m*&!iVGa5SQJ|d)){2q zy#Em!O(Iy6}!$~6c>lHo-6A>)BxbjU`pE&pkf<6aIBBY#sU*&8n+y@E4xT~+V z{mO9p=T^puh+8889*$N)u6A^NL;uYcx{j@z5X68&$RaGw7qUN`W4&|0hlE^;ZDOGo z*Bl$~{-60H%dz{!S3#nG^bH95#DWMOna|!f!)I*$tb@a!cKzpTh;r{-vU}>C8N$mMW{6k=`V>voOMX%WUZ}+tWZRPT z2WQ1DV`ETtv(^a3`>52LSX1b6JlCQQ8K19F{hEQTx1+V4L7c4U-C2X!MQ92ZfXtuI z3}!S&2L3;eY_4G>fV#MVk^lup^%Jd9b%J%i*VbY7#P{JVwvd!+dpNZdVd=x%uTND|b4kpY+qa zxJ;)&r+krUos>N5xQyn_paqI!}1x9tGdfs_>Z)V)sk;FbowElhH zAJG(}q-HF&Zfm%p6PFZu75lyh0xnWY|4#56PNmV&-cbRS?jh7K{izYe^f*-$XX>~&#_pAI-0upa~sdJCoq z#Q-)pIc!|N+H@BD7|xESC_ZUvwm_+KU!rZpBw)F;>lDIdDz1@d<3O=w7}RH=+YfVo z`9;(Fod{*IX#Evvd3h7N92Fl-UV^7h0t*6LUA;PH`$*M+H5tfd;%szVlQ@kqsb5eC z;6I#$Aj!wDK=!vRV_#_x*M4vZN|v#Z`zvIh#Mn264}I1llYjJbPVzu_NJ9wll!+cp zD119gJP0KLUXlg$ct;b0I*^jKdd?l_oyK2=oD)*LhaX-!afXt+bTwy+51+#r>j98D z7q0JWKaD;dmGNTJj}95KeG_zA0$dZjq)f9lgqMfX|hCMpm8 z%Bf)O==5=%+tW$$5xQqpvml~za2)40J@7GD*qYz) z&BpY(+NF)=#V=}Jy!ov}sQ%R;+BSp^H;?zZ03K1taW$E8G)@l-OyqT_`F>t^%_rInD z>XPqxF6_Rwnf7l%0NK$ImC7nM1FlYkN5<-GMRsrBU$>7X) zyT(2ylfmR~&DuA)?ut~peR$vJxQi?>>5|#CQhgNa^VFxLawrIptNCwhhFW5B^)csRi*bm8Jq2MCIC|nx1?jMDT^b>fFXA{U^+gqeh=A8==M>P? zwTrrDfY!!X-TY-)%k$ah8o?HP`rY;|`Z7Hw#2K_r2r!XGz7~mNN$%}PZ}FyY5l*~?Lu{PEC4f#7)!Xg^ zrT?bKp+yabe!F54)wiy63;i4xc$HCHBX2w9MBc;;g~?+t67*H#Xs96g7MlF9_~Twq zuplpug(qA!3vlzUk(BK7-GJK*+vX=DBkiug(0SnaC-W0dH5_OS$ea93`2O-GF%c0# zBnx@IPq{|HYUCxEbwLRj#57MQ;nkjBio~e?U5HO|dn0^%@$M{xax4<@y$knHl>}N$vw@ zf(zE;If)ML=9N=VCu{8N+zeh&`ZbXp_lmg!!eQ9vT{np}?SE$)4k=*!fJ1<`e>qU@UbEE5Of8iaXfPahqxQ;Dq<-o1)}%c8$umovx9 zSaiCuc>#($X?1Bczn`efc1tiWNB(bpa{M(WV@EWT)^l<5>J8bv)Q_}fI%xqQT8yDO z-t(5Gp$P-kMV~-%9!HXKVuw68Ki7*7_Dw&Y-88j>MQOt#pvTfE8op|q!=xORrV2#N z6Pw5>!ljciEWX#Pdk;yuY4rlW06W|nm?ye*wb2zjz*rZKGv~DV=grBeh(j`1G>>?F zI6Bqw9(F_96v5&6&yU8Uek_u(St%6F?FdZtMgI*&js=i)Y;+3O!BH1(2seneZ|c=; zfJ$C(l#oY<1-X`{jsED24dMC*^7P|V&6m0#weBA*yeH?c0TyE@+CH(^;G4|#ec~Tf zV_4D+?5YB|VcMyESQjja$jF6eCS$vYE$=vw64!%CuoQmVz>ZtvoSb5!Hoj4b=cUm; z0E-ZFho@e#ey?pqUALf3nH!t*!G!M(6mBh*Wy2)HM>kY$4}J#XmyJJLV~qlB zU3qs8&@2KdoKNr0A>?UVwb}53L1YZL|clELv5)#;yca#AIs)(IlCb9GBmOsF_Kth#8s z+vxxk76YwmDJGk%Cs!HzwXo_&g9?&;23$6JZY*6#k+dsnnsj+Qb)7qD+LvOP2xDr> z`B+Quc};Y$kSKdFS2I*IYdvK85O~_o-{!kk_xKKf8yDmX?|Zgj}DYc zT^I_dE*%A*f`ykOCGR{xm?tE-485^!HsRLAAjn?1@YyZ;gG5jQs2}F342_CD{2ujl zz{BDX6$A^EDz1`C;$kFmy$5)IgybfDA^L&7kcrb;7$_<>9DbaYI`!Jd+IW-91Y+vk@$^>C6is=NSupcZQqkR4Ue&gQ1kqEyyje zNiX%(ot%1c<6Qyr2J`j2|Ltch07*ac7OboMYh+C6!HXwfOOZoM*R)}N4sZ5Cr3i@e zy~MuQsB^#x;A9loQlw9k?u|B4nJGLW3LC4wLYsyX&!AaU^K=qRyoh}6P9CT}VB754 z^C`;A(~NDv?EJr4d)7XPJ&Ju;QJpaiKg(s^o@;T;WIaQ&@;<&fn*%}r)dJYrN)1z4 zoRKsE9FqQ8V6mNZ+_nNP(vel@Y)6PUeXkuacK%PChL`4T;LY#a8AQbB;P>8)cWLAy zO^2L1Kkw_LSlWkq%-?m_%(Wz^(vpH}fR)LfzJ`9LO6H;3%;tZ`OrN)o$uFIjEhh>o zV)HJ*A+K=-R^qN~_KBs`s9+{CU{P!c*&f(zSV>0h`}*S?VF;+*{xrqM8MoSWm7yIN zT4LUXoC37B72?TVm}J~(EA>uo)Kw%qyh+tr5c|P7Tv;`%pE7U*Md(*w-oHbMse7Qw zPT+cCkh>Y;`_x-1@Y}!GhsoE21UIPKfrVR;!tj1SC)m-Dn!&z&(Zr<1kmPgU?(yqG zi1j$g{WX4w&rQ_)5ve*8!Yy^5Ftx;KXrLO`u$x}kx#yQAQZHI(>%KtcGg~vq#pLAb zKBuSN?j%Omog3%n(-Gl!HksKU4F>HSN5rX8RfvbH4-Z(pR;?V)z#`{oh&MwzrJwne zba5q=Po=IGn@8cT!C?%y*gEhz$7N1%gFU(aIlrMnt6jQx3` zu_dCi+~^p@%SC0CXk1dFtGtvu#~Y>i*GbO>v$_U(nmD!=<;a9(4CsXT#1?z^MpNeVwP7lmuP0(xgYvB)$adb+qHXtd_sRgR9z;Avw^;n0%z4V?7kbuTA8_wUz+!Ek ziL4FC+EZO#SX`dalgAhv_mN{BW%el@Q?L8n)_jYur0r9l0*G_|m1I9t!YzUfXE{a> zfOfMNibL|7^_bZVT3_EYQMd^FY~!5iA~MK23n-f*a?-_sO5-hqu$c4jj_a3e8SJxG z&1zuh$eW$Ui|Mhc_>r`@2rY7~N03_ADJu>x)S5kQ&RXowHG^^i^9m142@v2_8s*1V z=O@5sVf)hj@Z`KXHdEb~VVTGC1#nphyCHH$o+mvTe(GX(1AgttU|K-|$^9o=My5=F z4V#ANpD_}%qgd%>Z@~f+lrr82QBjH75tl2bAKi#x>JEfqd_84ljbE@}9qD6E>m>L* zOzC#)K=s`IZb&YVxc}lESDRfzlluo7GZ=yNS`Uwztcv)SZas^9PzhMuc213Ei#KkvAEDs6x(Rc``3K`q-Nc-}&DYGW{Qa;xmvNH% z(vi4v9aM4&Z-!7SYBUKwKkNH*Z9BD&Eefwc$O*V(I)?RNUeK&LAJMv3Em^6vsWn{6 z35K0f6JE^K5qsTnGLJqsgtxsymeABZax(NBfR#KqM(v#kgdz!Bj*N_($sIgPFN8QM@)F`-}j zgwJ&pwBdctdGZ`~@W8Czh~{UCF}=p0A^}!W#ywAibb&1es5>^|hD8Ft)HA+22Cuvr zTLCD?Wg&`;(6JRWTamI#Rwj7S`EuyvLg7+Fl0!{K;dv^_kHUEW3~^?^S=wjGcckWD z_*kTT8M-X04j48aY&L_r&0Q(Gce8!g-ji1I2IFG2t|E$PmiVm{^Qn-Nha>wM^Un+Q))} zSm^1~I~jLDDrFN{wqG~i|2z}y1=N0W5+(k>6kxr-5cXaLqhHsTDYv0vQqRMWhbr)n zB@(n@$M7rx>8V#7oou*dF<>xuiUpDlVB}nzdWOeqv?seGbD4JrmgJJ z?|g9+DhYC7+6Ql*Hoe=t@zDn#n;00q-32{C12ZBNXZoQ=TKt~!Bn!CY*_y`8l%7*J zi1+cND<%X@c>OGjOtV(O*jC16ul%-0UMd`)>+sFS^4F}y{@wq{s9~;1Sn>bo`HcKj z_i@(W80u(o`8gZ-%&!t&GvJ&Wdb0BOlfL)mgG;dvDwge-ur> z`QVksz~TQL=(W@Rf@G%Ze?=)(`=0x>&&%SJeeOo7Qta%z4!^UlMIuDE3=D}7Q3TDCBi&RjN=-0rDZ5)3) z40GC1%8Nw90-Hn8EO*Wr!(PH#GTcd)8Ov^pj$ebyluIJH}(=o24xL_aFo*l zYmo8@P94Fi9Mx`IdI(3ryQ0zjE61mJet2REs3ew_rtK$xm{q?>#&m=o1+xvI zjZ-z7c`&fxkTVBh)^(cOpL6HGJ=Lv}=<;uS$Phk6!TYpo`_-g+$CAH=-e5t-xi@>? zP8?6;=G59$iPd68z(ixfZvV{4d2Jp^51p^9$BK=%{n&RuaE^>?Ld&B4?iO=NKLv$) z+kR7tXoT2WZAqAEKVZ9rN~%KM@)koy8ZU$Ws0?u3EFKrl{$!;Kd5w1Jo)Zt2|MYcG z--suDi}&DsOz#1OVZQSA|IU+pG(8dQIQgQheD#eQ-EPB(>ve4X!pxI*Q>S|w!hd(~ zTrQ5P@R0f+Ek`&GWFdpx*GECzU2bcd0#dvbV=|7g5c1D+vkOX%QXb`A!IHfAr3};P z5Joi`Jt#ugvf^tl|^(SG>hER28oILnorm;-uc*<9)n{cw1$mV^a{sB;rM*;{05)s+S`4onl%;h%M6L*j@Zdr3(d0?ucxny zgXq^=OF&dPCW^REfX^njPB46+l(2D>1kY!8n+CV*Uj$i5O^ZL#+rfhGckHZqrzOYz0BHd-BWK+}k`r39 zslh#kM2BEM$oy-C+uvlB!TQqhW>{m|BEupJ%b*>T`ghn?Q+MNe*v;|5^HaCt7iaTb``b8Z z65px6OFazU+eYU_40nWLel0P`?B?}Re-@TI$jqa!EB+yC4&+`0)ch-4yU585?9K$} zl(8d*0u-#iQT|;mr)DY`P2@Ajw@SB zUkt_q)K}J{mQwv5_htO{7TK^#*PkiDhF%@vP^UL;O$X2*4_EqCj```Oo-)B3%6{y@`LxNK|@HFqhJg&oqs5H*_&w#N`z9S|_KQy@F7^ z?0l>Zq4TbGLI+xx|DvEE!4*8VY_#Kg#F6lV<)*7?j<0u?xy(R;HRIv@~7iM9Q}DBW_0TH;sZyMPqvt%w@&->E&r3skqNP znNDiB{Cfk*o+Ye2h} z3nWwt1B&&`%{~R(36!MR3=|1iTKiXD4fcmfa&nIsJIst(Y)y8MUvS(o=eL;|XVb8| z+k6iMf}K8i6TfD@w~2luTnX42%6uZDOkBo5UE?h_c5Ldi{jS zS60Ui<%i;Onr;n8AwocIKFTVse6eflbTVH>@B~7So-IF3VUxJbnyB3Q_CkR>^R%MJ zQ>p;(H)a8)pno5nRe~qTxCVH(I3Sdcyp>ejAK*B|UlDk_sru&m5|%i9BA>5n*|)s| zKafJM1K#AT>y9Js<@de!{)T(!+;jHXXYak%UMH*{eLXX;2RFjb6cj&hs+dLxI>PS>9p($* z)}a=>x;(DHqJI@myNaY{;Z4LRgtc7-Opbq{V_TFx?Be?&MIo4`H4vynXZMXm7h^03 zeF~0=4w%)M{-IW(xs{l&jwF}lVVtHs&h&IpDaLGkxer%-(vqzHq#=A0B3Z;MY|!zU z0S|nS+<*K1tLU_x-e1zbRg;%_;7vX!9vFbX)2;f#mA&7Jz=8+Q@F!Xgu|i1t4sCmh z)&t>hs1M&x$PCa>COp#5|NjIL;gkL_+Y)MTcaSPd{`t~C3A}xBh`_-8)=%W(VaOfR zus=29>ga~Cn~=A_*0W7G7Ut)QLGUtDNGH1D%P*p~QNfvEV=Dn5mnbf;B--1d10)U= zmpe=JRfD{Pkq01Ykwmp6B^fhz+GeAg%ICdb(6d%*j&t%#`3 z9ztDaouPGUzOm)uyzsbNEG(Q0^&k|c9_(Ww+2g3Z9_V=B5)CHUI>b;tacm1J0T_Pl zrCHDseQfJ%WKO0xFGJ%~E>HR%@$&gX2X&0XmoZmq96T3l7z8(NYMb9P?|lzkW&3~G z=lm=+Xni?E{r)TzlQ!egRSPnK6cUz#h1G^h16|WQq`KYP3 z_U>_Ve;2O(b*Y5de+)a2%&a2l_Ez4oYU^KKbCvZ?B+NODQ9+}3dGJPZ)oUgSfPT^5EP8s469*3Nym{#kHg;pJC)77nB?K+L8K9ds_#+>!F{vcRM>MNC*!rq-NDCfBS3L!-pU%Bwn#|POx zi}c?;NO35%i8_Yia-5O1fMw9Y{kK%!h?gC7C->|Yfs30Q7JGCoT%1VIJk%UIN-PLx z9v(y4E|lvPFTPo}JNK@rig!Q7?kK)TY#wv@#5Qe@ebnFoUX$9QN_Oh;*!CNJBk3Pc z=-Jk8y0(L5TQ}Y zD=-px=(Rb@RY=T2F7y@nG(PKWPY2RIr(NZnA8NZ(JR&ENEyDc93xh!{-!DFY93Y8{ z!%1QTYbrO{L}hNxTR`PPNGa$J4ahpWCR$j5WK*H*dlLMd}ar?+ftfR;x;LFJ3e$Ow+^0WP`Kcw@w{5H{<+^?)=M-%Ma&3 zxFf8%zh?H2g!{sKK(wg{o&4lV*~_2qX&B14{Qh|Ny8TN%eDgy$=G?<&T1uou zS;gmnn7V88bihH=uVqY^jUipGbI-YZs5t-gm#?$3xCShMLcm|bVyx~(HSU*v*UUzm zCSH{xnMZ+(=$+_Sm_+;}nVF?|_q5GIVgf-mvMW*e6vQEhubXb@%J*U<=W_{|>K!va zA~qx}3`B}OXn2srB2vXq@x;BEydnmph{obPabxx7^%#mDQV-_#x#w6D#AKcmSh0_S zC}7DdVf9rHM!yCm_c)$@=f*Wf%wC`gs?JkedKQHwOSl@`46sOa$9_@*vnx=pt>y`o zpA0&HagFVX)*ksrbiVt0Tws~5m67fd&O#;T1yZ2vN^tn9IAda~vFp&goq__>!4_%5 zBDazr+0I5wNl@f(FZ#UoQ6M(x$b973PQyAMR^G>|c)orl$05qyy4@T>D6Kv81C4s! zYKfCxzy1!2lU$I$aL;{tyGNRI?X0BtSyhnxa{R@(^0|CQMI9Z;G_sxKs&_SZVl0ZY z{4F*mvoOtnCx6#0Gd%wNTt~~^HOOH^GxCJOg8IEA4nC^&9UJ*`a3@cFyXR+3cix5K z;Y_nD-N|<2q@O*f6bJTQJSC46js0}Q{^`CT7?*}QQ@DfliPF!E^~B>XSLU7;DqW4^ z^)ES<288XAQr{#my}mASwf2dvBDs^UgDGls9gHRIhZUu~yBa1j(~HTRTx@OlHhA8QtT2XF^{^gy=X(ax$Q(lr2arkZ?mTKbkv9Uk8l%eMjO09#GC$nv6P?plk&m3-MUEG8x+v$Hq zCi72ssEpILpc7prva#zHL|fk+U%fL8f$~T@;y&S+KwZO2?f#jX!e2b4MLan0q(B|2|Aw|vFKvnZk)}#K5mLY7z7Q`9M9>%s|0PmCw<&QxO{C@1-LnALH@YP zoe#-FKty5hD%FHBN|H~@-{aen*PnT?Hhy^2;Q=aD5RhHWFDrlcT7XE7t8U-(?B5(* zo5vT2(Wot1t93%a-~$c%q;ztYbASTOkN2kQ^zQFch$!FQ{`PGJUO{*pq4Ay=e~U+a z_i!XuZ$?9jsTd2Sbq$Q!M%Z+sll=SVNr>Y~4FeIdvWuqf#m`CiFm`NXRF29O^C3-B z(IR)02|4oMckQqVIO~U_ZgaUTIBqR2{o~-wv)@f)5D{*v3o?pv_>?f_PJe?WT;pmy zv3iLnr15k^T9ONNH2I_Koc~MJIz<^8J`ZjP0n`&(rdBF^B4gb$~k{Bv<9TXXy63T{_+iP z4gHabdqrl+8#`i5c*NAlC;wYPJwiw7f?Bb82_k5R9MFlZei#~}iD^I2JOqnu-Bc0` z?ukV>N+&Hj9&}`7Ph{R@v|gjdtcZeABm-X-EBH+STk7v<{1td-@2o<&6Lis2%>+N@ zY4Ic}C~**Lglo-Ptza)qD9p@8iw@4|$rLWya^u<-ZJ|8hIBb(9uAR=AXt_5=CORdvNaN?Z^^on{`q|n3cz8xr5)rZ#8W7S?2D7c zhq^ma)>+DrhXe^8Ykfy3Ye)+2Uuv0$AUu_@B8sUmACf|9D z-ZdGO#PzmZzIKv%FHGD^h@|hKHo6Q1Bdhoop0!)2_aq#zpYxEM9NqFKA=P-|H@XulU6sc*Nq&UwkFct| z23g5!FNZ=ibQhZ5iQio6xk4LIz9AjIWMN2ifsNWhs&#cu?gNV$M@G?k~GRfsB@a+rqsN z$QSR99aM?!(a4Ro>m~KC*@NIxm0E$#vsUYc9Nw1iSgsz&4`w+Pi>a1|z24O7u+5q~ z%3tOUD_-;EDkbbl;D!vDFIwD6f1xRvjGAajK4MoX$^=2bTF^kZLCF zH+nvLW9K}Oqsws|2*@Y!%18X2;NgMtE84t!88~>!>(2mjM7@{ZT1(2u1eOcLHI03iaCIZA zB)DOrgTcduKz3oaXLsBAu<-4vp299+W2nA1oksVK111TJg2Z-J^8750q!6J0F!xzk z$8KLgZ;83kPWOJ2w0=gYOBWJo*f_sEi169P$Lmrd*Qq0NmDIi%lJt#97}i_PV}Hz^Cll3j@J=X;~SjfY-$HhVm?%t5N9t6KaAxr8Y2ITfsa1d_()FBo6`^;S?KvHK>ka-Y!&Z_&_ zXnnfiozzmbw_Ld6gvT%G5q`P&G0SI1c@Za{^B(M`4_mc!${*|GK4*8T?Q*}uL`QyX zwe(xrK6QIX`=-M4;{E?}0opT-y<9&fS*ohOscje3g-FMAhU5M|uQ!vv!qphvNeU9v ze?dOwRI4!ak*&@HQ9@^|d!aq?IYk$hne+YYV-1{e5;kuu3iMcp9xfs2l~=%Yu~x*c z@(QWz15BRF4*I7)|88r}DJ2n6ym}b*yQ~xz2Vq#eoC(&U`$r`5Yilop6FsG>pCk(? zhU5wN_rx(L;95Q!ylHw)kt94cjD{u(*!8>+!8`-a+xlOS1&0?98Z#^B6pC3}V7QB_i zB?}1#@CETO%jFh)8-)JW={wgiR}fO;#CYV&n%B;%mxdc{pfZ)7i7h!0U+^mFPMOl? zoM8*n5c@&|IzzE?aB}GyiXKDvA2La~4DH?IJ#N)?jUql$C zWeauOkeEVZ1t$YR0c_E}0eW25^GxS^U(^Ypd%Q1RrSDp;3iD<*oJ_nf@1KjxL(>bb ze?Pa2jp=2t}(Z~QAFk}U0hci`7F!Clg|^G zG2m$3Zi8TrAS}0PW3FOi!HdW%*uf*FG}5x4&a);bH9n$=hXEr-MO4acI<}8kR8&3@ z9DNk+JTXBSxW-4EkQ-=RF%^3>J@e$N~=hipk*v(5Eqv&EL9 zyreAsW!`w;U}4etCipKCTNWlzBkO{|9J6#;Bp%D8L#oKPH;RQ%2I%Hi019!^oln(U zC7F4lMc;oVk)>UYEh(W(>M?jfjbd4_bl>Koz)s`~3F9keZPPKbmbhHXMF;*6{x(63 z_wMhX{@OSHz^#VI8}YJQ|9}G`>&zA!uu)B8pbpn3@YH;;p-BMEbKI3NQLe(~x?)_~ z`Z&O)=&}gU#WOfQcF)pbd)kNt2uGPR7}aT@GVaZB9 z^Zo?*(*jK^Y@(Qsj>``9?QNXOLue#XJ`{+_0R7mo@``U-pMwJQ<1-V#R7R!ZO-xX5 z$LPnKu%j}AtOZE0lq^thk`3iNE_Nb~((|XW`*@lQ|5cG&nc)Ls))Ix19an|;t6BX1 z>x|1RacAE=m?yTQ71Sc=TtduJv#f*GLM>kZ9SOmKnroweE6P<@e0)>1CttB@M~TzT zM&v~3cw7Sqnpm|Tu{Ux@(M_Vr8&uFo7=51CVn(KBmS@sYQsj-kx{JaKeSxkq+L&Ll zpRT%6ohS&8%L~iW#i$cjR1F$3GtDeXkD_{*KNme*aHf`_sD*`&ROKL-S@6`ts?wt9 zAge?@Vqc0rA+`8Y6aboJUJc_Z$zWF~(GUM<6r^(+YPy#frZ3kW>|NQ62YE0UjJ07^ zRAD+J1~{{HKR-G_kW%ib)5=l6G9O`ouJIgh{fWeRrjMbtA(Y=g0qTb3rKeklJh7r? zg~wUvWhukyCg>CJ7al;2hc7FCJ|^#+OZGlQ1B5{pBOkAW#rb!Ws6-2E1mMirx>1uq zVWd)0PAMEqsz<=Km;E9kh$Ua!RA^%7gcSBWi(b9;&=-|#lJVqd!qkIk(Z*lyu~a@< z-?ffcQAJi28E|!#Xi7lP!RDs z+XHGLuE)61^w^%ymlrsh3g{kCKFq27>l z*AC|y0L`v=Ou*g1If;7gNDKoY(K}!lzS;p^mdRPJzJYmP-!Wb!WvW^H;)mSF2D6v} z8taPjNj$P2$5hqWC5JsL*yNDOADZ;TzgN8jHnYJ))a?ZOjPPnSM>s043m}TUbxO`c zoMX?7Q~i_tSZL8wMl?qRQ=o7ck5?WDt*-jSpJ+G6rJ3`^lY&3dc%;N*8U;krOVON^ zg4@nXYZXF~;K=G8pvL{m(MYi1KtonfSX8ix$Uxn_C`aBC`yCE6Zy=1@q2!|nM|3*Z2J*-ox zsFjMk1UGRgsb`^(uW@RfRo6s~Ev{!g4gH@kCm`nho>n(_0)UQ{#j? zaqzZPpDKSYJNGwJ9#K+z=>Uy{EHwXudmC^r!e9N4i+q!d^(RNc>q69Lv+9xN=Ci9w zQnLe_IEu_J9I2JwMWP%(Lqtb z0Gg9LaK?p-K$PSMD>>$jxN{BrVC47OUQWHDkWQ<;>b3>QEA-BMa9i32N@8Q}C3brz zzoKaPNY7zjD@O1-;NS%Tzvaug#NOwp-?PE%AprmR!etp_VJ)mO#T<8_FI9`%niQi| zu2YsjcUf~qFnwtJ69$uhiSjia$s7;-Q*3c(Y}yJ_fBOJSSBgJBUvQXP!lp{0cF+W~?=> z>*G^*RSc(*Db+BFU+b+)byodZjNQr>8*z&LGAvQ**Bu&4+A7^#4^w6sK$=`!F4Pjtp zQPTxUX)=m=_FIp6MP7o=%7^jL)2}7{JE`{Jw@WS8 z9#EOTK!ZM~(phs~)7P@+fI6BB4T6BlUk>uK;(G3XlUd+m5daxVgP8+g_o}3Mw$hS6 z2n91RhyczB+h@1aICF*bFEy>W%wLr$yX>5oQ-R^jsCTQ;>VxLp>u-w41fNT1Ct#IC5p-3#=&{OzP>wXlG zmytS71}mHr{EpUJ=lT{!ul|a0U$3lKCJ>1{pUx|8Y<7rzf<;h7e?#x-2e1lMR735&T98pcDV^noX)|YQ^{Iagj_~t5aY!d#SLAuX4O}I^4#zV?HRVVl*Cl2H;}s zk-yQhZ^_6>*Q`rK2=oBqVf*4I&R~GDW2~2$Vh6xbQ;mP2k3Wy)H9U`BnPRaf%_gjx zjrTU+yG1^MYo&A3{FqpjoUXmARk)NslkMuPb*M8^=FYkgDyjV+)7dHfPOlGCKRSJk zhP2GH;Tw`xJsAT{1wo1AwjgTK@#55H%T-+w|MI#!aCCt4H)ic`(g3*+L4m|W{@i3F ze|f%(+I;f(N#P{lR`JvxvHj)g*ymxzO13UbCvQ9}OuS4vn9GP}3TPUQjhOyXR(~vM zwK>@b#3(sqYNcuFQG$DqUTS#0FM0ccVT?)4D&gA4T%N72HCiaTTKfI`+1l}*)T@MX z@%_$xiy;-ibamk^!2c;Y&ggC@Rt*^!gnvt+_Q0TeYh^Bghlm4#>U&7M9&AFagKlgG?apRQPU~(d_!I(E|j^92q zm;E4wYc}T-s1D_kxN$}x*LgddwpR?#m5 z?r+;58Pq0UV;nn+;39U&UmNsG+GiuTkMJ+xFvBU@Or7M)muPuSe?(VL&2DtnzT;)$)j_~h)>2WdHNPH>2sH4Mve!E6V zTw^5$T$JtLrRIg0D^D(i3+RPts>S;)<+~I3eZlFpA#r0RqFBF>Yfsb8xPpL}Vf=f1 zYZom*CLAG*a9Gg6w{+=dEM#nr~yXFc=D#-)#kai!VcYK{wC#UeYidQd^oscd4#Z| z5od08l$-5(4kheOnyZ;RRcxk{kUCef0GSoX!uX4U8?;r)BC46=H8yCE_Kyi{`g-L2enF~Ocws7RL1U!W!{<1&jdW%QMsmL1#>+&x|B{ErC$RnAA|4Lh`wbWkw1M0ir}{6gVo#oD$Lshh@t%B}K;^%@t`6 zJiT`Vb#J41*4fN|Xr!~S7xZyHoT7LG0i+*mKk_OQ{g(cmrB2x42&HTv9p7Sf4IpE^ zhpp$XE9@vd^2cPkeeVpH_n?w_Iye@4cTy6skB=l%qcV!nB_#E7+oAr*AMZ0qhCX1` zt@eQKn>GAJu;fRr)I8a@W84JauUs{^T)rpwW`M#N&%d`C$Hs0j6OnO}tmeAK5n})g zpxHnL7&g~d*VnofYZdftZ4f|1-B&n_h&%7w{70En8BX8CmWqAbJ@f1;izIPV$&rSB z(?!LMU2^AAjr5q;eH#JOn@feFS?K=sYFoi&D(})blwPp;GmPSF^^rwc7RQDZ!J(qM zC2<=$p4|xq#?BRa)Eb=)bM!SSVan{`cN>-B*LJ0|MhJ~3*Z`uj3!RD$AWaZL>%dZ&wE9j_{qYYcNp4aFbIJ8E#rfgX(MPp(>Y|LG)7hi@aDUBJWY-{&HHs6WAh zAq)z(z5@UvUn}DKC!T_7md$TESdshG5qE6hP%~w#(}*(PO7EQhrwGRnCW3~_;uY3Y zc;Fu$K7S_~HQcpdP5PZ{8jn8n8~G-d!t5!9WfO`A5LZO|%-n@nGY06;F&XB2`M4Yj1!kDb}~lJisK*)9c7 z?{|W4cS-XoaFC2{CHzJ3pwUz)=_IvQ29xwD8n6lCP{P@u%x+6XmnjUrx8Diu79WVH zC=yr9)L~n|dzXWT;0Dj9ZXRiYC*99CX<+~mkVgqCvu=fJTY+*CYR&Do*IX6jBmMm! zx(_AvvebnEgcj)jzIO(`K@{pOJtzIWScCp5xt67XtQdkEjVm6V9+L2?|ACTaVPW~c z;wQC_1dx4v=#q4)ms{_cyJJlGDj6sJXdVH5ea1JPt?l32Ua&k-4E_a1xj?}MKBh({ zC2XwVr@ek}C{E`ppM*4^##-L$aw99WyqU`c&%GB7hH{mo5Mod)+38gYsaHT>N0I8y zLi^?4jD=hHHQ62w^@6>O+b6y|i&h;ruBsfMgYB<*`@lWjRvG5mf6U`K+VhCEMNW?Nadgqcl6nzq@_VkBIe?@PSRUCyF6bSEF7MM?S3yEY7iqcKDslo<1ZEXpp|_RzM^nK^G}} zsNRE}3D5R4Kex62bHNtLFDxYVUhtOXzNlgUWnpKM{WT6#l%ej@`%tR3)54>EKrR6y0VU%P>y6O9ce2GwO)Sol@Rd?RTw0HaJ{ZoCr@ zJby4qP2LwMWhx3%?zhGW2&w~)-n|P3w?u_yZLNTr@phd8lI&F>IR;}8(7G9;F(nJeUoB&50C|Zs?#rqaE+GZ04<%F z;m#JV9Px|%XnFBvZW7YJQJL#KB&hHHao3`}*up{)3a>Cf0)5q&i8|$u{-dL->&U2W zB(NE%kt8|7#~AK3l1mHY?Vs|)BRk9(*a#C(1&&yY1(?g)Ty7>(el4tDWS1uNcPWNz z-l742-l|om;Y2LcunWbG_Er8pbNg`|V_MtKA=DkCb@%=gfM{$?)G;uO@#^1p|;uJk`)@iye=?j4>_VX>~oHw$g=BVSc<&=JeK< znk}41I4Hc6TzVGyJI@8D90KTri+oBYLQSg<4nw;C>NW+*O{@2iC1N?gWk9q$oU7T5 z5N6{Wh7FC?)AFQ6?_8}Bmj(Ayqe%&*yxnQ%+hg5@RsZbL`v4v_nl>a+h|6{B>R1;Yh?{Ja&xzF zeafr82>-e4eOdd^C&%rs0fZw!!^_10*YNlLLTjgFi8_PEHQd{Zt?c4&lSlWJ1* zrzxIgTsEQ7ZH!_lT2SP@CtgM=_Yjd!zXG_q(L1@V=KM72H_MfKziT53FHO_c!3{FH zozi_MFPDrm(r_;#7L`Yb7r${?94sGOpxS%8pu_v0cl@;01#k;uh6hQu;ymyfr(j)v zasPrhdN%0c5j6zh;HBchsvTHDZn7!DHvr)@K4~of&etBQ^_^}`Hq2GNV7*)EnI*5@ z2E!{IlrT1w)NA5drJdjxro3NE7mSR?byS1RsxMAu)>#MuIbyK*)7$^y@M7WK@5b~y zX2K>>Y*FH$n|XaHL)sY=PlJ}8WIWO(4UoBvaMU@hJ$k;Ao%Fi9d(_7Jr!tZM$d9&v z>=+oEc8*Rii^*pPB0wJ`nAF%?pdc{b!*|fLs{%x&&T34HM=%-5d#GNMDpk=2&=foi zP89BZj}FHvvJpQW+qR{7>O4UNv#C`?^Ka=Fwlc%E5$5~52D2v~vC5hHn`LQ=F6o)c zl<)HX#~~%Yb^uU837(#lfmr9sqqL9Q?i5Nj)@iVSehaEMYOQHh5jc`vvlbKASX7Cq z%s_(L(su)%%C26miJD@PlS?s{nxm_3@i@=wsIWtSvuci`?m0Vq;aovL>q z%BePy$YJPD-9R1?hY&ke?asdr&UBH#JcaRMf=8S^J3jf+1)i+!otUaSZiiDf_=Xe^ zOTSM-FBUTYo5-ezqLV04ll!6EGfOi)f`b!Y_(VGYkArZF8qOHXTVCiF!LOuMPAkw3 zOH0uH1X%cWu{c4unm-I6dG*fo9+@bF${@gp(Z|k($G3-6BumGUY6(I%!r#<_I{Q;( z*Sd!sC$g;f+BIn&1L9Q+%J+lVn^jn!zCc|pEYgz$jEF(Cr)i%QdS(tt5?ss$^>ndZ ze>fU|JGy7BP&tUA-^!4~$vXt0*fPx4N~0Kxc43tOTJpFCZNv8=W`Hr_6i1Z(=U7&) zM$EA_uO4}+3k}JRG@|fXPu*5foP`;nF$5OFhwVsN6q`d4nnb_ijUu^xfcc6Nz(~K< zGwe~oJLZSeCmf2`!X$vBBo5@K#lL2U@@V{0?HHPJiz=g^f8M_?J4TLlR+&nZ>YM3n z2RMPpoTa|;6@SOt8ytVG`v9-^`*}+A+q`DK7j)TZ0A|7aVVMp-Mz)XvXFWH(8+WYS z5ebJEI)rs=(!rVUx!+zWY1!}U_zo?CF(XFaz|&%AC?iCMleKk@GLjtlWtZ2bSfac2 zIj{_L@U=fKVhHH>;*-0$DA zcX~T6r7McyXC21z7Yh_hDTc6jBKyewrzVyRQyb74;FHvv#y0=1Ij+kQ4)>7pBdqi9 ze%PMixyP%2zQ-X!o4($y5&6rX(O_6(*n?IaBY>0hMawml;1QdxWhrKSs?k9N_QCzKwv$Nx*Dm7O?;y3)%yAH4@JzUR7wP49f`7a%9 zV%(4hkPj_tr(U0FtJUDz6ynnuObrHi<3fW!+Eg4X$to+^ZgFb|uz_`vI`(CuocN^bD>ZjW`HxJs>olKl9|9x&u2mHn5DK44tIn`VKF;0 zcl({ov@15W;zF4!Ub-EO1(9L*9gb1FG!4~uAk0WI=e`6ZWI+D8q}DxBR4`W_s|H7I z?D$oQ|Ubf)5}MP>X5?b5Dt3_#L5JUCQD*Fe+L5qLsl zkOj`AdOC+U7QrlLf{X9i`DtV#$^;DGbW_8qWWl8w`?!%hHh7xmn$vubWEn)*df_E^enJ)`STF&nW9I6)#L8Zl?8R(OzUUnp{bfQlc}#(dA(+ zxZ0jiGc=OUVibv%ZSaCjw;aO3(Iz>vT1l9vE}}8M;mW-al$LGn4J}!+OJa#v4khZk zpTDc>1u~yDs{Bf2{uI|IcEpKw9qZNHX#w7Fp(Y|=50Tt*T1Ow0j~P#fdM6Zh7bUBe z^@$NqQvae@g&?xl5{+F(Z7Ar4z#I+I!)7llDrs z{p!@dYGGs&Ol(!S@QBg;@pFgINo6Nr%Y_csDdCZ9#eS6;s_8W^)u7vKU35WgRwOPS zgHbH23hg|&@jYpR1EzMgywEp8MZbzjyC6LOF9&>Ozy%<2XFm%R3(VJV=nS7dAaKA$ zp#Ek}+y+CyNI(mA#W7+5z9k~Q>IL{X>X;ca0NyuVtJ=E1**{FSN74RTZZ;>xeBP9KKUC=O7aS$tjp7EysU}1#SpWkAp>{r&XmScdtYzFw`h` z8FTd>B)OFH3Np0*Y87k)?I1-aA$}9hiW`;LGQ%n4>A}ewnlrhwPXgA_z$(hy+IdZU zqu=7EO_B%#l8;(2dmHE5@2B-c;7-^`^Dq02N4#|P09iJpBT`4;W+x|SHR(@*1WS)5 zTVGkOKcN_WqP%8u^x7l87Sq0zBMmr9OnrYc#z9LbRjN^!_e~W%5%r2VB%69i+V1w9 zYE+Fa7GY|58e2YXr-?q7+B&(J&HoqD=tb`k0DZKtp!D>Mq!ATpfBVJ$9@Ej{=sTXs z<_L4Y7o^rguo`HwQ|bvTjl@MUPU%a_aB65Lh&NXLUa{JCb6SM;lJ?PWxjC1P6D8@E zwe_3I>h|^$)ZFqs#spRsoRDEqRGZcZNz^KwTx|9ip5K<_m8mV>vAlsOu>pcLUcolf zXdYA994yz>&`ZnIB>1$mK1Ajgf>nVy>~CcW`|YfQ44Y42t3gU+?W09P{9t(a8T66V z@`*nIe^p0r1mlMf2mC@J=^?0)B`%*)s<%NDjV^hm$8sN4;Lqzro}rUVI}R znKQ+Epd*`CkBALJb;vLLdi=-tBbTvHVE3o8`;yR&`R^70re94}kqMDai5TZipN<7cTOa_H z9cbQtr~D$Lgu%5)h`nR{(Bg7@L$}-!HacFJu+>!+00mm6>~}r|u&>^L*xL_$&(c*m zafnF8jYK@;Pgd8=$YZD>7p=HOfw++8ofJ zKUG!Z5==Z7eD?W69~jmuk@4fREJ8Xm$+ifmM-#ZtTR_BYn0)X2C)*xYtaNa7Csu&j zz>;l-+3zif+%ZiN66eeG{??bZnL8=f%#w&$c1^g()+ebi9 zz;!QYxMTSnKUEKh?Q5bXov(3r(#4|MkUi4^u?+@z9D8*E&ATp-1XlcBNmlnS+m*Xu zuu2Kir-VKfgZw!YcwZ6+s!Fx7oUzo~{X<^YW*{vyZa7yWI!|R`8D5@P6TN-GTe;3 zP9Vf%z-Om*cAbeCH;3RYSU*Atg7MnC#9w-fIfnWt>AQ$8rsau?4~5Epha_{`9g)D2 zy(Z;$@C7&1q_Q^9gs!top1HWju>jt4;&Dh$XR2c?sJfb|Ks~-bOFcC zGS}+POam5)CHL16T#n}l;#0a`Bzc7%J;ezSEo;Pq2JdhY$T$$lOLdBcvvgO3)Tf6~ zrX$9QQ{LtL^#j5y6*NfLDNJb(yS@~^ru(_Sk%}5E3{h|oCL8KKT3YnMpi6LOvMbX5xl!;R@xyJoJ!Ch|yRoLezble!V~3 z@RSIz?1&B!u5Q(3f+@{Csvs_gjFy9;;50b);rU;`NgeoU;`|*x*DSIPj8|t~w{Gyk z>=@uARli3jkM^^e@m@Xjyt_FcpCK9UTU|KDueT`zSyVL)80xL>l|A%_rTHr~yj#0s zjUvULnbuBzJVXC6IZoH{*s(HpMg#VW_Tpp4B{~+Z*o-NIs)Xy;abqv%X=^V4PUI2w zc3;TSX*%{@o(>yUz4J>Qy0k+R%_@@BO8FG5^NL~6V6vDKHu&Lu4`~oyPyGg#myU_?3rl%wKG$Qnh^f7Rx6Sg_5=1e$zFKt0ml5zS~pY)$AEPNkR zJRr+a?RnOcxE|W(Gs>3@NoU*G!=z1NGM=N&Ww$g}O)Q_qp!+d6Vu@}Pmbn^)(lIP> za+33v;}g<}Uj}4LdhI0CYV%P{Yg#u9=er(?2@M9LFvu2dm@ioW<^ucRGaoeC_nQZ5 z+kdpp%{VGHcxuS`lER9Ve3%O#a6UbTo8?V0L&_XF%sq!JP%AncV`O`MHfGB69 zaV%30#}ipjx#`x$Wiv22J=ys(9{a|*SFXN&h=>^ojy+~7-T|#Q#n%O7Sx1c@xR_}4 zsk7qiaJqKKEcy0T6+Dg<2vp-{I(p%)cllaRYBy?wTv(9^pNQ%aYqDa1NR}Jo%EivR z-Qy_wk=UIpp}h(~l8EJV{7i6<;PEfTk3s%#N#D#kXxV@2*D}svm(=5(Bk+iAN`K>N zR6NVgC`7*-y)E{HgWi?3F785zKwv+PgRM?8ocxOhUPdj4y}BOJ+=JNQ(ekYoiHTne zaiJkVl-F1{$G&Oi+N#$dGRALZi7?3Q<8MN`Av>+uQsBs8%Sa7Y$T{UJ#~tR3wy?o%RurN?sL=<{i|YxxPrK=pv*pR_s}n z9*EBltY~F2N*w64#bZQ~dGXBB;1St6@6E>U)%u-qCHf5o?jeDDmS$D7_b>Fm+JInG zf&zgg8(otmg&^G6b1P4wEKfI2cw(ctBTF}*v{XOi zL}7y38qNE-v@j|^DM|Jp8tVsas%6wAAqw*ZAJJ4p^ke*^m>e(=AY|Mw|!OC!{s;hXNsO;I5nLwM?@y(9cKwQuo_@#YO=hRHKyw2+Tpd&0)CBI z%r9!04gxd7_l~JC12YFnZRl4jI1gdT1oQA;qV7b*KybXoWB$Kqjs_18R#|i*>5$=w61zDh97`^ z0DpP=T;S+hxqmTg{UFNLF=9u#{O!z7>qeuTwSFBCbey@)GD1^&pkh`?2a4cy#i}`g zfJcdvIy+G)8eCddlo@pxkh8X?rx&|m9gSl0jXs~P`M0_yR?jf$Pn%fZn`n05S#dnW z<*V%iAXtK|_CEAp&X z(z!gIp?QjJUv+849=yCqdGU?NeFm%rDe5^@yY1NSco(>4qFFv`3bk|B>=%47QhhY* zvwu6V(PjbW%5?)W3dkN4GaxkVkS?{k6pQIwFQgS~z`!G;kadH6N?!~O_~yqe%+Nz?R%QYvHp%r$2{ z2i}N-MRd+XU3MI2egBPCA zF9e-bWJ&z+r_bDaPk2@|+-?S<0iN5`AG~KIn#R5V9fpqIrUlrz;%7F9?zqrCH*Of| zs~w9^z4iPVp6ocmBL3l9BO%HJ3nYeY$_Gd3=GA*FH|R&*2B3jyv>rAL_xM{s@esT! zbcxDR+A zfhXtF-gBbjnHQ3}uC=iZpAje%aylP2&Ehn|OQOd01H~^U+-e%y{JQ>aBz^5n&E8B~ z#D9G0%Dm4$8uOGJ_{7!|-Lo6MiF$eRmZW{FB?0U`YNUqXm~VP>vU9!`wz#d*`F=6; zZzdY%0F_uebH+3=H7)uAjcB2PsM!5*y<#jv;1!0TfZa}jZ@U247&QBD*|M$U8eQzQ z7A=MBAUnEt4HT>sDS6K%gCD{u2Q3CT%~Q_z0eF_8_-hpj_?CUQEltxUe0`* zlu3knMWe6sw+FrKRGuOS+2JP#$ICfS_EAPK==JK%rdzVPWnXOnb7-KD6cYBj2-9C# zzMWd)@C#Rx+d}h@7huSyg~dOr3ik)eAEtrzIx!fghPwsg`FUyA=#L;F!9 z*B62E_Oy8!`b6I=S&4ssH;LEn8@+LU0>!34;c=#zI@sQf$2KR6Z$LQp(co@~g(G0V zZl+N*Gu<*u&iE?*ObL+`Wf_}E^epQ6ooI^1H)SQszU#8fiO5*v!>?eAQ}&zT>Kaa? z_M=n#7}e6`UKDfs@I zXGl$MRNYuC7CaOd^|shm-ALTWj4P~_ukiAx9^siroiBX~3QmP~*V8LHk{cQ(Sssq8 zB>G;zc3Me$Wqq>~W$g8?U9H)P&dJ&E1z17UOy_jV&195TAZVnBA$@c%TkYugeE3Wp zVvgQP@4;^u#Pm%;)D~*j9YmRaK(C{2_5X@`??9^G_kaB9I5_4x86oSCSx6}(2gg=2 zLmAn#glO1Xif|ArvyjYe*~chklNH%BdvCt?>HYfre*bdr`+48jecji6&Bx{YS%TTa zRwk&dBZ7{W>9=o0Pt|$^H8XFiAktS~;n=}ik9z3u?7hK` zsrb6MSv53SvZS>A-07U+$gLn6juM*zDmLsBHwmSo_3n$Fx95dB?=rU>&`;-A0LZ7G zph%6kqsy~MvdqvrAlg})oiuQO=LjCON7Q?s5@mE|Ka)}`WKiZU?)0Z^~&9_Pg?_uM0njJDID|kgORqIdw zHO2H-m`7xBW%+9?uzD&tw`*nrZ?9D&{R-hr5I{|Oq$-IX^d_eQRcVgi9QRKj- z*;$P<4ltv18AR1IO>vP_lV1x#EP2IR(f)lo(DEu)LaBf|U8pM#^%WSz0?4v7Eethj zxNcE?|ePJHfe|Q>O8z&?ASHNzel`54H>Del-y^^cA zn4DrJP7t8QP#}|3ehV7a{?1nI6*XhIqpIbkwPu~e05|K5HxXR9^Qxq%Xi zGsGR{kp_+mgCWH501Awki=wEG%1mJ0!p8M9268fY7>V1@Oq2*AGV1!DdcAV0Jgz4Q zrkJo0z~l%*P41(YyS0u#st8b}pIIuik{q7ozZnven=CmNwSV5dbs-F^6%|64DPbZmNLi1*&gHGTX(u;l7wZr?`gA*=C(oRi%IZj>%B*=ndtf?{c^rT-gA(|CVws!SsK z7KK2`E_SYGiXgn|KDV6?(sz0vaXedg>bsOJzTCIj7V-S1+J+x&(~CkNkD6W}*gx^n zwJGOUuj0MYT%eYWjk|-&yK3Gt66wnJdsB52{v>1O0>pNSEv8j(2=?H)GzV% zU+R>u$J?UMuvyt}L_`!KU_NUj#Q=b~p>g&Ti;hqWmR!?K;_YV+7M+!rO$+)sK@yX7 zuUA^)Y$*m zI}KKotvJmKH{E-BG}+xHds-kVQtA4RTGh*Prao2J;~KGl6xoX$_LSm9qrZL_yUNe& zwP>n#T$-F!eJ(p1wT+vK??StA&2k#>mZIFw@_EP+75?%CGp*Ccel^gvSUQJY7rW!` z)Ze=)zO$RaL3{5Hb{_!NbJcJ=noiX}qZbEhMKe_v!&@QCV>B0AM8DrE0m_5LCub*k z0Q**nFNtQYbZlT~`sbbd44mS3*CULLhq^}YXuPyH#?_{Hdyg%@=wKNf_c=}RT2&i% zVh)Hld!>3s6UdA2>1VdcY?7KaHaNXDT5bY_!jm`6q$pGhKM_uXhJ%LY*~+JItO&$T z!}jrg-aO_T`R$R)Z7!hT2k}~&l(;84K|NM-Dm$MTw)0op}MM= z9{(}9$g|t1+qsWypA(11$*j@{oS!K;6t=uw!(l{nuSX5dgwXUf%55bN^ZQ{bNkx`0 zU=0&JK}1nhXupd}L3uviwNSvn=T3xELtvgQmR4dyC-i0{*5FBaUdoi9^k+6l=-S=Epb$u_4hxytlV9pq;p#Ajrv zfBawd{N?Z!MVfR8K$&n*+A0<98^zc5idv5gD+bb~T>F)p-gcOC!ws$vYDo^z3H)1a>suYY^)F}-!GHSH2@ z`;|8JjT^%IH)Ar3EDKYwEdBh{{a961Hl<%F1A}lY>`NKs^rQi5u=&z+ocO*4LQ zNmmjRlSE!4YL~mPrUY94u`C%X^FaWS#7Gfm)jnKBpTY zg#4q8lS2E}H&g{4GSh5v2K~Xd-X9i45lwD4%?eopu$ugPlvF+f_6XKs|BCEGZdCi# zNX>Wu)4QPKJTpKoeq_qz_b z*^Vb1X&#oqp(oL2vyw~__;T_wKZT0;apMr~v=;8quDyEoKoQjHP+2s?+qG+>+I(;T z5Nhg)h$`I*YfNUPXm22nlZQY1*&@-miOnkEMfZt}{+zjt{=uSQezlGz#L$U0TI4P*KJh}8*{6?eht^I^4_D$l!e2OASB9^Th-UJ2EJQ?Uj0_2(Mulp$ zZ`3a7#o4=iu$2nu2v@JkQkF!|CQ=f~NR%m2_XS~3wN1F%*HJuzbQ&D~X8!JDZ{urO zNG|fNGRIxGDAKX+G}au#Z12@oY|NzTJ;UibGclHb^ik6K8=F1PMrCh=LzR~#<)-ta z;YKo}pulw#JZI|1m8fz0OazO^^b#jkJE=d~t2VV%f2Ng%Zxj}t&|<^G*%m(eyK=Nz zaNmR)H`l8yWiX_{qaaW!4S0E7A6mqea95yQ9Nn~VMQWl=>(y&T!g{`xoZjrnhbZqD%3lImm$(H5BN!?KOxs6Z z1S|9O+ScteZ2jyPFZLpL%TB5FfBf`;*ys$J{;7v02e#j=k0<3NCnwdWdve~P!tyO2%mH?CO|oO&>&7dgC#v5O4HRPidwnw%;cml+1E2#wi^tmoPeszc?M z^n5D5xNlmU2F1KWCj9J zsMHC=^Tv|Ts)ht+W8)B)!~TX_lkHgs=Th*Zny@8K%5+1Z_aFIp)g)c!-(C23$1xKk zEG#Y`U+iVJXfDk*yf8VMTZ+wbde`N%k@MjSIT8cXy$?1bG1uE)Zr3Od%JJJB=2^6V zz}O`rbCIi|+xoK?aCGQRu+x6{bPqv? zu&}$f@vMFeXQ?C%@$V=*&%mVfnT5;#ZrAPgQY{(&c^mfibAqv=ty;v+r=_(%r<28$ zlT+DK*}8oN;c}uwf~5wMm(w>YiT4a#3NS4)xlCJ&^+BUl9VER@1qlol!p1Z8kts7Z zVo7~J>-3jgfa8pfpG=9r)94O;c;Hxrx+X)--y|$5D=I9EgselBtdyIP)T@=)SwkLA zqG@<_)cv+$wle2EK~Dc51;t8tyKXW>#7ieP1ET0OXA#F+>~4Zve)=ILhxYm>4ECuP zIL&BUc6zL5$Af&Lf3mXKPODL#8$`gPUSqRKsVC78up?gqVHded>{Kut|73I; z*#meTXxaEtIZj9rzPat9BrM`~n;LzN{KlO0qqOd=dX=mT_IoaY7X_%#E%Iz^URH@A z4gA0_FfK~zWh3?5ZZTNu&cq1S{2TalrTibR-`Tq=XIViC2eJc5CRWXsy%J2OBjB5@xPL&X@%jL`6^XtY|nsSCs)>1G#qA zKXq@6)_#%x$-BRv_%iADr*de76MVp_!2W@-;TLu|1=f(G-Lo3w^d&6$@!5*3_tD5& zUERe$>H$vwnYQ?(zld4Bo!1F&Qn_4L-QO$ni(9(-Kd|LILqL?gpuUOK8<}KTQNcpP zvCL!gQHvfPupVu^f5mOUGl#?Y7bH17DT32yobj~%lKCg&;mpHc7W)4lg)>JEHp%fZ ztI)ib-k$h3?J=DyWLJbBO1RzM(yv3q z|5}~ivFcc_!sTLYYed9n`VU-x99o_YzR^8*IB=Q4#~}XEHc7UN*(!;DTf`;Y6+%dw zCWysl_1oOU&_B8=836Ln7T;M058lBfJa7)g@1B=pdQJWl1bv-QEc{mios*^?bX zQ{q(zkj~tdEMpGv#8$2@ni+I;x4ETE=Wnmb#?i96juf&BFUW6IC z8ZvLqtHOsxzZwN)Sq2rY$Qop4G(6}!mP7{~tLaLlSB|meptpO_9+w@(c746_$D{gi zTMbP@{;#)s`?Kz4=~#Bzh&Y}bJtfB`2(vn;%q-sa@Y4J1D*YUl;2Rg>$g1WGOwIB~ z+^t@NhJoCgymPMGGaqoMg+Svsoupz)t_p_a67RiUOw6AhIGt^Dyg1Dd8&uvUL`n(8 zFCfh5o;%LyT0k!zD^MG8q}x;cg;-L!Z&N|(qwn%VhNJhUb2sU3xuM|C^L#=gK)vs? zZ8l951`d;(G0})SU*34vh~5xHRA>sWxv9s&q}KR=STjb<{Mz0)TD!xbp%XlxIwf41 zc|?=VI(?Yk)I?@sK1m;V=UTC_dH9LJ>s2tTroga zx-si&{ZNmchUJ5Jp_c%OOB(YT=k@Al{fvCEK$#<-`AXykVA2?_-Z1vA>*edFqlrh* zk!A*AQNg_8RK=Tg9&7bJf;UoVU3(B5tx9uGQ}ulF2CM}N%0J>?oc_u@J+2w?)!sC_ z`~TSyqV{kH8u@zNgn-MMnvNkEcW%%4uf01ST6Zo#?%Q*14L$Cw)pWd#^Hzt+==I#hfjZh(?uNZB)j&zN__?25uV|4_UF0uBCm~Zx&OYiYK2T0?sj+Joke zwk<7tv{XJ;yOUA|ikVegcOUZr)tS!5%E&&Ilk3D8MPaicwH)UfpHqJx9tZ_Y)bCl- z$)&1*oru{}qZ@7D0eFbQL{0*6_x?a_dH2ZwnSJ?_GX!;9HdkPCsx0}u}LQM4`Ie}P2z zn_q&u!;Hm+J&Jk*(cKE*5n5hn57-L=DiGRI$3wR5+H~sUCix#e*Be{qK1_v(kY9}q zSRs1%YcJ^}T()APGp|RaoIOuNgH;TaZiPQjd#oZ(uAr&D`XlDY!LF432MTw{U?crz zzcGkYsU2{LrD`5pm4Hr!fbP|KCFd*fqd%`lur&lJ#o7 zBS1j2?5THm0BIeXwg<3eIB0ea$6e^kCZd*0t;0x=+5A3)CxA}c$)Gix&WlzJa$Bxp zXFW#10J2 z1U~4Aj$*+?PqdlB67iY47K5Gi&xhZ#;Gj~aHd^oO{=cBy9Rs%AZt^g|k7Y-s$*kQD>7 zAK3@@0V+6*1RcxLN6W-M^{!D=%|)*24&9`~@-f+2Ux(4!iR5E4*xpv8tOL!P)$20i zqj4<19?@h||GG?tN%&<-Ry!Y$4$K~J{_Lzsg*3EkU+tJ%_f3%jFi}qE9 z96@eDMg4)9Da$BpqDt^gWTkm8c0*k_`6k503)n)t?LS4aW5_elxV>@~1H0Esi z&xr5F%31Eh5vLV^Y7&n@jvgFRXA4xNnO`J$WDO5)tgX8pu>@#O?7BjpA`Wxp9)AwOL+D3gpkwX( zK`+EID5P_kr7@u})hRZi=@{s(p6A@s2n$BCk3RA_zKDF^?YSbce0jmkAUg5rytMRq zUTe7YV^)Z4rs|2lkJsu}+xjQSebX$oo--Mgs7?sE>r@&AG|kC|H@ESXHJ-O8*+jZxD$ti#W^}Pdz=g;2} zicY(dldlUOOY9D%g@JKkL}~?vW;sBINRc?DZXJ=Z!p>JCFO0tn!>y`TFXdb`_5IjPT z%bbg982~pJ!$;+4T%*hyUp@@M3?-W9wXPN6ZDIDfWZyp8)8O8CS5z6_gdnHcsf0sj zPv=WP zA+h(hTA-N3m~N-rKAR=K$~ofGX>qQ~5$@MTnu2~=GPVNI2cbZBSQkCH;2>_QlC$|E zgvjB1K}auQ!)eDK-h;*%TapHbqmc~mU4kLMIEq@ho03CMW@>uBCOmupOWj(Z$n8A* zH<<;UaT-0bKN^DkLBV~0z_O*q|cu2VY%B8#cmxUu>?d4NJP<(45jVPG1JBep@(3X50}@zKFi#@POdU<+^ZS zyCpr1(S0l8RDL`-=Q}2JHtf7CT7PXKU`qtiesVzd=O6i);wVBut5_qD{t$9I(Ph0i zIO_`<4W}(MZ^ICwF;uWcx>r*Fjtij{+$hiVMd5Q~{>=|J4ZkI;71hmSmb^*6m2nfH z)%>2Q0Ig-Mb&Gu^oH`3(yfVG^2?V#nIm5xgO{9j;e%EQ(*|Db&fPjyjzVxO+%rd?< zqK}sLymjc+&<^3V2RI0~=H@UpS%7N9qe_5z4PnvuFR{`zV9Qy@-#qDi_BFIy|9Y21 z_9(p9A}9Mi&v9B21=~3|*Y$sV?U&Ioxu3;xvd-cAcTKwb>%vj}jVwc>=k%Y71#`mh zt4gTzaAK79L;NLV2A?+0m~AV9FZj*>?+a%w*ZZwi^d5>CzstCpRy^b~ZEz{|ql0?f ziSRXJqQGd^HlS|F6J&zl{O$gQ3;owmFH&tMklkfBD7yh=@g~OcG{b|LNb5OtF5Vqv zly(TlqF(tENIX#pFbc$fB+fD&ob;+v@lQsPelWFloIlTEbLBij8x z2b|jq1L+y{0hve+i4Ze80x{ga02DT*g&U4`C%b!mzWW)$qIV-1yk&#h1A%{?6o+!O zy5r$9oLX=IJV*PMf0&9dnU6mN9&zDA8h@z>&#qm0)T>_v#+&%4bHmU|GI9K&?~;n} z@!#=-s9~`B>UA`e)wM#h^q+j z7h^gI6bc!zmo3+$!T=cUjY85f?c-`6n4Tx-2f zom1`Wmxo~z=?|x#wgrmhr_7O%L^QaO_=_12pT^Ys`xKc^Xr3*E_%7c|mN>0a8fR3R zs@Jh-?BIl`uJ}E~8meF!{t-UaDYfpum$4eu#h6|`tmVI?86c<74=VG1Y>oN7oYZj! z=L|te0FaP)bq>?qAiL*%mOOH{?!9UROcS7U|kUDIzjwz zB!L|^JOV8zQji>DXFuvrn-)3v4}GvNbb^bPwb#0M$jP$oNVE{zHRl>Gh25~ZT0cEdJ19S8BpHu#AP1*$~~z)kE+Uij~YYv&SJY#PDYl%fvKi6_X(4e5xMadpqv#vh=n~1 zgz#8`w9x`MHf3EyOUtglZ@kA>Uwl2?^cB_FK7rV@YbITDAP*XtGgoS|pZYeb;`;v$ z5GSr2>ZtjNWHYWi-dHUBv_`f-naX&+FO>Cmmz$k9K$Bx`%wMRqL7;gYvJ!TUiuriR!34NM#;oZ;3$fB{L7Jq z+GAS|sZ*&sufL6%VYOE#7#DARTXrvPe>vLSbypgZ8jn9D`tbnAp5xWUSq|1n#RK$P z9VyRGDRI859srhL?og_{Jz?bs7M}e9e@poQ659T3%@SZFE{>dTCY@nwow|~I zPw{(Rd%s^qI-Hfu?$?Z;NO~4GwK8)8g{z8t4nx)fUoWaLfAR5m~Hjs^$w7txFQOY2pf&Pmnz-wHps+3_nzM! z8Q=Reeh@P5b9OR*oF-d)?vKw$<@*RHAONV7gfLD))K3`>#X(CN*8p03KXjo55$yBLH5i0=i$slSDZbSHtE@q#qu&FYZu@iDzQQMXAd z@huO7XdKSOoIgD=#8)}{^l@E}JF<+Vg#;#tw&g|`+r0Cq@HD^HCPE9C%o~{~a2(-0 zF|_ZqHFHtL&~zWv@O}QkxDZH%ED#@3as5`OZx!3brKi{u14?&sKuL+c^#C44GfwRvY<(Zsj=DV4R$i~Fy`LxG-4``j%|`6NAR8kL0~#0;HJ)dHja084uZJdd+nNGct<^6QJ%Pss+X_k(O$ zLUO7v6D~YJ7g<&;j5J|9@TpIoakW&awOLU4I*F9ITkMq#?SUDfLW~5H=BUrdAKx`- z&XN9I(qR}<9LHj#w%HReyWxANC|9~J#Rh-piuK;$XsF#C$Uvg=o$@Q*$Qv&=|Yl}$4ekAq&b61)!I1w7f4~`iEhEs}`$=rRCa4iut_+}+R#Bul@ zPx_c{0jQGXuGX(KGv|rSKYuX)6y>V7MRZHl__|C;SmAnp7W3G9v9tGE1)i5_Az?;u z73d={xH0#DIx%&CX%=8akPvfAOMRvHmbF{3v{TKA1+Q0Z{5S_c?V_B78YLtNBB?!p#-ew(6}(AapVQk`|PaEI_79Ts|z{Q2-`1Q@Wcx4 zNsfMBED<1TvPGzUep1zmd^k@;vZdRr2$|1hFB-tl=dJLKf`bZJ-sRr$1CS)svPu#P zTn+0eb2HB6iWB)2o1PZ|kqeAp8h6P{+5$cAAXkI38nAM$I@8SgF@FAnw`MseIY5T? zgJ9wojjRhB+|^7r85K7%4YZTXJPUL~op;{VN&A_%>in49-}BR@?QB6JUA3&9Ppy5@ zJ?+sU#@++1(AmvDIDd2i>{3>>AXU!?sGWI*UFguKMW;c=Kkr|>Rm;Z~a#Yo9us`^C zLcD3C5KyO-eF||ap%HH2Ep*(ps?uVw0sH&h5pk}`_DTl2o8TOSFG92z`4!CuEbBQ2 z-#|Lwqs{Sjz2Z2Lg8QGXhUr)VuNf(T;^d&8SV#d>fbLE%1spqYosehF9=BHz8H&w# z6fht6SYGg>fXU&Bbv_c9n7js794m*iv% zBp8WW=)fmx>?4S9Y;k0^eBaGEYY6ps0N(A|c5RMxv)h4ZyyJe$ zix?ads||$os`?Wuikzpm7g|jtgeE)v zQlVs04fC}h-@ht6UUzFL7RM{M?eu2DJ$TD}^Pd15g?hq_8|mfW7Oun)k;CE*Ud9Tu zz-54-2UrW4yJ~%w3=nN}cGEYdT^D`3j)zwFol{>0P9eBl4bU@lFvqlu-@Ms$Y~6s~tZc3TZoAi&z;+ zwofYKj}cxud#>wVJQr(<1Y`N%{DbdheT*j*1QGC&(vMhu|((@t|+g z{S-TLJTeuoIqSK&cQT;jyZ`n0sjT{6HATl&JP0j(@VV#@8JBvjvf^rQ-W{Fv;wCS@ShT=rgzAIr z`!t*=l*AiX`VzyoxLhgM`F0GFD$e?&q-|%c^~rJa77XfUX9y^83;R-S?jPs#bmdC& z*}>3xjPE_!lQE97gSE5cP1Cxgex-zG%P%DEBn1;esY)=p`_*}<28AUNcGJKK!Mo?YrV8yz_jzxTzJ~J*Upw~_=#k7 zo0YyyXsmfQ(fsr?Dx&ha?So1RxE?^m!?wW#x{)17ys1&x}`bk zU4+EFt_ZPEG5OLewl^nAQML~p)kz^gZCZpp@;U=1#^8V}$hpgdYDCj_b9iCoHYJf! z;n;C=LyvOLPyLai?0YvqgmgAQP&bi3dRwKhek*o|DZkK>F~SxmHsYVMZ6=}6`w-#w z^C8*Z(B(~ss=y-%!Y`1+Kk|Lx_{&$k*@g-b${^ku?$AxO;!b03=ereR3@TXV_kaARYVJ{f!c*FM$7WUsVXm}4See8GTitzZ zX07*P0~tJ0NjR7nx(IpA8})cA{V@dRGKEF&-a({q_lRUuXq|nve)ZVR;xAiJS65W74vf#Aqao;Ndz`tdV(!#$#yPCcfaP7>m_AW*M(*Fa zwZwam$1_`sXUclP`u>9Taap7~dtbYpAmn9gB)*W5!~}iTC2@-r&L$p|`bGvp&cKUG zOD7d+^1l72UeYV`Nt0$9w8H4_;g>+q?Tnaf5cDQgs1YYokA9j>4hTpk<(IqA~{+5@8P$OXtFgd1=t+@`DB9njXx8vEI&i-J2^9!@ZJp)v8zYaQ>b*MD;E2MOL=u1X^ppQg84U>e`?K>LQvMb`vMas_swre z`@F#T7LX$nR?`MCA~&B_@7y@}Sx4FJ&Imzvu@rI>X-$_Jgv*()d7U}oqI%!^KIYHy z@WeAzHYX(|+!(vE=^!X~1%kGLJN;ckYp!tw=j2aGsq||aWPI7Dx{WmoD)WfX5BVah z+*eqC6r=X$d#sru=m)?JEpfbd`JRQU1Ot7D5Odi=NPkpDigzj=lneI`?AikXXg`Bu0a18{0<^n&+E-ZEPRvY!f zgbzyRl!$m0%~9>LpcR$#$5li|izCp{xdwWlFw@MN-Fc7+6yUsxVAEKY43-cYZRr?mCa>s3ris4 zI?3Tgsm(vL$EY|*%au8vs@R%?g>k4WL8;>d@PM_Q>Xzbu_DJvsd8h;f_#0z`{*e#! zUd>B3l)h26oh@+4k5Y#dzzUWNppN63m6G#z>@X07qh|4yvK?+}HkirR2vc)6;-Ekbpa|7sOO9ARbd^i)a~+B0K?Ad#D8RK!>ho%}CS zW9))dU}q$S)=UtsuKtcbV$#Io;-EAWAOk+m98&G;3xd@%g57Ta8|fhjXp^3k`*#J^ z@P}P9b(p5CJ%tM3*f+qeEsDNFcJfG2h_X`;y z1k{-dw$(cjv6lXhA!5>8MbsUT>+>Kr`0Xv=uO-(0M=kxZ;&X7&VHp~_Mg=t% z_UZ&i&4XQdBmtU;5GYL~kaK8{m~2h7;YI)o5YZxFcs#h@4ofw@uMMPyHyt{bz@}dQ zn-fsxIbw2^#CGltIA134_(4>^B&CpRH*AsT-OJXVK@cAh8Zc_1tgatIP<{JC`~~iHi2YSL`>GTizzh3%s*uz{Na|8hGM?FS-}4THIlkz literal 0 HcmV?d00001 diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/.mergify.yml b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/.mergify.yml new file mode 100644 index 00000000..65c63410 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/.mergify.yml @@ -0,0 +1,18 @@ +pull_request_rules: + - name: rebase and merge when passing all checks + conditions: + - base=master + - status-success="check formatting (3.6)" + - status-success="check formatting (3.7)" + - status-success="check formatting (3.8)" + - label="merge-when-passing" + - label!="work-in-progress" + - "approved-reviews-by=@flux-framework/core" + - "#approved-reviews-by>0" + - "#changes-requested-reviews-by=0" + - -title~=^\[*[Ww][Ii][Pp] + actions: + merge: + method: merge + strict: smart + strict_method: rebase diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/Makefile b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/Makefile new file mode 100644 index 00000000..f2199057 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/Makefile @@ -0,0 +1,25 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile check spelling $(SCHEMA_DIRS) + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +check: spelling + +spelling: + @$(SPHINXBUILD) -W -b spelling "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/README.md new file mode 100644 index 00000000..892bcb04 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/README.md @@ -0,0 +1,72 @@ +# Flux Workflow Examples + +This contents used to be hosted at [flux-framework/flux-workflow-examples](https://github.com/flux-framework/flux-workflow-examples) and has been moved here for annual updates paired with the Flux Tutorials. + +The examples contained here demonstrate and explain some simple use-cases with Flux, +and make use of Flux's command-line interface (CLI), Flux's C library, +and the Python and Lua bindings to the C library. + +## Requirements + +The examples assume that you have installed: + +1. A recent version of Flux +2. Python 3.6+ +3. Lua 5.1+ + +You can also use an interactive container locally, binding this directory to the container: + +```bash +docker run -it -v $(pwd):/home/fluxuser/flux-workflow-examples fluxrm/flux-sched:jammy +cd /home/fluxuser/flux-workflow-examples/ +``` + +**_1. [CLI: Job Submission](job-submit-cli)_** + +Launch a flux instance and schedule/launch compute and io-forwarding jobs on +separate nodes using the CLI + +**_2. [Python: Job Submission](job-submit-api)_** + +Schedule/launch compute and io-forwarding jobs on separate nodes using the Python bindings + +**_3. [Python: Job Submit/Wait](job-submit-wait)_** + +Submit jobs and wait for them to complete using the Flux Python bindings + +**_4. [Python: Asynchronous Bulk Job Submission](async-bulk-job-submit)_** + +Asynchronously submit jobspec files from a directory and wait for them to complete in any order + +**_5. [Python: Tracking Job Status and Events](job-status-control)_** + +Submit job bundles, get event updates, and wait until all jobs complete + +**_6. [Python: Job Cancellation](job-cancel)_** + +Cancel a running job + +**_7. [Lua: Use Events](synchronize-events)_** + +Use events to synchronize compute and io-forwarding jobs running on separate +nodes + +**_8. [Python: Simple KVS Example](kvs-python-bindings)_** + +Use KVS Python interfaces to store user data into KVS + +**_9. [CLI/Lua: Job Ensemble Submitted with a New Flux Instance](job-ensemble)_** + +Submit job bundles, print live job events, and exit when all jobs are complete + +**_10. [CLI: Hierarchical Launching](hierarchical-launching)_** + +Launch a large number of sleep 0 jobs + +**_11. [C/Lua: Use a Flux Comms Module](comms-module)_** + +Use a Flux Comms Module to communicate with job elements + +**_12. [C/Python: A Data Conduit Strategy](data-conduit)_** + +Attach to a job that receives OS time data from compute jobs diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/README.md new file mode 100644 index 00000000..c612e517 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/README.md @@ -0,0 +1,113 @@ +# Python Asynchronous Bulk Job Submission + +Parts (a) and (b) demonstrate different implementations of the same basic use-case---submitting large numbers of jobs to Flux. For simplicity, in these examples all of the jobs are identical. + +In part (a), we use the `flux.job.submit_async` and `flux.job.wait` functions to submit jobs and wait for them. +In part (b), we use the `FluxExecutor` class, which offers a higher-level interface. It is important to note that +these two different implementations deal with very different kinds of futures. +The executor's futures fulfill in the background and callbacks added to the futures may +be invoked by different threads; the `submit_async` futures do not fulfill in the background, callbacks are always +invoked by the same thread that added them, and sharing the futures among threads is not supported. + +## Setup - Downloading the Files + +If you haven't already, download the files and change your working directory: + +```bash +$ cd flux-workflow-examples/async-bulk-job-submit +``` + +## Part (a) - Using `submit_async` + +### Description: Asynchronously submit jobspec files from a directory and wait for them to complete in any order + +1. Allocate three nodes from a resource manager: + +```bash +salloc -N3 -ppdebug +``` + +2. Make a **jobs** directory: + +```bash +mkdir /tmp/jobs +``` + +3. If you are running Slurm, launch a Flux instance on the current allocation by running `flux start` once per node, redirecting log messages to the file `out` in the current directory: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +4. Store the jobspec of a `sleep 0` job in the **jobs** directory: + +```bash +flux run --dry-run -n1 sleep 0 > /tmp/jobs/0.json +``` + +5. Copy the jobspec of **job0** 1024 times to create a directory of 1025 `sleep 0` jobs: + +```bash +for i in `seq 1 1024`; do cp /tmp/jobs/0.json /tmp/jobs/${i}.json; done +``` + +6. Run the **bulksubmit.py** script and pass all jobspec in the **jobs** directory as an argument with a shell glob `jobs/*.json`: + +```bash +./bulksubmit.py /tmp/jobs/*.json +``` +```console +bulksubmit: Starting... +bulksubmit: submitted 1025 jobs in 0.43s. 2392.93job/s +bulksubmit: First job finished in about 0.521s +|██████████████████████████████████████████████████████████| 100.0% (274.3 job/s) +bulksubmit: Ran 1025 jobs in 3.7s. 274.3 job/s +``` + +### Notes to Part (a) + +- `h = flux.Flux()` creates a new Flux handle which can be used to connect to and interact with a Flux instance. + +- `job_submit_async(h, jobspec.read(), waitable=True).then(submit_cb)` submits a jobspec, returning a future which will be fulfilled when the submission of this job is complete. + +`.then(submit_cb)`, called on the returned future, will cause our callback `submit_cb()` to be invoked when the submission of this job is complete and a jobid is available. To process job submission RPC responses and invoke callbacks, the flux reactor for handle `h` must be run: + +```python +if h.reactor_run() < 0: + h.fatal_error("reactor start failed") +``` + +The reactor will return automatically when there are no more outstanding RPC responses, i.e., all jobs have been submitted. + +- `job.wait(h)` waits for any job submitted with the `FLUX_JOB_WAITABLE` flag to transition to the **INACTIVE** state. + + +### Part (b) - Using FluxExecutor + +#### Description: Asynchronously submit a single command repeatedly + +If continuing from part (a), skip to step 3. + +1. Allocate three nodes from a resource manager: + +```bash +salloc -N3 -ppdebug +``` + +2. Launch a Flux instance on the current allocation by running `flux start` once per node, redirecting log messages to the file `out` in the current directory: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +3. Run the **bulksubmit_executor.py** script and pass the command (`/bin/sleep 0` in this example) and the number of times to run it (default is 100): + +```bash +./bulksubmit_executor.py -n200 /bin/sleep 0 +``` +```console +bulksubmit_executor: submitted 200 jobs in 0.18s. 1087.27job/s +bulksubmit_executor: First job finished in about 0.248s +|██████████████████████████████████████████████████████████| 100.0% (229.8 job/s) +bulksubmit_executor: Ran 200 jobs in 1.0s. 199.6 job/s +``` diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/bulksubmit.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/bulksubmit.py new file mode 100755 index 00000000..c1a2e9a5 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/bulksubmit.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +import time +import sys +import flux + +from flux import job +from flux import constants + +t0 = time.time() +jobs = [] +label = "bulksubmit" + +# open connection to broker +h = flux.Flux() + + +def log(s): + print(label + ": " + s) + + +def progress(fraction, length=72, suffix=""): + fill = int(round(length * fraction)) + bar = "\u2588" * fill + "-" * (length - fill) + s = "\r|{0}| {1:.1f}% {2}".format(bar, 100 * fraction, suffix) + sys.stdout.write(s) + if fraction == 1.0: + sys.stdout.write("\n") + + +def submit_cb(f): + jobs.append(job.submit_get_id(f)) + + +# asynchronously submit jobspec files from a directory +log("Starting...") +for file in sys.argv[1:]: + with open(file) as jobspec: + job.submit_async(h, jobspec.read(), waitable=True).then(submit_cb) + +if h.reactor_run() < 0: + h.fatal_error("reactor start failed") + +total = len(jobs) +dt = time.time() - t0 +jps = len(jobs) / dt +log("submitted {0} jobs in {1:.2f}s. {2:.2f}job/s".format(total, dt, jps)) + +count = 0 +while count < total: + # wait for jobs to complete in any order + job.wait(h) + count = count + 1 + if count == 1: + log("First job finished in about {0:.3f}s".format(time.time() - t0)) + suffix = "({0:.1f} job/s)".format(count / (time.time() - t0)) + progress(count / total, length=58, suffix=suffix) + +dt = time.time() - t0 +log("Ran {0} jobs in {1:.1f}s. {2:.1f} job/s".format(total, dt, total / dt)) + +# vi: ts=4 sw=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/bulksubmit_executor.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/bulksubmit_executor.py new file mode 100755 index 00000000..52808633 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/async-bulk-job-submit/bulksubmit_executor.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 + +import time +import sys +import argparse +import concurrent.futures as cf + +from flux.job import FluxExecutor, JobspecV1 + + +def log(label, s): + print(label + ": " + s) + + +def progress(fraction, length=72, suffix=""): + fill = int(round(length * fraction)) + bar = "\u2588" * fill + "-" * (length - fill) + s = f"\r|{bar}| {100 * fraction:.1f}% {suffix}" + sys.stdout.write(s) + if fraction == 1.0: + sys.stdout.write("\n") + + +def main(): + parser = argparse.ArgumentParser( + description="Submit a command repeatedly using FluxExecutor" + ) + parser.add_argument( + "-n", + "--njobs", + type=int, + metavar="N", + help="Set the total number of jobs to run", + default=100, + ) + parser.add_argument("command", nargs=argparse.REMAINDER) + args = parser.parse_args() + if not args.command: + args.command = ["true"] + t0 = time.perf_counter() + label = "bulksubmit_executor" + with FluxExecutor() as executor: + compute_jobspec = JobspecV1.from_command(args.command) + futures = [executor.submit(compute_jobspec) for _ in range(args.njobs)] + # wait for the jobid for each job, as a proxy for the job being submitted + for fut in futures: + fut.jobid() + # all jobs submitted - print timings + dt = time.perf_counter() - t0 + jps = args.njobs / dt + log(label, f"submitted {args.njobs} jobs in {dt:.2f}s. {jps:.2f}job/s") + # wait for jobs to complete + for i, _ in enumerate(cf.as_completed(futures)): + if i == 0: + log( + label, + f"First job finished in about {time.perf_counter() - t0:.3f}s", + ) + jps = (i + 1) / (time.perf_counter() - t0) + progress((i + 1) / args.njobs, length=58, suffix=f"({jps:.1f} job/s)") + # print time summary + dt = time.perf_counter() - t0 + log(label, f"Ran {args.njobs} jobs in {dt:.1f}s. {args.njobs / dt:.1f} job/s") + + +if __name__ == "__main__": + main() diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/0.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/0.sh new file mode 100755 index 00000000..a11e2318 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/0.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "Once upon a time... 📗️" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/1.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/1.sh new file mode 100755 index 00000000..f958b58f --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/1.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "There was a little duck 🦆️" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/2.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/2.sh new file mode 100755 index 00000000..fe6930b6 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/2.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "Her name was pizzaquack 🍕️" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/3.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/3.sh new file mode 100755 index 00000000..7ba6b823 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/3.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "She was very fond of cheese 🧀️" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/4.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/4.sh new file mode 100755 index 00000000..089c949a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/4.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "And running Flux 🌀️" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/5.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/5.sh new file mode 100755 index 00000000..3c009208 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/5.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "And so she ran Flux, while she ate her cheese 😋️" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/6.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/6.sh new file mode 100755 index 00000000..9233634e --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/bulksubmit/6.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "And was so happy! The end. 🌈️" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/Makefile b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/Makefile new file mode 100644 index 00000000..ccc018db --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/Makefile @@ -0,0 +1,19 @@ +all: capp.so ioapp.so + +FLUX_CORE_LIBS = $(shell pkg-config --libs flux-core) +FLUX_CORE_INCLUDES = $(shell pkg-config --cflags flux-core) + +ioapp.so: ioapp.o + gcc -Wl,--no-undefined --disable-static -shared -export-dynamic $^ -o $@ $(FLUX_CORE_LIBS) + +ioapp.o: app.c + gcc $(FLUX_CORE_INCLUDES) $^ -DIO_SERVICE=1 -fPIC -c -o $@ + +capp.so: capp.o + gcc -Wl,--no-undefined --disable-static -shared -export-dynamic $^ -o $@ $(FLUX_CORE_LIBS) + +capp.o: app.c + gcc $(FLUX_CORE_INCLUDES) $^ -DCOMP_SERVICE=1 -fPIC -c -o $@ + +clean: + rm *.o *.so diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/README.md new file mode 100644 index 00000000..6f1456ca --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/README.md @@ -0,0 +1,93 @@ +# Using a Flux Comms Module + +## Description: Use a Flux comms module to communicate with job elements + +### Setup + +If you haven't already, download the files and change your working directory: + +```bash +$ cd flux-workflow-examples/comms-module +``` + +### Execution + +If you need to get an allocation on Slurm: + +```bash +salloc -N3 -ppdebug +``` + +Point to `flux-core`'s `pkgconfig` directory: + +| Shell | Command | +| ----- | ---------- | +| tcsh | `setenv PKG_CONFIG_PATH /lib/pkgconfig` | +| bash/zsh | `export PKG_CONFIG_PATH='/lib/pkgconfig'` | + +This might look like this in the container: + +```bash +export PKG_CONFIG_PATH=/usr/lib/pkgconfig +``` + +Then build the module (if you don't have permission, copy to /tmp) + +```bash +cp -R ./comms-module /tmp/comms-module +cd /tmp/comms-module +make +``` + +Add the directory of the modules to `FLUX_MODULE_PATH`; if the module was +built in the current dir: + +```bash +flux module load ioapp.so +flux module load capp.so +export FLUX_MODULE_PATH=${FLUX_MODULE_PATH}:$(pwd) +``` + +Now let's try it! If you need to run flux start under Slurm: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +Try running flux with the module on the path. + +```bash +flux run -N 1 -n 2 ./compute.lua 120 +flux run -N 1 -n 2 ./io-forwarding.lua 120 +``` +Notice that the module is loaded (at the bottom): + +```console +Try `flux-module load --help' for more information. +Module Idle S Sendq Recvq Service +heartbeat 1 R 0 0 +resource 0 R 0 0 +job-ingest 0 R 0 0 +kvs-watch 0 R 0 0 +sched-fluxion-resource 0 R 0 0 +cron idle R 0 0 +barrier idle R 0 0 +job-exec 0 R 0 0 +job-list idle R 0 0 +kvs 0 R 0 0 +content-sqlite 0 R 0 0 content-backing +job-info 0 R 0 0 +job-manager 0 R 0 0 +sched-fluxion-qmanager 0 R 0 0 sched +content 0 R 0 0 +connector-local 0 R 0 0 1002-shell-f3Lv2Zd3tj,1002-shell-f3N2WmZB5H +ioapp 83 R 0 0 +Block until we hear go message from the an io forwarder +``` + +If you run them together, they work together: + +```bash +flux submit -N 1 -n 2 ./compute.lua 120 +flux run -N 1 -n 2 ./io-forwarding.lua 120 +``` diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/app.c b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/app.c new file mode 100644 index 00000000..336ecfbb --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/app.c @@ -0,0 +1,129 @@ +#include +#include +#include + +#if !defined (IO_SERVICE) && !defined (COMP_SERVICE) +# error "Either IO_SERVICE or COMP_SERVICE macro is needed" +#endif + +struct app_ctx { + flux_t *h; + int count; + flux_msg_handler_t **handlers; +}; + +static void freectx (void *arg) +{ + struct app_ctx *ctx = (struct app_ctx *)arg; + flux_msg_handler_delvec (ctx->handlers); + free (ctx); +} + +static struct app_ctx *getctx (flux_t *h) +{ +#if IO_SERVICE + struct app_ctx *ctx = flux_aux_get (h, "ioapp"); +#elif COMP_SERVICE + struct app_ctx *ctx = flux_aux_get (h, "capp"); +#endif + if (!ctx) { + ctx = malloc (sizeof (*ctx)); + ctx->count = 0; + ctx->handlers = NULL; +#if IO_SERVICE + flux_aux_set (h, "ioapp", ctx, freectx); +#elif COMP_SERVICE + flux_aux_set (h, "capp", ctx, freectx); +#endif + } + return ctx; +} + +#if IO_SERVICE +static void io_request_cb (flux_t *h, flux_msg_handler_t *w, + const flux_msg_t *msg, void *arg) +{ + const char *topic = NULL; + struct app_ctx *ctx = getctx (h); + int data = 0; + + if (flux_request_unpack (msg, &topic, "{s:i}", "data", &data)) + goto error; + ctx->count++; + if (flux_respond_pack (h, msg, "{s:i}", "count", ctx->count) < 0) + flux_log_error (h, "%s", __FUNCTION__); + flux_log (h, LOG_DEBUG, "count: %d", ctx->count); + return; + +error: + flux_log_error (h, "%s", __FUNCTION__); + if (flux_respond (h, msg, NULL) < 0) + flux_log_error (h, "%s: flux_respond", __FUNCTION__); +} +#endif + +#if COMP_SERVICE +static void comp_request_cb (flux_t *h, flux_msg_handler_t *w, + const flux_msg_t *msg, void *arg) +{ + const char *topic = NULL; + struct app_ctx *ctx = getctx (h); + int data = 0; + + flux_log (h, LOG_INFO, "comp_request_cb:"); + if (flux_request_unpack (msg, &topic, "{s:i}", "data", &data)) + goto error; + + ctx->count++; + if (flux_respond_pack (h, msg, "{s:i}", "count", ctx->count) < 0) + flux_log_error (h, "%s", __FUNCTION__); + return; + +error: + flux_log_error (h, "%s", __FUNCTION__); + if (flux_respond (h, msg, NULL) < 0) + flux_log_error (h, "%s: flux_respond", __FUNCTION__); +} +#endif + +static struct flux_msg_handler_spec htab[] = { +#if IO_SERVICE + { FLUX_MSGTYPE_REQUEST, "ioapp.io", io_request_cb, 0 }, +#endif + +#if COMP_SERVICE + { FLUX_MSGTYPE_REQUEST, "capp.comp", comp_request_cb, 0 }, +#endif + + FLUX_MSGHANDLER_TABLE_END +}; + + +int mod_main (flux_t *h, int argc, char **argv) +{ + + struct app_ctx *ctx = getctx (h); + if (flux_msg_handler_addvec (h, htab, (void *)h, + &ctx->handlers) < 0) { + flux_log (ctx->h, LOG_ERR, "flux_msg_handler_addvec: %s", strerror (errno)); + goto done; + } + + if (flux_reactor_run (flux_get_reactor (h), 0) < 0) { + flux_log (h, LOG_ERR, "flux_reactor_run: %s", strerror (errno)); + goto done; + } + +done: + return 0; +} + +#if IO_SERVICE +MOD_NAME ("ioapp"); +#elif COMP_SERVICE +MOD_NAME ("capp"); +#endif + +/* + * vi:tabstop=4 shiftwidth=4 expandtab + */ diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/compute.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/compute.lua new file mode 100755 index 00000000..f505f54d --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/compute.lua @@ -0,0 +1,62 @@ +#!/usr/bin/env lua + +local f, err = require 'flux' .new () +local amount = tonumber (arg[1]) or 120 +local rank = tonumber (os.getenv('FLUX_TASK_RANK')) or 0 +local frank = tonumber (os.getenv('FLUX_LOCAL_RANKS')) or 0 +io.stdout:setvbuf ("no") + +local function sleep (n) + os.execute ("sleep " .. n) +end + +if #arg ~= 1 then + print ("Usage: compute.lua seconds") + print (" Compute for seconds") + os.exit (1) +end + +-- subscribe app.io.go event +local rc, err = f:subscribe ("app.io.go") +if not rc then + print ("Failed to subscribe an event, %s", err) + os.exit (1) +end + +-- the leader rank of compute job installs app module +if rank == 0 then + os.execute ("flux module load -r " .. 0 .. " capp") + os.execute ("flux module list") +end + +-- wait for an event sent from the leader of io-forwarding job to sync +-- between io job's installing the app module and sending a request later +print ("Block until we hear go message from the an io forwarder") +local rc, err = f:recv_event () +if not rc then + print ("Failed to receive an event, %s", err) + os.exit (1) +end + +if rank == 0 then + local rc, err = f:sendevent ({ data = "please proceed" }, "app.comp.go") + if not rc then error (err) end + print ("Sent a go event") +end + +local resp, err = f:rpc ("ioapp.io", { data = rank }) +if not resp then + if err == "Function not implemented" then + print ("ioapp.io request handler isn't loaded") + else + print (err) + end +else + print ("Count so far: " .. resp.count) +end + +print ("Will compute for " .. amount .. " seconds") +sleep (amount) +f:unsubscribe ("app.io.go") + +-- vi: ts=4 sw=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/io-forwarding.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/io-forwarding.lua new file mode 100755 index 00000000..0f9f78f9 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/comms-module/io-forwarding.lua @@ -0,0 +1,57 @@ +#!/usr/bin/env lua + +local flux = require 'flux' +local f = flux.new () +local amount = tonumber (arg[1]) or 120 +local rank = tonumber (os.getenv('FLUX_TASK_RANK')) or 0 +local frank = tonumber (os.getenv('FLUX_LOCAL_RANKS')) or 0 +io.stdout:setvbuf ("no") + +local function sleep (n) + os.execute ("sleep " .. n) +end + +if #arg ~= 1 then + print ("Usage: io-forward.lua seconds") + print (" Forward I/O requests for seconds") + os.exit (1) +end + +-- subscribe app.comp.go event +local rc, err = f:subscribe ("app.comp.go") +if not rc then + print ("Failed to subscribe an event, %s", err) + os.exit (1) +end + +if rank == 0 then + os.execute ("flux module load -r " .. 0 .. " ioapp") + os.execute ("flux module list") + local rc, err = f:sendevent ({ data = "please proceed" }, "app.io.go") + if not rc then error (err) end + print ("Sent a go event") +end + +-- Wait for an event sent from the leader of compute job to sync +-- between compute job's installing the app module and sending a request later +print ("Block until we hear go message from the a leader compute process") +local rc, err = f:recv_event () +if not rc then + print ("Failed to receive an, %s", err) + os.exit (1) +end + +local resp, err = f:rpc ("capp.comp", { data = rank }) +if not resp then + if err == "Function not implemented" then + print ("capp.comp request handler isn't loaded") + else + print (err) + end +end + +print ("Will forward IO requests for " .. amount .. " seconds") +sleep (amount) +f:unsubscribe ("app.comp.go") + +-- vi: ts=4 sw=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/conf.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/conf.py new file mode 100644 index 00000000..75f3e5ce --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/conf.py @@ -0,0 +1,83 @@ +############################################################### +# Copyright 2020 Lawrence Livermore National Security, LLC +# (c.f. AUTHORS, NOTICE.LLNS, COPYING) +# +# This file is part of the Flux resource manager framework. +# For details, see https://github.com/flux-framework. +# +# SPDX-License-Identifier: LGPL-3.0 +############################################################### + +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'Flux' +copyright = '''Copyright 2020 Lawrence Livermore National Security, LLC and Flux developers. + +SPDX-License-Identifier: LGPL-3.0''' +author = 'This page is maintained by the Flux community.' + +# The full version, including alpha/beta/rc tags +release = '0.1.0' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.intersphinx', + 'sphinxcontrib.spelling', + 'recommonmark', +] + +# sphinxcontrib.spelling settings +spelling_word_list_filename = [ + 'spell.en.pws' +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'README.md'] + +master_doc = 'index' +source_suffix = ['.rst', '.md'] + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = [ +] + +# -- Options for man output ------------------------------------------------- + +man_pages = [ +] diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/Makefile b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/Makefile new file mode 100644 index 00000000..56abc33b --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/Makefile @@ -0,0 +1,13 @@ +all: conduit.so + +FLUX_CORE_LIBS = $(shell pkg-config --libs flux-core) +FLUX_CORE_INCLUDES = $(shell pkg-config --cflags flux-core) + +conduit.so: conduit.o + gcc -Wl,--no-undefined --disable-static -shared -export-dynamic $^ -o $@ $(FLUX_CORE_LIBS) + +conduit.o: conduit.c + gcc $(FLUX_CORE_INCLUDES) $^ -fPIC -c -o $@ + +clean: + rm *.o *.so diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/README.md new file mode 100644 index 00000000..3a9a927c --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/README.md @@ -0,0 +1,102 @@ +# A Data Conduit Strategy + +**Note that this module script does not compile and needs an update** + + +## Description: Use a data stream to send packets through + +### Setup + +If you haven't already, download the files and change your working directory: + +```bash +$ cd flux-workflow-examples/data-conduit +``` + +### Execution + +If you are using Slurm, allocate three nodes from a resource manager: + +```bash +salloc -N3 -ppdebug +``` + +Point to `flux-core`'s `pkgconfig` directory: + +| Shell | Command | +| ----- | ---------- | +| tcsh | `setenv PKG_CONFIG_PATH /lib/pkgconfig` | +| bash/zsh | `export PKG_CONFIG_PATH='/lib/pkgconfig'` | + +This might look like this in the container: + +```bash +export PKG_CONFIG_PATH=/usr/lib/pkgconfig +``` + +Then build the module (if you don't have permission, copy to /tmp) + +```bash +cp -R ./data-conduit /tmp/data-conduit +cd /tmp/data-conduit +make +``` + +3. `make` + +4. Add the directory of the modules to `FLUX_MODULE_PATH`, if the module was built in the current directory: + +`export FLUX_MODULE_PATH=${FLUX_MODULE_PATH}:$(pwd)` + +5. Launch a Flux instance on the current allocation by running `flux start` once per node, redirecting log messages to the file `out` in the current directory: + +`srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out` + +6. Submit the **datastore** script: + +`flux submit -N 1 -n 1 ./datastore.py` + +7. Submit and resubmit five **compute** scripts to send time data to **datastore**: + +`flux submit -N 1 -n 1 ./compute.py 1` + +`flux submit -N 1 -n 1 ./compute.py 1` + +`flux submit -N 1 -n 1 ./compute.py 1` + +`flux submit -N 1 -n 1 ./compute.py 1` + +`flux submit -N 1 -n 1 ./compute.py 1` + +8. Attach to the **datastore** job to see the data sent by the **compute.py** scripts: + +`flux job attach 1900070043648` + +``` +Starting.... +Module was loaded successfully... +finished initialize... +starting run() +Waiting for a packet +{u'test': 101} +Waiting for a packet +{u'test': 101, u'1578431137': u'os.time'} +Waiting for a packet +{u'test': 101, u'1578431137': u'os.time', u'1578431139': u'os.time'} +Waiting for a packet +{u'test': 101, u'1578431140': u'os.time', u'1578431137': u'os.time', u'1578431139': u'os.time'} +Waiting for a packet +{u'test': 101, u'1578431140': u'os.time', u'1578431137': u'os.time', u'1578431139': u'os.time', u'1578431141': u'os.time'} +Bye bye! +run finished... +``` + +--- + +### Notes + +- `f = flux.Flux()` creates a new Flux handle which can be used to connect to and interact with a Flux instance. + +- `kvs.put()` places the value of _udata_ under the key **"conduit"**. Once the key-value pair is put, the change must be committed with `kvs.commit()`. The value can then be retrieved with `kvs.get()`. + +- `f.rpc()` creates a new RPC object consisting of a specified topic and payload (along with additional flags) that are exchanged with a Flux service. diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/compute.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/compute.py new file mode 100644 index 00000000..d03f8716 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/compute.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +import argparse +import time +import os +import re +import flux +import json +from flux import kvs +from flux.message import Message + +parser = argparse.ArgumentParser(description="compute for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +f = flux.Flux() +udata = "conduit" +kvs.put(f, "conduit", udata) +kvs.commit(f) + +cr = kvs.get(f, "conduit") +print(cr) + +os_time = int(time.time()) +payload = {str(os_time): "os.time"} +new_payload = {"data": json.dumps(payload)} +print("Sending ", json.dumps(new_payload)) + +# this data is ultimately flowed into the data store +f.rpc("conduit.put", new_payload, 0) + + +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/conduit.c b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/conduit.c new file mode 100644 index 00000000..9e6f446e --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/conduit.c @@ -0,0 +1,182 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct conduit_ctx { + flux_t *h; + struct sockaddr_un server_sockaddr; + struct sockaddr_un client_sockaddr; + int client_sock; + bool connected; + char *sockname; + char *csockname; + flux_msg_handler_t **handlers; +}; + +static void freectx (void *arg) +{ + struct conduit_ctx *ctx = (struct conduit_ctx *)arg; + flux_msg_handler_delvec (ctx->handlers); + free (ctx->sockname); + free (ctx->csockname); + if (ctx->connected) + close (ctx->client_sock); + free (ctx); +} + +static struct conduit_ctx *getctx (flux_t *h) +{ + struct conduit_ctx *ctx = flux_aux_get (h, "conduit"); + if (!ctx) { + char *user = getenv ("USER"); + ctx = malloc (sizeof (*ctx)); + ctx->connected = false; + ctx->handlers = NULL; + asprintf (&(ctx->sockname), "/tmp/%s/mysock", user? user : ""); + asprintf (&(ctx->csockname),"/tmp/%s/mycsock", user? user : ""); + flux_aux_set (h, "conduit", ctx, freectx); + } + return ctx; +} + +/* Forward the received JSON string to the datastore.py */ +static int conduit_send (flux_t *h, const char *json_str) +{ + int rc = -1; + int n = 0; + struct conduit_ctx *ctx = getctx (h); + + n = (int) strlen (json_str); + if ((rc = send (ctx->client_sock, (void *)&n, sizeof (n), 0)) == -1) { + flux_log_error (h, "send error %s", __FUNCTION__); + return rc; + } + if ((rc = send (ctx->client_sock, (void *)json_str, n, 0)) == -1) { + flux_log_error (h, "send error %s", __FUNCTION__); + return rc; + } + flux_log (h, LOG_INFO, "conduit_send succeed"); + return 0; +} + +/* request callback called when conduit.put request is invoked */ +static void conduit_put_request_cb (flux_t *h, flux_msg_handler_t *w, + const flux_msg_t *msg, void *arg) +{ + int rc = -1; + const char *topic = NULL; + struct conduit_ctx *ctx = getctx (h); + const char *data = NULL; + + flux_log (h, LOG_INFO, "conduit_put_request_cb:"); + if (ctx->connected == false) { + flux_log (h, LOG_INFO, "conduit not connected"); + errno = ENOTCONN; + goto done; + } + if (flux_request_unpack (msg, &topic, "{s:s}", "data", &data)) { + flux_log_error (h, "%s", __FUNCTION__); + goto done; + } + if (conduit_send (h, data) < 0) + errno = EPROTO; +done: + if (flux_respond (h, msg, errno, NULL) < 0) + flux_log_error (h, "%s: flux_respond", __FUNCTION__); +} + +/* open the Unix domain socket to talk to datastore.py */ +static int conduit_open (flux_t *h) +{ + struct conduit_ctx *ctx = getctx (h); + int rc = -1; + int len = 0; + char buf[256]; + memset(&(ctx->server_sockaddr), 0, sizeof(struct sockaddr_un)); + memset(&(ctx->client_sockaddr), 0, sizeof(struct sockaddr_un)); + + if ((ctx->client_sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + flux_log (h, LOG_ERR, "SOCKET ERROR = %d\n", errno); + goto done; + } + + ctx->client_sockaddr.sun_family = AF_UNIX; + strcpy(ctx->client_sockaddr.sun_path, ctx->csockname); + len = sizeof(ctx->client_sockaddr); + unlink (ctx->csockname); + if ((rc = bind(ctx->client_sock, + (struct sockaddr *)&ctx->client_sockaddr, len)) == -1) { + flux_log (h, LOG_ERR, "BIND ERROR: %d\n", errno); + close(ctx->client_sock); + goto done; + } + flux_log (h, LOG_INFO, "Conduit client socket bound\n"); + + ctx->server_sockaddr.sun_family = AF_UNIX; + strcpy(ctx->server_sockaddr.sun_path, ctx->sockname); + if ((rc = connect(ctx->client_sock, + (struct sockaddr *)&ctx->server_sockaddr, len)) == -1) { + flux_log (h, LOG_ERR, "CONNECT ERROR = %d\n", errno); + close(ctx->client_sock); + goto done; + } + + ctx->connected = true; + flux_log (h, LOG_INFO, "Conduit socket connected\n"); + conduit_send (h, "{\"test\":101}"); + rc = 0; +done: + return rc; +} + + +static struct flux_msg_handler_spec htab[] = { + { FLUX_MSGTYPE_REQUEST, "conduit.put", conduit_put_request_cb, 0 }, + FLUX_MSGHANDLER_TABLE_END +}; + +int mod_main (flux_t *h, int argc, char **argv) +{ + uint32_t rank = 0; + struct conduit_ctx *ctx = getctx (h); + + if (conduit_open (h) < 0) { + flux_log (ctx->h, LOG_ERR, "conduit_open failed"); + goto done; + } + if (flux_get_rank (h, &rank) < 0) { + flux_log (ctx->h, LOG_ERR, "flux_get_rank failed"); + goto done; + } + + /* Put the rank where this module is loaded into conduit key + */ + flux_kvs_txn_t *txn = flux_kvs_txn_create (); + flux_kvs_txn_pack (txn, 0, "conduit", "i", rank); + flux_kvs_commit (h, 0, txn); + flux_kvs_txn_destroy (txn); + if (flux_msg_handler_addvec (h, htab, (void *)h, + &ctx->handlers) < 0) { + flux_log (ctx->h, LOG_ERR, "flux_msg_handler_addvec: %s", strerror (errno)); + goto done; + } + if (flux_reactor_run (flux_get_reactor (h), 0) < 0) { + flux_log (h, LOG_ERR, "flux_reactor_run: %s", strerror (errno)); + goto done; + } + +done: + return 0; +} + +MOD_NAME ("conduit"); + +/* + * vi:tabstop=4 shiftwidth=4 expandtab + */ diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/datastore.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/datastore.py new file mode 100755 index 00000000..d5fcc488 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/data-conduit/datastore.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import socket +import struct +import json +import sys +import os + +sockdir = os.path.join("/tmp", os.environ["USER"]) +sockname = os.path.join(sockdir, "mysock") + +store = {} +sock = "" + + +def initialize(): + global sock + if not os.path.exists(sockdir): + os.mkdir(sockdir) + if os.path.exists(sockname): + os.remove(sockname) + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.bind(sockname) + sock.listen(1) + cmd = "flux module load ./conduit.so" + os.system(cmd) + + +def run(): + global sock + global store + connection, client_address = sock.accept() + for x in range(5): + print("Waiting for a packet") + mybytes = bytearray(4) + nbytes, address = connection.recvfrom_into(mybytes, 4) + if nbytes == 0: + break + size = ( + mybytes[0] * 1 + + mybytes[1] * 256 + + mybytes[2] * 65536 + + mybytes[3] * 16777216 + ) + data = bytearray(size) + nbytes, address = connection.recvfrom_into(data, size) + dict_blob = json.loads(data.decode("ascii")) + + if dict_blob is not None: + store.update(dict_blob) + print(store) + else: + print("Mallformed data, discarding") + + connection.close() + cmd = "flux module remove conduit" + os.system(cmd) + print("Bye bye!") + + +def main(): + print("Starting....") + initialize() + run() + + +if __name__ == "__main__": + main() diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/README.md new file mode 100644 index 00000000..ff33747a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/README.md @@ -0,0 +1,39 @@ +# Hierarchical Launching + +## Description: Launch an ensemble of sleep 0 tasks + +### Setup + +If you haven't already, download the files and change your working directory: + +```bash +$ cd flux-workflow-examples/hierarchical-launching +``` + +### Execution + +If you need to start flux on a Slurm cluster: + +```bash +salloc -N3 -ppdebug +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +Start the parent instance + +```bash +./parent.sh +``` +```console +Mon Nov 18 15:31:08 PST 2019 +13363018989568 +13365166473216 +13367095853056 +First Level Done +Mon Nov 18 15:34:13 PST 2019 +``` + +### Notes + +- You can increase the number of jobs by increasing `NCORES` in `parent.sh` and +`NJOBS` in `ensemble.sh`. diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/ensemble.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/ensemble.sh new file mode 100755 index 00000000..efd987b2 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/ensemble.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env sh + +NJOBS=750 +MAXTIME=$(expr ${NJOBS} + 2) + +for i in `seq 1 ${NJOBS}`; do + flux submit --nodes=1 --ntasks=1 --cores-per-task=1 sleep 0 +done + +flux jobs +flux queue drain +echo "Final Level Done" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/parent.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/parent.sh new file mode 100755 index 00000000..19d74e3f --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/hierarchical-launching/parent.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env sh + +NCORES=3 + +date + +for i in `seq 1 ${NCORES}`; do + flux submit -N 1 -n 1 flux start ./ensemble.sh +done + +flux queue drain +echo "First Level Done" + +date diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/index.rst b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/index.rst new file mode 100644 index 00000000..aa335e9b --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/index.rst @@ -0,0 +1,95 @@ +Flux Workflow Examples +---------------------- + +The examples contained here demonstrate and explain some simple use-cases with Flux, +and make use of Flux's command-line interface (CLI), Flux's C library, and the Python and Lua bindings to the C library. +The entire set of examples can be downloaded by cloning the `Github repo `_. + +The examples assume that you have installed: + +#. A recent version of Flux + +#. Python 3.6+ + +#. Lua 5.1+ + +:doc:`CLI: Job Submission ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Launch a flux instance and schedule/launch compute and io-forwarding +jobs on separate nodes using the CLI + +:doc:`Python: Job Submission ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Schedule/launch compute and io-forwarding jobs on separate nodes using +the Python bindings + +:doc:`Python: Job Submit/Wait ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Submit jobs and wait for them to complete using the Flux Python bindings + +:doc:`Python: Asynchronous Bulk Job Submission ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Asynchronously submit jobspec files from a directory and wait for them +to complete in any order + +:doc:`Python: Tracking Job Status and Events ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Submit job bundles and wait until all jobs complete + +:doc:`Python: Job Cancellation ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Cancel a running job + +:doc:`Lua: Use Events ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Use events to synchronize compute and io-forwarding jobs running on +separate nodes + +:doc:`Python: Simple KVS Example ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Use KVS Python interfaces to store user data into KVS + +:doc:`CLI/Lua: Job Ensemble Submitted with a New Flux Instance ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Submit job bundles, print live job events, and exit when all jobs are +complete + +:doc:`CLI: Hierarchical Launching ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Launch a large number of sleep 0 jobs + +:doc:`C/Lua: Use a Flux Comms Module ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Use a Flux Comms Module to communicate with job elements + +:doc:`C/Python: A Data Conduit Strategy ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Attach to a job that receives OS time data from compute jobs + +.. toctree:: + :hidden: + + job-submit-cli/README + job-submit-api/README + job-submit-wait/README + async-bulk-job-submit/README + job-status-control/README + job-cancel/README + synchronize-events/README + kvs-python-bindings/README + job-ensemble/README + hierarchical-launching/README + comms-module/README + data-conduit/README diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-cancel/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-cancel/README.md new file mode 100644 index 00000000..2c9c0cf7 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-cancel/README.md @@ -0,0 +1,42 @@ +# Job Cancellation + +## Description: Cancel a running job + +### Setup + +If you haven't already, download the files and change your working directory: + +```bash +$ cd flux-workflow-examples/job-cancel +``` + +### Execution + +Launch the submitter script: + +```bash +python3 ./submitter.py $(flux resource list -no {ncores} --state=up) +``` + +```console +Submitted 1st job: 2241905819648 +Submitted 2nd job: 2258951471104 + +First submitted job status (2241905819648) - RUNNING +Second submitted job status (2258951471104) - PENDING + +Canceled first job: 2241905819648 + +First submitted job status (2241905819648) - CANCELED +Second submitted job status (2258951471104) - RUNNING +``` + +### Notes + +- `f = flux.Flux()` creates a new Flux handle which can be used to connect to and interact with a Flux instance. + +- `flux.job.submit(f, sleep_jobspec, waitable=True)` submits a jobspec, returning a job ID that can be used to interact with the submitted job. + +- `flux.job.cancel(f, jobid)` cancels the job. + +- `flux.job.wait_async(f, jobid)` will wait for the job to complete (or in this case, be canceled). It returns a Flux future, which can be used to process the result later. Only jobs submitted with `waitable=True` can be waited for. diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-cancel/submitter.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-cancel/submitter.py new file mode 100644 index 00000000..b95584fd --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-cancel/submitter.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 + +import time +import argparse + +import flux +from flux.job import JobspecV1 + +f = flux.Flux() + +parser = argparse.ArgumentParser( + description=""" + Description: Submit two 'sleep 60' jobs that take up + all resources on a node. + """ +) +parser.add_argument(dest="cores", help="number of cores on the node") +args = parser.parse_args() + +# submit a sleep job that takes up all resources +sleep_jobspec = JobspecV1.from_command( + ["sleep", "60"], num_tasks=1, cores_per_task=int(args.cores) +) +first_jobid = flux.job.submit(f, sleep_jobspec, waitable=True) +print("Submitted 1st job: %d" % (int(first_jobid))) +time.sleep(1) + +# submit a second sleep job - will be scheduled, but not run +sleep_jobspec = JobspecV1.from_command( + ["sleep", "60"], num_tasks=1, cores_per_task=int(args.cores) +) +second_jobid = flux.job.submit(f, sleep_jobspec, waitable=True) +print("Submitted 2nd job: %d\n" % (int(second_jobid))) +time.sleep(1) + +# get list of JobInfo objects - fetch their ID's and current status +jobs = flux.job.JobList(f, max_entries=2).jobs() +print("First submitted job status (%d) - %s" % (int(jobs[1].id.dec), jobs[1].status)) +print("Second submitted job status (%d) - %s\n" % (int(jobs[0].id.dec), jobs[0].status)) + +# cancel the first job +flux.job.cancel(f, first_jobid) +future = flux.job.wait_async(f, first_jobid).wait_for(5.0) +return_id, success, errmsg = future.get_status() +print("Canceled first job: %d\n" % (int(return_id))) +time.sleep(1) + +# the second job should now run since the first was canceled +jobs = flux.job.JobList(f, max_entries=2).jobs() +print("First submitted job status (%d) - %s" % (int(jobs[1].id.dec), jobs[1].status)) +print("Second submitted job status (%d) - %s" % (int(jobs[0].id.dec), jobs[0].status)) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/README.md new file mode 100644 index 00000000..99361f5b --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/README.md @@ -0,0 +1,94 @@ +# Job Ensemble Submitted with a New Flux Instance + +## Description: Launch a flux instance and submit one instance of an io-forwarding job and 50 compute jobs, each spanning the entire set of nodes. + +### Setup + +If you haven't already, download the files and change your working directory: + +``` +$ git clone https://github.com/flux-framework/flux-workflow-examples.git +$ cd flux-workflow-examples/job-ensemble +``` + +### Execution + +If you need a Slurm allocation: + +```bash +salloc -N3 -ppdebug + +# Take a look at the script first +cat ensemble.sh +``` +Here is how to run under Slurm: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out ./ensemble.sh +``` + +Or without: + +```bash +flux start -o,-S,log-filename=out ./ensemble.sh +``` + +``` +JOBID USER NAME STATE NTASKS NNODES RUNTIME +1721426247680 fluxuser compute.lu RUN 4 2 0.122s +1718322462720 fluxuser compute.lu RUN 4 2 0.293s +1715201900544 fluxuser compute.lu RUN 4 2 0.481s +1712299442176 fluxuser compute.lu RUN 4 2 0.626s +1709296320512 fluxuser compute.lu RUN 4 2 0.885s +1706293198848 fluxuser compute.lu RUN 4 2 1.064s +1691378253824 fluxuser io-forward RUN 1 1 1.951s +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Jobid: 1691378253824 +{ + "version": 1, + "execution": { + "R_lite": [ + { + "rank": "0", + "children": { + "core": "0-1" + } + } + ] + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Jobid: 1694414929920 +{ + "version": 1, + "execution": { + "R_lite": [ + { + "rank": "1-2", + "children": { + "core": "0-3" + } + } + ] + } +} +. +. +. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Jobid: 1721426247680 +{ + "version": 1, + "execution": { + "R_lite": [ + { + "rank": "1-2", + "children": { + "core": "8-11" + } + } + ] + } +} + +``` diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/compute.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/compute.lua new file mode 100755 index 00000000..e5159fd1 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/compute.lua @@ -0,0 +1,18 @@ +#!/usr/bin/env lua + +local amount = tonumber (arg[1]) or 120 + +local function sleep (n) + os.execute ("sleep " .. n) +end + +if #arg ~= 1 then + print ("Usage: compute.lua seconds") + print (" Compute for seconds") + os.exit (1) +end + +print ("Will compute for " .. amount .. " seconds") +sleep (amount) + +-- vi: ts=4 sw=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/ensemble.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/ensemble.sh new file mode 100755 index 00000000..9468ec6a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/ensemble.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env sh + +NJOBS=10 +MAXTIME=$(expr ${NJOBS} + 2) +JOBIDS="" + +JOBIDS=$(flux submit --nodes=1 --ntasks=1 --cores-per-task=2 ./io-forwarding.lua ${MAXTIME}) +for i in `seq 1 ${NJOBS}`; do + JOBIDS="${JOBIDS} $(flux submit --nodes=1 --ntasks=1 --cores-per-task=2 ./compute.lua 1)" +done + +flux jobs +flux queue drain + +# print mock-up prevenance data +for i in ${JOBIDS}; do + echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo "Jobid: ${i}" + KVSJOBID=$(flux job id --to=kvs ${i}) + flux kvs get ${KVSJOBID}.R | jq +done diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/io-forwarding.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/io-forwarding.lua new file mode 100755 index 00000000..3427b1ed --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/io-forwarding.lua @@ -0,0 +1,18 @@ +#!/usr/bin/env lua + +local amount = tonumber (arg[1]) or 120 + +local function sleep (n) + os.execute ("sleep " .. n) +end + +if #arg ~= 1 then + print ("Usage: io-forward.lua seconds") + print (" Forward I/O requests for seconds") + os.exit (1) +end + +print ("Will forward IO requests for " .. amount .. " seconds") +sleep (amount) + +-- vi: ts=4 sw=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/kvs-watch-until.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/kvs-watch-until.lua new file mode 100755 index 00000000..16e63aed --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-ensemble/kvs-watch-until.lua @@ -0,0 +1,82 @@ +#!/usr/bin/env lua +-- +-- Exit only if/when all ranks have exited 'unknown' state +-- +local usage = [[ +Usage: kvs-wait-until [OPTIONS] KEY CODE +Watch kvs KEY until Lua code CODE returns true. +(CODE is supplied key value in variable 'v') +If -t, --timeout is provided, and the timeout expires, then +exit with non-zero exit status. + -h, --help Display this message + -v, --verbose Print value on each watch callback + -t, --timeout=T Wait at most T seconds (before exiting +]] + +local getopt = require 'flux.alt_getopt' .get_opts +local timer = require 'flux.timer'.new() +local f = require 'flux' .new() + +local function printf (...) + io.stdout:write (string.format (...)) +end +local function log_err (...) + io.stdout:write (string.format (...)) +end + +local opts, optind = getopt (arg, "hvt:", + { verbose = 'v', + timeout = 't', + help = 'h' + } + ) +if opts.h then print (usage); os.exit (0) end + +local key = arg [optind] +local callback = arg [optind+1] + +if not key or not callback then + log_err ("KVS key and callback code required\n") + print (usage) + os.exit (1) +end + +callback = "return function (v) return "..callback.." end" +local fn, err = loadstring (callback, "callback") +if not fn then + log_err ("code compile error: %s", err) + os.exit (1) +end +local cb = fn () + +local kw, err = f:kvswatcher { + key = key, + handler = function (kw, result) + if opts.v then + printf ("%4.03fs: %s = %s\n", + timer:get0(), + key, tostring (result)) + end + -- Do not pass nil result to callback: + if result == nil then return end + local ok, rv = pcall (cb, result) + if not ok then error (rv) end + if ok and rv then + os.exit (0) + end + end +} + +if opts.t then + local tw, err = f:timer { + timeout = opts.t * 1000, + handler = function (f, to) + log_err ("%4.03fs: Timeout expired!\n", timer:get0()) + os.exit (1) + end + } +end + +timer:set () +f:reactor () +-- vi: ts=4 sw=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/README.md new file mode 100644 index 00000000..02ad14c1 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/README.md @@ -0,0 +1,71 @@ +# Using Flux Job Status and Control API + +## Description: Submit job bundles, get event updates, and wait until all jobs complete + +### Setup + +If you haven't already, download the files and change your working directory: + +```bash +$ cd flux-workflow-examples/job-status-control +``` + +### Execution + +1. Allocate three nodes from a resource manager: + +```bash +salloc -N3 -p pdebug +``` + +2. If needed, launch a Flux instance on the current allocation by running `flux start` once per node, redirecting log messages to the file `out` in the current directory: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +3. Run the bookkeeper executable along with the number of jobs to be submitted (if no size is specified, 6 jobs are submitted: 3 instances of **compute.py**, and 3 instances of **io-forwarding,py**): + +```bash +python3 ./bookkeeper.py 2 +``` +```console +bookkeeper: all jobs submitted +bookkeeper: waiting until all jobs complete +job 39040581632 triggered event 'submit' +job 39040581633 triggered event 'submit' +job 39040581632 triggered event 'depend' +job 39040581632 triggered event 'priority' +job 39040581632 triggered event 'alloc' +job 39040581633 triggered event 'depend' +job 39040581633 triggered event 'priority' +job 39040581633 triggered event 'alloc' +job 39040581632 triggered event 'start' +job 39040581633 triggered event 'start' +job 39040581632 triggered event 'finish' +job 39040581633 triggered event 'finish' +job 39040581633 triggered event 'release' +job 39040581633 triggered event 'free' +job 39040581633 triggered event 'clean' +job 39040581632 triggered event 'release' +job 39040581632 triggered event 'free' +job 39040581632 triggered event 'clean' +bookkeeper: all jobs completed +``` + +### Notes + +- The following constructs a job request using the **JobspecV1** class with customizable parameters for how you want to utilize the resources allocated for your job: +```python +compute_jobreq = JobspecV1.from_command( + command=["./compute.py", "10"], num_tasks=4, num_nodes=2, cores_per_task=2 +) +compute_jobreq.cwd = os.getcwd() +compute_jobreq.environment = dict(os.environ) +``` + +- `with FluxExecutor() as executor:` creates a new `FluxExecutor` which can be used to submit jobs, wait for them to complete, and get event updates. Using the executor as a context manager (`with ... as ...:`) ensures it is shut down properly. + +- `executor.submit(compute_jobreq)` returns a `concurrent.futures.Future` subclass which completes when the underlying job is done. The jobid of the underlying job can be fetched with the `.jobid([timeout])` method (which waits until the jobid is ready). + +- Throughout the course of a job, various events will occur to it. `future.add_event_callback(event, event_callback)` adds a callback which will be invoked when the given event occurs. diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/bookkeeper.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/bookkeeper.py new file mode 100755 index 00000000..a7cef195 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/bookkeeper.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 + +import os +import argparse + +from flux.job import JobspecV1, FluxExecutor + + +def event_callback(future, event): + print(f"job {future.jobid()} triggered event {event.name!r}") + + +# main +def main(): + # set up command-line parser + parser = argparse.ArgumentParser( + description="submit and wait for the completion of " + "N bundles, each consisting of compute " + "and io-forwarding jobs" + ) + parser.add_argument( + "njobs", metavar="N", type=int, help="the number of bundles to submit and wait", + ) + args = parser.parse_args() + # set up jobspecs + compute_jobreq = JobspecV1.from_command( + command=["./compute.py", "10"], num_tasks=6, num_nodes=3, cores_per_task=2 + ) + compute_jobreq.cwd = os.getcwd() + compute_jobreq.environment = dict(os.environ) + io_jobreq = JobspecV1.from_command( + command=["./io-forwarding.py", "10"], num_tasks=3, num_nodes=3, cores_per_task=1 + ) + io_jobreq.cwd = os.getcwd() + io_jobreq.environment = dict(os.environ) + # submit jobs and register event callbacks for all events + with FluxExecutor() as executor: + futures = [executor.submit(compute_jobreq) for _ in range(args.njobs // 2)] + futures.extend( + executor.submit(io_jobreq) for _ in range(args.njobs // 2, args.njobs) + ) + print("bookkeeper: all jobs submitted") + for fut in futures: + # each event can have a different callback + for event in executor.EVENTS: + fut.add_event_callback(event, event_callback) + print("bookkeeper: waiting until all jobs complete") + # exiting the context manager waits for the executor to complete all futures + print("bookkeeper: all jobs completed") + + +main() + +# vi: ts=4 sw=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/compute.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/compute.py new file mode 100755 index 00000000..1f860f2a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/compute.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import argparse +import time + +parser = argparse.ArgumentParser(description="compute for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +print("Will compute for " + str(args.integer) + " seconds.") +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/io-forwarding.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/io-forwarding.py new file mode 100755 index 00000000..217ed0e0 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-status-control/io-forwarding.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import argparse +import time + +parser = argparse.ArgumentParser(description="forward I/O requests for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +print("Will forward I/O requests for " + str(args.integer) + " seconds.") +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/README.md new file mode 100644 index 00000000..cfcd17e6 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/README.md @@ -0,0 +1,115 @@ +# Job Submit API + +To run the following examples, download the files and change your working directory: + +```bash +$ cd flux-workflow-examples/job-submit-api +``` + +## Part(a) - Using a direct job.submit RPC + +### Description: Schedule and launch compute and io-forwarding jobs on separate nodes + +1. Allocate three nodes from a resource manager: + +```bash +salloc -N3 -p pdebug +``` + +2. Launch a Flux instance on the current allocation by running `flux start` once per node, redirecting log messages to the file `out` in the current directory: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +3. Run the submitter executable: + +```bash +python3 ./submitter.py +``` + +4. List currently running jobs: + +```bash +flux jobs +``` +```console +JOBID USER NAME ST NTASKS NNODES RUNTIME +ƒ5W8gVwm fluxuser io-forward R 1 1 19.15s +ƒ5Vd2kJs fluxuser compute.py R 4 2 19.18s +``` + +5. Information about jobs, such as the submitted job specification, an eventlog, and the resource description format **R** are stored in the KVS. The data can be queried via the `job-info` module via the `flux job info` command. For example, to fetch **R** for a job which has been allocated resources: + +```bash +flux job info ƒ5W8gVwm R +``` +```console +{"version":1,"execution":{"R_lite":[{"rank":"2","children":{"core":"0"}}]}} +``` +```bash +flux job info ƒ5Vd2kJs R +``` +```console +{"version":1,"execution":{"R_lite":[{"rank":"0-1","children":{"core":"0-3"}}]}} +``` + +## Part(b) - Using a direct job.submit RPC + +### Schedule and launch both compute and io-forwarding jobs across all nodes + +1. Allocate three nodes from a resource manager: + +```bash +salloc -N3 -p pdebug +``` + +2. Launch another Flux instance on the current allocation: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +3. Run the second submitter executable: + +```bash +python3 ./submitter2.py +``` + +4. List currently running jobs: + +```bash +flux jobs +``` +```console +JOBID USER NAME ST NTASKS NNODES RUNTIME +ƒctYadhh fluxuser io-forward R 3 3 3.058s +ƒct1StnT fluxuser compute.py R 6 3 3.086s +``` + +5. Fetch **R** for the jobs that have been allocated resources: + +```bash +flux job info $(flux job last) jobspec +``` +```console +{"version":1,"execution":{"R_lite":[{"rank":"0-2","children":{"core":"0-3"}}]}} +``` +```console +{"resources": [{"type": "node", "count": 3, "with": [{"type": "slot", "count": 1, "with": [{"type": "core", "count": 1}], "label": "task"}]}], "tasks": [{"command": ["./io-forwarding.py", "120"], "slot": "task", "count": {"per_slot": 1}}], "attributes": {"system": {"duration": 0, "cwd": "/home/fluxuser/flux-workflow-examples/job-submit-api"}}, "version": 1} +``` + +### Notes + +- `f = flux.Flux()` creates a new Flux handle which can be used to connect to and interact with a Flux instance. + +- The following constructs a job request using the **JobspecV1** class with customizable parameters for how you want to utilize the resources allocated for your job: +```python +compute_jobreq = JobspecV1.from_command( + command=["./compute.py", "120"], num_tasks=4, num_nodes=2, cores_per_task=2 +) +compute_jobreq.cwd = os.getcwd() +compute_jobreq.environment = dict(os.environ) +``` + +- `flux.job.submit(f, compute_jobreq)` submits the job to be run, and returns a job ID once it begins running. diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/compute.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/compute.py new file mode 100755 index 00000000..1f860f2a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/compute.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import argparse +import time + +parser = argparse.ArgumentParser(description="compute for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +print("Will compute for " + str(args.integer) + " seconds.") +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/io-forwarding.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/io-forwarding.py new file mode 100755 index 00000000..217ed0e0 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/io-forwarding.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import argparse +import time + +parser = argparse.ArgumentParser(description="forward I/O requests for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +print("Will forward I/O requests for " + str(args.integer) + " seconds.") +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/submitter.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/submitter.py new file mode 100755 index 00000000..51f24089 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/submitter.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 + +import json +import os +import re +import flux +from flux.job import JobspecV1 + +f = flux.Flux() + +compute_jobreq = JobspecV1.from_command( + command=["./compute.py", "120"], num_tasks=4, num_nodes=2, cores_per_task=2 +) +compute_jobreq.cwd = os.getcwd() +compute_jobreq.environment = dict(os.environ) +print(flux.job.submit(f, compute_jobreq)) + +io_jobreq = JobspecV1.from_command( + command=["./io-forwarding.py", "120"], num_tasks=1, num_nodes=1, cores_per_task=1 +) +io_jobreq.cwd = os.getcwd() +io_jobreq.environment = dict(os.environ) +print(flux.job.submit(f, io_jobreq)) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/submitter2.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/submitter2.py new file mode 100755 index 00000000..670acff9 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-api/submitter2.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 + +import json +import os +import re +import flux +from flux.job import JobspecV1 + +f = flux.Flux() + +compute_jobreq = JobspecV1.from_command( + command=["./compute.py", "120"], num_tasks=6, num_nodes=3, cores_per_task=2 +) +compute_jobreq.cwd = os.getcwd() +compute_jobreq.environment = dict(os.environ) +print(flux.job.submit(f, compute_jobreq)) + +io_jobreq = JobspecV1.from_command( + command=["./io-forwarding.py", "120"], num_tasks=3, num_nodes=3, cores_per_task=1 +) +io_jobreq.cwd = os.getcwd() +io_jobreq.environment = dict(os.environ) +print(flux.job.submit(f, io_jobreq)) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/README.md new file mode 100644 index 00000000..0a349793 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/README.md @@ -0,0 +1,61 @@ +# Job Submit CLI + +To run the following examples, download the files and change your working directory: + +```console +$ cd flux-workflow-examples/job-submit-cli +``` + +## Example + +### Launch a flux instance and submit compute and io-forwarding jobs + +If you need an allocation: + +```bash +salloc -N3 -ppdebug +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +To submit + +```bash +# if you have more than one node... +flux submit --nodes=2 --ntasks=4 --cores-per-task=2 ./compute.lua 120 + +# and if not! +flux submit --nodes=1 --ntasks=1 --cores-per-task=2 ./io-forwarding.lua 120 +``` + +Attach to watch output: + +```bash +# Control +C then Control+Z to detach +flux job attach $(flux job last) +``` + +List running jobs: + +```bash +flux jobs +``` +```console +JOBID USER NAME ST NTASKS NNODES RUNTIME +ƒ3ETxsR9H fluxuser io-forward R 1 1 2.858s +ƒ38rBqEWT fluxuser compute.lu R 4 2 15.6s +``` + +Get information about job: + +```bash +flux job info $(flux job last) R +flux job info $(flux job last) jobspec +flux job info $(flux job last) eventlog +flux job info $(flux job last) guest.output + +# Example with flux job id +flux job info ƒ3ETxsR9H R +``` +```console +{"version": 1, "execution": {"R_lite": [{"rank": "0", "children": {"core": "5-7"}}], "nodelist": ["674f16a501e5"], "starttime": 1723225494, "expiration": 4876808372}} +``` diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/compute.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/compute.lua new file mode 100755 index 00000000..4fbccc87 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/compute.lua @@ -0,0 +1,17 @@ +#!/usr/bin/env lua + +local amount = tonumber (arg[1]) or 120 + +local function sleep (n) + os.execute ("sleep " .. n) +end + +if #arg ~= 1 then + print ("Usage: compute.lua seconds") + print (" Compute for seconds") + os.exit (1) +end + +print ("Will compute for " .. amount .. " seconds") +sleep (amount) + diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/compute.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/compute.py new file mode 100755 index 00000000..1f860f2a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/compute.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import argparse +import time + +parser = argparse.ArgumentParser(description="compute for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +print("Will compute for " + str(args.integer) + " seconds.") +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/io-forwarding.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/io-forwarding.lua new file mode 100755 index 00000000..46ccda0f --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/io-forwarding.lua @@ -0,0 +1,17 @@ +#!/usr/bin/env lua + +local amount = tonumber (arg[1]) or 120 + +local function sleep (n) + os.execute ("sleep " .. n) +end + +if #arg ~= 1 then + print ("Usage: io-forward.lua seconds") + print (" Forward I/O requests for seconds") + os.exit (1) +end + +print ("Will forward IO requests for " .. amount .. " seconds") +sleep (amount) + diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/io-forwarding.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/io-forwarding.py new file mode 100755 index 00000000..217ed0e0 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-cli/io-forwarding.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import argparse +import time + +parser = argparse.ArgumentParser(description="forward I/O requests for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +print("Will forward I/O requests for " + str(args.integer) + " seconds.") +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/README.md new file mode 100644 index 00000000..c4fbd5d0 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/README.md @@ -0,0 +1,159 @@ +# Python Job Submit/Wait + +To run the following examples, download the files and change your working directory: + +```bash +$ cd flux-workflow-examples/job-submit-wait +``` + +## Part(a) - Python Job Submit/Wait + +### Description: Submit jobs asynchronously and wait for them to complete in any order + +1. If needed, allocate three nodes from a resource manager: + +```bash +salloc -N3 -ppdebug +``` + +2. Launch a Flux instance on the current allocation by running `flux start` once per node, redirecting log messages to the file `out` in the current directory: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +3. Submit the **submitter_wait_any.py** script, along with the number of jobs you want to run (if no argument is passed, 10 jobs are submitted): + +```bash +python3 ./submitter_wait_any.py 10 +``` +```console +submit: 46912591450240 compute_jobspec +submit: 46912591450912 compute_jobspec +submit: 46912591451080 compute_jobspec +submit: 46912591363152 compute_jobspec +submit: 46912591362984 compute_jobspec +submit: 46912591451360 bad_jobspec +submit: 46912591451528 bad_jobspec +submit: 46912591451696 bad_jobspec +submit: 46912591451864 bad_jobspec +submit: 46912591452032 bad_jobspec +wait: 46912591451528 Error: job returned exit code 1 +wait: 46912591451864 Error: job returned exit code 1 +wait: 46912591451360 Error: job returned exit code 1 +wait: 46912591451696 Error: job returned exit code 1 +wait: 46912591452032 Error: job returned exit code 1 +wait: 46912591450240 Success +wait: 46912591363152 Success +wait: 46912591450912 Success +wait: 46912591451080 Success +wait: 46912591362984 Success +``` + +## Part(b) - Python Job Submit/Wait (Sliding Window) + +### Description: Asynchronously submit jobs and keep at most a number of those jobs active + +1. Allocate three nodes from a resource manager: + +```bash +salloc -N3 -ppdebug +``` + +2. Launch a Flux instance on the current allocation by running `flux start` once per node, redirecting log messages to the file `out` in the current directory: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +3. Submit the **submitter_sliding_window.py** script, along with the number of jobs you want to run and the size of the window (if no argument is passed, 10 jobs are submitted and the window size is 2 jobs): + +```bash +python3 ./submitter_sliding_window.py 10 3 +``` +```console +submit: 5624175788032 +submit: 5624611995648 +submit: 5625014648832 +wait: 5624175788032 Success +submit: 5804329533440 +wait: 5624611995648 Success +submit: 5804648300544 +wait: 5625014648832 Success +submit: 5805084508160 +wait: 5804329533440 Success +submit: 5986144223232 +wait: 5804648300544 Success +submit: 5986462990336 +wait: 5805084508160 Success +submit: 5986882420736 +wait: 5986144223232 Success +submit: 6164435697664 +wait: 5986462990336 Success +wait: 5986882420736 Success +wait: 6164435697664 Success +``` + + +## Part(c) - Python Job Submit/Wait (Specific Job ID) + +### Description: Asynchronously submit jobs, block/wait for specific jobs to complete + +1. Allocate three nodes from a resource manager: + +```bash +salloc -N3 -ppdebug +``` + +2. Launch a Flux instance on the current allocation by running `flux start` once per node, redirecting log messages to the file `out` in the current directory: + +```bash +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +``` + +3. Submit the **submitter_wait_in_order.py** script, along with the number of jobs you want to run (if no argument is passed, 10 jobs are submitted): + +```bash +python3 ./submitter_wait_in_order.py 10 +``` +```console +submit: 46912593818008 compute_jobspec +submit: 46912593818176 compute_jobspec +submit: 46912593818344 compute_jobspec +submit: 46912593818512 compute_jobspec +submit: 46912593738048 compute_jobspec +submit: 46912519873816 bad_jobspec +submit: 46912593818792 bad_jobspec +submit: 46912593818960 bad_jobspec +submit: 46912593819128 bad_jobspec +submit: 46912593819296 bad_jobspec +wait: 46912593818008 Success +wait: 46912593818176 Success +wait: 46912593818344 Success +wait: 46912593818512 Success +wait: 46912593738048 Success +wait: 46912519873816 Error: job returned exit code 1 +wait: 46912593818792 Error: job returned exit code 1 +wait: 46912593818960 Error: job returned exit code 1 +wait: 46912593819128 Error: job returned exit code 1 +wait: 46912593819296 Error: job returned exit code 1 +``` + +### Notes + +- The following constructs a job request using the **JobspecV1** class with customizable parameters for how you want to utilize the resources allocated for your job: + +```python +# create jobspec for compute.py +compute_jobspec = JobspecV1.from_command(command=["./compute.py", "15"], num_tasks=4, num_nodes=2, cores_per_task=2) +compute_jobspec.cwd = os.getcwd() +compute_jobspec.environment = dict(os.environ) +``` + +- Using the executor as a context manager (`with FluxExecutor() as executor`) ensures it shuts down properly. + +- `executor.submit(jobspec)` returns a future which completes when the job is done. + +- `future.exception()` blocks until the future is complete and returns (not raises) an exception if the job was canceled or was otherwise prevented from execution. Otherwise the method returns ``None``. + +- `future.result()` blocks until the future is complete and returns the return code of the job. If the job succeeded, the return code will be 0. diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/compute.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/compute.py new file mode 100755 index 00000000..1f860f2a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/compute.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import argparse +import time + +parser = argparse.ArgumentParser(description="compute for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +print("Will compute for " + str(args.integer) + " seconds.") +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_sliding_window.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_sliding_window.py new file mode 100755 index 00000000..cfec3111 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_sliding_window.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 + +import os +import argparse +import collections +import concurrent.futures as cf + +from flux.job import JobspecV1, FluxExecutor + + +def main(): + # parse command line + parser = argparse.ArgumentParser() + parser.add_argument("njobs", nargs="?", type=int, default=10) + parser.add_argument("window_size", nargs="?", type=int, default=2) + args = parser.parse_args() + print(args) + # create jobspec for compute.py + compute_jobspec = JobspecV1.from_command( + command=["./compute.py", "5"], num_tasks=4, num_nodes=2, cores_per_task=2 + ) + compute_jobspec.cwd = os.getcwd() + compute_jobspec.environment = dict(os.environ) + # create a queue of the jobspecs to submit + jobspec_queue = collections.deque(compute_jobspec for _ in range(args.njobs)) + futures = [] # holds incomplete futures + with FluxExecutor() as executor: + while jobspec_queue or futures: + if len(futures) < args.window_size and jobspec_queue: + fut = executor.submit(jobspec_queue.popleft()) + print(f"submit: {id(fut)}") + futures.append(fut) + else: + done, not_done = cf.wait(futures, return_when=cf.FIRST_COMPLETED) + futures = list(not_done) + for fut in done: + if fut.exception() is not None: + print( + f"wait: {id(fut)} Error: job raised error " + f"{fut.exception()}" + ) + elif fut.result() == 0: + print(f"wait: {id(fut)} Success") + else: + print( + f"wait: {id(fut)} Error: job returned " + f"exit code {fut.result()}" + ) + + +if __name__ == "__main__": + main() + +# vim: tabstop=4 shiftwidth=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_wait_any.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_wait_any.py new file mode 100755 index 00000000..890a1f0a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_wait_any.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import os +import argparse +import concurrent.futures + +from flux.job import JobspecV1, FluxExecutor + + +def main(): + # parse command line + parser = argparse.ArgumentParser() + parser.add_argument("njobs", nargs="?", type=int, default=10) + args = parser.parse_args() + # create jobspec for compute.py + compute_jobspec = JobspecV1.from_command( + command=["./compute.py", "10"], num_tasks=4, num_nodes=2, cores_per_task=2 + ) + compute_jobspec.cwd = os.getcwd() + compute_jobspec.environment = dict(os.environ) + # create bad jobspec that will fail + bad_jobspec = JobspecV1.from_command(["/bin/false"]) + # create an executor to submit jobs + with FluxExecutor() as executor: + futures = [] + # submit half successful jobs and half failures + for _ in range(args.njobs // 2): + futures.append(executor.submit(compute_jobspec)) + print(f"submit: {id(futures[-1])} compute_jobspec") + for _ in range(args.njobs // 2, args.njobs): + futures.append(executor.submit(bad_jobspec)) + print(f"submit: {id(futures[-1])} bad_jobspec") + for fut in concurrent.futures.as_completed(futures): + if fut.exception() is not None: + print(f"wait: {id(fut)} Error: job raised error {fut.exception()}") + elif fut.result() == 0: + print(f"wait: {id(fut)} Success") + else: + print(f"wait: {id(fut)} Error: job returned exit code {fut.result()}") + + +if __name__ == "__main__": + main() + +# vim: tabstop=4 shiftwidth=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_wait_in_order.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_wait_in_order.py new file mode 100755 index 00000000..cad64918 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-submit-wait/submitter_wait_in_order.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +import argparse +import os + +from flux.job import JobspecV1, FluxExecutor + + +def main(): + # parse command line + parser = argparse.ArgumentParser() + parser.add_argument("njobs", nargs="?", type=int, default=10) + args = parser.parse_args() + # create jobspec for compute.py + compute_jobspec = JobspecV1.from_command( + command=["./compute.py", "10"], num_tasks=4, num_nodes=2, cores_per_task=2 + ) + compute_jobspec.cwd = os.getcwd() + compute_jobspec.environment = dict(os.environ) + bad_jobspec = JobspecV1.from_command(["/bin/false"]) + # create an executor to submit jobs + with FluxExecutor() as executor: + futures = [] + # submit half successful jobs and half failures + for _ in range(args.njobs // 2): + futures.append(executor.submit(compute_jobspec)) + print(f"submit: {id(futures[-1])} compute_jobspec") + for _ in range(args.njobs // 2, args.njobs): + futures.append(executor.submit(bad_jobspec)) + print(f"submit: {id(futures[-1])} bad_jobspec") + # wait for each future in turn + for fut in futures: + if fut.exception() is not None: + print(f"wait: {id(fut)} Error: job raised error {fut.exception()}") + elif fut.result() == 0: + print(f"wait: {id(fut)} Success") + else: + print(f"wait: {id(fut)} Error: job returned exit code {fut.result()}") + + +if __name__ == "__main__": + main() + +# vim: tabstop=4 shiftwidth=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-watch/job-watch.sh b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-watch/job-watch.sh new file mode 100755 index 00000000..df379bc6 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/job-watch/job-watch.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +echo "25 chocolate chip pancakes on the table... 25 chocolate chip pancakes! 🥞️" +sleep 3 +echo "Eat a stack, for a snack, 15 chocolate chip pancakes on the table! 🥄️" +sleep 3 +echo "15 chocolate chip pancakes on the table... 15 chocolate chip pancakes! 🥞️" +sleep 2 +echo "Throw a stack... it makes a smack! 15 chocolate chip pancakes on the wall! 🥞️" +sleep 2 +echo "You got some cleaning to do 🧽️" diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/kvs-python-bindings/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/kvs-python-bindings/README.md new file mode 100644 index 00000000..5c3aa227 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/kvs-python-bindings/README.md @@ -0,0 +1,69 @@ +# KVS Python Binding Example + +## Description: Use the KVS Python interface to store user data into KVS + +If you haven't already, download the files and change your working directory: + +```console +$ cd flux-workflow-examples/kvs-python-bindings +``` + +1. Launch a Flux instance by running `flux start`, redirecting log messages to the file `out` in the current directory: + +```bash +flux start -s 1 -o,-S,log-filename=out +``` + +2. Submit the Python script: + +```bash +flux submit -N 1 -n 1 ./kvsput-usrdata.py +``` +```console +6705031151616 +``` + +3. Attach to the job and view output: + +```bash +flux job attach $(flux job last) +``` +```console +hello world +hello world again +``` + +4. Each job is run within a KVS namespace. `FLUX_KVS_NAMESPACE` is set, which is automatically read and used by the KVS operations in the handle. To take a look at the job's KVS, convert its job ID to KVS: + +```bash +flux job id --to=kvs $(flux job last) +``` +```console +job.0000.0619.2300.0000 +``` + +5. The keys for this job will be put at the root of the namespace, which is mounted under "guest". To get the value stored under the first key "usrdata": + +```bash +flux kvs get job.0000.0619.2300.0000.guest.usrdata +``` +```bash +"hello world" +``` + +6. Get the value stored under the second key "usrdata2": + +```bash +flux kvs get job.0000.0619.2300.0000.guest.usrdata2 +``` +```console +"hello world again" +``` + +### Notes + +- `f = flux.Flux()` creates a new Flux handle which can be used to connect to and interact with a Flux instance. + +- `kvs.put()` places the value of _udata_ under the key **"usrdata"**. Once the key-value pair is put, the change must be committed with `kvs.commit()`. The value can then be retrieved with `kvs.get()` + +- `kvs.get()` on a directory will return a KVSDir object which supports the `with` compound statement. `with` guarantees a commit is called on the directory. diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/kvs-python-bindings/kvsput-usrdata.py b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/kvs-python-bindings/kvsput-usrdata.py new file mode 100755 index 00000000..0a5cb770 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/kvs-python-bindings/kvsput-usrdata.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +import sys +import flux +import os +from flux import kvs + +f = flux.Flux() +udata = "hello world" +# using function interface +kvs.put(f, "usrdata", udata) +# commit is required to effect the above put op to the server +kvs.commit(f) +print(kvs.get(f, "usrdata")) + +# get() on a directory will return a KVSDir object which supports +# the "with" compound statement. "with" guarantees a commit is called +# on the directory. +with kvs.get(f, ".") as kd: + kd["usrdata2"] = "hello world again" + +print(kvs.get(f, "usrdata2")) + +# vi: ts=4 sw=4 expandtab diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/requirements.txt b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/requirements.txt new file mode 100644 index 00000000..1463f8f1 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/requirements.txt @@ -0,0 +1,3 @@ +sphinx-rtd-theme +sphinxcontrib-spelling +recommonmark diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/README.md b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/README.md new file mode 100644 index 00000000..641be098 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/README.md @@ -0,0 +1,54 @@ +# Using Events with Separate Nodes + +## Description: Using events to synchronize compute and io-forwarding jobs running on separate nodes + +If you haven't already, download the files and change your working directory: + +```console +$ cd flux-workflow-examples/synchronize-events +``` + +Ask for a Slurm allocation, if relevant: + +```bash +salloc -N3 -ppdebug +srun --pty --mpi=none -N3 flux start -o,-S,log-filename=out +flux submit --nodes=1 --ntasks=4 --cores-per-task=2 ./compute.lua 120 +``` + +And: + +```bash +flux submit --nodes=1 --ntasks=1 --cores-per-task=2 ./io-forwarding.lua 120 +``` + +5. List running jobs: + +```bash +flux jobs +``` +``` +JOBID USER NAME ST NTASKS NNODES RUNTIME RANKS +ƒA4TgT7d fluxuser io-forward R 1 1 4.376s 2 +ƒ6vEcj7M fluxuser compute.lu R 4 2 11.51s [0-1] +``` + +6. Attach to running or completed job output: + +```bash +flux job attach ƒ6vEcj7M +``` +```console +Block until we hear go message from the an io forwarder +Block until we hear go message from the an io forwarder +Recv an event: please proceed +Recv an event: please proceed +Will compute for 120 seconds +Will compute for 120 seconds +Block until we hear go message from the an io forwarder +Block until we hear go message from the an io forwarder +Recv an event: please proceed +Recv an event: please proceed +Will compute for 120 seconds +Will compute for 120 seconds +``` diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/compute.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/compute.lua new file mode 100755 index 00000000..925be4cb --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/compute.lua @@ -0,0 +1,23 @@ +#!/usr/bin/env lua + +local f, err = require 'flux' .new () + +local amount = tonumber (arg[1]) or 120 + +local function sleep (n) + os.execute ("sleep " .. n) +end + +if #arg ~= 1 then + print ("Usage: compute.lua seconds") + print (" Compute for seconds") + os.exit (1) +end + +print ("Block until we hear go message from the an io forwarder") +f:subscribe ("app.iof.go") +local t, tag = f:recv_event () +print ("Recv an event: " .. t.data ) +print ("Will compute for " .. amount .. " seconds") +sleep (amount) + diff --git a/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/io-forwarding.lua b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/io-forwarding.lua new file mode 100755 index 00000000..bad77f8b --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/assets/flux-workflow-examples/synchronize-events/io-forwarding.lua @@ -0,0 +1,23 @@ +#!/usr/bin/env lua + +local flux = require 'flux' +local f = flux.new () +local amount = tonumber (arg[1]) or 120 + +local function sleep (n) + os.execute ("sleep " .. n) +end + +if #arg ~= 1 then + print ("Usage: io-forward.lua seconds") + print (" Forward I/O requests for seconds") + os.exit (1) +end + +local rc, err = f:sendevent ({ data = "please proceed" }, "app.iof.go") +if not rc then error (err) end +print ("Sent a go event") + +print ("Will forward IO requests for " .. amount .. " seconds") +sleep (amount) + diff --git a/2026/HPCIC-AWS/tutorial/ch1/01_flux_tutorial.ipynb b/2026/HPCIC-AWS/tutorial/ch1/01_flux_tutorial.ipynb new file mode 100644 index 00000000..f8727dbb --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/01_flux_tutorial.ipynb @@ -0,0 +1,726 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2507d149-dcab-458a-a554-37388e0ee13a", + "metadata": { + "tags": [] + }, + "source": [ + "

\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "40e867ba-f689-4301-bb60-9a448556bb84", + "metadata": { + "tags": [] + }, + "source": [ + "# Welcome to the Flux Tutorial\n", + "\n", + "> What is Flux Framework? 🤔️\n", + " \n", + "Flux is a flexible framework for resource management, built for your site. The framework consists of a suite of projects, tools, and libraries that may be used to build site-custom resource managers for High Performance Computing centers and cloud environments. Flux is a next-generation resource manager and scheduler with many transformative capabilities like hierarchical scheduling and resource management (you can think of it as \"fractal scheduling\") and directed-graph based resource representations.\n", + "\n", + "## I'm ready! How do I do this tutorial? 😁️\n", + "\n", + "This tutorial is split into 3 chapters, each of which has a notebook. Let's first setup your workspace. Click on to create a Terminal. Drag it to be alongside this notebook so you have a terminal on the left alongside this text on the right (you should see both at once).\n", + "\n", + "When you are done, let's get started!" + ] + }, + { + "cell_type": "markdown", + "id": "15e82c38-8465-49ac-ae2b-b0bb56a79ec9", + "metadata": { + "tags": [] + }, + "source": [ + "\n", + "# Getting started with Flux\n", + "\n", + "The code and examples that this tutorial is based on can be found at [flux-framework/Tutorials](https://github.com/flux-framework/Tutorials/tree/master/2024-HPCIC-AWS). You can also find python examples in the `assets/flux-workflow-examples` directory from the sidebar navigation in this JupyterLab instance. " + ] + }, + { + "cell_type": "markdown", + "id": "ae33fef6-278c-4996-8534-fd15e548b338", + "metadata": { + "tags": [] + }, + "source": [ + "
\n", + "Tip: Did you know you can get help for flux or a flux command? For example, try \"flux help\" and \"flux help jobs\"\n", + "
\n", + "\n", + "Try asking for help first across top level commands.\n", + "\n", + "```bash\n", + "flux help\n", + "```\n", + "\n", + "Now try for a specific command\n", + "\n", + "```bash\n", + "flux help jobs\n", + "```\n", + "The second will open a manpage, and you can press \"Q\" for quit to exit. Now let's get help for a specific subcommand. This works too:\n", + "\n", + "```bash\n", + "flux submit --help\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "id": "ec052119", + "metadata": {}, + "source": [ + "## Flux Resources\n", + "\n", + "When you are interacting with Flux, you will commonly want to know what resources are available to you. Flux uses [hwloc](https://github.com/open-mpi/hwloc) to detect the resources on each node and then to populate its resource graph.\n", + "\n", + "You can access the topology information that Flux collects with the `flux resource` subcommand. Let's run `flux resource list` to see the resources available to us in this notebook.\n", + "\n", + "```bash\n", + "flux resource list\n", + " STATE NNODES NCORES NGPUS NODELIST\n", + " free 1 64 0 ip-10-0-25-10\n", + " allocated 0 0 0 \n", + " down 0 0 0 \n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "0086e47e", + "metadata": {}, + "source": [ + "Flux can also bootstrap its resource graph based on static input files, like in the case of a multi-user system instance setup by site administrators. [More information on Flux's static resource configuration files](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/guide/admin.html#configuration). Flux provides a more standard interface to listing available resources that works regardless of the resource input source: `flux resource`.\n", + "\n", + "```bash\n", + "# To view status of resources\n", + "flux resource status\n", + " STATE UP NNODES NODELIST\n", + " avail ✔ 1 ip-10-0-25-10\n", + "```\n", + "The output above may vary based on your resources. It might also be the case that you need to see queues. Here is how to do that:\n", + "\n", + "```bash\n", + "flux queue list\n", + " EN ST TDEFAULT TLIMIT NNODES NCORES NGPUS\n", + " ✔ ✔ inf inf 0-1 0-64 0-0\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "dee2d6af-43fa-490e-88e9-10f13e660125", + "metadata": { + "tags": [] + }, + "source": [ + "
\n", + "\n", + "# Flux Commands \n", + "\n", + "Here are how Flux commands map to a scheduler you are likely familiar with, Slurm. A larger table with similar mappings for LSF, Moab, and Slurm can be [viewed here](https://hpc.llnl.gov/banks-jobs/running-jobs/batch-system-cross-reference-guides). For submitting jobs, you can use the `flux` `submit`, `run`, `bulksubmit`, `batch`, and `alloc` commands.\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
OperationSlurmFlux
One-off run of a single job (blocking)srunflux run
One-off run of a single job (interactive)srun --ptyflux run -o pty.interactive
One-off run of a single job (not blocking)NAflux submit
Bulk submission of jobs (not blocking)NAflux bulksubmit
Watching jobsNAflux watch
Querying the status of jobssqueue/scontrol show job job_idflux jobs/flux job info job_id
Canceling running jobsscancelflux cancel
Allocation for an interactive instancesallocflux alloc
Submitting batch jobssbatchflux batch
" + ] + }, + { + "cell_type": "markdown", + "id": "ac798095", + "metadata": {}, + "source": [ + "## flux run\n", + "\n", + "
\n", + "Description: Running a single job (blocking)\n", + "
\n", + "\n", + "The `flux run` command submits a job to Flux (similar to `flux submit`) but then attaches to the job with `flux job attach`, printing the job's stdout/stderr to the terminal and exiting with the same exit code as the job. It's basically doing an interactive submit, because you will be able to watch the output in your terminal, and it will block your terminal until the job completes.\n", + "\n", + "```bash\n", + "flux run sh -c 'sleep 5 && echo hello'\n", + "hello\n", + "```\n", + "\n", + "The output from the previous command is the hostname (a container ID string in this case). If the job exits with a non-zero exit code this will be reported by `flux job attach` (occurs implicitly with `flux run`). For example, execute the following:\n", + "\n", + "```bash\n", + "flux run /bin/false\n", + "flux-job: task(s) exited with exit code 1\n", + "```\n", + "A job submitted with `run` can be canceled with two rapid `Cltr-C`s in succession, or a user can detach from the job with `Ctrl-C Ctrl-Z`. The user can then re-attach to the job by using `flux job attach JOBID`. `flux submit` and `flux run` also support many other useful flags:\n", + "\n", + "```bash\n", + "flux run -N1 -n1 -c1 hostname\n", + "ip-10-0-25-10\n", + "```\n", + "\n", + "```bash\n", + "flux run -n4 --label-io --time-limit=5s --env-remove=LD_LIBRARY_PATH hostname\n", + "3: ip-10-0-25-10\n", + "2: ip-10-0-25-10\n", + "1: ip-10-0-25-10\n", + "0: ip-10-0-25-10\n", + "```\n", + "\n", + "To see all flags for a `flux run`:\n", + "\n", + "```bash\n", + "flux run --help\n", + "```\n", + "\n", + "Let's try compiling the Makefile in this directory.\n", + "\n", + "```bash\n", + "flux run make -j\n", + "mpicc -o hello hello.c\n", + "```\n", + "And run an exclusive job using all the processes on the node:\n", + "\n", + "```bash\n", + "flux run -N1 -n32 -c2 --exclusive ./hello\n", + "ƒ2261FtDpK: completed MPI_Init in 2.171s. There are 32 tasks\n", + "ƒ2261FtDpK: completed first barrier in 0.001s\n", + "ƒ2261FtDpK: completed MPI_Finalize in 0.021s\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "7c09708a-74a1-4e61-b678-cb337b7df435", + "metadata": {}, + "source": [ + "## flux submit\n", + "\n", + "
\n", + "Description: Running a single job (not blocking)\n", + "
\n", + "\n", + "\n", + "The `flux submit` command submits a job to Flux and prints out the jobid. Let's peek at the help first.\n", + "\n", + "```bash\n", + "flux submit --help\n", + "```\n", + "\n", + "Let's test with a basic hostname.\n", + "\n", + "```bash\n", + "flux submit hostname\n", + "```\n", + "\n", + "But how does one get output? To quickly see output (which will block the terminal if the job is still running) after a submit, you can do:\n", + "\n", + "```bash\n", + "flux job attach $(flux job last)\n", + "```\n", + "\n", + "How does that work? The command `flux job last` provides the last job identifier.\n", + "\n", + "```bash\n", + "flux job last\n", + "```\n", + "\n", + "And when we attach to it, if the job is still running we will block the terminal. To provide a custom path to an output or error file, you can provide `--out` and `--err`, respectively. Let's try those both now. Now let's submit another one, and give it the same output and error file\n", + "\n", + "```bash\n", + "flux submit --out /tmp/harry-potter.txt --err /tmp/harry-potter.txt echo \"Yer a wizard, $(whoami)!\"\n", + "```\n", + "\n", + "Take a look!\n", + "\n", + "```bash\n", + "cat /tmp/harry-potter.txt\n", + "```\n", + "\n", + "The `submit` command supports common options like `--nnodes`, `--ntasks`, and `--cores-per-task`. There are short option equivalents (`-N`, `-n`, and `-c`, respectively) of these options as well. `--cores-per-task=1` is the default.\n", + "\n", + "```bash\n", + "flux submit -N1 -n2 sleep inf\n", + "```\n", + "\n", + "#### Some submission flags of note\n", + "\n", + "* `-N` specifies a number of nodes\n", + "* `-n` specifies a number of tasks for distributed applications, and cores for interactive allocations\n", + "* `-c` specifies a number of cores per task\n", + "* `--requires` constrains a job to run on a specific rank or hostname\n", + "* `--dependency` makes a job depend on another job\n", + "* `-cc` submits carbon copies of the same job many times\n", + "* `--out` and `--err` redirect output and error to files\n", + "\n", + "Let's work through some examples of these flags!" + ] + }, + { + "cell_type": "markdown", + "id": "91e9ed6c", + "metadata": {}, + "source": [ + "## flux bulksubmit\n", + "\n", + "
\n", + "Description: Submitting jobs in bulk (not blocking)\n", + "
\n", + "\n", + "The `flux bulksubmit` command enqueues jobs based on a set of inputs which are substituted on the command line, similar to `xargs` and the GNU `parallel` utility, except the jobs have access to the resources of an entire Flux instance instead of only the local system.\n", + "\n", + "```bash\n", + "flux bulksubmit --wait echo {} ::: harry ron hermione\n", + "ƒ3Z7z2ZZ6o\n", + "ƒ3Z7z2ZZ6p\n", + "ƒ3Z7z2ZZ6q\n", + "```\n", + "\n", + "### carbon copy\n", + "\n", + "The `--cc` option (akin to \"carbon copy\") to `submit` makes repeated submission even easier via, `flux submit --cc=IDSET`:\n", + "\n", + "```bash\n", + "flux submit --watch --cc=1-4 echo {cc}\n", + "ƒ24R3EgAAB\n", + "ƒ24R3EgAAC\n", + "ƒ24R3EgAAD\n", + "ƒ24R3EgAAE\n", + "1\n", + "2\n", + "3\n", + "4\n", + "```\n", + "\n", + "Try this to add a progress bar and see the jobs/s rate report:\n", + "\n", + "```bash\n", + "flux submit --cc=1-100 --watch --progress --jps hostname\n", + "```\n", + "\n", + "Note that `--wait` is implied by `--watch`, meaning that when you are watching jobs, you are also waiting for them to finish. Here are some other carbon copy commands that are useful to try:\n", + "\n", + "```bash\n", + "# Use flux carbon copy to submit identical jobs with different inputs\n", + "flux submit --cc=\"1-10\" echo \"Hello I am job {cc}\"\n", + "\n", + "# Submits scripts myscript1.sh through myscript10.sh\n", + "flux submit --cc=0-6 flux-workflow-examples/bulksubmit/{cc}.sh\n", + "\n", + "# Bypass the key value store and write output to file with jobid\n", + "flux submit --cc=1-10 --output=job-{{id}}.out echo \"This is job {cc}\"\n", + "\n", + "# Use carbon copy to submit identical jobs with different inputs\n", + "flux bulksubmit --dry-run --cc={1} echo {0} ::: a b c ::: 0-1 0-3 0-7\n", + "```\n", + "\n", + "Of course, Flux can launch more than just single-node, single-core jobs. We can submit multiple heterogeneous jobs and Flux will co-schedule the jobs while also ensuring no oversubscription of resources (e.g., cores). Let's run the second example here, and add a clever trick to ask for output as we submit the jobs. This is a fun one, I promise!\n", + "\n", + "```bash\n", + "for jobid in $(flux submit --cc=0-7 /bin/bash bulksubmit/{cc}.sh); \n", + " do \n", + " flux job attach ${jobid}; \n", + " sleep 1; \n", + "done\n", + "```\n", + "\n", + "Note: in this tutorial, we cannot assume that the host you are running on has multiple cores, thus the examples below only vary the number of nodes per job. Varying the `cores-per-task` is also possible on Flux when the underlying hardware supports it (e.g., a multi-core node). Here are two examples.\n", + "\n", + "```bash\n", + "# Two nodes, 2 tasks, and each task has one core\n", + "flux submit --nodes=2 --ntasks=2 --cores-per-task=1 --job-name magic sleep inf\n", + "\n", + "# One node, one task, and each task has one core\n", + "flux submit --nodes=1 --ntasks=1 --cores-per-task=1 --job-name moremagic sleep inf\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "641f446c-b2e8-40d8-b6bd-eb6b9dba3c71", + "metadata": {}, + "source": [ + "## flux watch\n", + "\n", + "
\n", + "Description: 👀️ Watching jobs\n", + "
\n", + "\n", + "Wouldn't it be cool to submit a job and then watch it? Well, yeah! We can do this now with flux watch. Let's run a fun example, and then watch the output. We have sleeps in here interspersed with echos only to show you the live action! 🥞️\n", + "Also note a nice trick - you can always use `flux job last` to get the last JOBID.\n", + "Here is an example (not runnable, as notebooks don't support environment variables) for getting and saving a job id:\n", + "\n", + "```bash\n", + "flux submit hostname\n", + "JOBID=$(flux job last)\n", + "```\n", + "\n", + "And then you could use the variable `$JOBID` in your subsequent script or interactions with Flux! So what makes `flux watch` different from `flux job attach`? Aside from the fact that `flux watch` is read-only, `flux watch` can watch many (or even all (`flux watch --all`) jobs at once!\n", + "\n", + "```bash\n", + "flux submit ./job-watch.sh\n", + "flux watch $(flux job last)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "3f8c2af2", + "metadata": {}, + "source": [ + "## flux jobs\n", + "\n", + "
\n", + "Description: Querying the status of jobs\n", + "
\n", + "\n", + "We can now list the jobs in the queue with `flux jobs` and we should see both jobs that we just submitted. Jobs that are instances are colored blue in output, red jobs are failed jobs, and green jobs are those that completed successfully. Note that the JupyterLab notebook may not display these colors. You will be able to see them in the terminal.\n", + "\n", + "```bash\n", + "flux submit sleep inf\n", + "flux jobs\n", + "```\n", + "\n", + "You might also want to see all the jobs with `-a`:\n", + "\n", + "```bash\n", + "flux jobs -a\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "77ca4277", + "metadata": {}, + "source": [ + "## flux cancel\n", + "\n", + "
\n", + "Description: Canceling running jobs\n", + "
\n", + "\n", + "Since some of the jobs we see in the table above won't ever exit (and we didn't specify a timelimit), let's cancel them all now and free up the resources.\n", + "\n", + "```bash\n", + "# This was previously flux cancelall -f\n", + "flux cancel --all\n", + "flux jobs\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "2d3e314e-98eb-487a-ad8e-1442840e37d8", + "metadata": {}, + "source": [ + "## flux alloc\n", + "\n", + "
\n", + "Description: Allocation for an interactive instance\n", + "
\n", + "\n", + "You might want to request an allocation for a set of resources (an allocation) and then attach to them interactively. This is the goal of flux alloc. Try these commands in the terminal: \n", + "\n", + "```bash\n", + "# Look at the resources you have outside of the allocation\n", + "flux resource list\n", + "\n", + "# Request an allocation with 2 \"nodes\" - a subset of what you have in total\n", + "flux alloc -N 2\n", + "\n", + "# See the resources you are given\n", + "flux resource list\n", + "\n", + "# You can exit from the allocation like this!\n", + "exit\n", + "```\n", + "When you want to automate this, submitting work to an allocation, you would use `flux batch`." + ] + }, + { + "cell_type": "markdown", + "id": "544aa0a9", + "metadata": {}, + "source": [ + "## flux batch\n", + "\n", + "
\n", + "Description: Submitting batch jobs\n", + "
\n", + "\n", + "We can use the `flux batch` command to easily created nested flux instances. When `flux batch` is invoked, Flux will automatically create a nested instance that spans the resources allocated to the job, and then Flux runs the batch script passed to `flux batch` on rank 0 of the nested instance. \"Rank\" refers to the rank of the Tree-Based Overlay Network (TBON) used by the [Flux brokers](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/man1/flux-broker.html).\n", + "\n", + "While a batch script is expected to launch parallel jobs using `flux run` or `flux submit` at this level, nothing prevents the script from further batching other sub-batch-jobs using the `flux batch` interface, if desired. Take a quick look at [sleep_batch.sh](sleep_batch.sh) to see what we are about to run, then run:\n", + "\n", + "```bash\n", + "flux batch --nslots=2 --cores-per-slot=1 --nodes=2 ./sleep_batch.sh\n", + "flux batch --nslots=2 --cores-per-slot=1 --nodes=2 ./sleep_batch.sh\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "7f2b135c-ece7-45f7-b25d-dc90ba5f44f7", + "metadata": {}, + "source": [ + "### `flux job`\n", + "\n", + "Let's next inspect the last job we ran with `flux job info` and target the last job identifier with `flux job last`. \n", + "\n", + "```bash\n", + "# Note here we are using flux job last to see the last job id\n", + "# The \"R\" here asks for the resource spec\n", + "flux job info $(flux job last) R\n", + "\n", + "# When we attach it will direct us to our output file\n", + "flux job attach $(flux job last)\n", + "```\n", + "\n", + "We can again see a list all completed jobs with `flux jobs -a`. To restrict the output to failed (i.e., jobs that exit with nonzero exit code, time out, or are canceled or killed) jobs, run:\n", + "\n", + "```bash\n", + "flux jobs -f failed\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "6bc17bac-2fc4-4418-8939-e930f9929976", + "metadata": {}, + "source": [ + "### flux submit from within a batch\n", + "\n", + "Next open up [hello-batch.sh](hello-batch.sh) to see an example of using `flux batch` to submit jobs within the instance, and then wait for them to finish. This script is going to:\n", + "\n", + "1. Create a flux instance with the top level resources you specify\n", + "2. Submit jobs to the scheduler controlled by the broker of that sub-instance\n", + "3. Run the four jobs, with `--flags=waitable` and `flux job wait --all` to wait for the output file\n", + "4. Within the batch script, you can add `--wait` or `--flags=waitable` to individual jobs, and use `flux queue drain` to wait for the queue to drain, _or_ `flux job wait --all` to wait for the jobs you flagged to finish. \n", + "\n", + "Note that when you submit a batch job, you'll get a job id back for the _batch job_, and usually when you look at the output of that with `flux job attach $jobid` you will see the output file(s) where the internal contents are written. Since we want to print the output file easily to the terminal, we are waiting for the batch job by adding the `--flags=waitable` and then waiting for it. Let's try to run our batch job now.\n", + "\n", + "```bash\n", + "flux batch --flags=waitable --out /tmp/flux-batch.out -N1 ./hello-batch.sh\n", + "flux job wait\n", + "cat /tmp/hello-batch-1.out\n", + "cat /tmp/hello-batch-2.out\n", + "cat /tmp/hello-batch-3.out\n", + "cat /tmp/hello-batch-4.out\n", + "```\n", + "```console\n", + "Hello job 1 from ip-10-0-25-10 💛️\n", + "Hello job 2 from ip-10-0-25-10 💚️\n", + "Hello job 3 from ip-10-0-25-10 💙️\n", + "Hello job 4 from ip-10-0-25-10 💜️\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "04b405b1-219f-489c-abfc-e2983e82124a", + "metadata": {}, + "source": [ + "### The Flux Hierarchy 🍇️\n", + "\n", + "One feature of the Flux Framework scheduler that is unique is its ability to submit jobs within instances, where an instance can be thought of as a level in a graph. Let's start with a basic image - this is what it might look like to submit to a scheduler that is not graph-based (left), where all jobs go to a central job queue or database. Note that our maximum job throughput is one job per second. The throughput is limited by the workload manager's ability to process a single job. We can improve upon this by simply adding another level, perhaps with three instances. For example, let's say we create a flux allocation or batch that has control of some number of child nodes. We might launch three new instances (each with its own scheduler and queue, right image) at that level two, and all of a sudden, we get a throughput of 1x3, or three jobs per second.\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "All of a sudden, the throughout can increase exponentially because we are essentially submitting to different schedulers. The example above is not impressive, but our [learning guide](https://flux-framework.readthedocs.io/en/latest/guides/learning_guide.html#fully-hierarchical-resource-management-techniques) (Figure 10) has a beautiful example of how it can scale, done via an actual experiment. We were able to submit 500 jobs/second using only three levels, vs. close to 1 job/second with one level. For an interesting detail, you can vary the scheduler algorithm or topology within each sub-instance, meaning that you can do some fairly interesting things with scheduling work, and all without stressing the top level system instance. \n", + "\n", + "Now that we understand nested instances, let's look at another batch example that better uses them. Here we have two job scripts:\n", + "\n", + "- [sub_job1.sh](sub_job1.sh): Is going to be run with `flux batch` and submit sub_job2.sh\n", + "- [sub_job2.sh](sub_job2.sh): Is going to be submitted by sub_job1.sh.\n", + "\n", + "Take a look at each script to see how they work, and then submit it!\n", + "\n", + "```bash\n", + "flux batch ./sub_job1.sh\n", + "```\n", + "\n", + "And now that we've submitted, let's look at the hierarchy for all the jobs we just ran. Here is how to try flux pstree, which normally can show jobs in an instance, but it has limited functionality given we are in a notebook! So instead of just running the single command, let's add \"-a\" to indicate \"show me ALL jobs.\"\n", + "More complex jobs and in a different environment would have deeper nesting. You can [see examples here](https://flux-framework.readthedocs.io/en/latest/jobs/hierarchies.html?h=pstree#flux-pstree-command).\n", + "\n", + "```bash\n", + "flux pstree -a\n", + ".\n", + "├── ./sub_job1.sh:CD\n", + "├── ./hello-batch.sh:CD\n", + "├── ./hello-batch.sh:F\n", + "├── 11*[echo:CD]\n", + "├── 2*[./sleep_batch.sh:F]\n", + "├── sleep:CA\n", + "├── job-watch.sh:CD\n", + "├── 104*[hostname:CD]\n", + "├── moremagic:F\n", + "├── magic:F\n", + "├── 8*[bash:CD]\n", + "├── hello:CD\n", + "├── hello:F\n", + "├── 2*[make:CD]\n", + "├── make:F\n", + "├── false:F\n", + "└── sh:CD\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "7724130f-b0db-4ccf-a01e-98907b9a27ca", + "metadata": {}, + "source": [ + "You can also try a more detailed view with `flux pstree -a -X`!" + ] + }, + { + "cell_type": "markdown", + "id": "70e3df1d-32c9-4996-b6f7-2fa85f4c02ad", + "metadata": { + "tags": [] + }, + "source": [ + "### flux start\n", + "\n", + "
\n", + "Description: Interactively starting a set of resources\n", + "
\n", + "\n", + "Sometimes you need to interactively start a set of compute resources. We call this subset a flux instance. You can launch jobs under this instance, akin to how you've done above! In fact, this entire tutorial is started (to give you 4 faux nodes) with a `flux start` command: \n", + "\n", + "```bash\n", + "flux start --test-size=4\n", + "```\n", + "\n", + "A Flux instance may be running as the default resource manager on a cluster, a job in a resource manager such as Slurm, LSF, or Flux itself, or as a test instance launched locally. This is really neat because it means you can launch Flux under other resource managers where it is not installed as the system workload manager. You can also execute \"one off\" commands to it, for example, to see the instance size:\n", + "\n", + "```bash\n", + "flux start --test-size=4 flux getattr size\n", + "4\n", + "```\n", + "\n", + "When you run `flux start` without a command, it will give you an interactive shell to the instance. When you provide a command (as we do above) it will run it and exit. This is what happens for the command above! The output indicates the number of brokers started successfully. As soon as we get and print the size, we exit." + ] + }, + { + "cell_type": "markdown", + "id": "926bd17b-b288-4b51-b984-1478dd382954", + "metadata": { + "tags": [] + }, + "source": [ + "#### **Wrap up: All the Different Ways to Do Work (from the CLI)**\n", + "Here's a basic table that shows the four submission commands we use in Flux. \n", + "\n", + "| | creates subinstance | runs distributed application |\n", + "|------------------------|-------------------------------|---------------------------------------|\n", + "| interactive | `flux alloc` | `flux run` |\n", + "| backgrounded | `flux batch` | `flux submit`👀 |\n", + "\n", + "* `flux alloc` will allocate resources and start an interactive Flux sub-instance underneath those resources. Within that subinstance, you can submit as many jobs as you like, with no worry about backing up the parent (usually system) instance.\n", + "* `flux batch` will also allocate resources and start a Flux sub-instance, but the job is not interactive, and thus `batch` requires a script outlining the work to do.\n", + "* `flux run` runs a program under a Flux instance. It does not create a new sub-instance, and will watch until the program completes.\n", + "* `flux submit` does not exist in other resource managers, notably Slurm. It does the same thing as `flux run`, but does not watch for job output, instead writing this to a file. " + ] + }, + { + "cell_type": "markdown", + "id": "c9c3e767-0459-4218-a8cf-0f98bd32d6bf", + "metadata": {}, + "source": [ + "# This concludes Chapter 1! 📗️\n", + "\n", + "In this module, we covered:\n", + "1. Submitting jobs with Flux\n", + "2. The differences in submission commands.\n", + "\n", + "To continue with the tutorial, open [Chapter 2](../ch2/02_flux_framework.ipynb)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/2026/HPCIC-AWS/tutorial/ch1/Makefile b/2026/HPCIC-AWS/tutorial/ch1/Makefile new file mode 100644 index 00000000..c3530067 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/Makefile @@ -0,0 +1,2 @@ +make: + mpicc -o hello hello.c diff --git a/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/0.sh b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/0.sh new file mode 100755 index 00000000..6570ec41 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/0.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "Enter, stranger, but take heed" +sleep 1 diff --git a/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/1.sh b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/1.sh new file mode 100755 index 00000000..dd6c458a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/1.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "Of what awaits the sin of greed," +sleep 1 diff --git a/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/2.sh b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/2.sh new file mode 100755 index 00000000..cfbfa217 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/2.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "For those who take, but do not earn," +sleep 1 diff --git a/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/3.sh b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/3.sh new file mode 100755 index 00000000..c1fea0ee --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/3.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "Must pay most dearly in their turn," +sleep 1 diff --git a/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/4.sh b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/4.sh new file mode 100755 index 00000000..3359c352 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/4.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "So if you seek beneath our floors" +sleep 1 diff --git a/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/5.sh b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/5.sh new file mode 100755 index 00000000..9a07e711 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/5.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "A treasure that was never yours," +sleep 1 diff --git a/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/6.sh b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/6.sh new file mode 100755 index 00000000..6eabff7c --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/6.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "Thief, you have been warned, beware" +sleep 1 diff --git a/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/7.sh b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/7.sh new file mode 100755 index 00000000..20f9e2f4 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/bulksubmit/7.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "Of finding more than treasure there." +sleep 1 diff --git a/2026/HPCIC-AWS/tutorial/ch1/hello-batch.sh b/2026/HPCIC-AWS/tutorial/ch1/hello-batch.sh new file mode 100755 index 00000000..3c39dc02 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/hello-batch.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +flux submit --flags=waitable -N1 --output=/tmp/hello-batch-1.out echo "Hello job 1 from $(hostname) 💛️" +flux submit --flags=waitable -N1 --output=/tmp/hello-batch-2.out echo "Hello job 2 from $(hostname) 💚️" +flux submit --flags=waitable -N1 --output=/tmp/hello-batch-3.out echo "Hello job 3 from $(hostname) 💙️" +flux submit --flags=waitable -N1 --output=/tmp/hello-batch-4.out echo "Hello job 4 from $(hostname) 💜️" +# Wait for the jobs to finish +flux job wait --all \ No newline at end of file diff --git a/2026/HPCIC-AWS/tutorial/ch1/hello.c b/2026/HPCIC-AWS/tutorial/ch1/hello.c new file mode 100644 index 00000000..b43bfaa9 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/hello.c @@ -0,0 +1,94 @@ +/************************************************************\ + * Copyright 2014 Lawrence Livermore National Security, LLC + * (c.f. AUTHORS, NOTICE.LLNS, COPYING) + * + * This file is part of the Flux resource manager framework. + * For details, see https://github.com/flux-framework. + * + * SPDX-License-Identifier: LGPL-3.0 +\************************************************************/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include +#include +#include +#include +#include + +static struct timespec ts_diff (struct timespec start, struct timespec end) +{ + struct timespec temp; + if ((end.tv_nsec-start.tv_nsec)<0) { + temp.tv_sec = end.tv_sec-start.tv_sec-1; + temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; + } else { + temp.tv_sec = end.tv_sec-start.tv_sec; + temp.tv_nsec = end.tv_nsec-start.tv_nsec; + } + return temp; +} + +double monotime_since (struct timespec t0) +{ + struct timespec ts, d; + clock_gettime (CLOCK_MONOTONIC, &ts); + + d = ts_diff (t0, ts); + + return ((double) d.tv_sec * 1000 + (double) d.tv_nsec / 1000000); +} + +void monotime (struct timespec *tp) +{ + clock_gettime (CLOCK_MONOTONIC, tp); +} + +bool monotime_isset (struct timespec t) +{ + return (t.tv_sec || t.tv_nsec); +} + +int main (int argc, char *argv[]) +{ + int id, ntasks; + struct timespec t; + const char *label; + + if (!(label = getenv ("FLUX_JOB_CC"))) + if (!(label = getenv ("FLUX_JOB_ID"))) + label = "0"; + + monotime (&t); + MPI_Init (&argc, &argv); + MPI_Comm_rank (MPI_COMM_WORLD, &id); + MPI_Comm_size (MPI_COMM_WORLD, &ntasks); + if (id == 0) { + printf ("%s: completed MPI_Init in %0.3fs. There are %d tasks\n", + label, + monotime_since (t) / 1000, ntasks); + fflush (stdout); + } + + monotime (&t); + MPI_Barrier (MPI_COMM_WORLD); + if (id == 0) { + printf ("%s: completed first barrier in %0.3fs\n", + label, + monotime_since (t) / 1000); + fflush (stdout); + } + + monotime (&t); + MPI_Finalize (); + if (id == 0) { + printf ("%s: completed MPI_Finalize in %0.3fs\n", + label, + monotime_since (t) / 1000); + fflush (stdout); + } + return 0; +} + diff --git a/2026/HPCIC-AWS/tutorial/ch1/job-watch.sh b/2026/HPCIC-AWS/tutorial/ch1/job-watch.sh new file mode 100755 index 00000000..9b4c08d1 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/job-watch.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +echo "Oh you may not think me pretty," +sleep 3 +echo "But don’t judge on what you see," +sleep 3 +echo "I’ll eat myself if you can find" +sleep 2 +echo "A smarter hat than me." +sleep 2 +echo "[A scheduler smarter than me]!" diff --git a/2026/HPCIC-AWS/tutorial/ch1/sleep_batch.sh b/2026/HPCIC-AWS/tutorial/ch1/sleep_batch.sh new file mode 100644 index 00000000..58496dae --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/sleep_batch.sh @@ -0,0 +1,15 @@ +#!/bin/bash +#FLUX: --nodes=2 +#FLUX: --nslots=2 +#FLUX: --cores-per-slot=1 + +echo "Starting my batch job" +echo "Print the resources allocated to this batch job" +flux resource list + +echo "Use sleep to emulate a parallel program" +echo "Run the program at a total of 2 processes each requiring" +echo "1 core. These processes are equally spread across 2 nodes." +flux run -N 2 -n 2 sleep 30 +flux run -N 2 -n 2 sleep 30 + diff --git a/2026/HPCIC-AWS/tutorial/ch1/sub_job1.sh b/2026/HPCIC-AWS/tutorial/ch1/sub_job1.sh new file mode 100755 index 00000000..5cf7ff47 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/sub_job1.sh @@ -0,0 +1,6 @@ +#!/bin/bash +#FLUX: -N1 + +flux batch -N1 ./sub_job2.sh +flux queue drain + diff --git a/2026/HPCIC-AWS/tutorial/ch1/sub_job2.sh b/2026/HPCIC-AWS/tutorial/ch1/sub_job2.sh new file mode 100755 index 00000000..d947f191 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch1/sub_job2.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +flux run -N1 sleep 30 + diff --git a/2026/HPCIC-AWS/tutorial/ch2/02_flux_framework.ipynb b/2026/HPCIC-AWS/tutorial/ch2/02_flux_framework.ipynb new file mode 100644 index 00000000..e393320c --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch2/02_flux_framework.ipynb @@ -0,0 +1,11118 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "
\n", + "
\n", + "
\n", + "\n", + "# Chapter 2: Python Submission API 🐍️\n", + "\n", + "Flux also provides first-class python bindings which can be used to submit jobs programmatically. For this chapter in the tutorial, we will be using Python and you can interact with cells in the notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Importing the flux package\n", + "\n", + "Flux requires Python to build, so if you have Flux installed, you have at least one Python installation that works. However, you can also `pip install flux-python` to get the `flux` package in a side-installation of Python. The Python SDK interacts with the current Flux instance via the Flux handle. Let's show how to test that." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "import flux \n", + "print(flux.Flux())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "import flux\n", + "import flux.job\n", + "from flux.job import JobspecV1\n", + "from flux.job.JobID import JobID" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "### `flux.job.JobspecV1`\n", + "\n", + "
\n", + "Description: The JobspecV1 class provides an easy means to create job specifications\n", + "
\n", + "\n", + "Flux represents work as a standard called the [Jobspec](https://flux-framework.readthedocs.io/projects/flux-rfc/en/latest/spec_25.html). While you could write YAML or JSON, it's much easier to use provided Python functions that take high level metadata (command, resources, etc) to generate them. We can then replicate our previous example of submitting multiple heterogeneous jobs using these Python helpers, and testing that Flux co-schedules them." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "jobid.f58 = 'ƒkLsZEaNK'\n" + ] + } + ], + "source": [ + "# connect to the running Flux instance\n", + "f = flux.Flux()\n", + "\n", + "# Create the Jobspec from a command to run a python script, and specify resources\n", + "jobspec = JobspecV1.from_command(\n", + " command=[\"sleep\", \"0\"], num_tasks=1, num_nodes=1, cores_per_task=1\n", + ")\n", + "\n", + "# Attributes like environment, cwd, attributes input/output, queue and ruration can be set directly.\n", + "jobspec.environment = {'TMPDIR': '/tmp/'}\n", + "jobid = flux.job.submit(f, jobspec)\n", + "\n", + "# When we submit, we get back the job identifier (JobID)\n", + "print(f'{jobid.f58 = }')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We get a job ID, and the command will _block_ until a job ID is assigned. But, perhaps we want more information about the job, too." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"t_run\": 1754855108.0022883,\n", + " \"t_cleanup\": 1754855108.0174737,\n", + " \"duration\": 0.0,\n", + " \"result\": \"COMPLETED\",\n", + " \"waitstatus\": 0,\n", + " \"id\": 95699806978048,\n", + " \"t_submit\": 1754855107.9783614,\n", + " \"runtime\": 0.015185356140136719,\n", + " \"returncode\": 0,\n", + " \"dependencies\": [],\n", + " \"annotations\": {},\n", + " \"exception\": {\n", + " \"occurred\": false\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "# Maybe we want a bit more information about this job\n", + "info = flux.job.result(f, jobid)\n", + "print(json.dumps(info.to_dict(), indent=4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once we create the job, when we submit it in Python we get back a job identifier or jobid. We can then interact with the Flux handle, a connection to Flux, to get information about that job.\n", + "\n", + "### `flux.job.get_job(handle, jobid)`\n", + "\n", + "
\n", + "Description: The `get_job` function makes it easy to get job information like state, status, and timings\n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🎉️ Hooray, we just submitted ƒkLsZEaNK!\n", + "🎉️ Hooray, we just submitted 😄🎪🍜💚🚙📓!\n", + "🎉️ Hooray, we just submitted teacher-alien-grace--lima-alarm-academy!\n", + "🎉️ Hooray, we just submitted 95699806978048!\n", + "🎉️ Hooray, we just submitted 95699806978048!\n", + "🎉️ Hooray, we just submitted 1!\n", + "🎉️ Hooray, we just submitted 0x5709d9000000!\n", + "🎉️ Hooray, we just submitted 0000.5709.d900.0000!\n", + "🎉️ Hooray, we just submitted ƒkLsZEaNK!\n", + "🎉️ Hooray, we just submitted fkLsZEaNK!\n", + "\n", + "{'t_depend': 1754855107.990325, 't_run': 1754855108.0022883, 't_cleanup': 1754855108.0174737, 't_inactive': 1754855108.018468, 'duration': 0.0, 'expiration': 9223372036.0, 'name': 'sleep', 'cwd': '', 'queue': '', 'project': '', 'bank': '', 'ntasks': 1, 'ncores': 1, 'nnodes': 1, 'priority': 16, 'ranks': '3', 'nodelist': 'ip-10-0-20-251', 'success': True, 'result': 'COMPLETED', 'waitstatus': 0, 'id': JobID(95699806978048), 't_submit': 1754855107.9783614, 't_remaining': 0.0, 'state': 'INACTIVE', 'username': 'ubuntu', 'userid': 1000, 'urgency': 16, 'runtime': 0.015185356140136719, 'status': 'COMPLETED', 'returncode': 0, 'dependencies': [], 'annotations': {}, 'exception': {'occurred': False, 'severity': '', 'type': '', 'note': ''}}\n" + ] + } + ], + "source": [ + "# Let's get a flux.job.JobID Python object for our job.\n", + "fid = JobID(jobid.f58)\n", + "\n", + "# Why? We can represent it in many ways!\n", + "print(f\"🎉️ Hooray, we just submitted {fid}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.emoji}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.words}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.real}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.dec}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.denominator}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.hex}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.dothex}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.f58}!\")\n", + "print(f\"🎉️ Hooray, we just submitted {fid.f58plain}!\\n\")\n", + "\n", + "# Here is how to get your info. The first argument is the flux handle, then the jobid\n", + "jobinfo = flux.job.get_job(f, fid)\n", + "print(jobinfo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Look at what came from `.get_job()`. It didn't block, but the job isn't complete yet -- that `t_run` is 0, which makes no sense, because the run time should be around 5 seconds. Notice the status is also 'SCHED', meaning that the job is being scheduled, " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can now run `flux jobs` to see the jobs that we submit from Python." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " JOBID USER NAME ST NTASKS NNODES TIME INFO\n", + "\u001b[01;32m ƒkLsZEaNK ubuntu sleep CD 1 1 0.015s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FZ ubuntu sleep CD 1 1 0.465s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4y8 ubuntu sleep CD 1 1 0.466s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h4 ubuntu sleep CD 1 1 0.467s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yE ubuntu sleep CD 1 1 0.466s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yQ ubuntu sleep CD 1 1 0.466s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h8 ubuntu sleep CD 1 1 0.467s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6R4 ubuntu sleep CD 1 1 0.467s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yL ubuntu sleep CD 1 1 0.466s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FR ubuntu sleep CD 1 1 0.466s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Fc ubuntu sleep CD 1 1 0.465s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Fh ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gr ubuntu sleep CD 1 1 0.467s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FV ubuntu sleep CD 1 1 0.465s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gn ubuntu sleep CD 1 1 0.463s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gz ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FX ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yA ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qt ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4y7 ubuntu sleep CD 1 1 0.463s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h3 ubuntu sleep CD 1 1 0.464s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yF ubuntu sleep CD 1 1 0.463s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yN ubuntu sleep CD 1 1 0.463s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6R2 ubuntu sleep CD 1 1 0.464s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5hA ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gk ubuntu sleep CD 1 1 0.467s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qx ubuntu sleep CD 1 1 0.464s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yJ ubuntu sleep CD 1 1 0.464s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yS ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h7 ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FT ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gy ubuntu sleep CD 1 1 0.467s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gu ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gp ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Fd ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Ff ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Fg ubuntu sleep CD 1 1 0.463s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qy ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yB ubuntu sleep CD 1 1 0.459s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yG ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FU ubuntu sleep CD 1 1 0.463s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gt ubuntu sleep CD 1 1 0.460s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FY ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Fb ubuntu sleep CD 1 1 0.464s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qu ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4y6 ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yT ubuntu sleep CD 1 1 0.465s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h6 ubuntu sleep CD 1 1 0.466s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qq ubuntu sleep CD 1 1 0.458s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gx ubuntu sleep CD 1 1 0.466s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yK ubuntu sleep CD 1 1 0.460s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gq ubuntu sleep CD 1 1 0.467s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h2 ubuntu sleep CD 1 1 0.463s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yP ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gm ubuntu sleep CD 1 1 0.462s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6R3 ubuntu sleep CD 1 1 0.461s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5hB ubuntu sleep CD 1 1 0.459s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gv ubuntu sleep CD 1 1 0.455s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yC ubuntu sleep CD 1 1 0.453s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5hC ubuntu sleep CD 1 1 0.458s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qr ubuntu sleep CD 1 1 0.455s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qz ubuntu sleep CD 1 1 0.455s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qv ubuntu sleep CD 1 1 0.455s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qh ubuntu sleep CD 1 1 0.442s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qm ubuntu sleep CD 1 1 0.442s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qe ubuntu sleep CD 1 1 0.442s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qi ubuntu sleep CD 1 1 0.441s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qn ubuntu sleep CD 1 1 0.441s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qd ubuntu sleep CD 1 1 0.441s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qk ubuntu sleep CD 1 1 0.425s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qc ubuntu sleep CD 1 1 0.426s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qp ubuntu sleep CD 1 1 0.424s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qg ubuntu sleep CD 1 1 0.425s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qa ubuntu sleep CD 1 1 0.410s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QW ubuntu sleep CD 1 1 0.410s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QS ubuntu sleep CD 1 1 0.407s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78L ubuntu sleep CD 1 1 0.407s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78g ubuntu sleep CD 1 1 0.408s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QQ ubuntu sleep CD 1 1 0.408s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QU ubuntu sleep CD 1 1 0.407s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QY ubuntu sleep CD 1 1 0.407s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78K ubuntu sleep CD 1 1 0.409s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78e ubuntu sleep CD 1 1 0.408s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78c ubuntu sleep CD 1 1 0.409s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qz ubuntu sleep CD 1 1 0.410s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78Y ubuntu sleep CD 1 1 0.409s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78U ubuntu sleep CD 1 1 0.410s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH788 ubuntu sleep CD 1 1 0.410s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78Q ubuntu sleep CD 1 1 0.409s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH784 ubuntu sleep CD 1 1 0.409s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QV ubuntu sleep CD 1 1 0.408s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78X ubuntu sleep CD 1 1 0.407s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78C ubuntu sleep CD 1 1 0.409s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78J ubuntu sleep CD 1 1 0.408s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78T ubuntu sleep CD 1 1 0.408s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78G ubuntu sleep CD 1 1 0.409s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QR ubuntu sleep CD 1 1 0.407s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QZ ubuntu sleep CD 1 1 0.406s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78f ubuntu sleep CD 1 1 0.407s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78b ubuntu sleep CD 1 1 0.408s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78P ubuntu sleep CD 1 1 0.408s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7r4 ubuntu sleep CD 1 1 0.411s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78a ubuntu sleep CD 1 1 0.407s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qv ubuntu sleep CD 1 1 0.409s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qr ubuntu sleep CD 1 1 0.412s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78S ubuntu sleep CD 1 1 0.406s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78W ubuntu sleep CD 1 1 0.403s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78A ubuntu sleep CD 1 1 0.395s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78B ubuntu sleep CD 1 1 0.394s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78F ubuntu sleep CD 1 1 0.394s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78N ubuntu sleep CD 1 1 0.393s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78E ubuntu sleep CD 1 1 0.394s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH786 ubuntu sleep CD 1 1 0.394s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7r3 ubuntu sleep CD 1 1 0.394s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH783 ubuntu sleep CD 1 1 0.395s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH787 ubuntu sleep CD 1 1 0.395s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7r2 ubuntu sleep CD 1 1 0.395s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7r6 ubuntu sleep CD 1 1 0.394s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qy ubuntu sleep CD 1 1 0.391s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qn ubuntu sleep CD 1 1 0.390s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qx ubuntu sleep CD 1 1 0.390s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qi ubuntu sleep CD 1 1 0.390s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZY ubuntu sleep CD 1 1 0.389s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZQ ubuntu sleep CD 1 1 0.390s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8Zc ubuntu sleep CD 1 1 0.389s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZP ubuntu sleep CD 1 1 0.389s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZN ubuntu sleep CD 1 1 0.386s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZM ubuntu sleep CD 1 1 0.384s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H9 ubuntu sleep CD 1 1 0.384s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qm ubuntu sleep CD 1 1 0.379s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qu ubuntu sleep CD 1 1 0.379s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qq ubuntu sleep CD 1 1 0.379s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qh ubuntu sleep CD 1 1 0.379s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8Zb ubuntu sleep CD 1 1 0.379s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H6 ubuntu sleep CD 1 1 0.374s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H8 ubuntu sleep CD 1 1 0.379s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H7 ubuntu sleep CD 1 1 0.373s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZX ubuntu sleep CD 1 1 0.372s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Fi ubuntu sleep CD 1 1 0.365s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H5 ubuntu sleep CD 1 1 0.372s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H4 ubuntu sleep CD 1 1 0.372s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FS ubuntu sleep CD 1 1 0.363s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Fe ubuntu sleep CD 1 1 0.362s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4Fa ubuntu sleep CD 1 1 0.362s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn6D4FW ubuntu sleep CD 1 1 0.362s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yR ubuntu sleep CD 1 1 0.362s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yM ubuntu sleep CD 1 1 0.362s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yH ubuntu sleep CD 1 1 0.362s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4yD ubuntu sleep CD 1 1 0.357s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4y9 ubuntu sleep CD 1 1 0.347s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn4j4y5 ubuntu sleep CD 1 1 0.347s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h9 ubuntu sleep CD 1 1 0.347s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h5 ubuntu sleep CD 1 1 0.346s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5h1 ubuntu sleep CD 1 1 0.345s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gw ubuntu sleep CD 1 1 0.344s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gs ubuntu sleep CD 1 1 0.344s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5go ubuntu sleep CD 1 1 0.343s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn3F5gj ubuntu sleep CD 1 1 0.343s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6R1 ubuntu sleep CD 1 1 0.339s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qw ubuntu sleep CD 1 1 0.339s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qs ubuntu sleep CD 1 1 0.338s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qf ubuntu sleep CD 1 1 0.338s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qo ubuntu sleep CD 1 1 0.338s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qj ubuntu sleep CD 1 1 0.338s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qt ubuntu sleep CD 1 1 0.335s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qp ubuntu sleep CD 1 1 0.335s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qk ubuntu sleep CD 1 1 0.335s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QP ubuntu sleep CD 1 1 0.332s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QT ubuntu sleep CD 1 1 0.332s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6Qb ubuntu sleep CD 1 1 0.331s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMn1m6QX ubuntu sleep CD 1 1 0.330s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78d ubuntu sleep CD 1 1 0.330s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78Z ubuntu sleep CD 1 1 0.329s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78M ubuntu sleep CD 1 1 0.325s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78V ubuntu sleep CD 1 1 0.325s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78R ubuntu sleep CD 1 1 0.326s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78H ubuntu sleep CD 1 1 0.326s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH78D ubuntu sleep CD 1 1 0.325s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8Ze ubuntu sleep CD 1 1 0.322s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH789 ubuntu sleep CD 1 1 0.320s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8Za ubuntu sleep CD 1 1 0.321s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZW ubuntu sleep CD 1 1 0.320s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H3 ubuntu sleep CD 1 1 0.320s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H2 ubuntu sleep CD 1 1 0.320s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmuq9H1 ubuntu sleep CD 1 1 0.318s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZR ubuntu sleep CD 1 1 0.313s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmzH785 ubuntu sleep CD 1 1 0.310s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7r5 ubuntu sleep CD 1 1 0.311s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7r1 ubuntu sleep CD 1 1 0.311s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qw ubuntu sleep CD 1 1 0.306s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qs ubuntu sleep CD 1 1 0.305s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qo ubuntu sleep CD 1 1 0.304s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmxo7qj ubuntu sleep CD 1 1 0.303s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8Zd ubuntu sleep CD 1 1 0.304s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZZ ubuntu sleep CD 1 1 0.303s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZV ubuntu sleep CD 1 1 0.302s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZU ubuntu sleep CD 1 1 0.301s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZT ubuntu sleep CD 1 1 0.300s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmwK8ZS ubuntu sleep CD 1 1 0.300s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmtM9zg ubuntu sleep CD 1 1 0.298s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZMmtM9zf ubuntu sleep CD 1 1 0.326s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsboAUK ubuntu sleep CD 1 1 3.025s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsboAUJ ubuntu sleep CD 1 1 3.025s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsaKBBx ubuntu sleep CD 1 1 3.023s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsboAUG ubuntu sleep CD 1 1 3.023s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsaKBBu ubuntu sleep CD 1 1 3.024s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsboAUF ubuntu sleep CD 1 1 3.021s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsaKBBv ubuntu sleep CD 1 1 3.022s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsboAUH ubuntu sleep CD 1 1 3.020s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsaKBBw ubuntu sleep CD 1 1 3.020s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒZDsaKBBy ubuntu sleep CD 1 1 3.019s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒYzPRv5AX ubuntu sleep CD 4 1 5.018s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒYnSsqZsm ubuntu sleep CD 4 1 5.018s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒW6kYN9qh ubuntu sleep CD 1 1 0.022s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒUMuZwaqD ubuntu sleep CD 1 1 0.015s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒUBoc5SgP ubuntu sleep CD 1 1 0.015s ip-10-0-20-251\n", + "\u001b[0;0m\u001b[01;32m ƒSk9Be7Vh ubuntu sleep CD 1 1 0.425s ip-10-0-20-251\n", + "\u001b[0;0m" + ] + } + ], + "source": [ + "!flux jobs -a --name=\"sleep\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Under the hood, the `Jobspec` class is creating a YAML document that ultimately gets serialized as JSON and sent to Flux for ingestion, validation, queueing, scheduling, and eventually execution. We can dump the raw JSON jobspec that is submitted, where we can see the exact resources requested and the task set to be executed on those resources." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"resources\": [\n", + " {\n", + " \"type\": \"node\",\n", + " \"count\": 1,\n", + " \"with\": [\n", + " {\n", + " \"type\": \"slot\",\n", + " \"count\": 1,\n", + " \"with\": [\n", + " {\n", + " \"type\": \"core\",\n", + " \"count\": 1\n", + " }\n", + " ],\n", + " \"label\": \"task\"\n", + " }\n", + " ]\n", + " }\n", + " ],\n", + " \"tasks\": [\n", + " {\n", + " \"command\": [\n", + " \"sleep\",\n", + " \"0\"\n", + " ],\n", + " \"slot\": \"task\",\n", + " \"count\": {\n", + " \"per_slot\": 1\n", + " }\n", + " }\n", + " ],\n", + " \"attributes\": {\n", + " \"system\": {\n", + " \"duration\": 0,\n", + " \"environment\": {\n", + " \"TMPDIR\": \"/tmp/\"\n", + " }\n", + " }\n", + " },\n", + " \"version\": 1\n", + "}\n" + ] + } + ], + "source": [ + "print(jobspec.dumps(indent=4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Playing with the Synchronous job submission API\n", + "\n", + "One slight hiccup to creating jobspecs in Python is that some attributes of a jobspec are set in the _initializer_ (`.from_command` or another method) while others are specified by methods to the jobspec itself. Below is an example, and here's a brief table for reference:\n", + "\n", + "| Operation | CLI | Python |\n", + "|------------------------------------------------|---------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|\n", + "| Setting nodes, tasks, and cores | -N _n_, -n _n_, and -c _n_, respectively | in the initializer: num_nodes, num_tasks, num_cores |\n", + "| Setting node exclusivity | `-x` or enforced by policy | in the initializer: exclusive=True |\n", + "| Setting time limits | `-t MINUTES\\|FSD` | `jobspec.duration=[seconds\\|FSD]` |\n", + "| Set working directory | Automatically set to current directory or `--cwd=` | `jobspec.cwd=[string of path]` |\n", + "| Set environment | Default set to current environment, or `--env=[modifier]` | `jobspec.environment=[dict]` |\n", + "| Setting stdout and stderr | `--output [OUT] --error [ERR]` or your terminal by default for alloc/run | `jobspec.stdout = ` or `jobspec.stderr = ` |\n", + "| Setting system attributes | `-S KEY[=VAL]` | `jobspec.setattr(key, val)` |\n", + "| Set shell attributes | `-o KEY[=VAL]` | `jobspec.setattr_shell_option(key, val)` |\n", + "| Modifying configuration of a subinstance | `--conf` for batch/alloc | in the initializer, requires `.from_batch_command` or `.from_nest_command` |\n", + "\n", + "The example below is taken from the [El Cap documentation maintained by Ramesh Pankajakshan](https://hpc.llnl.gov/documentation/user-guides/using-el-capitan-systems/introduction-and-quickstart/flux)." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1754855213.80323: finish {'status': 0}\n" + ] + } + ], + "source": [ + "# Create a Flux handle (discovers the FLUX_URI in the environment)\n", + "handle = flux.Flux()\n", + "jobspec = JobspecV1.from_command(\n", + " command=[\"sleep\", \"5\"], num_tasks=4, num_nodes=1,\n", + ")\n", + "jobspec.cwd = os.getcwd()\n", + "jobspec.exclusive=1\n", + "jobspec.duration=\"5m\"\n", + "jobspec.environment = {\"TMPDIR\": \"/tmp/\"}\n", + "jobspec.stdout=\"PYEXAMPLE.{{id}}.out\"\n", + "jobspec.stderr=\"PYEXAMPLE.{{id}}.err\"\n", + "id = flux.job.submit(handle, jobspec)\n", + "\n", + "info = flux.job.event_wait(handle, id, \"finish\")\n", + "print(info)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `FluxExecutor`\n", + "\n", + "
\n", + "Description: The `FluxExector` class makes it easy to do bulk submission in Python\n", + "
\n", + "\n", + "We can use the FluxExecutor class to submit large numbers of jobs to Flux. This method resembles python's `concurrent.futures` interface." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I'm all done\n" + ] + } + ], + "source": [ + "from flux.job import FluxExecutor\n", + "\n", + "with FluxExecutor() as executor:\n", + " jobspec = JobspecV1.from_command([\"sleep\", \"3\"])\n", + " jobspec.environment = {\"TMPDIR\": \"/tmp/\"}\n", + " futures = [executor.submit(jobspec) for _ in range(10)]\n", + " # wait for the jobid for each job, as a proxy for the job being submitted\n", + "\n", + "# all jobs submitted - print timings\n", + "print(\"I'm all done\")" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bulksubmit_executor: submitted 200 jobs in 0.18s. 1118.31job/s\n", + "bulksubmit_executor: First job finished in about 0.381s\n", + "|██████████████████████████████████████████████████████████| 100.0% (310.2 job/s)\n", + "bulksubmit_executor: Ran 200 jobs in 0.8s. 249.6 job/s\n" + ] + } + ], + "source": [ + "# Submit the FluxExecutor based script.\n", + "!flux python bulksubmit_executor.py -n200 /bin/sleep 0" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "0\n", + "0\n", + "0\n", + "0\n" + ] + } + ], + "source": [ + "# Here is how to use concurrent futures\n", + "import concurrent.futures\n", + "\n", + "jobspec = flux.job.JobspecV1.from_command([\"/bin/true\"])\n", + "jobspec.environment = {\"TMPDIR\": \"/tmp/\"}\n", + "with flux.job.FluxExecutor() as executor:\n", + " futures = [executor.submit(jobspec) for _ in range(5)]\n", + " for f in concurrent.futures.as_completed(futures):\n", + " print(f.result())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `flux.event_watch` \n", + "\n", + "
\n", + "Description: The `flux.job.event_watch` function makes it easy to watch events for a job\n", + "
\n", + "\n", + "If you want to get the output of a job (or more generally, stream events) you can do that as follows. Let's submit a quick job, and then look at the output.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ƒabUbzYD5\n", + "1754853825.08733: header {'version': 1, 'encoding': {'stdout': 'UTF-8', 'stderr': 'UTF-8'}, 'count': {'stdout': 1, 'stderr': 1}, 'options': {}}\n", + "1754853825.09276: data {'stream': 'stderr', 'rank': '0', 'eof': True}\n", + "1754853825.09278: data {'stream': 'stdout', 'rank': '0', 'data': 'I have two Dobermans, Rolex and timex. They are watch dogs.\\n'}\n", + "1754853825.09279: data {'stream': 'stdout', 'rank': '0', 'eof': True}\n" + ] + } + ], + "source": [ + "# Create the Jobspec from a command to run a python script, and specify resources\n", + "f = flux.Flux()\n", + "\n", + "joke = \"I have two Dobermans, Rolex and Timex. They are watch dogs.\"\n", + "jobspec = flux.job.JobspecV1.from_command(command=[\"echo\", joke], num_tasks=1, num_nodes=1, cores_per_task=1)\n", + "jobspec.environment = {\"TMPDIR\": \"/tmp/\"}\n", + "jobid = flux.job.submit(f, jobspec, waitable=True)\n", + "\n", + "# Wait until the job finishes\n", + "flux.job.wait(f, jobid)\n", + "print(jobid)\n", + "\n", + "# Wait on an event to complete and then print its associated data\n", + "for line in flux.job.event_watch(f, jobid, \"guest.output\"):\n", + " print(line)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `flux.job.JobOutputWatch`\n", + "\n", + "
\n", + "Description: Synchronously or asynchronously watch for job output with asynchronous job submission\n", + "
\n", + "\n", + "#### Watch for job output with a Sychronous job submission" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['stdout', 'The inventor of the throat lozenges passed away. There was no coffin at his funeral.']\n" + ] + } + ], + "source": [ + "# Create the Jobspec from a command to run a python script, and specify resources\n", + "f = flux.Flux()\n", + "\n", + "joke = \"The inventor of the throat lozenges passed away. There was no coffin at his funeral.\"\n", + "jobspec = JobspecV1.from_command(command=[\"echo\", joke], num_tasks=4, num_nodes=1)\n", + "jobspec.environment = {\"TMPDIR\": \"/tmp/\"}\n", + "jobid = flux.job.submit(f, jobspec)\n", + "\n", + "t = flux.job.output.JobOutputWatchLines(f, jobid).getline()\n", + "print(t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Watch for job output with asynchronous job submission" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ƒnrM71A1V: stdout\n", + "ƒnrM71A1V: Wingardium Leviosa! ✨\n", + "ƒnrM71A1W: stdout\n", + "ƒnrM71A1W: Wingardium Leviosa! ✨\n", + "ƒnrM71A1X: stdout\n", + "ƒnrM71A1X: Wingardium Leviosa! ✨\n" + ] + } + ], + "source": [ + "import concurrent.futures\n", + "import flux.job\n", + "\n", + "## Define something we want to happen when the futures are fulfilled\n", + "def print_output(fut):\n", + " t = flux.job.output.JobOutputWatchLines(f, fut.jobid()).getline()\n", + " for line in t:\n", + " print(f'{fut.jobid()}: {line}')\n", + "\n", + "## Submit all of the futures using the executor.\n", + "jobspec = flux.job.JobspecV1.from_command([\"echo\", \"Wingardium Leviosa! ✨\"])\n", + "jobspec.environment = {\"TMPDIR\": \"/tmp/\"}\n", + "\n", + "with flux.job.FluxExecutor() as executor:\n", + " futures = [executor.submit(jobspec) for _ in range(3)]\n", + " for future in futures:\n", + " future.add_done_callback(print_output)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `flux.job.job_list`\n", + "\n", + "
\n", + "Description: Get an entire listing of jobs via remote procedure call (rpc)\n", + "
\n", + "\n", + "\n", + "Finally, it can be really helpful to get an entire listing of jobs. You can do that as follows. Note that the `job_list` is creating a remote procedure call (rpc) and we call `get` to retrieve the output." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'jobs': [{'id': 101237848539138,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855438.071756,\n", + " 't_depend': 1754855438.0827703,\n", + " 't_run': 1754855438.0959415,\n", + " 't_cleanup': 1754855438.1109397,\n", + " 't_inactive': 1754855438.1127431,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 101237848539136,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855438.0714943,\n", + " 't_depend': 1754855438.0826428,\n", + " 't_run': 1754855438.0956306,\n", + " 't_cleanup': 1754855438.1106298,\n", + " 't_inactive': 1754855438.1125581,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 101237848539137,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855438.0716355,\n", + " 't_depend': 1754855438.082703,\n", + " 't_run': 1754855438.0958874,\n", + " 't_cleanup': 1754855438.1103518,\n", + " 't_inactive': 1754855438.1120129,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 101163156373504,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855433.6192713,\n", + " 't_depend': 1754855433.6312466,\n", + " 't_run': 1754855433.6432583,\n", + " 't_cleanup': 1754855433.6607547,\n", + " 't_inactive': 1754855433.6617224,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 4,\n", + " 'ncores': 4,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 99408930668544,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855329.059233,\n", + " 't_depend': 1754855329.0704498,\n", + " 't_run': 1754855329.0825646,\n", + " 't_cleanup': 1754855329.1000926,\n", + " 't_inactive': 1754855329.1010785,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 4,\n", + " 'ncores': 4,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98143509151748,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855253.6345878,\n", + " 't_depend': 1754855253.6461256,\n", + " 't_run': 1754855253.660246,\n", + " 't_cleanup': 1754855253.6793222,\n", + " 't_inactive': 1754855253.6816137,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98143509151747,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855253.6345646,\n", + " 't_depend': 1754855253.6460786,\n", + " 't_run': 1754855253.6601963,\n", + " 't_cleanup': 1754855253.6790485,\n", + " 't_inactive': 1754855253.681434,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98143509151746,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855253.6345265,\n", + " 't_depend': 1754855253.6460218,\n", + " 't_run': 1754855253.660003,\n", + " 't_cleanup': 1754855253.6789882,\n", + " 't_inactive': 1754855253.6813636,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98143509151744,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855253.6344764,\n", + " 't_depend': 1754855253.6459258,\n", + " 't_run': 1754855253.65934,\n", + " 't_cleanup': 1754855253.6786776,\n", + " 't_inactive': 1754855253.6808107,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98143509151745,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855253.634511,\n", + " 't_depend': 1754855253.6459749,\n", + " 't_run': 1754855253.659956,\n", + " 't_cleanup': 1754855253.6783955,\n", + " 't_inactive': 1754855253.6803267,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171341,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8090084,\n", + " 't_depend': 1754855252.8513622,\n", + " 't_run': 1754855252.927338,\n", + " 't_cleanup': 1754855253.3222594,\n", + " 't_inactive': 1754855253.3544333,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948564,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.810059,\n", + " 't_depend': 1754855252.852415,\n", + " 't_run': 1754855252.9282265,\n", + " 't_cleanup': 1754855253.322006,\n", + " 't_inactive': 1754855253.3543642,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948562,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8099704,\n", + " 't_depend': 1754855252.8523123,\n", + " 't_run': 1754855252.9281487,\n", + " 't_cleanup': 1754855253.3218975,\n", + " 't_inactive': 1754855253.3542945,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948559,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8098493,\n", + " 't_depend': 1754855252.8521597,\n", + " 't_run': 1754855252.9280121,\n", + " 't_cleanup': 1754855253.320927,\n", + " 't_inactive': 1754855253.3542242,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948563,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8100061,\n", + " 't_depend': 1754855252.8523674,\n", + " 't_run': 1754855252.9281883,\n", + " 't_cleanup': 1754855253.3216183,\n", + " 't_inactive': 1754855253.3541458,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948560,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8098881,\n", + " 't_depend': 1754855252.8522198,\n", + " 't_run': 1754855252.9280505,\n", + " 't_cleanup': 1754855253.3212395,\n", + " 't_inactive': 1754855253.3540676,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948554,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8095927,\n", + " 't_depend': 1754855252.8519268,\n", + " 't_run': 1754855252.9278166,\n", + " 't_cleanup': 1754855253.3208404,\n", + " 't_inactive': 1754855253.3539984,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948558,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8097653,\n", + " 't_depend': 1754855252.852115,\n", + " 't_run': 1754855252.927973,\n", + " 't_cleanup': 1754855253.3207455,\n", + " 't_inactive': 1754855253.35393,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171330,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8084073,\n", + " 't_depend': 1754855252.8508174,\n", + " 't_run': 1754855252.9268658,\n", + " 't_cleanup': 1754855253.3207645,\n", + " 't_inactive': 1754855253.3538585,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171342,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8090484,\n", + " 't_depend': 1754855252.8514109,\n", + " 't_run': 1754855252.9273791,\n", + " 't_cleanup': 1754855253.3199394,\n", + " 't_inactive': 1754855253.3537881,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948556,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8096888,\n", + " 't_depend': 1754855252.8520167,\n", + " 't_run': 1754855252.9278948,\n", + " 't_cleanup': 1754855253.3208215,\n", + " 't_inactive': 1754855253.35372,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171336,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8087206,\n", + " 't_depend': 1754855252.8511162,\n", + " 't_run': 1754855252.9271317,\n", + " 't_cleanup': 1754855253.3207831,\n", + " 't_inactive': 1754855253.3536408,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948557,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8097198,\n", + " 't_depend': 1754855252.8520606,\n", + " 't_run': 1754855252.9279342,\n", + " 't_cleanup': 1754855253.3208022,\n", + " 't_inactive': 1754855253.353571,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948553,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8095179,\n", + " 't_depend': 1754855252.8518827,\n", + " 't_run': 1754855252.927778,\n", + " 't_cleanup': 1754855253.3204534,\n", + " 't_inactive': 1754855253.3535023,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948555,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8096404,\n", + " 't_depend': 1754855252.8519716,\n", + " 't_run': 1754855252.9278562,\n", + " 't_cleanup': 1754855253.319474,\n", + " 't_inactive': 1754855253.35343,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948551,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8094366,\n", + " 't_depend': 1754855252.8517907,\n", + " 't_run': 1754855252.9276981,\n", + " 't_cleanup': 1754855253.319239,\n", + " 't_inactive': 1754855253.3533547,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171333,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8085403,\n", + " 't_depend': 1754855252.8509588,\n", + " 't_run': 1754855252.9269922,\n", + " 't_cleanup': 1754855253.3197312,\n", + " 't_inactive': 1754855253.353283,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948552,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8094866,\n", + " 't_depend': 1754855252.851835,\n", + " 't_run': 1754855252.9277377,\n", + " 't_cleanup': 1754855253.3198478,\n", + " 't_inactive': 1754855253.3532095,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171332,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8084738,\n", + " 't_depend': 1754855252.8509119,\n", + " 't_run': 1754855252.9269507,\n", + " 't_cleanup': 1754855253.3198292,\n", + " 't_inactive': 1754855253.3531342,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948550,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8094018,\n", + " 't_depend': 1754855252.8517435,\n", + " 't_run': 1754855252.9276588,\n", + " 't_cleanup': 1754855253.3197129,\n", + " 't_inactive': 1754855253.3530467,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948546,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8092358,\n", + " 't_depend': 1754855252.8515499,\n", + " 't_run': 1754855252.9275012,\n", + " 't_cleanup': 1754855253.318416,\n", + " 't_inactive': 1754855253.35297,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948547,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.809272,\n", + " 't_depend': 1754855252.851594,\n", + " 't_run': 1754855252.927541,\n", + " 't_cleanup': 1754855253.317373,\n", + " 't_inactive': 1754855253.3529015,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948548,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8093126,\n", + " 't_depend': 1754855252.8516397,\n", + " 't_run': 1754855252.92758,\n", + " 't_cleanup': 1754855253.3163702,\n", + " 't_inactive': 1754855253.3528337,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948544,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8091006,\n", + " 't_depend': 1754855252.8514562,\n", + " 't_run': 1754855252.9274194,\n", + " 't_cleanup': 1754855253.3160744,\n", + " 't_inactive': 1754855253.3527672,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948561,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8099291,\n", + " 't_depend': 1754855252.8522666,\n", + " 't_run': 1754855252.928108,\n", + " 't_cleanup': 1754855253.321709,\n", + " 't_inactive': 1754855253.3526988,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171337,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8087633,\n", + " 't_depend': 1754855252.8511677,\n", + " 't_run': 1754855252.9271743,\n", + " 't_cleanup': 1754855253.3161633,\n", + " 't_inactive': 1754855253.3526273,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171338,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8088846,\n", + " 't_depend': 1754855252.8512182,\n", + " 't_run': 1754855252.9272156,\n", + " 't_cleanup': 1754855253.315454,\n", + " 't_inactive': 1754855253.35256,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948545,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8091528,\n", + " 't_depend': 1754855252.8515007,\n", + " 't_run': 1754855252.9274614,\n", + " 't_cleanup': 1754855253.3155994,\n", + " 't_inactive': 1754855253.3524933,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129667948549,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8093534,\n", + " 't_depend': 1754855252.8516963,\n", + " 't_run': 1754855252.9276195,\n", + " 't_cleanup': 1754855253.3155348,\n", + " 't_inactive': 1754855253.3524265,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171340,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8089716,\n", + " 't_depend': 1754855252.851316,\n", + " 't_run': 1754855252.9272974,\n", + " 't_cleanup': 1754855253.315657,\n", + " 't_inactive': 1754855253.3523579,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171335,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8086753,\n", + " 't_depend': 1754855252.8510544,\n", + " 't_run': 1754855252.92709,\n", + " 't_cleanup': 1754855253.316255,\n", + " 't_inactive': 1754855253.3522894,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171339,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8089006,\n", + " 't_depend': 1754855252.8512695,\n", + " 't_run': 1754855252.9272559,\n", + " 't_cleanup': 1754855253.3135066,\n", + " 't_inactive': 1754855253.3522203,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129634394115,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8076751,\n", + " 't_depend': 1754855252.8505247,\n", + " 't_run': 1754855252.9266055,\n", + " 't_cleanup': 1754855253.3137717,\n", + " 't_inactive': 1754855253.3521519,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171331,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.808419,\n", + " 't_depend': 1754855252.8508644,\n", + " 't_run': 1754855252.9269078,\n", + " 't_cleanup': 1754855253.3138292,\n", + " 't_inactive': 1754855253.3520796,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129634394116,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.807806,\n", + " 't_depend': 1754855252.850574,\n", + " 't_run': 1754855252.926649,\n", + " 't_cleanup': 1754855253.313933,\n", + " 't_inactive': 1754855253.3520029,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171329,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8083937,\n", + " 't_depend': 1754855252.8507695,\n", + " 't_run': 1754855252.926821,\n", + " 't_cleanup': 1754855253.3144064,\n", + " 't_inactive': 1754855253.3519359,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129634394117,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8078816,\n", + " 't_depend': 1754855252.8506207,\n", + " 't_run': 1754855252.9266922,\n", + " 't_cleanup': 1754855253.3118775,\n", + " 't_inactive': 1754855253.3518677,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129634394118,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8083317,\n", + " 't_depend': 1754855252.8506749,\n", + " 't_run': 1754855252.9267352,\n", + " 't_cleanup': 1754855253.3122923,\n", + " 't_inactive': 1754855253.3517997,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171334,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8085845,\n", + " 't_depend': 1754855252.851008,\n", + " 't_run': 1754855252.927034,\n", + " 't_cleanup': 1754855253.3117657,\n", + " 't_inactive': 1754855253.3517303,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129651171328,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8083746,\n", + " 't_depend': 1754855252.8507218,\n", + " 't_run': 1754855252.9267778,\n", + " 't_cleanup': 1754855253.3112533,\n", + " 't_inactive': 1754855253.3516617,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129634394114,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8075647,\n", + " 't_depend': 1754855252.8504753,\n", + " 't_run': 1754855252.9265609,\n", + " 't_cleanup': 1754855253.3111897,\n", + " 't_inactive': 1754855253.3515904,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129634394113,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8074203,\n", + " 't_depend': 1754855252.8504188,\n", + " 't_run': 1754855252.9265103,\n", + " 't_cleanup': 1754855253.3103232,\n", + " 't_inactive': 1754855253.3515086,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129634394112,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.807334,\n", + " 't_depend': 1754855252.8503683,\n", + " 't_run': 1754855252.926322,\n", + " 't_cleanup': 1754855253.2955942,\n", + " 't_inactive': 1754855253.3450634,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502982,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8114223,\n", + " 't_depend': 1754855252.8536422,\n", + " 't_run': 1754855252.9292622,\n", + " 't_cleanup': 1754855253.267521,\n", + " 't_inactive': 1754855253.320702,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280201,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.812958,\n", + " 't_depend': 1754855252.8546503,\n", + " 't_run': 1754855252.930121,\n", + " 't_cleanup': 1754855253.2676344,\n", + " 't_inactive': 1754855253.3206353,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280200,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8128479,\n", + " 't_depend': 1754855252.8545997,\n", + " 't_run': 1754855252.9300802,\n", + " 't_cleanup': 1754855253.2673953,\n", + " 't_inactive': 1754855253.320568,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502992,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8119476,\n", + " 't_depend': 1754855252.8541303,\n", + " 't_run': 1754855252.9296732,\n", + " 't_cleanup': 1754855253.2674663,\n", + " 't_inactive': 1754855253.3204997,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280199,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8127763,\n", + " 't_depend': 1754855252.8545547,\n", + " 't_run': 1754855252.9300318,\n", + " 't_cleanup': 1754855253.2672484,\n", + " 't_inactive': 1754855253.3204105,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280198,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.812694,\n", + " 't_depend': 1754855252.8545103,\n", + " 't_run': 1754855252.9299908,\n", + " 't_cleanup': 1754855253.2738047,\n", + " 't_inactive': 1754855253.3203433,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280196,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8125057,\n", + " 't_depend': 1754855252.854416,\n", + " 't_run': 1754855252.929911,\n", + " 't_cleanup': 1754855253.2729723,\n", + " 't_inactive': 1754855253.3202734,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280197,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8125832,\n", + " 't_depend': 1754855252.8544629,\n", + " 't_run': 1754855252.9299514,\n", + " 't_cleanup': 1754855253.2732325,\n", + " 't_inactive': 1754855253.3202066,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280193,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8122263,\n", + " 't_depend': 1754855252.8542714,\n", + " 't_run': 1754855252.9297924,\n", + " 't_cleanup': 1754855253.272016,\n", + " 't_inactive': 1754855253.3201358,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502983,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8114681,\n", + " 't_depend': 1754855252.8536975,\n", + " 't_run': 1754855252.9293044,\n", + " 't_cleanup': 1754855253.273431,\n", + " 't_inactive': 1754855253.3200524,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280192,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8121212,\n", + " 't_depend': 1754855252.8542228,\n", + " 't_run': 1754855252.9297523,\n", + " 't_cleanup': 1754855253.2716424,\n", + " 't_inactive': 1754855253.3199837,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280195,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8123956,\n", + " 't_depend': 1754855252.8543684,\n", + " 't_run': 1754855252.929871,\n", + " 't_cleanup': 1754855253.2726312,\n", + " 't_inactive': 1754855253.319896,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502993,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8120284,\n", + " 't_depend': 1754855252.8541799,\n", + " 't_run': 1754855252.9297132,\n", + " 't_cleanup': 1754855253.2718217,\n", + " 't_inactive': 1754855253.3197837,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129718280194,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8122978,\n", + " 't_depend': 1754855252.8543167,\n", + " 't_run': 1754855252.929831,\n", + " 't_cleanup': 1754855253.2722397,\n", + " 't_inactive': 1754855253.31967,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725778,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8110454,\n", + " 't_depend': 1754855252.8533247,\n", + " 't_run': 1754855252.928976,\n", + " 't_cleanup': 1754855253.2711017,\n", + " 't_inactive': 1754855253.3195963,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502990,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8117938,\n", + " 't_depend': 1754855252.854031,\n", + " 't_run': 1754855252.9295874,\n", + " 't_cleanup': 1754855253.269862,\n", + " 't_inactive': 1754855253.319521,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502991,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8118634,\n", + " 't_depend': 1754855252.8540828,\n", + " 't_run': 1754855252.9296265,\n", + " 't_cleanup': 1754855253.2709696,\n", + " 't_inactive': 1754855253.3194284,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502988,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.811718,\n", + " 't_depend': 1754855252.8539379,\n", + " 't_run': 1754855252.9295068,\n", + " 't_cleanup': 1754855253.2702947,\n", + " 't_inactive': 1754855253.3193588,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502987,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8116379,\n", + " 't_depend': 1754855252.85389,\n", + " 't_run': 1754855252.9294672,\n", + " 't_cleanup': 1754855253.2705858,\n", + " 't_inactive': 1754855253.3192873,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502989,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8117595,\n", + " 't_depend': 1754855252.8539848,\n", + " 't_run': 1754855252.9295473,\n", + " 't_cleanup': 1754855253.2692573,\n", + " 't_inactive': 1754855253.3191905,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502984,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8115096,\n", + " 't_depend': 1754855252.8537416,\n", + " 't_run': 1754855252.9293451,\n", + " 't_cleanup': 1754855253.2696328,\n", + " 't_inactive': 1754855253.3191211,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502985,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.811553,\n", + " 't_depend': 1754855252.853788,\n", + " 't_run': 1754855252.9293869,\n", + " 't_cleanup': 1754855253.2675786,\n", + " 't_inactive': 1754855253.319039,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725775,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8108895,\n", + " 't_depend': 1754855252.8531895,\n", + " 't_run': 1754855252.9288538,\n", + " 't_cleanup': 1754855253.264321,\n", + " 't_inactive': 1754855253.3189697,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502986,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.811598,\n", + " 't_depend': 1754855252.8538356,\n", + " 't_run': 1754855252.929427,\n", + " 't_cleanup': 1754855253.2677245,\n", + " 't_inactive': 1754855253.3188992,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725773,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8107946,\n", + " 't_depend': 1754855252.8530962,\n", + " 't_run': 1754855252.9287715,\n", + " 't_cleanup': 1754855253.2694075,\n", + " 't_inactive': 1754855253.318826,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502980,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8113117,\n", + " 't_depend': 1754855252.8535511,\n", + " 't_run': 1754855252.9291809,\n", + " 't_cleanup': 1754855253.2646337,\n", + " 't_inactive': 1754855253.3187544,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725765,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8103704,\n", + " 't_depend': 1754855252.8527193,\n", + " 't_run': 1754855252.928458,\n", + " 't_cleanup': 1754855253.262809,\n", + " 't_inactive': 1754855253.3186848,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502981,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8113499,\n", + " 't_depend': 1754855252.8535967,\n", + " 't_run': 1754855252.9292202,\n", + " 't_cleanup': 1754855253.2645571,\n", + " 't_inactive': 1754855253.318612,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502979,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.811265,\n", + " 't_depend': 1754855252.8535068,\n", + " 't_run': 1754855252.929143,\n", + " 't_cleanup': 1754855253.2647676,\n", + " 't_inactive': 1754855253.3185413,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725776,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8109324,\n", + " 't_depend': 1754855252.8532338,\n", + " 't_run': 1754855252.9288957,\n", + " 't_cleanup': 1754855253.2644851,\n", + " 't_inactive': 1754855253.3184679,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725772,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8107164,\n", + " 't_depend': 1754855252.8530424,\n", + " 't_run': 1754855252.9287317,\n", + " 't_cleanup': 1754855253.264702,\n", + " 't_inactive': 1754855253.318367,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725761,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8101869,\n", + " 't_depend': 1754855252.8525248,\n", + " 't_run': 1754855252.928304,\n", + " 't_cleanup': 1754855253.2626383,\n", + " 't_inactive': 1754855253.3181567,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502978,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8112185,\n", + " 't_depend': 1754855252.85346,\n", + " 't_run': 1754855252.9291027,\n", + " 't_cleanup': 1754855253.2626905,\n", + " 't_inactive': 1754855253.3180673,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502977,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8111389,\n", + " 't_depend': 1754855252.8534157,\n", + " 't_run': 1754855252.9290545,\n", + " 't_cleanup': 1754855253.2622645,\n", + " 't_inactive': 1754855253.3179872,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129701502976,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8111045,\n", + " 't_depend': 1754855252.8533704,\n", + " 't_run': 1754855252.9290156,\n", + " 't_cleanup': 1754855253.2620025,\n", + " 't_inactive': 1754855253.3179038,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725777,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8110025,\n", + " 't_depend': 1754855252.8532798,\n", + " 't_run': 1754855252.928937,\n", + " 't_cleanup': 1754855253.2615845,\n", + " 't_inactive': 1754855253.3178196,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725774,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8108444,\n", + " 't_depend': 1754855252.8531435,\n", + " 't_run': 1754855252.9288127,\n", + " 't_cleanup': 1754855253.2614386,\n", + " 't_inactive': 1754855253.3177388,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725766,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8104172,\n", + " 't_depend': 1754855252.85277,\n", + " 't_run': 1754855252.928498,\n", + " 't_cleanup': 1754855253.261225,\n", + " 't_inactive': 1754855253.3176475,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725770,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8106282,\n", + " 't_depend': 1754855252.8529527,\n", + " 't_run': 1754855252.9286537,\n", + " 't_cleanup': 1754855253.2613065,\n", + " 't_inactive': 1754855253.3175638,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725769,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8105881,\n", + " 't_depend': 1754855252.8529067,\n", + " 't_run': 1754855252.9286153,\n", + " 't_cleanup': 1754855253.2597504,\n", + " 't_inactive': 1754855253.3174665,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725771,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.810679,\n", + " 't_depend': 1754855252.852998,\n", + " 't_run': 1754855252.9286916,\n", + " 't_cleanup': 1754855253.2331526,\n", + " 't_inactive': 1754855253.3089502,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725768,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8105464,\n", + " 't_depend': 1754855252.8528626,\n", + " 't_run': 1754855252.9285762,\n", + " 't_cleanup': 1754855253.232665,\n", + " 't_inactive': 1754855253.308883,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725764,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8103294,\n", + " 't_depend': 1754855252.8526704,\n", + " 't_run': 1754855252.9284189,\n", + " 't_cleanup': 1754855253.2328906,\n", + " 't_inactive': 1754855253.3088129,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725767,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8105106,\n", + " 't_depend': 1754855252.8528166,\n", + " 't_run': 1754855252.9285371,\n", + " 't_cleanup': 1754855253.233053,\n", + " 't_inactive': 1754855253.3087413,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725760,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8101113,\n", + " 't_depend': 1754855252.8524618,\n", + " 't_run': 1754855252.9282658,\n", + " 't_cleanup': 1754855253.232765,\n", + " 't_inactive': 1754855253.3086662,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725763,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8102858,\n", + " 't_depend': 1754855252.8526268,\n", + " 't_run': 1754855252.9283812,\n", + " 't_cleanup': 1754855253.2308354,\n", + " 't_inactive': 1754855253.3082693,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98129684725762,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.8102376,\n", + " 't_depend': 1754855252.8525748,\n", + " 't_run': 1754855252.9283428,\n", + " 't_cleanup': 1754855253.2322786,\n", + " 't_inactive': 1754855253.3081706,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221894,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7186248,\n", + " 't_depend': 1754855252.7351725,\n", + " 't_run': 1754855252.8029745,\n", + " 't_cleanup': 1754855253.1400247,\n", + " 't_inactive': 1754855253.2551045,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221892,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7185326,\n", + " 't_depend': 1754855252.7350554,\n", + " 't_run': 1754855252.8028982,\n", + " 't_cleanup': 1754855253.140449,\n", + " 't_inactive': 1754855253.2550082,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221896,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7187183,\n", + " 't_depend': 1754855252.73527,\n", + " 't_run': 1754855252.8030505,\n", + " 't_cleanup': 1754855253.1399472,\n", + " 't_inactive': 1754855253.2549117,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221895,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7186718,\n", + " 't_depend': 1754855252.7352211,\n", + " 't_run': 1754855252.8030124,\n", + " 't_cleanup': 1754855253.1391377,\n", + " 't_inactive': 1754855253.2548304,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221891,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7184238,\n", + " 't_depend': 1754855252.7350082,\n", + " 't_run': 1754855252.8028593,\n", + " 't_cleanup': 1754855253.138547,\n", + " 't_inactive': 1754855253.2547412,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221893,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7185793,\n", + " 't_depend': 1754855252.7351184,\n", + " 't_run': 1754855252.802936,\n", + " 't_cleanup': 1754855253.140565,\n", + " 't_inactive': 1754855253.2546554,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221888,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7181618,\n", + " 't_depend': 1754855252.7348657,\n", + " 't_run': 1754855252.802745,\n", + " 't_cleanup': 1754855253.1403623,\n", + " 't_inactive': 1754855253.2545733,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330755,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7224038,\n", + " 't_depend': 1754855252.737609,\n", + " 't_run': 1754855252.8049293,\n", + " 't_cleanup': 1754855253.1389444,\n", + " 't_inactive': 1754855253.254485,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330759,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.722779,\n", + " 't_depend': 1754855252.7378273,\n", + " 't_run': 1754855252.805095,\n", + " 't_cleanup': 1754855253.1395884,\n", + " 't_inactive': 1754855253.2542405,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221890,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7183535,\n", + " 't_depend': 1754855252.7349615,\n", + " 't_run': 1754855252.8028212,\n", + " 't_cleanup': 1754855253.140276,\n", + " 't_inactive': 1754855253.2541666,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553546,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7217748,\n", + " 't_depend': 1754855252.7372549,\n", + " 't_run': 1754855252.8046315,\n", + " 't_cleanup': 1754855253.1388626,\n", + " 't_inactive': 1754855253.254061,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330756,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7224982,\n", + " 't_depend': 1754855252.7376678,\n", + " 't_run': 1754855252.8049676,\n", + " 't_cleanup': 1754855253.139225,\n", + " 't_inactive': 1754855253.2539802,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553543,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7215369,\n", + " 't_depend': 1754855252.7371075,\n", + " 't_run': 1754855252.8045154,\n", + " 't_cleanup': 1754855253.1398537,\n", + " 't_inactive': 1754855253.2538874,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221889,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.718258,\n", + " 't_depend': 1754855252.7349145,\n", + " 't_run': 1754855252.802783,\n", + " 't_cleanup': 1754855253.140109,\n", + " 't_inactive': 1754855253.2537584,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444680,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7180068,\n", + " 't_depend': 1754855252.734762,\n", + " 't_run': 1754855252.8026676,\n", + " 't_cleanup': 1754855253.1397712,\n", + " 't_inactive': 1754855253.2536678,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444677,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7177725,\n", + " 't_depend': 1754855252.7346127,\n", + " 't_run': 1754855252.8025532,\n", + " 't_cleanup': 1754855253.132899,\n", + " 't_inactive': 1754855253.2535694,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444678,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7178695,\n", + " 't_depend': 1754855252.7346618,\n", + " 't_run': 1754855252.8025918,\n", + " 't_cleanup': 1754855253.1331403,\n", + " 't_inactive': 1754855253.2534852,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444681,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7180886,\n", + " 't_depend': 1754855252.7348166,\n", + " 't_run': 1754855252.8027067,\n", + " 't_cleanup': 1754855253.1325483,\n", + " 't_inactive': 1754855253.2534108,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330758,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7226884,\n", + " 't_depend': 1754855252.7377772,\n", + " 't_run': 1754855252.8050454,\n", + " 't_cleanup': 1754855253.1323788,\n", + " 't_inactive': 1754855253.2533052,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330757,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7225895,\n", + " 't_depend': 1754855252.7377276,\n", + " 't_run': 1754855252.8050077,\n", + " 't_cleanup': 1754855253.1320505,\n", + " 't_inactive': 1754855253.2532263,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444679,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7179384,\n", + " 't_depend': 1754855252.7347124,\n", + " 't_run': 1754855252.8026295,\n", + " 't_cleanup': 1754855253.1332343,\n", + " 't_inactive': 1754855253.2531378,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444675,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7175322,\n", + " 't_depend': 1754855252.734515,\n", + " 't_run': 1754855252.8024762,\n", + " 't_cleanup': 1754855253.1321893,\n", + " 't_inactive': 1754855253.2530503,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444673,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7173204,\n", + " 't_depend': 1754855252.734415,\n", + " 't_run': 1754855252.8023996,\n", + " 't_cleanup': 1754855253.131827,\n", + " 't_inactive': 1754855253.252961,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444676,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7176073,\n", + " 't_depend': 1754855252.734564,\n", + " 't_run': 1754855252.8025148,\n", + " 't_cleanup': 1754855253.1401927,\n", + " 't_inactive': 1754855253.2528782,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330754,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7223136,\n", + " 't_depend': 1754855252.7375596,\n", + " 't_run': 1754855252.8048618,\n", + " 't_cleanup': 1754855253.1317308,\n", + " 't_inactive': 1754855253.2527847,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553547,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7218645,\n", + " 't_depend': 1754855252.737306,\n", + " 't_run': 1754855252.8046696,\n", + " 't_cleanup': 1754855253.1327996,\n", + " 't_inactive': 1754855253.2527092,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330753,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7222235,\n", + " 't_depend': 1754855252.7375104,\n", + " 't_run': 1754855252.8048232,\n", + " 't_cleanup': 1754855253.1310241,\n", + " 't_inactive': 1754855253.2525954,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330752,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7221358,\n", + " 't_depend': 1754855252.7374606,\n", + " 't_run': 1754855252.804784,\n", + " 't_cleanup': 1754855253.1305685,\n", + " 't_inactive': 1754855253.252501,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553549,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.72204,\n", + " 't_depend': 1754855252.7374103,\n", + " 't_run': 1754855252.8047464,\n", + " 't_cleanup': 1754855253.1273532,\n", + " 't_inactive': 1754855253.2524185,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553538,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.721438,\n", + " 't_depend': 1754855252.736857,\n", + " 't_run': 1754855252.8043237,\n", + " 't_cleanup': 1754855253.1274273,\n", + " 't_inactive': 1754855253.2523007,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553548,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.721951,\n", + " 't_depend': 1754855252.7373595,\n", + " 't_run': 1754855252.8047082,\n", + " 't_cleanup': 1754855253.114064,\n", + " 't_inactive': 1754855253.21855,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553545,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7216797,\n", + " 't_depend': 1754855252.7372055,\n", + " 't_run': 1754855252.8045924,\n", + " 't_cleanup': 1754855253.1138558,\n", + " 't_inactive': 1754855253.2184603,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553544,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7215874,\n", + " 't_depend': 1754855252.7371564,\n", + " 't_run': 1754855252.8045537,\n", + " 't_cleanup': 1754855253.113995,\n", + " 't_inactive': 1754855253.218364,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553541,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7215042,\n", + " 't_depend': 1754855252.737003,\n", + " 't_run': 1754855252.8044386,\n", + " 't_cleanup': 1754855253.1139224,\n", + " 't_inactive': 1754855253.2182255,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776331,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7208796,\n", + " 't_depend': 1754855252.7365665,\n", + " 't_run': 1754855252.8040783,\n", + " 't_cleanup': 1754855253.1133814,\n", + " 't_inactive': 1754855253.218125,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553540,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7214904,\n", + " 't_depend': 1754855252.7369545,\n", + " 't_run': 1754855252.8044007,\n", + " 't_cleanup': 1754855253.115282,\n", + " 't_inactive': 1754855253.2180188,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553542,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7215226,\n", + " 't_depend': 1754855252.7370524,\n", + " 't_run': 1754855252.8044772,\n", + " 't_cleanup': 1754855253.1153388,\n", + " 't_inactive': 1754855253.2179296,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553539,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7214692,\n", + " 't_depend': 1754855252.7369068,\n", + " 't_run': 1754855252.804362,\n", + " 't_cleanup': 1754855253.1152136,\n", + " 't_inactive': 1754855253.2177918,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553537,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7213068,\n", + " 't_depend': 1754855252.736809,\n", + " 't_run': 1754855252.8042848,\n", + " 't_cleanup': 1754855253.1151428,\n", + " 't_inactive': 1754855253.2176938,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128191553536,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7211769,\n", + " 't_depend': 1754855252.7367609,\n", + " 't_run': 1754855252.804245,\n", + " 't_cleanup': 1754855253.1135738,\n", + " 't_inactive': 1754855253.2175853,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776333,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7209725,\n", + " 't_depend': 1754855252.7366648,\n", + " 't_run': 1754855252.804164,\n", + " 't_cleanup': 1754855253.1095963,\n", + " 't_inactive': 1754855253.217439,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776334,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7210398,\n", + " 't_depend': 1754855252.7367127,\n", + " 't_run': 1754855252.8042037,\n", + " 't_cleanup': 1754855253.1091998,\n", + " 't_inactive': 1754855253.2173357,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444674,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7174513,\n", + " 't_depend': 1754855252.7344666,\n", + " 't_run': 1754855252.802438,\n", + " 't_cleanup': 1754855253.1086552,\n", + " 't_inactive': 1754855253.2172384,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776332,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.720926,\n", + " 't_depend': 1754855252.7366161,\n", + " 't_run': 1754855252.8041217,\n", + " 't_cleanup': 1754855253.1071613,\n", + " 't_inactive': 1754855253.217146,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776330,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.720833,\n", + " 't_depend': 1754855252.7365189,\n", + " 't_run': 1754855252.8040276,\n", + " 't_cleanup': 1754855253.1066523,\n", + " 't_inactive': 1754855253.2169998,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776326,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7206497,\n", + " 't_depend': 1754855252.736325,\n", + " 't_run': 1754855252.8038683,\n", + " 't_cleanup': 1754855253.105882,\n", + " 't_inactive': 1754855253.2169244,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128124444672,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7171876,\n", + " 't_depend': 1754855252.7343662,\n", + " 't_run': 1754855252.8023615,\n", + " 't_cleanup': 1754855253.1036189,\n", + " 't_inactive': 1754855253.2168267,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667462,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7164054,\n", + " 't_depend': 1754855252.734119,\n", + " 't_run': 1754855252.8021693,\n", + " 't_cleanup': 1754855253.1051667,\n", + " 't_inactive': 1754855253.2167504,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776329,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7207875,\n", + " 't_depend': 1754855252.7364712,\n", + " 't_run': 1754855252.8039863,\n", + " 't_cleanup': 1754855253.1047132,\n", + " 't_inactive': 1754855253.2166405,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667466,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7169597,\n", + " 't_depend': 1754855252.7343152,\n", + " 't_run': 1754855252.8023233,\n", + " 't_cleanup': 1754855253.1041129,\n", + " 't_inactive': 1754855253.2165294,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776327,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.720696,\n", + " 't_depend': 1754855252.7363737,\n", + " 't_run': 1754855252.8039074,\n", + " 't_cleanup': 1754855253.1050925,\n", + " 't_inactive': 1754855253.2163882,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667465,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7167733,\n", + " 't_depend': 1754855252.734266,\n", + " 't_run': 1754855252.8022847,\n", + " 't_cleanup': 1754855253.104813,\n", + " 't_inactive': 1754855253.2162359,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776328,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7207417,\n", + " 't_depend': 1754855252.7364228,\n", + " 't_run': 1754855252.8039465,\n", + " 't_cleanup': 1754855253.104909,\n", + " 't_inactive': 1754855253.2161405,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776324,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.720468,\n", + " 't_depend': 1754855252.7362268,\n", + " 't_run': 1754855252.8037913,\n", + " 't_cleanup': 1754855253.1052494,\n", + " 't_inactive': 1754855253.2160277,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776325,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7206037,\n", + " 't_depend': 1754855252.7362761,\n", + " 't_run': 1754855252.80383,\n", + " 't_cleanup': 1754855253.1053572,\n", + " 't_inactive': 1754855253.2159448,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667464,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.716614,\n", + " 't_depend': 1754855252.7342172,\n", + " 't_run': 1754855252.8022463,\n", + " 't_cleanup': 1754855253.1049898,\n", + " 't_inactive': 1754855253.2158122,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776323,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7203574,\n", + " 't_depend': 1754855252.7361717,\n", + " 't_run': 1754855252.803752,\n", + " 't_cleanup': 1754855253.1017919,\n", + " 't_inactive': 1754855253.2157116,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667463,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7164757,\n", + " 't_depend': 1754855252.7341685,\n", + " 't_run': 1754855252.8022082,\n", + " 't_cleanup': 1754855253.1042974,\n", + " 't_inactive': 1754855253.2156239,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999112,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7200437,\n", + " 't_depend': 1754855252.7359626,\n", + " 't_run': 1754855252.8035982,\n", + " 't_cleanup': 1754855253.101898,\n", + " 't_inactive': 1754855253.2155433,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776322,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.720288,\n", + " 't_depend': 1754855252.7361202,\n", + " 't_run': 1754855252.8037138,\n", + " 't_cleanup': 1754855253.1015637,\n", + " 't_inactive': 1754855253.2154148,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776321,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7202184,\n", + " 't_depend': 1754855252.73606,\n", + " 't_run': 1754855252.803676,\n", + " 't_cleanup': 1754855253.1007988,\n", + " 't_inactive': 1754855253.215324,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999110,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.719877,\n", + " 't_depend': 1754855252.7358608,\n", + " 't_run': 1754855252.80352,\n", + " 't_cleanup': 1754855253.1007185,\n", + " 't_inactive': 1754855253.2152421,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128174776320,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7201488,\n", + " 't_depend': 1754855252.7360113,\n", + " 't_run': 1754855252.803637,\n", + " 't_cleanup': 1754855253.100971,\n", + " 't_inactive': 1754855253.215156,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667458,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7162075,\n", + " 't_depend': 1754855252.7339146,\n", + " 't_run': 1754855252.8019998,\n", + " 't_cleanup': 1754855253.100028,\n", + " 't_inactive': 1754855253.215012,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667459,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7162604,\n", + " 't_depend': 1754855252.7339625,\n", + " 't_run': 1754855252.80204,\n", + " 't_cleanup': 1754855253.0994728,\n", + " 't_inactive': 1754855253.214922,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999106,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7193704,\n", + " 't_depend': 1754855252.735664,\n", + " 't_run': 1754855252.8033664,\n", + " 't_cleanup': 1754855253.100135,\n", + " 't_inactive': 1754855253.2148395,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999108,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7196424,\n", + " 't_depend': 1754855252.7357616,\n", + " 't_run': 1754855252.8034425,\n", + " 't_cleanup': 1754855253.0997667,\n", + " 't_inactive': 1754855253.2147107,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999104,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7191095,\n", + " 't_depend': 1754855252.7355657,\n", + " 't_run': 1754855252.8032892,\n", + " 't_cleanup': 1754855253.0995705,\n", + " 't_inactive': 1754855253.2146282,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667457,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7161605,\n", + " 't_depend': 1754855252.7338662,\n", + " 't_run': 1754855252.8019624,\n", + " 't_cleanup': 1754855253.0990095,\n", + " 't_inactive': 1754855253.2145348,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999105,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7192385,\n", + " 't_depend': 1754855252.7356148,\n", + " 't_run': 1754855252.8033283,\n", + " 't_cleanup': 1754855253.0998569,\n", + " 't_inactive': 1754855253.2144444,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128090890243,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7160006,\n", + " 't_depend': 1754855252.7337205,\n", + " 't_run': 1754855252.8018458,\n", + " 't_cleanup': 1754855253.100889,\n", + " 't_inactive': 1754855253.2143192,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667461,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7163558,\n", + " 't_depend': 1754855252.73406,\n", + " 't_run': 1754855252.8021312,\n", + " 't_cleanup': 1754855253.1011577,\n", + " 't_inactive': 1754855253.2142465,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667460,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7163098,\n", + " 't_depend': 1754855252.7340112,\n", + " 't_run': 1754855252.8020895,\n", + " 't_cleanup': 1754855253.0991693,\n", + " 't_inactive': 1754855253.2141697,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113026,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7143152,\n", + " 't_depend': 1754855252.7330935,\n", + " 't_run': 1754855252.801359,\n", + " 't_cleanup': 1754855253.100288,\n", + " 't_inactive': 1754855253.214007,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128107667456,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7161102,\n", + " 't_depend': 1754855252.7338183,\n", + " 't_run': 1754855252.8019238,\n", + " 't_cleanup': 1754855253.0959845,\n", + " 't_inactive': 1754855253.2139232,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221901,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7189715,\n", + " 't_depend': 1754855252.7355168,\n", + " 't_run': 1754855252.8032515,\n", + " 't_cleanup': 1754855253.0959053,\n", + " 't_inactive': 1754855253.2138495,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999111,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7199736,\n", + " 't_depend': 1754855252.7359118,\n", + " 't_run': 1754855252.803559,\n", + " 't_cleanup': 1754855253.0956955,\n", + " 't_inactive': 1754855253.2137647,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128090890242,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.715955,\n", + " 't_depend': 1754855252.7336686,\n", + " 't_run': 1754855252.8018074,\n", + " 't_cleanup': 1754855253.0996604,\n", + " 't_inactive': 1754855253.2136314,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221897,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7187636,\n", + " 't_depend': 1754855252.7353182,\n", + " 't_run': 1754855252.8030992,\n", + " 't_cleanup': 1754855253.095604,\n", + " 't_inactive': 1754855253.2135398,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128090890241,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.715244,\n", + " 't_depend': 1754855252.7336142,\n", + " 't_run': 1754855252.801768,\n", + " 't_cleanup': 1754855253.1005964,\n", + " 't_inactive': 1754855253.2134643,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113028,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7145004,\n", + " 't_depend': 1754855252.733199,\n", + " 't_run': 1754855252.8014424,\n", + " 't_cleanup': 1754855253.0961955,\n", + " 't_inactive': 1754855253.2133276,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999109,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7197466,\n", + " 't_depend': 1754855252.7358098,\n", + " 't_run': 1754855252.8034806,\n", + " 't_cleanup': 1754855253.0951455,\n", + " 't_inactive': 1754855253.2132368,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128090890244,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7160482,\n", + " 't_depend': 1754855252.7337697,\n", + " 't_run': 1754855252.801885,\n", + " 't_cleanup': 1754855253.0955005,\n", + " 't_inactive': 1754855253.21316,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128157999107,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7195082,\n", + " 't_depend': 1754855252.735713,\n", + " 't_run': 1754855252.8034046,\n", + " 't_cleanup': 1754855253.094736,\n", + " 't_inactive': 1754855253.2130463,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128090890240,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7151964,\n", + " 't_depend': 1754855252.7335658,\n", + " 't_run': 1754855252.8017285,\n", + " 't_cleanup': 1754855253.0954225,\n", + " 't_inactive': 1754855253.2129245,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113034,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7150228,\n", + " 't_depend': 1754855252.7335172,\n", + " 't_run': 1754855252.8016884,\n", + " 't_cleanup': 1754855253.0945864,\n", + " 't_inactive': 1754855253.2128372,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113032,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7148678,\n", + " 't_depend': 1754855252.7334197,\n", + " 't_run': 1754855252.8016024,\n", + " 't_cleanup': 1754855253.0937245,\n", + " 't_inactive': 1754855253.2127573,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113033,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7149491,\n", + " 't_depend': 1754855252.7334688,\n", + " 't_run': 1754855252.8016412,\n", + " 't_cleanup': 1754855253.0936055,\n", + " 't_inactive': 1754855253.2126627,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113031,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7147653,\n", + " 't_depend': 1754855252.73337,\n", + " 't_run': 1754855252.8015618,\n", + " 't_cleanup': 1754855253.091453,\n", + " 't_inactive': 1754855253.2125833,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221900,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.718903,\n", + " 't_depend': 1754855252.7354667,\n", + " 't_run': 1754855252.8032131,\n", + " 't_cleanup': 1754855253.080201,\n", + " 't_inactive': 1754855253.2125096,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113029,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.714611,\n", + " 't_depend': 1754855252.7332544,\n", + " 't_run': 1754855252.8014824,\n", + " 't_cleanup': 1754855253.0797517,\n", + " 't_inactive': 1754855253.212436,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113030,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.714687,\n", + " 't_depend': 1754855252.7333193,\n", + " 't_run': 1754855252.801523,\n", + " 't_cleanup': 1754855253.079613,\n", + " 't_inactive': 1754855253.2123594,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221899,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7188563,\n", + " 't_depend': 1754855252.7354162,\n", + " 't_run': 1754855252.8031754,\n", + " 't_cleanup': 1754855253.0751503,\n", + " 't_inactive': 1754855253.2122836,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113027,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.71439,\n", + " 't_depend': 1754855252.733145,\n", + " 't_run': 1754855252.801401,\n", + " 't_cleanup': 1754855253.0727305,\n", + " 't_inactive': 1754855253.2122083,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128141221898,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.71881,\n", + " 't_depend': 1754855252.7353673,\n", + " 't_run': 1754855252.8031378,\n", + " 't_cleanup': 1754855253.0726614,\n", + " 't_inactive': 1754855253.2121289,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113025,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7142315,\n", + " 't_depend': 1754855252.7330363,\n", + " 't_run': 1754855252.8013172,\n", + " 't_cleanup': 1754855253.0722356,\n", + " 't_inactive': 1754855253.212032,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128074113024,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.714117,\n", + " 't_depend': 1754855252.7329843,\n", + " 't_run': 1754855252.801276,\n", + " 't_cleanup': 1754855253.0720768,\n", + " 't_inactive': 1754855253.2119167,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128057335810,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7138066,\n", + " 't_depend': 1754855252.7328281,\n", + " 't_run': 1754855252.8011186,\n", + " 't_cleanup': 1754855253.0612702,\n", + " 't_inactive': 1754855253.1830552,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128057335811,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7138913,\n", + " 't_depend': 1754855252.7328787,\n", + " 't_run': 1754855252.8011625,\n", + " 't_cleanup': 1754855253.0605497,\n", + " 't_inactive': 1754855253.1829634,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128057335812,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7140043,\n", + " 't_depend': 1754855252.732929,\n", + " 't_run': 1754855252.8012338,\n", + " 't_cleanup': 1754855253.030491,\n", + " 't_inactive': 1754855253.1559489,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128225107972,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7235146,\n", + " 't_depend': 1754855252.7382288,\n", + " 't_run': 1754855252.805404,\n", + " 't_cleanup': 1754855252.9643753,\n", + " 't_inactive': 1754855253.1333895,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128225107968,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7231567,\n", + " 't_depend': 1754855252.738022,\n", + " 't_run': 1754855252.8052511,\n", + " 't_cleanup': 1754855252.9642434,\n", + " 't_inactive': 1754855253.1332996,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128225107969,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.723239,\n", + " 't_depend': 1754855252.7380805,\n", + " 't_run': 1754855252.8052886,\n", + " 't_cleanup': 1754855252.9640532,\n", + " 't_inactive': 1754855253.1331885,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128225107971,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7234251,\n", + " 't_depend': 1754855252.7381794,\n", + " 't_run': 1754855252.805366,\n", + " 't_cleanup': 1754855252.9636073,\n", + " 't_inactive': 1754855253.1330922,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330762,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7230468,\n", + " 't_depend': 1754855252.7379732,\n", + " 't_run': 1754855252.8052125,\n", + " 't_cleanup': 1754855252.9639962,\n", + " 't_inactive': 1754855253.1330059,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330760,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.722869,\n", + " 't_depend': 1754855252.7378762,\n", + " 't_run': 1754855252.8051355,\n", + " 't_cleanup': 1754855252.9641426,\n", + " 't_inactive': 1754855253.1328506,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128208330761,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.722959,\n", + " 't_depend': 1754855252.7379248,\n", + " 't_run': 1754855252.805174,\n", + " 't_cleanup': 1754855252.9642909,\n", + " 't_inactive': 1754855253.13275,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128225107970,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.723336,\n", + " 't_depend': 1754855252.7381306,\n", + " 't_run': 1754855252.805327,\n", + " 't_cleanup': 1754855252.9630506,\n", + " 't_inactive': 1754855253.1326675,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128057335808,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.7136045,\n", + " 't_depend': 1754855252.732721,\n", + " 't_run': 1754855252.770426,\n", + " 't_cleanup': 1754855252.9398298,\n", + " 't_inactive': 1754855253.1324303,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98128057335809,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855252.713725,\n", + " 't_depend': 1754855252.732776,\n", + " 't_run': 1754855252.8010523,\n", + " 't_cleanup': 1754855252.939659,\n", + " 't_inactive': 1754855253.132297,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305289,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.4060845,\n", + " 't_depend': 1754855249.4187722,\n", + " 't_run': 1754855249.4355564,\n", + " 't_cleanup': 1754855252.4579248,\n", + " 't_inactive': 1754855252.4609509,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305287,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.4058933,\n", + " 't_depend': 1754855249.4186697,\n", + " 't_run': 1754855249.4354606,\n", + " 't_cleanup': 1754855252.4578815,\n", + " 't_inactive': 1754855252.4608767,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305285,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.405704,\n", + " 't_depend': 1754855249.4185705,\n", + " 't_run': 1754855249.4349399,\n", + " 't_cleanup': 1754855252.4578416,\n", + " 't_inactive': 1754855252.4607882,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305284,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.4055917,\n", + " 't_depend': 1754855249.418525,\n", + " 't_run': 1754855249.4348974,\n", + " 't_cleanup': 1754855252.4577734,\n", + " 't_inactive': 1754855252.4606445,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305288,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.4059825,\n", + " 't_depend': 1754855249.4187233,\n", + " 't_run': 1754855249.4355133,\n", + " 't_cleanup': 1754855252.4577289,\n", + " 't_inactive': 1754855252.4605713,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305282,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.4053779,\n", + " 't_depend': 1754855249.418422,\n", + " 't_run': 1754855249.4348035,\n", + " 't_cleanup': 1754855252.4576113,\n", + " 't_inactive': 1754855252.4604936,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305286,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.4058,\n", + " 't_depend': 1754855249.4186203,\n", + " 't_run': 1754855249.434983,\n", + " 't_cleanup': 1754855252.4575338,\n", + " 't_inactive': 1754855252.4598033,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305283,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.4054854,\n", + " 't_depend': 1754855249.4184742,\n", + " 't_run': 1754855249.4348538,\n", + " 't_cleanup': 1754855252.4565592,\n", + " 't_inactive': 1754855252.4586184,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305280,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.405114,\n", + " 't_depend': 1754855249.4183168,\n", + " 't_run': 1754855249.4329443,\n", + " 't_cleanup': 1754855252.4560106,\n", + " 't_inactive': 1754855252.4580784,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 98072558305281,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855249.4052591,\n", + " 't_depend': 1754855249.4183702,\n", + " 't_run': 1754855249.4338248,\n", + " 't_cleanup': 1754855252.4559445,\n", + " 't_inactive': 1754855252.45745,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 97390665138176,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855208.7620118,\n", + " 't_depend': 1754855208.7736819,\n", + " 't_run': 1754855208.7856562,\n", + " 't_cleanup': 1754855213.8032315,\n", + " 't_inactive': 1754855213.8041298,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'cwd': '/home/ubuntu/tutorial/ch2',\n", + " 'ntasks': 4,\n", + " 'ncores': 4,\n", + " 'duration': 300.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 1754855508.0,\n", + " 'waitstatus': 0},\n", + " {'id': 95699806978048,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754855107.9783614,\n", + " 't_depend': 1754855107.990325,\n", + " 't_run': 1754855108.0022883,\n", + " 't_cleanup': 1754855108.0174737,\n", + " 't_inactive': 1754855108.018468,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 76665434669056,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853973.4414752,\n", + " 't_depend': 1754853973.4541082,\n", + " 't_run': 1754853973.4667373,\n", + " 't_cleanup': 1754853973.4862418,\n", + " 't_inactive': 1754853973.4875677,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 76665434669058,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853973.4417293,\n", + " 't_depend': 1754853973.4542122,\n", + " 't_run': 1754853973.4669917,\n", + " 't_cleanup': 1754853973.4861856,\n", + " 't_inactive': 1754853973.4873977,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 76665434669057,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853973.4415967,\n", + " 't_depend': 1754853973.4541576,\n", + " 't_run': 1754853973.4669406,\n", + " 't_cleanup': 1754853973.4829597,\n", + " 't_inactive': 1754853973.4838068,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 76182200516608,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853944.638146,\n", + " 't_depend': 1754853944.6503308,\n", + " 't_run': 1754853944.6646285,\n", + " 't_cleanup': 1754853944.682941,\n", + " 't_inactive': 1754853944.685201,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 76182200516609,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853944.6382601,\n", + " 't_depend': 1754853944.6503785,\n", + " 't_run': 1754853944.6646698,\n", + " 't_cleanup': 1754853944.6828341,\n", + " 't_inactive': 1754853944.6850755,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 76182183739394,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853944.6380236,\n", + " 't_depend': 1754853944.6502824,\n", + " 't_run': 1754853944.664582,\n", + " 't_cleanup': 1754853944.682731,\n", + " 't_inactive': 1754853944.6849923,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 76182183739393,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853944.6379013,\n", + " 't_depend': 1754853944.6502318,\n", + " 't_run': 1754853944.663905,\n", + " 't_cleanup': 1754853944.6826649,\n", + " 't_inactive': 1754853944.6844978,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 76182183739392,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853944.6377776,\n", + " 't_depend': 1754853944.6501806,\n", + " 't_run': 1754853944.66327,\n", + " 't_cleanup': 1754853944.68239,\n", + " 't_inactive': 1754853944.6838923,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 75471635087360,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853902.285606,\n", + " 't_depend': 1754853902.2971485,\n", + " 't_run': 1754853902.3089676,\n", + " 't_cleanup': 1754853902.3277683,\n", + " 't_inactive': 1754853902.328647,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 4,\n", + " 'ncores': 4,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 74604571787264,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853850.6042378,\n", + " 't_depend': 1754853850.615589,\n", + " 't_run': 1754853850.627505,\n", + " 't_cleanup': 1754853850.6461422,\n", + " 't_inactive': 1754853850.6470063,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 4,\n", + " 'ncores': 4,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 74175930695680,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853825.055359,\n", + " 't_depend': 1754853825.067586,\n", + " 't_run': 1754853825.0794768,\n", + " 't_cleanup': 1754853825.0947456,\n", + " 't_inactive': 1754853825.095677,\n", + " 'state': 64,\n", + " 'name': 'echo',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72864136953856,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853746.866107,\n", + " 't_depend': 1754853746.878482,\n", + " 't_run': 1754853746.8925583,\n", + " 't_cleanup': 1754853746.9111614,\n", + " 't_inactive': 1754853746.913246,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72864120176643,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853746.8659925,\n", + " 't_depend': 1754853746.878429,\n", + " 't_run': 1754853746.8921726,\n", + " 't_cleanup': 1754853746.9111123,\n", + " 't_inactive': 1754853746.9131558,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72864120176640,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853746.8656335,\n", + " 't_depend': 1754853746.8782654,\n", + " 't_run': 1754853746.8915832,\n", + " 't_cleanup': 1754853746.9107945,\n", + " 't_inactive': 1754853746.9128923,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72864120176641,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853746.8657641,\n", + " 't_depend': 1754853746.8783247,\n", + " 't_run': 1754853746.892066,\n", + " 't_cleanup': 1754853746.9106827,\n", + " 't_inactive': 1754853746.9123867,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72864120176642,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853746.865883,\n", + " 't_depend': 1754853746.8783774,\n", + " 't_run': 1754853746.8921294,\n", + " 't_cleanup': 1754853746.9105082,\n", + " 't_inactive': 1754853746.911934,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72620548554755,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853732.347508,\n", + " 't_depend': 1754853732.3601756,\n", + " 't_run': 1754853732.3742747,\n", + " 't_cleanup': 1754853732.392648,\n", + " 't_inactive': 1754853732.3946176,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72620548554753,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853732.3473024,\n", + " 't_depend': 1754853732.3600526,\n", + " 't_run': 1754853732.3741627,\n", + " 't_cleanup': 1754853732.392509,\n", + " 't_inactive': 1754853732.3945296,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72620548554754,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853732.347405,\n", + " 't_depend': 1754853732.3601215,\n", + " 't_run': 1754853732.374221,\n", + " 't_cleanup': 1754853732.3924034,\n", + " 't_inactive': 1754853732.3944438,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72620548554752,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853732.3471866,\n", + " 't_depend': 1754853732.3599985,\n", + " 't_run': 1754853732.3735409,\n", + " 't_cleanup': 1754853732.3922856,\n", + " 't_inactive': 1754853732.3943555,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 72620531777536,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853732.3470883,\n", + " 't_depend': 1754853732.3599417,\n", + " 't_run': 1754853732.372953,\n", + " 't_cleanup': 1754853732.3922281,\n", + " 't_inactive': 1754853732.3938308,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71669582397441,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853675.6652343,\n", + " 't_depend': 1754853675.691446,\n", + " 't_run': 1754853675.7065737,\n", + " 't_cleanup': 1754853675.724817,\n", + " 't_inactive': 1754853675.726773,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71669565620224,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853675.6647668,\n", + " 't_depend': 1754853675.6912425,\n", + " 't_run': 1754853675.7055557,\n", + " 't_cleanup': 1754853675.7246819,\n", + " 't_inactive': 1754853675.7266953,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71669582397440,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853675.6651232,\n", + " 't_depend': 1754853675.691396,\n", + " 't_run': 1754853675.7061923,\n", + " 't_cleanup': 1754853675.7244496,\n", + " 't_inactive': 1754853675.7264988,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71669565620226,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853675.6650088,\n", + " 't_depend': 1754853675.6913455,\n", + " 't_run': 1754853675.7061489,\n", + " 't_cleanup': 1754853675.7243674,\n", + " 't_inactive': 1754853675.726426,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71669565620225,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853675.6648924,\n", + " 't_depend': 1754853675.6912947,\n", + " 't_run': 1754853675.7060993,\n", + " 't_cleanup': 1754853675.724243,\n", + " 't_inactive': 1754853675.7258468,\n", + " 'state': 64,\n", + " 'name': 'true',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201864,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3665187,\n", + " 't_depend': 1754853662.3959835,\n", + " 't_run': 1754853662.504606,\n", + " 't_cleanup': 1754853662.9692764,\n", + " 't_inactive': 1754853663.0223095,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424643,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3651845,\n", + " 't_depend': 1754853662.3945527,\n", + " 't_run': 1754853662.5035317,\n", + " 't_cleanup': 1754853662.9696383,\n", + " 't_inactive': 1754853663.0184355,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647443,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3647943,\n", + " 't_depend': 1754853662.3939342,\n", + " 't_run': 1754853662.503048,\n", + " 't_cleanup': 1754853662.9697158,\n", + " 't_inactive': 1754853663.0183709,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424649,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3653765,\n", + " 't_depend': 1754853662.394857,\n", + " 't_run': 1754853662.5037603,\n", + " 't_cleanup': 1754853662.9696584,\n", + " 't_inactive': 1754853663.0183034,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424659,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3659031,\n", + " 't_depend': 1754853662.3953846,\n", + " 't_run': 1754853662.5041494,\n", + " 't_cleanup': 1754853662.9697843,\n", + " 't_inactive': 1754853663.0182378,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647447,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3649302,\n", + " 't_depend': 1754853662.3941412,\n", + " 't_run': 1754853662.5032132,\n", + " 't_cleanup': 1754853662.9699998,\n", + " 't_inactive': 1754853663.01817,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870247,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3640814,\n", + " 't_depend': 1754853662.3929043,\n", + " 't_run': 1754853662.5022955,\n", + " 't_cleanup': 1754853662.9697576,\n", + " 't_inactive': 1754853663.0181,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424655,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.365703,\n", + " 't_depend': 1754853662.3951685,\n", + " 't_run': 1754853662.5039864,\n", + " 't_cleanup': 1754853662.9699056,\n", + " 't_inactive': 1754853663.018024,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201856,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3661072,\n", + " 't_depend': 1754853662.3955865,\n", + " 't_run': 1754853662.5042994,\n", + " 't_cleanup': 1754853662.9699538,\n", + " 't_inactive': 1754853663.0179534,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201867,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3666735,\n", + " 't_depend': 1754853662.3961399,\n", + " 't_run': 1754853662.5047524,\n", + " 't_cleanup': 1754853662.9696972,\n", + " 't_inactive': 1754853663.0178866,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201872,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.366933,\n", + " 't_depend': 1754853662.3963919,\n", + " 't_run': 1754853662.5049698,\n", + " 't_cleanup': 1754853662.9655952,\n", + " 't_inactive': 1754853663.0178156,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647431,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3643699,\n", + " 't_depend': 1754853662.3933256,\n", + " 't_run': 1754853662.502596,\n", + " 't_cleanup': 1754853662.9700596,\n", + " 't_inactive': 1754853663.0177464,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201860,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3663058,\n", + " 't_depend': 1754853662.395788,\n", + " 't_run': 1754853662.5044537,\n", + " 't_cleanup': 1754853662.969847,\n", + " 't_inactive': 1754853663.0176682,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647427,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.364236,\n", + " 't_depend': 1754853662.393126,\n", + " 't_run': 1754853662.5024452,\n", + " 't_cleanup': 1754853662.9657433,\n", + " 't_inactive': 1754853663.0176008,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647439,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3646536,\n", + " 't_depend': 1754853662.3937325,\n", + " 't_run': 1754853662.5028973,\n", + " 't_cleanup': 1754853662.9647405,\n", + " 't_inactive': 1754853663.0175288,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201862,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.366411,\n", + " 't_depend': 1754853662.395884,\n", + " 't_run': 1754853662.5045314,\n", + " 't_cleanup': 1754853662.9653502,\n", + " 't_inactive': 1754853663.0174599,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424645,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3652432,\n", + " 't_depend': 1754853662.394655,\n", + " 't_run': 1754853662.5036085,\n", + " 't_cleanup': 1754853662.9646251,\n", + " 't_inactive': 1754853663.0173912,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870237,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3638527,\n", + " 't_depend': 1754853662.3924043,\n", + " 't_run': 1754853662.5019057,\n", + " 't_cleanup': 1754853662.96431,\n", + " 't_inactive': 1754853663.0173218,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424642,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3651493,\n", + " 't_depend': 1754853662.3944979,\n", + " 't_run': 1754853662.5034919,\n", + " 't_cleanup': 1754853662.9663322,\n", + " 't_inactive': 1754853663.0172532,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647442,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3647432,\n", + " 't_depend': 1754853662.3938844,\n", + " 't_run': 1754853662.5030103,\n", + " 't_cleanup': 1754853662.9665127,\n", + " 't_inactive': 1754853663.0171814,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424650,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3654623,\n", + " 't_depend': 1754853662.394908,\n", + " 't_run': 1754853662.503798,\n", + " 't_cleanup': 1754853662.9663706,\n", + " 't_inactive': 1754853663.0171127,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424657,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.365806,\n", + " 't_depend': 1754853662.3952708,\n", + " 't_run': 1754853662.5040617,\n", + " 't_cleanup': 1754853662.9667106,\n", + " 't_inactive': 1754853663.017035,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870245,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3640254,\n", + " 't_depend': 1754853662.3928046,\n", + " 't_run': 1754853662.5022202,\n", + " 't_cleanup': 1754853662.9663072,\n", + " 't_inactive': 1754853663.0169666,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647449,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3649833,\n", + " 't_depend': 1754853662.3942442,\n", + " 't_run': 1754853662.5032868,\n", + " 't_cleanup': 1754853662.9644425,\n", + " 't_inactive': 1754853663.0168955,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647425,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3641644,\n", + " 't_depend': 1754853662.3930151,\n", + " 't_run': 1754853662.50237,\n", + " 't_cleanup': 1754853662.9696188,\n", + " 't_inactive': 1754853663.0168266,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870241,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3639474,\n", + " 't_depend': 1754853662.392604,\n", + " 't_run': 1754853662.5020578,\n", + " 't_cleanup': 1754853662.9656694,\n", + " 't_inactive': 1754853663.016756,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424653,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.365591,\n", + " 't_depend': 1754853662.3950593,\n", + " 't_run': 1754853662.5039115,\n", + " 't_cleanup': 1754853662.9681315,\n", + " 't_inactive': 1754853663.0166824,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424661,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3660035,\n", + " 't_depend': 1754853662.3954856,\n", + " 't_run': 1754853662.504225,\n", + " 't_cleanup': 1754853662.9665785,\n", + " 't_inactive': 1754853663.0166101,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647446,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3648853,\n", + " 't_depend': 1754853662.394091,\n", + " 't_run': 1754853662.5031757,\n", + " 't_cleanup': 1754853662.9654262,\n", + " 't_inactive': 1754853663.0165384,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201858,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3662024,\n", + " 't_depend': 1754853662.3956866,\n", + " 't_run': 1754853662.5043738,\n", + " 't_cleanup': 1754853662.9664476,\n", + " 't_inactive': 1754853663.0164678,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647438,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3646386,\n", + " 't_depend': 1754853662.3936825,\n", + " 't_run': 1754853662.5028586,\n", + " 't_cleanup': 1754853662.969739,\n", + " 't_inactive': 1754853663.0163932,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647434,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3644898,\n", + " 't_depend': 1754853662.3934753,\n", + " 't_run': 1754853662.5027092,\n", + " 't_cleanup': 1754853662.9644995,\n", + " 't_inactive': 1754853663.0163112,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647429,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3642921,\n", + " 't_depend': 1754853662.393226,\n", + " 't_run': 1754853662.502521,\n", + " 't_cleanup': 1754853662.964055,\n", + " 't_inactive': 1754853663.0162404,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201868,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3667226,\n", + " 't_depend': 1754853662.3961892,\n", + " 't_run': 1754853662.5047977,\n", + " 't_cleanup': 1754853662.9658988,\n", + " 't_inactive': 1754853663.0161645,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201870,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3668292,\n", + " 't_depend': 1754853662.396291,\n", + " 't_run': 1754853662.5048816,\n", + " 't_cleanup': 1754853662.9666479,\n", + " 't_inactive': 1754853663.0160894,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201871,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3668745,\n", + " 't_depend': 1754853662.3963416,\n", + " 't_run': 1754853662.5049276,\n", + " 't_cleanup': 1754853662.9684012,\n", + " 't_inactive': 1754853663.0160017,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870242,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.36397,\n", + " 't_depend': 1754853662.392655,\n", + " 't_run': 1754853662.5021057,\n", + " 't_cleanup': 1754853662.9632995,\n", + " 't_inactive': 1754853663.0159297,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424646,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3652859,\n", + " 't_depend': 1754853662.3947053,\n", + " 't_run': 1754853662.5036469,\n", + " 't_cleanup': 1754853662.9628696,\n", + " 't_inactive': 1754853663.015863,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424651,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3654869,\n", + " 't_depend': 1754853662.394956,\n", + " 't_run': 1754853662.5038357,\n", + " 't_cleanup': 1754853662.964549,\n", + " 't_inactive': 1754853663.0157962,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201859,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3662817,\n", + " 't_depend': 1754853662.3957381,\n", + " 't_run': 1754853662.5044103,\n", + " 't_cleanup': 1754853662.9678128,\n", + " 't_inactive': 1754853663.0156028,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647433,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3644323,\n", + " 't_depend': 1754853662.3934247,\n", + " 't_run': 1754853662.5026715,\n", + " 't_cleanup': 1754853662.9630375,\n", + " 't_inactive': 1754853663.015538,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201863,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3664777,\n", + " 't_depend': 1754853662.395933,\n", + " 't_run': 1754853662.5045695,\n", + " 't_cleanup': 1754853662.965996,\n", + " 't_inactive': 1754853663.0154724,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201866,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3666177,\n", + " 't_depend': 1754853662.3960898,\n", + " 't_run': 1754853662.5047061,\n", + " 't_cleanup': 1754853662.9684942,\n", + " 't_inactive': 1754853663.015405,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870238,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3638742,\n", + " 't_depend': 1754853662.3924532,\n", + " 't_run': 1754853662.5019438,\n", + " 't_cleanup': 1754853662.962784,\n", + " 't_inactive': 1754853663.0153353,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424641,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3651247,\n", + " 't_depend': 1754853662.3944466,\n", + " 't_run': 1754853662.5034497,\n", + " 't_cleanup': 1754853662.9655123,\n", + " 't_inactive': 1754853663.0151372,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424662,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3660846,\n", + " 't_depend': 1754853662.3955352,\n", + " 't_run': 1754853662.5042627,\n", + " 't_cleanup': 1754853662.9690032,\n", + " 't_inactive': 1754853663.015063,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647445,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3648386,\n", + " 't_depend': 1754853662.394035,\n", + " 't_run': 1754853662.5031378,\n", + " 't_cleanup': 1754853662.969107,\n", + " 't_inactive': 1754853663.0149918,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870234,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3637831,\n", + " 't_depend': 1754853662.3922522,\n", + " 't_run': 1754853662.5017917,\n", + " 't_cleanup': 1754853662.9601343,\n", + " 't_inactive': 1754853663.0146759,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647437,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3646078,\n", + " 't_depend': 1754853662.3936267,\n", + " 't_run': 1754853662.5028217,\n", + " 't_cleanup': 1754853662.968901,\n", + " 't_inactive': 1754853663.0146093,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424654,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3656871,\n", + " 't_depend': 1754853662.3951178,\n", + " 't_run': 1754853662.503949,\n", + " 't_cleanup': 1754853662.9642572,\n", + " 't_inactive': 1754853663.014544,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647430,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3643315,\n", + " 't_depend': 1754853662.393276,\n", + " 't_run': 1754853662.5025582,\n", + " 't_cleanup': 1754853662.9695199,\n", + " 't_inactive': 1754853663.0144782,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647441,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3647282,\n", + " 't_depend': 1754853662.393832,\n", + " 't_run': 1754853662.5029724,\n", + " 't_cleanup': 1754853662.9658031,\n", + " 't_inactive': 1754853663.0144114,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424658,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3658793,\n", + " 't_depend': 1754853662.395333,\n", + " 't_run': 1754853662.504111,\n", + " 't_cleanup': 1754853662.9652536,\n", + " 't_inactive': 1754853663.0143461,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647426,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.364183,\n", + " 't_depend': 1754853662.3930657,\n", + " 't_run': 1754853662.502408,\n", + " 't_cleanup': 1754853662.9641924,\n", + " 't_inactive': 1754853663.0142763,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870246,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.364059,\n", + " 't_depend': 1754853662.392854,\n", + " 't_run': 1754853662.502257,\n", + " 't_cleanup': 1754853662.963644,\n", + " 't_inactive': 1754853663.0142117,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647450,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3650303,\n", + " 't_depend': 1754853662.394295,\n", + " 't_run': 1754853662.5033238,\n", + " 't_cleanup': 1754853662.9624784,\n", + " 't_inactive': 1754853663.0141432,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647435,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3645122,\n", + " 't_depend': 1754853662.3935263,\n", + " 't_run': 1754853662.5027466,\n", + " 't_cleanup': 1754853662.9574983,\n", + " 't_inactive': 1754853663.0140765,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424647,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3653126,\n", + " 't_depend': 1754853662.3947554,\n", + " 't_run': 1754853662.503685,\n", + " 't_cleanup': 1754853662.956851,\n", + " 't_inactive': 1754853663.014001,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647451,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3650448,\n", + " 't_depend': 1754853662.3943455,\n", + " 't_run': 1754853662.5033731,\n", + " 't_cleanup': 1754853662.961299,\n", + " 't_inactive': 1754853663.0139358,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870235,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3638005,\n", + " 't_depend': 1754853662.3923008,\n", + " 't_run': 1754853662.5018294,\n", + " 't_cleanup': 1754853662.9563591,\n", + " 't_inactive': 1754853663.013868,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870243,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.363986,\n", + " 't_depend': 1754853662.3927052,\n", + " 't_run': 1754853662.5021439,\n", + " 't_cleanup': 1754853662.9575937,\n", + " 't_inactive': 1754853663.0137904,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870239,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3638873,\n", + " 't_depend': 1754853662.3925037,\n", + " 't_run': 1754853662.5019827,\n", + " 't_cleanup': 1754853662.9570239,\n", + " 't_inactive': 1754853663.0137174,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870226,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.363573,\n", + " 't_depend': 1754853662.3918285,\n", + " 't_run': 1754853662.501477,\n", + " 't_cleanup': 1754853662.943869,\n", + " 't_inactive': 1754853663.0059347,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870230,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.363673,\n", + " 't_depend': 1754853662.3920324,\n", + " 't_run': 1754853662.5016305,\n", + " 't_cleanup': 1754853662.9439378,\n", + " 't_inactive': 1754853663.0058653,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870223,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3634863,\n", + " 't_depend': 1754853662.3916762,\n", + " 't_run': 1754853662.5013623,\n", + " 't_cleanup': 1754853662.9432974,\n", + " 't_inactive': 1754853663.0057955,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870227,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.363589,\n", + " 't_depend': 1754853662.391879,\n", + " 't_run': 1754853662.5015154,\n", + " 't_cleanup': 1754853662.942944,\n", + " 't_inactive': 1754853663.005725,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870231,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3636987,\n", + " 't_depend': 1754853662.392088,\n", + " 't_run': 1754853662.501669,\n", + " 't_cleanup': 1754853662.9431067,\n", + " 't_inactive': 1754853663.005644,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870222,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3634655,\n", + " 't_depend': 1754853662.3916245,\n", + " 't_run': 1754853662.501324,\n", + " 't_cleanup': 1754853662.9425864,\n", + " 't_inactive': 1754853663.005567,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870229,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.363652,\n", + " 't_depend': 1754853662.3919806,\n", + " 't_run': 1754853662.5015924,\n", + " 't_cleanup': 1754853662.9268684,\n", + " 't_inactive': 1754853662.987147,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870221,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3634233,\n", + " 't_depend': 1754853662.3915741,\n", + " 't_run': 1754853662.5012856,\n", + " 't_cleanup': 1754853662.9268038,\n", + " 't_inactive': 1754853662.987077,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870233,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3637636,\n", + " 't_depend': 1754853662.392196,\n", + " 't_run': 1754853662.501754,\n", + " 't_cleanup': 1754853662.9262059,\n", + " 't_inactive': 1754853662.986999,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870225,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3635352,\n", + " 't_depend': 1754853662.3917778,\n", + " 't_run': 1754853662.5014386,\n", + " 't_cleanup': 1754853662.9267583,\n", + " 't_inactive': 1754853662.9869297,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870219,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3633692,\n", + " 't_depend': 1754853662.3914745,\n", + " 't_run': 1754853662.5012088,\n", + " 't_cleanup': 1754853662.9108365,\n", + " 't_inactive': 1754853662.9868457,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870215,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3632655,\n", + " 't_depend': 1754853662.3912752,\n", + " 't_run': 1754853662.5010455,\n", + " 't_cleanup': 1754853662.9108977,\n", + " 't_inactive': 1754853662.96957,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870211,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3631692,\n", + " 't_depend': 1754853662.3910668,\n", + " 't_run': 1754853662.5008926,\n", + " 't_cleanup': 1754853662.9081855,\n", + " 't_inactive': 1754853662.9694731,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093009,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3625333,\n", + " 't_depend': 1754853662.3898253,\n", + " 't_run': 1754853662.499929,\n", + " 't_cleanup': 1754853662.9070513,\n", + " 't_inactive': 1754853662.9693985,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093029,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3630617,\n", + " 't_depend': 1754853662.3908644,\n", + " 't_run': 1754853662.5007386,\n", + " 't_cleanup': 1754853662.9091818,\n", + " 't_inactive': 1754853662.9693282,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870209,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3631136,\n", + " 't_depend': 1754853662.3909676,\n", + " 't_run': 1754853662.5008168,\n", + " 't_cleanup': 1754853662.909093,\n", + " 't_inactive': 1754853662.9692304,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870213,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3632104,\n", + " 't_depend': 1754853662.3911757,\n", + " 't_run': 1754853662.500969,\n", + " 't_cleanup': 1754853662.90754,\n", + " 't_inactive': 1754853662.9691544,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870217,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.363307,\n", + " 't_depend': 1754853662.3913755,\n", + " 't_run': 1754853662.501132,\n", + " 't_cleanup': 1754853662.9084668,\n", + " 't_inactive': 1754853662.9690514,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093008,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3625085,\n", + " 't_depend': 1754853662.3897758,\n", + " 't_run': 1754853662.4998875,\n", + " 't_cleanup': 1754853662.9089446,\n", + " 't_inactive': 1754853662.9689558,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093027,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3630087,\n", + " 't_depend': 1754853662.3907623,\n", + " 't_run': 1754853662.5006597,\n", + " 't_cleanup': 1754853662.9087434,\n", + " 't_inactive': 1754853662.9688525,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093025,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362973,\n", + " 't_depend': 1754853662.390652,\n", + " 't_run': 1754853662.5005813,\n", + " 't_cleanup': 1754853662.9092798,\n", + " 't_inactive': 1754853662.9687655,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315793,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3618717,\n", + " 't_depend': 1754853662.3885856,\n", + " 't_run': 1754853662.498956,\n", + " 't_cleanup': 1754853662.9088116,\n", + " 't_inactive': 1754853662.9686942,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093021,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3628526,\n", + " 't_depend': 1754853662.3904467,\n", + " 't_run': 1754853662.5004253,\n", + " 't_cleanup': 1754853662.9094663,\n", + " 't_inactive': 1754853662.9686182,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093017,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3627694,\n", + " 't_depend': 1754853662.3902488,\n", + " 't_run': 1754853662.5002706,\n", + " 't_cleanup': 1754853662.9099963,\n", + " 't_inactive': 1754853662.968546,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395092997,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3622327,\n", + " 't_depend': 1754853662.389202,\n", + " 't_run': 1754853662.4994385,\n", + " 't_cleanup': 1754853662.909356,\n", + " 't_inactive': 1754853662.9684465,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093013,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3626623,\n", + " 't_depend': 1754853662.3900359,\n", + " 't_run': 1754853662.5001066,\n", + " 't_cleanup': 1754853662.9095876,\n", + " 't_inactive': 1754853662.9683537,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395092993,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3621252,\n", + " 't_depend': 1754853662.3889945,\n", + " 't_run': 1754853662.4992805,\n", + " 't_cleanup': 1754853662.9086847,\n", + " 't_inactive': 1754853662.9682777,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870214,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3632321,\n", + " 't_depend': 1754853662.391225,\n", + " 't_run': 1754853662.5010073,\n", + " 't_cleanup': 1754853662.9091501,\n", + " 't_inactive': 1754853662.968195,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093020,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362823,\n", + " 't_depend': 1754853662.3903975,\n", + " 't_run': 1754853662.500387,\n", + " 't_cleanup': 1754853662.9073465,\n", + " 't_inactive': 1754853662.968077,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093001,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362343,\n", + " 't_depend': 1754853662.389408,\n", + " 't_run': 1754853662.4995942,\n", + " 't_cleanup': 1754853662.9090393,\n", + " 't_inactive': 1754853662.967982,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093007,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3624728,\n", + " 't_depend': 1754853662.3897245,\n", + " 't_run': 1754853662.499845,\n", + " 't_cleanup': 1754853662.9078493,\n", + " 't_inactive': 1754853662.9679081,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093016,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362715,\n", + " 't_depend': 1754853662.3901997,\n", + " 't_run': 1754853662.5002303,\n", + " 't_cleanup': 1754853662.908039,\n", + " 't_inactive': 1754853662.96777,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093005,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362436,\n", + " 't_depend': 1754853662.3896163,\n", + " 't_run': 1754853662.4997606,\n", + " 't_cleanup': 1754853662.908405,\n", + " 't_inactive': 1754853662.9677038,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870210,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3631485,\n", + " 't_depend': 1754853662.3910174,\n", + " 't_run': 1754853662.5008554,\n", + " 't_cleanup': 1754853662.908341,\n", + " 't_inactive': 1754853662.967637,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870218,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3633509,\n", + " 't_depend': 1754853662.3914251,\n", + " 't_run': 1754853662.5011709,\n", + " 't_cleanup': 1754853662.906841,\n", + " 't_inactive': 1754853662.9675713,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093028,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3630416,\n", + " 't_depend': 1754853662.3908134,\n", + " 't_run': 1754853662.5006988,\n", + " 't_cleanup': 1754853662.9074574,\n", + " 't_inactive': 1754853662.9675016,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093024,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362931,\n", + " 't_depend': 1754853662.3906014,\n", + " 't_run': 1754853662.500543,\n", + " 't_cleanup': 1754853662.9085693,\n", + " 't_inactive': 1754853662.9674315,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093012,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3626194,\n", + " 't_depend': 1754853662.389985,\n", + " 't_run': 1754853662.5000527,\n", + " 't_cleanup': 1754853662.9076087,\n", + " 't_inactive': 1754853662.967362,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315797,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3619804,\n", + " 't_depend': 1754853662.3887906,\n", + " 't_run': 1754853662.4991202,\n", + " 't_cleanup': 1754853662.9099169,\n", + " 't_inactive': 1754853662.9672906,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093023,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3628905,\n", + " 't_depend': 1754853662.3905497,\n", + " 't_run': 1754853662.5005035,\n", + " 't_cleanup': 1754853662.9072225,\n", + " 't_inactive': 1754853662.967222,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315789,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.361787,\n", + " 't_depend': 1754853662.3883762,\n", + " 't_run': 1754853662.498806,\n", + " 't_cleanup': 1754853662.9081163,\n", + " 't_inactive': 1754853662.9671488,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315785,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3615983,\n", + " 't_depend': 1754853662.3881683,\n", + " 't_run': 1754853662.498656,\n", + " 't_cleanup': 1754853662.9102745,\n", + " 't_inactive': 1754853662.9670582,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093015,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3627005,\n", + " 't_depend': 1754853662.3901463,\n", + " 't_run': 1754853662.5001893,\n", + " 't_cleanup': 1754853662.906491,\n", + " 't_inactive': 1754853662.9669867,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093019,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3628082,\n", + " 't_depend': 1754853662.3903484,\n", + " 't_run': 1754853662.500348,\n", + " 't_cleanup': 1754853662.9036934,\n", + " 't_inactive': 1754853662.9669118,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395092999,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3622754,\n", + " 't_depend': 1754853662.3893058,\n", + " 't_run': 1754853662.4995162,\n", + " 't_cleanup': 1754853662.8943133,\n", + " 't_inactive': 1754853662.9668114,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093000,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3623111,\n", + " 't_depend': 1754853662.3893561,\n", + " 't_run': 1754853662.4995556,\n", + " 't_cleanup': 1754853662.8936048,\n", + " 't_inactive': 1754853662.9587376,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093004,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362406,\n", + " 't_depend': 1754853662.3895652,\n", + " 't_run': 1754853662.4997187,\n", + " 't_cleanup': 1754853662.8932605,\n", + " 't_inactive': 1754853662.9586658,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093011,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3625998,\n", + " 't_depend': 1754853662.3899295,\n", + " 't_run': 1754853662.5000122,\n", + " 't_cleanup': 1754853662.893457,\n", + " 't_inactive': 1754853662.958589,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093003,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362382,\n", + " 't_depend': 1754853662.3895125,\n", + " 't_run': 1754853662.4996767,\n", + " 't_cleanup': 1754853662.8939917,\n", + " 't_inactive': 1754853662.9585152,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395092995,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362163,\n", + " 't_depend': 1754853662.3891003,\n", + " 't_run': 1754853662.4993591,\n", + " 't_cleanup': 1754853662.8933792,\n", + " 't_inactive': 1754853662.95844,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315796,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3619685,\n", + " 't_depend': 1754853662.3887408,\n", + " 't_run': 1754853662.499081,\n", + " 't_cleanup': 1754853662.8935208,\n", + " 't_inactive': 1754853662.9583633,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395092992,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3620996,\n", + " 't_depend': 1754853662.3889441,\n", + " 't_run': 1754853662.4992406,\n", + " 't_cleanup': 1754853662.8944159,\n", + " 't_inactive': 1754853662.9582834,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395092996,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3622062,\n", + " 't_depend': 1754853662.3891513,\n", + " 't_run': 1754853662.4993994,\n", + " 't_cleanup': 1754853662.8940418,\n", + " 't_inactive': 1754853662.9582024,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315795,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3619351,\n", + " 't_depend': 1754853662.38869,\n", + " 't_run': 1754853662.4990306,\n", + " 't_cleanup': 1754853662.8942537,\n", + " 't_inactive': 1754853662.9581249,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315799,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3620522,\n", + " 't_depend': 1754853662.3888931,\n", + " 't_run': 1754853662.4991975,\n", + " 't_cleanup': 1754853662.8936539,\n", + " 't_inactive': 1754853662.9580302,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315792,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3618534,\n", + " 't_depend': 1754853662.3885338,\n", + " 't_run': 1754853662.4989185,\n", + " 't_cleanup': 1754853662.890204,\n", + " 't_inactive': 1754853662.957937,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315781,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3613951,\n", + " 't_depend': 1754853662.387956,\n", + " 't_run': 1754853662.4985054,\n", + " 't_cleanup': 1754853662.8886442,\n", + " 't_inactive': 1754853662.957864,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315791,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.361835,\n", + " 't_depend': 1754853662.388483,\n", + " 't_run': 1754853662.4988813,\n", + " 't_cleanup': 1754853662.8893383,\n", + " 't_inactive': 1754853662.9577928,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315777,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3611822,\n", + " 't_depend': 1754853662.38775,\n", + " 't_run': 1754853662.4983528,\n", + " 't_cleanup': 1754853662.8881269,\n", + " 't_inactive': 1754853662.9577198,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538571,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.360758,\n", + " 't_depend': 1754853662.387342,\n", + " 't_run': 1754853662.4977615,\n", + " 't_cleanup': 1754853662.8871157,\n", + " 't_inactive': 1754853662.957639,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538563,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.360315,\n", + " 't_depend': 1754853662.3869076,\n", + " 't_run': 1754853662.4974515,\n", + " 't_cleanup': 1754853662.887062,\n", + " 't_inactive': 1754853662.9575467,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538575,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3609703,\n", + " 't_depend': 1754853662.3875463,\n", + " 't_run': 1754853662.4979103,\n", + " 't_cleanup': 1754853662.8865304,\n", + " 't_inactive': 1754853662.9574513,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538562,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3602562,\n", + " 't_depend': 1754853662.3868566,\n", + " 't_run': 1754853662.4974139,\n", + " 't_cleanup': 1754853662.8863401,\n", + " 't_inactive': 1754853662.9573774,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538561,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3602164,\n", + " 't_depend': 1754853662.3868048,\n", + " 't_run': 1754853662.4973762,\n", + " 't_cleanup': 1754853662.8829648,\n", + " 't_inactive': 1754853662.9573066,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538560,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.36011,\n", + " 't_depend': 1754853662.3867552,\n", + " 't_run': 1754853662.4973378,\n", + " 't_cleanup': 1754853662.881754,\n", + " 't_inactive': 1754853662.957233,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761352,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3600023,\n", + " 't_depend': 1754853662.3867047,\n", + " 't_run': 1754853662.4973001,\n", + " 't_cleanup': 1754853662.881552,\n", + " 't_inactive': 1754853662.957158,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315780,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3613107,\n", + " 't_depend': 1754853662.3879035,\n", + " 't_run': 1754853662.4984667,\n", + " 't_cleanup': 1754853662.8774822,\n", + " 't_inactive': 1754853662.9570856,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315788,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3617072,\n", + " 't_depend': 1754853662.388324,\n", + " 't_run': 1754853662.498769,\n", + " 't_cleanup': 1754853662.8773715,\n", + " 't_inactive': 1754853662.956978,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315784,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3615546,\n", + " 't_depend': 1754853662.3881168,\n", + " 't_run': 1754853662.4986188,\n", + " 't_cleanup': 1754853662.8774235,\n", + " 't_inactive': 1754853662.956901,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315776,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.361115,\n", + " 't_depend': 1754853662.387698,\n", + " 't_run': 1754853662.498309,\n", + " 't_cleanup': 1754853662.877322,\n", + " 't_inactive': 1754853662.9568048,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538574,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.360918,\n", + " 't_depend': 1754853662.387496,\n", + " 't_run': 1754853662.497873,\n", + " 't_cleanup': 1754853662.8766553,\n", + " 't_inactive': 1754853662.9567213,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761349,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3596811,\n", + " 't_depend': 1754853662.386551,\n", + " 't_run': 1754853662.4971845,\n", + " 't_cleanup': 1754853662.8712692,\n", + " 't_inactive': 1754853662.9566412,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761351,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3598871,\n", + " 't_depend': 1754853662.3866534,\n", + " 't_run': 1754853662.4972615,\n", + " 't_cleanup': 1754853662.876526,\n", + " 't_inactive': 1754853662.956561,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761350,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.359781,\n", + " 't_depend': 1754853662.3866026,\n", + " 't_run': 1754853662.4972234,\n", + " 't_cleanup': 1754853662.870572,\n", + " 't_inactive': 1754853662.9564822,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538570,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3607216,\n", + " 't_depend': 1754853662.3872912,\n", + " 't_run': 1754853662.4977226,\n", + " 't_cleanup': 1754853662.8696613,\n", + " 't_inactive': 1754853662.9564097,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201873,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3670437,\n", + " 't_depend': 1754853662.3964431,\n", + " 't_run': 1754853662.5050128,\n", + " 't_cleanup': 1754853662.86957,\n", + " 't_inactive': 1754853662.9563153,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761348,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.359578,\n", + " 't_depend': 1754853662.3864987,\n", + " 't_run': 1754853662.4971457,\n", + " 't_cleanup': 1754853662.8695238,\n", + " 't_inactive': 1754853662.9562268,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761347,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3594735,\n", + " 't_depend': 1754853662.3864465,\n", + " 't_run': 1754853662.4971066,\n", + " 't_cleanup': 1754853662.869448,\n", + " 't_inactive': 1754853662.9561355,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201857,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3661783,\n", + " 't_depend': 1754853662.395636,\n", + " 't_run': 1754853662.5043368,\n", + " 't_cleanup': 1754853662.8673625,\n", + " 't_inactive': 1754853662.9560483,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201869,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3667772,\n", + " 't_depend': 1754853662.39624,\n", + " 't_run': 1754853662.5048418,\n", + " 't_cleanup': 1754853662.867208,\n", + " 't_inactive': 1754853662.936552,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201865,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3665786,\n", + " 't_depend': 1754853662.3960338,\n", + " 't_run': 1754853662.5046647,\n", + " 't_cleanup': 1754853662.8666623,\n", + " 't_inactive': 1754853662.9364858,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446462201861,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3663745,\n", + " 't_depend': 1754853662.3958356,\n", + " 't_run': 1754853662.504494,\n", + " 't_cleanup': 1754853662.8661466,\n", + " 't_inactive': 1754853662.9364114,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424660,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3659792,\n", + " 't_depend': 1754853662.3954353,\n", + " 't_run': 1754853662.504187,\n", + " 't_cleanup': 1754853662.866036,\n", + " 't_inactive': 1754853662.936341,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424656,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3657823,\n", + " 't_depend': 1754853662.3952198,\n", + " 't_run': 1754853662.5040243,\n", + " 't_cleanup': 1754853662.8657942,\n", + " 't_inactive': 1754853662.9362721,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424652,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3655694,\n", + " 't_depend': 1754853662.39501,\n", + " 't_run': 1754853662.5038736,\n", + " 't_cleanup': 1754853662.8656316,\n", + " 't_inactive': 1754853662.9362016,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424648,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3653526,\n", + " 't_depend': 1754853662.394806,\n", + " 't_run': 1754853662.503722,\n", + " 't_cleanup': 1754853662.8606212,\n", + " 't_inactive': 1754853662.9361174,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424644,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3652184,\n", + " 't_depend': 1754853662.3946052,\n", + " 't_run': 1754853662.5035708,\n", + " 't_cleanup': 1754853662.8510134,\n", + " 't_inactive': 1754853662.921053,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446445424640,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3650866,\n", + " 't_depend': 1754853662.3943958,\n", + " 't_run': 1754853662.5034106,\n", + " 't_cleanup': 1754853662.850615,\n", + " 't_inactive': 1754853662.920981,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647448,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3649442,\n", + " 't_depend': 1754853662.3941922,\n", + " 't_run': 1754853662.5032504,\n", + " 't_cleanup': 1754853662.8503432,\n", + " 't_inactive': 1754853662.9209065,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647444,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3648243,\n", + " 't_depend': 1754853662.393984,\n", + " 't_run': 1754853662.5030997,\n", + " 't_cleanup': 1754853662.8489723,\n", + " 't_inactive': 1754853662.9208379,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647440,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.364693,\n", + " 't_depend': 1754853662.3937826,\n", + " 't_run': 1754853662.5029352,\n", + " 't_cleanup': 1754853662.8477852,\n", + " 't_inactive': 1754853662.9207633,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647436,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3645358,\n", + " 't_depend': 1754853662.3935766,\n", + " 't_run': 1754853662.502784,\n", + " 't_cleanup': 1754853662.846631,\n", + " 't_inactive': 1754853662.9206948,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647432,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3643863,\n", + " 't_depend': 1754853662.393375,\n", + " 't_run': 1754853662.5026338,\n", + " 't_cleanup': 1754853662.846266,\n", + " 't_inactive': 1754853662.9206154,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647428,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3642771,\n", + " 't_depend': 1754853662.3931758,\n", + " 't_run': 1754853662.5024831,\n", + " 't_cleanup': 1754853662.845565,\n", + " 't_inactive': 1754853662.9205465,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446428647424,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3641362,\n", + " 't_depend': 1754853662.3929558,\n", + " 't_run': 1754853662.5023332,\n", + " 't_cleanup': 1754853662.8450496,\n", + " 't_inactive': 1754853662.9204688,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870244,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3639982,\n", + " 't_depend': 1754853662.3927555,\n", + " 't_run': 1754853662.502182,\n", + " 't_cleanup': 1754853662.8412366,\n", + " 't_inactive': 1754853662.9203959,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870240,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3639076,\n", + " 't_depend': 1754853662.392554,\n", + " 't_run': 1754853662.5020204,\n", + " 't_cleanup': 1754853662.8408055,\n", + " 't_inactive': 1754853662.9203112,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870236,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3638225,\n", + " 't_depend': 1754853662.3923526,\n", + " 't_run': 1754853662.5018673,\n", + " 't_cleanup': 1754853662.8399656,\n", + " 't_inactive': 1754853662.920241,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870224,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3635018,\n", + " 't_depend': 1754853662.3917265,\n", + " 't_run': 1754853662.5014005,\n", + " 't_cleanup': 1754853662.839872,\n", + " 't_inactive': 1754853662.9201622,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870232,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.363725,\n", + " 't_depend': 1754853662.3921504,\n", + " 't_run': 1754853662.501716,\n", + " 't_cleanup': 1754853662.8394487,\n", + " 't_inactive': 1754853662.9200892,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870228,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3636048,\n", + " 't_depend': 1754853662.3919294,\n", + " 't_run': 1754853662.5015543,\n", + " 't_cleanup': 1754853662.8393002,\n", + " 't_inactive': 1754853662.9200034,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315787,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3616624,\n", + " 't_depend': 1754853662.3882725,\n", + " 't_run': 1754853662.4987311,\n", + " 't_cleanup': 1754853662.833584,\n", + " 't_inactive': 1754853662.919925,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315783,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3614995,\n", + " 't_depend': 1754853662.3880582,\n", + " 't_run': 1754853662.498581,\n", + " 't_cleanup': 1754853662.833354,\n", + " 't_inactive': 1754853662.9198308,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315779,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3612878,\n", + " 't_depend': 1754853662.3878524,\n", + " 't_run': 1754853662.4984293,\n", + " 't_cleanup': 1754853662.8330781,\n", + " 't_inactive': 1754853662.9197438,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870208,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.363101,\n", + " 't_depend': 1754853662.3909168,\n", + " 't_run': 1754853662.5007775,\n", + " 't_cleanup': 1754853662.8332593,\n", + " 't_inactive': 1754853662.9196749,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870212,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3631928,\n", + " 't_depend': 1754853662.391125,\n", + " 't_run': 1754853662.5009315,\n", + " 't_cleanup': 1754853662.8329806,\n", + " 't_inactive': 1754853662.9196017,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870220,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3633873,\n", + " 't_depend': 1754853662.3915243,\n", + " 't_run': 1754853662.5012476,\n", + " 't_cleanup': 1754853662.832172,\n", + " 't_inactive': 1754853662.9195251,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446411870216,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3632822,\n", + " 't_depend': 1754853662.3913245,\n", + " 't_run': 1754853662.5010939,\n", + " 't_cleanup': 1754853662.831501,\n", + " 't_inactive': 1754853662.919453,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093026,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3629913,\n", + " 't_depend': 1754853662.3907027,\n", + " 't_run': 1754853662.5006204,\n", + " 't_cleanup': 1754853662.8303008,\n", + " 't_inactive': 1754853662.9193726,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093022,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3628728,\n", + " 't_depend': 1754853662.3904972,\n", + " 't_run': 1754853662.5004644,\n", + " 't_cleanup': 1754853662.8298755,\n", + " 't_inactive': 1754853662.9192948,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093010,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3625717,\n", + " 't_depend': 1754853662.3898766,\n", + " 't_run': 1754853662.4999707,\n", + " 't_cleanup': 1754853662.824953,\n", + " 't_inactive': 1754853662.9191844,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093018,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3627915,\n", + " 't_depend': 1754853662.3902996,\n", + " 't_run': 1754853662.5003097,\n", + " 't_cleanup': 1754853662.8256893,\n", + " 't_inactive': 1754853662.9008257,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093014,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3626788,\n", + " 't_depend': 1754853662.3900938,\n", + " 't_run': 1754853662.5001485,\n", + " 't_cleanup': 1754853662.8257794,\n", + " 't_inactive': 1754853662.9007578,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093006,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362458,\n", + " 't_depend': 1754853662.389667,\n", + " 't_run': 1754853662.4998035,\n", + " 't_cleanup': 1754853662.825504,\n", + " 't_inactive': 1754853662.9006884,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395093002,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3623636,\n", + " 't_depend': 1754853662.389461,\n", + " 't_run': 1754853662.499635,\n", + " 't_cleanup': 1754853662.824899,\n", + " 't_inactive': 1754853662.9006207,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538577,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3610778,\n", + " 't_depend': 1754853662.3876472,\n", + " 't_run': 1754853662.4979851,\n", + " 't_cleanup': 1754853662.8203604,\n", + " 't_inactive': 1754853662.9005477,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395092998,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3622525,\n", + " 't_depend': 1754853662.3892536,\n", + " 't_run': 1754853662.4994774,\n", + " 't_cleanup': 1754853662.8199735,\n", + " 't_inactive': 1754853662.900478,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538573,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3608649,\n", + " 't_depend': 1754853662.3874447,\n", + " 't_run': 1754853662.497836,\n", + " 't_cleanup': 1754853662.8186843,\n", + " 't_inactive': 1754853662.9004042,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538569,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.360644,\n", + " 't_depend': 1754853662.3872306,\n", + " 't_run': 1754853662.4976847,\n", + " 't_cleanup': 1754853662.8173192,\n", + " 't_inactive': 1754853662.9003322,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761346,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3593583,\n", + " 't_depend': 1754853662.3863919,\n", + " 't_run': 1754853662.497057,\n", + " 't_cleanup': 1754853662.8170545,\n", + " 't_inactive': 1754853662.900258,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761345,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3592393,\n", + " 't_depend': 1754853662.3863387,\n", + " 't_run': 1754853662.4970171,\n", + " 't_cleanup': 1754853662.8167284,\n", + " 't_inactive': 1754853662.9001825,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446344761344,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3591125,\n", + " 't_depend': 1754853662.386284,\n", + " 't_run': 1754853662.4969637,\n", + " 't_cleanup': 1754853662.8147757,\n", + " 't_inactive': 1754853662.9000947,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538564,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3604078,\n", + " 't_depend': 1754853662.3869588,\n", + " 't_run': 1754853662.497489,\n", + " 't_cleanup': 1754853662.8101833,\n", + " 't_inactive': 1754853662.900004,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446395092994,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.362137,\n", + " 't_depend': 1754853662.3890448,\n", + " 't_run': 1754853662.4993203,\n", + " 't_cleanup': 1754853662.8096673,\n", + " 't_inactive': 1754853662.8999305,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315798,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3620045,\n", + " 't_depend': 1754853662.3888416,\n", + " 't_run': 1754853662.4991598,\n", + " 't_cleanup': 1754853662.8103406,\n", + " 't_inactive': 1754853662.8998547,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315794,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.361909,\n", + " 't_depend': 1754853662.3886373,\n", + " 't_run': 1754853662.498993,\n", + " 't_cleanup': 1754853662.8095639,\n", + " 't_inactive': 1754853662.8997793,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315790,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3618085,\n", + " 't_depend': 1754853662.3884318,\n", + " 't_run': 1754853662.4988434,\n", + " 't_cleanup': 1754853662.8047864,\n", + " 't_inactive': 1754853662.8997056,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315786,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3616383,\n", + " 't_depend': 1754853662.3882203,\n", + " 't_run': 1754853662.498694,\n", + " 't_cleanup': 1754853662.8041599,\n", + " 't_inactive': 1754853662.8996294,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315782,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.36142,\n", + " 't_depend': 1754853662.3880074,\n", + " 't_run': 1754853662.4985433,\n", + " 't_cleanup': 1754853662.8022892,\n", + " 't_inactive': 1754853662.899553,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446378315778,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3612223,\n", + " 't_depend': 1754853662.387801,\n", + " 't_run': 1754853662.498392,\n", + " 't_cleanup': 1754853662.8013206,\n", + " 't_inactive': 1754853662.8994737,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538576,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3610144,\n", + " 't_depend': 1754853662.3875964,\n", + " 't_run': 1754853662.497948,\n", + " 't_cleanup': 1754853662.8018272,\n", + " 't_inactive': 1754853662.8993838,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538572,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.360819,\n", + " 't_depend': 1754853662.3873925,\n", + " 't_run': 1754853662.4977984,\n", + " 't_cleanup': 1754853662.8006694,\n", + " 't_inactive': 1754853662.89929,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538568,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.360619,\n", + " 't_depend': 1754853662.3871756,\n", + " 't_run': 1754853662.49764,\n", + " 't_cleanup': 1754853662.8000731,\n", + " 't_inactive': 1754853662.8991568,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538567,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3605442,\n", + " 't_depend': 1754853662.3871224,\n", + " 't_run': 1754853662.4976027,\n", + " 't_cleanup': 1754853662.7983077,\n", + " 't_inactive': 1754853662.8807077,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538566,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3605177,\n", + " 't_depend': 1754853662.3870604,\n", + " 't_run': 1754853662.497565,\n", + " 't_cleanup': 1754853662.7977715,\n", + " 't_inactive': 1754853662.880629,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446361538565,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.3604321,\n", + " 't_depend': 1754853662.3870094,\n", + " 't_run': 1754853662.497527,\n", + " 't_cleanup': 1754853662.7970324,\n", + " 't_inactive': 1754853662.8805478,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446327984129,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.358981,\n", + " 't_depend': 1754853662.3862288,\n", + " 't_run': 1754853662.4883041,\n", + " 't_cleanup': 1754853662.7864063,\n", + " 't_inactive': 1754853662.8804607,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71446327984128,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853662.358846,\n", + " 't_depend': 1754853662.3861692,\n", + " 't_run': 1754853662.4600134,\n", + " 't_cleanup': 1754853662.786043,\n", + " 't_inactive': 1754853662.880339,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145529278468,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.4295368,\n", + " 't_depend': 1754853644.440716,\n", + " 't_run': 1754853644.457095,\n", + " 't_cleanup': 1754853647.4821184,\n", + " 't_inactive': 1754853647.4832523,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145529278467,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.429431,\n", + " 't_depend': 1754853644.440665,\n", + " 't_run': 1754853644.457046,\n", + " 't_cleanup': 1754853647.4816954,\n", + " 't_inactive': 1754853647.4826124,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145512501251,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.4288616,\n", + " 't_depend': 1754853644.4404027,\n", + " 't_run': 1754853644.45633,\n", + " 't_cleanup': 1754853647.4797156,\n", + " 't_inactive': 1754853647.4817853,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145529278465,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.429222,\n", + " 't_depend': 1754853644.4405563,\n", + " 't_run': 1754853644.4569604,\n", + " 't_cleanup': 1754853647.4795685,\n", + " 't_inactive': 1754853647.4815254,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145512501248,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.42847,\n", + " 't_depend': 1754853644.440243,\n", + " 't_run': 1754853644.4546218,\n", + " 't_cleanup': 1754853647.4789846,\n", + " 't_inactive': 1754853647.4810257,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145529278464,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.4290965,\n", + " 't_depend': 1754853644.440505,\n", + " 't_run': 1754853644.4569154,\n", + " 't_cleanup': 1754853647.4776478,\n", + " 't_inactive': 1754853647.4803913,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145512501249,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.4286125,\n", + " 't_depend': 1754853644.4402974,\n", + " 't_run': 1754853644.4552867,\n", + " 't_cleanup': 1754853647.4771519,\n", + " 't_inactive': 1754853647.4797895,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145529278466,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.429328,\n", + " 't_depend': 1754853644.4406097,\n", + " 't_run': 1754853644.4570055,\n", + " 't_cleanup': 1754853647.4770553,\n", + " 't_inactive': 1754853647.479257,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145512501250,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.4287438,\n", + " 't_depend': 1754853644.440351,\n", + " 't_run': 1754853644.4562747,\n", + " 't_cleanup': 1754853647.4763496,\n", + " 't_inactive': 1754853647.4785619,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 71145512501252,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853644.4289756,\n", + " 't_depend': 1754853644.4404533,\n", + " 't_run': 1754853644.4563742,\n", + " 't_cleanup': 1754853647.4756453,\n", + " 't_inactive': 1754853647.4767482,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 70632146468864,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853613.829938,\n", + " 't_depend': 1754853613.8407938,\n", + " 't_run': 1754853613.8526556,\n", + " 't_cleanup': 1754853618.870364,\n", + " 't_inactive': 1754853618.8712044,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'cwd': '/home/ubuntu/tutorial/ch2',\n", + " 'ntasks': 4,\n", + " 'ncores': 4,\n", + " 'duration': 300.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 1754853913.0,\n", + " 'waitstatus': 0},\n", + " {'id': 70177584578560,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853586.735776,\n", + " 't_depend': 1754853586.7468407,\n", + " 't_run': 1754853586.7587156,\n", + " 't_cleanup': 1754853591.7765565,\n", + " 't_inactive': 1754853591.7774115,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'cwd': '/home/ubuntu/tutorial/ch2',\n", + " 'ntasks': 4,\n", + " 'ncores': 4,\n", + " 'duration': 300.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 1754853886.0,\n", + " 'waitstatus': 0},\n", + " {'id': 64250462601216,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853233.4514174,\n", + " 't_depend': 1754853233.4622488,\n", + " 't_run': 1754853233.474043,\n", + " 't_cleanup': 1754853233.4960055,\n", + " 't_inactive': 1754853233.496893,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '0',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 60411449704448,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754853004.6284952,\n", + " 't_depend': 1754853004.6392798,\n", + " 't_run': 1754853004.650989,\n", + " 't_cleanup': 1754853004.6660106,\n", + " 't_inactive': 1754853004.666885,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '1',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 60026848804864,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754852981.7048187,\n", + " 't_depend': 1754852981.715752,\n", + " 't_run': 1754852981.7275193,\n", + " 't_cleanup': 1754852981.7425592,\n", + " 't_inactive': 1754852981.74341,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '2',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0},\n", + " {'id': 56841929228288,\n", + " 'userid': 1000,\n", + " 'urgency': 16,\n", + " 'priority': 16,\n", + " 't_submit': 1754852791.868542,\n", + " 't_depend': 1754852791.8793094,\n", + " 't_run': 1754852791.8915725,\n", + " 't_cleanup': 1754852792.3162365,\n", + " 't_inactive': 1754852792.3171062,\n", + " 'state': 64,\n", + " 'name': 'sleep',\n", + " 'ntasks': 1,\n", + " 'ncores': 1,\n", + " 'duration': 0.0,\n", + " 'nnodes': 1,\n", + " 'ranks': '3',\n", + " 'nodelist': 'ip-10-0-20-251',\n", + " 'success': True,\n", + " 'exception_occurred': False,\n", + " 'result': 1,\n", + " 'expiration': 9223372036.0,\n", + " 'waitstatus': 0}]}" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "flux.job.job_list(f).get()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stream Events\n", + "\n", + "
\n", + "Description: Use the `JournalConsumer` to stream events in real time\n", + "
\n", + "\n", + "For this example, we recommend you open up two side-by-side terminals. In the first, create a `JournalConsumer`. Since we set the timeout to -1, we will get all events that have been seen by the instance and then it will wait for new events.\n", + "\n", + "```bash\n", + "handle = flux.Flux()\n", + "consumer = flux.job.JournalConsumer(handle).start()\n", + "while True:\n", + " event = consumer.poll(timeout=-1)\n", + " print(event)\n", + "```\n", + "In the second terminal, try submitting a job. Anything will do!\n", + "\n", + "```bash\n", + "flux run sleep 5\n", + "flux run echo \"A slice of apple pie is 2:50 in Jamaica and 3:50 in the Bahamas. These are the pie rates of the Caribbean.\"\n", + "```\n", + "This is a powerful capability, because it allows for getting events for jobs as they happen, in real-time. We have built an entire state machine library to run complex workflows with this functionality." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2026/HPCIC-AWS/tutorial/ch2/bulksubmit_executor.py b/2026/HPCIC-AWS/tutorial/ch2/bulksubmit_executor.py new file mode 100755 index 00000000..527b7752 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch2/bulksubmit_executor.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import time +import sys +import argparse +import concurrent.futures as cf + +from flux.job import FluxExecutor, JobspecV1 + + +def log(label, s): + print(label + ": " + s) + + +def progress(fraction, length=72, suffix=""): + fill = int(round(length * fraction)) + bar = "\u2588" * fill + "-" * (length - fill) + s = f"\r|{bar}| {100 * fraction:.1f}% {suffix}" + sys.stdout.write(s) + if fraction == 1.0: + sys.stdout.write("\n") + + +def main(): + parser = argparse.ArgumentParser( + description="Submit a command repeatedly using FluxExecutor" + ) + parser.add_argument( + "-n", + "--njobs", + type=int, + metavar="N", + help="Set the total number of jobs to run", + default=100, + ) + parser.add_argument("command", nargs=argparse.REMAINDER) + args = parser.parse_args() + if not args.command: + args.command = ["true"] + t0 = time.perf_counter() + label = "bulksubmit_executor" + with FluxExecutor() as executor: + compute_jobspec = JobspecV1.from_command(args.command) + compute_jobspec.environment = {"TMPDIR": "/tmp/"} + futures = [executor.submit(compute_jobspec) for _ in range(args.njobs)] + # wait for the jobid for each job, as a proxy for the job being submitted + for fut in futures: + fut.jobid() + # all jobs submitted - print timings + dt = time.perf_counter() - t0 + jps = args.njobs / dt + log(label, f"submitted {args.njobs} jobs in {dt:.2f}s. {jps:.2f}job/s") + # wait for jobs to complete + for i, _ in enumerate(cf.as_completed(futures)): + if i == 0: + log( + label, + f"First job finished in about {time.perf_counter() - t0:.3f}s", + ) + jps = (i + 1) / (time.perf_counter() - t0) + progress((i + 1) / args.njobs, length=58, suffix=f"({jps:.1f} job/s)") + # print time summary + dt = time.perf_counter() - t0 + log(label, f"Ran {args.njobs} jobs in {dt:.1f}s. {args.njobs / dt:.1f} job/s") + + +if __name__ == "__main__": + main() diff --git a/2026/HPCIC-AWS/tutorial/ch2/compute.py b/2026/HPCIC-AWS/tutorial/ch2/compute.py new file mode 100755 index 00000000..1f860f2a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch2/compute.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import argparse +import time + +parser = argparse.ArgumentParser(description="compute for seconds") +parser.add_argument( + "integer", + metavar="S", + type=int, + help="an integer for the number of seconds to compute", +) + +args = parser.parse_args() + +print("Will compute for " + str(args.integer) + " seconds.") +time.sleep(args.integer) diff --git a/2026/HPCIC-AWS/tutorial/ch3/03_flux_tutorial.ipynb b/2026/HPCIC-AWS/tutorial/ch3/03_flux_tutorial.ipynb new file mode 100644 index 00000000..c9f49c9a --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch3/03_flux_tutorial.ipynb @@ -0,0 +1,589 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
\n", + "\n", + "# Chapter 3: Process, Monitoring, Utilities, and More, Oh My!\n", + "\n", + "Now that we have learned about basic flux commands, and hierarchical scheduling and its benefits, let's dive deeper into the structure of the individual Flux instances that comprise a hierarchy and talk about some additional \"plumbing\" that helps Flux to run. In this module, we cover:\n", + "\n", + "1. More advanced flux commands for querying data\n", + "2. The structure of Flux instances\n", + "3. Examples `flux kvs` that powers a lot of higher level commands\n", + "4. Advanced job specification interaction with flux job\n", + "
\n", + "\n", + "If you aren't interested in Flux plumbing, feel free to skip to [Chapter 4](../ch4/04_flux_framework_usernetes.ipynb) to run Flux alongside user-space Kubernetes!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "# Process, Monitoring, and Job Utilities ⚙️\n", + "## flux exec 👊️\n", + "\n", + "
\n", + "Description: Executing commands across ranks\n", + "
\n", + "\n", + "Have you ever wanted a quick way to execute a command to all of your nodes in a flux instance? It might be to create a directory, or otherwise interact with a file. This can be hugely useful in environments where you don't have a shared filesystem, for example. This is a job for flux exec! Here is a toy example to execute the command to every rank (`-r all`) to print.\n", + "\n", + "```bash\n", + "flux exec -r all echo \"Hello from a flux rank!\"\n", + "```\n", + "\n", + "You can also use `-x` to exclude ranks. For example, we often do custom actions on the main or \"leader\" rank, and just want to issue commands to the workers.\n", + "\n", + "```bash\n", + "flux exec -r all -x 0 echo \"Hello from everyone except the lead (0) rank!\"\n", + "```\n", + "\n", + "Here is a similar example, but asking to execute only on rank 2, and to have it print the rank.\n", + "\n", + "```bash\n", + "flux exec -r 2 flux getattr rank \n", + "```\n", + "\n", + "And of course, we could do the same to print for all ranks! This is a derivative of the first example we showed you.\n", + "\n", + "```bash\n", + "flux exec flux getattr rank\n", + "```\n", + "\n", + "You can imagine that `flux exec` is hugely useful in the context of batch jobs and machine learning leader/worker designs that need different commands to start or interact with component nodes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## flux jobs\n", + "\n", + "
\n", + "Description: Querying all jobs on a cluster\n", + "
\n", + "\n", + "Flux provides a way to query information about all of the jobs on a cluster, which was discussed in Chapter 1. We sort of skipped over the powerful ways through which you can customize this command. As a reminder, the basic usage to see current and \"all\" jobs:\n", + "\n", + "```bash\n", + "# Show me currently active jobs\n", + "flux jobs\n", + "\n", + "# Show me ALL jobs\n", + "flux jobs -a\n", + "```\n", + "\n", + "You can remove the header and ask for a format string to get exact information. Here is how to get a list of status:\n", + "\n", + "```bash\n", + "flux jobs -a --no-header --format=\"{status}\"\n", + "\n", + "# Get one status\n", + "flux jobs --no-header --format=\"{status}\" $(flux job last)\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## flux job info\n", + "\n", + "
\n", + "Description: Querying information about a Flux job\n", + "
\n", + "\n", + "Flux provides a way to get information from a JOBID, like jobspec, eventlog, and R (resource set).\n", + "\n", + "```bash\n", + "echo \"Querying the jobspec\"\n", + "flux job info $(flux job last) jobspec | jq .resources\n", + "echo \"Querying the resource set\"\n", + "flux job info $(flux job last) R | jq .execution.nodelist\n", + "Querying the jobspec\n", + "[\n", + " {\n", + " \"type\": \"node\",\n", + " \"count\": 1,\n", + " \"with\": [\n", + " {\n", + " \"type\": \"slot\",\n", + " \"count\": 64,\n", + " \"with\": [\n", + " {\n", + " \"type\": \"core\",\n", + " \"count\": 1\n", + " }\n", + " ],\n", + " \"label\": \"task\"\n", + " }\n", + " ]\n", + " }\n", + "]\n", + "Querying the resource set\n", + "[\n", + " \"ip-10-0-25-10\"\n", + "]\n", + "```\n", + "\n", + "We can query the job event log:\n", + "\n", + "```bash\n", + "flux job eventlog -H $(flux job last)\n", + "[Aug09 01:10] submit userid=1000 urgency=16 flags=0 version=1\n", + "[ +0.011880] validate\n", + "[ +0.022558] depend\n", + "[ +0.022598] priority priority=16\n", + "[ +0.024352] alloc\n", + "[ +0.026081] start\n", + "[ +0.042162] memo uri=\"ssh://ip-10-0-25-10/tmp/flux-JE2tV6/local-0\"\n", + "[ +1.491008] finish status=0\n", + "[ +1.491826] release ranks=\"all\" final=true\n", + "[ +1.491856] free\n", + "[ +1.491869] clean\n", + "```\n", + "Or the exec event log:\n", + "\n", + "```bash\n", + "[Aug09 01:10] init\n", + "[ +0.009753] shell.init service=\"1000-shell-f31zWKSBmy\" leader-rank=0 size=1\n", + "[ +0.011289] shell.start taskmap={\"version\":1,\"map\":[[0,1,1,1]]}\n", + "[ +0.000687] starting\n", + "[ +1.464679] shell.task-exit localid=0 rank=0 state=\"Exited\" pid=72151 wait_status=0 signaled=0 exitcode=0\n", + "[ +1.466305] complete status=0\n", + "[ +1.466328] done\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## flux uptime\n", + "\n", + "
\n", + "Description: Showing how long a flux instance has been running\n", + "
\n", + "\n", + "Flux provides an `uptime` utility to display properties of the Flux instance such as state of the current instance, how long it has been running, its size and if scheduling is disabled or stopped. The output shows how long the instance has been up, the instance owner, the instance depth (depth in the Flux hierarchy), and the size of the instance (number of brokers).\n", + "\n", + "```bash\n", + "flux uptime\n", + " 01:52:57 run 5h, owner ubuntu, depth 0, size 1\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## flux top \n", + "\n", + "
\n", + "Description: Showing a table of real-time Flux processes\n", + "
\n", + "\n", + "Flux provides a feature-full version of `top` for nested Flux instances and jobs. Try it out! \n", + "\n", + "```bash\n", + "flux top\n", + "```\n", + "\n", + "If you don't have any jobs running, run a few `flux submit sleep inf` to see output. \n", + "\n", + "## flux proxy\n", + "\n", + "
\n", + "Description: Interacting with a job hierarchy\n", + "
\n", + "\n", + "Flux proxy is used to route messages to and from a Flux instance. We can use `flux proxy` to connect to a running Flux instance and then submit more nested jobs inside it. This can work with flux uris that start with `ssh://` or even local files! Let's do a dummy example to reconnect to our own uri:\n", + "\n", + "```bash\n", + "flux proxy $FLUX_URI flux resource list\n", + "```\n", + "\n", + "In the case that was another (remote) Flux instance or a batch job, we can easily execute commands." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## flux queue\n", + "\n", + "
\n", + "Description: Interacting with and inspecting Flux queues\n", + "
\n", + "\n", + "Flux has a command for controlling the queue within the `job-manager`: `flux queue`. This includes disabling job submission, re-enabling it, waiting for the queue to become idle or empty, and checking the queue status:\n", + "\n", + "```bash\n", + "flux queue enable\n", + "flux queue -h\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## flux getattr\n", + "\n", + "
\n", + "Description: Getting attributes about your system and environment\n", + "
\n", + "\n", + "Each Flux instance has a set of attributes that are set at startup that affect the operation of Flux, such as `rank`, `size`, and `local-uri` (the Unix socket usable for communicating with Flux). Many of these attributes can be modified at runtime, such as `log-stderr-level` (1 logs only critical messages to stderr while 7 logs everything, including debug messages). Here is an example set that you might be interested in looking at:\n", + "\n", + "```bash\n", + "# What is the rank of the node I'm sitting on?\n", + "flux getattr rank\n", + "\n", + "# What is the size of the Flux instance?\n", + "flux getattr size\n", + "\n", + "# What is the local uri?\n", + "flux getattr local-uri\n", + "\n", + "# Set an attribute for the log level\n", + "flux setattr log-stderr-level 3\n", + "\n", + "# List current attributes\n", + "flux lsattr -v\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## flux dmesg\n", + "\n", + "
\n", + "Description: Viewing Flux system messages\n", + "
\n", + "\n", + "\n", + "If you need some additional help debugging your Flux setup, you might be interested in `flux dmesg`, which is akin to the [Linux dmesg](https://man7.org/linux/man-pages/man1/dmesg.1.html) but delivers messages for Flux." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[32m[May21 19:51]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod connector-local\u001b[0m\n", + "\u001b[32m[ +0.005402]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: start: none->join 12.9368ms\u001b[0m\n", + "\u001b[32m[ +0.008454]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: parent-none: join->init 2.93317ms\u001b[0m\n", + "\u001b[32m[ +0.027397]\u001b[0m \u001b[33mconnector-local.debug[0]\u001b[0m: \u001b[34mallow-guest-user=false\u001b[0m\n", + "\u001b[32m[ +0.027451]\u001b[0m \u001b[33mconnector-local.debug[0]\u001b[0m: \u001b[34mallow-root-owner=false\u001b[0m\n", + "\u001b[32m[ +0.041013]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34maccepting connection from a100cf62dc4f (rank 3) status full\u001b[0m\n", + "\u001b[32m[ +0.041447]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34maccepting connection from a100cf62dc4f (rank 1) status full\u001b[0m\n", + "\u001b[32m[ +0.041517]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34maccepting connection from a100cf62dc4f (rank 2) status full\u001b[0m\n", + "\u001b[32m[ +0.133438]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod content\u001b[0m\n", + "\u001b[32m[ +0.170387]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod barrier\u001b[0m\n", + "\u001b[32m[ +0.284711]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod content-sqlite\u001b[0m\n", + "\u001b[32m[ +0.312658]\u001b[0m \u001b[33mcontent-sqlite.debug[0]\u001b[0m: \u001b[34m/tmp/flux-nygpcr/content.sqlite (0 objects) journal_mode=OFF synchronous=OFF\u001b[0m\n", + "\u001b[32m[ +0.313154]\u001b[0m \u001b[33mcontent.debug[0]\u001b[0m: \u001b[34mcontent backing store: enabled content-sqlite\u001b[0m\n", + "\u001b[32m[ +0.350060]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod kvs\u001b[0m\n", + "\u001b[32m[ +0.391564]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod kvs-watch\u001b[0m\n", + "\u001b[32m[ +0.474022]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod resource\u001b[0m\n", + "\u001b[32m[ +0.562086]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod cron\u001b[0m\n", + "\u001b[32m[ +0.562626]\u001b[0m \u001b[33mcron.info[0]\u001b[0m: synchronizing cron tasks to event heartbeat.pulse\u001b[0m\n", + "\u001b[32m[ +0.599858]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod job-manager\u001b[0m\n", + "\u001b[32m[ +0.604520]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34mjobtap plugin .history registered method job-manager.history.get\u001b[0m\n", + "\u001b[32m[ +0.605755]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34mjobtap plugin .post-event registered method job-manager.post-event.post\u001b[0m\n", + "\u001b[32m[ +0.607280]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34mhousekeeping is not configured\u001b[0m\n", + "\u001b[32m[ +0.607973]\u001b[0m \u001b[33mjob-manager.info[0]\u001b[0m: restart: 0 jobs\u001b[0m\n", + "\u001b[32m[ +0.608288]\u001b[0m \u001b[33mjob-manager.info[0]\u001b[0m: restart: 0 running jobs\u001b[0m\n", + "\u001b[32m[ +0.608510]\u001b[0m \u001b[33mjob-manager.info[0]\u001b[0m: restart: checkpoint.job-manager not found\u001b[0m\n", + "\u001b[32m[ +0.608669]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34mrestart: max_jobid=ƒ1\u001b[0m\n", + "\u001b[32m[ +0.645613]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod job-info\u001b[0m\n", + "\u001b[32m[ +0.683151]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod job-list\u001b[0m\n", + "\u001b[32m[ +0.750683]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod job-ingest\u001b[0m\n", + "\u001b[32m[ +0.751926]\u001b[0m \u001b[33mjob-ingest.debug[0]\u001b[0m: \u001b[34mconfiguring validator with plugins=(null), args=(null) (enabled)\u001b[0m\n", + "\u001b[32m[ +0.756057]\u001b[0m \u001b[33mjob-ingest.debug[0]\u001b[0m: \u001b[34mfluid ts=1ms\u001b[0m\n", + "\u001b[32m[ +0.792923]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod job-exec\u001b[0m\n", + "\u001b[32m[ +0.835145]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod heartbeat\u001b[0m\n", + "\u001b[32m[ +0.843296]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: rc1.0: running /etc/flux/rc1.d/01-sched-fluxion\u001b[0m\n", + "\u001b[32m[ +0.937478]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod sched-fluxion-resource\u001b[0m\n", + "\u001b[32m[ +0.937900]\u001b[0m \u001b[33msched-fluxion-resource.info[0]\u001b[0m: version 0.44.0-7-g34f30920\u001b[0m\n", + "\u001b[32m[ +0.939829]\u001b[0m \u001b[33msched-fluxion-resource.debug[0]\u001b[0m: \u001b[34mmod_main: resource module starting\u001b[0m\n", + "\u001b[32m[ +0.980168]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod sched-fluxion-qmanager\u001b[0m\n", + "\u001b[32m[ +0.980394]\u001b[0m \u001b[33msched-fluxion-qmanager.info[0]\u001b[0m: version 0.44.0-7-g34f30920\u001b[0m\n", + "\u001b[32m[ +0.981404]\u001b[0m \u001b[33msched-fluxion-qmanager.debug[0]\u001b[0m: \u001b[34mservice_register\u001b[0m\n", + "\u001b[32m[ +0.982103]\u001b[0m \u001b[33msched-fluxion-qmanager.debug[0]\u001b[0m: \u001b[34menforced policy (queue=default): fcfs\u001b[0m\n", + "\u001b[32m[ +0.982430]\u001b[0m \u001b[33msched-fluxion-qmanager.debug[0]\u001b[0m: \u001b[34meffective queue params (queue=default): default\u001b[0m\n", + "\u001b[32m[ +0.982498]\u001b[0m \u001b[33msched-fluxion-qmanager.debug[0]\u001b[0m: \u001b[34meffective policy params (queue=default): default\u001b[0m\n", + "\u001b[32m[ +0.984002]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: rc1.0: running /etc/flux/rc1.d/02-cron\u001b[0m\n", + "\u001b[32m[ +1.378086]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: rc1.0: /etc/flux/rc1 Exited (rc=0) 1.4s\u001b[0m\n", + "\u001b[32m[ +1.378472]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: rc1-success: init->quorum 1.36994s\u001b[0m\n", + "\u001b[32m[ +1.481261]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: online: a100cf62dc4f (ranks 0)\u001b[0m\n", + "\u001b[32m[ +1.767881]\u001b[0m \u001b[33msched-fluxion-resource.warning[0]\u001b[0m: \u001b[1mcreate_reader: allowlist unsupported\u001b[0m\n", + "\u001b[32m[ +1.773598]\u001b[0m \u001b[33msched-fluxion-resource.debug[0]\u001b[0m: \u001b[34mresource graph datastore loaded with rv1exec reader\u001b[0m\n", + "\u001b[32m[ +1.773883]\u001b[0m \u001b[33msched-fluxion-resource.info[0]\u001b[0m: populate_resource_db: loaded resources from core's resource.acquire\u001b[0m\n", + "\u001b[32m[ +1.776881]\u001b[0m \u001b[33msched-fluxion-resource.debug[0]\u001b[0m: \u001b[34mresource status changed (rankset=[all] status=DOWN)\u001b[0m\n", + "\u001b[32m[ +1.776903]\u001b[0m \u001b[33msched-fluxion-resource.debug[0]\u001b[0m: \u001b[34mresource status changed (rankset=[0] status=UP)\u001b[0m\n", + "\u001b[32m[ +1.777069]\u001b[0m \u001b[33msched-fluxion-resource.debug[0]\u001b[0m: \u001b[34mmod_main: resource graph database loaded\u001b[0m\n", + "\u001b[32m[ +1.777577]\u001b[0m \u001b[33msched-fluxion-qmanager.debug[0]\u001b[0m: \u001b[34mhandshaking with sched-fluxion-resource completed\u001b[0m\n", + "\u001b[32m[ +1.777848]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34mscheduler: hello +partial-ok\u001b[0m\n", + "\u001b[32m[ +1.778479]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34mscheduler: ready unlimited\u001b[0m\n", + "\u001b[32m[ +1.778572]\u001b[0m \u001b[33msched-fluxion-qmanager.debug[0]\u001b[0m: \u001b[34mhandshaking with job-manager completed\u001b[0m\n", + "\u001b[32m[ +2.272310]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: online: a100cf62dc4f,a100cf62dc4f,a100cf62dc4f,a100cf62dc4f (ranks 0-3)\u001b[0m\n", + "\u001b[32m[ +2.272758]\u001b[0m \u001b[33mbroker.info[0]\u001b[0m: quorum-full: quorum->run 0.894045s\u001b[0m\n", + "\u001b[32m[ +2.272901]\u001b[0m \u001b[33msched-fluxion-resource.debug[0]\u001b[0m: \u001b[34mresource status changed (rankset=[1-3] status=UP)\u001b[0m\n", + "\u001b[1m\u001b[32m[May21 22:31]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +0.000771]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +0.003297]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +23.375291]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +23.377798]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +28.256627]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +28.259229]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +28.397358]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 4 transactions (4 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May21 22:32]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +0.004236]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +28.174461]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +28.176897]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +37.720830]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +37.723531]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +37.853998]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May21 22:33]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +0.003143]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +41.781505]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +41.784053]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May21 22:34]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +0.000832]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +0.003005]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May21 22:36]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +0.001909]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +0.003307]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May21 22:46]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 5 transactions (5 ops)\u001b[0m\n", + "\u001b[32m[ +0.000988]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 4 transactions (4 ops)\u001b[0m\n", + "\u001b[32m[ +0.003171]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 4 transactions (4 ops)\u001b[0m\n", + "\u001b[32m[ +0.004043]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[32m[ +3.195327]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +22.074918]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 4 transactions (4 ops)\u001b[0m\n", + "\u001b[32m[ +22.077063]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 3 transactions (3 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May21 22:47]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +0.001051]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[32m[ +0.002549]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May22 01:08]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May22 01:13]\u001b[0m \u001b[33mjob-exec.debug[0]\u001b[0m: \u001b[34mexec aborted: id=ƒ3EFFE8Usy\u001b[0m\n", + "\u001b[32m[ +0.000775]\u001b[0m \u001b[33mjob-exec.debug[0]\u001b[0m: \u001b[34mexec aborted: id=ƒ3EFFFcUAK\u001b[0m\n", + "\u001b[32m[ +0.000802]\u001b[0m \u001b[33mjob-exec.debug[0]\u001b[0m: \u001b[34mexec aborted: id=ƒ3EFFFcUAL\u001b[0m\n", + "\u001b[32m[ +0.017790]\u001b[0m \u001b[33mkvs.debug[0]\u001b[0m: \u001b[34maggregated 2 transactions (2 ops)\u001b[0m\n", + "\u001b[1m\u001b[32m[May22 01:15]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34mrmmod sched-fluxion-qmanager\u001b[0m\n", + "\u001b[32m[ +0.001020]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34mmodule sched-fluxion-qmanager exited\u001b[0m\n", + "\u001b[32m[ +0.002652]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34malloc: stop due to disconnect: Success\u001b[0m\n", + "\u001b[32m[ +0.002941]\u001b[0m \u001b[33msched-fluxion-resource.debug[0]\u001b[0m: \u001b[34mdisconnect_request_cb: a notify request aborted\u001b[0m\n", + "\u001b[32m[ +10.537435]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod sched-simple\u001b[0m\n", + "\u001b[32m[ +10.538173]\u001b[0m \u001b[33msched-simple.debug[0]\u001b[0m: \u001b[34mservice_register\u001b[0m\n", + "\u001b[32m[ +10.538417]\u001b[0m \u001b[33msched-simple.err[0]\u001b[0m: \u001b[31mFailed to register feasibility service: File exists\u001b[0m\n", + "\u001b[32m[ +10.539072]\u001b[0m \u001b[33msched-simple.crit[0]\u001b[0m: \u001b[1m\u001b[31mmodule exiting abnormally\u001b[0m\n", + "\u001b[32m[ +10.539999]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34mmodule sched-simple exited\u001b[0m\n", + "\u001b[32m[ +19.767014]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod sched-simple\u001b[0m\n", + "\u001b[32m[ +19.767757]\u001b[0m \u001b[33msched-simple.debug[0]\u001b[0m: \u001b[34mservice_register\u001b[0m\n", + "\u001b[32m[ +19.767903]\u001b[0m \u001b[33msched-simple.err[0]\u001b[0m: \u001b[31mFailed to register feasibility service: File exists\u001b[0m\n", + "\u001b[32m[ +19.768274]\u001b[0m \u001b[33msched-simple.crit[0]\u001b[0m: \u001b[1m\u001b[31mmodule exiting abnormally\u001b[0m\n", + "\u001b[32m[ +19.768464]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34mmodule sched-simple exited\u001b[0m\n", + "\u001b[32m[ +30.672673]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34mrmmod sched-fluxion-resource\u001b[0m\n", + "\u001b[32m[ +30.673611]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34mmodule sched-fluxion-resource exited\u001b[0m\n", + "\u001b[32m[ +30.673747]\u001b[0m \u001b[33mresource.debug[0]\u001b[0m: \u001b[34maborted 1 resource.acquire(s)\u001b[0m\n", + "\u001b[1m\u001b[32m[May22 01:16]\u001b[0m \u001b[33mbroker.debug[0]\u001b[0m: \u001b[34minsmod sched-simple\u001b[0m\n", + "\u001b[32m[ +0.000757]\u001b[0m \u001b[33msched-simple.debug[0]\u001b[0m: \u001b[34mservice_register\u001b[0m\n", + "\u001b[32m[ +0.004032]\u001b[0m \u001b[33msched-simple.debug[0]\u001b[0m: \u001b[34mresource update: {\"resources\":{\"version\":1,\"execution\":{\"R_lite\":[{\"rank\":\"0-3\",\"children\":{\"core\":\"0-9\"}}],\"starttime\":0.0,\"expiration\":0.0,\"nodelist\":[\"a100cf62dc4f,a100cf62dc4f,a100cf62dc4f,a100cf62dc4f\"]}},\"up\":\"0-3\"}\u001b[0m\n", + "\u001b[32m[ +0.004357]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34mscheduler: hello +partial-ok\u001b[0m\n", + "\u001b[32m[ +0.004577]\u001b[0m \u001b[33mjob-manager.debug[0]\u001b[0m: \u001b[34mscheduler: ready limited\u001b[0m\n", + "\u001b[32m[ +0.006012]\u001b[0m \u001b[33msched-simple.debug[0]\u001b[0m: \u001b[34mready: 40 of 40 cores: rank[0-3]/core[0-9]\u001b[0m\n" + ] + } + ], + "source": [ + "!flux dmesg -H" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "
\n", + "\n", + "## Flux Module\n", + "\n", + "
\n", + "Description: Manager and query Flux modules.\n", + "
\n", + "\n", + "\n", + "To manage and query modules, Flux provides the `flux module` command. This is more of an advanced use case. The sub-commands provided by `flux module` can be seen by running:\n", + "\n", + "```bash\n", + "flux module --help\n", + "```\n", + "\n", + "We can see that these services are loaded and available by running:\n", + "\n", + "```bash\n", + "flux module list\n", + "```\n", + "\n", + "Some examples of Flux modules include:\n", + "* `job-ingest` (used by Flux submission commands like `flux batch` and `flux run`)\n", + "* `job-list` (used by `flux jobs`)\n", + "* `sched-fluxion-qmanager` (used by `flux tree`)\n", + "* `sched-fluxion-resource` (also used by `flux tree`)\n", + "\n", + "Try looking at job manager stats, and then using `jq` to get a specific value.\n", + "\n", + "```bash\n", + "flux module stats job-manager\n", + "flux module stats job-manager | jq .inactive_jobs\n", + "```\n", + "\n", + "Users and system administrators can easily load and unload modules using the `flux module load` and `flux module remove` commands. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### flux kvs\n", + "\n", + "
\n", + "Description: The Flux key value store.\n", + "
\n", + "\n", + "One of the core services built into Flux is the key-value store (KVS). It is used in many other services, including most of Flux's resource management services, and the `flux archive` service below.\n", + "\n", + "The `flux kvs` command provides a utility to list and manipulate values of the KVS. As a example of using `flux kvs`, let's use the command to examine information saved by the `resource` service.\n", + "\n", + "```bash\n", + "flux kvs ls\n", + "flux kvs ls resource\n", + "flux kvs get resource.R | jq\n", + "```\n", + "\n", + "The KVS is such an essential component of Flux that we provide C and Python APIs to interact with it. To learn more about interacting with the KVS from these languages, take a look at these documentation pages:\n", + "* C's `flux_kvs_commit` [family of functions](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/man3/flux_kvs_commit.html)\n", + "* C's `flux_kvs_copy` [family of functions](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/man3/flux_kvs_copy.html)\n", + "* C's `flux_kvs_getroot` [family of functions](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/man3/flux_kvs_getroot.html)\n", + "* C's `flux_kvs_lookup` [family of functions](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/man3/flux_kvs_lookup.html)\n", + "* C's `flux_kvs_namespace_create` [family of functions](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/man3/flux_kvs_namespace_create.html)\n", + "* C's `flux_kvs_txn_create` [family of functions](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/man3/flux_kvs_txn_create.html)\n", + "* Python's `flux.kvs` [module](https://flux-framework.readthedocs.io/projects/flux-core/en/latest/python/autogenerated/flux.kvs.html#module-flux.kvs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "## a humorous example of writing to the Flux KVS using the python bindings\n", + "from functools import partial\n", + "\n", + "import flux\n", + "import flux.future\n", + "import flux.kvs\n", + "\n", + "handle = flux.Flux()\n", + "\n", + "def we_await_donuts(future):\n", + " print(\"We await donuts\")\n", + " with flux.kvs.KVSTxn(flux_handle=handle) as kt:\n", + " kt.mkdir(\"donuts\")\n", + " kt.put(\"donuts.old_fashioned\", \"best\")\n", + " kt.put(\"donuts.plain_raised\", \"good ol' standby\")\n", + " kt.put(\"donuts.apple_fritter\", \"excellent alternative\")\n", + "\n", + "def samir_brought_donuts(hand, watcher, revents, args, future):\n", + " ## Fetch donut ratings from the flux key-value store\n", + " donuts = flux.kvs.KVSDir(hand, \".donuts\")\n", + " for donut in donuts.files():\n", + " print(f'{donut}: {flux.kvs.get(hand, donuts.key_at(donut))}')\n", + " future.fulfill()\n", + "\n", + "def donuts_are_here(future):\n", + " print(\"The donut future has been fulfilled\")\n", + "\n", + "## Create a future for the donuts on our flux handle\n", + "donut_future = flux.future.FutureExt(we_await_donuts, flux_handle=handle)\n", + "\n", + "## When the donut future (promise) is fulfilled, we tell everyone the donuts are here\n", + "donut_future.then(donuts_are_here)\n", + "\n", + "## We schedule the donut future to be fulfilled in 1 minute \n", + "donut_watcher = handle.timer_watcher_create(6, partial(samir_brought_donuts, future=donut_future))\n", + "\n", + "donut_watcher.start()\n", + "\n", + "handle.reactor_run()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## flux archive 📚️\n", + "\n", + "
\n", + "Description: Creating file and content archives to access later and between ranks\n", + "
\n", + "\n", + "As Flux is used more in cloud environments, we might find ourselves in a situation where we have a cluster without a shared filesystem. The `flux archive` command helps with this situation. At a high level, `flux archive` allows us to save named pieces of data (e.g., files) to the Flux KVS for later retrieval.\n", + "\n", + "When using `flux archive`, we first have to create an named archive. In the code below, we will create a text file and then save it into an archive using `flux archive`. Note that, for larger files, you can speed up the creation and extraction of archives by using the `--mmap` flag." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "# This concludes Chapter 3.\n", + "\n", + "You can next learn about running AI/ML workloads with Flux and User-space Kubernetes in [Chapter 4](../ch4/04_flux_framework_usernetes.ipynb)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2026/HPCIC-AWS/tutorial/ch4/04_flux_framework_usernetes.ipynb b/2026/HPCIC-AWS/tutorial/ch4/04_flux_framework_usernetes.ipynb new file mode 100644 index 00000000..6cbc9119 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/04_flux_framework_usernetes.ipynb @@ -0,0 +1,453 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1a7f998b-6956-4bbc-b224-17fab1597e8f", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
\n", + "\n", + "# Chapter 4: Flux with User-space Kubernetes\n", + "\n", + "We are developing a new setup where it is possible to run Flux alongside user-space Kubernetes, or Usernetes.\n", + "This is a small demo of what that setup affords. In this tutorial, we will:\n", + "1. Start Usernetes\n", + "2. Run LAMMPS with Flux\n", + "3. Run an AI/ML training Job \n", + "4. Run simulations alongside an AI/ML Model Server\n", + "5. Run MuMMI Components with the Flux Operator (Flux -> Kubernetes -> Flux)\n", + "
\n", + "\n", + "Conceptually, this means that you can run traditional workloads using your HPC workload manager, and then use Kubernetes for associated services for AI/ML models, databases, and message queues.\n", + "\n", + "![img/usernetes-flux.png](img/usernetes-flux.png)\n", + "\n", + "If you haven't yet, open up a Jupyter terminal and put it alongside this notebook so you can copy paste commands into it." + ] + }, + { + "cell_type": "markdown", + "id": "a2ea7230-96f9-48af-85b7-10942406bc0a", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## 1. Start Usernetes\n", + "\n", + "Normally, we start Usernetes under a Flux batch job, meaning you (the user) do not have to do it, and do not see it. Here, we are going to show you all the setup. Run the following script in the terminal to your left to watch your control plane come up!\n", + "\n", + "```bash\n", + "bash /home/ubuntu/start-usernetes.sh\n", + "```\n", + "\n", + "When the script finishes, you'd normally export the `KUBECONFIG` to your environment. This is your credentials to interact with the cluster. However, you don't need to because we write the default to `~/.kube/config`.\n", + "\n", + "```bash\n", + "export KUBECONFIG=/home/ubuntu/usernetes/kubeconfig\n", + "```\n", + "\n", + "Try looking at the nodes:\n", + "\n", + "```bash\n", + "kubectl get nodes\n", + "```\n", + "\n", + "Right now you just have a single control plane, and we have modified it to allow for running work. This is how we map Usernetes nodes to physical nodes in HPC, with a 1:1 ratio. Finally, you can enable auto-complete (with TAB) for `kubectl`:\n", + "\n", + "```bash\n", + "source <((kubectl completion bash))\n", + "```\n", + "\n", + "Take a look at all the service pods! In Kubernetes we have the concept of [namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) to organize things. By default we interact with `default`.\n", + "\n", + "```bash\n", + "kubectl get pods --all-namespaces \n", + "```\n", + "\n", + "\n", + "### Understanding the Setup\n", + "\n", + "You are running on a single AWS EC2 instance with 64 cores. It is a Graviton 3 (ARM) instance. Directly installed on that instance is Flux, and the Jupyter notebook was started with `flux start --test-size=4`, meaning we are already inside of a Flux instance to emulate a batch job. We can see our Flux resources:\n", + "\n", + "```bash\n", + "flux resource list\n", + " STATE NNODES NCORES NGPUS NODELIST\n", + " free 1 64 0 ip-10-0-25-10\n", + " allocated 0 0 0 \n", + " down 0 0 0 \n", + "```\n", + "\n", + "We have deployed user-space Kubernetes inside of the Flux instance (job) and we can see that one Usernetes \"node\" is mapped to our single instance node.\n", + "\n", + "```bash\n", + "kubectl get nodes -o wide\n", + "```\n", + "```console\n", + "NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\n", + "u7s-ip-10-0-25-10 Ready control-plane 5h16m v1.33.1 10.0.25.10 Debian GNU/Linux 12 (bookworm) 6.8.0-1029-aws containerd://2.1.1\n", + "```\n", + "\n", + "If we had a job with multiple nodes, we would see a `control-plane` role along with worker roles! For our tutorial today we just have one control plane that will also function as a worker.\n", + "\n", + "\n", + "### Debugging Tips 🪲\n", + "\n", + "When something isn't working, here is a series of logical things to come back to look at. First, the pod logs, or metadata in YAML.\n", + "\n", + "```bash\n", + "# Pod logs, one shot\n", + "kubectl logs \n", + "\n", + "# Pod logs, dangling\n", + "kubectl logs -f\n", + "\n", + "# YAML manifest\n", + "kubectl get pod -o yaml\n", + "```\n", + "\n", + "You might also want to use `describe` to see events.\n", + "\n", + "```bash\n", + "kubectl describe pods \n", + "```\n", + "\n", + "Often there is an associated service not working. Look for it, and then again use logs and describe to see what might be going on.\n", + "\n", + "```bash\n", + "kubectl get pods --all-namespaces\n", + "```\n", + "\n", + "When you use a `Deployment` or `Job` or `Service` it is often helpful to do the equivalent `get` or `describe` for that abstraction." + ] + }, + { + "cell_type": "markdown", + "id": "98c4254f-6563-42ce-b4a0-366b6dab3d8d", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## 2. Run LAMMPS with Flux\n", + "\n", + "
\n", + "Description: Running LAMMPS with Flux in two ways 🍳 -- directly on the virtual machine, analogous to \"bare metal\" and then in user-space Kubernetes.\n", + "
\n", + "\n", + "LAMMPS -- the Large-scale Atomic/Molecular Massively Parallel Simulator -- is a widely used molecular dynamics (MD) open-source code. You can learn more about it [here](https://www.lammps.org). Let's start with a simple LAMMPS run, specifically LAMMPS with Flux Framework. This would be akin to sitting in an allocation you've created and interacting with your workload manager. First, inspect the resources that you have.\n", + "\n", + "```bash\n", + "flux resource list\n", + "```\n", + "\n", + "Run a LAMMPS job that uses them!\n", + "\n", + "```bash\n", + "flux run -N1 -n 64 -o cpu-affinity=per-task --cwd /opt/lammps/examples/reaxff/HNS lmp -v x 4 -v y 4 -v z 4 -in in.reaxff.hns -nocite\n", + "```\n", + "\n", + "Just as we learned in the previous tutorial, if you change `flux run` to `flux submit` the job will be non-blocking. You can also change the LAMMPS problem size to be larger to have a longer running time. \n", + "\n", + "### Flux in Kubernetes\n", + "Next, we are going to make a [turducken](https://en.wikipedia.org/wiki/Turducken) - running Flux in Kubernetes, which (in our HPC setups) is already running under Flux! \n", + "If we had more than one physical node, this would give us a powerful means to run HPC workloads in Kubernetes, with features that HPC cannot easily support such as elasticity and dynamism, declarative management, and modularity. \n", + "\n", + "\n", + " \n", + "\n", + " \n", + " \n", + "
Flux Framework and Usernetes setup. Your virtual machine is provisioned with both the workload manager Flux\n", + "Framework and User-space Kubernetes (1). We are emulating in this notebook you, the HPC user, running a batch job with Flux that has brought up your own user-space Kubernetes cluster (2). We will then deploy the Flux Operator (3) inside that cluster to run LAMMPS.
\n", + "\n", + "Let's install the Flux Operator. Note we are installing for ARM.\n", + "\n", + "```bash\n", + "kubectl apply -f https://raw.githubusercontent.com/flux-framework/flux-operator/refs/heads/main/examples/dist/flux-operator-arm.yaml\n", + "```\n", + "\n", + "If you haven't, make sure you CD to the chapter 4 tutorial directory.\n", + "\n", + "```bash\n", + "cd tutorial/ch4/\n", + "```\n", + "\n", + "Create the Flux MiniCluster, which is the Custom Resource Definition (CRD) that the Flux Operator manages. This will take about 2 minutes, 20 seconds to go from creation to running, and most of that time is to pull the image.\n", + "\n", + "```bash\n", + "kubectl apply -f flux-minicluster-lammps.yaml\n", + "```\n", + "\n", + "You can use `kubectl get pods` to watch the pods transition from `Init:0/1` (this is where we add Flux to the application container and configure the cluster) to `PodInitializing` (this is when your application container is being pulled) to `Running`. This entire sequence for this image takes approximately 3 minutes. Try using `--watch` to easily monitor for updates.\n", + "\n", + "```bash\n", + "kubectl get pods --watch\n", + "```\n", + "When you see `Running` you can press Control+C.\n", + "\n", + "Here is a way to use `kubectl get pods` with jq to programmatically get the lead broker pod identifier, which we can use to stream logs and watch LAMMPS output.\n", + "\n", + "```bash\n", + "lead_broker=$(kubectl get pods -o json | jq -r .items[0].metadata.name)\n", + "kubectl logs $lead_broker -f\n", + "```\n", + "\n", + "And when you are done, clean up the MiniCluster.\n", + "\n", + "```bash\n", + "kubectl delete -f ./flux-minicluster-lammps.yaml\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "2e5aefd2-a0f0-4e90-9522-82589f614787", + "metadata": {}, + "source": [ + "## 3. Run an AI/ML Training Job\n", + "\n", + "
\n", + "Description: Running AI/ML training jobs in Kubernetes is a first class citizen.\n", + "
\n", + "\n", + "The newly released [Kubeflow Trainer](https://www.kubeflow.org/docs/components/trainer/getting-started/) project makes it easy to run Kubernetes components, specifically for Artificial Intelligence and Machine Learning workloads (AI/ML) in Kubernetes directly from Python. In your terminal to the left, use `kubectl` to install the Kubeflow Training Operator: \n", + "\n", + "```bash\n", + "# This is for JobSet and the Trainer Manager\n", + "VERSION=v2.0.0\n", + "kubectl apply --server-side -k \"https://github.com/kubeflow/trainer.git/manifests/overlays/manager?ref=${VERSION}\"\n", + "\n", + "# This is for the runtimes (we need to give the webhook some time to create)\n", + "sleep 5\n", + "kubectl apply --server-side -k \"https://github.com/kubeflow/trainer.git/manifests/overlays/runtimes?ref=${VERSION}\"\n", + "```\n", + "\n", + "If you get a `failed calling webhook` error, wait 30 seconds and try again. Hooks sometimes have a delay in starting up.\n", + "Next, let's run Mnist training. Mnist is a well-known [dataset of handwritten digits](https://en.wikipedia.org/wiki/MNIST_database) used for machine learning tasks. We will be using Kubeflow, and using YAML for this tutorial. Note that if you like Python, the entire interaction of using Kubeflow in Kubernetes can be done using the [Python SDK](https://www.kubeflow.org/docs/components/trainer/getting-started/)." + ] + }, + { + "cell_type": "markdown", + "id": "62c41285-4850-455d-a729-b1e06dda7ab0", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### Run MNIST\n", + "\n", + "While we can use the Python SDK for all our interactions, let's create the job the \"old school\" way - by applying a YAML file. Take a look at [pytorch-mnist.yaml](pytorch-mnist.yaml) and then in your terminal, run the job in your cluster by using `kubectl apply` with `-f` for a file.\n", + "\n", + "```bash\n", + "kubectl apply -f ./pytorch-mnist.yaml\n", + "```\n", + "\n", + "To see the pods, you can use `kubectl get` on the Pod resource type. Note that we will have two. Index 0 is the master, and 1 is the worker.\n", + "\n", + "```bash\n", + "kubectl get pods\n", + "\n", + "# More information about the hosts in \"output wide\" mode\n", + "kubectl get pods -o wide\n", + "```\n", + "\n", + "And then get the pod identifier and look at the output. The `-f` will keep the output streaming.\n", + "\n", + "```bash\n", + "kubectl logs pytorch-simple-node-0-0-xxxx -f\n", + "```\n", + "\n", + "When the logs appear to be done, check the pods to see they are `Completed`\n", + "\n", + "```bash\n", + "kubectl get pods\n", + "```\n", + "\n", + "When you are ready to clean up, just `kubectl delete` the same file. Note that a pod in `Completed` state does not consume resources.\n", + "\n", + "```bash\n", + "kubectl delete -f pytorch-mnist.yaml\n", + "```\n", + "\n", + "Congratulations - you just ran your first AI/ML Job in User-space Kubernetes!" + ] + }, + { + "cell_type": "markdown", + "id": "93bae8ea-99f5-4f33-bd0b-90fa80afc3e2", + "metadata": {}, + "source": [ + "## 4. Run Simulations alongside an AI/ML Model Server\n", + "\n", + "
\n", + "Description: Usernetes is powerful to provide a means to run AI/ML services alongside traditional HPC.\n", + "
\n", + "\n", + "The most likely use case for user-space Kubernetes working with HPC is supporting services for your job simulations or workloads. As an example, you might want to deploy a database, message queue, or model server. For this example, we will deploy a [streaming ML model server](https://github.com/converged-computing/lammps-stream-ml/) backed by [RiverML](https://riverml.xyz) that allows you to build models that predict LAMMPS running time from input parameters X, Y, and Z. \n", + "\n", + "### Setup of Server\n", + "\n", + "While there are many ways to expose service ports, we will use a simple means to enable ingress via Nginx.\n", + "\n", + "```bash\n", + "kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml\n", + "kubectl wait --namespace ingress-nginx \\\n", + " --for=condition=ready pod \\\n", + " --selector=app.kubernetes.io/component=controller \\\n", + " --timeout=90s\n", + "```\n", + "\n", + "The second command above ensures that the container is `Running` before we continue. Let's next deploy the ML server that will provide River models.\n", + "\n", + "```bash\n", + "kubectl apply -f ml-server-deployment.yaml\n", + "```\n", + "\n", + "Take a look at the service and ingress that are allowing for us to interact with the service, and when the ml-server-xxxx container is running, take a look at its logs to see the database being created and service starting.\n", + "\n", + "```bash\n", + "kubectl get service ml-service-endpoint\n", + "kubectl get ingress ml-server-ingress\n", + "```\n", + "\n", + "When you send a request to your node's public IP address on port 80, the flow is:\n", + "\n", + "```console\n", + "Your Request -> Host Port 80 -> Ingress NGINX Pod -> ml-service-endpoint (Service) -> ml-server Pod (on port 8080)\n", + "```\n", + "\n", + "There are a lot of layers! Importantly, when we run HPC applications like simulations inside of Usernetes, we use a host bypass mechanism (e.g., EFA or Infiniband) that will not be subject to the overhead added by [slirp4netns](https://arxiv.org/html/2402.00365v1).\n", + "\n", + "### Test Server\n", + "\n", + "Let's test it! The `/api` endpoint should deliver metadata about the service.\n", + "\n", + "```bash\n", + "curl -ks localhost/api/ | jq\n", + "```\n", + "```python\n", + "{\n", + " \"id\": \"django_river_ml\",\n", + " \"status\": \"running\",\n", + " \"name\": \"Django River ML Endpoint\",\n", + " \"description\": \"This service provides an api for models\",\n", + " \"documentationUrl\": \"https://vsoch.github.io/django-river-ml\",\n", + " \"storage\": \"shelve\",\n", + " \"river_version\": \"0.21.0\",\n", + " \"version\": \"0.0.21\"\n", + "}\n", + "```\n", + "\n", + "Awesome! Let's next create our models. We are going to create [three regression](https://riverml.xyz/latest/api/linear-model/LinearRegression/) types. You can take a look at [model-scripts/1-create-models.py](model-scripts/1-create-models.py) to see how we will do that. River is akin to scikit-learn and other libraries that can create models from scratch or load on demand. We are creating them from scratch.\n", + "\n", + "```bash\n", + "python3 model-scripts/1-create-models.py\n", + "```\n", + "\n", + "We are next going to train our models directly on bare metal. We will submit jobs to Flux to run LAMMPS. Each will randomly select problem sizes, run, and send the features (X, Y, and Z problem size) and the value we want to predict, Y (the running time) to all the models. in our server. The default number of iterations is 20, but of course, for a better model you might consider increasing it.\n", + "\n", + "```bash\n", + "# This is the default\n", + "python3 model-scripts/2-run-lammps-flux.py train --iters 20\n", + "\n", + "# This would be a better model (but take longer)\n", + "python3 model-scripts/2-run-lammps-flux.py train --iters 100\n", + "```\n", + "\n", + "Once your models are trained, let's create predictions to test. This will save an output file to your local machine that we can generate plots with.\n", + "\n", + "```bash\n", + "python3 model-scripts/2-run-lammps-flux.py predict --out test-predict.json\n", + "```\n", + "\n", + "### Example Results\n", + "\n", + "Here are metrics for models trained on `t4g.2xlarge` with a few hundred iterations.\n", + "\n", + "```console\n", + "⭐️ Performance for: angry-truffle\n", + " R Squared Error: 0.6087271917414379\n", + " Mean Squared Error: 4.0731499339716315\n", + " Mean Absolute Error: 1.6454122148608918\n", + " Root Mean Squared Error: 2.0182046313423303\n", + "\n", + "⭐️ Performance for: frigid-nalgas\n", + " R Squared Error: -1.146171741238755\n", + " Mean Squared Error: 22.34164782629544\n", + " Mean Absolute Error: 4.571366798469615\n", + " Root Mean Squared Error: 4.726695233066697\n", + "\n", + "⭐️ Performance for: gassy-nunchucks\n", + " R Squared Error: 0.8824891368445993\n", + " Mean Squared Error: 1.2232880854477222\n", + " Mean Absolute Error: 0.7817525756655499\n", + " Root Mean Squared Error: 1.1060235465159511\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "26dfdea4-d270-48c4-a10d-c6804d4500a5", + "metadata": {}, + "source": [ + "## 5. Run MuMMI Components with the Flux Operator\n", + "\n", + "
\n", + "Description: Orchestrate MuMMI components with a an entire HPC cluster (1 node) in Kubernetes with the Flux Operator.\n", + "
\n", + "\n", + "This is an advanced example provided if you get through all of the above and want to learn more! For this step, we are going to use the Flux Operator to run an example component from a well-known complex workflow, MuMMI. \n", + "\n", + "\n", + "\n", + " \n", + "\n", + " \n", + " \n", + "
MuMMI and its mini variant use a custom workload manager to orchestrate simulations leveraging Flux and backed by a message queue and the filesystem. Running in Kubernetes, we use an OCI registry to share assets between nodes, and a state machine design instead of a message queue.
\n", + "\n", + "The components include:\n", + "\n", + "- `mlrunner`: This is a machine learning runner that generates simulation data to kick off a sequence of steps.\n", + "- `createsims`: Simulation setup that follows the machine learning step.\n", + "- `cganalysis`: Simulation (runs for 6 minutes with our configuration) but can take 12+ hours on HPC.\n", + "\n", + "We will run the `createsims` step, which provides interesting (and fun) output and will run for approximately 20 minutes.\n", + "\n", + "```bash\n", + "# Run the createsims step, the second step\n", + "kubectl apply -f flux-mummi-createsims.yaml\n", + "```\n", + "\n", + "The `mlrunner` and `cganalysis` steps included in [extra/mummi-components](extra/mummi-components) can be run if you are interested. The model provided in the `mlrunner` container takes longer (4m54s) to pull. The `mlrunner` will extract a model and run quickly (under 20 seconds), the `createsims` setup takes approximately 10 minutes, and `cganysis` is configured to run in ~6. For any component you choose, see logs like this:\n", + "\n", + "```bash\n", + "kubectl logs mlrunner-0-xxxx -f\n", + "kubectl logs createsims-0-xxxx -f\n", + "kubectl logs cganalysis-0-xxxx -f\n", + "```" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/2026/HPCIC-AWS/tutorial/ch4/extra/mummi-components/flux-mummi-cganalysis.yaml b/2026/HPCIC-AWS/tutorial/ch4/extra/mummi-components/flux-mummi-cganalysis.yaml new file mode 100644 index 00000000..fa75cbd9 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/extra/mummi-components/flux-mummi-cganalysis.yaml @@ -0,0 +1,22 @@ +apiVersion: flux-framework.org/v1alpha2 +kind: MiniCluster +metadata: + name: cganalysis +spec: + size: 1 + # Setting tasks to 0 uses what is found on the node. + tasks: 0 + logging: + quiet: true + + flux: + container: + image: ghcr.io/converged-computing/flux-view-rocky:arm-9 + + containers: + - image: ghcr.io/converged-computing/sc25-flux-eks:cganalysis-arm + command: bash /entrypoint.sh + volumes: + shared-memory: + emptyDir: true + emptyDirMedium: "memory" diff --git a/2026/HPCIC-AWS/tutorial/ch4/extra/mummi-components/flux-mummi-mlrunner.yaml b/2026/HPCIC-AWS/tutorial/ch4/extra/mummi-components/flux-mummi-mlrunner.yaml new file mode 100644 index 00000000..0807260f --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/extra/mummi-components/flux-mummi-mlrunner.yaml @@ -0,0 +1,23 @@ + +apiVersion: flux-framework.org/v1alpha2 +kind: MiniCluster +metadata: + name: mlrunner +spec: + size: 1 + # Setting tasks to 0 uses what is found on the node (avoiding the flux default of 1) + tasks: 0 + logging: + quiet: true + + flux: + container: + image: ghcr.io/converged-computing/flux-view-rocky:arm-9 + + containers: + - image: ghcr.io/converged-computing/sc25-flux-eks:mlrunner-arm + command: /root/.cargo/bin/pixi run --manifest-path /pixi-env/pixi.toml bash /entrypoint.sh + volumes: + shared-memory: + emptyDir: true + emptyDirMedium: "memory" diff --git a/2026/HPCIC-AWS/tutorial/ch4/extra/usernetes-load.sh b/2026/HPCIC-AWS/tutorial/ch4/extra/usernetes-load.sh new file mode 100755 index 00000000..8960577c --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/extra/usernetes-load.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Load a container into usernetes. +# This is intended for the HPCIC 25 tutorial, hence hard coded paths. + +URI=${1:-"ghcr.io/converged-computing/flux-view-rocky:arm-9"} +SAVE_URI=$(echo $URI | tr '/:' '_-').tar +mkdir -p /home/ubuntu/usernetes/images +docker pull $URI +echo "Saving ${URI} to ${SAVE_URI} for loading..." +docker save -o /home/ubuntu/usernetes/images/${SAVE_URI} ${URI} + +# Using the shared path (usernetes root) tell containerd to load it +echo "Importing ${URI} into usernetes node" +docker exec -it usernetes-node-1 ctr --namespace k8s.io image import /usernetes/images/${SAVE_URI} +docker exec -it usernetes-node-1 crictl images | grep ${URI} + +# Times hpc7g with g3 +# make up -> cluster 116 seconds +# pulling mlrunner: 5m55s to running +# pull to load lammps efa container: 7m +# just to load from .tar: 2m 59s. diff --git a/2026/HPCIC-AWS/tutorial/ch4/flux-minicluster-lammps.yaml b/2026/HPCIC-AWS/tutorial/ch4/flux-minicluster-lammps.yaml new file mode 100644 index 00000000..5d1e916c --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/flux-minicluster-lammps.yaml @@ -0,0 +1,34 @@ +apiVersion: flux-framework.org/v1alpha2 +kind: MiniCluster +metadata: + name: flux-sample +spec: + size: 1 + tasks: 64 + + # If quiet is false, we see all flux logging + logging: + quiet: true + + # The view should match the architecture of the application image. + # You aren't required to use a view for Flux + # You can also install to your application container + flux: + optionFlags: -o cpu-affinity=per-task + container: + image: ghcr.io/converged-computing/flux-view-rocky:arm-9 + + # This container is built for AWS EFA with libfabric + containers: + # This was built on hpc7g + - image: ghcr.io/converged-computing/lammps-reax-efa:ubuntu2404-efa + + # You can set the working directory if your container WORKDIR is not correct. + workingDir: /opt/lammps/examples/reaxff/HNS + command: lmp -v x 4 -v y 4 -v z 4 -in in.reaxff.hns -nocite + + # This is more expert optimization to ensure /dev/shm does not limit efa + volumes: + shared-memory: + emptyDir: true + emptyDirMedium: "memory" diff --git a/2026/HPCIC-AWS/tutorial/ch4/flux-mummi-createsims.yaml b/2026/HPCIC-AWS/tutorial/ch4/flux-mummi-createsims.yaml new file mode 100644 index 00000000..fc45a43b --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/flux-mummi-createsims.yaml @@ -0,0 +1,22 @@ +apiVersion: flux-framework.org/v1alpha2 +kind: MiniCluster +metadata: + name: createsims +spec: + size: 1 + # Setting tasks to 0 uses what is found on the node. + tasks: 0 + logging: + quiet: true + + flux: + container: + image: ghcr.io/converged-computing/flux-view-rocky:arm-9 + + containers: + - image: ghcr.io/converged-computing/sc25-flux-eks:createsims-arm + command: bash /entrypoint.sh + volumes: + shared-memory: + emptyDir: true + emptyDirMedium: "memory" diff --git a/2026/HPCIC-AWS/tutorial/ch4/img/flux-usernetes-turkducken.png b/2026/HPCIC-AWS/tutorial/ch4/img/flux-usernetes-turkducken.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8a1258e1f9e0067dc62a120a55d34a058c298e GIT binary patch literal 102609 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

x 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¾v+s+Ppn(SJWpsJzaR{XQn!fOH^%trZ9$2mupNht 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 z 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 literal 0 HcmV?d00001 diff --git a/2026/HPCIC-AWS/tutorial/ch4/img/mummi.svg b/2026/HPCIC-AWS/tutorial/ch4/img/mummi.svg new file mode 100644 index 00000000..8a4bfe7d --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/img/mummi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2026/HPCIC-AWS/tutorial/ch4/img/usernetes-flux.png b/2026/HPCIC-AWS/tutorial/ch4/img/usernetes-flux.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0b5c370ca1ef3d577ecf144c8a6a122d329e1a GIT binary patch literal 59196 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 i?9%KwWC)RaJhDWdYe0_zD^H;Ed5kZU3Cg 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 literal 0 HcmV?d00001 diff --git a/2026/HPCIC-AWS/tutorial/ch4/ml-server-deployment.yaml b/2026/HPCIC-AWS/tutorial/ch4/ml-server-deployment.yaml new file mode 100644 index 00000000..d4d70eca --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/ml-server-deployment.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ml-server +spec: + selector: + matchLabels: + run: ml-service + replicas: 1 + template: + metadata: + labels: + run: ml-service + spec: + containers: + - name: ml-service + image: ghcr.io/converged-computing/lammps-stream-ml:server-arm + env: + - name: SHELVE_SECRET_KEY + value: noodles + - name: JWT_SECRET_KEY + value: noodles + - name: SECRET_KEY + value: "qbg(sz#n+4ji)(16xrn!gti%^ig#a5ni!sxg18nv7sv*n#h*7%" + # We don't use hostPort here because we are using nginx ingress controller + ports: + - containerPort: 8080 +--- +apiVersion: v1 +kind: Service +metadata: + name: ml-service-endpoint # A name for the service +spec: + selector: + run: ml-service # This MUST match the labels on your pod + ports: + - protocol: TCP + # The port the service will listen on + port: 80 + # The port to forward traffic to on the pod + targetPort: 8080 +--- +# Ingress exposes the service to you +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ml-server-ingress +spec: + # This line is important for the NGINX ingress controller + ingressClassName: "nginx" + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + # Must match the Service name + name: ml-service-endpoint + port: + # Must match the Service's port + number: 80 + + diff --git a/2026/HPCIC-AWS/tutorial/ch4/model-scripts/1-create-models.py b/2026/HPCIC-AWS/tutorial/ch4/model-scripts/1-create-models.py new file mode 100644 index 00000000..1feac244 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/model-scripts/1-create-models.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +# This can be run from inside a client (or the lammps container) +# that has river and the client installed. + +import sys + +from river import linear_model, preprocessing +from riverapi.main import Client + +url = "http://localhost" +if len(sys.argv) > 1: + url = sys.argv[1] + +print(f"Preparing to create models for client URL {url}") + +# Connect to the server running here +cli = Client(url) + +# Upload several models to test for lammps - these are different kinds of regressions +regression_model = preprocessing.StandardScaler() | linear_model.LinearRegression( + intercept_lr=0.1 +) + +# That's kind of cool, although I'm not sure I like PA people, not sure how I feel about ML models :) +# https://www.geeksforgeeks.org/passive-aggressive-classifiers/ +pa_regression = model = linear_model.PARegressor( + C=0.01, mode=2, eps=0.1, learn_intercept=False +) + +# https://riverml.xyz/latest/api/linear-model/BayesianLinearRegression/ +bayesian_regression = linear_model.BayesianLinearRegression() + +for model in [regression_model, bayesian_regression, pa_regression]: + model_name = cli.upload_model(model, "regression") + print("Created model %s" % model_name) diff --git a/2026/HPCIC-AWS/tutorial/ch4/model-scripts/2-run-lammps-flux.py b/2026/HPCIC-AWS/tutorial/ch4/model-scripts/2-run-lammps-flux.py new file mode 100644 index 00000000..b019462f --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/model-scripts/2-run-lammps-flux.py @@ -0,0 +1,379 @@ +#!/usr/bin/env python3 + +# After the models are created with 1-create-models.py we can run +# this demo that will run lammps some number of times (in serial since I'm +# on my local machine) and use the matrix data for training the models it +# discovers. This script has combined the test and train functions to be +# able to use shared logic to run lammps (to avoid duplication) + +# This script requires the riverapi +# pip3 install riverapi + +import argparse +import random +import shutil +import subprocess +import json +import sys + +from riverapi.main import Client +from river import metrics + +# Find the software we need, flux and lammps +flux = shutil.which("flux") +lmp = shutil.which("lmp") + +if not flux or not lmp: + sys.exit("Cannot find flux or lmp executable.") + + +def get_parser(): + parser = argparse.ArgumentParser( + description="LAMMPS Run (Train or Test) Flux", + formatter_class=argparse.RawTextHelpFormatter, + ) + subparsers = parser.add_subparsers( + help="actions", + title="actions", + description="actions", + dest="command", + ) + + # print version and exit + train = subparsers.add_parser("train", description="train models") + test = subparsers.add_parser( + "predict", + description="test models by making predictions and comparing to truth", + ) + + # Add output file for test (actual and predictions) + test.add_argument( + "--out", + help="Output json to write actual and predicted values with x,y,z", + ) + + for command in [train, test]: + command.add_argument( + "--url", + help="URL where ml-server is deployed", + default="http://localhost", + ) + command.add_argument( + "--workdir", + default="/opt/lammps/examples/reaxff/HNS", + help="Working directory to run lammps from.", + ) + command.add_argument( + "--in", + dest="inputs", + default="in.reaxff.hns -nocite", + help="Input and parameters for lammps", + ) + command.add_argument( + "--nodes", + help="number of nodes (N)", + default=1, + type=int, + ) + command.add_argument( + "--log", + help="write log to path", + default="/tmp/lammps.log", + ) + command.add_argument( + "--np", + help="number of processes per node", + default=64, + type=int, + ) + + # Mins and maxes for each parameter - I decided to allow up to 32, 32, 32 for testing. + # On the cluster with cpu affinity set this is 4 minutes 41 seconds + command.add_argument( + "--x-min", + dest="x_min", + help="min dimension for x", + default=1, + type=int, + ) + command.add_argument( + "--x-max", + dest="x_max", + help="max dimension for x", + default=3, + type=int, + ) + command.add_argument( + "--y-min", + dest="y_min", + help="min dimension for y", + default=1, + type=int, + ) + command.add_argument( + "--y-max", + dest="y_max", + help="max dimension for y", + default=3, + type=int, + ) + command.add_argument( + "--z-min", + dest="z_min", + help="min dimension for z", + default=1, + type=int, + ) + command.add_argument( + "--z-max", + dest="z_max", + help="max dimension for z", + default=3, + type=int, + ) + command.add_argument( + "--iters", + help="iterations to run of lammps", + default=20, + type=int, + ) + return parser + + +def validate(args): + for dim, min_value, max_value in [ + ["x", args.x_min, args.x_max], + ["y", args.y_min, args.y_max], + ["z", args.z_min, args.z_max], + ]: + if min_value < 1: + sys.exit(f"Min value for {dim} must be greater than or equal to 1") + if min_value >= max_value: + sys.exit(f"Max value for {dim} must be greater than or equal to min") + if max_value < 1: + sys.exit( + f"Max for {dim} also needs to be positive >1. Also, we should never get here." + ) + + +def parse_time(line): + line = line.rsplit(" ", 1)[-1] + hours, minutes, seconds = line.split(":") + return (int(hours) * 60 * 60) + (int(minutes) * 60) + int(seconds) + + +def run_lammps(args): + """ + Shared function to run lammps for train or testing. + + We return (yield) chosen x,y,z and time in seconds as we run + """ + # Input files + inputs = args.inputs.split(" ") + + # Sanity check values + validate(args) + + # Choose ranges to allow for each of x, y, and z. + x_choices = list(range(args.x_min, args.x_max + 1)) + y_choices = list(range(args.y_min, args.y_max + 1)) + z_choices = list(range(args.z_min, args.z_max + 1)) + + for i in range(args.iters): + x = random.choice(x_choices) + y = random.choice(y_choices) + z = random.choice(z_choices) + print(f"\n🥑 Running iteration {i} with chosen x: {x} y: {y} z: {z}") + + # flux run -N 1 --ntasks 64 -c 1 -o cpu-affinity=per-task --cwd /opt/lammps/examples/reaxff/HNS lmp -v x 32 -v y 8 -v z 16 -in in.reaxff.hns -nocite + # Separate commands for easier printing + flux_cmd = [ + flux, + "run", + "-N", + str(args.nodes), + "--cwd", + args.workdir, + "--ntasks", + str(args.np), + # These aren't exposed as options because we pretty much always want them + "-c", + "1", + "-o", + "cpu-affinity=per-task", + ] + lammps_cmd = [ + lmp, + "-v", + "x", + str(x), + "-v", + "y", + str(y), + "-v", + "z", + str(z), + "-log", + args.log, + "-in", + ] + inputs + + print(" flux => " + " ".join(flux_cmd)) + print(" lammps => " + " ".join(lammps_cmd)) + cmd = flux_cmd + lammps_cmd + p = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True + ) + + # This will hang until it's done, either submit or run + # We could save the log here, but I'm just going to grab the time + output, errors = p.communicate() + line = [x for x in output.split("\n") if x][-1] + + # Note this is currently written to run experiments, meaning we use all resources available + # for each run, and can just wait for the run and parse output. If you want to use flux submit, + # you can instead write each to a log file, read the log file, and parse the same. + if "total wall time" not in line.lower(): + print(f"Warning, there was an issue with iteration {i}") + print(output) + print(errors) + continue + + seconds = parse_time(line) + print(f" result => Lammps run took {seconds} seconds") + yield x, y, z, seconds + + +def make_prediction(cli, args, x, y, z): + """ + Make a prediction. + """ + test_x = {"x": x, "y": y, "z": z} + for model_name in cli.models()["models"]: + pred = cli.predict(model_name, x=test_x)["prediction"] + print(f"Model {model_name} predicts {pred}") + yield model_name, pred + + +def submit_train_result(cli, args, x, y, z, seconds): + """ + Submit a training result + """ + print(f"Preparing to send LAMMPS data to {args.url}") + + # Send this to the server to train each model + train_x = {"x": x, "y": y, "z": z} + for model_name in cli.models()["models"]: + print(f" Training {model_name} with {train_x} to predict {seconds}") + res = cli.learn(model_name, x=train_x, y=seconds) + if "successful learn" not in res.lower(): + print(f"Issue with learn: {res}") + + +def show_metrics(cli, y_true, y_pred): + """ + Show metrics (and return simple view for each model) + """ + results = {} + + # When we are done, calculate metrics for each + for model_name in cli.models()["models"]: + # Mean squared error + mse_metric = metrics.MSE() + + # Root mean squared error + rmse_metric = metrics.RMSE() + + # Mean absolute error + mae_metric = metrics.MAE() + + # Coefficient of determination () score - r squared + # proportion of the variance in the dependent variable that is predictable from the independent variable(s) + r2_metric = metrics.R2() + + for yt, yp in zip(y_true, y_pred[model_name]): + mse_metric.update(yt, yp) + rmse_metric.update(yt, yp) + mae_metric.update(yt, yp) + r2_metric.update(yt, yp) + + print(f"\n⭐️ Performance for: {model_name}") + print(f" R Squared Error: {r2_metric.get()}") + print(f" Mean Squared Error: {mse_metric.get()}") + print(f" Mean Absolute Error: {mae_metric.get()}") + print(f" Root Mean Squared Error: {rmse_metric.get()}") + + results[model_name] = { + "r_squared": r2_metric.get(), + "mean_squared_error": mse_metric.get(), + "mean_absolute_error": mae_metric.get(), + "root_mean_squared_error": rmse_metric.get(), + "stats": cli.stats(model_name), + "metrics": cli.metrics(model_name), + "model": cli.get_model_json(model_name), + "model_name": model_name, + } + return results + + +def write_output(filename, result): + """ + Write output to json file + """ + with open(filename, "w") as fd: + fd.write(json.dumps(result, indent=4)) + + +def main(): + parser = get_parser() + + # If an error occurs while parsing the arguments, the interpreter will exit with value 2 + args, _ = parser.parse_known_args() + + # I actually don't think I need this check. + if not args.command: + sys.exit("Please run and specify 'train' or 'test'") + if args.command not in ["train", "predict"]: + sys.exit(f"{args.command} is not recognized.") + + print(f"Preparing to run lammps and {args.command} models with Flux") + + # Connect to the server running here + cli = Client(args.url) + + # Do a test to the client + res = cli.info() + print(json.dumps(res, indent=4)) + + # If we are predicting, we will save true / predicted values + # https://riverml.xyz/latest/api/metrics/Accuracy/ + # Keep a listing actual and predictions (predictions namespaced by model) + y_true = [] + y_pred = {} + dims = [] + + for x, y, z, seconds in run_lammps(args): + # If we are training, we are done here! + if args.command == "train": + submit_train_result(cli, args, x, y, z, seconds) + else: + # Add true value to vector, and save dimensions + y_true.append(seconds) + dims.append({"x": x, "y": y, "z": z}) + + # Make a prediction + for model_name, pred in make_prediction(cli, args, x, y, z): + if model_name not in y_pred: + y_pred[model_name] = [] + y_pred[model_name].append(pred) + + # When we are finished running, if we are predicting, give final results + if args.command == "predict": + results = show_metrics(cli, y_true, y_pred) + if args.out is not None: + results.update({"dims": dims, "y_pred": y_pred, "y_true": y_true}) + write_output(args.out, results) + + +if __name__ == "__main__": + main() diff --git a/2026/HPCIC-AWS/tutorial/ch4/pytorch-mnist.yaml b/2026/HPCIC-AWS/tutorial/ch4/pytorch-mnist.yaml new file mode 100644 index 00000000..a5edd4ac --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/pytorch-mnist.yaml @@ -0,0 +1,14 @@ +apiVersion: trainer.kubeflow.org/v1alpha1 +kind: TrainJob +metadata: + name: pytorch-simple +spec: + runtimeRef: + name: torch-distributed + trainer: + numNodes: 2 + image: kubeflowkatib/pytorch-mnist-cpu:v1beta1-a524f33 + command: + - "python3" + - "/opt/pytorch-mnist/mnist.py" + - "--epochs=1" diff --git a/2026/HPCIC-AWS/tutorial/ch4/usernetes-workspace.jupyterlab-workspace b/2026/HPCIC-AWS/tutorial/ch4/usernetes-workspace.jupyterlab-workspace new file mode 100644 index 00000000..dab57ec1 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch4/usernetes-workspace.jupyterlab-workspace @@ -0,0 +1 @@ +{"data":{"file-browser-filebrowser:columns":{"sizes":{"name":139.5,"file_size":null,"is_selected":18,"last_modified":86.5}},"layout-restorer:data":{"main":{"dock":{"type":"split-area","orientation":"horizontal","sizes":[0.41970629208139754,0.5802937079186026],"children":[{"type":"tab-area","currentIndex":0,"widgets":["terminal:1"]},{"type":"tab-area","currentIndex":0,"widgets":["notebook:tutorial/ch4/04_flux_framework_usernetes.ipynb"]}]},"current":"terminal:1"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"],"widgetStates":{"jp-running-sessions":{"sizes":[0.14285714285714285,0.14285714285714285,0.14285714285714285,0.14285714285714285,0.14285714285714285,0.14285714285714285,0.14285714285714285],"expansionStates":[false,false,false,false,false,false,false]},"extensionmanager.main-view":{"sizes":[0.3333333333333333,0.3333333333333333,0.3333333333333333],"expansionStates":[false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector","debugger-sidebar"],"widgetStates":{"jp-debugger-sidebar":{"sizes":[0.2,0.2,0.2,0.2,0.2],"expansionStates":[false,false,false,false,false]}}},"relativeSizes":[0.19204284621270085,0.8079571537872992,0],"top":{"simpleVisibility":true}},"docmanager:recents":{"opened":[{"path":"tutorial/ch4","contentType":"directory","root":"/home/ubuntu"},{"path":"tutorial/ch4/04_flux_framework_usernetes.ipynb","contentType":"notebook","factory":"Notebook","root":"/home/ubuntu"},{"path":"tutorial/ch4/Untitled.ipynb","contentType":"notebook","factory":"Notebook","root":"/home/ubuntu"}],"closed":[]},"file-browser-filebrowser:cwd":{"path":"tutorial/ch4"},"notebook:tutorial/ch4/04_flux_framework_usernetes.ipynb":{"data":{"path":"tutorial/ch4/04_flux_framework_usernetes.ipynb","factory":"Notebook"}},"terminal:1":{"data":{"name":"1"}}},"metadata":{"id":"usernetes-workspace","last_modified":"2025-08-02T04:09:20.922759+00:00","created":"2025-08-02T04:09:20.922759+00:00"}} \ No newline at end of file diff --git a/2026/HPCIC-AWS/tutorial/ch5/05_flux_quantum_braket.ipynb b/2026/HPCIC-AWS/tutorial/ch5/05_flux_quantum_braket.ipynb new file mode 100644 index 00000000..c1e6e75e --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch5/05_flux_quantum_braket.ipynb @@ -0,0 +1,271 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

\n", + "\n", + "# Chapter 5: Hybrid Quantum-Classical Workflows with Flux\n", + "\n", + "In the previous chapter you saw Flux run classical HPC and AI/ML workloads and orchestrate user-space Kubernetes. In this chapter we add a *quantum* backend to the mix. We will run a **Quantum Approximate Optimization Algorithm (QAOA)** for graph max-cut, a hybrid workload where a classical optimizer running under Flux repeatedly evaluates a quantum circuit on a **quantum simulator**.\n", + "\n", + "Everything in this chapter runs on a **local simulator** that ships with the [AWS Braket SDK](https://github.com/amazon-braket/amazon-braket-sdk-python). It executes right here on the VM, so there is:\n", + "- **no AWS account or credentials required**,\n", + "- **no network calls**, and\n", + "- **no cost**.\n", + "\n", + "In this tutorial we will:\n", + "1. Confirm the local simulator is available\n", + "2. Run QAOA under Flux with `flux run`\n", + "3. Submit it non-blocking and inspect it with `flux submit` / `flux jobs`\n", + "4. Scale out to an **ensemble** of quantum simulations with Flux\n", + "5. (Advanced) Run the same job as a **container in Usernetes**\n", + "
\n", + "\n", + "The classical part (building circuits, the COBYLA optimizer, computing the cut) and the quantum part (executing the circuit, sampling measurements) both run on your Flux-managed VM. This is exactly the hybrid quantum-classical pattern used in real research, and it maps naturally onto an HPC workload manager: Flux schedules the classical driver, and each circuit evaluation is a call into the quantum simulator.\n", + "\n", + "The application here is a condensed, single-file version of the pipeline in [converged-computing/quantum-braket](https://github.com/converged-computing/quantum-braket).\n", + "\n", + "If you haven't yet, open a Jupyter terminal alongside this notebook so you can copy-paste commands into it." + ], + "id": "cell-00" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Background: what is QAOA max-cut?\n", + "\n", + "**Max-cut** asks: given a graph, partition its nodes into two groups so that the number of edges crossing between the groups (the \"cut\") is as large as possible. It is a classic NP-hard combinatorial optimization problem.\n", + "\n", + "**QAOA** encodes each node as a qubit and builds a parameterized quantum circuit with two alternating layers: a *cost* layer (parameter `gamma`) and a *mixer* layer (parameter `beta`). Measuring the circuit yields bitstrings that assign each node to one of the two groups. A classical optimizer (here, COBYLA) adjusts `gamma` and `beta` to push the expected cut value higher.\n", + "\n", + "Each optimizer iteration builds one circuit, runs it on the quantum backend, gets back measurement counts, and computes the average cut. That is the hybrid loop, and it is what Flux will schedule for us.\n", + "\n", + "
\n", + "\u2705 Local and free. We use the Braket SDK's built-in local state-vector simulator. It runs the identical circuits an AWS device would, but entirely on this VM. No credentials, no network, no cost. (If you later want to run on real AWS Braket hardware or the cloud SV1 simulator, the same script supports it with a flag \u2014 see the optional appendix at the end.)\n", + "
" + ], + "id": "cell-01" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Setup\n", + "\n", + "Move into the chapter directory:\n", + "\n", + "```bash\n", + "cd ~/tutorial/ch5\n", + "```\n", + "\n", + "The Braket SDK and SciPy are pre-installed on the tutorial image. If for some reason they are missing, install them into your user environment (no AWS packages or configuration are needed):\n", + "\n", + "```bash\n", + "pip install --user amazon-braket-sdk scipy\n", + "```\n", + "\n", + "Confirm the local simulator works. This creates a tiny Bell-state circuit and samples it \u2014 a quick sanity check that runs in a fraction of a second, entirely locally:\n", + "\n", + "```bash\n", + "python3 -c \"\n", + "from braket.circuits import Circuit\n", + "from braket.devices import LocalSimulator\n", + "circ = Circuit().h(0).cnot(0, 1)\n", + "result = LocalSimulator().run(circ, shots=100).result()\n", + "print('Bell-state counts:', dict(result.measurement_counts))\n", + "\"\n", + "```\n", + "\n", + "You should see counts split between `00` and `11`, e.g. `{'00': 52, '11': 48}`. No AWS calls happen here." + ], + "id": "cell-02" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Run QAOA under Flux\n", + "\n", + "
\n", + "Description: Run the full hybrid loop as a Flux job. The classical optimizer and the quantum simulation both run locally; Flux schedules the driver just like any other job.\n", + "
\n", + "\n", + "We are already inside a Flux instance (the notebook was launched with `flux start`), so we can hand the driver to Flux. `flux run` blocks until the job finishes and streams its output:\n", + "\n", + "```bash\n", + "flux run python3 scripts/qaoa_maxcut.py --graph-nodes 6 --max-iter 5\n", + "```\n", + "\n", + "> **Note:** `--graph-nodes 6` is the *problem size* \u2014 a 6-vertex graph, i.e. 6 qubits. It has nothing to do with Flux compute nodes (this tutorial instance has **4**). Each `flux run` / `flux submit` here uses a single node and task unless you request more.\n", + "\n", + "You will see each evaluation print the current cut value as COBYLA searches, followed by a summary with the best cut and the approximation ratio. The backend defaults to `local`, so nothing leaves the VM.\n", + "\n", + "The script is a single file that generates a random 3-regular graph, builds the QAOA circuit, runs it on the local simulator, and drives the optimizer. Take a look:\n", + "\n", + "```bash\n", + "less scripts/qaoa_maxcut.py\n", + "```" + ], + "id": "cell-03" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Submit non-blocking with `flux submit`\n", + "\n", + "
\n", + "Description: Swap flux run for flux submit to queue the job without blocking. This is closer to how you would drive many circuit evaluations in a real workflow.\n", + "
\n", + "\n", + "```bash\n", + "# Submit without blocking; Flux returns a job ID immediately\n", + "flux submit --job-name qaoa python3 scripts/qaoa_maxcut.py --graph-nodes 6 --max-iter 5\n", + "\n", + "# Watch the job in the queue\n", + "flux jobs -a\n", + "\n", + "# Attach to the most recent job to see its output\n", + "flux job attach $(flux job last)\n", + "```" + ], + "id": "cell-04" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Scale out: an ensemble of quantum simulations with Flux\n", + "\n", + "
\n", + "Description: A key strength of a workload manager is running many independent jobs at once. Let's have Flux launch several QAOA instances \u2014 each on a different random graph \u2014 as a small ensemble.\n", + "
\n", + "\n", + "This mirrors the bulk-submit pattern from Chapter 2, but now each Flux job drives a quantum simulation:\n", + "\n", + "```bash\n", + "for seed in 1 2 3 4; do\n", + " flux submit -N1 --job-name qaoa-$seed \\\n", + " python3 scripts/qaoa_maxcut.py --graph-nodes 6 --max-iter 3 --seed $seed\n", + "done\n", + "\n", + "# See all four running/completed\n", + "flux jobs -a\n", + "```\n", + "\n", + "When they finish, inspect the result of any one of them:\n", + "\n", + "```bash\n", + "flux job attach $(flux jobs -a --no-header | awk 'NR==1{print $1}')\n", + "```\n", + "\n", + "Here `-N1` asks Flux for one node per job, so on this 4-node instance the four jobs run one-per-node at the same time. Each job independently builds and simulates its circuits, and Flux tracks them as a group. Conceptually this is how you would fan out a parameter sweep or a batch of variational circuits from an HPC scheduler \u2014 and because it is all local, you can run as many as you like for free." + ], + "id": "cell-05" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. (Advanced) Run as a container in Usernetes\n", + "\n", + "
\n", + "Description: Optional. Run the same QAOA job as a container inside the user-space Kubernetes cluster from Chapter 4. Because everything is local, there are no secrets and no credentials to manage \u2014 the pod just runs the simulator.\n", + "
\n", + "\n", + "Make sure Usernetes is running (from Chapter 4) and your kubeconfig is set:\n", + "\n", + "```bash\n", + "export KUBECONFIG=/home/ubuntu/usernetes/kubeconfig\n", + "kubectl get nodes\n", + "```\n", + "\n", + "We deliver the script to the pod with a ConfigMap (no image build required), then run it on a stock Python image:\n", + "\n", + "```bash\n", + "# Package the script as a ConfigMap\n", + "kubectl create configmap qaoa-script \\\n", + " --from-file=qaoa_maxcut.py=scripts/qaoa_maxcut.py \\\n", + " --dry-run=client -o yaml | kubectl apply -f -\n", + "\n", + "# Launch the Job (installs the SDK, then runs the local simulator)\n", + "kubectl apply -f braket-qaoa-local.yaml\n", + "```\n", + "\n", + "Watch it run and read the output:\n", + "\n", + "```bash\n", + "kubectl get pods -w\n", + "kubectl logs -f job/qaoa-local\n", + "```\n", + "\n", + "Clean up when you are done:\n", + "\n", + "```bash\n", + "kubectl delete -f braket-qaoa-local.yaml\n", + "kubectl delete configmap qaoa-script\n", + "```\n", + "\n", + "The pod makes no external calls beyond pulling the base image and pip packages, and it never handles AWS credentials." + ], + "id": "cell-06" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Wrap-up\n", + "\n", + "You just ran a hybrid quantum-classical optimization from an HPC workload manager, with no cloud account and no credentials:\n", + "\n", + "- The **classical driver** (circuit construction + COBYLA) ran as an ordinary Flux job.\n", + "- Each **circuit evaluation** ran on the **local** quantum simulator on the VM.\n", + "- Flux scheduled a **single run**, a **non-blocking submission**, and an **ensemble** of quantum jobs.\n", + "- The same work ran as a **container in Usernetes** \u2014 still credential-free.\n", + "\n", + "Thanks for following along!\n", + "\n", + "Please take our 2026 survey: https://converged-computing.org/community-survey\n", + "\n", + "---\n", + "\n", + "### Optional appendix: running on AWS Braket SV1\n", + "\n", + "If you have your own AWS Braket access and *want* to run the identical workload on the cloud SV1 state-vector simulator, the script supports it with a flag:\n", + "\n", + "```bash\n", + "flux run python3 scripts/qaoa_maxcut.py --backend sv1 --graph-nodes 6 --shots 100 --max-iter 5\n", + "```\n", + "\n", + "This path requires AWS credentials with Braket permissions and incurs a small per-minute cost (SV1 is billed at \\$0.075/minute in `us-east-1`, with a 1-hour/month free tier for the first 12 months; a run like this is a few cents at most). It is **not** required for the tutorial \u2014 the local simulator above covers everything we teach here. An example least-privilege IAM policy scoped to only the SV1 device is included in the repository at `ec2/jupyterhub-braket-policy.json` for administrators who choose to enable it." + ], + "id": "cell-07" + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/2026/HPCIC-AWS/tutorial/ch5/README.md b/2026/HPCIC-AWS/tutorial/ch5/README.md new file mode 100644 index 00000000..dcc1f092 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch5/README.md @@ -0,0 +1,46 @@ +# Chapter 5: Hybrid Quantum-Classical Workflows with Flux and AWS Braket + +This chapter adds a quantum backend to the tutorial. It runs a QAOA max-cut +optimization as a hybrid quantum-classical workflow: a classical COBYLA optimizer +scheduled by Flux repeatedly evaluates a quantum circuit on the AWS Braket **SV1** +state-vector simulator. + +The notebook, [05_flux_quantum_braket.ipynb](05_flux_quantum_braket.ipynb), walks +through five parts: + +1. Setup and confirming SV1 access +2. QAOA on the free **local** simulator under Flux (no cost) +3. QAOA on **AWS Braket SV1** under Flux +4. An **ensemble** of quantum tasks with Flux +5. (Advanced) The same pipeline as **containers in Usernetes** + +## Files + +- `scripts/qaoa_maxcut.py` — self-contained QAOA max-cut driver. Condenses the + four-stage pipeline from + [converged-computing/quantum-braket](https://github.com/converged-computing/quantum-braket) + (problem-generator → transpiler → gateway → optimizer) into one script that Flux + can launch. Supports `--backend local` (free) and `--backend sv1`. +- `braket-qaoa-pipeline.yaml` — the containerized pipeline as a Kubernetes Pod for + the optional Usernetes section, using the published + `ghcr.io/converged-computing/quantum-braket-*` images. + +## Credentials and IAM + +The tutorial VM has **no** stored AWS keys (`~/.aws` is removed at boot). It runs +with an IAM instance role whose only Braket permission is the SV1 device ARN +`arn:aws:braket:::device/quantum-simulator/amazon/sv1`. The Braket SDK picks up the +instance-role credentials automatically via instance metadata, so the notebook +never configures a key, and any attempt to reach another device is denied. + +The role's Braket + S3 permissions come from +[`../../ec2/jupyterhub-braket-policy.json`](../../ec2/jupyterhub-braket-policy.json). +See the top-level [README](../../README.md) for the one-time deployment commands +(attaching the policy and creating the Braket service-linked role). + +## Cost + +SV1 is billed at **$0.075 / minute** in `us-east-1`, with **one free hour of +simulation per month** for the first 12 months. The circuits here run in seconds, +so a full run is a few cents at most (often $0 under the free tier). Use the +`local` backend for cost-free testing. diff --git a/2026/HPCIC-AWS/tutorial/ch5/braket-qaoa-local.yaml b/2026/HPCIC-AWS/tutorial/ch5/braket-qaoa-local.yaml new file mode 100644 index 00000000..b3f74bf3 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch5/braket-qaoa-local.yaml @@ -0,0 +1,38 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: qaoa-local + labels: + app: quantum-braket +spec: + backoffLimit: 1 + template: + metadata: + labels: + app: quantum-braket + spec: + restartPolicy: Never + containers: + - name: qaoa + image: python:3.11-slim + # Runs the SAME qaoa_maxcut.py on the LOCAL Braket simulator inside the + # pod. There are no AWS calls and no credentials anywhere in this Job -- + # the script is delivered via the 'qaoa-script' ConfigMap (created from + # scripts/qaoa_maxcut.py) and mounted read-only at /app. + command: ["/bin/sh", "-c"] + args: + - | + set -e + pip install --quiet --no-cache-dir amazon-braket-sdk scipy + python3 /app/qaoa_maxcut.py --backend local --nodes 6 --shots 100 --max-iter 5 + env: + - name: BACKEND + value: "local" + volumeMounts: + - name: qaoa-script + mountPath: /app + readOnly: true + volumes: + - name: qaoa-script + configMap: + name: qaoa-script diff --git a/2026/HPCIC-AWS/tutorial/ch5/scripts/qaoa_maxcut.py b/2026/HPCIC-AWS/tutorial/ch5/scripts/qaoa_maxcut.py new file mode 100644 index 00000000..0cdc0172 --- /dev/null +++ b/2026/HPCIC-AWS/tutorial/ch5/scripts/qaoa_maxcut.py @@ -0,0 +1,279 @@ +#!/usr/bin/env python3 +""" +qaoa_maxcut.py -- a single-file QAOA max-cut demo for the Flux + Usernetes tutorial. + +This is a self-contained condensation of the four-stage pipeline from +https://github.com/converged-computing/quantum-braket +(problem-generator -> transpiler -> gateway -> optimizer) into one script so it +can be launched directly by Flux (``flux run`` / ``flux submit``) on the tutorial +VM. It builds a QAOA ansatz for max-cut on a random k-regular graph, evaluates it +on a quantum backend, and optimizes the variational parameters with COBYLA. + +Credentials +----------- +The default backend is the fully local simulator, which needs NO AWS account and +NO credentials. Nothing is configured or transmitted; the circuits run on this VM. + +The optional --backend sv1 path uses AWS Braket. Only use it if you have your own +Braket access; the tutorial itself never requires AWS credentials. (On an instance +that happens to carry a Braket-enabled IAM role, boto3 would pick that up +automatically via instance metadata -- but that is not needed for this tutorial.) + +Backends +-------- +--backend local Local state-vector simulator in the Braket SDK. No AWS calls, + no credentials, no cost. This is the DEFAULT and what the + tutorial uses throughout. +--backend sv1 (Optional) AWS Braket SV1 on-demand simulator. Requires AWS + Braket access and is billed per minute. Not used by the + tutorial by default. + +Cost +---- +The default local backend is free. The optional SV1 backend is $0.075/minute in +us-east-1 (with a 1-hour/month free tier for the first 12 months); a tiny circuit +runs in seconds, and the Braket Cost Tracker prints the estimate when used. + +Examples +-------- + # Local run (default, no AWS, no cost): full hybrid optimization + flux run python3 scripts/qaoa_maxcut.py --nodes 6 --max-iter 5 + + # Local, single circuit evaluation (no optimizer loop) + flux run python3 scripts/qaoa_maxcut.py --backend local --max-iter 0 + + # (Optional) real SV1 run, only if you have AWS Braket access + flux run python3 scripts/qaoa_maxcut.py --backend sv1 --nodes 6 --max-iter 5 + +Environment variables (overridden by CLI flags if given): + N_NODES, K_REGULAR, SEED, P_LAYERS, N_SHOTS, MAX_ITER, BRAKET_DEVICE, BACKEND +""" + +import argparse +import json +import math +import os +import random +import sys +import time + +SV1_ARN = "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + + +# --------------------------------------------------------------------------- # +# 1. Problem generation: random k-regular graph (from problem-generator) +# --------------------------------------------------------------------------- # +def generate_k_regular_graph(n, k, seed): + """Random k-regular graph on n nodes via the configuration/pairing model.""" + if n * k % 2 != 0: + raise ValueError(f"n*k must be even (got n={n}, k={k})") + if k >= n: + raise ValueError(f"k must be less than n (got k={k}, n={n})") + + rng = random.Random(seed) + for _attempt in range(100): + stubs = [] + for node in range(n): + stubs.extend([node] * k) + rng.shuffle(stubs) + + edges = set() + valid = True + for i in range(0, len(stubs), 2): + u, v = stubs[i], stubs[i + 1] + if u == v or (min(u, v), max(u, v)) in edges: + valid = False + break + edges.add((min(u, v), max(u, v))) + if valid: + return [(u, v, 1.0) for u, v in sorted(edges)] + + raise RuntimeError( + f"Could not build a {k}-regular graph on {n} nodes in 100 tries; " + "try a different seed or smaller k." + ) + + +# --------------------------------------------------------------------------- # +# 2. Circuit construction (from transpiler / gateway) +# --------------------------------------------------------------------------- # +def build_qaoa_circuit(n_qubits, edges, gammas, betas): + """Build a Braket Circuit for the current (gammas, betas). Supports p >= 1.""" + from braket.circuits import Circuit + + circ = Circuit() + for i in range(n_qubits): + circ.h(i) + + for layer in range(len(gammas)): + gamma = gammas[layer] + beta = betas[layer] + # Cost unitary: CNOT - RZ(gamma) - CNOT on every edge + for u, v, _ in edges: + circ.cnot(u, v) + circ.rz(v, gamma) + circ.cnot(u, v) + # Mixer unitary: RX(2*beta) on every qubit + for i in range(n_qubits): + circ.rx(i, 2 * beta) + return circ + + +def initial_params(p, seed): + rng = random.Random(seed) + gammas = [rng.uniform(0.1, math.pi - 0.1) for _ in range(p)] + betas = [rng.uniform(0.1, math.pi / 2 - 0.1) for _ in range(p)] + return gammas, betas + + +# --------------------------------------------------------------------------- # +# 3. Cost function (from gateway) +# --------------------------------------------------------------------------- # +def maxcut_cost(counts, edges, n_qubits): + """Expected cut value over the measured bitstrings.""" + total_shots = sum(counts.values()) + total = 0.0 + for bitstring, shots in counts.items(): + if len(bitstring) != n_qubits: + bitstring = bitstring.zfill(n_qubits) + bits = [int(b) for b in bitstring] + cut = sum(w for u, v, w in edges if bits[u] != bits[v]) + total += shots * cut + return total / total_shots + + +# --------------------------------------------------------------------------- # +# Backend wiring +# --------------------------------------------------------------------------- # +def get_device(backend, device_arn): + if backend == "local": + from braket.devices import LocalSimulator + + return LocalSimulator() + from braket.aws import AwsDevice + + return AwsDevice(device_arn) + + +def run_circuit(device, circ, shots): + task = device.run(circ, shots=shots) + return task.result().measurement_counts + + +# --------------------------------------------------------------------------- # +# Main driver +# --------------------------------------------------------------------------- # +def main(): + p = argparse.ArgumentParser(description="QAOA max-cut on AWS Braket SV1 or local sim.") + p.add_argument("--backend", default=os.environ.get("BACKEND", "local"), + choices=["local", "sv1"], help="Quantum backend to use.") + p.add_argument("--device-arn", default=os.environ.get("BRAKET_DEVICE", SV1_ARN), + help="Braket device ARN (only used when --backend sv1).") + p.add_argument("--nodes", type=int, default=int(os.environ.get("N_NODES", 6))) + p.add_argument("--k", type=int, default=int(os.environ.get("K_REGULAR", 3))) + p.add_argument("--seed", type=int, default=int(os.environ.get("SEED", 42))) + p.add_argument("--p-layers", type=int, default=int(os.environ.get("P_LAYERS", 1))) + p.add_argument("--shots", type=int, default=int(os.environ.get("N_SHOTS", 100))) + p.add_argument("--max-iter", type=int, default=int(os.environ.get("MAX_ITER", 5)), + help="COBYLA iterations. Use 0 for a single circuit evaluation.") + args = p.parse_args() + + print(f"[qaoa] backend={args.backend} nodes={args.nodes} k={args.k} " + f"p={args.p_layers} shots={args.shots} max_iter={args.max_iter}") + + edges = generate_k_regular_graph(args.nodes, args.k, args.seed) + n_qubits = args.nodes + print(f"[qaoa] graph: {n_qubits} nodes, {len(edges)} edges " + f"(upper-bound cut = {len(edges)})") + + gammas0, betas0 = initial_params(args.p_layers, args.seed) + + # Build the device once. On SV1 this validates the device ARN via GetDevice. + try: + device = get_device(args.backend, args.device_arn) + except Exception as e: # noqa: BLE001 + print(f"[qaoa] ERROR creating device: {e}", file=sys.stderr) + sys.exit(1) + + # Optional cost tracking (SV1 only; the tracker is a no-op cost for local). + tracker_ctx = None + if args.backend == "sv1": + try: + from braket.tracking import Tracker + + tracker_ctx = Tracker() + tracker_ctx.__enter__() + except Exception: # noqa: BLE001 + tracker_ctx = None + + eval_count = [0] + + def evaluate(gammas, betas): + circ = build_qaoa_circuit(n_qubits, edges, gammas, betas) + t0 = time.time() + counts = run_circuit(device, circ, args.shots) + dt = time.time() - t0 + cost = maxcut_cost(counts, edges, n_qubits) + print(f"[qaoa] eval {eval_count[0]:2d} cut={cost:7.4f} " + f"gamma0={gammas[0]:.4f} beta0={betas[0]:.4f} ({dt:.2f}s)") + eval_count[0] += 1 + return cost + + # Initial evaluation + best_cost = evaluate(gammas0, betas0) + best_gammas, best_betas = gammas0, betas0 + + # Optional COBYLA optimization loop (maximize cut == minimize -cut) + if args.max_iter > 0: + try: + import numpy as np + from scipy.optimize import minimize + except ImportError: + print("[qaoa] scipy/numpy not available; skipping optimization.", + file=sys.stderr) + else: + x0 = np.array(gammas0 + betas0, dtype=float) + pl = args.p_layers + + def objective(x): + g = list(x[:pl]) + b = list(x[pl:]) + return -evaluate(g, b) + + res = minimize(objective, x0, method="COBYLA", + options={"maxiter": args.max_iter, "rhobeg": 0.5}) + best_gammas = list(res.x[:pl]) + best_betas = list(res.x[pl:]) + best_cost = -res.fun + print(f"[qaoa] optimizer done: {res.message}") + + approx_ratio = best_cost / len(edges) if edges else 0.0 + print("\n[qaoa] ===== Result =====") + print(f" best cut : {best_cost:.4f}") + print(f" approximation ratio : {approx_ratio:.4f}") + print(f" evaluations : {eval_count[0]}") + + if tracker_ctx is not None: + try: + cost = tracker_ctx.simulator_tasks_cost() + print(f" estimated SV1 cost : ${float(cost):.4f} USD") + tracker_ctx.__exit__(None, None, None) + except Exception: # noqa: BLE001 + pass + + # Emit a machine-readable summary line (handy for Flux output scraping) + summary = { + "backend": args.backend, + "n_nodes": args.nodes, + "n_edges": len(edges), + "p": args.p_layers, + "shots": args.shots, + "best_cut": round(best_cost, 6), + "approximation_ratio": round(approx_ratio, 6), + "evaluations": eval_count[0], + } + print(f"[qaoa] SUMMARY {json.dumps(summary)}") + + +if __name__ == "__main__": + main() diff --git a/2026/HPCIC-AWS/tutorial/img/dl-training-io.png b/2026/HPCIC-AWS/tutorial/img/dl-training-io.png new file mode 100644 index 0000000000000000000000000000000000000000..6129d0ef09a6a0f695406d9bdc4277b6b952b990 GIT binary patch literal 36427 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 literal 0 HcmV?d00001 diff --git a/2026/HPCIC-AWS/tutorial/img/flux-batch.jpg b/2026/HPCIC-AWS/tutorial/img/flux-batch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7282bb421312ed2cd85cb12cd6ea3a1ffdfbd6a GIT binary patch literal 55655 zcmb5VWmFx_6FvwbxO?#6?(Xh-aVNN5+%3W3;_mKl7qA z8R@R>o~f> z5s^P~|9{eZKNKbcbmAvR7-$NpPngg!n9%QoP$VDk`5ETF*Zn{A`4bE*927J>0^&z8 z0W{P{;s2-fgZ&fCXV~{OC=?iIs81L$7#}&ipL%}tl=u`_v!@%$5~z%RBwJVeE!n?bhp;=g`nDuKd%SZIDJIV^(|dQuyt-#DeX)M zvj=|JVty+t==f7{%Pf(7K4q!yKrESOuu7+nLJN8ff$$Vk8fBGMp>#NIQ2QqLvh=9Q z;mZ^>(Nc#;keJky_I^l*S4^rlcBv|Q#J;t&q1@Z$-nVSlo~wk?kQGPreY%did+RKe zn{-@h=jmh*)tTy3&5M#h_B?)uBUNr5dw#sre9=_etynx1yw#y%emV8Oxp?I4}u8wyk>26q=igky$=e_AB?`9&X)aOY- z*AF!bH|d!&Q%~1n>WrqRTfP4AETSuaS<*Zt~SD}~v;z0{D=9etec%)^AfjAj(J@orJY932SQ%&27 zz`LbyyW=S-ktriOicn)_$MU9TIMd&XQ&^hBK1bD=wso)4%^{ZDjd&2*I?}*YTYbV9 zZswMzNyIHOq7*QhYWV1za4tJ*)MJw9q~a%C zpL$DL=YTSMH`MyaUWzjQt3_`JHE3)SN|72YB1aRW4T+v`kcV4gziRX)hxd?=XF+tx z(V!)t5TcH!9gG$aHr+iVzyhfI*c~?R(6l0ANfH_`pK$!_SmV)tlmM%7#WIMfB-^>b zco+ogej1JVT0~-!oYzbD5`g8<#+X(}M57{1*!j(imVx zf`vZBH2o_FTVuRK6x^gZp2A`>?Z~Kij%{pK*#Mn~vd}gIj1-%*zgcLZl1MrNpV^@- zG)q5)g}SZs!P0Gzv9(2w#7~4XqxlXica+f)pMae#p>)>38G@I#q_ptN8F^WFD%H;Q zHO2BaTJT|Vi<^GEG2LzAf(DDPseUQ5z~*czd3jg+AeIcTuKKKGiX7LQ`?Dj32aX1e zYx8!A<>{0NicP9Qh*Fn6=G=9oc{DQ`B%4q2pK?-{`IH;}nx=l*(s1l4lYW9)j^e2K zk1-fvn#tncz)6dG(_msarDYglnj9-IDQqPjkpv7e&)j(2;E7X`n)DIros9QGi{jmm zo++|ZCshaW=Loc`8`xMsA5j|d7Y;+`Sa(ccp$PFFx78E=j_{C!+}>l*VJ z?D){afD((WPZB-vNUj#8-z3joegFhAH{}xiULWWQLF3U?P>W9z9?UGl(r8tf%G2SP zTo693jmOF*zuvM)VoqO~B~RPb~vX1#Ix zainf$5k-P2$!+N-KG|K5*Q4e39fn(d87qqHs_wIX)3zqyJ4j+8;G&&^a{v)H`OoLp^=ipTwdJ zB!OKcDTf0_WB-w&u&uI)ag1iJFjTsf&}~ZvYUX85Wz_AUARAk3vG+hC4l0^;H=SC^ zL-_egM4vtMM8gu!J6zKWNQg#XP5>6Epm2XkcIss87`u6P_l%(F-+pQ6sQlBQ;$`(`CUc#=~EJErkjIlUQxC!&v z$AL?2OCs%Ift|7q=VBV9yK>#+hf@|oD0zAy)cAXp(m~){-@uh4mr^OF1#)`m#>}dB z7J=233ujY-vWb+=_DvcU0D<};gVKn%#}vNqQYKJ%Q8XS;j~YZnAi)@OO+N2Xk>{imG#5%mD!0fh-9AEmqjh~19JbJdh z?}(v>iuy3AEqQwP)FdvcW2_|J7nIxrG&V#InQvu=4e1!hBHv&P{Dp7V(?uAb93$hVFz}XKE zDTflOnesj6JHxY0W1hxB`9ZERnBbNy)NXT_up}+3=(*$fGkLYWKA7Cp8lUq z;xTy|Ce2<>1zXAX`QRRWW^!C=U-;@*{aF9EvJ1z&!=UNsO9wJp-jkH~PqD z22B6$qIr(BK31*Fs~$Z*-mvV2P$@4NFF|xdfn~e;h0TIPp1|+c>w+A`pF%sO#<$WO zgz7~#gBpE(xcT)rD);qoIG($AJIBYhlM1(48p2BD;G%KY&~(qOW+B=32Da6zeS{9> ziy+O?LO0+VBc8jPtE}PtPcq_!G27>{mI@EoCXX@KDU!Ka4vzv62@bLJ>~&rg6gBZC zF?zi?q^I)6^nU(kF*PMyJA5)%6|(7@DX1UC-wZr8s#6e$h-MZ56mr9@jHohx@;ohz z-f!ItQMLy$o()VgKAlQ(|LjBK>5eW)Ubqpn;-389e(I18KhGHl(8Rro;_>%Z=UiDZ zgJKdtMWU<_+1^!<6lJeTv!|EP&uv6Q5<7TptJcV`(~JlJl!b&+<|nONQablIRD&*; zuE0G3+%|#~pPyv%K#U>_>W{ zp;P9O0sF*U?E|X_fxtG5k}(67Sw>h+`bW7{!3bG@E4GQ4qfFDg!4OFrL}7b%+t|Zk zT(uhg(OduX_*Ay5y|PXUX8LvvOQinm_d($sPTaa#1Rsgv1+Bo^*m( z5CHQo2C>(ivCH}8#=4?S0CQ{FH#l?*h?E9F$*4DMXx-*-i&lgO1;dVG^Rsyo-$ve* zRE5?Qqq;(SG>I@8`mGQ))z&=*5=BQW&D@6c72jb!k3>;MMEWvI@}=2%X?raUt^^9= zgn!pwR_*>aT_gfwr3@+#*xf(nCAurd#0YlJS}G{LpNHLF7vot@j^-YPIWs$f!O?v* zIAO`;<{$xIDwzexRd*A{r~HYYJh^9?-@tNxTIrYv_EMU>`&zlZOX%_}F1+C+WS^8E zsi3HQR=86VzX~5&FdK6vph*t+(`7jSbL+D@+x&@~yvxYS%20&*WQ{{vha7cn*>(aq z=1mr=L`9hbeNJlk(%O`hcx|b8ZMkW&L=%IJS@Ohh>a@NN$UMDX>h4Js3k`#N&&Y!L zUB4U;RW*gBdEP{s+(D8?YM~sY%YQ@SabTX*awEZi>GziAe7dozZLwaJZb_ZeQiBB} z(dSws*i!*m=HSGPfg9ZUM|gdU`ATiUVwGm|buw`(h-WNsix|BUbrMBol?uN4Ug!4w zR7rh5v^_2zO6yMty5mg zN=^#@&b&ifk8kJf9nd5WKtdFXU88!;ZHm`h;-C#;TJjQBa)%L&>pl zp>cJFpw&2`rg8O074_@}L-WbOD4amZsbS%dx)(1cK>bfs4eHSaoffyyilpQ4+EACA)0N100lA{@Ws0JwS+fU@;Hnmd;lv&3XKXF9b|RE?dDQ zqMc}+@%HhxHwiAPCHWk}Ot|@CkLg7bMRb4tvd~q$KfTJKYpeK-ACZ7&b_xep{C$%F zsL!c9@ z%?y9@lCgR@`fJWx^Yf$qYc@{3C`W5{9p9=wnH(KX?g^g^f|{R@W*FZ|6q#?fK0jjj zJ|$)#PyST-kC}V98Ro-|!-D|@4f7f5^Jmyku(1EL=X@A%KI}MfnD7`_V!zGf$d(Ee;zOlIH&OWRpI00J2o#q|aFb|E3QKo6fA> za$kE$WmoOc_{_pJL=?sW^bm|p6Ui4RCi&E5CEIw8Q$%~q1lhDRljl_Qwk{l*$H>Kt$du>kLsZxb`-y8rxOenH z!z5M&dG3l8B7jCGRuHuVrqxV)B2Y5r5*cNL{lqRgyxmfoMkmN@$-xc1tmTg@3xz3O zHh0-+kSU&@3e3QoU`ykQ46>VjqiX1WrV0#5zj0j^tr4lqum`7&2^n*w$$+5$vM>Mo zMU-TO{Wm(|Nd3d&bHtYxl6cqwc8BOMm4iU`OIrG0&d1CV52j(bSzCB0t`qLn?mQE+ zXzadSGA`jOjq9kw;sI#zvAS1TOvfap&Biv~eo?Cx^+G%ihBgmgaRwaPUEvvQf#%`O z*x|Q^=j8aP&SRAQ&NWt#_Em$I5AD&pn|zBAcn!|iSRJ~qfn;W$-CjhSXVh*ZGbn7C z;Rbe9Lo8F9;e-Z*4*FBkYZp1R1f%Tno8f5J8D_V-J$o|)LUxO?Mg!eE&ypcq;B=I9 z&VH9_PDexDfy&y4Y4k7?CO$M&yUu3jqUO~rL(y{!$Ms*&5kV%hKuhM~G1rHgFMN$B z8ShZX<}l=&%T1RvSFA+evAC^9T))IFV{Cee=OYZ!z4RPM-URw#S7)ftUDSMUJaV;H z;T+7l<`}ukLdbr}Blg>m{yWtg$nzS%yMW6vc??t@jw9NI|5BHyK{PPjsDys4_w5}j zfwRwgd*esl%RWL+je}M>|JFNHbAy1Xe1rjmflt$gqdb8{MbQQpU$y4fVUs_po(^@t zV3)o}ihET9^G5R2L6aiOv{AO3@LNrZy;Rn3Q^Nrr11{BnrENNNEW0(T%c8NmPz~sN z*HIdmR+wAfq4rqlpNTN<>a63fFmyHpAw#FUNXRpo{tR#A#*DorvP1e#WXPLNjkVg@ zp#;6(sW_}My;{6|gi!h~|K@MinV8k~wq8HPp%@AIQMU#&DghP*u000>Uuqm%mU5&R z_pToDk%eO&YugkvFCF>lYrv4<2R@JUI+kai)ra5B!k&_aCis4xJlT28>9hGF$JXQhj2O5shd7=OE7WED z_BBYmMD57!!ZokHidh0}x(;n9J#|TktG;=`zeC|Bze6Rty+c`Ti>z;s?6dmdN>@{C z$%q2m&F=~P6)kz!%?aQqQ@Hmys<0OKR#`bb{*br)o5zPM-{ z!gh};;V$Yazb#$nX(CePG+hzfMx(QoG(k&l&Y|Xr5M9eYvf$vylnGUx^qq8T-4pNA zx%(~}i~;G?4ZH5tG!smZbJ_U~Yc z;{0j^aYh&}E$>wj2k@;lx3#0UuCE_E zJHf@5G)ge8YFh8AJlah2cJgTS?%>qqnvUtom0*q4;1KZHP0-L*TbS{ktp4&OprD}7 zRQI7&IzsW3ePDo!H1|AttJM1L{nRh#zTX5ouH*mQc6;;>=wkOaO#mL_1nR(hg%Yc& z=zQ2K@2aD+0{3O2+W_I-W`-0+ht#kLid>$-DRuuLD_pe=Rw;m?jjXnIEUKkus%A|Z zD;e!?Op{8z-FlYFJfc$z<;SEiJN#60zpilrL&^bRf6?TZ0pgzZu_H8gF&55Tvi@;) zAir4GqRPHi-2Ohw?j|@LgM6;G@fKVec?MvszT4*Cs%#u(3-8%QKOZ(4Zprlo6L4i@ z`RC0Q(r1la*R$-RYzV$OELMD=GGhfx$$n};1uJD~WeX}2W8}Pjr7?kHX*HZcwtcne z^7_7Ytkm|-s$+|{S=lx$f7a13k3nRnl5Z|-UDdx)x}mbHP3QHZ_Jz6LdH=W$-y%7c zz{hTy&r7VR-u9(tbVs}9z{Mm&LDulQ$Wt)){Ia%yptQKt1V zNDw>kY%Mcw3$G0+B&1bPvC%#}dBm3A{S=OdS3y*6CDfke8_-@qM2)zZ4i`MoND-f@ zBH8JEBC+9FfUiId&RLLf(@2%$(2`l%k|~y(p@=IT7uY5QwZv)mYW;M`z-egQy;~BH zRp+XxTq6exN-?i%) zTb#|pK=}MKbCuit9m;za1G&`RHWp$dEu-=J>9x;;Ws7I1uydoGmW=IVi#h5Faf3#USI{p1)X9_k=>nX+%0{;qf|n+I zAM=flojbZ%zK|Ky?7mB&8t_3CnfpZG$#Z-E|BU zZKhEE3bP?jNq^SR^ar_8g)Zap+qxG`&qTLJ35Y8gqI*8MmK3{2D5UcvW;- zUe(sI$kx`SSAv%8QP>pWffbVwTI_O9Agt+HG7eV48cSnD*98j*K7UKAN2E{P7=C)*$J9FM?|LbjASV zRydD|?Y2#~dXLY_4r(gAdw7QjP_Z1jUZO#aUdy6IrndM-4lh}dChr%Hgtr*o2<_Jh znp$QG?6d@NShIJi9<*b*TDKnspv0an0TXautyobD*j!be{20rt5V=&d`B8~%8bx_l zCA*&tGm)dUP|~HsHm-RHAUaZ7TE8w-EI?Jm2Fec8yqdJSsH`Z@on4c614by99k_oR zUFx4Lc}1lPUzm?7X#u$?YRQpl)g|15HIR;^ckxq?z!~72tO%OA(W|c%*!tigZPHuB ziff@lB^4yGhzjAntYA8dKjl&-W(Q}#N{@(#W=o=hX_*VRYsk-<5RZ<;?p_8x4-#ml z5={;P0_vF7Z})`Gq>8q>{d?dl=i$g49P3imOd&NHAaofxK2NN!ycA=1!4F73tEM#&p!L-*nljiBF z^oc@p7!>$JL>pH|%daIRSz4a$vc7f=Ta*Y`JNUAv{tL45W#Juawuq`SqpCBcw!x$F zerXp1#*{9oST8Q6Ep%B&ibbU?*(;jDyOT_t+tUFU=w7~kXCGGqRE+IXYD9P@p_>W# zwP4T8ar;)nf7MX1)oN^#+m9beygDQ-XT>v%u9~;Cw{q&QQZp?NarCR@l>btJ#-Q&+ zpschK{VjGE+|(jY{7a+B0^Zgf*1lAc)>bU>8f2i%xFAG}rmSr8yWYJH{ui2ZNU1D_vYC_m zx<141u?LmWAy*;MC%Q!?_f7ZtAAfV%_{DqT{(8|s)wDbU$ zZ^z2<^0jnmGf2wt0QMmbcsn>;&KGV*p}C}W^?tkZvH<3xIL%un>gG@?ScQx7(u_dUul+_fws~0H+w7x)VG}~2WPUEqw2ZpJVoxj|K*O%`oA1S{z}C4bD0vqmZ<>q{fX-Xt?sv zK7t8=l)?X`nLRdI1kMWDEx7&HGZPkOXXam?JdDo?!QdX`$M~;TZaz;}y4tTezRGmvDQW=nkA6Fo72p%3XbXZn#J3?GQAsIA3nj_&^XUci zt%Gvm5zWlIg=xO7l|x*p;Wd#v9g5XcOWX1=jMa>(>~2LxPLiZ=r?eGgMW?;`%OV2f zeyK_ljJJNcxNrDU6Sp{Vajlt$O~Y?0cJT5e?FePA&N~48vq6#A4}D5jpaoZ(n=9TF zZMG`lsI!#ZXeh*T<0y#4?JRrRCy>K?sdHmUph^F!!|?GfZ!3ja8qe#;lWt^Y6F(48 z_E=~U$F)=d!unYR54fax*W5kZj@fT_FNoVa;8^jFP!j)xoL17>D_UX+WGGT);ufT# zvec!lVo$WL8ZVMKT&Dd!UeQa?u5hJ=A-RhkCyJ$ zvqO5avsWV37xZ9in4OoDp-#$>H~HSCUVU@RFKmPhmY|KfnZa<|B@dP-X{7YPKjH#} zBbgJWPN&TN=7$GH_#IJ0brk@T<&!#)4z~b?$NIokYSHkCp59XKQ!fg<4x7SW16bP+ z{mpBQ_h2v;$19k=yc0{&NY+3yqbthG(Vo}PIcqI7P?qiNp6ksj5RzN!l244QG&@qu ztSl`ZcR~rkeL6A2N1kl*u@6&pRAcK6&ydBi`8^uE?QX6Q!%bUVnF(2Whmtf8tm4cF z)$zS}0bpkls z!>=;SiRHr1@iw&xl&^A)YGWQ(WvAq5{}eV2Sp1lixl0$e9cgWHna(l@Wm0yDd_%f$ z=1X4(s=smDPzav>4AXVC{vajU^Jh7j59;*mSCR)wK1kcr(a$UJX z;urIxeqn&9F~_-(T#V$>f(#PWH3XE3N-~;2;aN3>*Mk-=?8+r$a4V-RQ)mFuQfW$r zV>|Qp1x7+5T$z~|%_Kx=9mTKi!9G7<9Re5m=CMIzhbDTUx1F-@wm0JJg3Fd3{J`H` z%w;|6q!ie;9;Y6M96H?UCRK-vEQ-qX7LzGJ^KuVH+X`1_m6FCBK%jP30fA(HBqt!TciZmfsAvvnr;poKpnX5Ie%CJq!+Ox-X~R3Qmym z@pO!V*^nm#Impcvw}+=6SO`vgTgrB@_~3gZx>`K>D20#AB3OQ9T_;k5^skZ1AL{ z^HX64rRc%+XV%D$Duv2@X8Sgr0OVTu6f*EC?)3IQo{UVpt(ae`YF^|w#B1^FH=Ga& zAD~ly!P>12V?^Aau|ivnERcEHT|6!9LDucFuvESf&S~}NK@o2H+ELP>#rNA26cTJ0 zSTR8{pnF{``BtNMy!Z$Zu>f|VTMCiBRHTS5Rcj^Xkoej(Vz@)ISB`1=EHLN>y@+%5 zAOJdW2&Uu}cOZY!-H8)y7>ss0>ZRfsUu2&Wrejo8h`UU1O!f}-gUKcTkd+CgCeDaP zVX;9+&IkdFCWdAJ?ZHN=g^iPrl~0*JgBem+b+Q5{bc4C0wxjlhUW|SybU#X=u(n3+ zym1vncls&X55tEyZw~Uk*re38TUMpYj;i9rB8kVVigH7MDjK94GOAqREYVQU7pulN ziMywh<;snPW8q`;mc!-_+0oL988N!S;g2sUqkSd!0Ah}wI{*HDOX=!LT8LNcy0*5# zkg12v=u~=m&gwP){0^mq9W~#^RD=WhZb-t!ky=|g_0uxv6&AMFZ%+gJE$9Yl>-_H> z>Z5^M(x_5f!Nb=kB*;1A3|`+>{Ro@}uM}&!E~XTPX-HCZG&D_DjTm)CGlK)klVx?TXv}I`m5Rxt zfAv`={JzMknu4tx@#^XHSEMehs2g-Ou%rSg0+?203{-L9sFVKC+tlD!$67)rJex#T zV>ZsY-l14F0_oj`>+f`#+hugT%e%IhyO0mqg^~^xl|dHCI$Ej;>O@Pt>A#f&(yr}{ z6i`?htIBHzIs5|Xe_mtM-W?s+YFSYx8*C=SO>9~4$ru1|yYNRH=a$tL*X?RoTBSY9 z(vc<#?6avD$5?x+0{4sEil#`c(YGZSMW@M!5<aIf&fz zD93$kJz(aa*7ZntkzGk+o!T+p*wkq}O{)*Tl#Ja-|ChTkV#o~t5S=NK_n2?Rd*~AL zow{Y-*g=T)PDS)hY#RM}p1g|)H?1=-oqQyX=v3%9il=kkLv`J`{O^mr!0xc91KS$T)LEJ^Q1zP7AQ2+lY?$GWFq-ug)~c8kVp z;|VKOK3%KcX@dSk$Dpdx$Qsa)@1;7pE=hsE(z?7|!zx`g@{*I~t`7f{h4@XO`6Ydr z%wbd3X9MRoT5&k5Q{NGdcerJh@nu??gf?|sX>Lf!$Iy(JTP+|?E6SXQA*O3B2mjtU z;GUol?5(=>lAOum!!A9rVYyDvv~a7VU@+x`*EA84V2xi1D?`#>Z@&M1$FF>wJ&%52 zTicl6Z*HO`H%(LzYyRJ(s-*Abas6=nuc3I0h1YV# z*W~#BekR5H8W*%`u3hP8hcy%HI)NWjBe!vQ80uR#ReK&%PrLfIycxIsn_V5w+gQ+_ zMUWI3oqkIN-y3A?Eq;J-#5+-bpRE_!PbVhutnD?NcMudKlMX*tGQk(7CoitqOlBK4 z5I^4Y=SkZP1uQZpmC%S<^)5k^`~IIondm zW$nT0*Hvk^u7P_8#NCDG*8RZ~knyan77&~KCzG1#_G5d5%6>e}o4${8Jp;%Ut{J$f z5~YkW&!jfovT+~B$Iz_q5dQQc5@cH z^BFVUiAHu^0UZM=IDi#`l@htjW1QW^Pkku-dU< zkLNthl9=o+0JXQJTW0KVNcrt;f;jEChm%Fy_&@RGoi$I6N6RAHP?tB%%VW29{ZGg2 z!{4D&T&u04NYbO`SD7{Dvs3Pj>2%iV>kT#P>dG1{QoRHEMR@gN_~Y!ICm9N|?DS3z zfiW7pLMD}+bGq%_>(qHOgT=O^cI|y6S~Cn=Qkm4!+cDqqz!lyb{|2O;ue{>7vqsxf z^}M>~Tsk8MvRxSJ8Oq;y!ZkKu)RJ+VckU~$i2jNWZ3OAX6OR{d)oSYDnGPnW&TG1~ zq_UZHYduVD<+_YU~kfSM|-AX6}xldvCo`H7sq^xo)t& z7(M*S%Z{bUi_&`-xyV*tYTMEg-Od_+$OI%3SrZjraI!FH?r>?>ad0d;47KO7@Ng2R zW*Ti^Y)$>@<;MljY`}~;ZFlx1J}{FYPChBUA8?~(?>W# z)hx0Jmm1sSm&2mb`st{B^tggY*r$s?oI6m&B=a=lO=;PoEEi7yn0x9Xj+=U(zW#n` z0hr(Z00Mz5Gc%*<>+fPhFC-eEbmZbVyDiU^*69=9{D9Tlx?0HOy5)K}KQ91-@zOeM zn3=!JDw^n^zC+O~YV8s;c1pD|=*HqMv2E%R_H59T(U01rJSUk_*eoyoHb}Mp+0?r{)oeY`Y-*Dpg&<^z+inP zXJh}2El$B9hNEWsKktl>;2cqCx*`yr-QY1Q4nP_=3#C!SC^pVMv0+1#Rdo!82 zWCBRz=pZvSO$cXy0k4Zxavo;BLy?-zrOh8F(s2O}nkJaK^(@o$%*LlsyuE8GT4j|J z)n6%L&En%Wy_+h`|(eXpY4E7JgQ%1$#@{RHVw1z_ zdWt!lR@CHDRL@TM4>T}gxGZ_%Jx>l1nd-q<#2t=+QQ=}ek`ghSY@IILQUM_|d}S)t+FU);(qKW8g z^zam_2?e?WvfIdiy&+CkQm-=Y z=ZDpVwIT`N(9gwMlrryGNkz?i>Y3x+@&9Wg%t4s)j2#nOeQ^Skxy3Rems)saexf*C zr=D{0&zDT}+6-bf%a+}s3V>LzlOK(?UVc`7sA-Iy>md3#66sCiSfaWvqzfOdIyXOj z_hg3fbn?1!_fMQAdy;Pd1$LhVS|~1ai5fe7z=Hb!g~k5~Nc+EGLC%i-^)s6|4hKN( zf1vpEA1G2Pu8=iT4)h~Zu1FjkcvpQF#+9(xBSeQZRk2*GshRYPX6H7i5-7T`aLAx+M7>(Rsz zp+=!bJTN*%v#&(jwk>#NOuRRqIG%`y)1HUNdvz;uD{(uqF}{XFNji;1EdfO5ZL^TD zk6F<-*U4M_OoW9UBXf_L2ElGLo3Km|`}KSEN<F?Gb>JV{Pq`SxUq9eO zBI#xs6$!yJ2AEl<(eTKFtgbzt^#~C6wN7PfR{q2zB2k%fIS*C@A-artr#ZOdOzmyE z(4I7ud^eMe!U7fV5cb4)M^;FM{UV@urc+>wrqF#H-apC+zt*e5ZaRnwpQlsmw!gFY zib7n+DjH(a>x^Yq{u2)npF`C1ZoX;0D0I~(#pjo`F~ssu9Op&6@Q=UAXHs)W%WTSY zP#7%{Amw`CCdzr>YB!EYjFHaHScybO=wz}m_HyQN;wBjkNP0wqS!^EFYmYIEM+vXS zvys@7Mv)}NCX<-J6BX8tW=7q<@scUpc@w^x`TTueLxxKph*fCEJ-3rAIFwJKSrg6F ztxkwVCQU*T<*a4uamV|srXsDdJvPbnm0}SKvmo@flNEgguBRuln*s# zjdVWQp<}~HSg1U5eYKuGRj91W%yzUw9L6ejBpKPCd(fAWG}%>DUk-&ST@7+l*%7I- zAqO>wxJ;HYPupUtritOLi$;nbEHJPzc5~B=@s$`bjKvK;b#|Be9txh{S(k8+QVj8; zh^&}*pP4bhW@>h^Xzq+)A0LVcrH%-T9bJI*%9mr04^^6H3QJ%%mxis9HuTgZCgB;g z;+n;#g5xRg0IRTr8j-qf9p||d9Pua&A&s* zLky9VD(2%q2Z##4Lw%-A4~u3!NS6#hlgUy2nq|JTGJ4P|DNUaEjL|fXb*pDK*hx9p z!a0OJf@v$Yiks=q(qnAQh#>vnDgk<;YNuSDUGBjF=+?;gJ=~bQgx#0V%st;X!94d# zpLIR=eE`njKc~TuuvK^@M0hw9SlItUT0fiyF=0PE2HD{-a45t9rW|4}uI@pJjZMFB zzf!VExD__{Q*o-Bc_hu@aq(yb7fDKKnp=bvmkdBQx2U<*EK{VllIOSoAJ0NK(NEgc zUgA#r?JV}~9n&T`NShNnVa2J#6FOyGo%I`POKo%T;Twn;8r+Z#IkkJwlIOGUjZ~G5FoB>@asUC+CrHXvt@*;Crz+>!WL5D z!X%02o{HU&-sSYQkM9;|Pg?4(BTJB3<7}fvivFl1FRr$3HT_=M`7e5@>Fq-t@gW1l zSBHAfzv6z!vszZPp{8eXMJSFonX>rYo^BU-qYjIY}rxq=L^|`xI-P<3g~C z-BTVsWTxRxjX8qv*VR1cDzi3Mi@L=~t^=V`%B&qA*Yj$~5LX_hoZ zpnj_#8X{u9&zuBKk1i_Ni5bG?G!b=YPn-V~3YUrtWoSf~#MX(XOe}6QoXDaLOAqh(AW9xWOg;t?9wL90|;S9+ISts_en?c9;Vx4Hp( zGXzxNjx+%x_h3BA$T`z#iwm*+#@|Jf=KBnwItTW%Bs=dNmt77!McHE}l{n}$2D?i0 z7~?w|7if__yh8VRr1X(&hr0vj1r29Xu`?;>UO@AD-*vX4@qO>ki7Zl~JLhS}o&1tchaFqEz<|{bq!RmBq<-Mh#VppNG1En&~s?E_cZaTe(gXL zhPu^LclH&~LE%x*5ZqepyD^&gJBQZVV%v;!h(SdWDw3Rb3z3DKnmlT}Lp^f5LrsPS zqDvfgG$3jz)4MPJavvn_r&unp(gMh^$gJIyh6u}!bHw&M5is^p)xfWws6oAFPEl}RsM=k!HXAa`jc2< zhkag<(UENptlK~K+bCd|R7ELp*TVdA)#XH4>qCeZdRN2KTaW6tS5X4e`%h0@Y-kUe zBr%Ex49ETj&BXpUmWR3?0ak<`2;g#+I|F>}io7UCpro|V~QFS)(zkRQF#2z&uB#k;yCTvsn$(>8znVil??qmiBc z)p|~a%8dSbk4NA=Fs08Ru(l}m{M`>=>8jD(PC2jGNv$i1-zA=~*!Z0{+l%n?uvIA- zFS8dgv!5H7c+`}A)U%1v$b@?KvMsG-{;RkLc*7*ojpkurO#93Pt)=<*Bq(VBKPZH? zZhyM!t%=ov<^fmA+>P{KLtnL5s}7Rvk@_<-n&=_gomv~0+MF*3=NqUe7T^7b)y#jYs-rmUPaQ(ySV_8!5^?G;*$v`zWGPIpL!m2=wy z+|byeYgDIw%kY0O_0>Ufbx)KK+}$leaCdhL?oQC)&S1eMxCD21cN^T@T?P$F#t`*rs@m*0T8KxPU@B`!=-e`;JtIUVgw>gfJMM$yYtmrddc!CA$d z3}$F?nr+38@^ToU!G|LcPoU~v)B6%*Rno7RB{maOi>;jUu&U4QPq|EJJ?P~*fbyPT zTEsy!_!(Ka*MQ-@#P>8P_LSo#g=v3U$1#533?}B;?qf~u*Uy}ilB++Q21zEMgq6d? z8Q)FWEp@Uk6E;ZO1#ac-L+?dR)TL%sqL*YpBDTYMtu~A$C!w7Rxefoj2)F{Ve-QjX zMZjEfBM%2}w1JC-WxFIo5_Gw=W`ISw=m#1n=M#EDPl0j+d^l@O&6tG*b-t-v9;rxa zzi3z^(4lwggBBIIC$KVT=Oenipx&`exH;q(HfgT`6NygzLy-aTAl+B$oREd|{Yh9+ z(bi&R`EOHL8r|erER|JP%Bxs{h%D${$x>8+0+y5--Qh`)xywM0CD~IH`qjW=wT?)f z*cnW;X~TdTYoow+W)dCvypTspApq*yS>O{mW!RRudUH;yFw(H0r30TrmxA zL^FG!3~$8oXO-C~%>!cp`tvI4xHXfsM>#&hLyrA|RbvNz%cyAM)UL4(j5WJUq1H#o?YX)@J zbiM&?BGOWWPl=RwNA-mK@GZ$W*fS9^ZFtPM#~K=KzjdkY8J#C5f-TMKL6ui)iknj5 zvUsc8zDuqfK!rV{2L;Dn4NajH+Wi|c&KR1-`d=)Lqx+7-A>Ug8xFR*wblMR#4NN(7qQ1eeg*$&r5$tJpZp7j)q8XVAct7LwGvxoYa8od_mP zxkMQ9*Lgcjtb>iiu8duWeZPeMW9h%TM4eMS!o@~nA$=|7*@4j(#v8XG_xuj+ZdB@w z&*d#HJWVZwH1+GacZ~8A{!rR5Z?audrrRpMwum>hLIG_*UKO`MQPBMa(2h~q?9CTK z3oe1SUYdr~Cssq|MBG(bJlUmULKG_s^q=5PTIx(pJgfLwI+4qDb9aG+`kv*#$0#v? zw$*I>AqH26%hIPDIN>sCym9^yLhAJfe0KUjbXVD;lm*7%+lz)2_sABxRx!@8_0y;D zSD#Zq8$i9hL9*w<6>m(^=f|}Q=ug=;y5{uO>sdqr7Zc1$@>`KmuckiZR4v?oNDx2% zZURrtA%|Q0&KA{o;uTXI2^-J~LE6FT`(?cusf0+KCN~o^cHwxoa z`r=(o$2ud*1X`DhK!W|Vo1LrgmO*;$^kxlMfB(jtNUN3`v=<*R8wi!#%9F;+;gk9xvA%=r8ju6>y9furOWOhJtKX1*Kac^YqI^xUkz!4mr}UNF z*wg32DYg_hk|xEm9+i-hugy(UBdcmGP2tMb;m0ym_4ms=I-!zszit-2;+GV!6x#3q zAc!+J=*DtXS*lG%(em*&n^lLfhLrF80cdvGt zn1L;tXtRS%#0K3bqnEY+a~tTZ6s=X2RhzwIz*So9Qy~oNVl> z>7NXVhLXY4_s=&a(hjivW7_wk{74J|7-9n z62UI2O}A!!PVH?lvrq9xb^9s&4R2R+{|wWgHTsM~7H(vEMQ?=wf9y#)LJOtG=~W2> zJ1*$gxJl0BjOYHM;>7k)x$v3a3Ri8C{&VGBacxZD{Lj`l-_kb9Yr-ocZERA~>Jcr6 z$MmOhz3u&*)lC{Txuy!E50h?XbQ#D7kMBcuss@&44+8v#`u;&|xNb*i{ki)klu+k? z-{T5acRV$D=(m4K8hKmkiD(#nl==3P?~ir8^(n&a;#Dwa3Qcsa*-4Jx?xNK4^hDxr z8dy>#7X14F>yhqhBwMWk92*uLEk!yT%iT0$YCW<`fwc6_4&+1`$W_B-@2Q1GTTxkMEQ(KlqDe&N2bxW6jh=4^ z7b{~BNBPPxp;D=F)|atk^A>}vQJqsa14`v^Gq-y-5_gwRA(1=G07nF8(YZE6phzTO z-#h0qYZ?$U@kdunpIC&jwj}a#ZAj&TXBN>-%3h%vOQbzPJC*l&9Gv#!=VGH@lF~R( zNCw`f#nMk4-%XttG@P z_%$Vg!_Va90GKz360MoY<@O4;6#g)!vvU%$jp5s4Y5XVU$V~qd**Ddy!Acu?8weCL za8lPmrCQT2EcE?JmDc;{3q;?VsG=sfvZE#m9{S20G0DR zM=je;{)`TiL3$GpxBu&F(yDcvRD=|7UzWq z=v*;VFa^hjbz`+>8az{kisd)s{{lj$!>UwuSlau-d5mk}~=yogw*w}tIqVv9k{uL}W4G=rgHd}4TYPq7`=;ZO)&(*%X z?Ef(z;qbwLWj^h-Ih0*<@Psa~)KHD{)Qqb|lpNIF*hSmU?>>qL)(E9sZfRONm_DLC zH|ao=`>Bk3w7sS0v-qEp0Xzx0_F1O!NByUOBVAGY!^rVo=Z$LI${K4_YYEYnf-&6; z;h+{x2%(l^#p)tK&_(=Jixk$aYafkV;(?wTm{?8#zmmszHImfovVYsk)cR1ZbPXg-3AF2aq=~qEo)V_M%mgq8!-;QS zH^bxj1$822&jZUy8LmMvwQ?|(97H#%(tHl2z{@KSP_Fi^`z4$wM(fZ*R9>Y}rPoB4 zHBi^O7Pr$Kni;TkQSFH617upyL?Tq`SkUJHZXS3175Q{;<8tv&h~b-F%`w2Rh74%# zsn_boK2#jfz&}O7JO*^wsx6pu>ZCoY9jb8kvQc4*z3`Yn5u5f`+7~3&@7VmH={aP& zy||*;u8neOuhYXZ1+Mb}1X>EQ3)NZzVVi#ZywDom{sA@zLb&GN#KQk{*3D9i%EG;q z@ThFFX*@Vyg1n1^)Q^2Xr-|5(MRR!ftR2eJgQ>-pIcka4LdwFm2kYubf+wvO&(Dy*V1ja_zUsw*<~2?~-*i6P%12kA|ufo-*?oR5$A z!u)MK_I8p=FQj&OpFC~PIUShw=oolF=zW(#4&{2y=7r*w$6^jmPfwQP=Bc@3lx6bN z*Q&mX5h)AC8F%v@uceXU1k`iH-Dq8%Rp+aAx!Q2s8Rh$kR-gQfTyNxaja z91ao|JonU?2r`)q1qYixmDRKDC@JPOAB<&iIloOjxTd(Z&1$#V-;H|qE-zCX*4KB9 zDkD$5>a>51;}TXY-62h-e7`40YGbT&5|`HzaF3WyUO}Q9=N1jBy;E&iic~p$l$)E> z>&Y^j!~>%q!q`0+tYrXe;byiHK5h1Z&|Kapq<~h9cnnCG9hr=veUkJYhUPzBcHVdv zv{GyU{rQYz13?yAF{w)OHY$DUQVr%!3@CYqO48qlJmt0vKxFX@CPI6rwi=via6yYp zw~{3q|A*@y9>08Tvi)*VNYSppyf(8k#$n&34q( zrYe8VDaz>^uUHQ`glqtR=rB0jH0dQ&ee)=WYV{~KuR6%-VE(yNV*+AN%UX&9`@Z5lqna&;jfMs_EXplMIWicJanHc{iz?dkdt3wJ+fk+} z6Jze$8@V7+9ffpCL|R?Y7SGM#4A~JcQldNtdj=PzCKIKe<#D3IuWA!Lh0*?eZktag z1{ro{xKc<>8?pXVv)D$8Hgf-{ZpP+MtF?d{aB^9IW=_^2_AJ+uL95qP8{?Ym9*pWT zSNjI}SLf4f`;k)I8m%7EN=`?L2`Y6C)FBK0EwZTpaDD|Go?w6ltad8~Fasc!V(QIl zN>27qM+(lh1ho(!4VGML-7JwxyZ$Vc!=eVY*b~*dH4@FPNL4goZr@Tr{1w4H_1Yfk zh!U?M?p8I5Ja=xd_p^AYYGAFmFoAZK{fyrS7u?!*)w&9)4CV^+Ux3@!_Cv`Q+A#X$ zMw#?Gx`s031wd_UWwY8^wM7zb`xM_%rty;kOsL#OezGrL?|klO1`oMhW7!(xj%R-Z zd@|o{)KG?Jwzr8FJZfCKLyBs2v&*0U{!tRzSgsTsGS4mska*ifa650+crd`&T2<99 zIAJ&S@+%f9a|LT$+v*NF>*^nJ>bKn^rD?{7#d`jr>J5E)l9{>G|De8L%7g*^nP~IG z+5hDcc96lo{YPSGwWjtbvnzdXe)5C`Nkz*ePWH(_l-~ul_(GxFqTJck3XOEcMfW4g zoA&ehHkMSyscumDp?|=e#NnflL{pN1D@&q9_}OM0Q&H`t^7N0DS(=O4>nIYOr)sw@ zefBL;gFe7=jhhGVeU}bSLj>ri0QymxuwYpM)KAmF)O1@)!t-_!xlJVH=3b3jQS$c< zZjWU5R}LY@nrvDng1lbMA=d8mbIwIgP}Yid?NFP`(nyr1OVd-1+Xw1>k%_pjw7CR6V!8d&`-IH=yH5o z;A`N-6GYM2mxq;^Fy;4i^%?HLEFJqiY@hp|QGyr)^qVc5fkMZe;xEB>RryJR#FO;| zwOdTsy=&jN ztjZc@GImngUpw~3|7U+ML6AB~uT;uzHyckyb!At5Kvlz~e+0$Q(H`rR;mRhQ?(apB z=dA6|pM7-^6_kYb0x2&_;qo!Yw_+Fz)`b~@e*}I0 zzHE=A+rwhCj(6wP_^3KiW(CeDGQ4iGEx8+WHsJQM`0mow=}32dt6lUSv$>w;3c$&q$`*EQkOz9o~zTbIAh zZ_S;1HkWis3=5Kl>7Am=iaz?nP}~FW30Fu0k^oJx6_8Ke*6EC*z?1Yln$_%@th`G9 zn5nbbx)(7|2#Gl=b5aSb<1Xaa1@qVsfL}x`cwS6aFgBUEmhl38b8q%Q|SrTMmxeAMto=bXd zGDb5D4>8)H$3Y@+WjP2e$>)SbM09m8jQrL%*0s$sg`b(k_H;TflLQk-5kVT+JXS?r z6}wGZ#(O$|pJeHwHqZ|_H&vf|7<8)lQM6vAjhvG~Bk~pS@?+_NTw5$?@+rI0a1Wnk zXHsg`f+=)LF%!s4yl_ZJy}bJ*C3z*hTWdVKrYJ#*rt*BuPEZJ?Wr2sMs-j_>C?TY? z);l$wu(7Di%c4y>mhNhCpNZLjaxBJ;nu5oPwJWH)q`u>(CdDDKdeADvc|k9?4#F+L zr&ziKxFQ|~-+TF0*yEBYJRkawnt5b0tLg`943HX6PCLrZ(#TRnY7zFOWpyDW4g_in z^XZX}K<2}___VoWsS23>iUAh_+LMwrXZZ>CE>_QXT_$-D%F05)z*Wxn=?~PEje8U3 zdm8BnV61gxhEzB`e;F%(IYoMqG%wG8jv)TJvPqHE*jv@p-;87KDO}2J%T?uu(i+{f z_6F&f11H)vbDJR>waFwK{88(Tk&trb#jaYcPt-$-Fa9{1rk zG~etFKPkjl2Ypa zjhp_i$>F4(pUNB_L(2Dx_w>kw89^0vN>mB}5oSZX!sh>#UNt_%|3TPC1sk=}y`TP9 zE0ssB`i07&&SAZNs=IB!sF6TwPwevj_K=xguRLZy{Xm9vUJK`5_@>^DbHOeak2i|j z_7JYL(WSJwB%0M!9Iun-F6(CDM6_+yfM>qW4^vZuv3{Vn6kyi;e2%-lS5_Zs^)r$$ zD!}&f$o@hn7b*ltnciC;K2agn32tB>D1=R3Hz(@STGOX)y5uB7bT~~s?7`0)oBL%~ zm`n~7*JyFT>0sr-ziqRVy0YjEY3hIC_Z)?GQ`S{iFG88QN*^|yc}ZMPx4I!?6y_56 z*V4*ko#jx+BT-;o^N9iEGKF6j?cOSJO8WcE6f_eQ?BCk-fdsMBEIOl1YLlKm``1)d z*uwvpVwAdigZAJ7C)-A|6JkqHao|(}9_}%yeVt6M=w-~ep-p>l&Ubz%EJ^m%v~p;W z$U$N9nZtalRxg1*ycWft+mawz1zJu+}hT1{E0S*qDxAMuhay=Sd zBBgX3I`14xhS!9n` z#gx_0B|~d`8=gnweol8XKFDgugsis$U(b;QMUjj5>JVnzx;5R5R7|8!3uE8en<2!g zx#%IQ?jOXO%d1W1#NP+fx<5!C=MxzJb>CDLkiTG3#8h>IPEB@nN~m>{7FWpX^FFBh z5#|3uaHnLU2}*3c9^Ppz*vtHbh}~)_T~L6^WRN%5s-Lg_F4ks2#^4Y9#J<8kBWee1 zF~$rto6<;!-Qlf+vh118NZiaBj!0b3hUw1C`MAH=&|8ACTG6_PfUJurN3QQOCG7Qc8w!&04H5tk)L1;Qme%Xf%`pNLrX`;pOZ1G8j`*KS@ zt@~>Zm0pE}{bGAaAu&))Z^7s>D!8z|uPz2IH!nD&pEk%IV&pE`G28m}{;wfT=U4TT z%(5(hp4{Jq8+DNi^;V#)k0XgcvARyv@+l4ewKXhXnHnmrrFgDaf{@Ivy5&kZIZOr@ zZC~Y;T>Ed5Yk+pQ)1!#P-^$$S`G;e*cl|E8u%XNgP$oF(V^y&kG zrY3vRx~2FvS&ThzSkl;qre+*JM?^O+yGc{WZ(riAkiZ2~6;axvGCS7|iXYxxz(%7| zmyDW+2}Y>*O5X`A$CqfIB_yb8gtj{z*71QGpYp2fz+3a7TZvJqJk<9QB9l%~jbo0h6abwNf2gObB?*97XS2 z9zYe(1>e8PK0W#0m_G%4hSVqsqIUfBU2ip^=*wMXZ%Ss&{~QvxshKqg8#`nNO#~UL zs-D4oHj2t$4;V$p3m$?7-(nq&E64~PJ6&>k_-|CTl;titrj0J*>Mp5;SFmG&J=D~n z@j%DK`8dwY)TJUc18@BHo53SnMf%1v-_L>AU^cg?%zo-U1yMjE`)@bN|?7lS+>FUdvwI$ zEPGMitTf_AAbH_v&c6hgoM9?sTvt|PjXs#Qv1Eqrwr%6Ap~8uWb189w>`dfI*VI)A zr3{d{*O4XM{~xY(Qofy7!!Xo6?b#Ip3{GR<48eVAquqLA-`-av9-$Ae!WV8B2e>zv z?O$-rzw+2Ca>hsbHEJrS_N>P6j8WbLRW+m?*698^35DcqwzS06AEKuPQZm|Gd_qNI zgrr*@ade0OV&T$&F4X8)zca^JRt!=}sEmAdJYKb_{@-U_ES682ENA0*vz~UHauD*D~P% zuC=y*6S-6E_8b!86v+sz>FSU@rsq#1)%~V~W)>z9x);n=MIpf;-Jss4yJglfUo=oB zN2A7W0rr`3+n<<+AnK$~M6iT?2udL*_0zT+saeBi_(M!)dzIZSpQLZ;0BWxwR=Bd6 z$zKoPv$(o8yA${_K%d_aBu@Le;hx>Sz_xHNb5t?O^32x&b`mCjt9b?>8LsiB^7|r=VZolG^MDN}S2KfkZb!%IZW#%2BKgmO9H{6{W z5-%J#r}i~1b|yq|TYfqFOmu7CaQm5&%^TTyZZ@|;M$jT~;J^mHGk@B(Rnpk~yY2Z3 zw(z587TR$IZ-s}i`o3XmMg1a)8=vQUrjm9lPbS4eFxh3#1APwqiU~@YPaL9^ncW(+ z>OqfcdvU1)+87^`XwF-q&>4>hxvVk`46vcD?n8gpzpnhsG2oX{Zx5JHOMY|kV%%$S zwddQaODV^GOM1gve#aSqB5S7^vYV~-MslL$ho50oa8Lhd9|`RnK+u{>4A=2N`rgP$ zRn!(-TmOsW=kk7H+qPG~vvPpDKTNmGK3IF*!oGEXPGhGB;>J%k@$)s_=AQ0nh2`p6 zXSZimKY@;R%RCL``5%fu!RXzLpoWJ@Ccj;=U>~S)cdA3{@dm>S8h7>Odb!*nprmKg zt26F4^C;*J%(MMKZ&Mrmi-sn8#J**LyBl)Q+CPyW|G@*?mGTZlqRAP`XX4~d%nuI= zX3HX#;E=8@b!zM!aY;lRpp7Bn1g#k!{o|TBNkY&suyceo>EkgC|edPhVI*KFOS>c`1KTd3~OIHmvrs z&bi)agPo%Z73&DQv-_uSNwyMlLrjt^Vl#eFd1rfcy1B#1hRXC+O%;d4g}F>UOVxtt zA9@hL;_c;2M!92g+5aFUxAT1%Ck5iO6U_kb>9-iZjwW-C;`qwFJ{9x)ilua8J&kmF zPDbyaC`IMc{LOYX-~Y5zVz=g!s&~QM($St+mmA2(Y)$y~Rw{fknJ)!*W63=gmXF!-Z=3xujg?2>(=HD8qmI*P{kZ#CeqVzVhtnd0! z7EJ@2H0ePY2C@A7Nua9NxJqbGTba=$O1t{GcJf_Frt));>53%mYfWV9^RnGD%hZMI zc9)ik|JYP2L*UgR*kdA1?_q4{e+3B|_`YxY=iIuJ_RSF&8*@FgX=8-TaDuE^0~x*o zccNmySW-6H9XDRetGyv-K&xBFyU`Z5hOg40e-OGt??g)o8dG#eH-Ff!+SY{Sb1KYo zvnf%E+#iX!-1m>jTSu5`4%9NqEhYi?oqf)rCe3-#VEH!eE{_Vi|E)>22e z&F7C6^pD0Vmxb<)EHogeT}R5~=0Av%4W>?m=Wk^=Xb?GtzJC?pD|q)~rwEuGUznWU zsfm)N zU9UCX+5VRvo5=;G|pTG=(ALAJrw1)k2E5#ir|H~bo zie+~%SKko*i4M!(T>n8-k>-^PD!r6_){gK#=eudqKj*psBN~1A?~b4UI2Di(802hX z=&B~pf${lQU+eqkcCT6gpA4)BxmXM5@cRVXeunxZTBW*@2wTA=IxE$$w7+MccyvN* zGs8PTV`@ z@y(ADFau2^f#i~2f3FG~M+!edUL%`-&rEp~S;m|hqpFaZoU;VUysE4lv8O+je5E%H zcnz}f8T2PdR&J&nq6oMIRiX?U!vX!@$!mFl+bqsp!3Wp@FUh4G&;pd)JAg(hBuA2+ zBumSC7%BGG98CIvxpCC%A_b_yajSL1=72pePvNoyi)BJQpdHCqA-GM*d}Ly*q!W6o z6y|OVGD#o%Iygz^X*LIUqIN-O)+|N*e-IqwjX$A#&uqPD?aPbU?4=?5*C*qQhlA9K z-lz+XQS7CVxAKCFqA}0=0!kL`FCC0B{RnyVO@9|Q1T7?F>TlcH1`k3XAgiL(&qst1 z=~JT0?2^@s4;wdnRm$=Hh=X0A2QMp?N!7U61vl%wmxL-+L!QmuA`=B*8c<;_BUNl} zamci3ZZa*Nz|bNn>uELMbn>=G%TUQK$ceCb@0YALd9d%PEXm`7`z9;csD;F%56CWB zjB4pma49Uac*3Yja5(B|r`5^KC$wN|l*~2B$IYMxu~=oXcRvZ>kwg>v5S##drlc8w z#k;2qu11`Nup@bdIzw5w7_YV$ThmiI8Q&mjg@i>}Ocng6{=poKE0RO;na<9#s(-d) z3aMO`X}zsw;30pizmtb{S!aJ4;jw)lSbapOX+wIoWP=Q*a7+cia}1g+Uvf1}qHAXJ z%19AUCs-tPA3_ExB7=ldryx{Y9kXjsfph6OV7X6Dv!KLVir29Zf@KXsR?A!kvKN2T zkh#E($~UXvjb}Z-RlBO{j|c>X)gGtwu6@Yor!yD3=_}j#vZY`RM_YB2ngFTa$X+0n zYDxcj7r^&q#6V9f)9^Ll17()i`t^2p3w?_^HT846)ySRQJJzh~VD6oc{d44Vr|A~C z(ptYrUFhMt{rh(nbg}(?n)gus9zDj&fjJ6Gf5&@H3as8cxr7Jo+UWclMA^Z9Pf6n_ zq4l?91bh3V+MBN?Oe5tuFk6@cc<&IDAEJDdrm@Orj5f461q_U_XKaw=%Euk07v7X~ z*cv+sRaXHdfha#To-49rsdD2b9vRR(2|#`#Y19HePA%>LKG7Gl$I4N9r5x6Q1eUdK zoUoi^ZG>BHmpBN)(8as9LK10Wmz7%DLz1k3;Ba%H^qxBL zj8osd2@wCEF;VZ{7ulDZvBZYaY*dYK35dNE5EdSmyUGtG!Ea_P2(NylXBk?(m37lJ zr>}0$4(coBZ`X=!WJPB&Czr*=i_VR{#S+AfWm6)lB}mvfFGg2j?K~8V9_2jF2e7d_ z?6quSy30~WCeHHM511LAQ}W=BQSbS*drh zaU6#cf2++6*Cb+C@wdW#ektOWK5E#f5FRx$8{Ae1YkrfncD;@rM_Dt^mJMIlVLgws z3&d%wj=lKJvgGc{)AMB>TwSiKog63M)Tf+qIZ{_?Tur=PCh zFAXNQ0?mdD+naxM(n`{)YJ88%A&C|I*)xGvETQ$>2Ga02L3 zUJ(Dp}5LB5*jqH+}$Z+F5fnlPsF5gj?|2T=6@rZWb zx`qIV53gXr@hn1x0VA5faR}4Y=p-V(5RKgLIYB~N5VJWD1v?v&zQW#iJ>>NBX=oW4Sb?+GtS}cAGd)9@Ynw!Tzk(57CfG! zk_lj5>n@?-Z26TS{rbjeTa_?7((LivviGCkHS}mGCm5}o z$=URVmk~?hCc00$jd^)p@~&I2lPf7Iio=c@ncE2Yx=+vrg@%+%8-8tN6IK;P^FtjM% zYve}~N7-_sISc*Z|x)3TP z`3X3t)n#C99)w&rZ6?T&4bfm_h;N9@L&G%iCnri%c2|1>00>bpxLdXgz-GEsjO(pu zn-4~?TY9OF)~#CqL`3e}Oz67QkZN7Z=_*0BL4FasTU4LGNaGz3dl*GqCUqW*{TFb& z1*)Hf48+YP9KyI4VO|n9v4HCzEjGclyYuz^5UIFI+H23M?Xw76PpUzMn8!f`6R z6FrWJsuKC&1wOXmZgzhOLa?0~hO&y?i^z+TWcn%fUu~RoY(!V+)zpXqT;pJ5O0kF( zR$e(p6Bdp7->GTE1^pgWXTc_Jh=dNpbMP?!%OsHIca~7vPy!*;lg;(=Ky6H_JHEm; z++Gl3QZx^?Ghag!;vTDc8@1!T;T$3c=QSMTlB9TIU+OljWp+Mu&U}L0FR!97_WgyX zouOZ{PQUx061IO2ri0VgBRJHds@K|{vaRx+XqjpyCULY%89Nv}#mD^6jo8ogW>XRH zhj9AZ((qFw)N_KrDp_hmrAin6DS?1ii6BwhB%)8qj>M`1#MuaGE*W6$#WaVhjmBMc-hszI;w z*HzCL*qZ>DBpnHoos26*ybqK7hUHyhLD2yKj2Rcj5|x>WGMx=p!dQ29ei9{tT+*1ln5qnwYRtRt-a1vsw+48wcJHi^9rBK82AMd}mfig0sTg zKzT)2l}>EpbjCU{4AK>yJdNQ$M+E+nR+%|U0Ii#@wVQ<72QzjOCWo7kmh7cD)8p|w zjAniDjr)nBBx{P?Nd;YtE~1T)gTf{NkK@cS+x!MazQtyy{%yGeTBsBfQpE)I0vwiS ziGkxYBU}^yrI9aX1)$3OrMdvxQ$|69QP&bPx`HDCU|=9PtSe&`kUhV^B-iSldiR(0 zW^FudprODp-eGE>X-`bS5OsS4b<{L0J;%fWVV4A*LK!vkN3LZ$%GQF;#w3yS>DQAIu%R=VW zVXh``he?Zj(nw30MR@FMW;m7DczSJG;|#X)@NwALi?d3$?LEq}%jB2zgfFAkz_>{W zF7GS(VT*Z~JskFtHse8rGAy;s82m>nMGa2rXe*vsE_i1qiuxEaF|6P8k!OD%9~3Vm zPK$@&8OIxultOUkA%J1)?);Yc6wEjl$ayJ%1;JkWZ>~rEy0+n2m1)fe{lwH}o;qUK z^h>>KyF~VZjPhl8sOIe|N^?K@S-4zU9SYaeI0V>nc+yC%Ydn4Nc-r!IsJN1sgw?#DhQDjNwWV%wHVB;SP$&bexGpI+r3XcV=fhUd-pp99v<;!GP zb>I&O2FJp?WSCV>&?BJ1P#lb=T`;|kOii}%t#m~dX5o+Ua2V&*b!>>%7^0-=wCY7# zAyfG$?g?*oeY0|7lm8&Z!>bx-*H|f19}%v}k7AA)6S5m|sb!;>&C$=X@-2`!0wY?l zc<|6ob+Onk)s_;-spGWI)@Ff6-60RZNf8FQ7)4K|YIcefs8{HUoJIyKm*0ZLFUh<)t8R4h|^H|3!PeX^{YI| z&VczI9WoK=uDB+>Z8&}0_f`zhSj1c~v!oDDfPBfEK7Q{nQ_R)0_Out|X1x2W6dAR~ z+03I`$!3>&#$>bbdg~wnhav?YGJpg*6~$x-mERtJ##@EbyPzrACW}*)5}!(8w3WI5 zvh5-$7iH0ulqT0br87&W1yS#h)YJ!IgL-@V?qktJb_3d`c1W7_-1w$%i5X@WV%;fBM zb?uy{az?p-R6IX(jh$&*sG7_qNn%`+CmwJ1t|WUwCd80-_iZs43mPeH zOP7H4;7iHu_yYG!H9q`>u2o4qsj-6jH^NBSswXt+GSkG$a2)kcJw@&hZIyeKFH0szZQii{3ZBAUHeM5bx zhWsIY0t0}a-b>>R-ZE^5OL~|Xa>n~XF{n3L`O>0zQ1m@{5ogOzW`Xg<&=eRlloN_1 zYopH`nLiL&f*HFi*B2Gu1^&`3E8{vhcMqw6l`?7ad36#!=!6E92M6)@;9X6IEd&km zOT-PaMim(^Bn`(T&XY#_e3Ze84Q6zJ`p>Uc(}<67)SSx}s8k($Lijj1CGc#lq8a2O z(J)0d8D=t*@3{yW1Sibl?RkK<8>t`+V|!frLER~QH-TAk_wlx}eT)F1o$)FbUO&QA z^j&(!NvbdT{1v=LnDEV*DI6OGhIrPa6l}d%*CbiZ&N!5VC2zVmGi#||JOcZC5Hw|3 zxx&Yskw@aBwh2Nb{h#Tz2}AE0bSVr(-2$8fS%V5Do|D1ZN9+YqgVTx7QexzU3Yk&s zyl@=s%Vd|k44o7Pm<7RU8}#sBW5KD&MXyHE8wC4(jVd9jHzu}WDnB8B zOk=Cf)^vb)#G+(LxA5K#%!dn)e34NBm72D4La=vrz)1rZq}*M8*zJ?YS`bT4dNJ=y zuqupBTOe0_k&iVVHc_a_lq#XgtLk(LyK|R|*5F4ufi;=zgPL5%-}t$>h#bl(66g>H z{rzHuR)R5^DQQ&#J-E7pqG~XijF7y5aYAJ#ym-@@PMy6*lg|$IF;v%ypD6k4g;LwS zZkVAT0z%g1g05p=($ZzH-RHtE#ys6hZ53-w@D5Jwdm(`r41zQ@^p=5*fhN5h(KY&k z@x@LMypPQ5D>>OtEyhn{3uDWCUHU{4xor9d(x^e*CJm~%SSowDnve;!R8}-vZoLBj z3CMx)vCrO+A$82=Or-jr`nLkTOO>5luHj;cNx3#VkXr^{&=-UVam>GxT!Ze=t({$I z#-0HBx%jW?M=4Yz>S_lh1d=*j6nmjgmMDr1j1hcdu8^4*~l#}ZUe6g~B>Dn|0 z=MVl$@povb7)gHR3#E?|h#h4^HJ;o?_6(idM!)W(YDn{zAnEVy1*RO(R?BnRKqtfI zS42B#hOt0fdP&I@{)3>f1(WVkGNhx9rli+>ML^ucfUlSMrsE7FUlTPrkY9!M{R9cX z!Cq)eVZ-CRyb}+yu!xsWE`RmIn4r)wn4jt8T2SoS_|?Jbx+qCr||ys`zg7svMtu3 zqPy^?ZRe~e*TpX~6gg=Y3%!mM++K5i4y4KA3p~mspc;<+Ai%j)Jei_9^$F@#fChls zwVQ$vy9ZA^kc0%9OVgB84=TA9bmeC$sk_BBuQ5#(OA6CQVY6VSLUF#44Jy%ObxSIr z(ePd$99KL+i%(|Qn6x}gL|zHRM@ue#D4psRrcL0Rwp z$iQHpc?rqx^9(VF zb_xBCM3S5lnU}QJ=q)+HpNxhe?}eiY8){B4=uTw_xxn)Lg(t~ILuPKvjkfA~Ow`BKHlDY~&_Mt~2jR1c%#78@#B2uNgO`6QX&Y z9x*Y1e;<;t9LYYWo}z)&dMts`(%iVXz;tNaX-xOUGGZ%=7C{G-S`T0+f1L}0)g_b@ zkt#6hzGvFKn{ETGxkUw!jpL50B*Mdz!A#L%Nhon#U=_HB z9Fpl`wJ;?{C{$TFpZ_s^T&`M>W}R$m&P16MG`FC$H`#SGkC;>zTWrZVqaY2dR!}aL zgKnXGJ=V30e3{Xmj<#aefIhAJ;t18OxfL|ELB=;P-o{*l@j_8!7beX#0C6rCr zE+qM&_vkX~eb8hFoRMRbh9!pKAMwHWo}V5r%D<-3R48O z1}9irazMS-yX6ZZdD!w zOWe#jH=L*@1*vu$T;)?(7dP~yH-$aW6rgXcAZdaI5^S4Fp|>2o-@N7694lUU+cj&1 za|r$|tvY0%y*DYRyxO#t^tw|RpP7-3<@7tH^h{JpOoDV4{$zeA;U=QUb184R^)ZnR z6zw*Y3Y1yYni8T~P z@}qLkg2gL{9-~@tN_AS4vNZR!F`Zmhla#43W#INkg|74!!JOwlx*?W&GcGdDqZDG9 zkS=4ngC6B>&~y|?rsdELRnz?g?f8itJChXf!wyO;tQv!yFGMJ)QLG2Kj- z2nOR>N1BK}qJESYdiWFhx%O6MRe}XD`LtT((`2U;`QLbXq)R}WOP0c?106?2TzUDd)Dx%N*>aS0x=^LCS2hO+_By-Sqz`07yN>D` zHtl2nlY!)lLKoBsvpO+3VQpL(6YNYZVfH?U*~7m%%{fy^n4KIGt8qo9oZXL+Vm5c2 zZ16!s1OtDH-}xFDhDH#Kd}1ZRm6?=-F7Pg%6hs8Jh1rC~U^MEAOE9x36E1HZf&h;+ zPw8kyj^doH*y~C}*%#GCAj>Mre4bKNd0m3DfI(JikID25x9@_Sjkc~!hx9Ju*fJ{8 z)14JqmDIu*jeE;#K5KQ}qci}kuE~4}u}QTw z3;yGNIYB(e2X?OQs%uQfrlIT~03mbnA0XVYu>m;acOhtu(6yzfQG?Os46I6P*CPHk!~%=O$N|%ytKwa6#8o4BDe)*+z>KxS{>2+V$}ZB>D${ zPpADPs6VGWvc;8ADqQ@Qg=gvvk`!`@tgUlf)DA9aGnJ}cdpm= za0Sy1sakEK?d+&lOS;KaD+iuF{x~Jv;yq7}CSM2`f+i*41SKbEAl2BNxBXD>-j4+TOljf)r-$DaB zWSYCrm5sXvrLu0qu~PQjO@eVRv~bgtgBRQV=UMBL+{`IMYh#TJZ`p5}BR27_kP5bF zNAD_ci~O0_>YQ*JU?Xo|O4*kUbLd?1yAp2}s_8zLzQWgrelg3`mHAJUgo$q)irV_c zF<@~4=!lU$af2%A8a>-Pon26LnD_#{zi+4q`#x$fNLHbyD_{MYMF5srhYVN3C(%1W?5bwz&FV!`lbckbS*zUIE8%r*q$r8W$0p_d$w z6r3)#BZCc@1YS|QPdF!P_)p~6d92BFWoujo+w5;MTGUGMbr;@^OzpY54U`+teM(Fe zWyc6$mJ&XpeEne5Im9vI4-ApE9TPSOh<1d6eZ_Z2YI0-Zk)i6GW==eKQiz$xx9=b6 zmgmSZ@nBF#YyP5{4~W-6-Yk4MF-#_hFP%G2W8#X3rrEia0izZsI5pKp=kr}sK~yKx z$Xg@NI^g=;4VrlvX zrBI!})Ng-9@n3N*=23`#1|L(oWPbhgk(+%s3&%f?%ArE~;j9Z_>3`vu-4iSCtGc`V zLP}8ooC|cqUFEF(JS5bFp${Ghl8tNJB;uL;iM>cC<5RpJH->L|9oJ?;M(MJ^^g7uJ zE?Va|RV7781n%9!e&lmEPyW$Dv1R&eR1@^g(!|f23>1)1ku`txbDjT76Zf9d6s`&2 zee2)vTu^eA4f+hBp}FyEdFD?aZupi#-*0q~@e{KQdj>BHyL$N0LvM#}m~!wbNO1KZ zV4g?A4$(lhGPCaLd~O60(!FjQYYny^VqDiTox!(-M)Y9h&PAB4h^`T0C|V%2Lh9@X zmC1*o>O#D99N#8R;zMt5wnW66iUDTrZ}vd#WMRLRnY{049<*vT_%}_cL7d{$hb34q zGtJCDEUTZ&O2yX0}dY@AAr&WD#2x- z!)8afT0XCHCd+nlT|^G)L1%G zCUJJabcf}MBDl{V=OwM$jwE>EC`eC)ljb|=`vctD=k=bmUFX+T)y-|Lx40717N4tm z;~{9B*9cL{zIp1#DK2^jLSfX~p^!cF26n)(_ATr@)%RfPVCm*J+Pdc?UK+wZL;O-# z@15S?>-*w3S#|$1^nK-hUVi(r=0rV22pD(^6WF96zl42j{tmG)N97~49biIM!jSM2 zj8OYBCp}7~6-PtA#G0;<$0#)9R26Pij3VOs_Yqc>)gK8a%@jcBt#t1j!C+!*Jd{#9 zl#>TkP=t#}uqTUoQS~s>P+rfG5w|0*PMC9F^5n~=?$H@oN-IOoW{<~I(=7NKzyPUEawluE6@ zUi*Nu5x-A&X1J!q-}j4A>Y&1FX@ViJ^mKJh_vpAbtrOLy5HPG)T*sG0%7cAD;`+FE zl+lmGKt=M^x%=Qo!q2^Lpt@`ZM?8dF@k0DYf~t~;`G=G(m?~8QS7}uCCSsBo=AAa= z{n+v>$b@%2FN>M(PCH?_eM;1l4hbNyWUMb-A-iV?DftL#A-Q>SIk~KCoW=GApvbJ8( zYu+ep5Pn;ZlF?Py;5r>DHUdtB-F;e$VALn*=tRMu3Ll%QyI;;8uE!tK`jNvF`DISc zbratD*siR0bai^H0Isr=7Le+j=5^?(dfY@4R5P9O?-uZ>$rm8F*US{TMcQsP$Na zh&aur(N6tiFTB#xS5{fXsI|YNoWsVC8kqme*ZaIWwZW+ z*>%&IP*?u~J5>hs)c~a#%;Fv}r+uOkA#9c49@g~rO~)q`#d!h2_^WsErZCyVDLQ?d zQSI*~mn<4#$?70-dKyrMl;_loTt;nZv{Ig`5v>y$zYXm*EBvtyE#6+TOq^rH7y;@>7}TEc^R?rPlu{9a z4o^k`itJ^Q{U1Qj5Y^0M(>vAd!Y4vZ3GX|p&eTd7Xc}cS>?V{13~Qy7$2e&XuP^$o zhHw)(+S)DF7)dE$*-x308+n$lWTe;vSC?H`@-n@PRHOY*VNBRpZt}QnuU;YGQ=M%w z)f0U4`fE`dx7lxZmHZ)`4L=*whOoPAZerM~gH1}%>y>S$C zMus;(eBt&-{?I|KDzQ)o!^2K;)kE&qRp(BY^=`hLgig$f_V9J0CTv>y-;Ac$^D7Vk zrNlNzpEX^nKI!LH$)t8W4CF8bhpxxgrE(WmTC|>?&|B6{^9B~sE_=Q>q3^C>0AGZH zwAnsd)PjAA+g!#32cgfWzf|icKF(tZq#5I+*Fp^SFvnV#7hEci6PozOMx*AihfL4? z_jCu%zqnK&1S)7d!N)>v$)|nb_yB)XjvaG zbz6l@w5P~^(~q?J*!;iue8#-ToTcu}9E96NJGdp^0uFodRvDd6=jk)7;HBC}-(i!T$zHp0BAhB{f^B}SC>v|>>huQaOxi4C=_iZ22e4Ee^ ziGMJQ-!&EycgqIhafl}bCtQqjLxFiXnt~hwm&`thhLf39BI_tB!B_#1JdEiQ4+{u~ zB}1lEjX*4kB@~T-G?is9Q9umofOt3MR-NSEg#)zQ+@!>lE{1Nl#Pi=xf+!SWS;oL$ zX1Q-;Fv({yBUf5Op>c_((r(8Hn`XI{5s2ge0s8MJ`9tSPL+ANDPyu%+!(j8IU=#ee z^ZY?5Uv^;iV$6U-%%JmH>cLc}l zOWytsH6QZ)jCM=hVEFSzP&9P!CXlNmDLbdlHXRlN<#7ZxfI)s{Jk-tbE{ThbA>yWw z&n2K%Y%CUSCq)vZ-DLXJg_v~G_;G+hi0+L*b%iaR=Y{&t1jy$b0ox!uTdwI8dyn>) zH41@|7zvti*3NJqfaypq4DXQkc%-<)gtb546*x|G>ZTk<8FazjedqyAan)#)2ngp9 z5q(co_HbCF&O?r6M_Z6Ejz6?r`jG6ncu=4?$|ZDU3$3E~dYZFjCe?2eWL!ol_L^-p zA3m8c|G?INgncePr?xCt$P*HA-urChqr^SPfF!>8Gbt8WGh^H@?R}`5`gz+SmYA%c z?d`kAIntHKYLT=)^&}sQqVknn9HwBKSbd1R53gs&zD7xD@?LT~aFLv8*)Z)Qok}df zSPfV!b%$NlC=>x}>@~!9c!trV^?+4@{7Swe*Z$b&^-!%mkTa2sXhcx@Q9m(+o6Tm5 z)XJM2>v6_X7uyNkm_*!W6HC+O+UD224B6xn<2oDB6Mb}mhS44}k06kbx8H9r5! zMOiOxu#ViuEpGMh-62jG=-SuSaKd`$LG53QRD?H$iY!Zi^Z@(#PfdlCGsE% z{sAs`P%?$D-n~rTRm8)@srV6FKYT5VsN6?KHe)>RRdKJou;IpY$W= zY$C;tb*fQ9P(3- z+u48%8qDw^x!*N3rP<$9Bjk#?xyv%W#aul*I6a=z&^1TerlY%~h@JAI$0X;0{ z(AQySV*|Qg5f~m8K;olw>}}2!`Lc@Js;w{d(CBvZD4x`SBNbB5o!E^NLy&FY_T^ma zM_lUw_5Dxq^PMK58T~iHv;emk;(?ntbOO;7%SR*^Hj{p|LslqGWmaH5hkuT~)Jbcr-dP+1++;jUz#d|O{<@*l+>Xp?3Da@SDF-T|ZF@6?>+%&j2G#e&; z{y>#%f4G|6cxxsx{~^_8BA_!z#(YPT)^yzCBD5-M)~}GM#BABJL+N9Y8m-$r>_MG} zat`)Iq}YHlLN5330r#(aNZc2g`|XJMSuEg0+({O=gGRzI(x+%iJZRv>QT*&Zi3jT8 z=>e|Vt$WTaI?|e54vCV-oX`Q+`S|_%-wYIq+HY7=7i3%ukv!#A{uWFbMm0blRF< z=54gFAgwcKJo-_Z?W^Mb;v_yi_YY^__E2Fb}b-RWN{^k-`)7AcrO!IXU&NVPujMU5>-%`gB?*H9=x<}%k3;v!v3DY~YnV4P6 z5AdYGl|$Y#>g%O{WAFuadAyf!`2=Dyj5;CL9SrvB%VN(vkL%hWw5Lj>AftcBW76gW zVe~YFXFWL~)Yq@vU7>1Q!Zk6kDio1MC=_kD)}tE#@&1Ola-&5kGGyA~E~E7hlkhX;?}t7!`iM#{1jhH}$`s+kabHq+2`($_OyhiEN-zHw!Q z)UP1Ll6uW_lx<*vbAf2|(u+?zc7`zD^j63{ig*>7!j0ea?mEfRNl<|YJHvV?LPm!5 z@|r2rGZbRYmiq4e+1koNC`sl5%zpx(3SA&+SfE|3!kZy4!Rb%1yVrqf%MwK@)I%!Y zydER!Wtau^xfJWhD}{UZYH&p3MNjtN;eh?)%M8QJmcciey4@?Vi^g;Dr`OajFRG!8 zttl%Cjwj8QJhOARpP{(Fs^<8?XSizk1DZ*2;Awo?qY8oQ_dGo(R zM5s+Xw2BA;VPOmfvCKT*Xa=6L&Dru`iv8`N@cZ~j9{yO;w&$& zq$4Z5o42Ztne!@pm+oASfYtl~W)&bw+Ai^i&=D5e36tJx73%Wj?WwLP#}p(%bf`v? z&FV;_aV1u>)KW+O6E(sr74f1qC^-z|!T9 zt%sjVl1PbFvAl?!DPo3es)RH@H|h^p%N>A<|F+=eqipg+YHP812jO#*zR_)Gw|?=~&$4v17&mcw6F zV%ctJmB-AN0NsG}PX;WQ32RU#wH}rF-k`R0|CON;MI%0xJQzScwH;w+Nva2z+jMt% zD%V%H>2QPxNRdrM9g-j15=*9-KS^!&; zui4ODUl1>|SvE?zA)k-&T<;6ch1mET>|bUuJWqZXIy;inQYCUSxm=suW^fPv4G%N< z8BUlWoOu59jg|qRGg<&8BbQM3BKK9yom9X+g9%M8nE^T((ZEW-=jE)oIb?!ef};bt z!yuEQfDz9K=Y(!9pdgf?_M5%hz`%JYJ6w9i_Abk|$)l}mmIbx3e#44#HY0PWgyv%s zSio*k`i0s&*tUaN3k%({Q9UJ8X2h`p64l@|!c=%Rhq1bc9hcoqs6xP$2FwdmQXO?`?c4|M9BUwE zfuxH8z)O}P6U#1)6i?l(h9(NNr@;g-9Fl@kKiG!J&`+8mT{)tDsflh~&HW@5zv$6)U>0?*2>yAQ0v~H;6(HiBjePTZTO#)t|m3(ki>sW>aRx0(2dQcuPDd4WM_2-c~DSf?qS=Sa)W_2+KD3Wt^m*S?s zC~>}q1tvvFdTu7aCg&LQJuuoXJ3!cT$1BX;D=g^~Wt1fsPZzW9 z({Pg=gmI?%fm(yeA%Sz65HvEsN6h%sb@=4;o6;e^^(6Ikz&@(T8_v`XkEI0+VJ=(4D&_Z(pvp-F?;0--WS8Nl`+EQ9v{T@j zsS!3>%jZZTTh@mXMK|2CG?VDlmyQRL*}L!GMa0&eY#ikrv%|!HF^(PC)BEusK+2`c=&nQ= z?{6(wBSAZuv`5I?$Vn0?h^93UGjSoEV4>UKV;Y3W_veE3vJED;kO*}gW)!CdCVHiOcYE{${APM?X;N1@p|-eIGU-&@%F0v9zi}upSEXU_Ue2o`g?ZB` zYRYfi!Z-vDr6#s=6s)@S9#UAAH_#;i(37+ORv65O-g0bsdABs8`n-E*kL0r>toNl0 zF@SB9c%5~W#bDCB{2w3=fx1w3LD0!!pL|gOM9BzVjcqyfG0h_G#EHhl`EaE3qW+RL zVr&mIdTmmr7GTNQ)E`yzqTA?=D>uJ}68`=O_ab0^3s6;mMFMlxtCqoez#*Qqk7>_Q zgkg(;KrH!&**{K9&Th{B-3j><``fF55l!d!*Mb44ani-t+>XukQ`*zWPe6Td$;|9V zlN=g+s8Aa?Ki8jt3||SlZfjC}lxXq72lbcmj^BbPXnzeO0V~^z>d158r5qELabVB4Aubrh9!eazz3C+8NLQT9$Tf3t0-s8ScPYo|f z=Q@k2Lb=I;r?wdm!{v+t#DuVgWo-r;21R+S{BF+#sA@7lVJK84jU{&XsTVwKS)v9~&XK2)B#k*sAcY66Vcq2B8xHccQY_%qyk!m-u8>%j zYZ_0m##|6QD@hIvig6CP3lHg(iGroT;PYr?LEeJkS66u!z%JsT!9Wa%6^&5w?|L@f z1GeyKxGgopr(_uFcKty|ilK@}Bv5B3%NUxu_soEjs5)0ZI$l_6XS^H9zub7|_VEim zVv%i-$GUH}IDRURO2(`jg@!GH8EEGH+NW(BulyNEj;JskvNq6bU3Mk-J%s?Z%Kj|h ziw+@YE>C}1i)I!P1ml;c&q1GL>aI6P6Faar)cP9BF~vK9u!f|jDCfIf*m^VtB>|d? z>sChDGxXFcn&OfIDaa=~@S`jR$Cb7abw7@D0@DpPO zCNJ$U-d&m7Ik_~?>EgRIVEb{aicK*wWW|iC*TtPYAL?EMv8j+w%in(nOjZ>Wxk{__ zqy9NpAKkVNBX{8utkGQ3KVjcG#Dwyocz>V4bw@||DcFDW!$;&HrBG*=QVGD*rs)Mp z&_K`!es?O_k6{F2r4{;UogPk)on4!(TNhRr>O#7wSGKBW0IYLLGDl;JbcH*nwt6#z zv;>thIyIHWO)8cokdQve%}CCf?x?222a1_PPQswE?$4sYX#J3u0+dR~lTmDFX;r&Y zL{xIp_>pbY+foi}8ZqOEn6gLYSpZyQnKE1ihm=~GR9=z)EG|e94HD}sa68y$g`_1A zJ?;EA*u;NL2>xa}F344+7O)Fga4 zvut%Z2|gTQFIfx+QCV@gUm6O;W;e@g3>vj^Vv!AwnD7lCOszOBn`1ll9Vc-YQM*?; zW%+e%NTsR8VRB3m6oE=)F~^byR&kh{%{UcNa+eT%kU1I*J-dv|7ss!iARImzvwyk~ zwZ768{FUPd0RUzzL@47>RyXUJS>(Yu$r(AFMmy007oQpy|C{M!9IvW6MWIby*wH9% z9MsOH>{aWXQO=0Sqc%%=1RiU%4ulL`Y)<4`(?rLc9kLbH2uUqhK?gY4qmjpm<6grl zjpsaGqxD;6awE7Lz3btkkburXW#L%B&ZY3%r6YNbkf&INOUe zz~ieVqcuNNRci+kSYT41?|S0_xBvjOnC`wDpy|w{6Gmm>m@YVd!6yTC6xSVyTzx_P z2fvJRN?i@7CzgZZshg5dA#~P!-*TUn3Le4T&WZ{(R)$d}Q6#qBDq?kiWCDF83tZ?F znbKeSw=6355`(viV@s6vCyZ*1_SmW8+X|%CB8HTr0P${|(H9>e)+JU?s8$6H)98kY zZ~-?606>o@#0Cr*i6dr84c~Y(*cTb5eoZ^<%EUP0F_W?E!cBV;1*-0 zZCVbI7VP5G;6nQ)iC>MV&N1CJ8zDd~tmAb^)y4TN=6L*BGz@lOOoeJhY`9d_t8OQrPCCYVxQ92Fl@>me|$OCPI)}i;q|=4Qx5-h?SBI%X$oW?;vDt zguZOJ$sm+{6el@Nlr3j5?ynXuZu3&QldUW{5ojX<-vTbnVM#qfRrr(2HK7bgY~oOK z9LP?I?0K?;q~i8dA-J;p-8k}5jvFHch~O}6wX$Vrn#1*w_;v~rEr`D{+( z@a4W!awx=ADQoO~OF)mMPu0D0 zQVq4&8;%l2;0@u1ZoA_XnQ3$C~EAaTy?BN>+tl zTCrSaMhT+^`p<&p>SmWR{6POmF|bcp!0*vE`)ZoB9t_%a-ur=UAdKiGgrN1;q|Zr< zVdOoblO|sqejT%uU!0_r__M5~e$%?;J^B#S)zkN$ojL%Ln~b}MF)`7Zx-v><$vsf2 z%6P@Y<(D(9pt{XD?kG4G@bu;2H3Fp0kjy^#g^G*Rr>3k7D_im$X0`@!s!1zP?QaUl zn2NQ>s+?h_*$fXl`(p2vLU_E({7PP9Q5gz-ibCpI4f!g(h}fB6!Jq9X8$QP?)GMYZ ztwa(mVxA~ht_Gb(<|0NK>u_3OqRyj-&4z7GGsRItpTk$d4@Q;zO^30VNE2P2VV60; zK0$@F$1M~Oe=ov~8&EBc>mZ{?VV_>|SoZk`cp{Dx6^_mq<%h*#GD1V;S#NP^wzfxj ziBsnIoo*&KW-Df4+`Ji86^Td|6D2$z`mGppKQH<-hFaM)ij($l!Nl1x z?{5*x<>9jReDOaa3z{(&%w@3q)8YDI!PW`D3@pFFgk(K4eo~d5^!SzFDF!qkq&XG>8AD}csr5+nE;Ki)EH%fzwkT7i(a=xAveL&{dk#L}t@-%a zXx<1pv);fL2V2kFu@fJMB}EWzE}c={UZh&>R++piF!nceHC6>PInwkcn#R@%YGeui z3HIeT<0p zi*8x`s!SRH%6*m*wbJ-cFz^kN)ochoA#>Bl{?qv1FEM!wZT&LAo?up9*n6^B%}9*9 zufhCEUkhz1E~v*O+Qv{x$N}X2BFl1&6p@xWxmIJ9(nV4<%Y+#+RMnJB-&=&$2J)sL z`hAT9x-R(4kX)XaWluD0@pfnBWdTubzmqDl!eSNCCOa;iNW?On0-(ei&oGC)uaV zq?A9nIIH8>428)Ad6`k?x?fbqfi63hXQlKQp3Gcg;AnUPg)Lmb{2KK3?~gDUTWLM3 z2EuSN%!q`rvv;u$@fz!WJuGgohL6hQI*KoB%BV?!Ny`C^pa}^k?qsHeDdc)0#Emk+ zMutIG&UCC9qx~i)DK)%u6~5wuoYB?617Vg_351-^9&~yt2j!1`^CsBN3~o9X^*DR? z7W~RNBr&90aO%z$SRzfjdWo25m9(DBvz}Z+@-ZE>LW=HwawTheTBQ(eSj`$e_V8N4 zW9$(17xM1gDWFOFtJWZ$FPSkm1uQI;t+jiex_HGbsUzxU7$08L+a7nystivv^FzG0`vKy_HvdB+go~`y>Wbajpwd9Xr%raS>2n_l zA%8V+q|&G4(FJsP4LM6+?YUwuamPcFC;6HYL3^FY=>-&RAlg(vqs1s6#GIu1E=(T%0~^7$ekH@KUs{gPP_UuQ*!{?8ccgDwh%blE1iE zyB#A`Pm|w?xmB*x1yB{N+LSY^_%%I8vdhw5LMa%=)?AIQbnI^>fr>u*O&5#bkEjYt zyKY;bgiqH^NC3Agb|^SxsA;n5-V7F@en`D?&{F3&sW!Do0Kk@Cm^~5%Dk(5;>>BMl zcJ-eigOMo8g3y&j$Lo6;_18?9JO#JU@^*-2MH zzGxYK!79t$CafbBL3XDHg%x1_Rw{>>k&PZiUX5Gc?93h8!7N6~ka?=Ny}u6-f^?>X zA&(3Ws-8yM9Jpe~BFKctn{6HUMig9~4u-b>iL`hEZZC6e`3<$+1g$mpR8g)PQAoHQ z!*~|+%Ur&NB%AJ{X>jwhfsMIfmy;#e}-2h5R)< z!qr{0Z-b5q!dkd6vDEFpB*S0+raB8=kEL-PYcb@zPXmW+BE+`;t&<&j??7565xU8p z4XAvD!iJM%pUKr7&qJ+#r2Y>;Er`Z>=KF}y<*4{)_tj;$*i>xp{zhUJm}(RqL~BoS_$ALRARhERgLEpm zCJV(SDfwYBQ)>0cFQD}GB}ilKy`23-UikAWe};ItoH;R>;dANFwM3C%e2lpRaAIoR z+TaR~WZjP`Mq(4j!Zajf_7tT>Qzlg9*rLUhX^)^3!Cg#1ivS00D>T=bH1u>O5AaQQ zQdFe?1ZEQ|-vFv|=~CmQ>l-kSyi+9I{v&GhjfiyT05vw1LSEd~8>*O(VmlGR<3#6` z@iHbZMmrRKF(mVeb1&k=qfEx14Ul4v8oG!ets&H>v1vzDH4NrSz|oNSCw<8ho=F!! zYFiTp%1;Amf-1iQrAuO?B;xRUNYtm={wkM_*H|IN?#Xp^EIVQSqZFXmO1&l@6Co7WDzZY3F4F4{pP1 zoQbdBYS6YvVR2E#B6OiAlCQQgNL3NiykK(pX*3mW z)^0D1P-vl{Gllz+u`PXdDC2u%mD-1J2V6`lVKvF3bCKy=ERA^>S7oHD)9r6(WA=Mw zC7uAINVl5YWf~hN^+90X3b(4hn0`pz5iU3kgz1trFY5v~SeYU!SC252!BtJUnwc8t z*S@wN8oZqk5TS*x-cSi{Y_wUH)D!F3A3Fuvxyw_w<+buvVfnH}kixf7yT~7{7P#_S zdFCN)Zy#XN_zNuxDMY+yKIi@KTFe=jg)$a zU_aa&yt>WccUH9#pej}gYjBwf^2-U*Nad>Say^o1fSOLW=r1Vl4f_)8ob%w>hf9n% z{3xxejp*IGMp<|hVGxbTz;-7xlB;{^I?kym{RWAbpTY^JR(3vR%@)+=_;tL22bi_Zlv_cZ65&jdg+ern8RxJk(fJ$oh(|S zu1H_f*w+GTDU4|mA?8t2*FKKyUuVEdi$&B5e2UOZU zJfjI#_%nxqUtpHkGpDtr#mpIv&mKmI&Z4J{;nTlF=ptawIh>Ul}fGJH%FQ+O}om*4ecbAuaGj z;+A%*UIdG4ia#_iy}~#c(Oqs!Rnvc$+@oUezqszmsjUOZ8`q zbf=6+?L<*HB{o!EqB8T|HkW68WyHZ_2?-E#=&-6~b%nZqP((=6qtHRFiS_ z`ly{2f&(f=e*xo6AwkM`Qt3b>;jRdF7*CK!q-ABNP){+7leRlNAI~EadZ>OF6yv$7 z5RWrMIJW{&ge$aM!-a;h%_WF1scSCp7F6mtgVpH81P%$*X#-`THEF-a)fjK zyhP7!7dEAf@lV%>5cZ%GrO%uHP)Wd0`Cer?tQ-D^G*UNZ+BIBPZ^crn3 zK{R9jSrX;UEUHqdKTP9FQlPAYs1%WPtx6ypIlePXFa+l8yV9uW+CwUNrY;N;&HJaITv+Gj2}Bk*P95jKc#KB zy(Jn4A7Y`^!h0n_6UuIiH#3$I4i=+fXMwqte~6-~AmQ?ZXM22S0j|g_w1?%C6C5+9 z$yn@0^%a4!RR)CsYP<^6RKxK@6W;OE>DBT@YNR;5LqjeQ7&&pmD}JFuLv=wML9`AxYZtfKtaU#v>C$C){<_KVP@ddyX;Cko^AE+R0*f^Kzg18(n%9yU3d z!9T%;rBYAKE?6917B;m9CLyM#g(U1Si~#Txx9I^_!~YnTtxtYkiwDlQY$FBXFk}dc z9ByWoHQk1Y^M$(c#eDU^$*_19W9VjeUpdYq>9e6a4KC^To)d{&U~l0dNz=-q74A)3KpFXqM8 zq)N!`AF_>1X-qa{9N`P9wth0M_@r4ZYnk}4Zo)932>XOhj(8f}m<=oefI-HbbV>sD zD||!ycy~H<`C5w=@@z~)KOuf`7>v<<)V3hL%40HT+y|KmJHKd+!QKjgZd7KzFcdk6 zD-UD}%RMw;GLs6X1!A6uwzpb)^rj91TZfX+QqN?rU{Qr=wlfrr5iTn=!>Wu zGxV8U=0QIxN+tGUNy})jzz~#p-PenMY>V0nljZjeJ!EQh9o1_rdfMfa2uM_emnjo1 zjbQAB-FXVC5|F<1#mXF|Da@atLJ%f-hLulb!a|*6hp^? zM;7164ciplVi}#t(V}jeM9JuQGvnp%;rqL9gF>$fn##bs1sa}7M0I8O^L)Clb9t(h4$rB8fDPJw_tMDcB>_(lEE z$h!S3S+heXD%4R!)&*3^?DxG3cc(0{^VP9iYagpP4V=5D3AZP)p!7U#O}S-<>D@4rO?T zUytxK%3ImJbY$0(vqS`#(!m*P%F8~oSx_5D6&t#QxQv`T`zk6ft5~bHPl*+32YF7A5kN)!|poGeO}aB>vU>I$@~ zU%j9wD@&isT57(dS`mt?40)kN55q~-LJm6#{}k`C#uey&=?rgw0Q z%0CiS$986Tg&gy_v_xHQh!t;yyZi%K3ll~-<5SF}MkUh037sXOujF{kQKQI0yk}5c zGjnP*U#sn*G}L7A()4A|5?=JMEO;rXu$VgYhwZj`&Y1Ge6Cp`M7?B2Vr_pJ z@=Wk63HrZH;)2`T`7laKelq7lW4VG5J_%eucBT8}OVBjh0!(ROI_tV&$5eSnfKbCq z=v~2Bt@4)97LYQIQJ#9F?5r8i2x&6QK|~-}J(j%2l*u(i*ivl3ns8G^=M`5g@D?1- zn-W(|IN+d;`OV@vdI($ufpMaQwHX4xPzc_I_K0l&5=$J5b!D>ID;;cg8QcFyi4o~{ zT1V7y`+G3hMQ7q%>K~TR0C{ivY;$^r4Lr}X=cUGq9$kd))cnjJJ7VA{4mnXJ%7+wq zb)6C>uZecObdXpX-wx+t{3=C0B5RrlB~f(sQVtgvA2NSXlWVECz_wqTGVB?qDxT}@ zV3kaBgfp#h77Z>go>S|oa3i_GT{*L(Y|_%aZUaS_daH)mW177*gm6MA>Vyi7mN{^k zl*9!_F-;R5@tLgR^~IoYAvrBd4p%p)%KO3 z?;(xoAN~RMcqK?T20lgGJ_u``u?&n&h%d|+2A0s((`~5-bJ-vYggVnI4RLV$27r8c z#BQiq+r=3e=Q?ZN=a9Pd(Jqw}F8O8Wnhqjf`tH{7(gFo-J+V!ZD4Xi36c!sI zQptoQ+7HolziWQaW9l@tPi`^Zeq;6cr5YTUQEWX=J#lXxBw^DVsaq*x*-hS{4lY~B zKk$BuPC``-%b5QF%8fzG?Y9%rssPqv<8EvIiD~5DN=16AZ9*7-%GVPu7{elJO-Y&H zpn|+BrS4&sq3mdaQ@%Ev^fkv&w0H&PL~=o7zRNrlWZ+fCz&3z)I8O`$XPK@{GCp6v zIhaE6gC|TX)AnlX5?5~#-Mjc61&AS~bi9np7Rz(8^HtzUT7aP;~%&0RbCMzc(+Khy(Ug??n72(E8UTGFO!4Yv9 zRYFz2+W)e-j&Ubk8;*MZ7L_cm3;~PbMZcKqgI%gG?fp@|PC;XqQljHptb~A_Sjkoc z=A+YDx1nIf@dKzY4N#8&@hrPZ=~Rp{y+xri3i&H=Ya0&~1w#o0)&c?4F}Nc?pW(a6 zDxZ*(7{S5H#_)^onR7)JIii)wpl2sFH>HQL=!i(W@;pIcQl%n1u_<<#0YIc@Sh!|l zG@K>L%zYS@Sk1_b7MI6K$%<*C;|m7zjpZi{OKgyVijHcJ%o%x zXE6zEfFK3#pi^1`v1Sx(%IHOCfyxeRtQr%kcbD|t)B+JqlrMeyiYydd?KLcZ zL7{AeQ+gqG3HT8m`EtjYEcYm>OqynJm70^0|mm1q2JU%#0*6em5+0zN!F8Dai^K>%F1U0 z&q9951ve~nIYB?~8OZht{}_irUHon1?UV5wg|GvyHVt2}2fsr<`y?4X=8tkuZVDWr|flQ-spfZY2PBQj|c_sMv$;nJm3lu$T&fd}+J zCP38Sa)m9wm}GP|*dmip(l^yUlh(U=yzpxk%H9@oBR0SVZD@2XD+v| zI-2dm$+>wadXfD<0W=oN=~}am8WoO(1??USH1m_7JLXU|Fk6DyT0&i_4OL`9DF_+_ zBRTfKA*4iYz&v1FDw$aNg9U{LQ;=XWE4Ac(vWxCqAi!R5hMEV2?4u%+w*{=7!a2pL zB@WjFx#hrs{+Rlf@w6oq9;plytXiYtbbB*I=xu~t6k~!a-*AB1Yy3^&R|ICMRx#|2QH!_P#*e&D=ot4zT5Ya0A@(pRMmY{22-WA!9?Kv zW6jG8A84i92tbwj4GU7O&u|$H^<`wtWPlRhiE>4J+$=3|5eK-a>ZQg}xD)}Fi)vTm zHq<;^$C>jhv5-YG#l@5`t`z_pz>4M?fzSq7&X;!bK@Ll7=2N;#ay<;gz+9>QWIt@c zgaVt#h*QX`9q@~&mnUQbP+)ihaF8WH4iHl8Y~wCbup&|*wa)~xX8lSfkn=PtS~CARf=uS{b2TGsrFo5-y~_lzmrJQ-?g<q_bT(rA~0$+ z5>|sM=cv_JnTHcjjHuAmDBH1EOkQMyczcclzeWHRm9oW+DdCE)6)ky;=b}bp?=Jkn z1*(*u;E)AM^xaehwgv6Jt_?G$%8kW%mh}LqNb7$B$95OlGMXJgPIf_X=zcAg16Z-F zfcGG@Ba1sKg1LebE*eL5V;1?egWvTJ9gS9^D580UZk|#*bQR(#Z$uTR6HX@*KkRk~ zEK_tGZUaRxs1mvwL(u7|<`*I1X(~|ouBIt_qFVr>D@KOUA${c|fz4OCnW8|USGd47 z0Md}-sM1=O(n?Qjy7-K(J3K>yJQy<8d3=KZ0D>IwEuj{~uzy6M!UrWdKNlz-!7lI; z$PA6jb1sIwMJx=OA9J{UtH@|_b2oaZ@`D6fZ{l2B*sl?gRJX8lz-tK{kpVBG zmx+ugxVNb!P(tffQCIg1z=yNU&1;zHanUJrWz^yzeM+KRQ310X3zb63#3~4|hdpv% zLOg9TG#GSF!a}Fj}Zq^Y)`?-EGj(0P*iAf2Be{LcMOJ} zD4Ea=)%OmXya+iC5eH#doqf(Dquhw~IDIv|Hj5TYhl`aG*wfUiym(LqDBzd{7Ml(U zEv##`9^W$DXq09x*x#^!lDSqambHIV35{q6UD{(0e%-AHpT9~xlP_S#*ejp9(@f=CZ%aBjSfVPcXM8+&|VOAGkapY2~ zm4{-%+G7vOEyWMa#v*%4smfX5#o-5jpomy&QriKtHaNba!!}khA6T-*SM9`fUWJ84 zg-{altS>#;)uky0jqrcwBIa7z{lv7z7mI%oDL~$(fq{@S`NW|-o*`T(rc%|IR?-~* z05biYpu=crYO2hR;Im9aTzc^UdF>|+do8t?u>+;Dh1-5E6NXE&$gODvEb|bgM^K_Y zidSuw49P)DWHKv~rvc1J3vg}$cI9bw^(>b2Pb@=qct%=bE{-E?kVAouCSp|6~DzAt$6ni%}jw@W7pgtZm@->i?5kp3JZ#D0=TGKMO=D{O3T$T z=fT`g$b2NzzvL=pLhwlu_4?3Cq@_Eh$Pyp@{NZp4;G&vCZ4 zw&Y3CES+Ri{6Is>au)LlV~X!0Yf!gSR)j4b#gOz_eKAs_vHe0J7ktHHNtY`2Y+aaM z;P}cE{HHpyY{WDz^(-q+M~OiLb~^(vEP*d52jnIN6o(SO4v(m6&Y(B>Z``>A;E0_5 zJE#_g0@MCVtE8mYBBa*XX6fL!IZ}qELVU)`g#(ouHrJ@9v6IR_8HQVo!99#He z%Hm!sQNgg4icraBF>TB0+4qnx);%V?AS%P0{$Y#9FccK^eB`_#R!{>Sao?Y)Da2P2 z%LaZ%2~EPfsD(U7n2s2-{Z1oYOPf`~@pt$HejS=y*AZY~kUG>eL!6o>nI9V|^cxY# zMiq35qTi^e6Igf}d5KLb<<^i-lp_rfS%g-dZUZU%SAK~8LYpN(Ht}m7k&Y5( zBlkIF_W(GL5by9Ek8&lC^_JQs)u9dT)ygE6lp0tZcnXUL;(I zUzT0>F18&rh~$h=6x6aV$wjlRnR`RAa?(!5UFu6VI)Jaac(IX)aG4*3)X^X{9`9@RbH_W#VttqWkP7MjqaJPxUr;^?> z7NE&bm}GCLR}4|-CtM-bz9MaK>RspZ`AS<*39y#nNE3H~5|L%&80WclazxY97FtEiDhDEL1KmiPvL{MOJb5i^D4Exi-SnS>$={-D8bRpuu~*NL0oGIO%hXY#JPj<&TIP+4MBycED6B39*l zK>f6y?8i-#m4t7+ngx-L3NF^u$Tha?$X^eQd!dUn^^@otWB;_gWQpA%cx;fZeJC z=39BRu=L;~o+1PV$3aoU9>yu&09;@cr386}=4-133&WAp`0zRq-JU8x^TSDX*>_!Y zkj$C%IHcX4J3~3e(JXt3#f!|fR-yNmVS!MP%b#+7TJDXMj7PkOewJ2P) zF(0ULFvJ;gyomOYLTcMmJpp4oY{0E_0(`^1)N1&Gh{@F;H^xc|qMD9-fP3pTHErdc zMlIzCJkqP(Mov%`Qow>DIwe9?qlnnP0G^pm<7vzvkh-iN3=2tq-|P=c#a+9=j(C&< zyaae2r=S<9a=ak#CB#LgYF(daF4LeoP3bk7E z8q-a7Y4(EPMC%Xycq7A2GrI9Mi<8swlooIvCjt=^LxE%!0)3JR(E=2RN=VH*4Pv9= zPw0b5FUtXcAi!(I{l{{YzE3;i&) zP~Y|t*of6=cn2$S#5t}eQ4ZAzBY;jn2~*&gA@p2z=SgzX>M@*-L7|b&SC}8XBWgg_mk3As^w?~0$g0;T-9P9y<`2geoT(HErKNHpr~V(A{{YVOfLE%halHO-xJaSK0){mK z9#iusr6XM+1 z_DH9>y11Jh@t_(RP3@Wr3_fRL{Th=82%!mI%pd^!Q+>F4 zIkr`Q$A+vJt-pac$F%ZJGud$5=xPSg)F0vh0IlL*XAM+4cY~dVwJSOzz!qg&j*(f@ zg%?;q-TIjqU9OMa!}tFH19fwzRIq{E zrxm4xuwumID7sT;%>(F;(_rWr>$Gpr&-^P1Xy+8J7+cxmUu z2{9=LMKpq|2ybetgoF7&J)|TlFQZeZou2LmgV9tQer@}Wvwc`pK7b}7C*n>xOWQLW zjd9vqWsyzx7(TH+SYSiRG}0^?Z+STRzq`DLkQ3SX7S56fBCz+6iyro>!OE#$Fd4em zvcdsEUm_+X2u);wb4OsGV-0U#*ngk#reqI!WMRz&ZH+yilCRJeH zV13RP-^rK?@V6;C z{{Wvo%=7Vv6}=bgf9iOfbE|jMmB=SXteU_WTW9(|aum`m>m7l3qWOS2^uY{w!5@#v zrmLXLu@HSEbnQ$EVB1Z6T80Z80IiVWyYP@-!2TVTU&P#OoehP!RRCfC0Fd^3;@>iw z+P(h(r$R2SjwK60mOzlF$hwP4p~u5?L?l;6gWnjha%wFKv?^Am$O79II#Ytm-Rsmm zCTR=1EYM&I1yM+frnl|@pAiHR5shtY;0s!=A`Vi(PzB+x8EH@$!44zdzW}R3!}8EjK{&SMuD7JLdOi*EX;ZGZGP3Y?0oIs8%>eCSrLJVBp_yU49}b$4z* z0y{LX3e29^qoo56fXPvd0s`MEm8f^eelUQ;unM3IF~h)Ls@+kRaSPFU>w@FBCrZn2 zYgZ&X=TaPKdZ;-2ozFkv_D3gQSbl;1%|K7*7K1>tU=Ud|wz5Bybn(O|fj0KMy;LA{ zAO8SC@o!ml30xT!qsVx*jjKjADgX{tD_Rs-gH(@|;hS};LsknT6&lxf=2glkcZl5? z`)mwbUMS{&>|afKEo*9E-O zo7+~<54GF{UXP_yeqvME7)d*77xp(-_bK^(*UNce9mwyPphmVy@E*Kz6A?qG6a?M~ zyeuIZqfUTntZak=gb_aZJpOqnV)%f`OQEEDC<2NK18(#EQ9Al@_DV*5#)m0aS62M~ z01y6#;ZuQiZ!iy|{{Y$AiWPKm_z?5JQGi^)MU4WX78frByOmo107p`Wwg)|GL?sbP zRwOQL+_Vvcptn{Ku)(Z%bB!yL8^F-7zL4;)i9l~?xTBmB@M-~kyb-7uMY;WD*t3Cj zFQx(_skBrX)N)^Xrtq#9w;gVr<|^vy+P+zIvAtYed*;3swlpcrb!T-tHErc@M2*Bj zUO=nD&;thg+*HK|yN5}}$83a1f{+3M04gtmU;Y{gD~9*~07G!8$f~oLdzin7Mm2Tl zZ$ctiYOad{`5wm8VNetW8iBF#OJ2X>2JEmJQr@UhYQ0)rA)|3opp_$v(a;n&B}cld zzE+e~151!9ECdeO1vy}b1z==VSIX*~6G)NU2!n}nUM!Wkx{kQ1VPR3R>i%c`j3EHZ zgYc#xRT!rQL>*36+|zi2{{Zy{Wj^6N6VpHRV_;YJ1^)o*6vO$H2q!S707lJA>FM~L z^tA$mctjt`++`fLeC4WU^(a+wJrEs2w1Bv5tH?9Ve=q|odf(hBvho9AS{^ngY00CZ zO3bGCE?{!;8U@+?q7{!os4T7PVNwbI0HZOgP7C=!4c4HH5cI~3x#^DTpdCKqX`}_F zK{$%!ozWLn3t3A401`-c!VD28Dy0B)< z6=w&Fx*&0*XNTmw0@nnr-hwTl6vo}W_^DXJ4CN}@ZqS$jMQSx^8%-#GMoNyOJ?Fjf zKPR|OiF=wAE9db;`O*l)MBqTFp_^)5{t$YBUxkK6wY2NUo%Ii8Xhn%(Zz^VH!xqkK z4dPS;x?{FgwfGj}t`gS2!A?NLT&gZqLZ|a)0Im9(gBkFqU7#y^1z6Wjl^jFml<+S kPxx@0r$~44`EvZcrv&FZP7LIS6NKP=&R>XgKbn{S*%?Ar_W%F@ literal 0 HcmV?d00001 diff --git a/2026/HPCIC-AWS/tutorial/img/flux-broker-design.png b/2026/HPCIC-AWS/tutorial/img/flux-broker-design.png new file mode 100644 index 0000000000000000000000000000000000000000..267f1a66fd2004f81e26478b2966673d6a03e46c GIT binary patch literal 35296 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 MkhEYqzpmf^0hw59ZvX%Q literal 0 HcmV?d00001 diff --git a/2026/HPCIC-AWS/tutorial/img/flux-instance-pre-tbon.png b/2026/HPCIC-AWS/tutorial/img/flux-instance-pre-tbon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc40a7e464f98eebf5a420af2432e39e407bc8d0 GIT binary patch literal 12218 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 E4~16Vj{pDw literal 0 HcmV?d00001 diff --git a/2026/HPCIC-AWS/tutorial/img/flux-instance-w-tbon.png b/2026/HPCIC-AWS/tutorial/img/flux-instance-w-tbon.png new file mode 100644 index 0000000000000000000000000000000000000000..93a276e8c47a077536618abe0cc7194cb5247450 GIT binary patch literal 34570 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 z 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ʉbSl^<4$a!v7(M7J;6-CQxsUn6| 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 z z3w-Cf2|f*7h%6NrJWs_A{VYo_PW@;5=KT4?!HPeCW~ER&uU)qrMO-tS1r?NqFWy#Z z#r3=9I6OzL|DrQ$sTn5tMwsYDcK>F4e39fymQwqx)&!jm!jkasuYJ5XtGK2oTMY9P9l5pH>%ks}B*0_el$ zLxg(BW+oh>O9F7U&Ac$Jv}(7iPVOWO10tnDD$D3~a6V)GVLtt}Poe@NmRqEBL8fn< zmXTj1n5Wbz#oSn6%|BV_!dN?CSv`aiuF@yLMbX5*_Yy4UpKE^12)UAOx$GhP;tu=b z9^c9k#lS(&kFDXjxs^|ziQy=vMX}nI&__pfH2I}+fWi@U1P!lthq5HdF@F&U)e0CJ z0MwC{nO(6#GqNdAF_k&zrf(VxcAD4V)Q`|GX@{GmOmeZ2QGWI<9rVp#EG-{O9OR$J z^h|Hzr?RSH8hGC$^Ly`Gn?_u}nlWFRBAg-3lTQNF5THx(!zG(WzSZyJ{5TKXFf1f@ z*gB~nk^D>%iGv6A+K_x1yZ;t4ab8+n2VA5j`>DtgTGwl#;{1P-i(`7X$U8W=*lH;GpvU6EL z4Hk>Ahpn!WH)RVlPe6>VgK=&QAj|G~@y|&VLRB9s@USl~#nwxIJ9785- zMTuCcJ@8x)SD&;?re*W^IkDn5dl@tnwd#c55#oM&Fpo1EqgYsG{U+OXVkrLJroJI@ z!MLen@X#11)b!aEr4szXLJ8&H_Ve1*DDuB_&lf<~*BPl+|7oiIsj@Iy%j1#@{}}Jm z2epX;m>Soz@;^Fmyn)TRed@9^POv}E7m~y5t0H|3^b^B!eR>8X`NTg^2-YHZC zq2M*0HMCem?cURR?QpV*wK}}Ft&Qi6^;lNVxu9&@bWq~PLD0k{0Q>+G)CoEdHPF8 z1qC)rzKOG+Wyn-5pY90png^BqN2`*Z)&S$TBGz#nCTJ1%xkD)<4A4>`jXQeYIvG)Z)!p?KwipCbCFDWbPodGG@>&h8JpcM#KIuTy@$;r$CET z#!~^OlhdsG^nk}RHSQGN0}rd_WjSilW4PLzWQeHqnc-Sh7{Xkin!ciMQub}rxhBhR zLPYqNf;#PWW|ksnof5)UvEtS*;7o2cq_COkj=yj|eu0f$`5KS@@DkT~t^#HcR_za> zX33N(C=v+*uHJxTZsQN`L?(07@{$wDN6|k=LX9vK<&$8vmSr2BG-Vf&=ArKb9jn@L z6>4w|e1#)!zsny+It`2R#f@MK>#(_#%~1 z3xDtf)jnyyRH?=LSz9AlONQ=9h37E*GnB=aMyHQ{;kaDw812Aoor!G%x#CB-_G*&~ z8n|!~Xb>OXe)P;qa;6{d=y>v3LIOCqQ@;t;Mwm3mBR`K`x~_#b{`-ZcIDS`M@bL@kFJZAgeosRRb*D0qReX0|R2G z*Ax#{RRM`GZF@`o$I8nF@W#rMj`c^g_`lsVIy=RHtiG6)L>=^f{HKeDYxtCIiq)Eg zLXc^LTQdbk_{QrF{7-V#5_R+Due7#?bTd=j!kbLE{(Ly@lYHUhBhmBB5kcuSb{ddc z=~s%uG}0I#qMU=#lw12cLZ!qA*8HiULYB*;J!(6}4!F91QL!Le(ut1v>27J|k+M=- z0sUvc*jvBDb|WG#t$9WG4VNW9fTbqdP0sjf+>N?)@Bwcs8Qsl&nwjV7DCY6S4r_JYHWQm>MITSipzeybc zSv|-G&Gx{t&X&(;^F%iaRzy1z^{#wu5Vqb*v2&ygxyr!SZ(^)}$`E%XVeGX?g-szG zw6K});8r(@Ur$N;jYAmB5?^E|c{5S?HHa#7P+wbrr0jHeUa>f1no?ZP9<2h}ES0ap zwBcN-KU&R1k+kp`=tGjI)@h8v-Vtt%qa$wN5q4gQ=4ZN*UJ`!bW%iOH;idNkrgY9VvAV0JVDpLgspz}6d6Kt z%oNfpgn!S407RjqtGo6mTLNUfZU&k7J{wZR2$NNuYgoxT{}>z`KACHzoM$SODnhRP=3QZ zYpi*{Os>Y@G)V%Pia@27=r{js#uT~Fwc-iDJx}6C|6!-NMunn`BR#u9Vxl#y+_BkF z1n2;U*nRcDJR34Vn=iK+&S&tK)?Rb5IQ@SXz`aG}MfkEI*qC2(zVDJvSmVeH0+IpapBKu^Ce>}c zXk+)y;aM-}(SL@5y>@!r==p%q{xDTO%U1_jMjyw$p6?-Lc3{#Da@@PF)e2!LX7DBg z5GL{66e2)^1`Vekh?RXbSYef&QW6Ep8(E*H8ow2Ax=gDw2WscNq>lp zqfq#jCd(P4fFCJ6*B&66?Tjj=@}3Y$Ljw*Uy&Tk%-oX$5;e$V3gLqyiR;+LJO3#u} zV`I%S+_K+T8Kms{*U6$G}h$A*U}Mr_9=R4Qe_T_+N=WM4feuQB&J%B zjxs7yt}OBbMTwb>J62GlAlUiD;UY+>)CDI%Oaod}h=M)fRwhYNBx=lLndF3kMfa~N&jKh|b_LE6Q1pmP<>{kS zI&5oo0p7_KaLO1f`wbLzKvJNq){bUL&8d1xx~c7h+RcqNmq8JZwO0T7+O$qiji^fr zhbm3@j@s+2vaU*F(-OE=U>hNTV*nxCL)<4rSrhA92md|Ae~JUp87(nOuXd3R5P%)1 z+}3u=kPqXr zi{3lXF~dDgK>hq;t;(kGi@njQqGhT_vsA67%#x4-L#*)C_N=%{^Hf)A{+kMgX#!Hl=h>-5bB?~Rrxg}cZ*jV3Ezs~`VsAHr8jzaZgJP_4#{4YacRqYI`- z9Yz6}^P^4eLd}8$)tSt2wY@@&&tmk2J6T-P``oLB}*kSTvd}bkZ z@_0(`p%gr5NO1I>H;do^c_TvChg6=xhJ^s&o3dnm7#LMHCbS*UP; zo87I4gGN8^;Edj|Lt;Z!su{Zh{R}TDYJ-JR<^#J+&U?qM(kCX2-4bkIeyK&DxdevOcY=H5##iCkyM zdtfG5rtw7B_;XdGBLHtgq~JhaOtQbGupWzF&b`cuFnIyuOlOqqpsUb#*D?WU52m+9 z9iPXFJ{;I>`~&=s6QqJL7))p|t(=`MisA=;>fQ~d)B!)J7VDxL=F2|_{nSLC<;(cN zaVDdTEk}=Iy2F?DV2n4wHk4S=SL^AMMXd+Xv)CUE(ta@kZw&(gcJ8LL6Z3E$(D zr$=FExMYm^fc)@wm&s%u=7-H$@U1?C+T%+FKh;?mlhe$$Zrs0I3wP7eQHVehyE(_* z;S(e5t8kBFd+|THwGOM+4ty7oZ5Ie*Bq15ZM#Gjn=O@wRPB$8<*0*!9Way9Gn*{jl54W|#*fUG$Kcjgjjlsqe;*J-XAgeW-p0b7po&#a88^l; ztvOHbp$)8g3`S-Dws&=5fPpI{A!_cvx~`L{{ud;P?CK5nMgOzA{z|bBI)Brr0#6H` z8L0hePm`p*zWA@K@bXF_cNOqF&LepaT4gr|<9GPUL8B-z%l_>;iCVm=1;|HCt#-62 z@>}hnTJk@C%TZun;=5m)U&vL_aY8!1EBnH)u^iROlCw^mbsXJD>mdFu^;uT^_&t8$ z5K&6Sey9go!G}ZJ7s{w&%~LtLMbsa`Wa&PpKD4X*om6R{WxSbS&hSXnt(9wDN~F6D zn{anLs?Z#H#`yzjrvh0GX6BIqy@hfsY7v8UA-B{T3u>H z?9gYRQ4=^GbUci36hgIBbGK%p@IOiL;MljQAjT#Ya4;Z$ON6ropp7t{J?ZE3TLNwI z81QFY3paKz5r14JY^>s-Bl2R!gH*LBSkd3hJ*81~9p*TKur-7=%Kqb((C_YtHdKDa zQIzPHAtuJ8$RLu&Jkt|L1p_v!AiRprC7O_YlkqtrL67!QJqT=`f1>6HH){yxo>KTX zg1ibLa40~g0x*g8+cPzI6H;FvvPW}dZ7tulrslgd4<90L;Y^&aFH6A)R^w^`WA=6_-|3c&e72du};2C9LQYV zPw2te<~&eBg-a%T|7F3Z6q2OIjiKG!bM%Cn=jsAGu1a)KW_&fyoh2?*Q@eJgY^uw? zc%VRl|7ywiOT;d>M)%Fo3@>Ipj~x>B%Dg%AKGS||)avUSstQQz2xFurK{w}n4Wi~H zFv|F0-m*;`75q^dc^C`~&P5IlIrK4rTP~%gp#Qg7Q|5R!%NGYUP2}Y<;J5xin$9~O z%l?1=4I(7urfee0$lfDF$;#e)@0mTaR|p|{M##?Idy}rXY$0T4Z+@@q^Lu=I-2Hcl z>vW#y`!$Z^c{BmEkaKG;U{bTHe<+1Vfh!X1x`GrVi9UI=wg_wP(RbvD1BXrFtOFGj zGGEjue-grUTENAoc>@QqGasU&{w+#B--UMl0~nk~C#SHKRpPJwZo+kQhY*wPBGPx2 zlg6eV$u;vnDR1fqfea;vX_}W0!bk9}g7N}3Iu_h1+Ra``u0B^zu+{5p6NSAirOyd< zl}DPIo+rQ#ZoZ(-SdEhxUZ|n;m62zXDGc&R5ja(nd1Hymf;OJK zazr@7L?cziGs>DJ1dpgq|06vR2I^Kb=!qg`U60nMs;s_iG5cJMYi&-~+*eWIbKNGp z{x^RuK>S?S7&-9}tl8FiiYS4SW^uRt_1^PI9zH3!s#_V?sq@$8Egan30N4`6Y`eG+ z%$G~e^wob~9Nsz%#q zOg$Oy!RK2qX4ah5we&hRcJ)cR)tXxlOp}#-dE46P)Ab#%{~SMqy}&O^6_95*Ia{v# zd12g7Yb``>0Lej-fv}9p>O7!k8X8yLkZ3aMj1eOZqAYtD)QWyl%+h9=cM4ZfAl&38 z?GP6Swh{+8_Zi6UP^Apuhe-lb^Vh~Z9E35v59sRvuO`HC{QX-L_&a^Y zS~U|;^(W^!EOp-l?0sp|?j2xK0>c6{gNDbpCE9iE{XYrH)i-g~&Yt_MMKj*Z>F}ru zHAuoa6RUmKpzT9@KN2PT`1YSws#d?f=~M9n2%5$J6I71&c=U#7&FyKO`h{n`x~>9` zsL=pw`hZ^U?K7g&5#Q_M&AFx&FyFJJm{@yxH5hycYH^AzsD2Gxy{M(LslM4V+ZTVDfoV(nx)gS_a5xn+FEGEdK1YV{<=#*yh7MD`!NOc}FB6rp{hoPUGj;Tf<$ID0P zV$rPOQb0wetNc*F4(WDxKukg9gB*qmqFN*xZ`LY|xm=}a>@A_m`C)wtVt&5ozV0RU z?#o;Gh`QMeknH5Nl4p!?$}%Bds;KY>kLuLaST^vd4IiymPj5{dnQ9PquXd&xJcRAB zv(B~kHzvQ?-BS`a^np#=Ll=H>08^S)8fd821ZyHktLG4_rKJp5Vwmv1&OLZ?M%f^> zUq{w*_WL%3ph*->{@G_-Kl)uWHS6a*Q9fxM*nxjFaDAk=%^0z~f9}4wmVXlfTwe>} zblfJ&M_Rfy&6U&>`D+WyL(oS{Y4lr$z{0|bO_#ItbD+WIa&v!0S^`6hJqahgkp0Je z3v&r*#9?QQP0Rv#eR#b>7x}ID^4zqtju`}15KCk$^l^4`Zt3F|0VXKpSEMxvJM;f>;)7S%#LP_RvLk?_K!G;;E)C#Z zAQFON&afP%WBc*rNA+j4ub&uEeWZXuM9K8SM~|{fTN*A+U3o!P%}b6OhzEpLP{U8E z>&+ABUxEzZp-y|YQ@Z&*VhyzNAQ(XHH72bqs_XmVGX@&~I=bh_KfIXNf$%f8w~HM& z5c)%T!_F5vy@ARgsc00-M^NKOBQnS`E8j6trOBZnr-fA@Tn}vfLsg|2X;}V(CWb2g zb!Oo+sALYS-jU%7fF+_v3%CgYo^2jIDm2mfoOeinFGxkDi7_(gdiQ&tM7g@*?l^Pd z*m_3eXFUIv7nPptJHkIW?`4d*hWymg(^^_Q-T$1>HF3i0_u|HT(;PoMh~|TQy*|sr zH>?jkmkt$6l+CNAdC71|4*6N~A0QLV1GdA$r`sVR#V#V)w6bq-5C`gm*(*WF9V#np z1%Y;?WSU~#h5C0ib|!$CbXk7sUC_T(Y@^7{=(v*TC6CR*DI1|(JY-$pS@4BPI*8-8W(`)z?4gVXp69(%3y8xTg#6&%xq@@v|hNi1DP~^qO{|Co06^hZ}wh%`8GZ7%K(Tr}^|VEJ?AvlJ^UuY;86T8~4l!a~s2!`X(McT3A!Fc7}_`xuyE zp(CrHf!T#RV{{&QodiQ;Seu`Ao$nYud~&E6c{>DmZ(QD|{r3+%tD>UD<84neLAM(r z9mA*l#Jo;tIM(P0Fq5eH{KJCKhE!qiWO?DUhb{9VB^!cH7aF(xs1O{8i|v}0t!>sv zPcYk@o(qmJik#g1Vi;57d&E&ONd`|vdiukVXwIjJ{V2$#VnJYDAwa=&Jx=M8Bk!ci zg&^qV0WKj^r`-*r15o_vYY@S?`}^O*#6&`>R=xyqe#b1|A;QFdu;Fm(wB*>U zz)^;a5uWXgsMW%kgoh;ljRU}pEUTufTc>35`<5L!N$&N>uUCKd3|!@Yv-QNOjhXR*V`*jq39>|IIpcaQ1M^M*TyEYGp<^<@mg{-{qyC~825a4TIQN@$ z>G^m=XHDk`xIn{{SU{iuqO}LE7Oa}r!X&{{^=IDq`01CtE#~ z2#cCiAUloB%#fi7l}koTOr=cw5yx}WCBBw5Qy{Jfx=eXskl|D1A}(0+eMMSjm~4Ks zUCf>{w_p1yA$+-IH(BEw3wiqMcX!gg1$uhs z_-q>T18m+gMu-~TkYe?}@fxoj@7b!yVlzYL%TQ6;E(T$dun=1H-Mhz^Eu|av*NKR7 z69XDX_G#D6OrS$MEiHY>5Sk`PKa>mz3PLw5XGmnxUCg;JoZFC}g47idt5RLAlowfo zza2}vA4isJdD+@X?Hbz_I!eopR&g(GihyDXFeeMU9E8-dBJ{GSl;X zbzR++S<1!%NNs><(fcA7H#B11cY1d4G0_T;mJnnD?>Hk>CXIne+` z#epWreB301)NEvq4H#`o$kNLC>h2V~mLQ<6EjvO&A_dccF_-TnQWv6mLbiC5yC#oK zE?(b~#zO-`!2I>qvHQ~BQPr5VD*S@>ifxiN#1i-|^VjN%W?+_%eX~0WclgBw+tK#y zz_eY9tl?u?OsY2o12k!RkF6{YFmkLn{?cUDZsO0c ztVw=z4uE!3hGm4fhF!+=nKSy#MF{!bBbQfFXfw4Y4o17ilNQZ86TH8^A}QBX`N?o4 zt8E?=MLYfeeG~eD_BG(`)XZNqMoQj}o*rs%7lhJsp^8VBo*+v9^PTW-RDFt8EYs)x zjE$GW0`SPGs-_T$0KElBS#jWcg$W!B%UdQQSh1uExTe45ZHK&{+qVN6UH)M9H4E2! zdIG2E&&BD!)~fS><&~)U)gRjj4Hg=IDl}{dXQ<+&lvv_5wAC}U3*Is()_JU9Vc?Rr zwu8#{9|SLyL2%6si&~Me#lHTNIH@QKp*Nm1eoRu@&CX%gPY{JV72N%{rlzLqnz}S( zVP&=7Lk&0|>q2F*DN;t+!TQhL+iPcNXSaJa2X-ycV(;w3E!AgQY0Qyink1Wp;x9?; z1>eDNKc00BdznKf;_~6ZBboB*@2er?u1Cs#F_pcQ53Ypj!|8^^9dP@My$OOF8kAfX zR#ryN&Y$FkuL37iDuF(lkU#`uN5koAo508Tzk(&9Rste zZ1GE@3EN^#lJptAFPlL(8?TIYNpZ-N^2Bm}{FONJ9aI*ln+SP6hYMa$J@=rUmU9;G zKHC0Z%b9}}0(3vis_=3JPBW4_U>E@XshXLYlCcy4Y#JnUMhlCkn0guiKsGP1{lus6 zU=8+TZca{+!p{2%~@X0hB8-V>S${$T5!(Y>?vVmQ|gTbzCgPM7sjUKJ_^vm);H@k9}^jpigq6U*g^uCrYsR=@z<8m0$vybKtWC zZ4Yp22(k8~LFumDOVGgzSw&Etj{j-l8@3xZf#VT|)5V${JNrNhiMNcmESAj4 z0&bqVo=!)*A#xi~uM}jsu(#NCOK$Q=V<84v=zEcWD$GB+e*wO8T+%zUu+UY9#G0tu zuGy?k+t9{_{Jo7p_0sX_?rAdffR_(txjI?K2r}8%j@SnNu|7lK{0{v?9BNFOZpmkM zN=KmnC{`7pWj&KCEq?rlps7!|x=!+LPzQ*0myT+~x)&iz6ZD*P@rx7XMyQW*6osoT zM;|VprC^t7MUuDnk`RzMRHN!R`5k`E20rWi?pnd~KL)A7{3m`0Pa_sWXa7PP z*_LTfR2oEQgmL7{X_1^Vq^fjc?HEtNeA>VSbp$7sS3Jram@FIDU(?BB#KwvyS+TFhI^FmLLGCccx zXABi4u&*H77Z6cUn@*+4Da#sxD%FbxiKFHr___izT;a|F{>7t*4_i0(0m1q?CF2#I z1bkuXMw=3STan&u2HVN_f0+`t&$ss!sPa{lm`%)`PXFHTwtrpG)X~2ZmP7iaF1bJQ z@YYhzIB(@=(Ui>`bh=|<;u=NwUUam+FqFR+J(r4$k>s2lbc&86zB;~HoHtQ7 z@N#?q6kIqEw^nU8KUxvpyIcVi40v^CGf-jC_%qBX;myox?H7q?X?+R?$5xgw!K=pKoJn~Znw4F9Dl?f*gpd$;T!hYpP_ zICE_P48Q=?&?!821ekZ&oNq%3ZSb&oWQO2{e<(Ubg_s_DUvDp~??ngYO|Tw7N-U*R zLYdO4EtMu3;0l0ui-s;ZuD=eA`9pp)T^z{V?W+Ex zPaJUA+#fkb0w=Bd$OZ5=kTw!@>W+s79o>TcL$H)VWC<#;1%^^k*rF-WLeBNtPda0b zJYW4A8S~L58lbv%TL1NQI9*6u4YIhSaABlXC(I`WuMv*xE1jse|h2Fn$YJRx-h?P3}wnT!pfr-<|i`J?2 zXO!Lt)I|k^0LH@1?)`Q66eQz(aNYO?8r1dVoz@4QpRW3z{Wofk)4>VLN=ks8ScVrc zZ&?H;{3n|ISd@w4amo;@uup=QuzZd#eagUY&aqGDkAJL2rJKw1KF6Lumm}9=@^<$j z5LwHqMzeJ7`25jBl0Tbk92aMLSLh+xtX%KBrHzgEIbO%UWFRwzGEPQT)?uOD9hF&E z5;tV*wy{+M>7cG?XxmRnUMg6BX>LA?GThjyV1g9V$vPtp#sU+Va{T=8B#Z_!P$Agj zJrGauUK&eTx_8-B=VPN?K!FAwnuN2gk%3RiVY>f~Y=)|f2eY<3@Ub@q$}%E|pL|7L ziGc7w&!pVaIttZ!b&INpvLzc{>!}2lJF+fzqfkSW^<-01sIs@oPvRfWf-4B?sY4mwdB-X zk&mCg7^pz)2q>=>C~JlJ!l062e^jE=&<(T*FqmYjGeMXoOaxZGq2~r>!Z*bYpZfZ(1rws>sq^@1w)YSBY4_mX+V2Xl`k~B%W>i=m0fDrQl>rRXb zx{6X*j}gp@e{fG2)YcoPs;kgHQ(U5!DYUS9%{?x2HU=r@YczdJ7e`2&Qi^?xB)3CM*S%SL@u`9qUUjOgZU&Ju%5@;%Rh=rZ38vB z&PzVP%W42X`16ohYPUb2ceN*Ah0xc0f~e#2aou3Qo0vg)yhF2iH1!~5$f&D~X}xgR zvAKOrIqJD>ak=_ewueWKtdGpT2}lm^bU&32J?c7EteBk5$tpbY9?D*}OTK`imqMu$ zOCpR%G5vuhZ~dQ8MD_&xqhjS}a9{N-buHP9kCAv(&Z(*>|#2d6Sj^wu0{q!cSz z3N^pL3d>qu-1>-*b7;loT6Tjn0~yk>W}al%U-2Q&;*+$A>IuD+;rO!^nf&fn`hY>*;&SJd}?I*yZvc z=paF|q}*=;*h=_`q@IS0iO=#9$(dQ~Ym1*A?J)rQ-;N`JLZuas<>`eI7S@v{Oe)(WtrpLw?+l2MA6S!}foiAQ(2aT#Z~O8MEL0QQ>9} zzZS2YE<(;0t1tdNTWw1YBA0~JFyWe^NrjQ@#{SRAF)4N*Mn?v*}#w;__Gmzo#Lm)Coy|(~p?()I(Oa%2G_573fa46;1BxXp`G$zX_ zm5u>0^=0;`fCop@CMQmsa@`9Jr8S#~-zwItE-5{v<(7Z%Fm^ptDj?IF(KKUMGGzU` zFmilQmMmsdKxV};K*IVzHv>{|A{L9nnPBt*J;;QkpwS$M|^%C!w8 zCE3R%_tx?Y@8y-qqXzJ>qWhxwNOr7DF!~7HL<2~8g1?6TOiuX0bsp_!p5G9|z7qf$ zlro4$ySXzHUAC1CE?YvxOEO!J3xkI8$|0lr>STf2Y7tydlr*|mk#!Zi*@#szU^-Xk z(@U!LhV)QBo^0=5(W*#dxyb7gTz~1+vMSuWA^g)5yIqNS%x&UyS0Q>eKp2MKdv#>+ z$~Q3Z@yoGm?n@VH*!7le6ncI$E@VoAS4gPi`W$YfT#h7Wky4c+;2{OSk_?r6%&Rk; ze}zsd$u!x%KKD04s$TVp3S;@>Uvj^et4IZ=y#x#-oXqs=6<0l;^_(prH>w^oOn(0fclmU4uh!u1anv6Ew6 z*GB^_mfY@h{|xcaZiXyU5k$gZT1HJRk(}H^l#Mw;JEz~7TD)OEKJj^=;j2<>ikltZ z8OBv?zx`Lsnz3?V7#wWin910F)y&(mB`Ri1U%_CQC^9uMA^4%!LxHnf2wfH2k&rZ| z&5g8_$l2iEb(UaI&OuXqUU}c|NQhDzB1VX`eWXg4Yji?ZLBg8^?8*anVl@2 z4y~PXI(6|k82R`JPIV1$Gi>?Xk5V0ZK}t%RlK56%6mjL_Z4+swRszVFly+=v1gn<7 zKW@+CM=5gKmzTdR=ZE`dS02fJOpwS^H7rRrqs4o?eO1VlGc+LKv~{3zxAk)3yS6%u za$V!cmBAT)rBkeF8sRGsyVx`xe13mj?QmmkM)+P@`Zr-r+znAZONZH3{OUx|8(Seu z9QIf4RYyiuIQ7UeiT+;yB0W><9+%Z7Dwf6SvU%N=lg;&+(Ugrj&QBkw#=7R7hla)9 zJ6y6o#l5wJYw0vHJhG}0Tr4bK_&6H651qrJ-iKU&Z-~~>QK)aH5X43ABT|Jaadm5U zmF2x)G1RC7j;*c=CY+AnKf59Zhepb6oIhn;UaXP{+T&sK3UKz?`JM~F0D|>EHE>`> zB1~QVkL7=+SQd+N&vmZwD$*#tEJ}lxy^_MdFa_*VO+TRiH0^Stkq~66Zd~*(Pjx>v zO>0%`*{fFS{Uw{U&FwG*<^A8T{aVQbaNjhlFSTxYw63sWF`4t%buaCX`<0AYqS{ZG zWe6D=q4e8+S)!R1+#ZnH%p#+$@8A$Nx;4Ff>U9+6u0TVSCt9dTrB&+iwJGsEJSR@N ziq8s%$CjC{oi6U!-KYDD5|M+grntT~w7!MNd7%^e_V$H5wj&-O=Adh0XFPfr=cjvv$FFuX& z^F&x^$9C#71S=_S2J8_SekO{jW2d+Mwzq6Zl*mw4B+#!ePo~20S(f-whThVJVM4G) zc?-v2^Bk}EmS{UgKJzzg-Pe}&Z|YSg=O>tbMP@3*dY9WSnY&-hB7kUb0-JxaEU*+B z>Fd8AE-7j7cuf-A2Jk%CSOU>lEbGUE{{({#0LL&iQ>?WqV*kFRq~z5)v-SRa$sB*G zOkToUH$^B)6QObacXhrKr>Wb0>j{hYZ-`HTDHK>TS+sVWdE-DIT%@M{mGJK#dYI=$ zuZzd=m)vYiZJl99YnMo6*`))+sF;m`zrkJF^_{0*aO#4)(~qdmJ(jG2NOwBZo2@^; z!~L9zahZmaMJBdLt!^HdSpjeD-b=S8qxUSnCo#kiAdD!kC)#OaoLNx!IoPi!CpG4L zR>>iua(n9AY4-sqkL}!_p_(}e*cKi=AL5i9S5-rm1kgsRr==Z9?9rkVaViDF!Z08N zcem$we)SSa5W}hb=r5k6NjmUO)a?8h>+M|~caB}{kphpCOkCDmQi_J!%Vol;Jc(y| z3j--dgMW(D6S}m&w4JLFCuuS&5~Fob-M(1c)`b^tCm^3{-LWrr9rT{tBW#Ba!vM0m_!b$n}aS`>gaHEa?(8nMXXV*8?<~T(WKjQ zerfd(a+gtV<)7iaYxQ&MBaE20K&(T0C!2~YlqT39bK^`0@rkIKx>f0cdNxDs=FY0T z?@@m349jpjpEyejI$FKwIj{Zi8#`D3Flf)ux9k_O{n7tysF-4H1g6=Z-NGk?kM<>Z z=51Yd>hhp=vcDHAU}&CH}bg%(~$$#R(*IM;_$FGCPv3gwkdti34-E#>r$vW$K4mv5yKuO~mr`hy^3WxUhlj*ShFF`+ z??@9!_{;I!wZqG&oo7o_wc>*PvAU*qE{szYVnKZf!`Qq+%)Dd(f>uoLbw?* z#I@_XF9R%Yp*;v2rCotA2#{-mj)IAai3;-;YU|KkEy+Z(yx0}-!Fsy;_irk2pv!32 zzF>U_?(|9GQ3R2C%9fKHnLziB@3kk0yyReVx(a%ZcWI;?91OS^BA0*{IXa$}C>^;( zvqC-mD#N2|ckx`$V&0V63Ut==XBsmVd9^B&kqrq%q&fpiz*(o1RRU$>h7VYTwT; z(0*4;ZiEO$Lx5r*Nayk(wgJ5qulpV?vP2hHMXc{G`JuTyY1BQU6nxE|)VQ%h8Z644 zvOGRRR-eblArwg!4pRx*f~4*pfciYdVHXm**9!Xr2%Y$v+zl&axRWKD{cPo*Ojz{besD|{mE#a4*kPkm*Y5pP z%i1zr9mP6JT}s|n;cn~j8Y?Hpg@EFkhvk5Iz_8@A$rsgJ+rP(SM%gzE@>7Ij(9-74 zcm7n~kirXXxYY8f2c8A!FO;9b3<GyZG_f{3mk_ilq)Dn29EgsZ7i z`9BpEdwDeIKFBAwt{sGv6<)!-~ zFwV}_ES|cx;ht{K98poouB1+%$qR?X4yM7h*Q>zqwjWCiWnGWDa1s+Lzp1EXQ((+f zzQMa+TNm5UMtG1(+ATznt$@cW5o4&+#o09BNo}33HdE0)tiI|EGBY2Cb264@^%VM? z@jAVS(u8P+EYBMZb#OwaDa>Q2?=B`piWe3-8kq)H!bZ?`S`t1;Wo6~BLKVYN2B`BIp?P#&I__!f3`G*wfDpiU32^P!zyBYG%2;(MI!(vr~S6?GPA|e?k=G5l@+qJ&= z4&EqMtSKxG2Gm0^SkM;FfBt9rc{l$<*}$;#S%%nNb+u2ydGkCHG&d@k2=;0}ZYoy{ zIelQjtfk0K|3%k#f9AOo0h)G&|0@?kMM5H@gc+sU{ zr_2J>kQqqq?A`*U{95N-npoP=S;$$MKc_%3vHpZTAUnTsf<_nMj=Ua(8VNBbNidys z*_s>rb+~~FcY&K|V0kf;XAWg?hu00vdVq(ElpIPN+4#~_Jmliwt9eUWl~B-Dejspg zbsy**42f?B2M1Y!beGKl%q2nrk3(&xF_k<=tM^?m7^0-hN06>JJ0QH?xgwq)gq*`n zxk=iLRMf0LiGGiG7~yo@>h!V|l&f0{y6r}eb-(^_hQivW*(rjc)gyB+bjaIJ(2*^O zR%&Rf2+#+R)%|SjnQk;HActo3FZm+Yiv$x?-Z5Y$x@{CpA^8FHe6h3;U)5_;`88Rx zb%%a#Ja}MP3=a*k0U{ndLUUdl%wnXA{mYIHCsoLYkl>{Jj9Q8y#{3glgR&V=wJwM- z{M#~T)lQ_anMCmbROIaJ0?=7rpUsCLrudetYR^j!7pLs|cNrKa!>b3zXP#6(a?rYY z<#b0H26NX$yOho!HG5<|Rvij8E-0x`Ep+gv8>tK8bUJ-zE3x>(^^>;{n@5fh4Fx@m zL~{pa`KjxAF}z1)b<5?`1TMu@G#hqR?781)s)ce z*R&*b1d((5Yyk3si@`KtnG|lD&42~ydsjhvh+IB~0MZ;2$$BYB3L(UrBf3*;X}R|HxqN;-xEzrPYdz+mSp;$b_52&NyU#~-txPKNa1y=I=+_MJ-nI1#A4u2K z`=L^kNBYO=S%FuOwDcpnk^DYol__tzITC9#Xtjqw0zA@BiC{}2I&w(owOhc2m;L>F z;@811ZlC-|>`=3#H81T?^_f{yajMq~6b7 zo|;p*et;%OMs9AVruOORJw}VPXw2rn=E$K-OkQp4i0>kA6>6w3U%NCF4lNO>|M=Fi zzP9${Adb@M@0j?X3O<;Vh?mX}o#~(IedMu-e8W{oU+Pqk-(~ z^>2iQGn&s?%RenldE6Dndl-K9a3hMH>^}Z}!$1E2rV)ePD>w1cZz_}x&|0ULx3crh znC+hm#=kK!BK-!_*F4qY^7;xfPZ~h?RpqFUP;==lNeV}rlHdd_x{+5eT{$rq0+RSC z7pH23N**Xe)3nUEmD;|9ZkpeBWSH!JtM&2yfS+^%o(*coV6<;|mkCueIHr<{^q6IM z_iqkq6plS3A|ky8x%ElP^^zT|oHnXkJ%-_e8Rm3r^GVNa(J$Pa=-L`7FZ<~nC#GY< zr)KI%*OL^4Q=k~>5*=3)JO$>@9D&Wpzg>QRq_x)h-#7Bd0&*+_K>f+^Ib?)`Nwz?} zof8MIbL9^0Kz6CfK=1r}Xr>Jfnsm z+Aa-3wua@k-pU!`g~|Ox?fke>*&=vt%+pnlBiO+fibxz)X|5G^2^JR9q}R*kOmS_Y z85x_Q6_p%s26sA(dwZ*&N5Y>WS8=dKj7=FpT|8YKy|>zOf?nFVhb5Qqgm{f1iU;Dn zYPLy^_V)TB(i(%L+#IqGEEg#PncHB=9MpW_1yF5C_{I0Ue<=J9i9&IZb&<<;d(1VnFbi-=vit! zrJLfn3U;kond7XR-ZU$8R18kPB<92kU|cg9w={v_n`#jq6PlP@4f#FyJAd<}vho}m zbqp=(dO95;r!pXLq|LMAu8XteYspKr8C>nXwC+sQx8;6b*7}SnLc75u9`tK4EBMX? zlKyg;xTLid6z>Ysy&8q}7>O3`c_&by^DCc*-pi*swxM4+toHxrl}qRs1h*+xz1Faz zD(QIhrMJ17;;8EI_k*pp!21KHEiEBo3>rk{c~bS-M%+5a?D0z%icwxVbdUD-=yTFG z*Ta919xb@^GQ^_BDk)~~qU|nh=l!{(b>PBF2!oV8T4V+OW~mn4B&sh_Dpt1OB=Pze zB4U3r;gB0CriE>8WwmsDwsV~Zj$*XFxvV2jc%hEHi9u{&|8m}n8g>jeG1T~oTnFp| zf8$NgoClkV-$KOxH)vtPp1Qql$GOJ|(kp6`6tKz zqrlZ}< zH5Mdrm@tHsdPfJ2|1x@b2fp0oSdf0kN3)_^+W|j3LWQzKE`A$1aOnKb>7(l}l(Xx7 zHL=wBRJzztiHG^kyZBS>L>h=5)ynX{0s_|~t_|r^X-n6k!uUT+v z(q7u!B*~ajm%v9O5WRmhac@F$P_dx1vl9(ShajzDm5qauh^~NRU~_Xbv%+I|)qo-4 zXk}=ng+5N+?SmE8HzhqESaMQR)acx#XlT6!nmRI%!?A?gTX4jKnCstZBkaDid6P$( zbdXw>f_Rt{uf|pyc>Zak4hi+wPS(QW;yiquEyMa+p)Y?#8gL`9oKQ$^zF}rFDHY}F zAfb!3BNj=4oCAr=lT@s5hKct6?iIe=tVc4XfA}1n;&+wPvnIK^>y19R1X4@~Xa4_f z6c}mFk9N#}7^S4=<%e7a{-8C!I(RDN@*#WE^f+CpSb1T*yssUk-veTVU8{SApRq`cJi1)*XYx z#%Q=Y^j!s88y=^@%x4YL1G;nCQSLicI zDc#2Ds4bcRNi^)k;{jr zS#7GE;Vv&r;z0BJ^x)Qd@kt&M5Kr$y7##;IZz~A&nwpwmvF0H(bh_&VIGG9{o=Vo( z^{nnszCx}D_?d`S|NMP1!*51hX)ftx;$}-XQaUnAwdho?T(b0$_Q)l8at_~sfr4sf znn}CHBtCLTsZPz$OLlpw2s?MrghCP@+;VTqyZh?isao;}n>YyRExSH&Vp?T9A!EN^ zS)~>uakeCid;j|bXWuF<0fI2R8PH(F{@{#+@PaBuY9K~_nw!!4Uey_&hZ;(NbP+@} zXsv6G<;U@Auw6#!DGak(M{{0d?sBiE-FGn$Y*r^ zObYU$+GEfsi)Fn4W$n_@Z^t@K14#&Wh3sB!7Ny=*P$7ZM~=`o7?g zBqHO&dn~0yNzcdL4w-)cnn~*Q{j*8dls+v5)o(X@J^n?m=IV^sv9z>OmgvlK z8T=Bw1O}i{qrwC)8=7dX9g%tE+bd`mWKhvRgDr|M zBw%gL!gi*yFG{CDUGB@tMdb)2z<|S~vblNq1_vx@iz4y-CBy-q6;5`j+Dxb5Dh(`uB64M($s2 z!^4>2v{R9Z@baO)nIAy8v$^#5?dt7_tinR4mGNgBYXoOVMTbI@1=nYdTr+LzY6qmn z8r=BkewkVpc|5X6oe?jWmBDU?|Al1}ub)#NW?N?;?hya0PhxIMEZRFoB&2tzC?HAUswl$G+!0Am+nE^9#d%fchCgG2B>u z@A$#o8%w91!;~_EA_u!1!JGJ-fBSD|lRQB%y35U}o0J#MQOl?xj6JGeJX15}#BZmb z7BGjaK_@3+NVUBxx>3oDz2ZdIuM#gN+jTLukAt95DKuEWBZU8)tuzATZlq0AxgHO# zEhmYr!{KhvA8hnF_f_(0n`yW-&>6q!qN$$-(~K68N1lb@=O^uwvZ~@L3Z(aF>yqj} z(T0JcR-1*`Pam&lpbI*4lujT)0>byKt#R@PByvV!;7Th6ac}@2Z8+Y{Drz8=MQkn} zcBGR{j)Lp8%-r%`72ZeK(Q4by(17SF*&Y{PX*Rz{XSaeItrz>vF=UqEG z(I`^;O2RMN<@ZXlR>x7}Me9O$5%1QV%Q305UwxjFQ&Vd`l9;b4H7A$U6_W{3R-69R z>1>?jF}cAV!Q7ixMl+tdVW*hL$gmqsXA zv4HCqNOK?%1_ITLEiC%r%~*{(zhNlrbJ9VXZAAh{0e!~MO`@$Zv{G`u_WQmE;`N^O zHbxa@?`irrEjFI~b#`zxN$AoHs}Z>K_b7Nf^htmA%fY1{=4r7L+rN1d&Exuxd;_nL zM5o7V|GmkRm~eNU_S7Ndtw~)5P?3(obBfV9Q7fbU?2jzShZ!UGmC8L&rFnPoBkOBb z4cX&O%9vkwZg}MKtLh-7ioe+}w4;Xy-GYci!=n}1mkP!s6A$eGgv?83tML>Zu(SiY z9FK%AmMHmngrgY3A%qpA!=gu9^CNu^=y}~Qc%g@VQ`HZ#et2|uB@_U+mx300er(cx zsX$8zLy3~g&`%ay6ymgjutC80#Ur^ny*?YX^^A|256-i|^naht0Amg+JgS)2g7I@9&x=vp8f%swVm+U> zuqAr8^Ryb&D;f?GrooZ@-5$!_-4M$1*f$G@?sbmKSUZ;|J!E`){0pxqgxTaDAu1St z70oc@LjKIb$>Um+hPeFzvYI#ItEzdu#5}6JRUg}!BQC7Xh|fKy|6+MM^zGdqbDB_V zj2wyxqI!>{UUE2b``9$rZd5x!saorWSdviaTyqva*ykyx+BU^77@3zB)dy(maAdTT ztyiisd*4C_7p;^boPbcvVXUmKK#NHjK_^Ec;zt$g?D7uMgDF!~I!s;dWD)kfWB{RO zrk}51QdY5fcY_%1WdYUjAIh6S1G_CeCr;=I8XKEEjN7ixi z!KF&O*mGUA%tv?D9MhckH@vvhXjE*=S{MgMvvBWB`=e>&Ht5fGubALz9uf4dSYR-ToMm;-o_`CR|DnWWv z)!H(}%%P><&ySDFL2+XCX8y9=Pm5J-$h5sMSr&6N__I|^zu3AVFR;7ea8r1U+&2k~#qMNx~Pv-5YlGG&!z z@MxioFm#CnqcN{PJ|jZiL?FDWnR5?u6O=;{S;HQn+Gwa>+q3X0d2CsQxPtO5AR-U5 zX8N*S(hIz?<)6&5V$HNz<=RPKb`oK_KFEgYZ+xk}i*4is9@SnhXI=SjKK9S%Tt?Lq z*ES$cu}=ToIyE@r(MXX%M3e;ezzf#i$;u@rW|q-eM91GK@`Hl|{iG+hiKK{%AI{|a zT1V{cvT?um*eSjK-OO)3@rUDPJ-A@XG%Ld*`CD;`CM|_7ty9piAMJWV* zjR>EA_|tj=WbJiYH7ARIq+rA?avgmg6ZO&`HX~PSYAuVvYXGk0!uqBcHF`pjgsfVf zf;!|I-SKAwb%+h^8J9DHR!=EOX8C0Ej9qO!g0@4~hkJY^DvDJh16!jag>4!}ITL~g ze(1js-Qgu>wAZiV0}1I4d!16MiUT0iE17Lr+t?Dn0o+`T&lx=sO@WC9!H4tf;ugu0 zmL@^)vq7E*USZ)LJju4@lsvL=b*Jtq32GF%z(Z0}NbQa@=j<;L@;uqH^Xb?eN^zzo zkQo{LsHw3qa&<9+(kDK|fvLDPDY*&UlPjyMP;(z|(Oxy$w(!VA1Suv=DhB61mkD_u zXl++~xz1nCWSNW-{DqM+lC{(YV>a?k^<^0g2pLe?hFI6sl%xK*^P~Jba4v`7Hub}O ztoB^T)YPMXjl02#9s`#m7ixFdA%mH5-^t0@`5kDh{Cdu}eg;%9As|dQ<9d-8u(m8Z z&4cA5BJ=zX$xq% zwLSo_Ko2%#0iL24#TW z_;tW(*XZyG?7Ckjt~4+)A4Du$#%v_1`1hX3ggKU+e!=>7hc`XPx*qy61*EofquUTIOG^8WoyM zHD-a7ZZ(mM+p-CexVBj0i335|44lgU$wHLhJ&jmAyGomh16+JGKaZwnI&|~oq1#Q> z)sl7EwwFwCpkq`~P>Hu}3U*9k@H{hY&(7MASynRMP&vX7_@_=&rFprmvt>B?LuUL9 zS4lAuUyWv7rp5=!navHHAH+wCuKnuuk~+vu{I2d5^cQ$;*3}}%NM$0`rYMc4MqDKN zBvk#Ow#3=Ukl*$bh8qp_?DL_Y){}$36dvEd(f2dB_ACKJG{!-X@lnEa3!3mnqMLM5 z1f%L7E`59l0@f|4vBWrHjgqx&33L#w+*9YTvqNd6V1{&f*t5o;U_w2xM})t+>xPm) zfc%3Q-z@nF%7wObeYJD<&h77AOGB9B9O1etpL6@s+4&;V^*;;EO4WO3C31V1XcE;~ z2273#_N?q_Ych_)NlqCoFfocxy{_=~CH^+?X%#$%+eEU59!*@hBIULjZw;z;RraZl67NZ4-~8VW9aZ}29P+7GgcI{f2prB zCyPQXkGx7%0vW<-%l+gy3kPVqp2_94#VzK4c}M%KrX zC2Ld=c0xj8->T#0Y(t_xD@-h4cmtg$$OD%4Prs@bL5>HHKpZ`R>z|VrpZ6^kb)Mq^ za^(s})t|fbd3mN58@;-->n&no)~4CFzxIn=4HD{RjpfA?mntA z9_M{(8Q*T#7G`yNP>ChS^U+jS6OW3O1vMx6occ z^ZV#Wt5PuS-7vrHxl@1Leo1*IvNqPzR8^0hwo_A4i!D?Z#T5T+efy5!v|GAyUo4lP zN8WjWG5T$4WvmAuM$DKo+u9R`fsQg?IWl*C@xnGwiOKK-PS$;q7gpAi1;yUNS^J-m zpPbXeb{(2eS4f*-egIYr`+vXN@+Bjzr%hdKqoyw}zkmM@#DagncIslpFO)iwOV_H% zcZvmsbRBLc(+_Njt0P-ubBFS?VK)5hSLg0h&*`!6wQKX)I%8gbKF~=F|6O@Uk&DQ^ zdiClwZ&#;*cW)&{`vSflcs@u7?m~gzyX=@M>=ax-HD#0YlU#rHN0PRdB&=t}tI#-) zquA6tDl{~nv$LlBx#%TRS`$3q=x9VDTDRTq!F{8m?erLLQ{7s;M^n4gW7wb4$ne9@ zUMe{$-|C&A)u;D_GauT$u(7_{<&sW_xxD#H9cL|Osl|(>2a*TC8TnHDcAkZ8|6?ER z3-w@8>I~m?wt}TkPQRc!DrdrOnU5Y>WxP)HqF`7hWDNJWc=!i<`8=>m*RJX_W5x&= z7~0-YROw^fWs-`8AyDJ_oF^wYw=IE~ZfPO}tAVH%bQHk5$+jTLhXT=c-a9ck_zs~2 zHA$r7+2A9 z0a>`w)3TngFp7(dQ^MQO1YYQGt*>Pj)IF-1ZhBg-9ZPFiRn_Qv#)%q<+t}O#(TR-> zGZz=vSl|m;gt?tv{u2TN3wM}=f=DU1q$COqtOed3MRIefTO!Lm$vN0CaCQ#qfn0#$ zn9~~BrPBZ7>n{VM-rDyMR1p*b5di@KL8U`VIt>~@>F!Xv8$m=w>25?oK)R%)b3`PE zZWv024gsli&whUYbKad-dvDz^Gi%m&tvjy!bFt}B8X9FAITUjLn$&mvfo{WY;2s1anIT`EHac{*_m7h_RdedUe2RpPEz4;%=?8itOut4zv z-yAUkb|MAsh1~VMa1_jouR^3<=e{+lr%iiuaw1n$yt`axO0TI=eBgbAcRtLn+4vo6}93-790^Z7Sm3s}p#NjYK^y$)o>tsKKdv zQGwuLb}f%^U(q;k*!`OqsFzeSI@Wmy-uMyG#t6z6r!`#Bk5z`4utz$@nu5!P77Un4VS1WAO+Lel@{{B{ zBd((%d)rBVI7aK-H(#>G9KKox@I5=3KH)6V8xbj3fmbNErf@@v#PFuO`A5WEzDH2Ud_>^ah zqNd~Ogd_B_WX?6DafyhCUCQeZ5g9&yb2{OTLEU;3x?f-Ncve@0yZ<0|8TznOOFH27 z&AOwdGPjvhB(}*+bNynGWGNmKVLK>Qy0}2d`orr=n8q+cgn3FN&l~+)}hX+75 zy8U#W9T9%FZNm-hho!Bcqjl^FW-iisz`%rQhaeK+pE`MwrKoh5&EPo8_;p zy~O{W`4ZOeTrIM-1zb;|iqDcDAt)W6Gd_ba?Q{L>e4R#RDWss+Dd1P$LVbG5P5`Dj zBM@y+MLXK?J0nkeepNeqb#gQ#c6diZ`scJ`UHi489_uD z81)v@cdNH7?s&-Z@&b7DtrJ@&P(|pwL9Xfulct@W2oNMC%f5%;>+j}lU)s5^w2U;S zzQgfwV0buCr53NavM5ZJzV+OPi0cKB>=ChYWy` zC8N5HhMLhZibO5u_1#Ngt8>;{lm;dyU)$PdYq4t>)+q+?w)MR%Zf<^+35-a)HL??r94WHddm;xpuTrp#BtnWu$^>v;YQM4~v|ZdyMVS(3>P zE^|KVi-{Tfez#mIZ9b5%Sc%=inNiBLxlQ8k=G<%DyRJ`4WKGE7#hO$K&xTT2ZeR;IdIGdd2W4cs} z8^waxQmpfK>ZFM4U?LFreKWC*STDZc{75us($r_2`MNxMx~yoFqtu2mM%(T=`=i)i%?S2KIUNCNpPg?>G)>I5 z>fUvHN25qz2IX(es<(6_vcK^jwH@)2SJd*}Xe5#$v0V@0`_lDGRcgG?HQWEnqDz1X zlFdgTjsBHRN@MXPe>jS0_s8}R$-pm|kLpI4>4Ls3i8Zp1g-Rkl_LeW~u{^99Q4Tn*VJ7iyWQ0S;Jxtoxa6|LABkLQqYTOl8DKN^+^!WWYwrkRGkcCdX^iAV_8TBNBPz z0~s=vHhHPjC0eVw`(iZh-n#3VQK+IiX|gpIb1-fqSOlcck=w#R4Y%YolNS6@O~QCf zn@{h^vCy}(%(U5;9+`zbkU=N!~LfBQ=^8@@|3b@oX$sb z@A5-Nj7SxaJ+n07-3}{+vKKo#ntg7pCEd71>*rVMe?^gd4eK-0KW8`&TS8hloZf8R z!+H1cX}mdaPe+K&6maeP-dgIe#(z2(Ybn_f{B5E7+(P5i$vcQGGR+s_htrpe#ize( z{U)suuWb&D!g2c0bE5AE=XyW!jX9(w=I$+Zm5qL%W62z>m5;4!Yi;iB9i@<5I*|~% zAy`PZM?k-#g~X4z&Y6;A6P$OzD@&}og0RGs9Mg}vx3<&3%WWz`IG)+^(@lR5c_i2U;458RWTnsoeP zbcgg|3}4pI)d?Q^5&o#{z`Pv~&pYmf@$4xbm7)!*3aPZ(_f&a=kat$pG*d@j6E!K2 zBs}`>VYr7qQVgiN>g%k`lv~z>j7PtnY`3<1goDheqflbh?#4^P8E8n@E`s<6YxD%_e1uT+SE-PoCO(}CXy+P zV?o&M!^f)t_r2XKu`L(Ae##qj&XylZp8WTdaFRhGjypz&Y2Eb}zQ<=G?RZqF0WXE2 zHfr!E)@W`F?^Ur=Cqw)oT>+;e$susd`QPJXzGEixJKOp6?_YXvl3TuI1yNsQ3Vf$a zZOC{$|K-LXd%X_-Znx{^{cvm3>gz+Y=B>g1dwelx9}R;hPtA@)lmuZ7^(Q&bjZs2$~R@Fpw#lrE@C693JhN%Nw+ z9DX#9-n1yAhTErBD2<+Gdp82}avCy)#FfN@|L=1ec>BuV$gmuTk2;mCWhNNc=GlAa z^#5rAoT#H20yw3~@9630-d{v*RO$5Y^9~qLwXYCQkKz399a~S*LFkZQ_=RQdkyLEx zd)718sBFEiukKb!=tl)#2@2SUs1rHkKi=j&FQMD;ar+V``7?;||NDW_u8*Z*nB9?e zp!c)vbVP7j=i|i4?mfL)s-a-N^P$OL1z7sBZD}qXWN`(`%+u$Y=xzSdBM^}Dt);$;3Q~x{S z9koqx#xI@^<`uCI9lR})nh1IxC9rIx#lj@tZ0=6`zYtM!p?)VWz@gshX7gCG?EhB8 z`r5o;X}Q5y*aS1K*Y!@c1~!_aNv!rcLSOY6_u->sDV2IOzZB zG!P8eDW~3(yVvO@BHq3`UWfYlikawi>YUWUrtZhFU)u6lI8d0X!c4X2#+F=lqod5P z%PE)o#~p~iQSIL6$YIgq=W%egh;!+BiX;_o6F)z85DC&ne+=^Z=ETQcU{e~et}S^< zPFjUDa_Qj(yWs5|h$oiOT-vPZeZ4EC&S)bMD8ZHY1r^p-+3DeM4kd|H1!keg#@Utf zuGAP&jrEHB`;+;ry^>}>>U8B0lr_T1 zi<>@#)BhS*-rX3Bm%5koApg}4OJz!XT-o=>86^=5Y2v@fEmNn2qciV~w)g*VpMSGQ z@wwq7>dc?~kusiVFkKs|y?!n)PiUH63;zwX^qZ9#*ALGFJR)dhtY1s2RAW-`IN1zk}tO~&x2Vfo)?#-<(Bwq zZr{SV_oZ>Pzpa;QF_9MMWR1LV_71lb`FZG!_Z7D4-g3%0otii{oSWxycYI>#o)1+y z8bolj9e?I3{`%0-nYF9T|NffwyQ2liOTUNd1F1&4(k|$h*MA?%ynh=fZ_?Xil#7%N z4)*R7H!C@`KVg@?{>CSCD*fWU?+K$4ho-^zOV$s=D!+dek_b{A+)4MPE#hcw2p^=r z#+H`TKdW$_(qz=D-sy6s;bT%?l%YaEA<_166v>T+n(f=E&i{^>k3&`lw)Rn^Fo*9_ z_BKuq^Pp8l zshSUWXL*>lZP?RU#r<=Gb(^dDDxRysPDtJEw`5=1)D>R8NxRm~u!+ML{9;@#A+pB& z+Z1Jzspg7kQ5gmCmxu`E8n@fdURE&!SVkg($JGC(eHUNi@_l~%m-qa8n%D8n-QQ-> zCVsTplhqF8<4lI8$yyK|OMy(IdA}y+N%2?R?Xp~5GWhuDj?Zjl0&ZiWvpL4DE)PD)9xz^i zPI>Lq_qD81&AyLobaVy#b!}!}-7M5NKV0FfIv(0mZ=KiZTx?%p-EqMic4Q8_VG7oa z)2{_)p4p`hZr|%{yKa`g6;+=hZ$4}qg3MAb&EJ_MQ_6cUE-GueZ6NgLB&d}AcZVll zwRcpTaja|)zji2fzw7?|{og?(M#+6Hlp})={`Fspb-)%PeOhQxf*XhWIJixu#J{)B z)Yur#Egmd>dI=uY&yVb1MqiSe=8sa4Q;syd^VN3S_x2sR8OGz3K@z_)#;rpJuVIs0 z&UQII>__bBYl34*yvwK58WuOk(O0x_3pKr%3edukz#|+Z&7r^Bo6Mxh9C?(oHYT=vP9GMju>h3ICt<|;VdMagNq4xFA}adx}vY~@sO$$MgjW0B>? zR13F!+*FAzkFvb*@^8}K3T(4sN78=#!?*~e>OXd9*J*CuKk9|Gd9;U}fnoeA4Yq<*-HpoD&nAg6O<%JQSE3yENM^^vHe zzxGS}_%>+!{(#%uM?9Uw2%mou`?!+#+gU+}|@jRa9~%So^IlGW2b)NM*)<`<5{ z<@Iv!g>&R~Hf`5k@KE#Z6%y6mfg|H#TSFqRT@NNLI2R}wb~A80+Z+qymR@mWmd{3< zY^NN(s1Kti!a@&we&p|L6&=|n9W z%G@1nf)bcx&T|fbuA6q?6UC~-=*H-GfVR@^5xl0yw z#Gv@BAR>#GFD6;Rse87$raOp1F6Fmgg4tF5Cz~e=E)*AV9hbJQ2&>B?X?SH{%e{1yLAHR>NtpP)s}m@(@=xxtch$o?N*4(=}ZPtG8{ z%?DKrbVpz&^>lZyPYC1y078Ox3T7rVD+`(|Bw^Byb?GI%Crq?VzwoTSlda5gGmD3)Bh&bXEmF4O6vdYzXyO~mpJ~bB8 z?b`GD?Vx_UsPgXC4#`qhVN=Gwx(excNxDq|Let;9M&S|hC(pzJY3MHIh+)FV;Ic4!zFNhrT7gzl)uOSwTHDHN-d}%9#PK&LZ z)ZQm3&S09lEBf|gGUb#^1WL#Udz_ZE@8!L*=&o;HBuzac8Uo|A*{T(_71YBUx~)Gf z?qpU~p}bGTrl!SYCu^$btT{`cBh7q$X(p@wtYJ#fAczEnXZT;Y%^L(5?gf-R3$VH! zsWC*8P^;I-DqFljEO0$wCj%=~nUm{Lc!(;w4k`*+7cQ~N@JZJBsx+q~^X0))mn(Xm%I;|orxsUjoQ zZr5^zI~_4wyb{0(T5CG_bD!o~Mdgi?9@Eu8tdXhbLJ^m9efT0qgX+8mirZvZKG4Mm z3xBcayyDbsWsUGe+Y(H6CQ<|pN@pqGt}MH=v?!t_=FQB^y6DvUsWCW$o4Unwk3vIE zrpcK~B!+|B@h7np^ShHdV?nP}75ZRh_TbATxK%un>a;;5_NLu<*(dI0gO(1|^wm_A zMOO~St{3Xpu`vH)TTwOF232u}xD0B2^gkmXFOHz@4MrjYjcXlCPPYn*q~gt03JSC$ zVnfM7q!<|)0Wjb4ZSj#%cpG%AKyN)&>l`FY|8AG0*w69p(sTceKX*jC?+^!Kg=e6& zl!RouH&`_P%JGyF+#DjlY#$k^5$@9Ee<>elZHQo3eyxnoNs5^~4r_aZApN7#MKC01#qZxvasTo zJw6l~|DzjoyGng+ocyutaleKNbG4ULz<}l%_nK5_rvLm+6SQ<~*|+7VJJ*z5uh_oE zwlt9^h<&`xvus-SF)xMUoU4jqUW=@}FC@R_C3%8!uz+C~UmN7pPUPZ3Fcoa8n3G!macEHv9n))j+6J2B_rNQKmJ%L>LrUz=1=k{4HXB! z?IdNM+^?vg9NX~)XQht~^rYo;4C)6oSRJU_S{#obJ3rQl90`%7GnGY=)Q7hJRmqbS zPJ=Et+>sokAq`ahW!>t^;mTyF=(vDZ-oc^Y;esko)IoY2GW;nW=mTQBz$#HNY-uky z)rL9cNvw+Z-xJ@*@v2;;X)Xv^RA@uT8fs$0AM55i0PY5Toi;9T>;SU2wpxu+orHqehL(Z1qk!g;uojRYiP7#N?&gNnzK}i+lS_8 z^C<()Y?ZtTGqq^?=Sbj@E{yTF7&#!Zk-TBhZC{8JIXA$DR;F&XT^S6LY=XRSbCawt zhg>v|oQ&*SQ4y?e`Kvyf`zFg0baXpv?8a=5nxhXCT4_$Z;>Q!*^nw z#Be0mnf}MQ1=?k~_o1Dzu&}SnkD$46Q|ge8ZLbEfnTY_f*XY_K@vWQ{*n`2DFG)Uu z3lly*zKe_7!rn16DIRD6;kY~4IbvjDlp_w#tnZgQe2wq`|B%-2I59fPr1Wx_s-_|d zK9Z~_H|!#qdxp}#lDo4tyt?xR$mR9^psS4$aJzV1E}st(==5OPoj^zdAoOlp8Zd?d z-I|n?1Sl7-M`As50oU5CtYIQ+(y0Yy6LQrJ)4C$N)T)V#UGk~lXIkP*_mYXGyTG-Z zG>a4Nv-5i=mNu`A92_Etht+%E>|Q@OI54?JM}+I^MlVO4cLh^EnY^MMpI20Xg6S~68$q|J~OAW4(ZJgegf+?u^1Ft}%naqya4L7*+ zc05F%;@aFw&QaFYW$W|^0a;bk>te;t|kH? z9<@H7Wd)zV5mgc-ed>ArDoj58pZxv()BD_4s*QFIk9|@F9kF1_{~i%hKsk<5MMj2y zgv5Cw>{MmXN-4J~(5cique4LxXQT_dtP8q*XQ5b|#>F}`BW)+)xw>UMp2^KY7BVaw;*iQogRzRctBCx3V#U&8 zD3hngdbo+?RVJvw5eyF~MuYP(0(GlV>&OK91ph0rR^gk3{I3}Gc>CS0JHDL$VH~?u zib?`rrMRENP=YDK+Y;96G;cPf8Agz;gA3ZCruDW|CsB@`BNby5)wyBQDAUtteI`u* z{BMYyb5r?_P)PKQxO*MUBW*Sx#D6T0g-O-6}dF;kl2}%!^APcuNafvA%%gt zlH=9zg?T)9l9_Qi0-^dwKjWp5om+hNk~xNZeu$hJk}RxpLuiu3$unqZXaGZ>kpj1W zY)I{HUD)OVTs>wL<4)#wwht8*6_3u&6$wk#SmAB_1Y0AZH|`-9Md3KCFF83Ma+WOsci>L`9eW3I5hQ~mvVZa-DZ+8 zPCm|?vAF1dH&0n`!&YqF{g93apr|#g&<0U&nU)Q5g`XfxxDWqW6y{JQJ66O$r)V>i zCZ;7Bdz#~P^McfsSAg$USVum}Zjv9!OAyw@80bEWrw1wzd{*pd8MY$JPmOGMGWkSB ze*HWsg2YAAr%%^y z5G^P-=k+7UnKxTv$;ruXg+C!rTl|IRcaBW2@!Vq!0=q1T!6_k!MG1na-067N9FYA_ zL8LDw{Z>0ySTK(19~e*bdX^fX34gu&pU52Cx5YMf8_ z{f@g0;d^Ltq{i~U#PlL#Mcub%I+){Lk_I+-AMT!ySGa6V zsNdEGiyV-~H~>Wl6jKh=xq2IKcImfH7s%;}ufw^Q^xSEqZmY)S53%(hUeFSKM0jrP zTh55O*&rF8;j&+@GA{!+Q$QyFsdEi6MMNNn#(pj?(!*@jQzWmImDT65JGe&RzN)fd%oPIh$uZO~eSLjUK{&!oJJ_To zzmEMN`3~US=cfmwp`qbU3+>lU2AIKW5p%`D0Ve+M$n-(f&v5E3Jq`rq?1sL_40LU6 zLkQHcw+Q$}Rol-lcXKv3Bs6AK^Hw{FZ`>trWSJx zU0${T@4p(aCA@NWcy~Y|5&1PE(2hJnkNyEARRs(qNVZFkx=Mct0&5cAph?vHe$t~$ zQ}vDkoPa_D@`_Bv-7GC;2h=~;-gJo*9MWQj`{Cr^IY&G z&cvH?V2@}>l@J7!?Kob&dKGg#q@V33w4-*caKBfVM3~+-=g8DbVOiWOWQ+kW;FqbJ z-x}^tmVX1HN44LXCdgqhHzLUDz&peF}xLOE(3~d>D9pO3(=^#m_BjS!_8^4kr5!6fa93MX;C$tk|K=3=DK9g z6&0aC=Y(l+@uRsbkQ9KR+1S@EJSyY+&>o?JWJdL$&&g;?p`nU|pjYZgmO%lX;! zjoHo>m5JyiFfl*}_l;pk|8n=Xc<6Sm(C!G@2gc79ht6hh(c8 z^hv z#T-9={D9UQ++_d_gzp~4HX`M7xd{T`ih{Fwtj^uuGvn|iub{vb3Wl`@t~BC4vKcSO zxKY;0jC*@~7&DgWVtZj?Pf-&QUO`!B=ST4JAp5>W5QveE*48Ek#l*n#_DJMW8;~Qs z|88byWnFiwmhbatwAV zSdBbp=qoL#s1UCDU>vEZZ44S+(3-)!&%ZkhoAevJK_{P77vZxBXd)YKj6G7ls${yk(tgnbWBN*dW zH{H&ru zLK#a#nRMY3HcTyqhJ`u+yV}csdI5ejZ12J0VJSu4U`y>n zjR)FgT7_OFbBD(tnTVkXtq~*lyzQQ$Cs~Rvx zhp4jz-u8*0m-`miRTFj1<>LHJu|WeybLyRS|2FRb(*gi&c7+Uo z{~<;Ll2sRdCc``zWxgWH3^3?;$*gvM=UDVF;aaUVMwht|Evd1_D3{YMDEN8lT)UG>R{ zXE8J6y)ch6egFof?d6453_BlcqUrP2-23&MDUcGXCpusdv*ZVk{KK2*K&#FSJ zi@4ka17)*2uY$zz5stFO#ZKUL0TYWy!z<}XIKdYdOk4~3+m}%dfi(J4Kr`_AY7fD6 z>44vASs;-doTF~RmE`z1n}h^haR11_{WAjU|9~ej0(`XGigSK6tO+@(+tzr%v)XIp zC{uPh;&OW1wVm%fhY=^Fa`6IUA!+5G^mTPj9WAeG$NvG5COkmk8Sd=tyyX3gO}zvp zR|eKyhT$~JWOYQfu}`4Mt;s5YIsaUsDWoO643cWNX|_9P&mXhK zEyMuj`{zK`aCfoGado0Qmd$P11 zxyII@WoF|NTadtsI`9GlBZMoD1Vj{s({j{UxrMluZ|4PP8c|5Qwmmi{*Bx>N6|W8h z>#9?2>BE9kb{cJL{6MTKThxJv+w;H_16FQsaV6-spa3AX9Yu%P(?`AsO9=qG9Gn>W z@SyuO2e~u@@zLvjE<P%eTZ9+DTpQjm4Q7n@@#u3Y?ZjJ+6Q!lT^~PA!Gp<0VeN zt}+xNFE4N0M{Q~Ez5+31p2G?sp>|nY-s;5xS06Z$(ET^90jE8Tv`8rfQx-_Lr0NXR zgj*k9%?lC+nnb|`4#_&;Y9!8fB9=P*Y>Sd(^K11|#k|R21AxO-Oc$v7LFGFZOH!e! zsR`FN7`*J>da_i*1}7zjw0dF@J15MFK=3A`_FMRNiy<>9lpBXeN8ziDqR*R}s>;TB zYsT}*QX8CNA(8`Vv=4{oMpRsvnU=NzBQ+top>(b6)$kVCpgSH|-FvIv#i^r^YiVUO zrA+Ri8{Yxx5zOldM9`Q6GYKj*kn2HF(%9qm$FitfP*FMdu(u08upyhQ0(tn;jOJgv zJRH?^6Gy`+HxgWIt!^`@xdBgr8j&~Qt=KW+Ze^WzgDU=QrMzQECNms4U@n&4M^a>C z#S({$698d^J>{WE*-zjl+a-j6$j743H)$D5=?*l#>}D6hoPs!mfkz(hD_9++T=ySKPODXPZv$LNv4VA^zG;s08K< z5mUuf7FWeXx;8&=9M5)lVifYx61DR0RaIbhY6+2z8cWiPTx4QS*V-EEvw#4ob5T-K zxwkKH$`QkR+uXD}M@XEJU;=oUtI35}VkDjnvMFdXLB*>z3Kv3}kt%+uGlDfKi%c;d z4&G+A@4Vru-t{SA9>F^W_lDEv3s=J)|&ea@qV-Z4_mI7Zpykk*F1fV=rzHO*&Y~zy( zE7JMvG(z&h_o_;6KB2DP`}>D~#l?Eo*KJ%4*46y8nelf1c>xTkt*s5J7ADDzu&E%# zlg}oGB?rnV96B(F1fV4-#^wvXgPFd80cH6AVZ=pC|L((w4>5}SgKcBa-yu?vxh8)8 zoKu?}nEcvBSGpNEln7r((ea}-yHazGH5Quv`zDLo{rMNlO*yFBQGFag)(ByGA zJzAdrYxWnEJuXfpE@BiCIMm7Gf&I1rn?O}nm2~%b4O@dR3@T3lyu9J`lr8_g-A^=Y zP%ryNwD-@WSCFazlDPdy@FuM|%v?tQZ|X=_z#gXL>@}Rt+*&JMs>Q)l00PL%ZOZ~u zopl(gf_N$Kk0p%H`JTD^At1v5a}&Vu*v-`V(|1GCl0zfDI2l6jNFDSDl3jcHm+Eoj zNq3;))ZNvV(*?=CCWm1Tcxbx&?u6VO(9+Cb41)~H!{Nf0uROVX36r1NbLcg%96JB| zos`eacOzg%x0;zO1Ry(5`mR0QsD@feoJjQ6WY8!Y<2XMvGqdYqO$pW*;0O?9#M}<0 zeoHH>32sDbII1+hiwjQY|J;?0V&y|4!W?%}?0+up)t_wEt*>o@ld`n5w3e3EJy?M* zvl_=UVNAB%u50hOK32ASs~|`D=gOZ3Pm&;~wPu*1hvkF1rPK1dHlz}UCs|tE7>S zYrIzo;U5skc*&$xN2gi9FlhY9rz+zTAp0JcCA)` z>oE-G(E9G*g7$<6qn|mQd(Va&YR4nL32GPc3;-TITr=DhS^$8)JveZM=okYQIiE2A z?jL4q#J=&E5ri1t-tM)D$;l=#?gy)0Gd&6;Cn&hUGwSNR5xjTQF;(~oOKm8~g+xW& zf;|HPyp%Gj_`g*;!n?xYcL>A45Jcu!4$e+u%u(I9ri?Az;@xLFgQ{nJQ(m)c_$t{6 zD8zlpB0-_{4-Qd+gy}xJ*8!tEri{>}La3LsKXN$a2nYy(s??x2nhfqN%-W*t8>9*c z50$VsXKLG4SD7)X@oR_3XJ85db+>jl%_RWuBhU;9eMn7DGN?{5*8cc)jn)_94w>qM zX^*}T+esKiGXulSHkoj+uTg$zvr{t-cZJ0(iyG%c4rsOmDgpG@M~lc8Fjf~7Sb~Y=a9Fj*qZx{p^v7u?1u9%c z{5m$zl)WomC3=qRMC0A1g%si$ka%Auxn#KBVn2D1)pmA?=owDm#so*n%KjVmGWkF& z*DP9oN?P%=H=lFMUOEEI+SvGV&-|B$3b1;nX`SCzpc4kZN@8lF5v(*YDxB{%hi`69 zyf3pKKQPEsgH+AL#3vP4Zt@)upq;-lJ?-M^I$Yf2HEGN7IpsMc6nv#F1NlY7+Y5$f zE3pp$z3X^{L_%6znyQ3ytOHz8W^Qg!bNs*d>JE#BrS?U7BmkA|ZRYll$3})bz@&|8 z&*097mbG7abXi%?6_r#t5-_;I>gvNvnNjfStvx>0=~G}0%sTg|18mZW!%@-Ev){am z;KMDKtwKLB`3ZsIRD7J;w_=^XSH{hAV9EUhoxWFO{F93STBnRXq$wX9R|NP%MDo=lte1v-=6?f@c!~GT8C*4B#b6Q$k)heLg|%RjE^S#*vTl(#m?Qd%D#5WBkg=8X9Kz zz!Id#0{n{Wd1r?U47~!MX7E?Xz`bl;dzk@$-&9%e&nv5yJ`YuwQ z{ux2*tE<-=Y#kbGU4ZSkVZ&(S&Sza(g1sEHmvtTb2Y{jS4jdYsW~Wm{cwpdp#G5Hi zcX=ZEEyH`F1sT6GxxT7M^o4yoHv9eeL{C4aCq75sgMY!je^~(+^CwvGnE!bHzrX(f z|ECL0?+QmBygy0-C@xgjO)`M&1hvdTnOe+|`i8kWML@Pz^p!Zz$&vmzP@v9ZZ4FI*YQk$^JrC@iiuxu18lkotQFU81 zrqz>}OxA5<;vj@T3%*;38|-F(^i;IGS{-K1?Mt190}-n1T^)>=ci%n`aHV3BJ#wp7J%7aS?t8+#+t9r`k`I)JN}7QK4GN4d)I{ zU>_O7jCaYy{SyV;e6SAIt8ws`xHw7I(w0Nc%seT3*SXRYfN!U zoS<0*L?1Lw?Nh9-u26=9)%S)^#>C+7H1&jT~2egs|Pxj8J4 zgZ2)m`)`$xqF@leuBx-4&i&7yKhWYIYC0M&qEhBaz%y>`UckWlx|`1|#Qi&D-S5GY>swC!?bbF`>B1`B`G+ zxSxoMib{(NvK82~j)K&Z528B7*_L>~yBAEOpg#3ZxoE-K>H%dKaYV;9AD=SR_Oexg z{9JCWO^O5A830{?bB{n}=y5#aftmd#l zWge-L5Bx{b5G4Q{2P_(Y_x^^op}G7uA@)bfEFc@fN?04K{&xcGq(h7ke@gMAw|z_y zf`^QXihvOZ3Y?c!?@OPG_jO2|B~b|!BR{`hNxwie%^i5j_4MsEK}|l9B7JV`6RO^O zm)`J=r+<`LG~h1p_5WV|$qY50)}kWVEEGY=t}L0G+OpX|gNSsO&s;ghG z{O)kHZ9H=^M@>^5RMPk_*jlrsJX*>0@@TOh#%{*&VwqOReUsX)E)8JE5IzVL8?LmB z8diM&{@yato%4ZBea5T48jTW9UBkZ2OFjOVt`Ro2)jDq>o9t9p6WC`u!suRocTno3V>iE4`wH?gqzAX05VI?=@iRfPR5^vY=vZTUs>WnM*7=z_yf zIj;2DYG`U)!oB*g-g}K6)3b#h;%>%&C-(xvNsxLUBK&E)mC2x+$IC6Fz_M^U`g!Yl z_o+fF76FpJB7VM3X7(LUoK@vHh2ksNkW3Nj{SBtqvQ0k0ZOIfti=v{@!-C^j_JPo!Z9|I^_LJ}(K{V#T45x21a8>R*(>Jwz$UwNo_@pwl7LPumYIwtzb1XFCk#Mjy z<$Z!wbjpsLxf0>25E6pP8ZP#ZR~DUxghi?crly{kX+2g}XGfa3n7x+({gPgj+uig& z1z=vp;~-U4pTAIqvN8g-LyU*hWyT}wy^H;Jr_2!wrvRYFbUOY0FXJ6!0THZu%ihGw zDVi;T6DFzsjUqkRd;90^8J_P%6uzohAFoSz%=P$wI>N3(fF@1;W;_vb>3brH==^-J zn)W*JQobDso5=~Toz&zQy|aN)1@_YCA)^LW%{*b9XvRv)97*qY5#q;*vVyJP*;KQQ z;2hU7T=_lzC{@TCbDA}tF5p9I0~eI3xoeyQ)DfFF5<=)?!W}lZB<@k$nbIdM`uUv; zwLRmkaX+MqH{Urp^L`%wqVysy06HDPfT9E%2!u&MWbCiDCNJ}-|2xATBFn3T9v3c6 zPZJa4JTSPui$f#f`}@rM5K2cryW_b42TL?5YaV9Ptc5o5&Bn&Q@XZZs2}i8D=@uw% zd@u%(mv`#Lw&-NFeaQ{dZ)%W}FK=#4eocrMa{b3k`{wkP?L5EJF*O)*IOtMAzkC7O zlmOy5zA3Q)_>|S0u4(wRE<3~#G-3;L8SblFvq9$mP;{E+m=SXMh++y?{Yj27J&8fZ zPz$-m#^fr&rtl=gzLSPM-|HM&;$RH&k9O+f*Zg$JBIdvEvcSBeTFltBy4-Ku_4725l&)v1Go{L;Gt1E z>fIBbF8G9tVzCQ_fLpn|u~7*azfo)KuPtqt_TifmcfJbxrw25zw#OgA(-9gT+D~a` z?rZniDf_9HWfCNr^M5_Gi1krh*S8qD~sB(Z-n=VYl?APk)m@OuV{ zA;=tj#QRzo9&{^oL$M6w*Zc>Gi9Ptdf`Rr#5Z=6_vH!30vO?yYd3di{u~~GW}q*iq$x+I$Yk{& zda^*?wp~|UrerO)o57{wU+4bPjt5jh;9iCvKz=?jckHUEpn5rp0&2nVm0mQGdu+oE zQg#TO9RwYI@TMkLD3|K9#(&c&(8~E#tjQ7|{5EiT5c=(RZQMk5B&mbi{LP2G)?00j zA?u-HQsN`HGW{)r158`3DBXhY2K{M<{M$hgFnewN%IcN;^2*9DFQq7U*i|=?j)hv? zhBDXWM$L3_r>9N0O5sNLrI3l8)ZR{Uz2YY77bWR*8V~!uL}^TRD8#{ZNS(WAV)bc* zPPW!hQwm|4h?Fdu2$PCQ-0I5t9S@8X!^QsO?C#=@X(s|v<95JmINOA9@=5|>B<=W2 zgFekIy#F?)srC?!5KF#1(5l+&wxXYhJFJW-x=edm){+NK#9k$QwXrk*Q%hGNMW1IVxE8iFp8QeOMJ(}OK5@Ej zSMczDcX@NZ80%D}w*d6e%uGyDlk)x~*s~LgfFRD{YuM5f1BZ{NzrX!8aHa#?{<*}= zUPe95u7~PHLM9-YYu%PuVO^lX)qaHC#`)nB6EQpxiDGBoz{4^#b9p~>DhdS~xK!d3 zkRSy8!YprVmYF|9_?0=#;EQHnzPzd`Ngbxz_gRdf$)knb@95p)HWx_L;59+|z5=St z{l5or=$x+!Stm=w?Q?eWH!3-0Wuz!&aaRaJA?U?n9Gk%635@)5s!I~!%^n?=aDXi2 zdNY#g1+;D#wg>3;Hz%Z^W7JTzh7v(Ldq`y}{{zX5k4LpagUU0I-g7uujx^@I*Y}8IsqA zpUSQ}DBi)kp)-#^DW}H*w5Oo+EFERSD-y$V9`$r$0}Ik)0E^6XuzI2>`Md4Z81J+y3z!F-b&d_Jygym~NC*}ZWt(S)A zfUcJV9tboOc!1|RAlstgg90!g0^<+3bZ+C#9N-Ar#?8yyfdks}_<1)1r@FnfwSmj= zmI9Yw0GH~isi|*VsRcZ2XzNx};A&CEZr~|;@9tLLxV9B^*cWh7CvZR#n36xQ6j|y7 zI@j7pZu$E4{pWITd+0B({PV-`Xi_6^02g?(+{cQ&`8o2j*CT=H^ymkJ$&ZCoj8@;s zDZ8~uuRrShkr-2uY0%uTUWmAE}Q@};5 zT2GD6o@LxtT6*#R{^`I*1F(YzJl*VZ@?+q%a|07F@ZY_Y1!g8-?WZBu1#Hb2*qZ~F zrh(=VT^3(-bNmZjN&-ARVJ&Z$E3hjDoI2PSyZZ+4mdIV}jDd3!z%~%~N><>m6yU0y zZ{Juz0kL@V=dF@2TEPvr|D0`!Cf9xhUyUj(TP(I}-avT6(kP9;sv zV)ftaQM);#x>$2&`1ie%W?!lwdtn=HKzlQ5S@Sidc?i7&la=yMsCx6{<~H& z&)7i(FrA(u~=^nowBbEO8eadHv*|{5l9nY;n2cMQb{#;dfW%{9;yL|2DFOSJr z2i|c0qEZA>f{NeTbM(&~<#Yd(kJps?9-04WMzs3aLN1bz0cm`-aqFX z_kO?5U@YcZ-BnLlJzZV1yXFj6QjkQ1!-E3>0YQ|O5>o*I0loS7fWkn1w8VsKl7N7q z&UmV6Ijb1CkvKTnn_1cbNSr+!03-l+OEVA<_vNuP%Xoqc)X;Yz9B}}>b__U$*aMV6 zd-e}2iD{`T^QA2qMeAnI<}&KRJw1!2*Vqo?drn`c(=k9v#f=J|VABB+G-H~dZ@&+c zz{bHd@amcN<)OXBeo=8Zg{$x&NF&SS!Tr5$a|Z{iYPTg|*;6n@(0B407(<9&8l@Ipr2=vkQ+vPLw!JRghV5@-w%tTbX*oN=KlHpS@7Dd?IB2Hop0lqRQ~_H_oizwFbQw@WsQkR@P@q(Y70;EwW& z<=$?rHa(cmvfLZ&jm^D?u5bILahsPs_l&+~G#CKnqeGMYmZzF01An8h4RDilymhGy z60e;LJk0F8yXHU`tJ0m;>J9Q5N>Ruj7mTZlxybNZht?;L<~+)ktc&xLszix?DWckZ zN}$1{f2_roJv9%HN!2K0jx5{?$KdnZJozgo^nqh&6*rX zsogh%kM*Q|-l=pXINq*sVJiaCep2iyb+yqjho`&3-f7Ek;?0P@i`jeiW5JVqe!Y21 zUuv2-8iEo1>ZTIzi&ikD30LiW=d5D!MHWwT2Em*unhT%vXb8+8ltFT(Zmeiic+Huy ztxvC+(Lcmpov^HLmCSF_+j6?VtKMu#u1u1p16WDPBV-nn23(w66XGiuKVmxPQD`6_ z!eiI$&{RjAVEQtNp^iyAj0VAH(V7?I-~K$GO&la%<`OK+U`Jb5f8Zg5blEi=99TEe zb`a$SR+Xi?j!rumuK+*iER7Zlq*I0C{HBolH1tJAUSBe%Gr!0YNkqjvjbEerC$wQn zRNXX^WM5}EQn_u5I>`cLlpAppqEH#C#Fq*JA%_JLV5siXGK<9gx_OewEXPSEu7!4t zxg)(zJOlsqLxzIr^UoW8TMcSoutmjp<+wm z&{C%P?Kr$%`l%|d^L*8ezQ!dw|5mHk2G!rzY+MRheF3YMI5iv-g^6x`UE;715oTNh zd-54y9oh5qHl*BEjQ|OOBR@K2C!)fl#jo{L<67%Yi4N3Y9h1q#TKKparlD#0ANdt7 zAWEf|9JW!a*tg1VdH0+4Io}s=cO>&Be<;9NWvG{jievy)E`e*yWQtyD47Z(MY2otM zWH5Kjk`4-%eq_f;^UOodhDu_KMYHIP^6&DGiZG24c}9X0<5q19v3;kBKtK|suor9h zfU6O%defh5=gq1#Y_FloN=e!Ap$t^%JOdxC>XV2`3nElQ`}qvNZ+FAMK?te&4_5 z;15ij$odkROI1OhFnFh+lw^pc<$`T$QAMLRK57TC41Nb5kCQxF$qgcr5sdT1vRQ~5 zWFTu{8P!z+5VrY*yr|+vHxr>xC?pIHppW*nME-sv7Ml{C%MFEsO)69X->(Mh(?FTqTBXV67tq6Tia}wom;)Zt)!oKkx^NO2sob_?GyS59k2-~!WLQ1 zN>FVLmx8gb*!Q67RW3ubP08R?3OJ&iNPCY!OfIzP9Sm7w&wtYrohH7Q6tJtY zkhi$zU^wj;{yYXtQo1d(*hNg5C3hlTNx~Tg4Oldx5_Mxb>Q1A60NE#RH$PdHYa%~_ zH6SwVFRkC}GM?24pDdkBcD^WfHDzs%oj0;=U*=C9lK55)0SDh|OF^Y&GMVooqE!&@ z*}I<6FCCK|24q}*w$)8d*o&|(B)ZI;L4=2f3wvljO*o@VZg(kxH`=Yf%s6&flLCEXG@1t`Q zC^)V~F!G|SsbMzVMIg&V*FROT6^l9~XRYy#PEe0u{p$4W4K|5R#f%N4|g-yrM^+XdNt zOC4w-^>S!^rqv(Ka~KS#1i=Q4GY7UEvN92!N%Wo09Yi1~xFDsSb?a*ykmLcbeb=S;{irTJA+8u;;*G>PBe`eFt&UsucR7fMBIU z$1Qd2YLNxV6@o*R6P`BF=>f_y#pcS$^vQBVBL1*x{Q2!tPT>Bp%bXDZZhyAdB>_!n zjX>pnUHV#zp8V1hPVlQWr7<=9?eNkHYSBgLI63qVpy-d<;@2+GbaICjFc10{cd zyCxd#QyWv8Kv^qaKKuqI&h2k(Iq+H0UH*zSoNuiX_U=jkZBw7|)500jMI+qPf~hcj z&PC6(8=u_@U(>aV>=URYzMeh8B#WLJ{sLortUBo1(wlG_adhM7!dbK&i=JXv58f}k zQ10%P2nyYpuv&I3DBPUFE!N?gO0Qx;TtD)yMSNmSukB$s`P%s@yx&l2L-dlAgHy!6 z#U@QYM)U=$v~g)(R`@q=|0LmDX`EAVKcb3q?N0%RVrBpWfh%&|8l0m)+=cO6ZZV<( zx{8hQOW~1YIf*fB^U0*?QWSg+LE|2l07*l;W~oTSv5**vI_l1DNuYcqN&-Y3Jr=UG zC}FM589({780rD$+m-RS3MrSfjaH=U8V#(T&}TVvM6MF{YN%u*Q50540MvvkvAs6a zMA+;tYSj)sikqsE?Sc?8HprW&HDYam7F3==w4by(Daat^ccb13FcM8qb%HaN`3Dk)K4I{t>&x0p06h(W{(PfEQmyIUnr5D&Qt7nJp=Pj(>IA+MrDd*Mqo z_o#*oCb#m$`3Pvr14X5ghWrcLt0nvQ_15`XEaMFR(zAyreyA7B96VlhJye1{!tzqs zd;(cjI6+f&lf_|Ym&@(xq5TP9DRDIcvf6=7G|>GnjX|Ywx>@GVy_RBQbTHuLqff>S zu3mI_^N}Rw5gB9`7WF~#f*Li19Z*ZUX7an^QC#tJk`%)IuAeiXZMdhZ*;uhwFUsSl zyiE86QQKfFqhsKAkPg;Fe#+ym5*leHyr8Zm^nY88b(te_OMt?`-On@jvcp(yX9T$| z5`m-(Ia00;C4wjRIgbih2CG{#%WNRbvB7|yjxtI&*WKOr?mQOGJdp9L(0tm<6ts`} zBw9eyRP&^5Q#0OEkcdLM|C91-k=a`KF^4Vr%*y}OwBg$-pfYI2&3dWeQKtijkX<%iW^~)<7MCi zAH+{ZV7wNirq%QGcCmrlOkBpHivFKUY2{=yr6r?&?M|04Od?&|Y`_=ZsBwKi#WaK_ z_^Pb_wxsbXL;>Z+z?AXTGvG{{RKur`(8e0FFBAbfcsio5UR~)0u(SYc)xENl=5KAl zY(0CT<*3%H?=%mB(t}h&9(ebp*Y#Sz?%BfXDu}iEK+UxRC6iLpbQo3(BgA5W9(Qw7 zl}Nr^14`3NY=V-|6J`j0d3MOR+tp>%mHK(8r`jtt77;?o4qnB>FdYuWQaR`J_Lrg7 zSElyUeIq)fWvDC~8C_*HYU|(F+>;^NMUI%lj1A5`=l5Z!ChBvg3Rzn)C zsJBN#1FgP}-LfNI9SD5!^^zN`1_P1^-DIMVq?x!ekvT}3DH#61XN00tDR;UcTOT95 z7R$D=E3oPDe2#h_z>&zrixNS-uqb1=s;gJeVEKI?pl5B!6nLC zP;9To{HD_0OrO(q+i1-uqKNKu@xIZ!(F;9sX~ z?h3Hdyd~q?EaiJ=MO-HZ*Ct2qEGM3CL(^~syk=#Ww(LxVE?~mk7CNF<$ZiL1=gn-n z{2^us{N?9qB8=3ld6b_%i7dH8Qbgin=P+=3BZB2)q_D3nID9>j5-vprLZ4YS8ZVEg z?}fw7Id#6IU|&+1fq0WYY4gnzj+)G1;M8G&?$!1u{mV0duIBkD5^W^B=9{Q7!gg31O zJ89CI+-}NvZY~|{o8616nlQ^6luBIwK;pac zU$TDGdV(!QMU|vQMgLje`6%jS_{8x`^(bM4D9%KXB_g?^C=V)S(tVBKvcil|BAtb+ z;7Mt{K~7_%pkas!wC?K4?kf$7tf@q*3?z8~-#*#=aY#nFo{aIO_hIu&VBG7#VZ+CN zvY2TME*d<|F8#<`h_S^lNu8-Bav5*i& z79i9T-5y2Jei`b(XPf%-5bY)RWr{Q+nxK>3sKLU% zO|zX+di0&qlwX6}-f^Cmeg1bs2UEs^W>S*^doTsoF9=vNj9DcKNRI8=;~!d5GalUo zf`?C(PBgo;L2)La>K5Ph1RscBvMSV5GA`n~VRMfA90er&&-8M%-7?Ni1}w8cy399a z?4QdJ4fhjnJar-oLE~&Ux0@?yygK)gm@Z5Q3r}Q(X>&hz@DqpWPD1bWlP&vW6)rI| z&?KTYGHW2vVVxFn)eAoBYct#pe&@CO_uzawPH`{vXKEj1I6TXba+{XC9FK{;ErXG% zy)l5n-PYlw90vlzC+O~AWMU0)CNTz>TiWrHowsz5kyx7YlWDTcGs!!M0xT@0Je>fl zo(gIvp4KMZreuNwaD47O9{{!hXCo4KTN^tdk2^ovU${IU-~Ti-l9Bu+;%v=NrX{aL zB5LmhAYo%*V_>2eceiw9ArpWj;d3%I<53Zl_y@$tFMcu$XJ-cMnzRQsq}GO7T8 z_AX8)0C87uM2OidU8HUQfXQQ*g@%>OZ@q_n)!zcl_(U~Xya z@R!yH+5aKwY-#piWc`P2e|r9M=id$aQ2!V1e@Oq+_rHWcq~zs!#OzI6{+K5%#!vQV zd>&JK6H8N`zrM1takFrmva`^$8=08Uv$1g+(Hj8(ru6J4MjY%MrW|JMEP#K5lC}dn z8`+rv{y=?zGgyA$Fq^QLm~nG(&@(ZaveL7eu$t0yb1|{gbF(n9u^F?Qu(7fk{Tqa$ zljTQL8rl52RezvNKcLtEtfp)%rrh-0%w_<3HYQF0J(n2^7dIL# zQxhHudna3?kLk3uH8KY2)$xaL9$_VEelivYrvGYDvN3Wt`%vH~le4sQasRIl zHA`E7s4hK8Q8? z6Q>^le`$R9!XxSgFmkqcQnRIa@f5f~h!13>2 ze=h+W%fGrvNd5|29wU>#2LT$n0zS^%f3*JDWny7uXAbyS-~R}xf3{oxA12F`oz<9? z-ISdkz{dT-FgqJFy%9T;8NDe769+SZos}KH{Wrt^LI>KLIlCD-0ffyzJpJ(IBY^($ zhJ^YrDrx@H7B>sPAD)<4*yx#9=~=kcSXg*inRwV(=$SZpn3%{I|KTv>pH=-&kNFt? zH%|Ee68N_?@S*p2+edo&$X1O1N>~5j>@Pn4-~Ias;s5Uj_=EgEgZ#Jn{U5sihpzt? z1OF}I|B0^uq3gfJz<*2lf1>OE8eMSzb>IQmee8nVK8`cjr*KyvM{3?oR3CmXK8tH=tFQq2qM~*ofH@l5E2k+F<~|L<&!lx zcZ|K|fy?tz8(EGv>}e?xu;6v!v^;7(PW>9YwJM~|kZ%=(&ZuQT(kRAsptHdGN9(q0<*M0t{66cMQ$ zc+!sxm>$f>1?}*oEBKob_Q!={G6d!062S1$3-j>|=wGt`E))#W{72|-*?$-M55RvH z`VYYWebj#d{_msy4fwZd|1s*{fPcHOjbR%1;T4xY(b|vIy{=RCi{DVqc7|z%HaM3> z${_0MzqHiKu@H&NLT3txLgPOC%%GkLK83`jTTPSHaHVM(Ud3p1fm`K)UV~B(g=l`b zwtx%PR_i{+GvbKWGJqe7dvlhK&M{DdiLl8dk0w@4TM+q5^}VIlhF__>M)vM%D29v; za@UabjX^C(^(*o{f=r&53boN&3>NX(2X9{`Fds|X#9M1DJ~5s%h|kHFt3ZW!kb+;} zP?6`oq%3}p`K7m`q;t_u`#}I#dG{Wmf0(Xtd?SQP?`Rt%4-{QRq|wb?=L_Vs%*V8S zsqBWszV~Yi$8NwfPL9yc2-KyDin;(irIsMrq5t8Gc`h{HhsqRFzrl#X-M6~_9r9t3v)DvxjJ?Cz1@okb2b{-_~7|PA3 zEd=*@m~vFSCKtrDstbI>)}$vuxJIj<_u{CbBRP*FAV5ac7Nt0 zt?D%-akbtM*=`9VFLm1g{x0caIezUA5BtZL9xF?#G>!~uoGp1wz&-(2Y_&f=rDfMG z6?p%uKxrZKIn8_2(c3b5tmlg|^Hom%h$8wZyEMAxZ}M>rn&lBmT@XatanS=StrG>Z zIUjytXf{7ON&Z?*)~lt)hbz;n>+pzmPyTQsq@>*GT2wgE24@_m+4dFvluaycR3d)1~ zV@sY#@fD6!y5e=-;w-S78Z^_1hDB7j6{IG#*Kfk zga41Q{U0mp|FB9qF3SjjQ?^b2utP(jgytV=O4vo?20NJ)wc|ytf#{;Z;6q#P&-H6I;+nLl=0P zs6$4ur6&Rx(D2iG=4!$LRM-~t?sGESM=nZ(m9Ig=-WCOe>+&nBmLMJ75El8#2-%L8 zrlMK@4jO8Sws}s%FbGZGNo&xq_IKL)qo=Uj`J)MG<9SkB=z0li7S3%%w;Y}q)bk!Qa(P$p}gY8Mk(qKk>~{y15RaMNo3*g z^5pY{n@Si~2tljOr<1cUA{BV;aNpfsh7n<^tteL1Pdd-6ke7HmOmP3CvF-0g>EBSW z`*+q%q+*=Vep`2eeb=1(X}=+yWsuUB41l_WqS+GOdU5@wyUrZ7$RsFo0!I{^{L<~j zVKcnHek;C<-$7)YsUvwMHDU23j2E`HtWlT92|0=7J-O}0+KX~tBAe-wCxdU6H)#ef zFdVLar&dTlI_zcJiNkJatDRkZms3UFEgu{;VmF2%DgGI4x-y0SUfxKV(i zU>OXEEmhicQdLqL4;{6s)Kw3bS4M)a9kDxztC_aIhS;DVG|lCY(s}CrhPK_A``eqz zi;~m!K4X&Q&%H*Bb&8iXl(WBRreCq|n0*ov9RubPk%W@vTcvb>oR>X+b`ntuPFqBX zrMcOKP!-dQ`o$qss8L{#gw0Q4y@Vc1^!8NQ{rxywj!GQz`0WQ92e@BIR)R&;7VR8p zBCm(@JP-$ApPP)r%Ji8+pu;ZiLU0ja8uE>|r{v|(f3AFmzb(>nqTokwaJ(#kH6@z+ zc5w;685zmzDDfQ`kIJqpz$h*FDRh#G>if9kbE>svhCdZ;MLzgZ+-6v6c4S*gv^gzB zfAA!|L{R4ZGVpu=wU7!08)MWO+tpO*2jUzXQkCMj*u>!G+oL(pPYGtHfc&Dfpfri+ zMZ@MW5e+LcbgzCi6Xgp$s)#&Py9A1l941mL#V|Acqh|TrSyfzvpJ1$Sa^H2+oPYnt zd>kJWTL?q$)+!%Ks6o3xryaNw2E%dcD0o{BEK^(gdTTcF{NA-~JN&!Qrv+!l-Bl#g zo8y_JPw*q$@5!{k526wyp{SJOf&S2%dsou!@ND=dD`F1P8xYg4-YINsAyw5J)sw2v z!bLq@tR~CMT+_nRj?C8!`xjexXuc&ZQZPpJJmY45hwD=XI0$>L&M$ zW&+BqW~C7>O>|eJ#!qpipX)1{%nfkSlQC6+HxO*_L7x30+RXM9ivuk!pJ~+CUOw|{ zQOr<&>{jT%jb+D7VRepZ!n3IqNMRQWg4C}bq)To2- z7BLh`-;&B=&1lWJ zr>!KBwKAO0qqBvNGWyNpGki^}VH$!3;lw6{f$rQM-~A9zmf$8gfdjNmsdkonZyH=e z5p@4FKYfz#NMx#>CCVwn)@YPrc}lrnO=39kYKWy1>13E@KWSBEey_#DSZmv$aSD^c z4!h?YHFP4NfbVt*DvNh>U#Un$Lz*4l4ZAu=W@jw`HDiuHZ8x#cW;Ql0xD;)ZcDp$h z-@R-wQp5f@q9Z=a30vfa-+k?Sqm@aH&oN17FCe8+j)^(7!3w`3OIN77qv2;xKZIO- zAh}fZPs2mI{i?+QE5+9ULv|u$SD8vg?KVXXlV4ufCZmjxT*D zy>oJ-v`r?`NI@1X`@6LBB#>qPY}BNG0{Wp?O%k%aep&f~p(@l#+$X6IBDzBg+&Eg>qD|0Ldit8O&^o z7H6l@@971>h>W(L%;Y$lNT-@wYA;5HoEdVue3IerPJ~Am0uB7_5oM z_e$O%Xmh9yH8D@p0@w63Pl|^xek0Xg z=vPoBJTLh;NnAH@YU3Vg;-ygchVj7Km7=2J%NYpnaVB*LhuEdqjML=8g?w9t>3=Gd zuZ-=OiIrs~YizY;igTh#`?HfIkPTo>8R&P}AB*I<7UKQH@H$C-zxfsTuPY$H$43{`z;H5Z5@ak@0}>%(r@&DLbitS#9wfC*#j@nR;_m4s zA{a~%RS9?E5TMhM%WQfsWs-xj!|X!D^$lx?l;ym<1hVWzxp$|-ct(PW@73*0gZBjD zSXAhYHv>29&GzHebJ2-#$K}oYfiZqPx0idD%!KauFXMb`oPi*a+y-x)lzL|$(mB6WHfpah##dLM^z#}o7K@(&E@ZQWN(!;4O1H(S8Vw`gpkG7FPwE`6Hoj&H&Nj5= zDGsh+KmEy|YoM&Qwvwnt4)NL-NVKyuWxbS%glnfk9$4tM(}DuNc2mK3fzL5_xD}7~ z#t2@(5iNu5{{5XCMO_f(H>8hS7;)0s)@6R#wsJLeiY{epfx%kzP+gM~dW-MIY->W<*95uBDww_yIxtnE3TOXm zpqjrZs)CZprX8ud9*%;vGiE@&Cu{`y8({Et>CZiI8>jq`kHwsjIjKHlis!4HgH|L}&NRW$`oIVRa@kdx*Emh0uvJ;&h6N`Q+X3SLeIr2V43{`M7LIq;k zA4J@$OX_8rT@5X-i9P5v)_GxE2DIPU5-V;rcVJ>9vU)jE8Hg7;Dr6|0w#FK}C1359 z+Xf>jl9A6Uc&bnwNrwsO4D(($RP$G$?^sUWmQvfS`uQu)2Rj)_piCJFi-n~=9GDrU z7;4J3Yqen(of&y{Sg3SoINR_1c+M^0a6!VrU_C#um0MENKF4Z|$n!7FVPhu}dfCI6 zVJo;7`-=5rAW~M#KsXxV|s$2(U~`Ywlr-jtXVp znOjfInlcUe{5)@IWEbPQl#?~}&K2?Xp5s%{_*Wksv?B_E?(h!L z9@QN(!Kx^A5A_!%Wk1j6QYXtOVrHa}ipNB6)&19%Sa0O|Vs9s3=%>2yKj%xSoOg9O ztL%2y;)r>L3*e`#RKek#JG7tZnMHQ<3{{00?wohTk0S=4{h1ch5rvlrvE!NA>RmA7i5M8 z=pMerh3?K%*PYAXS0Qj8!+MU?T5l!u-L3NOVyR^{e^zb}@)LYVU`;aJX5Zz-{3vzZ z?3bE;Qj`!VI zb~PF%`t(sbvuBVSrSkNXuR3TzzH5$I;2VlFO#8lP^W$eTl=$oEy=U71r(e&`{VGmJ)~hf`5R>=BWb z?Lm+_$PU!~rFUa{Pp~FUJ9{B+u<_xb8)vSe8zdy5&N?^)hny))TuyLdMma&B~7 z5};3X`2R{?@2Y>9_6#_3N&K}r*23*KN-YsfH1;r3bUjuWbUR)#;q^c)=kA0Aeb2CM zkkHTKIU3U1<_*qcc&Lw5`JB~K+4dbc5M?}DeBJoFe&7LMPWqG!6_Hy5=of4hVVFIkmOOGHFI z9;}Xn$b)t#JE2AiP$!$Rr!+)w~oM5M#eTCNO!!~bb~6?TMWo_^S$Y2j_{2=erO)G z5c9R!YiGlTZ(qg|ew^xy$XC_q0zgG&Al!*=)x{SHhY7%PyB!$Hj6(q(U7vlA_r5=m}239P=_EHAp24+JkoS;iB}% zg+q+;v$c69U0#^Nuh=<4E@%rfuCZ@DnUkE+Jp7To_BsT8U z_5jzD>DP?_UF7b}`sVvH)A80g?}w$GTEyBs&{ya?N@2pzI=8if%>W<{0nj4cw+&pc zS zKdg%}#g&z8;%*eApcKr1Hytfj;6>!2;a~|lH3;ltCht^&{+zZRool_mYO9q+C`D9I zr|e`*i~?2C$Pm5F1#zTu91)FmupCpBYrMnMZ*gOReQyi{Le~vkmC=;seW5Fk2rRYK zVnd7+=OvH;fj~OQ-eI};rK60Yqy~Ta${UY*Y$jfqPF{2)FV&b;CP8U3H`_z%ebIvJ ztv#JJa^4tBZSc7iETVJ^LCSEk0(rZ|mXdcqOUn&7wqNzY!Wd499rJ0ma!#VmjFh4o z(Of<&qH4O4+hP3X^C2phzsAaw(6#m0Vb;)3>IB{VH|_`4s^?F*!W?YkpyFL;_~V;L zZqpp*+`Js7#H@q(_S?&+rPOd~g}K^vTD9bYpyoD`RPQEWN1#Z5vda$0Am|RK1)hRWM7Dl4AVqQVpZTgj-fvVQ77u%&q7xWo6W!}%CEa*1CY)Te|Hi);}$P(f2@Ur?tEM_1lX`-G5}!)T+I zT|nDQ#CT|n%LfNYem~$#LA!zsQBbjKG4usyD{{HQ;dzUYGt912hXuXR3$Y`P*U!*S zHz)^nZY=~fPO7wuhX_TzM1-K^6+n6Ruqmf`*9qj8er+I18+HM19UW;-^8BcexYkHC zS$Rc03q9xL+dW;Ac1#5YYF>=2t9)_!`p`2{!S?IBJVV3ugLSIVKt1_TOCm$RCP=t!`F5cLVNUsyhL<7Jv%lJmX(lPYwFV5Vqa`R zXQ47d#;TY8k3vvz1}&dL;vS&<@kysJ>J?g3k0oiVCydqm!67uu18Pd1LhbGayUAl1 zTKD!5Njnjk%-FhR8$9T; zS%!wblz6&wTknM5szEuy3$2Tcqufd9vjA8)qD86 z*O7b@0E^?;XDN?%+5(lH^#Vg_cHavcF4DViV1RQrdmX*fe1AvL!S;C}o&LONv4;nzyR~~JDu$OIRew=^8_wS(EW8J&)su4(ffN=RMnX2Mt`4oTRl3XkL#yXFsltr z)P-#LsZSc9JSf;O1jIqLNeM8#h9jBHPnR|)wRwx?S7%~Y>5vxN)}EjmlShfx=? zrHF@{)aRzlOvtEa<|xH1eq?Lbwd72W3RjSVRc*;yCJu4onKXOCl{_##W%3lh9iQ)} z@19lAE(D`dscW#;b;NZ5?;~bsT1PVq1^Apt;2CBEI>t)a?Mj2{?p?0z`An+71;S_> z{GvK)1Z44$zNF#%vHOo#CKi$33Wv0KCHZGYTSa<9w|2$`>S&Jg`fd9?Uytp~HLL{h z2YNd+>rgqj{*JAz z`Iv$g%l+#<+Km;qN1VHSJh%MOHz_&fi8f-qXC60*&5X;PPqmn$mVlq_x91+GcG%FjAbtPF^@df*H=6*;kA~#NxD<%iczMPtMcA06 z=XGbuMRq7?%o6lO@$+g0#(VlDMsB)_Ft+W9r-*S)#8(?L&7Qzj9kd(QWllaNv;Uj# zQ;r$_J_xD;J`~#%Qn1BcNNTBJ1IGrx0kgcS=Z3=9@PShaPD~pPd_Rrz=-lI!m+%Vd zncf{o6Iv{rf#oiF@P-v|tC@3P;$F?+0OVpk6jP4Lu1VCr*FWC{h>KOnzT6mK*c_rK zd_1fxl1AqK)pu?BhOhIa&R3WBHQfusThlOqaMNFD0@sa77iD56zJ2KKiNm^&n9K*V$_Zv8cxwl=7 zA1WrfSa~n$=RQ;vlYPX-$T5b?ZH(2n%eHdu zn_e$3K1_OvYGul+7xQ3tZ8@BG8>~j+%Q&2^i3)(E@*2 zkKLz`>78x=U}{Y~S*}h67gsOFGT5Hs`G#`$tkYds6!ps8_aI(Nwn%F3rC1nmg*;Bo73f#Te$-@Pt7vLRy}KXoH1K(tg{-2;-Np zSk(O8v7ej8cH&v>@+j2~-ZY*HBf_&9AHt6nc^EPv~^dYAMmsm zT3b`yr+egxVQA-cz;0`eaehjr|I@Lxfa&kq7Hu^R2HxM&SXi5eGF4nQPLu%_l>@GZ z##S&p&HZ&>Z*7+X>^!-CI>OE{2*gI(dnLK8zxrq7U73W{no;sKeIkdxCFxx_2xi=K z!8|wH_xfDIq|mxeH>}hDj6Bib;S-j`n)b_Ckk#x(>K8+@R^|~sc4yBFdP-?mnOh0prI6yINz*WsKWdY|aBIWuxHU&=4}~-lGLbla zdh?cInHuFWVs@7C=3Xwkb~3n+3`~h`xzu{pdxy{0xAQ=cwCJ!ftSO2NT!{tE&WZ}B z$OqU;;qO_W_l~6ztBu^aEY^TH?^!jW!vI=76iH{G$iz!?vMX7Sc7mtVI7xVmgP z^jKlw2Izt)XSJ%mm%&n4qSS^ek?EawG8$)>&&kltAy!jEQpAQ_? zQrayvKD*NU2PB*Uj_OZ573G16m_J`;uyNMQ*h{U%f&EObPbTH#qx@F_irm?4OsVj8 zo*B_ASj@I!igd2f9Fo+pRI4M^J|VXZAJ4(yv|fhL5oC}D2F^M^wPVLl==OH~#^Yvr z9qN8PS!FK;*Q`V8rc4*j_#Ki4OZaL_*OWu9hbE#k+uZQM)~hFQWcIR`OL14LezPQM|9{o0^Fbzb|#ft3iIVr|skT zdyU2M#u9re4bXKNr^tHuluQ7w@wzb+L+TFxsLTy(d5q-n=}k0Y=oi@a<*->1-tTAE zjjN3=W9Ud^Z;`bs^F0?9@YvUQif+#SaZL=Edy<={fBOnr9}==`}hw&Z#fKX8l(pv0y8*?H#zThtrhaW_AqGv%j)NO-4<&4+QmRemV$0tSU8CTOUEhwG^V zy`u!Y_3gX8Bp(ypxtLQocFXViWc?K8N4jTzkGzHLb-_hccO_o#Qapsbt`vvMvW-`F zsR)_(j9<8s`Dtv?&!QL~C-}*Wea>`vV%sytqyUoo?hiEMgl{~yv2SLr;-h*s@d4zX zXvDs|43gZDWXDverMDc7otYCk$~ zV7g`{^11j-^mZ;{mo^C>23D)M6MeQO)oe`1*zri!#(GATTNz#3GTIG}+}_(*DP0U# zD=)L{IMx@8Z}!W4Kz})ua(lfgYvGMI9rfO)6S^U`$8y1cp6@{fPjSN;l0^NUmZx_AZ{LZ_8-Q;iSKLe^XoQ&9y#BJBju@7s~F=)C6@`7_g2 zt-@^3w%bH-9o%xD0<6yuRvmkQsFvA7#}%G^#CYWC3?Hh58)>Q%Onb zxoQ!8uyfX3!><9hVPGs^m9O5`)$y@Y0OH{bGN*3f_A+oqm5~{s=0}in^8CckVj>B= z^KdcJAHZEsW0jCM+^e?zzMDwk+h!YE=`16|bEU>JC*foRRY3qCa85Qcj86o9D{n=i zLOcttdL7)voD<9nH@}704Sq5ZS2k2R7cYm{4h+CCoxh;%p@vX()QFJTe8w+?J>%*~ywbH0}IaXA^xqI7%XW4Yo9fmXkBl(6caZXCpu zG}luJ7BA69sn~?=?1s9^2Sno43(x(MW6oAhFGhB5GR8NlLA$4PA-l-z$^^kq-7l=} zA=KgQJMImaSXl@-Uw$J6eg&}~1rQI3vOfF$e6P`?cms^kJw61pnDaI(-uyi86KuCbD(6!m;0Ox!2BO7@jB zlKM<$5}PK{MW*k)Hg+Rkq}=hwNzF*xUBLBKMv4?K$5zJ^nLm0kK6mvgTYQzj5K%e6 z_OfD_Vp1^Wrhe--siL+KqiVaeR2$|hoQmZ~Fro)9t|b-mnF6Ptx~biI)CyxpeaR)o zJuy@jo#Ac0Rs8Y;!JM-4@cs#AaBb|shTzv7!Sf2V{U|EA5ffEkEb|m*Eo8z$O)J|#^R~E~89yIi{dBw$Fx8qfGiHghV3W^(3 zwyT|Pc6c1L4=0O0fs51wugmON?M2rp^(7FG_us-+HuOguC8=iCs@|lYIPHA`ACHk| z*DuG)je1^?-46@TrSM$Y*ScdMmiz5}%^cq^Gt%)^i^=q_U$}#jI}#yRWRcE~vR=HM z%0@^T{#PSs71d_ct!uO`6lrlOfkJTzP~53doZwDz3KX{>0g4wWQXp6;?(QyaaS0A7 z1S#(B7IwP#IsX~^?p(}^Z>)FBv2MO4^L^GNBja>vJu7HkBFgZ&_3&RzGZfBQuzYAa zY_ispcD%KD38Z_gX~38D=`jG}_sE2MQ5_Mi_A8QS(R3mU0BOy^zzyB%&}=H(^jY*f z5%r(d6kbYWr0_eDI+Q*IFg+q<2JUocd;z4+M5@}poPW3pxOUt}wdhLP8;c~!Ny9ih zCpsrF->HvjU9&!*zzKJ7^>@P{xxtNf0J_WDC zzurH1Vdy2C;lJta*s+cWq(6T-&S$1KPj0!XJ8m^4eTB$-eg*KUf#P+WjQDja10MRG zpsetE3$$uJoqGNbU-;d52=K`xsT{C4xM4Q(y1@DU?w;mCdi=UYxXEFajD?W?Jxu8M zD($1|g=03$iGa1rcC@v+I+NJR*-)(WD&45__SZ|iSc0CIsJ3+Tc#w1^Yy|Kn7PqRK z_q;=VR&-yg03;I5y2?0yhF?SML&dx9z!H5JhWjM)aBv^o*&{hBHQL1g=@~ioH+}8* zs>N?RPfa#QcEeXB>PiYC#@Fb~l?fI^Ue68kgdz{q21j6-rW0t7fw|lCI8k#yVHm2} zdvspIv!2Wm@~m^(*DQ_uGQ+4q99F;U#+znyz%CRpF_*VeCwyl?Zqnw*Gb!cFzX>n2 zrTi@VLW5bfb+%a=)-LY3+8`I7NTmdU3FO?z)WJ$F9IQ1v6k21-*%#}f+=dMa+J9em zsL;l1&c#uYdNm>QoJSQ4qIcvD!}(K%UKdB`6f4*+0vZkn%==;-5`Fw^exxfJ88H^) zeU~H5;%A4?c8y@q?#)-j6eq(Ir?f~kkrNzMsIT>d!TR>2b6p3+3t9%h<&{7z^$r|w z&POy;$*iqv_&LLkeQT?5x)ai=RCcGxu;@H??V4sA-8gXtg)}B6kEQK|4su=y9S$&8 zX){JV4}bJK^~La@af`J(xr@W;)i4No)=E9G@bo>ts zlSndcNo#PT8P%5{pW)}(ECpuffWBLTt};3*ubP9uYP!?Ha{#n47^Cp0hYlRq`lorB zvf*$JK0j*`mwp1m3QAK=U&5dEIlPDdea-$Crfb6BcLEU;4{+n?eBLHkv~x@VQ&XE- z6$N?Rol2ru3MTe4^|}5b?GKYOm1fhRhxO*v(&JdF-yu;vtQVtun2WV>vNs|XopnDT z3M)KlgV0MtEQ~$*X{08sgiWuUqAV%NO&{joOfUQ+=>C?i$eomGHgbz$N&33q;Eh=^ zEbA|WfQsYlOO(;NHc-cD9^Nv1Uxv0`f7RGYxDsQyMAnpWEMpRhv4&698%r3^F|VB2 zqQG$p|EOwyl>~3jhU0@h^1VUMglClS7O5iRjCEW{bPr#&4@T>4p(9j z9fdh_Ou^4&Yd5M4z5ho3BG~&rgTBGuxQ5zf6RnXSA0eeR^qI_nX`M95;jD{>Kf@dz z|Fc%%Lw(X^>oV&3X!6;dEU{Iu%9ZnDySG%h43_a%iY-$GW)tp#ZbncM3HPwCv}1nG zAoD+J95CasAXhJ!k;Gzd*PF5(;1`pa2f(BdAbF)?}=9$}JlzWRtdeKNWf6)~4ROr9w3F$XR z9}{E^U;Ur26A2%O{0!q)*}#9V7FH4~rznTE!2j(o!*exExS(iGo4Q&cnf#bWO(#Ei z{$3FSD%k6yyMsM98-YJznTz+&)dN00$`ooo+KJ!7a$mh#+#FY-aB>+JhN~)n4e?RR zX2UPh@TFCo#OV?sMqq_IGR_>$G<9D1bZrND4_~4^h!f6JM~U_X{!xqa$~c(^B%jLB z4$BD!yGu@q1Yq3pxL2l&fsd zD+iVQ&@m&~fxjLmgrfH)x6vvs#`GDcWhz?553TPXU8t^~&o&brEX5p6EDT>+VqZUE zW4Y?AhTRe=Tpb2RI?KGQ33S> zYL|^Sht5~wZhhUq++#e{^!0wO2qIHYhcF{Opn2V1A2N~@4UDLgjl@FQ(nnL8kIdFx&#GI<`{zH%v{Fp(W0GuOr`koD>SD)v^ImA(T4W z@JsHv- zs^qe%!`^E&Qr9T)K@MWU?e;`^2^ljp+uA>A;T#^#s_oR;z$AtVWLQq>Bk^SJO&AxY zPQB1yGF$<2Py4ySKG;*$9aFw!n!%%kmwHD>tHMgx9Hlh*z~StQ#?qQZ9!jTzDZ-cI z<+k*9eTr6*OMfu+U6HFydYiXL+(F{-qCN~>){NT>C7tRy`>B&6Qfxu|l`1rCIma6d!1TH)_TSK;im;ST>y^E)MmO>+XgwwZ7aTDxx9^#{P zG0W9GR+kImp?9_5DFs+903cry`=|wG=S%gj1-?0N(I;~+QHm-qF3#$8{%cYDmy{}U zAqP-Vz!~{;oZJ6uR)u3o$ys|_58`)Bh~JZ)rUfNe*ESBT5UWDo9}z!U8@mFixIKd| zl1{F?*Oa-`(NIqV)l+}zF;;eY1B}cuCH~rt@U(l}ny%?2rDZ~^ip%?%jcYQtM3*+i zEZRk5vvjuXiXGoZb>xRL3%cBi{j=1x7FE3z?b!I-rdYBqQ|Lxn^>*J8$387GBK-pz zWA6+OQt$YFxab?`B<1yRbY1iF!h*_g+n8V*K`|Xt)27|#di=yks^drP&3k(4L`~!V z-@1=$nRcvMOkBwQJt|AB*~NAJ2EeEE%Y{&+ok<6Z18Cp^PaB)ICVN%WwRQ>}qbq2)JUp5_ z%SfYHuV3Yv1yTNVu6A8lbuEc8#-*Kx+H+o@s&k_dWvyiJp$+X+d!9=Ge-Sx|-0R3i$r-l--Q~l>|Sfj`Kn(Ylxm9H?)0Ydu)Ql2U{SVrL(2r^YCM!&3DUaKu2h~ZR z;8hD7cLU~91qoYo1oYtsbV6KHhfO+zpV?+q-jegsCYP<$M_YByS&K+~K#d*t3h-fY zQM~A^LFz-wqKQ@vR0OXDSwzS#$_=~jqm-&R`$R!5c9-u5SguTpUKQq18C(`>y4vp> zr@v4?Yg)5C@Hr7R_w!$J)~w7WwcxpD4fX-|^p%(qI>LWO9hf^K8Kmw{DCZZMxC5Nd zWQ|0Y@y&zpT|yf35&gSg!4%`xV^-;sRm2@a;?L>&_*{oEA{zom10xGIi)XREesg*k zr_$x#J;u>NI3B@%HJhgEyQB$LZErJ(ffSm@rXW1xuyG%;>Ab#SSw(h_2^*hVd9{x9 zDwNB(xRAHl26akDsD_5A*jFMx#KxFKOWCn=o36j%Ve2?MBnw1-Hche44UqCzonw_7 zZ_s8S%J zg6e)G+wsqdr61mA+rE(ci(~1|I94&;uKCN1uxnI0{pzcYz`p$L0xOUXZWvg)K~>r{ zuDh59uW7C<9upl8>x^|*&WLQwP;9Ut=!tr}OSF(W#!XdT(KjHVq6{C*!la{4qnWov zxXo6)z3^743UmHdH4{=)zp!0^SCBLAEd%al7N-#;wYS4HfpjLgzRNz(@}HOFjh88P zy{Zkvi}}J(0fPW4(N##_zQVs2Q!@|NZ-C-T1V4XmGl|97pdn*Y=nVCb)IU6VZbXN3Igj(ieaDj;g$xFUWz(Io{fN-0-i*FSmL2=^b=7k@8LGBDwkzSDpQCn)%al z#q(qtzhW~x2l)}wdbBm$OjKekST`AbNzR)Q#3Sm0gtF5#q2)~7kJig_QoqCu@(%F3K8*{L&dkb{8v8XJ|jC6Z(L=bB(Owh`Cdwv{n7sF z2#)_wAy=3vA4!x%0zimN?dP{%JE~9*vtRk{jFi=ExW};j zAaS0y8mTz5V+HA83BogGqVgV)7bECral3s}!`Y4#f;%oHnsIg|Q@6v|acxbC%VzV% zj;zK~mZ&|vmt?krb#(E?KxDZ$S<}l3ZGi>x?%a*TP1E;Sn1r5x_KaayHnxnKw|#tG z-TJRQhRtp(Bx)2TuW)h4Iy^Y%UWJFdLpIaRy5J1td@>()lMOV}?7i0r48`=ISb)~^-qJO1JyiD$(dkM>BSlPjJ$&g z#gpaJqk?Qrb-kay^rP$T<$`iRK26gRaMU*Jb>hc}z*l+s&z1@<+zJkuoe(#hv}A9GCBY5X|qIQTgZdc;fVQa%Z^CQ z!@=uS$p#BVHK}i#K+LMhsz?aVtN4i)Ep6r}p)BMYFW*Qos0W5{D3Tw`umwei>)5|} z`&FYvk*uCj|2?|+sKLPA!|c$X^JLW}ea3eOw=d({rvpg|uVP7;NtT!I-8OH%f3yyJ z9vh3T6C1~)G)@rFDbY4624;{DPC1>bl>zOHyly%`5n*Q z*8ojZ#n}bdeY>yWb*=^F5PHVIq;d;N!2ZC&m z-c}MlFc-Wjl$ZPHt-@^mw%Tis_M-6Yjz9doxAge}vPA>BE<5PP%}nAFeL=jt72!yC z7&W@Y@)U~>!L(+x6}_~xZ4m?TzVkIORA;b&M5A_{b|fUT>X97euK8o=X2|t^dXI@E zOMC01?Mi^!c6((+`^el=)#jZ^AsB5(QF1_s+|9&CzdS4G@L7@A$Ge7@UM|TqHJH&Q zOEiQ}w#2>&N+gl1JL<3OP(NhVdOZk77bpr}7~ZJ)=|yvwambu#r;uX7pc#`lKR9bRY83LQXcUFl2;Rl(a+sVPQC zgEpt_NZw4RQ003$p1b9cty}|i&j6f}e|-Tiko=AF)E0>+8@+|GyUCrmw?Uzkz7*fY z#C@k`XKS}keNe+UA)MobW0O| zFQs!?JKF+0BhGJDR+q-w!)ucnP8H zU1-AbHy=RDVg8!&j;_f=mPDZ%xppHb&(e1bWK__MQm>#G)ntB1X{0vcARKS#N`ZRT z)krt#)soVnaQv#sNdle@5MlNAT_q7cb^CvABe$1W-?(I?4JP6WIS#%8ZHH}z~L?ThZlD4j$> z<_nQu)V$m_QNm04OvG|l(csSr;ebjvg|7aDFUOGF(S`PpOMj+SLt`GyyhJMYR=(~i zGS+S;Fwf~EakCm_oyeCu8a92SQ$_07paAb#(+lJ0iWHOQ3z+)|d8%pUD*UXH+tx$s ziV7EN)!vuXy!&VJs|+R!&%?XRh`Ocs^NTD>0(BKAZ!@F9e<_6?Fp zFM6TO4rRopF4|usxjxsVZ^fy zeICKrMad`u27Ll5>_GpawJ>g3rkCD0V){T^n|aNLKexnKHQdGJ{u^oNYo@#b?;=j1 zq#RCNHAT7%vA%&W=|(2L!bJ08-lN`vN}pM?3RpY)Q_fR0HUWOy=Y*z~)J(-i46JdP z(arPEx3DkU4YxEtJIJf(8>A*Dkqs6oQR}0Bl4)(|^DP+$)LGJ$4y}%oir#FR?YQ7H z{&@X2u0$B=#6}Vg7G1x)8`Rs)!*eN3N4rBA*(f+FK|_A~fmsbeWida|&G5flpqHm`d%lx10|B?RR?EjJe|4-zL;Xx;!6mQehZwMf|2?~aS Mtm^xUx28e=1