From db8d3ae218a13f0f5e5269e3db3efbe8c368bacf Mon Sep 17 00:00:00 2001 From: lbluque Date: Sat, 14 Sep 2024 00:20:11 +0000 Subject: [PATCH] deploy: 7d40b209d71642fbc8178a9511c8631189e9680a --- .buildinfo | 4 - .../train.txt | 136 +- .../mass-inference.txt | 55 +- ...c3e18008e0168b9332f3d8a22a621334bd7fd8.png | Bin 0 -> 14373 bytes ...999f6dc139c14786d2525bfc48f4b4a2526a38.png | Bin 0 -> 27650 bytes ...624208778cc58eda1530455e534d05dd42e8d0.png | Bin 24465 -> 0 bytes ...cbc7e0237390cc630e7e7c366a651ca0c21e99.png | Bin 101893 -> 0 bytes ...9992458eaf1c9f22782dffebdcb5cf3a1d0952.png | Bin 14729 -> 0 bytes ...d633ab137307b6929d6071878c4e7fe434bad1.png | Bin 0 -> 95752 bytes ...20fe2186071fbc2d4fe06340e7e37a066b0ff2.png | Bin 0 -> 25647 bytes ...5c9156836323cfa191c413f4d52e2201abe66b.png | Bin 21780 -> 0 bytes ...957d2e0feeb727d01aa42a45f1fcdc7cd59a0f.png | Bin 0 -> 30073 bytes ...86e185f37a8aa239bfe087e77195da53c2abef.png | Bin 0 -> 22819 bytes ...0cf547094df97d4a29694d3701584bc56f2b97.png | Bin 0 -> 9402 bytes ...2b6bd05782c4b690b4909db99896a10dc15316.png | Bin 30081 -> 0 bytes ...0f44d1a6100638efe3e9d68f9f85378e11d301.png | Bin 94659 -> 0 bytes ...20a6b54628fb1f884f2dff043373a345f45b82.png | Bin 34943 -> 0 bytes ...81c7e83b1bcfa8c0532e3007be98584886bb92.png | Bin 0 -> 34945 bytes ...240b9ebd4602954c1b9b069e15ac4d92ded1d6.png | Bin 23953 -> 0 bytes ...fb2fa1c3491a8388f9ad2848c53b3553b9be80.png | Bin 0 -> 102325 bytes ...e62cd0839f23b12ddee9a707ae7cc8f3d9546e.png | Bin 8705 -> 0 bytes _sources/autoapi/core/_cli/index.rst | 9 +- .../autoapi/core/common/distutils/index.rst | 5 + _sources/autoapi/core/common/logger/index.rst | 3 + .../common/relaxation/ase_utils/index.rst | 2 + .../autoapi/core/common/test_utils/index.rst | 3 + .../autoapi/core/common/transforms/index.rst | 3 - _sources/autoapi/core/common/utils/index.rst | 22 +- .../autoapi/core/datasets/_utils/index.rst | 8 +- _sources/autoapi/core/datasets/index.rst | 2 +- .../core/datasets/lmdb_dataset/index.rst | 2 +- _sources/autoapi/core/models/base/index.rst | 48 +- .../core/models/dimenet_plus_plus/index.rst | 9 + .../equiformer_v2/equiformer_v2/index.rst | 156 +- .../equiformer_v2_deprecated/index.rst | 332 ++++ .../eqv2_to_eqv2_hydra/index.rst | 19 + .../core/models/equiformer_v2/index.rst | 5 + .../models/equiformer_v2/layer_norm/index.rst | 15 - .../equiformer_v2/prediction_heads/index.rst | 77 + .../prediction_heads/rank2/index.rst | 174 ++ .../equiformer_v2/radial_function/index.rst | 22 + .../core/models/equiformer_v2/so3/index.rst | 9 - .../trainers/energy_trainer/index.rst | 7 +- .../trainers/forces_trainer/index.rst | 7 +- .../autoapi/core/models/escn/escn/index.rst | 9 +- .../models/escn/escn_exportable/index.rst | 526 +++++ _sources/autoapi/core/models/escn/index.rst | 4 +- .../autoapi/core/models/escn/so3/index.rst | 2 +- .../core/models/escn/so3_exportable/index.rst | 171 ++ .../core/models/finetune_hydra/index.rst | 203 -- _sources/autoapi/core/models/index.rst | 1 - _sources/autoapi/core/models/painn/index.rst | 3 - .../autoapi/core/models/painn/painn/index.rst | 3 - .../core/modules/scaling/fit/index.rst | 14 +- .../preprocessing/atoms_to_graphs/index.rst | 3 + _sources/autoapi/core/preprocessing/index.rst | 3 + .../core/scripts/eqv2_to_hydra_eqv2/index.rst | 19 + _sources/autoapi/core/scripts/index.rst | 1 + .../core/trainers/base_trainer/index.rst | 21 +- _sources/autoapi/core/trainers/index.rst | 30 +- .../core/trainers/ocp_trainer/index.rst | 9 +- .../autoapi/data/oc/core/adsorbate/index.rst | 6 - _sources/autoapi/data/oc/core/bulk/index.rst | 9 - _sources/autoapi/data/oc/core/index.rst | 32 +- _sources/autoapi/data/oc/core/ion/index.rst | 3 - _sources/autoapi/data/oc/core/slab/index.rst | 11 +- .../autoapi/data/oc/core/solvent/index.rst | 3 - .../autoapi/data/oc/utils/geometry/index.rst | 3 - _sources/autoapi/data/oc/utils/vasp/index.rst | 4 +- .../data/oc/utils/vasp_flags/index.rst | 3 - _sources/autoapi/ocpapi/client/index.rst | 3 - .../autoapi/ocpapi/client/models/index.rst | 3 - _sources/autoapi/ocpapi/index.rst | 3 - .../core/fine-tuning/fine-tuning-oxides.md | 8 +- _sources/core/inference.md | 4 +- .../advanced/fine-tuning-in-python.md | 2 +- .../challenge_eval/index.html | 2 +- .../adsorbml/scripts/dense_eval/index.html | 2 +- .../adsorbml/scripts/process_mlrs/index.html | 2 +- autoapi/adsorbml/scripts/utils/index.html | 2 +- .../scripts/write_top_k_vasp/index.html | 2 +- autoapi/cattsunami/core/autoframe/index.html | 2 +- autoapi/cattsunami/core/index.html | 2 +- autoapi/cattsunami/core/ocpneb/index.html | 2 +- autoapi/cattsunami/core/reaction/index.html | 2 +- autoapi/cattsunami/databases/index.html | 2 +- autoapi/cattsunami/index.html | 2 +- .../run_validation/run_validation/index.html | 2 +- autoapi/core/_cli/index.html | 19 +- autoapi/core/common/data_parallel/index.html | 2 +- autoapi/core/common/distutils/index.html | 12 +- autoapi/core/common/flags/index.html | 2 +- autoapi/core/common/gp_utils/index.html | 2 +- autoapi/core/common/hpo_utils/index.html | 2 +- autoapi/core/common/index.html | 2 +- autoapi/core/common/logger/index.html | 9 +- autoapi/core/common/profiler_utils/index.html | 2 +- autoapi/core/common/registry/index.html | 2 +- .../common/relaxation/ase_utils/index.html | 5 +- autoapi/core/common/relaxation/index.html | 2 +- .../relaxation/ml_relaxation/index.html | 2 +- .../common/relaxation/optimizers/index.html | 2 +- .../optimizers/lbfgs_torch/index.html | 2 +- autoapi/core/common/slurm/index.html | 2 +- autoapi/core/common/test_utils/index.html | 12 +- autoapi/core/common/transforms/index.html | 5 +- autoapi/core/common/tutorial_utils/index.html | 2 +- autoapi/core/common/typing/index.html | 2 +- autoapi/core/common/utils/index.html | 92 +- autoapi/core/datasets/_utils/index.html | 10 +- autoapi/core/datasets/ase_datasets/index.html | 2 +- autoapi/core/datasets/base_dataset/index.html | 2 +- .../embeddings/atomic_radii/index.html | 2 +- .../continuous_embeddings/index.html | 2 +- autoapi/core/datasets/embeddings/index.html | 2 +- .../embeddings/khot_embeddings/index.html | 2 +- .../qmof_khot_embeddings/index.html | 2 +- autoapi/core/datasets/index.html | 6 +- .../core/datasets/lmdb_database/index.html | 2 +- autoapi/core/datasets/lmdb_dataset/index.html | 6 +- .../datasets/oc22_lmdb_dataset/index.html | 2 +- .../target_metadata_guesser/index.html | 2 +- autoapi/core/index.html | 2 +- autoapi/core/models/base/index.html | 104 +- .../core/models/dimenet_plus_plus/index.html | 22 +- .../equiformer_v2/activation/index.html | 2 +- .../core/models/equiformer_v2/drop/index.html | 2 +- .../equiformer_v2/edge_rot_mat/index.html | 2 +- .../equiformer_v2/equiformer_v2/index.html | 666 +++---- .../equiformer_v2_deprecated/index.html | 1322 +++++++++++++ .../eqv2_to_eqv2_hydra/index.html | 790 ++++++++ .../equiformer_v2/gaussian_rbf/index.html | 8 +- autoapi/core/models/equiformer_v2/index.html | 14 +- .../equiformer_v2/input_block/index.html | 2 +- .../equiformer_v2/layer_norm/index.html | 17 +- .../equiformer_v2/module_list/index.html | 2 +- .../equiformer_v2/prediction_heads/index.html | 896 +++++++++ .../prediction_heads/rank2/index.html | 1061 ++++++++++ .../equiformer_v2/radial_function/index.html | 28 +- .../models/equiformer_v2/so2_ops/index.html | 2 +- .../core/models/equiformer_v2/so3/index.html | 11 +- .../trainers/energy_trainer/index.html | 7 +- .../trainers/forces_trainer/index.html | 7 +- .../models/equiformer_v2/trainers/index.html | 8 +- .../trainers/lr_scheduler/index.html | 2 +- .../transformer_block/index.html | 2 +- .../models/equiformer_v2/wigner/index.html | 2 +- autoapi/core/models/escn/escn/index.html | 21 +- .../models/escn/escn_exportable/index.html | 1723 +++++++++++++++++ autoapi/core/models/escn/index.html | 6 +- autoapi/core/models/escn/so3/index.html | 16 +- .../models/escn/so3_exportable/index.html | 1099 +++++++++++ autoapi/core/models/finetune_hydra/index.html | 1079 ----------- autoapi/core/models/gemnet/gemnet/index.html | 2 +- autoapi/core/models/gemnet/index.html | 8 +- .../models/gemnet/initializers/index.html | 2 +- .../layers/atom_update_block/index.html | 2 +- .../gemnet/layers/base_layers/index.html | 2 +- .../gemnet/layers/basis_utils/index.html | 2 +- .../models/gemnet/layers/efficient/index.html | 2 +- .../gemnet/layers/embedding_block/index.html | 2 +- autoapi/core/models/gemnet/layers/index.html | 2 +- .../layers/interaction_block/index.html | 2 +- .../gemnet/layers/radial_basis/index.html | 2 +- .../gemnet/layers/spherical_basis/index.html | 2 +- autoapi/core/models/gemnet/utils/index.html | 2 +- .../core/models/gemnet_gp/gemnet/index.html | 2 +- autoapi/core/models/gemnet_gp/index.html | 2 +- .../models/gemnet_gp/initializers/index.html | 2 +- .../layers/atom_update_block/index.html | 2 +- .../gemnet_gp/layers/base_layers/index.html | 2 +- .../gemnet_gp/layers/basis_utils/index.html | 2 +- .../gemnet_gp/layers/efficient/index.html | 2 +- .../layers/embedding_block/index.html | 2 +- .../core/models/gemnet_gp/layers/index.html | 2 +- .../layers/interaction_block/index.html | 2 +- .../gemnet_gp/layers/radial_basis/index.html | 2 +- .../layers/spherical_basis/index.html | 2 +- .../core/models/gemnet_gp/utils/index.html | 2 +- .../models/gemnet_oc/gemnet_oc/index.html | 2 +- autoapi/core/models/gemnet_oc/index.html | 2 +- .../models/gemnet_oc/initializers/index.html | 2 +- .../gemnet_oc/interaction_indices/index.html | 2 +- .../layers/atom_update_block/index.html | 2 +- .../gemnet_oc/layers/base_layers/index.html | 2 +- .../gemnet_oc/layers/basis_utils/index.html | 2 +- .../gemnet_oc/layers/efficient/index.html | 2 +- .../layers/embedding_block/index.html | 2 +- .../gemnet_oc/layers/force_scaler/index.html | 2 +- .../core/models/gemnet_oc/layers/index.html | 2 +- .../layers/interaction_block/index.html | 2 +- .../gemnet_oc/layers/radial_basis/index.html | 2 +- .../layers/spherical_basis/index.html | 2 +- .../core/models/gemnet_oc/utils/index.html | 2 +- autoapi/core/models/index.html | 3 +- autoapi/core/models/model_registry/index.html | 8 +- autoapi/core/models/painn/index.html | 5 +- autoapi/core/models/painn/painn/index.html | 5 +- autoapi/core/models/painn/utils/index.html | 2 +- autoapi/core/models/schnet/index.html | 2 +- autoapi/core/models/scn/index.html | 2 +- autoapi/core/models/scn/sampling/index.html | 2 +- autoapi/core/models/scn/scn/index.html | 2 +- autoapi/core/models/scn/smearing/index.html | 2 +- .../models/scn/spherical_harmonics/index.html | 2 +- .../core/models/utils/activations/index.html | 2 +- autoapi/core/models/utils/basis/index.html | 2 +- autoapi/core/models/utils/index.html | 2 +- autoapi/core/modules/evaluator/index.html | 2 +- .../exponential_moving_average/index.html | 2 +- autoapi/core/modules/index.html | 2 +- autoapi/core/modules/loss/index.html | 2 +- .../normalization/_load_utils/index.html | 2 +- .../element_references/index.html | 2 +- autoapi/core/modules/normalization/index.html | 2 +- .../normalization/normalizer/index.html | 2 +- .../core/modules/scaling/compat/index.html | 2 +- autoapi/core/modules/scaling/fit/index.html | 32 +- autoapi/core/modules/scaling/index.html | 2 +- .../modules/scaling/scale_factor/index.html | 2 +- autoapi/core/modules/scaling/util/index.html | 2 +- autoapi/core/modules/scheduler/index.html | 2 +- autoapi/core/modules/transforms/index.html | 2 +- .../preprocessing/atoms_to_graphs/index.html | 9 +- autoapi/core/preprocessing/index.html | 9 +- autoapi/core/scripts/download_data/index.html | 2 +- .../scripts/download_large_files/index.html | 8 +- .../scripts/eqv2_to_hydra_eqv2/index.html | 790 ++++++++ .../core/scripts/fit_normalizers/index.html | 8 +- .../core/scripts/fit_references/index.html | 2 +- .../scripts/gif_maker_parallelized/index.html | 2 +- autoapi/core/scripts/hpo/index.html | 2 +- autoapi/core/scripts/hpo/run_tune/index.html | 2 +- .../core/scripts/hpo/run_tune_pbt/index.html | 2 +- autoapi/core/scripts/index.html | 3 +- .../make_challenge_submission_file/index.html | 2 +- .../core/scripts/make_lmdb_sizes/index.html | 2 +- .../scripts/make_submission_file/index.html | 2 +- autoapi/core/scripts/preprocess_ef/index.html | 2 +- .../scripts/preprocess_relaxed/index.html | 2 +- autoapi/core/scripts/uncompress/index.html | 2 +- autoapi/core/tasks/index.html | 2 +- autoapi/core/tasks/task/index.html | 2 +- autoapi/core/trainers/base_trainer/index.html | 31 +- autoapi/core/trainers/index.html | 38 +- autoapi/core/trainers/ocp_trainer/index.html | 9 +- autoapi/data/index.html | 2 +- autoapi/data/oc/core/adsorbate/index.html | 8 +- .../oc/core/adsorbate_slab_config/index.html | 2 +- autoapi/data/oc/core/bulk/index.html | 11 +- autoapi/data/oc/core/index.html | 34 +- .../data/oc/core/interface_config/index.html | 2 +- autoapi/data/oc/core/ion/index.html | 5 +- .../multi_adsorbate_slab_config/index.html | 2 +- autoapi/data/oc/core/slab/index.html | 13 +- autoapi/data/oc/core/solvent/index.html | 5 +- autoapi/data/oc/databases/index.html | 2 +- autoapi/data/oc/databases/pkls/index.html | 2 +- autoapi/data/oc/databases/update/index.html | 2 +- .../oc/experimental/get_energies/index.html | 2 +- .../oc/experimental/merge_traj/index.html | 2 +- .../experimental/perturb_systems/index.html | 2 +- .../oc/experimental/rattle_test/index.html | 2 +- autoapi/data/oc/experimental/utils/index.html | 2 +- autoapi/data/oc/index.html | 2 +- .../precompute_sample_structures/index.html | 2 +- .../data/oc/structure_generator/index.html | 2 +- autoapi/data/oc/utils/flag_anomaly/index.html | 2 +- autoapi/data/oc/utils/geometry/index.html | 5 +- autoapi/data/oc/utils/index.html | 2 +- autoapi/data/oc/utils/vasp/index.html | 8 +- autoapi/data/oc/utils/vasp_flags/index.html | 12 +- .../odac/force_field/FF_analysis/index.html | 2 +- autoapi/data/odac/index.html | 2 +- .../promising_mof_energies/energy/index.html | 2 +- autoapi/data/odac/setup_vasp/index.html | 2 +- .../geom/sample_geom_drugs/index.html | 2 +- .../write_geom_drugs_structures/index.html | 2 +- autoapi/data/om/index.html | 2 +- autoapi/data/om/omdata/orca/calc/index.html | 2 +- autoapi/data/om/omdata/orca/index.html | 2 +- .../data/om/omdata/orca/recipes/index.html | 2 +- autoapi/index.html | 12 +- autoapi/ocpapi/client/client/index.html | 2 +- autoapi/ocpapi/client/index.html | 5 +- autoapi/ocpapi/client/models/index.html | 5 +- autoapi/ocpapi/client/ui/index.html | 2 +- autoapi/ocpapi/index.html | 5 +- autoapi/ocpapi/version/index.html | 2 +- .../ocpapi/workflows/adsorbates/index.html | 2 +- autoapi/ocpapi/workflows/context/index.html | 2 +- autoapi/ocpapi/workflows/filter/index.html | 2 +- autoapi/ocpapi/workflows/index.html | 2 +- autoapi/ocpapi/workflows/log/index.html | 2 +- autoapi/ocpapi/workflows/retry/index.html | 2 +- core/ase_dataset_creation.html | 2 +- core/datasets/oc20.html | 2 +- core/datasets/oc20dense.html | 2 +- core/datasets/oc20neb.html | 2 +- core/datasets/oc22.html | 2 +- core/datasets/odac.html | 2 +- core/fine-tuning/fine-tuning-oxides.html | 42 +- core/gotchas.html | 219 +-- core/inference.html | 182 +- core/install.html | 2 +- core/intro_series.html | 2 +- core/license.html | 2 +- core/lmdb_dataset_creation.html | 48 +- core/model_checkpoints.html | 2 +- core/model_faq.html | 2 +- core/model_training.html | 2 +- core/ocpapi.html | 6 +- core/papers_using_models.html | 2 +- core/quickstart.html | 41 +- execution_time.html | 70 +- genindex.html | 954 +++++++-- index.html | 2 +- legacy_tutorials/OCP_Tutorial.html | 1632 ++++++++-------- legacy_tutorials/data_preprocessing.html | 8 +- legacy_tutorials/data_visualization.html | 210 +- legacy_tutorials/legacy_tutorials.html | 2 +- objects.inv | Bin 30357 -> 31810 bytes py-modindex.html | 34 +- search.html | 2 +- searchindex.js | 2 +- tutorials/NRR/NRR_example.html | 76 +- tutorials/NRR/NRR_toc.html | 2 +- tutorials/OCP-introduction.html | 114 +- tutorials/adsorbml_walkthrough.html | 420 ++-- tutorials/advanced/advanced_toc.html | 2 +- tutorials/advanced/embeddings.html | 4 +- tutorials/advanced/fine-tuning-in-python.html | 169 +- tutorials/cattsunami_tutorial.html | 2 +- tutorials/fairchem_models_for_nebs.html | 2 +- tutorials/intro.html | 12 +- videos/technical_talks.html | 2 +- 336 files changed, 12566 insertions(+), 4467 deletions(-) delete mode 100644 .buildinfo create mode 100644 _images/0ed6acc4d3958945d01b08b708c3e18008e0168b9332f3d8a22a621334bd7fd8.png create mode 100644 _images/0fa5846a445798bfb278be6b58999f6dc139c14786d2525bfc48f4b4a2526a38.png delete mode 100644 _images/1b76a51886211f5c9127f68005624208778cc58eda1530455e534d05dd42e8d0.png delete mode 100644 _images/1bed36523f1a2551e087028ab1cbc7e0237390cc630e7e7c366a651ca0c21e99.png delete mode 100644 _images/1e7d42575c8d09e7759dc514f19992458eaf1c9f22782dffebdcb5cf3a1d0952.png create mode 100644 _images/282c005c4621487061b9b673e4d633ab137307b6929d6071878c4e7fe434bad1.png create mode 100644 _images/2d64aee320b000550ca5f2e60a20fe2186071fbc2d4fe06340e7e37a066b0ff2.png delete mode 100644 _images/3e678dc75e2808fec03a15c3aa5c9156836323cfa191c413f4d52e2201abe66b.png create mode 100644 _images/3f77055ef3bc678e93387688c2957d2e0feeb727d01aa42a45f1fcdc7cd59a0f.png create mode 100644 _images/471085d42e21a5a63b86c931ce86e185f37a8aa239bfe087e77195da53c2abef.png create mode 100644 _images/8930fa91e01be9759b929001f10cf547094df97d4a29694d3701584bc56f2b97.png delete mode 100644 _images/9829fb33abee136aebfb1a680b2b6bd05782c4b690b4909db99896a10dc15316.png delete mode 100644 _images/b2bf4ee508c709ceadee47f6590f44d1a6100638efe3e9d68f9f85378e11d301.png delete mode 100644 _images/c50b00258db56c1f0a772f39d620a6b54628fb1f884f2dff043373a345f45b82.png create mode 100644 _images/c8b0267177000d41d57f0236e781c7e83b1bcfa8c0532e3007be98584886bb92.png delete mode 100644 _images/e0c00879fa25cd255545d9cbe5240b9ebd4602954c1b9b069e15ac4d92ded1d6.png create mode 100644 _images/f16f351e99b75a0e68bece7d23fb2fa1c3491a8388f9ad2848c53b3553b9be80.png delete mode 100644 _images/f8593e915dbe68a7228ceddd53e62cd0839f23b12ddee9a707ae7cc8f3d9546e.png create mode 100644 _sources/autoapi/core/models/equiformer_v2/equiformer_v2_deprecated/index.rst create mode 100644 _sources/autoapi/core/models/equiformer_v2/eqv2_to_eqv2_hydra/index.rst create mode 100644 _sources/autoapi/core/models/equiformer_v2/prediction_heads/index.rst create mode 100644 _sources/autoapi/core/models/equiformer_v2/prediction_heads/rank2/index.rst create mode 100644 _sources/autoapi/core/models/escn/escn_exportable/index.rst create mode 100644 _sources/autoapi/core/models/escn/so3_exportable/index.rst delete mode 100644 _sources/autoapi/core/models/finetune_hydra/index.rst create mode 100644 _sources/autoapi/core/scripts/eqv2_to_hydra_eqv2/index.rst create mode 100644 autoapi/core/models/equiformer_v2/equiformer_v2_deprecated/index.html create mode 100644 autoapi/core/models/equiformer_v2/eqv2_to_eqv2_hydra/index.html create mode 100644 autoapi/core/models/equiformer_v2/prediction_heads/index.html create mode 100644 autoapi/core/models/equiformer_v2/prediction_heads/rank2/index.html create mode 100644 autoapi/core/models/escn/escn_exportable/index.html create mode 100644 autoapi/core/models/escn/so3_exportable/index.html delete mode 100644 autoapi/core/models/finetune_hydra/index.html create mode 100644 autoapi/core/scripts/eqv2_to_hydra_eqv2/index.html diff --git a/.buildinfo b/.buildinfo deleted file mode 100644 index acbad833aa..0000000000 --- a/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 21ab98e528573f73f1b5d8a9a8dc8e52 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_downloads/5fdddbed2260616231dbf7b0d94bb665/train.txt b/_downloads/5fdddbed2260616231dbf7b0d94bb665/train.txt index 964b1c0dd6..5dbc9cda42 100644 --- a/_downloads/5fdddbed2260616231dbf7b0d94bb665/train.txt +++ b/_downloads/5fdddbed2260616231dbf7b0d94bb665/train.txt @@ -1,17 +1,17 @@ -2024-08-14 17:31:27 (INFO): Running in non-distributed local mode -2024-08-14 17:31:27 (INFO): Setting env PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True -2024-08-14 17:31:27 (INFO): Project root: /home/runner/work/fairchem/fairchem/src/fairchem -2024-08-14 17:31:28 (INFO): amp: true +2024-09-13 23:27:40 (INFO): Running in local mode without elastic launch (single gpu only) +2024-09-13 23:27:40 (INFO): Setting env PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True +2024-09-13 23:27:40 (INFO): Project root: /home/runner/work/fairchem/fairchem/src/fairchem +2024-09-13 23:27:41 (INFO): amp: false cmd: - checkpoint_dir: fine-tuning/checkpoints/2024-08-14-17-31-44-ft-oxides - commit: 8fb16d6 + checkpoint_dir: fine-tuning/checkpoints/2024-09-13-23-28-00-ft-oxides + commit: 7d40b20 identifier: ft-oxides - logs_dir: fine-tuning/logs/tensorboard/2024-08-14-17-31-44-ft-oxides + logs_dir: fine-tuning/logs/tensorboard/2024-09-13-23-28-00-ft-oxides print_every: 10 - results_dir: fine-tuning/results/2024-08-14-17-31-44-ft-oxides + results_dir: fine-tuning/results/2024-09-13-23-28-00-ft-oxides seed: 0 - timestamp_id: 2024-08-14-17-31-44-ft-oxides - version: 0.1.dev1+g8fb16d6 + timestamp_id: 2024-09-13-23-28-00-ft-oxides + version: 0.1.dev1+g7d40b20 dataset: a2g_args: r_energy: true @@ -97,7 +97,6 @@ model: sbf: name: legendre_outer symmetric_edge_symmetrization: false -noddp: false optim: batch_size: 4 clip_grad_norm: 10 @@ -142,93 +141,100 @@ val_dataset: format: ase_db src: val.db -2024-08-14 17:31:28 (INFO): Loading dataset: ase_db -2024-08-14 17:31:28 (WARNING): Could not find dataset metadata.npz files in '[PosixPath('train.db')]' -2024-08-14 17:31:28 (WARNING): Disabled BalancedBatchSampler because num_replicas=1. -2024-08-14 17:31:28 (WARNING): Failed to get data sizes, falling back to uniform partitioning. BalancedBatchSampler requires a dataset that has a metadata attributed with number of atoms. -2024-08-14 17:31:28 (INFO): rank: 0: Sampler created... -2024-08-14 17:31:28 (INFO): Created BalancedBatchSampler with sampler=, batch_size=4, drop_last=False -2024-08-14 17:31:28 (WARNING): Could not find dataset metadata.npz files in '[PosixPath('val.db')]' -2024-08-14 17:31:28 (WARNING): Disabled BalancedBatchSampler because num_replicas=1. -2024-08-14 17:31:28 (WARNING): Failed to get data sizes, falling back to uniform partitioning. BalancedBatchSampler requires a dataset that has a metadata attributed with number of atoms. -2024-08-14 17:31:28 (INFO): rank: 0: Sampler created... -2024-08-14 17:31:28 (INFO): Created BalancedBatchSampler with sampler=, batch_size=16, drop_last=False -2024-08-14 17:31:28 (WARNING): Could not find dataset metadata.npz files in '[PosixPath('test.db')]' -2024-08-14 17:31:28 (WARNING): Disabled BalancedBatchSampler because num_replicas=1. -2024-08-14 17:31:28 (WARNING): Failed to get data sizes, falling back to uniform partitioning. BalancedBatchSampler requires a dataset that has a metadata attributed with number of atoms. -2024-08-14 17:31:28 (INFO): rank: 0: Sampler created... -2024-08-14 17:31:28 (INFO): Created BalancedBatchSampler with sampler=, batch_size=16, drop_last=False -2024-08-14 17:31:28 (INFO): Loading model: gemnet_oc -2024-08-14 17:31:28 (WARNING): Unrecognized arguments: ['symmetric_edge_symmetrization'] -2024-08-14 17:31:30 (INFO): Loaded GemNetOC with 38864438 parameters. -2024-08-14 17:31:30 (WARNING): log_summary for Tensorboard not supported -2024-08-14 17:31:30 (WARNING): Using `weight_decay` from `optim` instead of `optim.optimizer_params`.Please update your config to use `optim.optimizer_params.weight_decay`.`optim.weight_decay` will soon be deprecated. -2024-08-14 17:31:31 (INFO): Attemping to load user specified checkpoint at /tmp/fairchem_checkpoints/gnoc_oc22_oc20_all_s2ef.pt -2024-08-14 17:31:31 (INFO): Loading checkpoint from: /tmp/fairchem_checkpoints/gnoc_oc22_oc20_all_s2ef.pt -2024-08-14 17:31:31 (INFO): Overwriting scaling factors with those loaded from checkpoint. If you're generating predictions with a pretrained checkpoint, this is the correct behavior. To disable this, delete `scale_dict` from the checkpoint. +2024-09-13 23:27:41 (INFO): Loading model: gemnet_oc +2024-09-13 23:27:41 (WARNING): Unrecognized arguments: ['symmetric_edge_symmetrization'] +2024-09-13 23:27:43 (INFO): Loaded GemNetOC with 38864438 parameters. +2024-09-13 23:27:43 (WARNING): log_summary for Tensorboard not supported +2024-09-13 23:27:43 (INFO): Loading dataset: ase_db +2024-09-13 23:27:43 (WARNING): Could not find dataset metadata.npz files in '[PosixPath('train.db')]' +2024-09-13 23:27:43 (WARNING): Disabled BalancedBatchSampler because num_replicas=1. +2024-09-13 23:27:43 (WARNING): Failed to get data sizes, falling back to uniform partitioning. BalancedBatchSampler requires a dataset that has a metadata attributed with number of atoms. +2024-09-13 23:27:43 (INFO): rank: 0: Sampler created... +2024-09-13 23:27:43 (INFO): Created BalancedBatchSampler with sampler=, batch_size=4, drop_last=False +2024-09-13 23:27:43 (WARNING): Could not find dataset metadata.npz files in '[PosixPath('val.db')]' +2024-09-13 23:27:43 (WARNING): Disabled BalancedBatchSampler because num_replicas=1. +2024-09-13 23:27:43 (WARNING): Failed to get data sizes, falling back to uniform partitioning. BalancedBatchSampler requires a dataset that has a metadata attributed with number of atoms. +2024-09-13 23:27:43 (INFO): rank: 0: Sampler created... +2024-09-13 23:27:43 (INFO): Created BalancedBatchSampler with sampler=, batch_size=16, drop_last=False +2024-09-13 23:27:43 (WARNING): Could not find dataset metadata.npz files in '[PosixPath('test.db')]' +2024-09-13 23:27:43 (WARNING): Disabled BalancedBatchSampler because num_replicas=1. +2024-09-13 23:27:43 (WARNING): Failed to get data sizes, falling back to uniform partitioning. BalancedBatchSampler requires a dataset that has a metadata attributed with number of atoms. +2024-09-13 23:27:43 (INFO): rank: 0: Sampler created... +2024-09-13 23:27:43 (INFO): Created BalancedBatchSampler with sampler=, batch_size=16, drop_last=False +2024-09-13 23:27:43 (WARNING): Using `weight_decay` from `optim` instead of `optim.optimizer_params`.Please update your config to use `optim.optimizer_params.weight_decay`.`optim.weight_decay` will soon be deprecated. +2024-09-13 23:27:43 (INFO): Attemping to load user specified checkpoint at /tmp/fairchem_checkpoints/gnoc_oc22_oc20_all_s2ef.pt +2024-09-13 23:27:43 (INFO): Loading checkpoint from: /tmp/fairchem_checkpoints/gnoc_oc22_oc20_all_s2ef.pt +2024-09-13 23:27:44 (INFO): Overwriting scaling factors with those loaded from checkpoint. If you're generating predictions with a pretrained checkpoint, this is the correct behavior. To disable this, delete `scale_dict` from the checkpoint. /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/torch_geometric/data/collate.py:145: UserWarning: TypedStorage is deprecated. It will be removed in the future and UntypedStorage will be the only storage class. This should only matter to you if you are using storages directly. To access UntypedStorage directly, use tensor.untyped_storage() instead of tensor.storage() storage = elem.storage()._new_shared(numel) /opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/torch_geometric/data/collate.py:145: UserWarning: TypedStorage is deprecated. It will be removed in the future and UntypedStorage will be the only storage class. This should only matter to you if you are using storages directly. To access UntypedStorage directly, use tensor.untyped_storage() instead of tensor.storage() storage = elem.storage()._new_shared(numel) -2024-08-14 17:31:54 (INFO): energy_mae: 9.52e+00, forcesx_mae: 7.22e-02, forcesy_mae: 3.94e-02, forcesz_mae: 5.74e-02, forces_mae: 5.63e-02, forces_cosine_similarity: 1.39e-01, forces_magnitude_error: 1.11e-01, energy_forces_within_threshold: 0.00e+00, loss: 9.65e+00, lr: 5.00e-04, epoch: 1.69e-01, step: 1.00e+01 -2024-08-14 17:31:55 (INFO): Evaluating on val. +2024-09-13 23:28:07 (INFO): energy_mae: 9.48e+00, forcesx_mae: 7.26e-02, forcesy_mae: 3.95e-02, forcesz_mae: 5.74e-02, forces_mae: 5.65e-02, forces_cosine_similarity: 1.12e-01, forces_magnitude_error: 1.11e-01, energy_forces_within_threshold: 0.00e+00, loss: 9.61e+00, lr: 5.00e-04, epoch: 1.69e-01, step: 1.00e+01 +2024-09-13 23:28:08 (INFO): Evaluating on val. device 0: 0%| | 0/2 [00:00, batch_size=16, drop_last=False -2024-08-14 17:37:17 (INFO): Loading model: gemnet_t -2024-08-14 17:37:19 (INFO): Loaded GemNetT with 31671825 parameters. -2024-08-14 17:37:19 (WARNING): log_summary for Tensorboard not supported -2024-08-14 17:37:19 (INFO): Attemping to load user specified checkpoint at /tmp/fairchem_checkpoints/gndt_oc22_all_s2ef.pt -2024-08-14 17:37:19 (INFO): Loading checkpoint from: /tmp/fairchem_checkpoints/gndt_oc22_all_s2ef.pt -2024-08-14 17:37:20 (INFO): Overwriting scaling factors with those loaded from checkpoint. If you're generating predictions with a pretrained checkpoint, this is the correct behavior. To disable this, delete `scale_dict` from the checkpoint. -2024-08-14 17:37:20 (WARNING): Scale factor comment not found in model -2024-08-14 17:37:20 (INFO): Predicting on test. +2024-09-13 23:33:28 (INFO): Loading model: gemnet_t +2024-09-13 23:33:30 (INFO): Loaded GemNetT with 31671825 parameters. +2024-09-13 23:33:30 (WARNING): log_summary for Tensorboard not supported +2024-09-13 23:33:30 (WARNING): Could not find dataset metadata.npz files in '[PosixPath('data.db')]' +2024-09-13 23:33:30 (WARNING): Disabled BalancedBatchSampler because num_replicas=1. +2024-09-13 23:33:30 (WARNING): Failed to get data sizes, falling back to uniform partitioning. BalancedBatchSampler requires a dataset that has a metadata attributed with number of atoms. +2024-09-13 23:33:30 (INFO): rank: 0: Sampler created... +2024-09-13 23:33:30 (INFO): Created BalancedBatchSampler with sampler=, batch_size=16, drop_last=False +2024-09-13 23:33:30 (INFO): Attemping to load user specified checkpoint at /tmp/fairchem_checkpoints/gndt_oc22_all_s2ef.pt +2024-09-13 23:33:30 (INFO): Loading checkpoint from: /tmp/fairchem_checkpoints/gndt_oc22_all_s2ef.pt +2024-09-13 23:33:30 (INFO): Overwriting scaling factors with those loaded from checkpoint. If you're generating predictions with a pretrained checkpoint, this is the correct behavior. To disable this, delete `scale_dict` from the checkpoint. +2024-09-13 23:33:30 (WARNING): Scale factor comment not found in model +2024-09-13 23:33:30 (INFO): Predicting on test. device 0: 0%| | 0/3 [00:005^#{2qGLNe_cx5J!WCp zOE27IWPf?n&;N<^QBs<*BX#w~IRo!Lm?T7ZC1-aF4(ha=O_e(={7qW#TNaEC$pH986KyynT&-a%b<7B%7S_mHL>x-qq#Thg$@D z1y`f_1Xefjdj`F|_vr#zVOb}SuDTJy{{(4DVgz}2<6pjZe;GYUBAV5mxw7KuvN)no z^Sohn0#0V93rsx8t~@>D)TVLw?%bXPNuq0bR20{R3k{twS0dyZ3)!jxy-rilPwq=Q9@@n0tJfyEUs+Aqu}Z^f zS9um;*Ru>W-o2BJ6%~mh%F4>3W?;z5%;apPKY*~@yo%prJcW_w$;ix9ZHvR`OR%xA zy=$RVH#E%K+402h&CXhuSdk#eLmrMv(%77oleklTdyN{YL(SgYPb~9Ts)@Jyh21qdQBbATMuZPLBAo{FrZlZTP7DHs%hj)#UG&|rD0iOup&HUm zMU1d)ku;o13!#o477tR-Nm~aS|aR zLj2lkPB{g@GQ%SxQoFj;C#I(6KEFJdnVx?8#*N4I5^%S>HWmgi^h>u>Yw0Dvc|%Wq z>Qs7p`2beQ*f_an{U-LZsNk3^u8Dj*gEkx7e|G)m9+X4Txq>NYXua%XR z&GzQSCnY5b+^a=+?!Lcv?AS47MmxH|+{zUNZEl*X?a8+zJT!nwA<6{a+SC6EK{mJ2 z;ye`q8V^ShBYyWzoRZ>TXO|NZ5dqxAZ))AS^D@qtu#R!-mL2C5o`^_HX4rCu8}=U%#Q^0$}nq-v-z#2tDD7OS9zyR0-qfg78c_<@|cX4 zQ%I->t0*tOe7y`oSdfDzl$;kYe*e+%98j!x5?f%_rfF*WF1Kn!CoSGdek)d#ZvZ>EX%yd<)YVA`8KZgl>Q(ZWSL{}e!KZU1Hp^Y+3XSRyVb;6U zc)L%XKArLUHC+$`z~HSvFj%$qpWs3s&=N%*NaCXV4M!h8E{gm4yKIUHv)X*+I9@eHClg41X(Kc zCkAY^Xr>!%^C#Z#l0un;goX}hOUy;>oMOCYR(RA@d>reaV>5pIV3xl9s!=v0<qv1EUdr{!;dyTGof7&TCbdw?%{@YJRv&&6@w?`IQkE<|{w9cpj3 zUG=tXQBje?&71A*i86xNU3U{xQ_o~&1fi66bV^<|6-I`UhM+88C?4#p zaI@PZY}RP$>&IeOUd5Y3rBhH=?r98R5VRe-dW=c@ZeI0Hrmz(-KvotJ?XO=~3`xWE zrm5&fozrcrw@nuYiWGqw*gC|Qmy4pv;5nO-<~-fb+7f-G$@no`w)>j~e)9TgMjWHq zyVBCDY4LsCdj~ZB9_6W!K)z825F}=7ezT-g#yB_d&23UC$lk&-aqV(>505e-n}L+Y zYP@n!0q-GxtDfxRw1<#~?+UwI_g<|z@3&eYV(MwRUZ|hj< zlFc-?E-u;6)Dn3H`dyn?7Lhi~%*p9KCOkyB0*R4Qt8*OjGb@XD;OOL3upX z_(tNWg3(diTagB(_K722ix`s!4{oX!eCa?aEs0G;5F~Cw6L%ZOgef%te)d+p#4y=~ zgEXEHBcu`rvD}ORK=FI?X1274;VzR79hI&D6e)6FzK<>n8B>FOSr{ytYoIk$-zV&$ z@L>Mq)6?U^Dq{9yez5-TJVVJFH*Q$e`Vr~8zxR-yo_+x13RHytifM3Cax(SFlgR)u zS-H8bKLr86$A0!am~m4P(i`|fhn`tEAm++1FbtxG)MrsYtngXgc8azj`~HpK%7rFW&McKH{0qtK$0&1Rrb zUM}>^%xAT-?95CBjMs+s`Z5|7gT*##c?MPC(a{;7K3zvS-aw&++S@i=Ad;PotOr);ucgWu&xZe;9=KUW`a+rkeM#P~a^xFj;XLQ`z1B4j+0e7O;!0Q&|!yQe{ zNS{FsE&bH=bPj#ry>(C6=~&M={O^jq;pdk(7Dq=3qi7XsZAGhJB(MI!q(hb0X5@Lu z?>-}Zg484DrLm8ixaYya>JJ_~5Q{i~_}w1Uq=c~7fc~Rkp~`dJ(ZZaYl~wAH%=dF)1OXz)z;DBowz}sy`tM$Wd zS_<%sHHK~CtHC|l+R0&ICoo%MkDzR-^KxB)FfZ#rx7MYmauLD}`l|A!IV{3-LuAMxFipX)5uWuv{5j7iM!PSuIW3Vq?BPGdsKM zF|9%R`dqISO+q zeb&CqeQj>GcJ1le9QDn^N$lKAmczMDSwJoH{+c5q-QSOXg>`WigfRTf$P2x8EiL42 zpwZ|1`2vI3`Mygxsy8W8kF>8XH7K11FwuK9H$PLurPfa3md2GiQ! z9!zWdlVF}ZmFIJ`3uLo2b2>ggI^5mfKDN{cEy3*XPT1J3U|q8il&6$WMCyjWew_|n zONrLdJO9UzA8YHqh6SOt5dHKJ{ZnyX%8F6E-H__kR8)zhyOY8?HP|ZCmN%);@Tv4d z){jxcaZoA-R9@kpJ?nUSlKs3q?0WYoVMDl01Mq9?1{{!*avmR%s-~v4{)IjMW*EdS z-=qPA&7RO8FidyhM(piz`)#rjsj{_yC&J93hZLqcNY+>JvA(2D%A zsejQfDzK5T(_6zSBBC7~9li6Dc|RRe#GjzhPD5|IW>&YZ3tIj3f+G9O&CS~bk1-TNn_0EqqnnwP)rn>+eC_mCt~~Om zMW5;D4^VzpP)z-C{~|_TL3zVX&~M7!#C+Zw%GuX1U%orFVbWxRj?WCcjcSZm`>cOH zhnt2Cn*XeJ0IAGQxHj7o!q+uz47>eXNLinLd$;r!$k^~n(nz`N@LJ=@<=ee8`%Wsi9BbgM)*uj|@)jsV} zWPDsz=Z)_y(Qd?(2UK0a0KmSm(*LD7x-Lu~?B0%(AN zin**kwzRZdTW(^WtEZ6c@+GV?1ClzgT_i#z!eW#V|FSZlo!xi0-l8kcbXy#GBWM-b zD!K3N10_k%23k*&V^N*~$C)LvA=vM5X=b-;8TzC`A)19f?*bx_U^`syktGYEkY|69 zG&LoKgO^tsf*GwQhmO(z$|;ApDqB-o3N5=iZ@uQ10_1bI1T66zEfbJKOYjC|q1~uN zOT46E&F%!>I^0+Jun~_b#=X(~z4)mtG`WdO*c5%Y#)Hbo{K*P!28F5!J9DBQD=Ft^ zR@)?d{ST6f>#)ElmXuNlKxxSu-6w3KIR_HO{9se?>0}j&?N7!HfIRN6bfu=B^HsM) zo~)V%sc=ZCOfUN)E^q2_I|LbooEgOO{4#=CpwyoJq{z-;UqE1H4NOZ#!6g%dTdxxIpC? zVlVyg!#A;ZhGlIc%8*k~P{VD=Aqd@eMiIwPggz9rhb!FX%BJGf0At@NMJN3puJB5| zhwx{uIS<nYz-_L@ByU-eL z-GBMkTcKOPl;|;@g~D@(kWP8!;+7*vDN2SZD54^{jqZ|9la@@9YUgM!j8y54das7e z&d#1{l)$ahuf45!8U-}g7RIVGm(+9q{KS)4=gBHp|PU$7MDPU5|*w%O@jqh z08-mlswyxhNy3UOCHoT(-Z;?|oWIA-vE+8cudGyDd#Co{0W?N{=Q;PAM9s)a?z}94 zEK-U*G{&QMk$#B@&7ZQB6b512u5K+uo0>Z3H09VrxQ@M9t(w`pMF^!oWSiC_WfeP- zzCxE&bN|~*mW!LAwLd!A`yNq9q&xg<%z%>K6w26%lBc($yN$X9x)Bt& z>m4ZiC`3`lcq+yzwAi{o3CfOQ7*H^jYr-wlbZ~Gm;OdA6L>%MP3amVOH03XBIU-5> zmc&&Iq14%R6p@J~{EV0*)zH!s)5DZo_2xc%_DoenBLW{meC>&Yi9^?r-XQHnV@Pp) zHMvww&ZJ0cYR3Tzfzj5a(uZxSBGO@Nz_l-;V!^0o(JZXHJr3hFKgg!^dMtVtVIdVf z<`Fx5u4~|hmg9#-FLGE!^c5Syz{mYP{K@QJeHt266@PLW8Iijj5`{uh*UHpvJ9C7G z2Dra#diu4xb~?n3WaR~|S(b-^q77$%;J3-mii-i6^wEp|SA~0S64kXr4i8#k?;$_d4^WUR2w? za_aEadH^#3A$_lfq8te<+DHJ@qx@yeXJo#LgU4n5peO@v==B5u#E6K949J2UiIE&# zVMYn>()t@j*Ahr4j#Q6ybp*__jhuOQKyN~o5?a;Upi5`rXlZCf_3Wt-|I=Lc6?VP3 zlY@12)~k<+7q~?YS=A4-MftZw!sbfuj#KbRn9>CjmVzXwSHAIW-ZU~3{ck%N@!X^& zX%v-JRl}f}5wz~(ui6-}V#=eqHZ9_1&K}Ob<*8$(rA>(6f61mIWTrxyC~9BkytBKz zy^3nIA#|6dK|PPZeEIVEeoy~6_a8@m*1NSp^?ls*oSU0FyxX!n?1Ex=WaK+&N6bMW z%FM{PgT-RAn$WCAI{=W2&}5D>#A^2%`c}FA9?Agd^Q=@x5+6m35BCnd?^E%e#p@7D zStWYzx)UOa{l}9S#a!uR0?99N(>$l5p)n13{P;8|Xmpn!JjwULyK2R^+Tbu7ufOLR z)(CAr4Gk4S1)LxoSb_jycS=%hPZU~(!1KwOnO}26iAaDqke}mj=C>we@3S2rFJ9nT zs4$ZGhKqj5Wn*@TLFj7njZT}Nvc6h012KC9R||8cFy8X%vkUzNauu!%9b9>pNi};5 zb~|gGDn&3J*y{>%sQGIH<`fSIU$rxv1)LV$4D?vo?~7bqS>497b8`@t3-$-@NwgYR z1+n5Ly**-+?zKA;eY@h&qc>)6k&|D*2ugmKw}ezV$ous{6k5;%m^Q!uK8r;+FZ`m~ z8k8(GD4wdlx%z0Yt?$r4ox`-+E<-WnR)g0sSjZMU^jgirVovL*X-jT#QMaq<$GPbtdFR-z3Ub=K=d3m{fF1NyYcgrCv&Ira*NLGkf1gmjHc7UaXkgETBa<5Z*k#>aC=1 zHOFdU%c>>!-bal{UrJa&bgUvq8q$DX&@vpvKj+R{!WQibQei24HM^?t?*sIXg(lx< z)~CPMXH1EKA{WXi)-x%AilW!A2b|BStki?9h+f1oMKk+u;`;(TecO8=4ERs8tTKUp zC5G7T2?a&PPBOmAG4+sa35o>4HBzF7-%#S(O78`%0j1$S_>GH~F6H+dYw0;WX2Nb6 z@#qwO&X`h!w3C+hSHnj}L|haT(}j)iU77ec2y#8NIb8BB8)Q(Nii)zliTudkOxDF< zeo*IurQJ>6-l zb*D*^kXYt4HT%XY_d6)J5s;rKkJHk3iDa z_~5%wa86!h6ygNe^zNnUH*@9?;|)`%3MtB=RyCwG1B$Ya@;4g%_<6QBK^ zynRati{~)0LVHr6>dSz3;7;xZrtv?rFR>IlOll48I_xpPH<9GU2u8-lWP_eE8!Gm@z0zZK zUgi$X^BXX`>Wn9>rM);Rg-FNO1o?`8VUUq8D=QX}sxIfhZ;@g1c<1(ZEXz{aDTpT! zg*~TY-PYpwcjbV0houx23gk5(BS!43=m{bfo2-42k{ldcM)#fWzFsKAs;m!fSzg|X zUL3dnxFsfKKiz(U!L+uWj&jG}XZwK4@eA8l{*H=^iSqme09p&$v&$o z`fNF&Z%KvG@EmO&J>q{DBfXFyM|v$`^*ZiF4Lb)OzfR>j4YRRV<~pJQ^|Z|1To*=}1ClZ92#c7bG5V}x4xqX{LZfWUjDwHz2}WH&d}*7rhuW!V#{hy zb8zoYvfkqNBZ0Qtq4q9}f(6G;6Sv-b8shr?(;?|wx{7xSY3O63AN^=uO)?&`SoJ54 zWOyh7gBIAzdzW*MSV?nemanxNUQx^*KyAPN=v<&8%sUaOWbxmuaA&i zf&D4`9AQAB<>}Gv{7y5$h*7ZCXN|Pz5ff_wr7X) z25|-Ky~Qqi>G2r{Sqg!-7iLstT|ID({~RfiIc=3VB2E1&6{f%_ng1WY`cZ2BwZ}rt zLs>`y(xCzPx@_Fohow2SRdE&}6(?b3A&H1oxMHTDnYB>eZK*327sra&U#BFNzU{C~ z0Uecbvduvcq?UqI`WmT%N>p9zPK}tjo`T}43I?G}|MS;>Zq5f?;aJh_3IrK>`Iak$ z*^c43qT)FcqHBuip^D0E2+=iNVDkSUVU^9SRoQfkEF+*NSR1g)vjD+lr-2Xq zeex2_|9W)os#3eNv`}e49fk{R$}!W)&tUkMP(T-Gv{gasmaSW&+^g>v3%J}3WyBPx zrJ->Vq))VLWB93QXe^Fxad{0&_N zg=cABK}I8L%#$+zCvLNVANAee+nFzD`$MM2$H(6Y*}M_QeE4Tkd1ZPPM7G-RU*h?& zqduD!J8LsGzdLJueeu3cO-)=95(ZQ8zSSUYq=bi`@>%)94#Y;i;3ud)UG41&FohCZ zJBr=|bcVRTe)ils>eHuZR=hxb_}G*u#qk&6*p|_%NasTT};#+kL?#;cw*dJW} z3}9G&Q0@2s?osEqwnavvL-GPU2u?iyFPN!M-SpYH`47-Qnjf?LVu$vzIXbM{vcj%N z!NX&XoCq0HBw>}j$V*@)5wx%lS5Vkhqd*YT>y#@nlDjyc-2()&qvIcc{Ph4FB)VHK zttF$l^KBqXtG|PN>b16Qt^l^u<|;Q&2qg*Pmq!(_%PkU(z>hWj(EK7w&sjhTgV$ej zdK#c~?4Kpwmd8qHMI1tEM@glzOItrX_BNd~z&^Gc!t%@bZ(Tm>1X{xQzraz`Dh7V{ z_PR^==agPjX^EbW4*IaQCP_yO+&gddBs0DoDzxW*EnpVvJ4cMv2A6&)WPV==-~aF- zTs(IU;PL*Yf482$tm=RGTGTjTL>G8I0}Ksq5fC_LfN2)5ICxkWxtVQ18K|dPSUxaNN3}5i1Ux#6c{My8%I<#j|LQ5kbpKB8cXNrM^&7zJB`_5g(ri!q(hd zyXx-?C8N3Eqk}O^V^gD-*fQEe z)?AgeFUGW<`Wm0MP!!ZJq4JhwQ}U^_5(JB8u3iR64(LpM<|o9-DbNg+W2LhmwMB3A zffA-1FOl<&uV$#)2F4z!-4Vt`J{p;Ae>V-if+;a*`5JKF!1d@k5ut^K7<8=L?`|?% z=3!t`D+X@3TQKlc1qJxT$&)UilUjh-Es@>f7PE~{2PXik^_s=|XhPpBk=ZO6V}Xkd zJ<`yoma(_NKR9J^(*HK%KKAhNDMrQ|Fg!4dyWa+Z(q*R)MEBX3a!lWwqpwumO|&cP zV4|j`e)i-^yU0|`&-WM*DByR4+%B|=7Qzf4Qog8c6z+jDjBlW6y9hQxXqi2Kh6sb^ zG?}d6Qy;ytwKJD@L7oD$_5y^HM7L2Nt@^-YoqhSn8hU#3S*kvD{WZA$0yC~FSJYr! zoP*SmS^Q(OXzpGy=5E51ty6F&-i8r^=^e=3?HHCr?ZV6%`dD!0-V%YTlK8Cx^-R$EPD9%#sE$ zy6c9?iJQwzM{2!`*K^@PW7t1*)=yZC-@m%c^-d*Tq8!GXFmIec-n(d#TPz1D{^7$1 z0molAbMEFRwa8ZkHz`mFJ_7=s4<6Mip|`GrDRi92Nv2;d8-1v!64tQ~vz_id>^c{y zGHUPAK`7HHb4)cG2{`OgfcbA7VIIFQ?qR}%$?_b&apfIMAGbVak0c6{(jzBMoCtsM zVyq`0ibEKE2K*VorY zF%&%$Bam z4i5R3d-`!WJ2r>YZ6GV;CdKg7YO9Y{&GHgk{{@SY_tmAsdQ%{$Q{| z(nG121=%#@PO|K2X5Za>T-Ih~Xkk;d^aawgPNu|NkJ;a&a*#U3k42=>0)Ewp>F>Vs zfA*OFi=VHxzY%rGWb#?N;~O>ZB!^?tfc2>B=*%vv`X$Iw5|2fKapBwjeDF4)%AA6d zQdg;PZ43l_{qbyl~h;^&z6w}QYqFri+B*6q6bdJRp@ zo*zGFW@gI4&cRrW&N%pdx1X!EN&4(K1EjbpFASpMF51`t3mALVdqDcM6sg~!qoboU z6c*Ihx>&gy3WJh$Fi+}01t_ZCCwK+uAYN{GUj3&8YYZ=ly)8i~#@?tdcPgG&fI4>eF5AjC#9>O4BFhfHaI!74L9ID*C7 zpp@t7)2Ei!*6J{j2J1^27=wUhP0yso7cb&b^&Ez;U9ge`jP|WOJp6(VfzTNmG@Rh7 z&v?bIGJvz0l}87=5n%j)39%f7|MW$dQo_Xf(;@lt%!9Ei13BL8md;la-qors(Ut+6KYyo z#V|0XLFLK@55;F}GpM&krY-bABP{YdCAP7-;M<-u12xJ(t0w?fNVJ6%bDeLW?ao>!;1^*5za8CkV58DOX=nCXdl~1w zB9EG#(b(`@n@$84Ftager)6MZP#_|OHklHHE#o!;&U=~!-7ThT{1sq!46(|qDsE_k zLGgWZdV$Z_8YmXBpx;w5GTPK&_SQOELgzZuaQWunlUxn)z#I4>nvZ35TaIpkeohA% zD+`@$eYJ5@s36okvl>Y#DnBRR+7*xTad7aLyDnIQyf9dT8mFdva^B{H^I6lXbhTA1 z1faZsv80O$AW0C`YZN2y(NVnsTvMp7t}YlnRCou_urJXwFf8D~(?y3mjKS$S>T7ph zPL9DBKR9|O&KDd{vS1F*5+pV^WcNLM2}x|?4>mm+yI8Z2Ma_m-NwCE%Oyy-|sXcg* zQf~#7n--#~3$k?ay&YIEzz8(IX;-zb*%F7*MW4?A8`7VtcbvF3Owvmh3&1Q52>Q(^ zeIBS@_Xm@2PCP$yFP&rq@XLBP(brAjad!QF7~69NYfP!Vac z>}(h$LKguYgwpBLr){e?ub^{0m?SY`nQEI~b04d<0Zjvam;~ZZVsA|ivooDs4nt8F z7;IXBanitR7@k%^0pzWa%?CR%SceNbyn?qp_ttxheD|@aCl8*v=|an;y*B_1I>kqA zIVB^WS@p)~=Gxfgpt=pdcx}yjVW>=Pv1&68Em`P{1Qm7a9bh!o4c-d$F%*;*LxWL1 z^X_d|sv_;M_iD>Pff-K7b|}4Kv04{Eu887!SypkeCOVIVhhDxXP7yVO!dYtrQIHEy z3*-PrLCvP9YvD?pcrvg=A%?h>!a>`LTOhwV_Z0(9p(EM9PIH}yU3x9Rp#U9%OW$Ic zBJUj_9pK7(d$1Tzoz2Y3RZUZtbbdWGF<}8k_RVFJXVAGMLY9iG9hXNQ+o*lb{l%;Qlv^ym%5 zFALgE^kdL=1bE9z-zxgZQV-0YU0|cV=0&QEz{!U;#I}H|zEQ*^f}l8)pdL?%7)4Rf zwe+UA0?49QY_~chvIQqm|T0+ND0BHbX}EiK(0(p|!a ze=eT)eB*p)jPLwskHK)b_u6aSG3Pa}dCht6_b=q7@NsYAqM@PTKb3x>fQELN2Mz5~ zAvPwwBSf#&0RQmYOT4mIv@*7L(z7)}lhd=ewy?6dFx9{1Xk=?=YGwJ5jh~H^_10^9 zduuxZcJ?>_bpe}|tqJ>W`70xE6C7)4H9IskLOtZ~QkrP0DH@u&)zc?pO3n%E6Hd+~ z3zN;;n<hL<-b{Y~F3>)i zaqs5icOPZ`R(j&8;W2!C#1mn$(e1F_w6WH)VO8K&<+8}k)4+lE1YQa6f(9@G;T1`S zK}keJWOEajhmMYJmW#v!K5aC;JB)nT_aYBIBTD_IOAjB)i`PjaU-kD6fzSBxF(|_o z)T`cdYgITl4GodScQ*UuQ#x-qk>!tAs6?wU2Ga<~!8__&l78_b?gB4gzAUY%Q2Z{5 zkM?$dMIu+biZwI6+=Em>7#z>-)xMItRwjlQE z*2yZ@``O@bdCnR;(8jA3l|pZ5SJiU(Kn=X+5CzJPp5e1@js)v3GPdS!X=& z(sm2&($V(ZQf2eulxKGc@1*oxbIA7g_H9niPc1aA!4XW)KOZvZyPr5phSA7H+>wjn zG{U8I-+NhBBjwWC(J|jdrZW$N`dLmAE^89lit%QwxDzdySuurVBr!hTJVC&r?Ngj_ zM~og?^Cw1GR+saFo7`rRzrTw4>~1{Ntwn3-?(S}FZM}PN+%0-OjussI&}6hk_+Z!o zQ@7~N*kBBo>8A%qZ6pS3!}ykGrf+-F=I|n&VjpB7)|GZs!r$rkWP2G!|Ga6 zpVO4PQ@7ERh6#UiBP+9;hP zpcfJvubyH`a;WN9ArO-|*z2xiHX)|+k z26&V_9ei*1{_wY)@AW;GEU}!xqot)qwx;x8)I04hY?~0b|Ojj-Scat@%7z$usagk2ERTrHWjy_Ha*WDj+R(iIlH(} z+`fIgIlE-ij7rEkuT=!*!0G1h9`Z%d>E@88UC7MRk_jHQK>wNMj7dK1vc6~Z+1W|q zn=u}P#y}#;7cV}}EH9hd|LLiVd1xZfe;WCuE$Q!Ypk{5=;beQ?b5ZXy}^Fov=7>YjJN8+y=!<{>}@J504%;V-T+U_x{8o9m{If{qI zcve;WgDyHXu`cIsJ*^tNg`jC`%?SP(@(27${5?M1X=e{6e{dOKqw)Q93LXn`r*RuB z^TDh#U20f(m~-Uu?vmYX<9oVp_mlOK`K2Yh)$EeXc?K;6v$M100`_+=UAhE2uwF7n z5aVv$wbU9;kLK&|ubtQ2`xdSw7jff510T86m-<{Z)vBlI=ybQcY{s7wcG3uLJMMls z;dYKXv|k-uPw;r`;^MNmIhC}vWv%VH&Mg^CZqv2u=jXRwheeCV;dW$wvZS}wQUIWx@5#ot>S@ z1)VmEtj0=hzF#8WtUk$cAB%Zl5Ul>wjG`r!n#J~1j(5Tk9TQVKucqbr@9>Le()d4r zUVs1kwYC}+E=BV|Q%frZuWbD?YJS^BY&<;Hf-1mZNwD6v z7PtsmSxoCXQpyI7V3*xRigyoOcIN5Eaw~UazRQ0Rko54V)+6_S;Cf(jg=5lfw{y2z z`_ZF!zpLF(0JV%e$QuR*1_HyvYINO=ULKu zaK*26K097oAH&tSX`rv)mA<+*Sh%~N54#>_Gh!5dV>v?c#S2~g_0fUXgIQ|K9=LQj zWbgCP5nQ9DM$mRGY^=ys{Lv${3a3rXS`Iwpu7qFUZV&K$3|c}*tWYP1OpJ_v4y%L8 zuc{8m?VgA0txi-pF^P&Mxt|+n!?bM^S-BqABXFF+MoL!r94YOM82Jwfl6f z*Aoee2Ue4ncA*r2#S%4B@2@kxs&sz9J8pdiw(Fo91u+OQEownW>pwl;f;`-bq+aAo z5n-k2)SU5;d3$?H%gbZlVrG61o4fMBCr{p;rpW zbR@(5`ypFfTlz_0z!V0}!QVX3&rVOK&Z~9b0E{7V>}gP$p3cluER=y*`LE}%vL}l2(}J? z^Lv_*W1?YTV4#gVj=h0>$QX8qoxbu24D^G=`C4H&x$xUPiGir3B%QT`-a$e4zxF^c zx<+y%ebTStv zDt~^43YtiTyOE*((uIE2rPue$%i}mjp?-CDGYJU%tvq3SmG`xEP9>atdEr^c4ORRK?EkGNQHKRPydGVO@4gx0!2315Ty0b*PkF@Pd|- z=xS+sIj4RjHsVT)o$=i+BFxOcJVXTq%3HJZFj|16@g25b>$tT8@P1?D0BlXm{^}!G z3LI?gY0>jz!m_e5#zBotmHVSV&0G4@6`wwRnlD-dt_CzrJ>{@+e^5iM#zUCBa_cfr ze29i+*+PPQqUV{*r-+C$K(;RalAq>7oTj}D>Lr$1hFm@2^iqF@a%tJv*gBF#lk)QN z6o&c>jN0jvBmxMi+wA2TnejqB&pUQ@0h*tUMFK6KVC{2DSi|0 z?vYfmv%P((3#EliNSLactNkodsBHMf>EV=Oc-v!u6jGPtg=n<`LmUX3i(m#RM(v*y z_-woZJo2q)>h1gmld=IKk=22*DJUpx?d>IlAHlNQ4QV;qOt~LEfMxr8u-@JrLK!RS zc_u+HN41bDiO%hd$5p$&8hB6m)+8pj7;avszbCGJ{!6#SOm!s)y7?x zz93HpHWUqJ6P}o;y>eK&UOaZRBzpcUf!_}K(g&@vKZ6=pM*AxRm8gR;i;40m4Xdgs z@bAHFjh56T4;g7`Y#5JLIL_ZZ6>-%n)Xht){BU_8*p$fIH1X zFq%(KO@wfE9UTj67r^jibhN6WsFRZu*kL2J)3_KAkFw*%_@~dF&4cx&=r#Bw?1*gt zY;tlE@hqzv)Mv1j>r_k9 znDXqwOgs--Sy(XQGVN^y;3&#B?u?^5=}h47d;R+#KZO0jEDHLs?|sPzx5v~yJ*+tg0tVj3 z1N&*7^e6|MyxAa3*s+Vlyn*Axm*AW&mC1IhNXOC=J@V!pt%_iXwheuKeQ9ciDcisi zDX)^U-aW88IvBGGX=kq)2V>##_VMW!6w|T!aKh?wj&k}g9zft95YWOeUgNYrYBcU~ zvX0DkW@Ez=yru~GRN#95n`M;!DGd;T3X=%HAzKP@D z<1^m6^$sw1WGIsP7vw+EN=hU^i-33%QB!wjC}&csr65@tP5@@Sm=9)nbacyXQ;=GP z<9$d{jC#I`EoHgyIw4sQ5WzX1@cPF)3tSe%A0Y^u(%pruuIyF-{-KED8o8dH-YHDg zeshwVgY5fNY;4^+Z;T&_iGtkRQ4m2%*)*k-MBLd*J;lT>1rX9UPfeXyDs~0IbQbi; zF(JhD=V+aL8sxJZ?q~oq`$STb^UWw1(A%)oR3->%cZ7s0`};mF&ChQE;1H3MO9Ooh znqU$XtZ40@1su5NSSJVrN?24d}yI8RaoVZDyZnzg_-eS4_)i{SIEX{A6%To2>qRrImq9)iv*8 zqnC@aFCRR3@GOpNx$?wftT?2#RT}bBNyt3Ag?9149o$a0TaY{mzA#3%!y+#!iHU=Q zLnY{lm}4zJ^*c>X&AagGb0sAqAu)}DClWD-Hu$?bE%*8XZ~!B00QML_I8DRG)ea0qt&f#FbXZXer52O~ zr1~P@pbxVwG8<@n`QroV2|=f)Znk!I*=*l?Z5b9`( z7auIbSwo%7g|3#C0ARroNM9OO7`Y?TLvk8?A7BOuC?ObT+^u4Af4z?p5#q3}t_N%1 zfPh7F5$Qa=&?(qn!ruAoT_Yv+FDWS*SWr@jO@x40Xf-8bYiql;vvcq8uxDiw*u}z= z``l!Ufhuuyxtl$zh;5`l`rjpwh{Ch=5CF{PnEw@lJg@JaBZnuXqH4fi4IFNNRF) za^w8_kB%L8K$>dQc<^8Fu@nKO==qHD`a#kH6G1D&#R|kFM)&jcxUz z2gYO3?t4?Fh(9sUWVuchF0-g)DRLjc_Lr*_%EZ%6NalQBM6VwGGn-Z$1SM=j!X>Z| zV?g{O^Px}x|HPOWavrP64p2?P0s^pLCbJ({a&%|v{a~9{5-5DLQ*;&8c_{74@rm9{ zdw!p8v^?S)#S?sERa7oOL=?^``~3M*#B-4uz^$*(lSJN)q^1Crp+SV2o1622Tf*|c zE8DyDNLo73UBl=fT}2g#QCJ?mMXfw@qKcGrWq<4d=8gW2m_|H{k$(j?Lc z=e084`}2EAtD9L!h|0>!3a|?TFasmwkIO9892oIC*ZQw*oMN!i;*jSZ>1=i0x4t*B z(gyb5wF=zvhwI@69*s~8#3j&IBmp92#-} zd~4NndX@6_uJ1t9`wPi2{=@u+5nCMpUd{9(hMSY%lrXLA^P z@ppIrLTx=2wL3$k%`ygD9+mU~%#Gt4afBR9yYVMz9Td5@XJ7`=kLsFbCdI7#hI&r; z^U7-fE^nEN+UbkJx0oMdP-d2uJ_>7@Dc-DOLMP^_pHIv)@VXd?5 zfk%T+k9OX^+M&Ihme5`gVNppEK7FdIRXS(#hYyoOcbVbg^lO-$^ngD3#|XX7>|k>Z z6BCnNAeY26G@&3?g6kOoA3Rtpu^6cb-3S{SyLM_S38-Ho*gG1ilbsL=otJ+^V_&^W z55(YPqarLJA;A`9^Vu)nXp^QNQTbU=XK5Z!KXKfdBOdDqNLaR1)cPT%wX z;>D^Y5j>jeACsu}Oo_US9kI{82t zqvz>2;qL70thKPK7a>ODf!bF+*qCTXcqM@U`PpF&wT&a$d=F{-(UCLQq|EErh%5t| zN(iIu=g7ZDFj7LmQJ}aBrF1Nr#k_S|S8ta-NL~wge$o)v-ImZO@#KjNNQ9uXxYcIn zR=05vX^OXhz8?!(EE1A;elb;oU$MM5+gFmk~AF# zluZbnoR$z|1U^H>Z|e*DHMg;$J!=l)E-7u&!_AQ&vSht|ef-wbX!tj|N=xlZ(Fx4+ z`GIpmB7f`79e>o@{@(Fb9`F@J-UiAG&?u&@P4h1S zO8{v$(peK29KBSiA+Q7l$-OrtzI>50Gcya1@3XP-vJ9(j9htt4D|N;htsfZlvz!xx zWPKc$sW%`ti%M3WReNVAlD8mP1B^V+VuTYSy{uaZP#xQqe&&-o(X*o~fP}!fmU>2I zXY+Io3P)a*THjtB%59mNq6G_@be_WpFvP*dy|-QZG~&+8;$kx-S+6nyxjBc3gk%4y>iJAHo1T>(g?q`o(tjSG;F=5?Y1q^-qm7E zZbWGu5gFMCg^hFKH{+!bz*)ZQ)Oav3F2CxvINiJ*8SO2(aa0Rn)ZJ%R=Jmu@G}xzqU5(_`2G90MDaez zUodyu7HX%+pGr$Zi*M6LaL;&&LpQkse03h;2u!Nwd}#rn%)kxMLR;wdwNf56>bmGP9!!`>LPq5KX0-Yn4OhR$#c@3t-mRi3uT7B+uNs1 zD7JpEH9`HcltN?$qe0X+&5KM(6XG4kYocc+eQAQ@6?iLJI3wv0@AI}KTDvQzztPdz znzr%Lq^jHQbxYSZQ(*La{}!!}I*bpCuEEj43)o{YUnM58QGmh=+UFcIEoBk{HrxKT z%jy$jYGvgO@7}*Cq3>`(J2=IRaE%eKUv(%zC|K(3;-Wt=XkY|Dhc$TkwTz6(F~L!w zd=?2cs^JD*7nWTio+z!KaV;rDp_aS>zO+GDWKMt1X-j7<@o~tAn5DpLV4GVCl(REG zz;~{}8gxCWT-Zlt>nds)rq(6cMmv)A5Ks3&f6eJ4YQF!s)V-uuM4g+%Iag!Fx%suVk85kAR4bDBN~tc2*(Vm?kIKo+wWsf8^_`Gx>J@v2)Xy ziMlm{&F{SB9QywX{NbFe6g}~f{vddM1_4{y7v8>sBIa5n;9uTae`8Eb1$^_Kd|gVp zt%HxJ8|K;1&ff}!n^;RLQUDkOAK~&vGUG1uxmkj-#W;6M#KeGpt>kDkl^TC?@%$~D zccLoWj?e@WT%OC+o4$@E-Y?OnCUBStUulI02DVB-hG$29R6F!dMWa=S;Jkv`w(wta z)Inm=IKP3<`wVOI7GEWShe!R&2e^ORvpUHxY%?@^kxLeNmiMyajU6Ol=)iL6CAinG zR3$yw>~^Ih$Sy3VLAdgZyl^`QS3J60zf+6C8o6ehOcr9GA2%>4`J;ob;+G1JS@Fkd3mOpy>_A{Va#~DCM!q!$&-0+5{qO*ZjJhnPMs(1Q}5o0 zs%wNHm){+3J=QuPEZy!G4mR2k^#U?ro!s_FdM zk90Y2k(%DZyx2gS*Lg?=3<^6GfrzhNdjyrfR|ST@T*4@X-*WN9XScoqp*56Mkxe2D zr^oFbOr(S!p_Vt^2TF4<_UJx*-E#}b4#MBfhjM-ZF5und3WRu>a99e3<&Pgf>ejeJ z%8cB?54I)=Pb}n?k!T0i_o!NlCyks0S9zeE1GNiks15a`$WcNVY6ku28D#O05QuE% zCnhF>fec##xP{(RZ1Zu#w_~*CwHp3O?(yX{vO)@S{H(*izP{HeD1L!P45{EPcJ?r! z{MTt{&nAt5y(zR z|D6AyV{rG_Wu!=*A{XBbnJQADgA{Wi&OGO~Xw6YO<#i@`1`duM4-n)Mzso;mOYYq7 zITisMa-BJ1Lu@GA3<*XWog6@9Ad-J^N`fULf{_DPh4S)3tVv=WROdl=h$*vMDtNnZ zW;T$aoN+i-<;p7;$E64PB-ACB5|#=J3x9QqJQUM3GrI@$f*z_qpx_iF#6Q_SrW;47<9ap)E>YhHfgQYfC8o+;@;(w~=WvxCwle@ow&>RY?I22nv#~UJYX$ zws&-(*Eaq5Gr$G`0v8uo2IT>z=y@pU{IHw}m#G!4*TivKxiu_weZ}6F4N@O)P^Bvb zs|J0*{GhNy&TU3Q$!p0VB9e%6{Z1a#oG=NfUQe;#yY~Txcj;qdVi$xqNbyC7E1cMa zNbl=|`EtD(jXXo0fHGs_i>dW>s;2X#M(C=m>MO*bm9B!Bef##UvAOvZkcQ34s^#H) z`u1pc&}sOQrh;l6O-(8wC1@bB7MS+kL5d?#fItel)B^UpAYVAYeJcR>j_f+DHyTP( z!x7@HLx8LCS5#S;oDnFLQP1Qt-Nwm6ExpQBYyY@RFX}lcgKhqbgj{j(198jF7Pso< zLp)y}&-&BU3)o1A@ebkBmcCxPLBD&p!ko8Fc>yx1KXmDD(A%Qzx%F0_L*khCYxM2E z>7R7dGQ}0SlgHYmZm#hvmyw8&3fF?tSIMCK{Zhg>*3{G$qnJJf*g$d5x)2fGFW%zQ)`lm;-K z&P8A3J~T|NEuruHbqa3C=H(sos-?3*leLd`JR$ZdAfUGFPCY46IBtqA{UB}{#*ilg zkLr;*=IL?x1xDOJ-Zyu?v3C;f;(6AWXZ7R4#iC%6Q4LWB-}bTZw)#+fzqKCt@8!wx zzE3Bn&y-gl>BmIuhmztRIRnZ7HaEV*CjqIn<9m$Gn6+n7TkVAxxTYNJ9iqf`TTb`L zaQ7^OP_GZ~!p-ghn%+xFGyirnw}>hutPSrR9E5%xW$43El2;YQm;3u@lG%=NOOfef zFEY?zVG=Yo^%`3)@_8?{Lo-HeMDK<7D2K({0wkR8>RIT72v8~?k*~)1DEuL zJuSfATsQin?VT2`6mi@lbbI7>s zVS%@%WAsKCZk~P@Zr*1kRCLoa2mP#O?DkyDzn4P?l5$ulrud{!-d$LH-?wqQ+t=N;~IJ;MQ6kM;bK@S0|c4Z8RRK3M-G$6Td1kx)bWDI!&k`bq+ z-9-{;NSzw(x`hLxqocpKk(j*L#QnqBh4{zfS|hB%{SmzHr>R!L|6Q4XS5(9WV|$gS zdkGkI6OB`!952wUEjL(FUaUQUvTa8^Zx|GW`al$bYTWX8*+ZzMh-|tV znV2AT@%cLg9|H*S+`B7l4(x_enNb4}@g=B;Ei8B_uadDDqWxhR~rHdm!M0?V7d1PWAzYJumIDGrjXn*Q1Mg7S3TZ8 z_TXq6J|DkWUKqzr8;OO!zJA__#ZuLqscPy54su>gDiDuZHHw2p&rc(uwDrJwOBV{X zAKcfyy)UDIAkju2CiEB-%)s~W^`I)^b~F>fIJnoZ_&og6C;b{~KI^ZnsSI6r{z_nH z5i%Xt{o|>w1uC@?M@hlj>99fA185xD-RLW|F#rjn145a!t!)8HV8rwMM2D31RV@^I z-oJm(zf=mQ12uSPSuzS=zpq}T3)L3J>Le(DK+HGd$G0&~JmZ*u6C*-(mVlS-FXoe@ zqRL1|cO&^(-5pleU?_}U-H48j#d#Mb`y2B%1RK}(juFr{{`99`x3RI2C~j$K=>uh` zAd-1ND`L|6So)PH^9K1=Py*h&Tvx66FVVRF%ITG+U_`p{fuF*(ik?RyD~HO5&%VnDhlNQ0u<2yj!uLsDzW^)%J_5kuu1+R$%xcR?odZk;iz0+c+uX&V zwDGtf5XVbTyBO?qs(C?Bv0mndugr`N)e2&Vo?@^}7L?zFORoX6(VW)L#Hn_i$m)1~ zAIr)H#G`^RkrCFO6RuGE*FiSGR|R&ipH>O5yx4L2GAb>#2Wwz^O?dV6dkT1R(YO} zKo~OoCM>fpHxCaxu$09qwoe<|ACdxSqlz*~!Sr zcL+*d8WN{;CzOzBhRZ^%8PJfv{%1Dkv&trY@MaCIhsAzRO$eVQH?UJz+?u&PUd?>@Ji@{K`eJe~yZ& z;C8q^i%y383F1ij;~dLHMrJan;WK)R<4J@*BnLy0s#X8F}JmQT}2hP&bAW7=Mg7tvUBFZJK zKHcyl0xCcb#{9IK9QzHy^80HiMHg1djI@n5PP9`o`r-3J%TWuHyS?`G&wi$YQfNtIH#W0p2tk~YB5#gBE+C3ZX);(0XcpNc|B2p59 z(=yxc**MlM!3ktFk<^Ip#|;!6`k+t5iSG8f8iEug&=i|oB!q&}%OXlSLT^gu;udy% zT*HkmEe`=xAB&4acg0ue4`5X*n6GRZwkX!O%B}vJ0ew5nUsBwscgE1JEQSV*D_&TY z=iL7#6Nz+w_W1GR@G)o;_yDCR=-dlsRZiafi=sR=uiO5zwfZD86Nq_DK83#?->hF4 z)aYKlBCkOmP(tSv)-C7)diM?uaO;u1y?wg2$#9-t@{b?+P)Ao-Pl}6^(ba`6BxcZk zHSJM!OE<`_>P%ttkdYT&TX96MeBMZ13#MLYM9>z?rXKzbaHU1G;V>9wI@4#U=^bs))(SU)Ml!Hn&n}w}^{AETuU$wQh88>$S_jr(%%3x~) zG-BC;m$!_z%ejoAW7jx;}=q zuZ_g)3G0I`hv5pmPz&!HR$^f|h^;8R;m`Vi!+hoWVJH#7j?`&6O)RACJZTHl;nUpx z;NrQ=Vr?If@K_~-|4U*ap|1CD1(?}(jd#k;M~{3Q8V5t~Jx_MiaunvGMLXtSyqoUr zhJaD}XDXhs5as?BN!EzB@dOVkToBb+;HU;}gNDFqp>ndVWjJWWPL8ZMcbz;qNOmcpt%h;#7 zG4O+#IT12{7qan6y>5k9yaNdGWnf^$bH3JM`bbOjNAg^S``0h_=`wx|=dF1BWRoQ| ztvDsg+j3vK?G{nT-H+SE5PV3-B(Z3_+cWls&}y}|@QTLtqW)Y!NC3sohHWwJ)1T#B z>A?b1SPp_>@;6V90@Z)nnc*?Jb9h!#*;TvZOw{D&1=&CA|5Bzv))VqH>ZGfOazP?h* z;i=4%MlqO%S5Q#Mc2)d#lhzlU{awS8a4!GKiUe97nqrs+tL8+9tOA>59!hGMbG5z& z*hDPzaOC$KxyQ%Lb(Z#)B+n$}MF`!h5|@@N?g&1QPCl}A4=EnL>cy)vcN?47;BrM_O~5)++lk&|~UI4shQY+u3$?~p56)D&HnSQU0I zsGG^g3pR&E+|N!;Da(%4x69Ns`)G3B_EetFeTO0~5(yFly+eEka%MV94(;`xl}MsJ zJA1=h^6c1$o>`4l_0H!NiYvD}Z=taNlVQMt2|0`{YrB~;vHQnc#RNyL<@s-|IEShW zgN+0~WwFU+&2AWJf2zl%tcK(Z$>ACywkdtRluduMU1wR8L0$Vkn9A~e@A;(WwdWpQ zi(KiSSDgG=TH+2pov{mwSOWrEe<*7Cli{&q7DY4H9)2kf|a^zU)6XpM$_{PCh z-*2+}@e6Tj;k1_u&qK>c= z`t>uQR3ls0tS{GqihX!?FQ=lC;1~mw{k-x^MQZkpp>ZgflElg}djB%E8Z*bL$lV@` z0r-k|T?+Bmw)NaT<>=0iL-fqdV*NksQWQsBwmejPrVgeGFEuA-%EM|W$PVrYOidy5 zDg55kx|C0dTi8pu8&6C{`QH|y5^(vjDth{*TXn6jN2X^$9At@u8y8SBvws0Kpr9&o zW}9Jg9(q}7_6c~8yZMlL4!0fU4n};AGKU8djZWa+4|ps_(@}ZVmJ=a?$uckV(tR&i zjvsGkue<13%Z_Wk0Uqmhdox>iRj<=-cF%%`e2?^K$bU{y@2u|voqxb4DnNh}%rR>` z-&lYA<>urX|K~bzr|GeQ69?0_kz@1*hloo^<-8bmq5nZnFURQQg1Y75_LWjq%0K*z zYHh^B^Vxg~%3mG73d^}{k|l+^SR?rlFGat#d&#$kS!vvJw!Y;WW8DEorbp15)^WLD%dj88=zHQM`E zmU#115&&HBeTc`>JbVBIbAvH&<;n%j?op9i%+AeGK-WEpPrwj*vNd==v#Qxn8bDS@ zA?hInt(Hxo_Ccrh4&)L78IAXr+nR58xaJ9J#ruAYjp!DivY3ul^9+y5#F^W{v(VSiNVEIrdl)e#WjmRUTOCAI zXGmC(r`j!bIVi;{E5y_=^|jb9)=kRgk4(2KpB%RY)D)gOrwsgfPj6p(1yR?jVqAFV z6AKWlk!inOw+IzNXtVKwUYAj5LoYP$bcWpYS4W2-sAY^ahbNmg58*5ea#RUAe9GV; z&TANt=h<;8eOp$qrj~`!DEp`G%~Ee&9YP*j8Kdcn_P_~ETkFVsZN@&gH@&U+7~c3` zup^{Y`p3dY-T#?0+27qRg)T%+rwvW0()#L=15fmY-0koFs_N{6k&zLk)45EUNjN^> z!6snl>uXQcRcH>~^FMo{N~6Zz9Jn0rRe$4Hv!{(0WfDJSzp(MA{0#rAi4N`qEDGAy zgWwd8&+zao5GG}WHlRK62eirdXKRoV5)vYpvKxYGAon8;FA;YyDtqFo(8$&@?4^;E0C`d;Th-*#W^o+X^z7QPVo?tSCLh=(<`;2CqV z8Y{7C;lP8|G$|m5P^O%NV^D@bI+5NMU*AtlbIykoPRF2r#t1sGf#$vdCyGp<{>rLZ zn%8KM_;!UET6Nb-pzIg95Sid#k$JTn&*GO9z2NlbLUTEa39y0FBSg>)TsH9^9T15> zhNIgxd)+Z7A!4pKj?}w3mYmEGN-OFy=?-nD9ng4;G$a4|^$QGmI0??0AieOn@7!5T zn1h265+|IiYcDsBD@T1a7jm!Y-o9cThb z75$>0V{N1X3ff&zZ-65+rSxs~W=L$9${Vb7SGR+7MFupwz zn6>;|L7k_>;}mO?edMW_*I#2LQ{a9m_9Nd%vpRWyk}d$2IWj#=PWh_{Pm^F&M0a5! z??bx@F|=~ts|!uHvtJW0n%EfGJ}o{+pBlHAq~)iK(|lvf4{;_Fl9-<=O58K+Gi|H9 zMGH|xZ?^31^hQDr_FQ*)6aSvE6Dt;Gu{~!~>HpcYEx&uVmj53Ckrn#hI>&p`X?AJW zB<+LZ=E=z2P)i(sn&*4D~~zh&$6vs8dNqJeUH?)BYP?r5FYo)w7IL_P(vj%8TM&R;K2 z*PJf5Bg|mww>_E}*4ypZHPZe%+ER8?N{lR%{utdp6@*Y%ejKlkAWb@ut4DQuL;>LE}dnYaenh8k!#?7QmHT|fOY01sO$54_v?%@vU#>* z=*BZ(*SK`+?3?;g2j# zLbSIW4v7Voft3DDWL4@0pP&g%XqL`pNCvNu_&%cDpG&hZ=$mfX0P#~j>>W{3OyP~7 zKqUoS9!6+p%ldiJaeFrN5K6(9t0pL%9Ijh#_P!8rWQq4NpN{a*op0C*`??--VP13? z@x*tB`4Rz;M;#+o7p<5?epAtDv-AW>{pB%va#DViPCJ&>{l@3ht3s!GYqr>C7csmE z=&F~uT+=Uh4hY3!z}dQINbCZgcjG*s{h^hxzlu+kOM<&Iv+I@T$=JV&_uccdDsN^c zF%f@&ziZF}L>A4de3~HI&8CM##kU|wfZ)85SnR(ls`)FfO1-4jmMsU!8B`9ul=Idc zknn7C_vf&5*;D?g_5fL@?U4_{h6{1xjo&r;=YL%a=gM5RvT+y~hYk;vmad(jpuxAv z8y6GwWs`^kD)?4Pp}^VorO;H4$ipY6wA3p**7kO0LtDk=l`H0p6I(;)UnQ@UTJbwC zZw3S^(OfKKx{xD{+|tiun?_6i%Q51OQciDLhqdM4z@;8M>xBxgTMxd%f%uq)?hzL9 zEd5knMcC~&lZi7!?K4wB&%_P8>(dL(C{k|)N!RwS5TVdT__Z^V0T)sOT zDP5Oh%Zca1Xd@N7XGdl8-W2T#y7RX5lyUHD9Wq|keS=(%pmU6xDqL+Zjsqv`EOVqp z0RsfGHokKe&p4M?l}OZnhXf6%XiSgjCy)E)W`WModEp1$XWxGIe5DMIGY?H9CSvvz zXL_E$`3h4j-v9IJ>OI7ZQp{T0I+ua~fG0nFN$BXn`09?j*{Ip)&2ke%LsN^}+AX?l z{;?(IlN#&^8ib9eC*$Jc@lea?{Vsk&Y9WWDLXS~G$GgiSrIB;KS^qAax+_!@TWC@}g(-YiO)`XfNV`Uxnh)gcB zII&~n`O|YNkkE4VQCgBoSyk$VKV+md_OniE7x`GJ(%!16tu^)`T3_9fo?7hxea!}9 zaLfbT;x4a`DbR8`J!1~hLO=X_x*Bp%i7{fe;yLmW7mR}?H(||X3JS@jv^Y)b8}fNp z$6*%A7sfnL%<_wh?rhiCF0iy^`S$Fgd0?r5Vd6W&9Pgrr9z8BRk1+s(WN&i+x?*3h zLSr&3&Eu?%R-Ef7P9%8r*!oxR6v*Xcor*1fp6< zepQ^c)R3gJYub17ve7D%6nqT4(rww-4_e{Qjba76JI4lxIHYf64SyGZKMu=MtarPVRrF+=-u->wtXJ?}!WJ5P`-&2> z3?aMBcR6ATx3A@PB70{O!~T3P>>p1Sd?I!-myspZyZ1txfe0~Yv-Xz&e!q(a-0YhW{QF(ee_rKS-+{*J%NUeP(Q#4jkyDPl+Xcc2ZQSun6Pgx#uW6cl9DlyI ze0g2xId4#A);}tqmv?C}R0&I6ah?F-ZHtP(x>{<2Q>uFAc}*fC2-WgX&AD88v0Ip_^<<1YK z4EW2Lto6pfC|hohL-cB9R-;F#mon`;EAn7191lI1`D_uff_%PpJpbzEW<_YkZi$*F zs%ret4GMYtAnUi>giJjx6ZJCGsl8b7NTCnZ%RBN3f&Xccg*G>SD40Pz#B2fzzu_zJ za_Ax3g|p7kURe8|njWaxO+zL2=}L8yA0oa)cjwwX?U=BR@f#x!dUj(n#qt*HjPZ;3 z(I@EYyaD1rBH}R=bNs(+d{gr*UC?;J5-nZEf#=g1psW0ue*>VPtfFEm!s0}2QitrVU|V=U>xmr?Wl=7z;U;?@*Ld!z z78^TsiUiol68u-YEu5cr6%rPX6>{N(k|Z3+|2Aw;P}o_0O)*Fg}(5J!v zVA#;aWGoD07mMCj;DyFIoGebXCJP&LLcAsqA@3Ut z2vhxxlXXwCQw1vKfgxTxiGGrx9QQ)$FT*!du`FvWx+Bh==~WePYzUS-sp;0(Qec(%|F`r^PS_95oCG3c3mdMT))9qf|MJfq|RSi_?`ej~rePLTfG@svj=3p@&w^bpWW02@NEV{-ulsw2DYjyU zL)22BBY*E<1DiS4+XqK`tr?$xX4GwMuZ!04^2Q%Zb@|_646`P&;ZZ9)wh*%Z#C`Hf zt?CdRf(;pkDbC`HwZWfP{tR=($m9C}VTj@I{Av05Go!l&oGin>TCw%98}d+ZuINJ2 z-*z@O-=N@9D*gd}OaNUMio4KX>wkVybIu|gOSjN$T==`%s<&4sK%upheUxB&bw=g{Q_S8%7cNDT#+dKZ3&W4lM3@b@=yEI0zKwsNQv z6r$vtHSYG=LbNRbKR}Jjsi-yK`kU1O-PdEIcxDw@eRLO>);|LY*M{8_qLOKmR6Fz>dg+s71`ucQmYH=3MTP}g7WcTDf zU36pnM3gyOW)pYx03A0=^l^L`htr%MLi?JpFpW4*Gn~hjM1f#V(Ob-e(vZ6LXC1wv zMc7TZu>~lH#W~U7^MHdAXg!mTg{&{{{_W1SdDpj%y;CO4?ES3c-5zS`iVeCem@b0n zj3!K98E-sk`~AC!)nhcW7NV(I&3UqW1rpY!{E%?>R?1Hm6@IOK%G;0q9b}dzRFC68 z!;*f_S+F~7J)P`c)LV}FWw(`$)`uSQTS90KQ0QbTzH|raQUwk*h#A&s7K7W9pC#d+u z*@agz>E!L+^00d(7ig*g4_<+ex*5%ej(duE8r=n%q>oY)^QwdSBFx6clhJxMOW8Hv z_qaF1@fPUEJq3Ta9a+C2FbsN{ zkC-Y8PWLXYap1i=xXCI~^~iWBzvoJt~-M4NkDtozZp5rFeV#NKw^1+o6pKg z^`_t7(FWNF4xO6;e}CWYAQOFlU*g5Yzb4XXNREjmpCFJr)%9E7_!WlT%WgW9;|jWh zU{B_n+*ziGcM?;~;n)PO&(tMVcT;6(rkH zVsG_cGiUyH?Vfb8Gp|2mTF4Gi9C73OG3+8*yOykGc;vGF2nM8m)LZMHtJj6nC3zH7 zXB?o6{U!hB}wK08t0@|X1R$g zY^MgmQRg`0a;9b>RfxapEXAEb?u^M9&mXT^5+Kd%#qstB3x(zkvg{8@PvolNb)GnA zdKNBSnz1@$*zHa5P`{0P7JtschBB3EgsCxOuX0zM(z_=Da@SN@I8(M7{X5HnK(d>~o6Bn5V>-D%>b{)IsM@{mo42TWbm#cQ6?gw8 z2QBQ@-R?)i($0@BN!zWn-!bB~=A7G*TT}`;Z(Vvhs;?w{NG4;%D3tSVE0dZgjed}^ z+j=U!7M9n!{*I&M5gDzvPwRa?BgvA7m)hfQ@8b`9(7DZ~udnCwx%s4*;#T&o+O^V6 z)k+c(BaRArHahHEJDQ!fR*Pnp%Z+Q&+)0YXXbF4zv+Ho}6{C~cHQ_qXM~)ln9MJiz zNvcx|^S*a@Uj{Oq)+Ah-CQH$z z^}X<@x;MNRU(tL2E<<%Eb(Yre_Hn8q%Q|$`GiQer%t-bQnYiNkg~Kb?6}eX#K=$>W z^HMeL=E%W2O`Gc@nJuZR{;Kya-p_krE~_16ru+NbvARwi_V*OxUZEicv}6oi^hE^W zSMwm>{7pn$khQIXHhQBUC5KP4ZR%MH{bqPCk_92`-S%FoBa+pl1V#^I!CxZpkEHYU zVULT9^dzYc@}-}u=xZ5ahXS4&`YkBnU)I6sKAILegKi12b+}DFE?!{0kUD0m@lzFf z$yZ7WmYeq9VwAZ@fduI`anerN9e@p1xKpn=eyM%&|1f{@={nWHCm$N(BAa^PLs{pd&u9n3x^dlDC_hMf;TH;ncuz3iY*WH|;Q`_` zl&`hxQg0T3{Ab*S3&0l?uQqiWXubMZ9!=xWU?(-?*mgbz`ZhtsGq>dANV^q+pKRKe zohMyKF48B^SrwR-#sa)bAIO3rjw*vnotB=S+RU+V>sg5YuK>*ELuKW?*jQT#Y{9#s z@#_AeMWX8!+=(09VQocWH2FyOTbwy!PYNhfS%6Iix+ar%4y@o71F%Tgm&|kN%VowE zK4FOcdY{_HL&JQdLC^yOHU})#?glRf_2XBl@LJ%^nkr^XnVfV4;pk)rZB1Vv zSJ24kM0URxDEBD3|NIM-!%I%!vGf2;QM`n4!U}rFHUi=s?=^75hvuDnm`+2Ey^Dwf zVdAz}*X95u2eGySGbD*+9;X_o-XFk})L-d3CUjwCzj|HgQZb{E~lJF5&cE4?-^=aMr+)UO-SV1b7yg zp-?4QsF*kba2r8k;d-nJaOCin?;{PUL3!A#Z%n$4-WqpXnL1I3lG4A3k6#P|qT^%; zPY~EGP&JaJq&oO_8lr80rT|O?v7N3{?7*E(h3M1ZZ}yamiimVT-Szr|xrK#~ot?OX zTmiw>kM(;%S7s4B+b2=Hvdyo;`odDyn2|lsA+zNlrLHW`6>s}-Fp}0oNfjm@TZJVU zBtZmi_2q@;51%v=td>u`+S>q-?+J^SG1sPLq%pWcA?lU)Y7~mQhasV!Y{wZ$d z2SmS_%0@8x1MgyNbD3R^51)V)! zE(q~}4%4kFZ}bJET-Qr&f|XFJGY5~C?RDO2_+S8!zixJV<5`W5?!>jarkPp--%=q& z`uxLX@Ki+7Aj=x&c023YZ7Q??6p{R~l3Ab?65o;KGP_~lNk^z)X}5bHzWrg&x$%(~ zDUHyH5sUFgTpwS3m6>oSGO`$Px? ztuHM$gsc`+!K$DuoWgT|dBYZ2Gjx&FZf%Y}yl+fBllS3cCd&<)AuKWiF*=ZV>Ywz1 zhe3{i-n6ML+{Godx(bIpUK+?t0eHV!#?FBfuIK#wZ2R}*tGz*9+Ks$a32w~UPaqks z2?F8jyaI9uq`)>885zX@)nJdn7XJ^kn&4)7-x{`|s;$iuSK{_d@G0WsAkqdr1K(Tm z>>gktJR`T9-&F3Wo^nw*XK+s|J4aJSQ=|2cyIR32>ifme7MoFdc7jSkW|xyY*UMwAx6NALJ3k?%5eDOb0y!NqE^(bc~(X^OGDmeuRjSAI+uT-JMk zeofYC4%$f*2invrwct1x=jEs%rp)JrTYu#_+20d1{O3(|+1w%T(o;&KGe_l9Bs3V0 zOJ6xLk9$o?mcW`3h%!Q{AIn_B5jzAx8zCMAVBck1E*>#b`6f+K?ircGKQP1GZ6 zB|BMKkZlOK<@+Q#be4{uPNABvY9FPQ`w6*f7>egqIpgr^l-n%=!!f=|zm4x*6&7W|`t896cA*BH``dq?FLO^Nm~!l-&tYRb zi<7YCA!`6qh!`uOb>G(mZq zkj50axo>NOBi307SLrN@W6d3raa}GcP<1=KiZ7lIxT^fgT8=XJ<-zbUdgle_1?=(K_kvo5`5GtYGGryl~mhMl2=Trg*@odp3KuTXgr@CPQz( zW6#l^Ki8BwH$I(CWi;hXgO{`t?qr^T2RBV3*{FzeKaxfKNYG-ZRV~9q&koXe>*EVP zwew`2zrW!-S4Yu;)!p9%>3hURL5S0P5;q((WQ&S8tvcJfDRXYkruwGoyltp#Ra`jj2+VUo& zPDn=7u6%1B*}A~$(ERvJ2yu`Q0Z~m3pdJbUtO&Xuzzx;`zoX619E?4%j@xu(osT`D zt?|*P$8l6R?6(LZvyXpG6Z4{agB$UjVt4i1+hIR#&T~&*vtH_99`m@a;J>;LYK0w4 zXD$hqd5Vx^Sa&&?T}wNo^i%)qIlchIw{-6G>0MH}eiPdu)&b2(IFHJmcKDydTkSPt z0sGcRNW|HL<0+}%Eb)bghOQh+v5IBLMgUu-^tP)>jq<^m@zxC!K-u+=B zBj^}zzCL4-(Bs=R#Y`EUcJlNbGX!-slYK;UYik36K;U(t`cO&a`vsnTX%5HcH4BhM zEj2>)GP2YQOK38YHiOt=)We4)e2#*&<-k5K^|lL8>*?rx+<|$Y1u!ewpTY=3 z+VrtJgTT3tK6y-Ck(m6Lx}h!NEzY#}wxzR0kwZV9V6Ve>8wqaH+pXsx7uWimSDZxo z5;h!P9noIv2FVi?ag1^l@=S0dREX*x6!#0j5YuUl0%s8gtfU^X<=-cR{BJzwbRDuG zN`EE%CicB%sg>T9yet>0J8Z#Pe(U->kBP%ax70Ag-l$pB-CtuF1Rh(7RK*;MObrB3 z=U}?cQ7AURg41~_6P##?P5M^=1yVK?ADTM|?99c1+gK((G)f&DvQ$tk0u!hrfqU7ah!TP>ZiiYv3ywaF zF-zehE~ahN6&4mga=Ti*3ZQDA!7z3>dWeF%7cARy?mwFZ*Z;}?szTs~5UkgSfg?#D z1kmeXkTQNjm}y$}t6j&tvdTB)aaZQ5SZ#0XlG<#mQ_~oTTNvNci=noDt$4D0QvONDCIxy-sIGoQ>$O<|f2p%pB7|2eVdqCd2E^!Db zb!?FCViCHN8ei@aO>BdcZjhyAI0=O_%>TUEE=Q}nSx{62oG&D;sFAhzldeMIuE+-` zq)oC#*#fF`BRaKJHIiPai?J?2aWyh$U-UbRhSB7`65bXrB%LF&%X%dZmoL+X?=J= z$A;WRbe<$ws~a^Zv84}%Tykq08B@1l%i@)F$sU<-`z~C}zOf!IYIBmxB zS=H(IyGWd>sFuR`;r7$gfrf0A1{r?Q&4T>~r;n`p{k~+8z!}-`;AtuD9mg&ji|`ud z5ub4PWaKkiZjSP^3kohbO_s$)aZkTLzdKSI_U&PxBaw*Wk!|F5P5orTj*fE|V{fz24!Pr+=%mC9=?C$Vo*rMki7M1AS? zvxF$%{=IYn(lgY#KKvSXYREpDc_HWd^B_3*56{dzAll-}Q{CYJcLAz}ia>1wl$BB9 zl?;z*Wv?{9#SF~r{;?|0-$uY(c5}n8Jd@S!x(;>5)3DbTN)fEVpZn^Ew7)=FMQdgG z7yNHheu}c^gt>kmwI?qdd>>H&SHQ@ik3!CUV2UEAvKqjSPUwrLwq6^v`0g>Tc2K9>F2d6Sn+qT>67Mh39Uj`dfvg+OM~gta5CAyfr^Z3i%gM>P6afC^8oTs>1}G0gxf&gA-TvBA z4Zy;Z1sfglqa+5P*qiCTW4dbJwh2&M5dnc(tRL7^kG?9~crr>dE;9cVL`{R}gF)jh z3LZ0CIEp8#PL+R?@|Xr4w8XrR=;6b&9oo_WX>J5anT^|GV$Sh&K+}_TVM75W`UtQ& zhQO>g4ByQPY|v~**m3wUj1C~62n7uxw7$8%M@dNuQ9y%3IV!*UIK+)3p#HFh91v1= zg(w7Z4MHrps|LKwb&znX0i4s-at|?puZ|*KxOFa0eS4mhzF(=Lv$Ycw%G#jV%vjTn z$Jp&L8ub=VTZafN24)@yz`$s&T9QwEPTs|nSB9DC!Q~?5Q4?c>Jz~=&V0k;LLK6ix zBg11CD9Z>#z9G%4-z3=3FnXx(GaqSp+LOT8ieK1;F0czJVF+N!fknajIc$58-l92ig&-6WPx+oPHg;? zos~tkpPSo!k^+~;f2qd~kc5#Sv^TtA&ty!(+u7Q>f0itr1EaET58 zpcIf#K9CfG?i_Dls75HSlR&VJq+5VunF~sluLUNLA=y>pzv?dW*&~u+Gr$s%xLop% zRxlP;6Qi&r(c)pxmslj}Ksq zh778gS65fT@1}6$#*KCWdw|wJ8^EJTHZ9=Aix+@#M@twN9qo%s^jdo~9|xpO6t`kK z0()-tnTDi}0yK1Btci?{_9*|J{HS#k(CNp(E@%@N&GNqciN`b`+T?*}7IQI0p3~BQ zE^Ma{$ja;>o8dS|ecF0+yaZ#-UrbE$=*@*IHn7$-5ca7#B5egAU&dx+R@J(^T-gqG zh8Q+UQv)kQ*32x7p02Ju%mO>A@RXDkX2600ew+M4oF}skqvpGihx|l!q5TXH0Kx%N z?HtXg)=w1;MEAxzhtG|G20&R_S|WV_V4*w?5+OT)u=;~WX$N_{?ltlC6Clb(n-@R~ z8vhmgDA*yrT42GfQEE$rDFMkW1)z&Mz%1{+MXsuJ12`PRD-W1e0YE7^3;ER;z!|K| z+o9yg)=AsWkT=uyqAw}KSiZR)M$G|OHG{YS>555NArXMMjv;`i@ zq0%3BQV^leaMk)WF0W%A_;*fV0wG+**~T!lu-E`O=nx?CFBiMrfltXzd@sB`**fl+~@l;p0hnea;n7R%g=DYhW3;(~?(g*DCGud^^@JSLZ#17JZ? zC6z#cYXDr0S)8!4jy-xAoD4!rNCE88${8ME--0-=Jtt7oid2F9hkSOBONXgftm5VHZxFt17f^EDInvL1T% zuE3da0OlA4vnscSwN@5yclQX9p=Cw>M$>b+9AFm$96=~R?hph7&}j67&dS8(-B9S5{eVdmy`JS-w&YQC8b+Y>vTDE=S}9=WJ7{>pzB>VU(J>vjv>Z`L$JZYV<`t*r8^vL==B1ijvJ0h6XKV=uuwV(C)&zk zw^r?<#3cjSm6stKo(V^9M4A=@r#DVmO^+j;LkPCGp7k3BhH!t?kmq%zIlciP3o$SQ zxN2)_8$bl&VEt_bW_AOt=`VN21NY#pj!v{St|uC(kM%MrN{2b@A2D#zxRCEy?lFEH zj2+o6GvJ23M^)bsy>H~8lhZJu!W)pS2!MrL2yPt~2L#Gr-(3|@@h&Velp)RUe52x- zVq~)>SCb(*5P@7HZ|HRci_Hn3LtMI{c+1eRw=Dq9Nyx_;;rN*e_n-mHG6iB~-0@4K zbnxM1!t#hT4mlB~tZv_W5{>RJgAPB@fDIu4nc`Mw4pE6vo&TaEbsf0B_OJ?fx_Wsj zfauBg1Ej0Zo;nrmshRi~xYM1t+Mfr5?hNt5a0aX`yoopjZAu`f-~`%mHS@uPH&#|w zI3ONV0E|cT1{xYxMVGvrLn1~4-3gn&<0l9$|Gf{@|2I}dBG*X8m~Fb{FHU<8Y+!NF QkBjQOrmjZOX{(U`0eIoRq?aH23UuvN&ffd45mbVvuj2)IgU zx_)vncl9uGHiJ=VlXN<6@z-bai!f5oBk#`_CKL9GorK zsTAR7fk99lrL|mOU@(nd{=pWD6aySMucU;8S(N2YoY z0)diYYaZ-ju(7dK@;FYYsHyW}x;n!nA|kk6!BbFEQ}+|0`vN~PnEdZwN(yz5ezDco z(Q!Ii`QUmuhadF5^LPsj8$00@6~eb~-yD01Ehw4g7Aw0up<63mpBWe!PFjcob9kSd zn*}$vx0!P+R!k=9Y&2kcF)MT$>_r>G05h)dczN@_fB$|cSn;b9+Do>yH&sshGLJkw zTvmn9zM+>1a}wPEhE#eDSHyuIi9ZKn0<$+me2y^+u0h4yKe<@Y1HiOm505E zvcSZ~HM9{$pKnJ3M#sm4ClrNPP4BIWvckHS914LqFZ%;5gJ8Qhy>_#({Tze~zZ7Fo(hfH>5B> z+5w1p8w|0*zD@sY7e^p_80kH2?V^ch7i%T%CRnOHe#TKr09| zRvesW`5{)(QCWi!-Fr}n63ctgGAC9;pE2O6pLyNosfL&SuGYI3{nlqVbN4|Ll9M*< zM6Z~9EM}G1;%8Fe^Qc%#Mgeov!|oqMpX~`(s!`cnq1WR0csadZJ0jXWsbO&FF+t{a zV|07jhpM!BD7I%Ip;%)>KeEI^0ITGsjCx&yzXRI zE?lftOXs=JfBYVpr|51(E-coAEBkRTK@-y4=@ubG*XLb3}o?P)>zaqu6?H1Pr z2M=c8WPSe@KT(~3ZgRPU?ME@`q$C0kXi4&GOHB<@68tli;&432Q+-HDeOwaur8SSl z8&VENGH__65=+ekX=muztB76q5a!0~=xpBmU8dae6ynmy_<&c|CpYva)5c7otzKf3 z?c2qlnibu2!R&FiFJt$1(#yOi*{~JD?ujqEmYAejuP>713E40kiDwFT+>mxVDbPNv zDq*~GH=V6`4~aq8ziRi}y#Gpg;{UiYlH-?U|Tt7;EVu|{0TI4JK#A?vBB{SC`b;Vu6@ zK}owr)2+J%C}DCMep;Wj^=m^tN&Mk_MawV|L6nqItTnPsod~&W80er&gOYN&QapTS zeymhu#{`U1&Xe9yta=bg(2*r{*&sAKZG-Ncn9PJa z9XTAy!0U4ra&7ptKFquLP z&e`D3W8}Hg4h*R%FnzgQfxmSx65)aD{+bVIf|DQNC&A@*;$HoQJ&Umm#& zWuFs;#_zXjwElJpOQ`_mQXMV?Mpbun< z@2W$E&PhV+5}5T&Sm~l7Psf{tV0{&q=={CEe5!A*YezQb%|uicuP#a8a}Z=)ow)K` z@dlO?M2xh+CZ+=fk5rWJ7bnIVDure4n)f#jpGE>Uptl>ikM;a+M@`=MTJu#NmA*Ne z;Tqmo2&ib{4ZFUp(e?2V$L|`5h>tgkcS}BJhmhxdX*Jl$VJ9#xhJL`}V!OV{N)k-- z@N|qCRAV@9WYpsG>RIc zj|b-Y-TrtuGv|0w?EOf`S2m!dDe~<5uspy%W$I9>xz}0(hm*Aq@%JzjiTdZcDB=Zf zw=4?w{9O}$Ws*@{y`797h2SpQ$G+VQ?3$@uy82$F-yN%6d6df@kqN1HuqyU&qtpik z7_M~A=-V9Q-;Tv^-0S&!oh*;Ft$DE<>}6Ij=l#jDCN$jLyL%qsv~{a%Y*u`EC;&>v>3t!2rd4t#dX*HNOF zm}+-C%Po57^wC41$ibic=J?mIlkBV@_{;Di(=ri(K#& zHU+r4bNPYJ*8mLnLvbkcazFnV9>(Cgxpox`j4@noGJNK~6kyO^sX=J{UgW%QnB?8m zRM_>w!F-W^)`BeWfyr?n>_u>d>AmWXl+W6%Pu>LgrmG}@k1y9kI7NSh)V*@F#TiM$ zbSi6-L%@@l+f&>g{B;*n_w{m{PJ87rN2)b3Ld*5C#`f1g#bM3O9!TaxiDG;%<~O`z ziK1v|K>{v$#}QACw-`6KVDFaH|Z9u{Qr3f!$eB)St7zDCC<#F)?cv^qb z3bju|BO-)EB7*hqGh!pI!4Z}QsJMPXm+NxY!ljh^54vj5#YUC(Hc0G9H(Sf zaBi~eABfu%t%zgxBbP1ZJ*6`%@jahBU*Ax3X(k_!z4Pj8W+u;H;x{wwD6s_6XP#b9^o=HD*;k7em4Ybv zDVOy><%{xxMUvNySN2L{ORhBx-n6|+)Df(mK4?<}&NQZ#nFTx&rlih2SwCsA?cAe-fE|A9jN5jVpr$XIOqPmOrC0f8 zIvJ5~Wrw)rE%(?e;;8(%wErMdOaNQ=X{bU~MQ@=u&P_d5AeBVg9-kmg>7I>=D@-|+ zo$u(dP4V`2Ra`q?vgEu{zB_Ce2~JQ%^gj;v@7>+W$JqO8XgzZM!FGX z$~q?>#f*EkqQ=|tg4#p@n1}P6u7G{Ks-(yZL7$P2+rwv%f^JbyqKEIcD+Gt)zrK^n z%2TZQxn{$k2tIpMx0+MxvM#vyEQ2IF$`rI(_Rf`izn zk!;CI=^y$yi|cgKEy{f9sM+DowKanIv=GWc4y7JH4jz6nrvIPA^^Y-cYF19{L$@o31+FPfx5aN9?g=G;K*M6sZ-b({Sr$V=oGspqy{l4P%sdO+Ib{fgntx;`s}=0 zgZ_9~>|K@22BLbA$f>$IK{m4gLu0iF!BkF~-j8)bE2-A`1Ata|xmsE1pST!#v@Fan z_br5{3NqGB-Vg{n|Mnt{j*8hEViKJA>sEsLdQKtx;Ghwb{o@;nh0R3?PHbD|VV+LY z>>Z*)%J0%|c@C=OatvsxfD`GLy=6KzXMc&@V{_}FbvB#x)8#-eIXfbE{ckSW(gP#{ z3OQ`g1Uphg@Um|N<>WzmI!Q&%g7sJFybf_>96dFj1+qV^&eave6Fd$R9gde4XQTH0 z->&af$PgT&X;T^wB1aY2$J(l=DPm!l^9chBEats!F_P+#!!z*zIFP2>&ZpCOacD`v z!}?8K^mx*IbTI_4eX-*S|DoZC`nx+m{@!+P42s`@dGUTQ+Qr!R9ZZ*tho zK=;;9!Zxbxa2`!_*v zAiD8nnZmR^&uDSWoa^KB=$E%=&l{Wi!mU+GwLjHY9i2?cT1xbWIZInCkn`P6i1pUy zO!eN?K>a=Eyu{_Rt=;FxTDiJ+-CsG!aM#SbwdK;na`ON4ydB=#8Q%iORSj<(*V{`N z>(~GI>mSbVQ@j|TGzW~oEio;Y_)r3Ejri83q@G$EU2K18ydTOkg|ME^9rQ^tLCoS9 z+ik)Hf(sf-$8E#PSscsXg9}rfw^4XU@G*daNgV<*D>C>Q!r|XOhO=fSZd5}?vq+g& z*t^4-DKOF4@T~h1ElNH7`)~}Q7}p=N9=F}je$@VRyypIMyySbb8C-T)?ojv*re%Tj zWhF^zV`O$fTXk)~m@4bg zNqhiEF+yYLZm#K5HcS~VC^-$DmR1raI1$GSE+CJsYIj^H2OU-h;LT1o%P3~H_^uCZ z*PYz!0|47@jSBWteUC67!+F&@*2jtyKL?#SV?rdDz|q>;CEhX}cl}>`ZMLe5r!rOX zclIac{JNM~)UIF6-d3B2V$7;y*RY!`Ke=y^<-Di#EllnEX9A6nZ{qo`hKtAnEa-9` zq^D|J#`y{0e$tYE*P12AE%+l3Soi{LshXn$5R(J|Ta#B(;H z?ID0BhDy}$?GR`PLvx>3KqAS?g1%@!J%`%*-2NbN{~R=Y>`;S9a*(AY0(iqMci0vH z;Mlj0HPS~(^1Knz&cb+MI6fwGO*!l-5?=poPa90P2)m9U6MRcyK1Q6aTHa;0T!HGS z?@cCRMqL2bOVHtaz)5p4HMP@Tk@fPfP|Z_2SH zAcH?kCvAd*b%TLBY6mlO(f#v)3*i$ ztcw!Ey#_W8;|0WD!V9JM`+VASROMHaOj)t9$Ra1Rf$f&QbUO&3P)rOxG_9=DX(RDG z?b(5Hy(S~_JqA!sz!Ue?oVY*w;!IKmxD2)!k~M}3U;mTnR=MU7vcjf~HCD%blCew_ zH0I#H9^k+aEF{{0d0P3+Hbyso#!UKr*^|0j47Z*+Zce*z!U=OEYMQ%rXakxC_vbkS z*G{T_p39>7e4skPmXdm2SAGRLF|k&d6?_d(A=msCx(pr|FfAV;p_F38NWUt*>OgRd z!0?)m2O}A=kD`M z<jP!iS7jQ=h@YqwP zVvv$v%@Sey0K0~URjPoy{2NojU9WQ!?|MJ$W)>tUxo-*ThwK3Vo$3Q^?HDaR4TINZ z1`Z3Q!wP&6()CLxrZ$)oz5fjShIdSl?EGxt^YhWX#xak(36x~{sqN@+RDj;)S66=g z9)-u~_nWEZ>Z?Rg1^TAhY{PQx_dg9f{y_WtQ7QC=9p8(TD*b2B63!DUSsHt0zWs_x zGkiI=D6K33F$y3txM)(zUz?xL6)cL1Iw3ahcr5o_4uTh_AjBv3l7&!Cynvr*-TtuY z0{~u~@c#WvB*C^l#C>FAO-;cpM0zvqu`!axpPPOAn=-id_sh(S)ivTh@(w7Ti5?oP zk>BFf3c3JnsgXL*qmG4lV}*WOpvy1{fnUtKxAhJNJL}~-u~bB0hm@pTHnF6PauldL zg!ik=pm|)9ZSm35{bxjELKfwQ&u)ExFwuQ+-eyzGfSBwp+;%bCw8AM&#VG}?turrU zK&9#VXBQJ^hur2weT|QI#NzhN+ZaS2x-4=^_K*2XmNzw=U1Vf9R&So}FXs#ujClj> zx2nq~Q^PS3r^+~SmW!15yl+hT&m(;kzVBW#c1H_}HeU)yEI>+=rt!wgQSx=57Clj; z)3X6kH+xdv;^h&2sFa6Tdd{=3w@yuM?A1=ah|s*}vE`+Q>%K?1u2t)laBqJK$+H&Q ztj!rZ8Bx>g=F2d(I)6cT^u^(3Q#^;V^`y6%f6pnM zUnxRc+E?q4Gv@z3yNt|Ex}t1Q+Erun?sg4r*f(#Z69D=4qE(R(Rn{p9H$pCjP7V~k zB;0iGZZ&z5@nk5m$Rx+KqJ9lw=^Nz=f3NNz=7l5nVZ$_hdlpAZ_{|p`M3JZZ8m$lD zU1gR!ZbF?Xtd>2MCpS3zaLQ=1Dw_sDK>qIu2KQFe$#YB{8jo|`GJOzHW~5mX*RyZl ziOhtQ;!iBZK;%SPW!l~!Q*WgYmsrLt7Bn3_-Gks*=H zaeFHnA2Yc#b~n-O7G7Rf+w2;acu*#SA{hB>@2v=~WMzF#x1O2|V{os1VUixg5$2#K zuBK>ieal%YM^B}fx?rnh%*Lp~&TT}(`HKP9uyX5Q)739edYlO$>}lmvS4MNi?HY2P zE{fXg!^QQIr4@_9=LOPdO~?DtYPioATrI4di1$?6+~?jIKHL~87q@V=?VcE2Vx=Ud zYx@uF)l6?_HK|s5yZZa@j40F%{`T4?hPFLF{YG*JCH&A^c`4If>`oLNPW9{-X=OHL z>C10~%)i%Z2+XZ>b}4(hk$U_cKtIuaXd2lQ1Org&mP$#ADq_s{s;{TA(dh@2ZvaeV zb?3U0AQj`I_ zXlTgN))u{~Cn*Edmbz%+)m#l|#r^Oj1tuBM-971kS%q|I#=y?o4+96Yxa|ta`El`e zMSbnYUT@)%Br6us`O)4QzZP78RPrrN2p*WyIS3gUm>W-5tT;WQA4L4XNp?xb!W2FU zEUu^^aA>( z9WPf3`ztD9G`sB+IG+cX$)z(a;iLfBnc$~_F%+YR_R=tK8=LO^Er2>y{Oztv2!*th zd+wF&+zaU8w<+c9h^q;5Pnq^04CMvrk7;EsW(Vr36SU79p04Mj#olp>$Nnk#f$8gg zeH5E39xmDHwln(SZtiftfrgnGtti{uI#}lo6Og_DyS;Uj>EE1iLkhToZyds&Rd+n4 z8t@bWECFn(_=6_tIOQ%0Io#0MpT0hq)>`^8M=?BL&MpYk;}t+%|FKhgudble!1k^m zWG;&cEc4D>jTze0b-*(ru+s!f0ndKIj~5d!JMGwmukl?fp1i$oUUruM8hSCzOo62K9EG}-+W21D{*+kgM*s~-pUp9> zb6L>ar^*AFJS>ur^tZ20q$L|k#}$Cp;;~z79<}@d+N$BAxt*O82W>qNUF(#(WP3TvF zk2MRVv()YOE>h|h=ycjha0$3x6n<(;TRb)&lU!)(WKx*ThGJ`EUE|{WvK`4-VFk3~ z;`bVxD`}i*?3{gFvpkl(JP+%p9S>$WeSzxj&2-08s6;dY6+Jz4+P!)|?P2Ym1!6=w zJs?x?lJIXuV^4PA3wYihLJLrw;$Cx?y(q1G;Fu_Qi;CS)RcGpgs#JK7Oo>7e;T zpP@)R?#ehglF8AUUD7hZ)*`3ALfi7MH(AyKWnPG^GG!{)+TuD5=)v3{Yq#n;?~k`~ zUbRwr+`CD^al9KHhuDSn-Jce3QyIsaKV1y*YWakhiGZfa^HZ4fuRr#zKU0mhepMB- z{ra#i;_Laa^jSLM-M8UvOML{oe>#SB%?NXr4b9Pm<`RFfedb2Ba*a z+GpvsIA}^G@az&)C&FHTTyPX$vp#QJopj8w#{L9;Lz$;(wxFz06Fn6wkB4brR6CI9 zeE4bjP+UdC2NHkXO(991$Hek3F}VC7C3jKvwNQGu))a4FSY=ta&XnC&-Vey`0g&Mg zrg!GYlU(-+XG{z*UP5SDQ(2q>Z1Xe$2?c<6ifZ@SRIOkCh$BxqcIjvAtTK8p4u6u? z@#phrp<@Km2aXH31nb-1A9*J1_NPw3lQarL8VPn%i{4h(N?o)<$4eOw91Vi5fi&`b939HWmOXpov$Yr*QiDh6*&py^gZu{ z-!sDx!CKqO$j=E-SKlzQDXJBqse{UGo#CeG(K$Gv>4o9FnhCA@(kf+gT{3>G+Zpo= zS6Pupt{)lU34QkY%*y*O+1%t*u)#JnvH^Bw`eMg5fn=dFv8_YwQ#3HLY zsmOLpOS~>#z<&GFvIv2-tjYK*e5V`wTa-v!`_wm3^VW(*Hfia#W;kGB9L)7WvZ@rOHIAst7uw z{Skzc^!+`HnWsQ0^OOSw)V#JhvGTS=vwqzB=Y~1eh0V-w?R`lwyR>^*rJq8_W6i9^ z)U|vlIR$fvH41hQ8bBq=m;JN<9(iR+nYrN7K)d^U zZZRP&ZVg-h=g(pbs}fxwyN&Jj+vgRY%7AuIUx4 zB`~A(3&;|mD%vadyp@vG^G{Y%W);CcY%{ScRirgtobHdqx7zd9%c^b-aeD^t7r;3r znHeeZi5XCLa5f3ZoMhn9CQ=}Bo3(u_lotP3o$T!>Z%gPbSeK|CX zN85EjgMT3GJzqcPvCm?$2K?DDML}i;AIsU(-_W zKWV4~cCq6%_(WCjO^yo}JTW-M;(jRmqU@ik47$}uER41JBZYjKd^e;U8yov)U_cy@ zhXL?v>(2A?QnI1dtyN5D{?FxV6(MZ~62-g1E-7vY@{>O_T~I{C;WPW1+8|b)z_I+x zC*FmJH((9YZj&)J4N{|6+vWF^u8q+F-Jm|H>$@Q`iumd{%mSRn9?2qk6u*Ur%Gzry zE7%vMLdR>qS{k!kUiSoNmztUl0nrCiI#~sP-Rq4iPL?(88*B3k7X?a1QFrOqHk-`f za=hr2HIT}*aG!MDc~1@<2H+E=C{h|&r)CpszRRe0asUPR<4XS&fq-s*0+qM2UqjGa z3$Q8yT#-Z;nfO5>6bqnKuRju@3`$7!w(0%EUpPeR4tjs$uyQqztKq0p6qswhtoa=F z$x0O-w~TReSHGi4+6wN+xN#_`r>EZoKHfB=_%ad0>?9_ndzQj$}02nY=lkhgmJC*2IAq7r2M1; zJD6#;kP#FsGK%%<>jzpi^M#A==;XEtVD+H)o>(|m)nH1ZKQl$+1LhwK*4BP2D7?2S zabhbd=rzf6{S6n!%VH>Pda(u&Cn7?jp{wzS_i<#5V#9AdhyviJ$a4i;VpgQUnpMqn zf5K~>&pp%(9R3p5_>Y^J5gWX(w}UTK>Qt8V2huo0)URFD*~re8 zddz1cc>&XHN+%Uhg#D!ZV9`f%cE+$wrrzkYF9E5=N9+Q+ zt(%$OLQv@MYJXV?$U~Oh{4W>3z5Sr&hu$6HsN}c8ZV=AJMPG$H=as>ZuE+bJ(n^c~ z|L!ouN=2>ov3zbHcSrM2er*XbBA!+LahTY&7=(-pT)+mDFlfVmOcHQ$n&qO2sAe~| zu5&V}nr284$=g~sbgJfbH8XqDzxNLdZn&+u-fp9@{(y=aeCaoso}P&!k?cLQZn6%J z$5de&-#twj`UV&Cey1CA5?W8uy-%*<6R%)az}d=UCTpoQqUW*urm`Z=z%(Ke#m6^- zOY^7chUH*zMo|uV6AYE%+gAhaqJB5IDh=Cf(VNFcS0w4Mk&2_ZBecwgN=W2hZ{JyI zrBt!F+#ilzmy{vcH+D7Bzi>C<3`09~G^I125rh`^hG85Jh#a@G&bD7_&H^fh6OxpBA@T2F|_pWSq6Egzg^!>7TYD{}=$gTZoOD3iZnbKsxoX z$e1KRa7-(lO zmUMG|i18e>LGelyrL(S?K_#y|j67DcT1;zHS=IRMeT610i@q%a-+FK8(^AJHFGqks zhnRGI7=a;z)D=6jJ!;T5Zs_2&g_%UQfVvKv>oJD#ttm&Nlc0~yp4#n|bnRjU!v`E? z3BiKjK7FWKT2BYICPE2>2Ln=r>FWoVR|Qm2QJEA<*Vj*58JB6Uk#2pcRKG^Lbn|`< zKhg?y`wUsWui-L0 zT3E5kBH)NIoAWU%NYJ&lVAVt}E;_O>BNmZtmNT7Mo)g z6Wj~=3)e4@On#Y7q?H_^aA};jg6-Bs4cgn9FFwo9e5*R&S2&29&;h{Q7+}HknzDxN zH{Uw);odMa2l3bhhN5kD#bf2xHW=&qs--b4Z#|rg)02U|6;@_QD}egq#r1e~OQTiO zlj`bRQ_@I9$XQvtIv2?^lheW#`S|o4VNb3*2I4dRtS(iXh!>?{k|Fz^1dZwME2}#> z-CX!}@*lJ6#E^6BYwLlMh5rr1ji!hNH9)BJ_C5f#4d!Y+OsXqv0~3*S%mc*-nSWq@ z4K@fo`_lYT*~Fimg2NPs5xy_0R&wVB68+9kN}))yz(`+#s2;SSXrU3Atb<#AHG=7n zCAfi)OcW%Z=c6#_ORDw7{7pX-3&PU{Jq<@`1+TaF;CCd)v~zLLlgWyBvZNX~(d5n6 zcrFBL(tK-96QNn#+vs?LQ9+ZxFr@Ir5Mm#T+q$Xu!Vw|jRDTTR4#XBMLX z(A+v5DU%!s?BdcjdN`k@z`rsmpLdbS6*MApz3@3NkJ|NUfq1dSBkkyXOp3y2?x)qx zLKC;5$feqX^8oA3UTG!HymH=KWlbV&+F2Wq<=66Gv6}7n)K)w?qRIZwlzwB^A-MH3 z);nBiH{3~5f>jRLY^L z=j)OG0PE_pQC51LacDI^WSGPhf+*hLfLU2-l9gp{=OTl`;l*WPj#Gd*Vj~UJl8^`m za1h#jyVJU4LP`oP28HNCyrc(h>{}9HH@`8U z_$Rf@b1QuX2aCO<%soU##=ZRvR@>vW0eiqN(rTA&#m#*{=R7tuL*#t^u}tp*}<{+5fRbJAw#62^YE`Rb>-v~2~QBOZ3H=bap7pGxp#UOF3iK-^yY|nt>fxPfJTmJ@L2Ynp5SHC{)r4!*z6jb zo0}WS4N?p`vngcNr)b&j8$Yy1!Ln2HF#=kNp$Bv6M6zAwQEcl%73@{NQh zB7<+FF>Uiz4|k-%QkxVAPpqAek6p70rbmSUhlIm0aH{(5V)wJ%e0`{`kn@K0ybBZ1 zGVrIbZ_GPh6SSAN{VO!t7Qlvbyfd@xE2ZkhJPsA@f{g&$-&$lEu7e|YvZ9dm=1J%7T#GieRnvkBK zt~;FeN{ZlMc=&C?NtbUVb(d%eJ{6HrJh%%2`x05$KV4mmIsL6R_dr`GC|CR? z4Kg?$AW_@c-bW-B?24BCnQo;xj}tlTgSVR*`G%&6FzgxY|g%8Ifdk^v&Fgyfy^XO%N zNHZsA9He|dyk${0XNTULJ}Dw;D15rcDeAH+IqEm|DdZ1QXtCT??zgAh!6E@Zx zE2qn2mBjRqi^_8a=mY_uPeo?~XewMUY|AUr%d4+WfzQ z%fym^ka4JOcxAg%koGIQ)D0qutFrdeZ&3)Klw0oD=5~D%pVL!lw?$;RzTE{3ZPbL- z-sR={?cq*64_F}&l4};356Pl{>bd}1OdV&rR_bw~KjrK&@`#lYC|1Z?gY_}+@L&vl zu^+z*g7YI8ZvWxG^vmDct2?J&{w+?;j`%J5W~rUJnegm9Hk16^LPh-*I)(j0hTRv1 zJ`E!o)V#kh)w`jcD|?XfYfxEArc~TJa-G@F$4(Rb$gs%^C0 z4oL))C+kXmzbc2)GDfHpCS}-tU64;77G!3@LN0H#ovUZ{byo+#nB3n2w39BRPRsy? zfO5CO+1qV+pzqAhf^W>Ztw z%3wBv0%$iB=!>dL7((?~L!l|Mcqzw&eU*7q{0E6{LZ;~g3yDm!{nVda+>ku=ZoF3q_Cl-w>~F%pT3SA z^l&Amu7l?zB2;n1n{g9Q_WR$5Poh;Ms&Y_*`zfq7(3W(59wATIw?#08!)kzZjQpYC1dAYySOwEr!iq zu~zLXsikE(3QrV2doI2q28b`tO~$12Ks5#{3d^^Odyh|08%^&+?OS*7AvLuu*~=TO z$E2y*XMIGdFN4v^S=doM*FsKPa+o@v?F$Fzhq76hDm;*dK#68$rZxa}rs-Vy?M0CbC zf2ZIo+fidk=?(NhN=)uk&5tah86U4!oxAYn+aJq$d3m-`*uY9otx?PBADmM4EBEwt z{z>QzM(p)-s(!LDYa{2s4778ywdWhEihg+4NHM6VcIxh7hqo9%v3?c zRkiHOu@7eK<_nk4O%5-sG~{^uynRi1N=;3@KBlB}_QrPpEg3827vk~duW~8!1^Bcv zgAr|AP)U%8D2RAxQe$)8#`+@O=kms?LaMJj@`;~BRwMh^$cg))z;01cR;U0$n zVw3PCA240u2O2=SLegUlG>gUF=<&*@rqEKTa>0l9%Nm|LT zbfX?%lDj=laU)NU_tjPtbeY0lIE1>6uwj@KN8owiE;0&Pq`JD^lc|~Nqu^}K85?x~ zw06bc%HSfyC6qrEw z!@1Qy`kdeR8oI0PJu<;Tm?{q-S@c&MeWNszFqIwIRdhHi-%j2(HU0dFN2uqDjX}mA zs3dxe;Icj3Q{J$&*IW%szB3)r20o-tE6%R7WhWHLP%D7yyX3X~W&r?Z{6P5%h;En* z0nd*&*B#HXz^8wgUSX@CGO#1vUGeNKTpW^?x!^K#ewFD4Z6HYnDVdnicwg>KUNr(n zcK(*&l8}(BEpbrGz6NeK&oqLIX9x%R^t6;By7@Q<_HAy~1Ys+{YXVTs#%Ez}E-Fpm z8|Aq5TyefWn!TN0w45gI$Mya4K!eyNUX^7+!f#=(8evZUaTh@P`KnCM=I`ZLR=*-> z7pmgyk}Ao1|DG~1HI+ak_6#>EBl4GocF`WBG=>stKTKvg3Aw4KnOf=Tlik%#ie}*P zN?ZU8l3b?tf522}{z6Lvy}PsAS9@GRIy3QozOQa;kOe$|o(J)O(t=yssb+XmU2`KH zp~{^Jta#qL^{X|zfJdM$ZdT)JlMW_-Nl`^*hchZ_O(z^Gb7I`!UjEWTmm9yoA7oP* z>stXVG#R3(L+j})I{B}Gy}i9v+rY|j82v(My`0iwdpMvl$-V>$l^n7gE6kjpBI$aJ!k0W&0g4ITua5}dxV4NH4{PgX>MJEvg}?*o zZ4IcSYluES-5*ECy%7==FdetDw8Vk|0raD8oQ5`22&X2NH#2MOz-r{LGF?WHd;O_T zYL=a_`~6+BAQhxE)+a^4Wus$%tGxKnkQT8lP{0;lnD3y-a-q%J$oF}4f0xzv{X1|e zP7w;_)2aQQDgz#wE84EK|4vT!FtW(CdMa4}xPE6h!EU*_`*Jn%#{yfiRe+yaL3QHY z-;%T3vN>(TjXyh3h29>iNCpv4t}H*G?A^GX?ek*pfa*S0^$M z+bu9G+aEVEvbc)r=pGABNZDRn#J+dCMKFQn zBHkbD?f3Ss$4eqx0CaQaEalQERRcl#bu}#)+_B*Uq-bxd{+gvqcU z&!X+!XC!!lSG=_7s>Nib569`5I|-c3&aU33TnxyOYyZ;j-{zj%k2wNey1{P|@Y zNavA47&38bW;T>8wnO9pI^mw0C zxlKQnvKq<23FP^4a5;dBUay9dcW?A16#zZ6;8l9DTa>Hg<>SV#KERS7O7yU~cZn#2otCW{fw2Ax7O{j5!pdzWl(v4mQ4kHiCeR z)>Ha-|C%6L{?;~pGyyD-sbi!R{JPV$R}TZ|t#yWz-N{mo-%FX8qBk%iK3A^ubkxqd ztqVk=%_kq%+glgruU%?6teMKv2Lyoxs=bY#X2>+{&uNSpbdt zEL-tduC?i~j**em*&CSOy{Vk7`K4Rl#To;&sJ)$hJ10QY+1Z)HVM!SMjUe7fWI&sN z7B70o0OY5qcl(w3-@kVb@cKjnO*j3m{ppdsi><8-$W_|f!EL;K1f7jQ+{)Y7mT~4b zM7LN39Ky}~^3$vHf}r;>FR_K(Ya=1Ka$&F&2<)xqGFtFig!-cy_T>A&ic7e3AZ3F@ zOW$~yo91PbON7yU<#YV+7_Say;bDm0St`$MTydP_s%_U__lSziMT`mxL*6r`QimMK zP~~}^nyROP#6k{P1awJaUQ4`rrfYN-lBqPN&(?3{ zbmM4q1+^^X!0K>(3x*50DtD1hQ2H?fc0k9m*pd&d2q1*vcR$da5e1$BA0M9zWeOlf zq@Zzc>XySrM3ei}1U{-?kpr!e(_xrM?nlWEfRnKrST{MCIoTAjwtlce1HAUEwx0iO z&hsq=OeX|fN__9OzwPD0g>N^KBBpZdTz6H0 zUjMp9RWC`B1f7~@K>&mJ-sF1kuuSb9$fXhqh^RL;J<(z~0A4~LoHFB%mCyi4xU_0a zQKrhYJ}YGKt|rQ{b-m_W2n?t2=U=lSVAT!@3k$2)(bLll)|N}oG!^)Gd)w>ksf8Jr zK^^iBtIydA*4}e4J_j7?A&Y`!vcB)osaB&SmH*?ufz*PW)pB_8w?IbA^ti?ftr&O|fj0x+tfIJ8f(E2V|0P-MC zih#exDvkRUEu#wyF`1c}U*p9=W1HLXX?g_cWa?$oZJoJ=y?=H~AY9(ws;rJQc{{$Z z|B?7CwfXqCKLF~Ud_Z4=?j3vv@KY9x}LT>L41N$P@9}Sc?l%wt2<-)H#_<9 zFMsj?ct1Qx6#dr!>Eue_q3qi=QoL`9Aw)$@S)%M^rx<0IM3g1VP}Ue*S(2iWkRoJ| zsq7N63x#YoBZMK6T|(A|v7GzSdB3moedoNtb56hd)nw+GXZio{`?{~|zOT_yo7&JF zavsCXr=s{GAc@&Pv_;xu+~+^Y(t58FSyHukiXDYvsFn<-U72&zC`0r!-F+#8gEl#q zuN9pAyu6ORgTBP9ED?l0@%uR)!p3lG+m5%3T~<+LxG{8#%E%#xQ7T(~S^;~!tXA1`n8I!ZqR z+$r)9a|{7Wk42Y-gL52@EGeVW|Hma?Lv=b(e4gvbzt_O5Yb6ZZquaP!v?rwWA3bGe z4BmK=du+O}FkPG3}~BMGl}y#GydYKA8U^hEMOAhBlD7Lk%N&ev8IF;qmOK zdT`xm&w<5YIm;C!G{S93|;MedX#4ip7=SmN<4o(tYf zbt9%o1*hU<;vZ>%vD+-fb(44l_|wB$qK}x_3@@0DjC#a}<11^C8a>1QvP<`+juGfF zPwxJH%IINqyR?6)JGsst9>OnfVHb@h*OM(Tb}CFbACeZxIvDFT19D{$lY~iuEcdk! z%~DyH3Y%pNuYWzmjY17p7bv3ygkWjy;?A@TkZ)^V!o;Y^b!cE-m}QI4eE#EzRq}PM z=F#S*&H*7l(OyXF)={jeva=>!<-?4Zl!}*DF&8F9&8Ydvarhj(C|6Cmqor%_?0K!^ ztsY7@Q?;jxG1M_P&(6>)r4%`c1xl?FDiBY^*-L&Lgo}lla9$ezlu(7R5V8p z5bvkZoL_Y?1+EA!>_N@R(6wN=g?|8pA4Hi4EE?3gdHI8P@ejBGFSKbEz*`rwNASXH zFN0EdY~OuWK{FKX--$g!XWQ(Tb=3AGCiB)-mM|&P%J3iZQ)M5`-UZ_uS-;Qb!;Le{ zFum@2uEmsvf9LmZ)R!d`iXIj{QSNFR&i3fzj0^8{03UYBfjQUOiP85@vt@EPR7`6 zzdt(4+p8CSS5VB%hEdBZkY`1SBMCMeNXo**w6sfPy(?FIZ3@j~J~m&FG4v_DhZja6 z#s%lPEVnBy+;?~5&b^F=PY5SmRjAmJUdRz5BF;Mc!w$=HQeR7p8VE-&h(Cb3rU#OL zO+zT4AXMFViY=q?)6;kI){1Ua&ky3USg2of%u?mmFqqkz8lh7x{=)4PKi}_REkTBP z4y)ALvJrUAFt}@tl9Ue53QXRTKA_D_)!W%ofsIf!^3!n!gK;gIub>C5d#L{@2tFcNM|4D^K1+F0azVd!!TA6naB?>8_K z`Zr&p!zk+aFV*}40s?ZAIfbp6MnVYM4(Aqs2k1$C$&WTwBI){B&J&&-@ad&9RWyG` zN!0VK0x4U8l>({ii)t84&9LE7;K#Xhb8~&a=Ql`PZrxuwPg0Cm^btcK`;m*qEJ21@ z*V~?H#ml*)1AkV0u?7S|osGJIz>J{_lm~5?D>()1-KD5_1=IStObMRxA5$EMmTnl4c_?K2bGnbZ&~6ah0Jb})Y;A2DBZQ3sH6_a4aqX?7bWbx; zdaRJNV{rUe%!}K^6=$V>P%3=H`2wld=01I1F1-jI-?S1^o!=BI8ZP`MR`km}7N!T9 z#4RsN+gVY!pr{%KK?da8!Em(_9I0&Xkbd~)S&~k#ff&N(~*1spxCQSgN4H!^_MQ;-t9pg zmI+Web8eTyXXA6jR>6g3OI==FJj%*VRpow04b-^K5(?e7OsX&&n(x2tak`zt0|&B7*3z?x}IG0uEWUB>{Lc*qwdEwiq?N}@}=c{_mek?ZiBD3m}{%=oONU&~456Fw z{mdgaROa(K^m9zi=N!&NpJ~QN;tsQFXl;Gui09F{KoZ3`LlBG>{pS)!O(6DOFRmJU zqqPOhvs*%)yioED#+0x|H;|L@?4j8O9EMq!qM~*{L&MwHSe`PaLWeCnkEngTXyR2U zoRN!^=sW?$x4y9uaRD(kQ|oq`>rOEG1Y|HK6EClV={RNb@N}rrr!ZmTUm)SJk~bks zAL$)I;@hX;{N@iM65OcgVvrv??3>sRzC`}#oEKV~U)NQT$fl=v>IJ#n>)riFl!{tQ zh;>Xka6=UkC$h{tv5AnCewlM|pbXiN>}G__aWR?urn*~MPWyy|1sN0a-)F5@&HawH z_BblJx@>(>5vi<-!3e@vUa=!51FUnrLccVpazVk+-Z9u5@*47SMqeYlm(0=ZTS~D@R-*w`M=zN6$ zCT7AENM$d7{9sFYkK(0s!S;&|=)1C=@JPNinfR#&65uS5&Irsf&nL&3$xZ<s z&SO-w-@>=0YzlndpPfyOxw_x~>)R0OV&08??kO-wVhxGJC5jce_-Ue7Rm`tnM98lE;hJiK2>=ydjL z#FVe+pXH#_l;1zY@Cgl#tpx?ds5X}`Rr}IY0?T{tk=yoIGtA6_Y3JS=>g>?RJS$Zs zjq~4Fb??QEvb+FJ=BfIfoz%{fs;zXU72Zda{pXr8YORs)kw1(6L3wqBV`;iC93m%L zRaJFZ-sx_eg->4ytLiG-R8LVYB-YvY(qw4n+Xy5k>cGden!AQa?Vcs>)qodG>JWS% zv{Mj&K%4)K6XM_6B>wipwliit5>P!DU@#{S=PM|pCMJ70;Misq*Na}PEl_?tID`C?T-XHH%5ExfSV*4u1v zXHFe@_{(lEH8qtU%=zXk0Ab-2Ee|Lxc>xa;7a-u*oPRz;Kd7(@I4*jg9()IMk;Fz0HdhHuWu@+~} z4B&L&yBago(gcA#Ih-=~?fY>+b8>(K%Dt!Vp4dOo>p7j0L=cHjU#?b@oiMjcCjyX%X3pxo_8NN-gaHLoBTYX6h z!D9rTvr~kFiwp4}4Z|t@<{zm74G(Vy>%*fTJ{WTRIF(2$WHM5S>bi9J6ETcvposIt4roE}0-D|mgo4R0EB07VJp z2KH`8A40M;9YM~W0m!A=!|8i70nrS;@SOyFsNvbO!G$D+?MVt=Z)BHa1z0HqIs3<0V@k9K4M*(&u_Ne30LA3QL&@nDJv~WT3WKtq;1`4jp=g(_bXNG~GxsT9#&^0~W>WG9o2yHdFXi(~?Sdc!k|GU_gMDQ)kW_fZ4O)s>uTu zhP5D41&pjSvGUcuxy6+4Op!vcx@nOkXI56$nX_jf)RjMA2n-3`Kuse)pc%Qj^)Q3AJHO7q0KZ7k z+n`l%Oj6FuS%!@ejMk)&bZ(5DTW8r4^jF6e5J!1ykF8b*xxtU|EdnADo_2nW+yF})*$G|Nwuix zxM-<2M)=}8w8MXSBo1mRo8Dp=-y^zxsp>Ak>JT6Eo=1`fJfyk+BpDz976?7$Nx^a# zLe@0o9s}KjLq~e#Hz4%BgOfy>euxp_K5Q7Lk{tgP$cA7Rr5in2x4P^?i=5k*FPn$v>mEW zOdItXjy>%9deP)#8P0+J#63Rc3#+gUKL$=Uzy#sS(v+xc^_n;9#oagbNy`)IDO~%Y z>#f())KnPxka*%m7%={LxcD%5ztUhJP~w@;GxUINe@~H<5OnVgTKawsVJwoW@+4gY zq`(ja7oYAs*CbT0y0L5^d1KxGW2!pSY`@=(z{{f9RN96=jN9FP@ZdplgXUL0{yto> zHeAU=l6-o*L;OR&6b>PMeD;g-tSRXn$Zj^E()J&371*XCSw2g`0w|H=<(&_X8zbcK^Xik$m=AoLoUDgn zp)TerBHQo#bho_6GccFnu3wt!trx$stOMy?s6UYAlBa)IM4VifmUfDcEu8Dc(EWw@WP~k}K`n@|zai zG?*Zh(hwm=;%7%aQ@*Q)GL7Fk^K^y>s*gHM0FnAoBlKxcS5spg@pRzhE zgv6D>kvJ zlbyLp#cV?XEWl$1=}}DOx-`AUI#&;m(S|z zo2@q8FRh8?bsi)&X4tY;_&w0?xiJ1w9Xf=~-h*g2 zd`mFF_}n?+4YF{B>&H$1$a$ANGFoV103 z@oEQ zt(ROmGB!38SG|hu_NGPP+qQ$CK#VaqH@|oAbmS8vk>Tjkqljz-xZ)+Ka`*Pg?gU71 z8a6e|DBp;QiGg1EGMBs$B+{vL{iLg_)Y)Q}kdTm4Sjy^4lkMpSYUD6{ zhYTSHQvXZusSDMKY8Wjj-ciq=!;-gwI@Kl0tzzo<@aSl9AK&%y0~@@jF;$30@Lb>k zM$=>NXvyc`!NI}ehS%2@=TeO^!{GmkiFpKVMInIyvZve;@e$}w{)6C*$|?!ABC z=dR~baJ$x;F~)qyJKiyN*jHIGWCT0}C@3go32|WsD5y6L;P)*!81Q$QQqvvy!Q&*N z=A>wA;^eCDU<@Ur?__6X>ttnaK;mNT;An1Z!^X(N$VyLQ=Hz7O$jiiJ{eNy?v~@6L z`XKve0lWm>PF&p)3JO&p^5<2NV4*qGD<~)lVId{A^urA2bgY^8ogI~{F7NA|ZYH%S zNl5caasts|!u=$RZxzvE^6sKI=SvTd0{DrvrKdFdTGdfa-umCQno@zkP#-P*U2#W565ekQco z7lfB<7Ng3C+T@iXnHH%edI`Y-nKVw$mWI$!@pV1hHcNIq^;S2Q3|?na5)!CH$wZ&F z8snh?VlLx9374y=guK%`4w!GhgrLZD6w)XbVAgZLNN$NReEaWx8R$sM%On5WXgjty zRT!ax8S6{45m`Qf=!dh7j`m-dyL}3`y#Y*NgLDdOo#kA#YzFT{u_Bd5qm6dpWY{DA zJ5wu>|F*?p@Pd`e-emsX%kxf}?GNxInk4zTt+11o2!i*~-c$mECbrPK!`bH!d+p57 z(1DIOp8En|pxBL`ku)v|Ny*or7?auby8^9ZvRIA7f8RdO-Bh*xoo4s zleCH9ot>Y8QHe*778|oHyA7(VJgzK$xg3ROWf4o}qx<^$>iFClyPT|O54c_iE?M0; zu66oJ4^@W*2A(dMX34j>ST8Lt*}1qBSj?0};<8ar3AiPtH#|rj+!W3kOK0$Mbn`Ux z2y!jzK*PeaSIi$A(@dn!NoCx1kUPjU6_7%uzbCR zG9MqGot<4aFwo`ULj0=l3x9w-J$Pk)(?3ehv$~`C2J6Mk)sW!e9kcFjmzJ#I%OcTS z{p-U8cFS2LK|#T33yyrLWRuQsuMQU*ndZ)^C@E{eeuzfliNsUNoSvNt6)SCQY2a=DMD&d{$6U zXt<$(yY|!}B@O!Bp}vb1;yHBiWWCfRe|mX2eD1-TB7OV(aKhHs(PecLBls*XSm1mx z%X9rZh0Qe3<7$7q$dyjHggl+ck+T0Jiw+Vf5rQ+%Wx?&m;3n^I8V5&H%XJQxmq|FE|!oyo_;rA-|t z*0UjhxAr>#_VQ>k`Nt2OJOvsK%h{fxp@@f@6UW_ALZ~_o27Zsrwa2@Q1ZsKzWF3z% z#P^I)Un{hDUcY%GAuYYN(Ho&gj}28ImnA!r%He)gKNr3~>oB70`_%jW!xyNpr8CoI z>KLY`rpGI7Lr)Jkub6R=kcjwxgk#Z7Hra1_X%~X^3X6(5+?^YDb#*}%ea(4|MW<3X z62(V(v;akoi9oAd64=Amp8RkwX)#-VcJJmMn6A4ugeKB z^#&{gf=Hc8xffS}L^SF(o0$B$_y!gQ6YLKwL8Ivy(eIHFhNpR8H$=m}NHnM%p#YdMk#yVDc82K^Wx6lZ z{Z^c&v~R|Q^Q}a5Osz7~)1m7%7>bl=_4^`mKTAqV1{*e7FDB)nYSfvWZL~3|L|LnneXPNsfm02pt581U0a%fw@1TV!`uZr8V%C(2yZ3# zlBUfG6D=)mcVtO&a&nc)NGj4%Uw=R1W`E3kD4}u{#L>}Fo_&7L`m{ydMX;yFW|i`} zqFsJ(U^CN1c-+s8f^nAt-hBYqkc-Iwa_;1n5&8?JkLPTL2iw~eP+gj~ZC6@Z+8sXp zUxB=*b6WpRSkd|P=~IEM9o|nvx^vPC+gbPC z^%dw3t~bdhWd%IR3;CNqXT9%n{|?KZER-%U@ixd6N?re(Ak)-NO;4wvF4yFGx;39F zFm^8s9f**&AD3aOF+_yR^0_xp>R;*b73@a;wd(W0Fl6Xx`M$5O4*@u^oUP-*Y`HoS z9dE<67(G!UYHMrj4-QL}Bwu1?J*bL`if_(eEFyZl{NEx1{2#r%l}x0asL*b?^d;u^ zm@YW~8vsyw0^lkA%kv+)%6B+8Kb}uEeB_#CYCZ3^lg$@uD4^EY*Z0ghNJ(Ez{$t-& zO$!TJ-={0p`wqd|wE(NBB?$a)|4EDh{J`OSO9GrfXtjrzF~OH%mjhHPDk^MxweQa- zZxOLWJ)t5V4`@bz6*nm~I~cd$@0ZfQ==^drzrWmze?B?9CuwxaDJ-PQ@_lx{2f+Ps zqLo2qKrGzPNsNTUOtSc1r&vh=oU}{dxgvS8evSgUm#6!ygSYP|M4{u1Q_of{M$_pcd68Kg8~4A( zM65<|$H&J!nNt9PF8?Cv>+8Ri*oKFSn_!wQD`~l3jBq)Yc~AZniMY(N&KDDIsk$Xm zX&;1brU~3SImvo<1kvZ*$?Nmy&+S{Z^a+y271;gB^y;inyI?=faiT=8j~4p@acTB` z-~^K>S4q=%S=&3mk0IixMPLyTMo9Fn9i6ehooV~iwWfiAfrGb>h6o=TASeJ(Rnt$7_DD1Ut~)x*0<+6gV=f#&SX8<= z29UsMwRvzntxgrnnU1FOH1pn^Zx8JW?uy7ogtmtM*EasO9}922{2hit#;OtKOBfHVSJ5n;TTK=7fla4}wxOWzUQLQVeTQ8XiZ{i1qSKGZ8>dX~0 z$Gm@GwgO)EpRKF7fq6$vob_CroUB?g8arsz)ZA=*a0@wV-vJuv7iZQ@STG7ORe;lbFGL?*tfI~BB_t%Sv84c&C2!lH*^)Wgaw=>4JA!Ou zV}twbeSc|=$8Pp@4Zx?cuvKrFdhPh06I23|Zl+;>v~e09)su)0#ipfdNsQfRJ!% zu0cdZ1gl8~u;H%F)e6^FfPZE@U*t)|J7}HILk6&KA&!0TU+08cb>y)Os6*ik@Qy1a zk+(G)w`ZH2E$x8Wi>pkRsxm$80$Q9&uVs!@@q?F3_Nc@Hd8(BGkp^*MdHW~1!OU1??e9|z>4$$Y81 z!`d+fDf(C~66_ds_YY>P?fmWS?ZP4=v2k&qfjbtfRuVlwKMxqyTyCEKdS4z8@PMzomQnxTv8GNfU?2aMlYY&?K|Kfzg$mjrs^O@i7kV0a6lIIhLRYd z=r!s>!TeZ2oCekjRw;$>n#c1YkZ6*Rm#MQIuXc=ehoDB}0T(#yCwAPQrs1@j|3(4_ zl7%3!yHRsGo>6^K_?t&ZQG-ULjEvEAsuh63+Fzfn#!Q&y*>Co7#tK1pj1An?55hCjX&$NQrHk`(V`VGMJ>C?^X;vpWy zNOvEosY3w+INMIvef*Wz2z2Hze+0b?zs2BO&34_%n$OK7v#WG z5Lbij5pIK+CmzT>0m179x5bK+2hnGUtB6Bu9%lf5^T)u(?gNL@{r2>OLvuPhh2(gZ z{ukgbYSTZ%z>B^oB=ltRdp5bA5c!jQEm5KYv{Ps>jv~Ui#r*>dODvgK^y%8~Hz1Sy zKD6D`(xO;xAYw6B5!Kk}n)4rzem#3n7lKN>1I9M1*YNW8E>^21WzeXr8r%vGwMHY< zgkZw|zGC0wv0$kK&-g#rR*)!2^Z(C3!7n;y;C%ki5B|Tq1?U=`wOUPfejpuq{WVt< z86?+6%2Ot1a3atxw6G`&z^;iRo{3v%A30XnNk78nPG5 z%|A&u52Tke^2?R;T<*z3EBErGaQ>fI^zY8Mk?`0LRV<29S*aZ%>*;E1Ydqyp43wbais}MmhZjkGtVwkdyh}*A|w$ zJmM+40f*3kzr|WgO%2EOcuA;q#(*=;-p;ObZY~*Q<0L@C(rDGvuT~S6l@%?WA&nIW zX?{~v6G^OixJKOz`F{_D*>~%uA0b9TPW}!bKSHInx3~8#F)=Y<6^Kg}0M|)L{d;OWcg&$vk*ypQPh4+((<@$7997qaKo$N63DYBhQSZo6*`nhka! z+&Oitm8)zX97us251=L&2&&+XZTI{j8vpxemexT>DiR`FxCtU>x}a}nU?4OI*c#4s&qEzbs(Ts&;GNa5~h4$W3 zGn-^S>)81-fd9k!>Hs#=(RX+r#BD3z^jO}IB>u6p`>I&s#e>IXBMrG7NKl!pz5%~G zfqyN4)D!TjT^}=G%oy?MJR^_R+}u>N*#I|Ci}@WM1r!#iyo* z4;p<23*6lm11iTJ$bZ_eqW&v5f(YOMR2{G!8XB6wz`*a{zkiZ;BLB_h4;0Q3yUdUf zI-x84chlJ)knz~F0aN4t_|cS`5-^M?e6AXxbQu^L0wD#6GGN=yCiCFI==p%Wx+mR% zMnk4WXPoCK1}{mqG-o}ON2B?d0;AfPSH z_M0%p#l_^5l)#JZoSpM+mVdEZ&A-#tUFB;`OHKWg#GpA3HX$}P_Ma2)mIF_8bTr_R zF(6VUf>-V|Yoo>bLs%COe)_?FNXW>DkjAe4`zH>v7Dz~}xN_HF#)~4SpvYe=19}T* zb-f4)J9`4e!+`yf#%h7e28`FwICjy|iMT$mL642is5Jn_ZF1OVWtl)Tb1p#Y7l)#v z!g@vV=PLje7-T%*u}pqPs|P?mhEq8r;;H1o6s+Uo;+WIeh;qM6*}2~2DQwf$S-43wnJ(W91sml{w;3OpzlrdzCU{d@gaibPDS@F-YQ2;}7C!1nYv0{WBw zAx^ym!dxKJJlhZ%$u$Q0(q&pIy;OfRFxxLlppnT%&&axkq5B)jb{{YK`j{V}%Z4pAjor ztXe262E(UQwl~j&Zp!AqSG!$)OD)28>$DLs-!k>VURRQ#MIiCL$6p>v0V?+(w&Lv?y zuOT&(jeYI!FC~8d+yqLgF$o+_6!tJS^&VZWJp%`_MG>{Gf*)8t$)}RhuA>LhQ5`Oa z>tA6ZXuMk5891z4GC<_-1>vgMeUo;OhPTv9!Or1(wt_fw$_Ek4-?wVUyhX;hcgY4z zO|I@QPdByGZz^Uw!l^!_k^OU>vUUj)>4@rDXL@2nnUIZtqRh zQb8~p5ZjbdqbvdMR8+x7z@%VJlG>{?|pLnvojnd$}LvrRC>Mx z3g{#n2`~ZZw;b8vNQ3je-)wKmnxa;1@b;tY@fP6Jf&2&}rBjC0dEQLq)QRCvX>A}4 z0)jX9oS{VJoasHEqN1~SJ~}`$M#hSw85C~blJei4a<+VJtwp*W0zyJUkTiKp?-@vU z^G)_-RI=$L>{}=_G-HBtOt!wj;v$O;*0`KjYQeUqF5XX|>QfDD@{=@o0^ezYs8WUJ z-Pf)xNU99<)oBao=s9tq(t|7T}juwp%jmU)+ zQeITx%%=5wR)#-i4ADwD>y;1>rzGe5F&?T{5t6=s-7Pg>?10B*J}f8rbeaAE6J%n6 z@EB?xHXIUz8VLwR+7cqU8npY$%IkZyBE{eJm=Su+>C;hX9rtT8r5Z1BBG)z!Kb@#P zumB-`7iJSg!4#00bNN^5H+=fm7%2)SUzStwnT97CWi~dpq~2~fCyY(iIsMm9D*C^X z(g=yAN``+DXf6-tPMUWu$9y_KWopyan63CP)rn+os>Qz2=$*E`tLu6cS1>D3dv;$V zc-|au13%vB3IdfElagd>@om;CIHV%UY+o#`3|61)NXj=cKTqD_5lM>+Gn-bNd?}Ud z8=8thBNIEFQPt%yfxtW{hm>iygy$JCAT(cTn`>!`EYs5RE$0ghc|~14KkkA0RIS0nu-Q zdi-Z*Y6CJMT#1c!XVyXx-`RZ9N1N!~{CcOeQKB14tFCpGeRr z{nZF zbnQ2<^>mu;BeF{T=6-oSp1`&Ad z%0bo&G>?wcgG$7(@bG-)?-=C)3AY}9ZY?d*3oHK795L-4wO1f{E(AekEtQiaxEpQF zMdA6V=YC+E@RxkWzsNn&5c>wXq_jv`B242dPmmtlPxB@!z0Jg1uz^T&+oT8$w%)&D z*@M;d+DbBk`s`K>5!6et=~T;vZO1Xzw3A$fyo=S_SyqlIYGgth;IK&zPaMy#(XKPp z<RqOfmb5fd1U7@gy1)C9?>kWm-M53qCg|}D&~8JMt3yuwFKSsL z{pzbj@v2TB4pQ+bXM5d!qLjW(0QH=Wt*stVy&M3_4m@f^rw~Jqt7qZmH!%Dq zpe(%PX(V})tlh8BY}frwk|tMX5e2wV2++R6cxyu48(vP9n!7>m;&wAeH!Mn~b3#aT znbyL;WYFH>TS%#kF!R#nFMuMJitM<1Oa*+8AuLLAUtUcY<)zMm?~ zt1ESeZk%uQ2eqbx>}D#hg^JSpA+-=?Vm6za8>aEjG#24*CH^=r^p*pBz2%%C(0fu~ zT5o`04|(>^ahFANIDtt%03qK3?VoO9%`4?IhYK-AMN$$ycHGc#&rfE;%sK17m)z|9 zs{XZ5Z%Jx2n)d?mNGJ~Q*%`*&8B6Q`qf9rxhs4c0VD}Zihf?kPP_~CV1+ryHk*-Wo zRx&;RX}(0Y-CYtm3X$okoN+&l@;={vTJbTZ2TC&;;MzdUxfrWB`gcj0r%PmVU+6pMlZZ)oAqhVmg1pK|{qf1P( z6YT0~KJZ|tQE8;?)D%7XBdL{QBUEnO40jm;D5Gy;g+~Qt3@*)Xt2*0}2!bLqK4`u3Zpr zMxQDES~F{iUqicM^Gv-}LN&(r{2?dC+g}rv@tk>|6QS8Zsa)e65`s%qfiTz4bg^4& zb*KB!DcFgaq?{OUR!P3C6;Li3R@{G=uW!1`pM2@2Ll<7>OWw2XAF&`23-Eb2+=BE7 z5@WPKHs;LW#!BW$W?#9hFs7ZkuXtW=x#P)XD@mG9{FH%7d2xK0XVh&^2gT7dP{BOk z&GL1)9QXj`(dcU6GqY)ta%}b?K;hD=r%!kYONo_L=M==DK)9pyRt?!8{|8Dydf#b_=hhN z5;8fGDfe}j;~~6>8UnimJHl$0{3z**ov~7yfJL|d-BkwK*sD(+K2P&C?ieN!p9)P- zA_><-`wOC}F?ntxCa6!x&Xjg4B#q`+7+8w~ZI(T2Oh)ifhy{kfJ$r|S$#nLA>HGIw z(Rvk5m;VGZ!~i&q4%MpZZ@4v8+zSpUTyPAt>#I_Cmm3J11jxkY`4mno5X9` z$m3nn((I)+I*)+Poi{YY+9?A$j=Y!%G+%;S2LYL!*mG(HLha#l?fd#aVY64dInHf5 zw@t|diNoeNG9IH^tNkl%mhkW$(Jg5o@wu$?0ID7?w={lwdS;&NvBl3ixdG)bh#bxN z(uP(ml5MDX&@x%9e!QBe5Uau+VadSKZoJhUF3Kx{OhZO}wG1J)z z)yp-oDs(%9rg)<-PqsQ|zZ4(xVJg#WgCBwt8-MNv$1ADX~6o}T0 z6nyQZ|ET9$k~p?#r6k>&BKSPZY?>boi$+~j{laX&A)Lgd>sK3qubtX1RI8zF z?=Yad@A+AQJ%q{1WNr}a$1n_~7oXqFif7EkN$W^(R9ca|yo|XZe2bh}v9`qE>bs9`I;|@ z1!|(5pp_(0+Q7(6j%wxj0EhtyCiF6T=S=nqO!;fRC+-t%iG~%I8YVcAuMb?PF80Q% zdo1aPaZY*%1S)tcda5G62V!%oURZ2{~NJ-y{^|2gPco zBd_wKdN}NgW&Xj6c)BJchv3f6n#YSV#?dUnu^%k9@o{B2fQoQ^E`wR@v>9!knv3$7 zQEIkaC9S&2OL8y8Sa2Z0f`#R92#V_wMxGg>!?{Vtf78;uwvo_ym@uX4G^`sx5PmcW z=O0+Txk3dLY;d+9@GU+SEBJg%_Hccyzj#g9)I#faVJrr7W0#}B^R^}0Jf)-00v7(Y z5^b(HDwId_&}2Z{nZ)ecbl8vwfHP9K@n6nT8=Dx-9#`llY))nyo&S6)>MXaurAb}$ z&RJnMxy*IyYQ|4lNU)NLgvq)dv+FpdkUe+6Q~mF;qNdN<*0a)0qD)tgIz`1m{#;boj*6l3RU% zVuimic0}jkkOzps`d1a0!zQn4MLtmm`DCQyPAn!;)+_TgE;D~n z9jY}RQUO&C7&XE&)D_=fTyXD6o}OUbPLE5KoHFXmGn~kHw8h(646t z57OtD#$-aT!clVH@}jTJpvXoZZc0x5-MIb!b`H2>eIsnT}Skw@n{=h zhs#_{?_{+y&GrvzN=hW>-Q~Gu2f~!m$kIk+uQu*z<&TPAX|Vnwi-Mqh`UI=vWU&*f zlqyIjR9ai*p~_19f+?l-^R3_udSFP<=B{!um#3G+9r{~cobs8%DxXz8l=Rim+FCaB zVR8yf_rfeXVr2V5ui_h+d3TJDC1lk#IWl(&BIw z?N|A}zt%yF)uy5X2T9b)gCBw%H#=YCX%R9N?4MT5eOB)|&Lk!hsL?(N3*+QJTCJY2 zrXb}`3>URCdht!?cAor+@udW~3vZw$a+--A${*@aZN$qOJllI-Lhsbt*iu~E!#;@6tr35X1H#C;i>@lz8AMf68hv?6 zojVeLwz*3$_W6wBTz=N!5^QLhnjm;KL-jhHZYdc8wTl4ViU1Na4W#iM7HSqqOVRRqW+bv;W;)x=9r5A%y03ReLogLniCu&`ubAj7n)(6*nu-C z4=n-;X@cWXDqD{&DM1To?Ac>k{qsleW3eAa+AWN~=WO+uasDlwGw4`6;+4GqOECCX z_*tOo$J6fY=FYxozbv78qYWXl1^4Ok!Kl^8gszed8eqDCghqZxLh3(}|G3#M=Ezx} z=GY%&iDe)mn0Dz_;yo>={s!3*R~lq=LQ8@r`c@}La$&f*X$s(4oWFfujS;j zUFpi6n`-M#bFz5!h*p>2i7k;bxLDU+aP&Z~V61T3UkU?7M8*8{*R_LPN3f!zmoCOj zmNwHxKLj(9vRP`Kq|kL4!l^zCb`6yirhJ@8gUWhb_zsW9CdH|lWvWo}>EW7i0gz_j z?&^9qdWgE2D;A@WUzV=CdZ*ZE@eI3AYXy#(W_+&r4E!Ule8#$U{Fwbvog&ab(pele|YWnl?F#lff*Jli?)vEel5 zqL}HLw>7-A)I^6n?G;C*M7jB7PWFb4abmdXrMJq!lhqopXn~aqYS)XpZur(og?^Pu zqGv3Zy<0c)^TIa^@P?=#fp+bhoc?Yy^qV@4n~Sde7x|HFWZ=a;JodmJ#E&E;ujy(1 zVhXKGT8IP+x3A>L+;PkcK%xy~&|b=;@U6(-dU~g8Txx9|$S0SM#(&M^MCD>kjs$5S zsap!MJJ!IwZ&HyOhGBb@{_-(q@QsW9@Am?CsWhz*Vbk71I^&kCJTvYIUqL zesC{k1an*nRxmD4Un~>Dm(6EN&m~3E-%p0b`P?Cv6k0Gi;p30`vGGbis2I474JKTc zf45y=CF9^9qY={6$vQ~vp2=kgEHz| zZ?fo-=NXNKQdBm=WazgNIl3jxL|IImy>pVoeogdmU12nIlZ{dqqDbFv{?!zEIgImx z0Zql93$Btw1FG67cd@FO)@+NRx50 z#Ca%VX|)+iSXk3E`iG{Ym*qrMMM+mYD!=%_RcDATN=59R5zWUmCV1vVi zH!^ffv?#FJ+eD$*i4b4nK2V!VwaVp$Ao$8bf0Swk;xm-MS3OtzPZ#^hO(JhLx<4Gh zwPCx>^g|)*{z^+;_A=4&DYoB<{x2=w z<`*O)UJ96k<#-Vjn7>nrz09V@U4+65d7Mi=gw*?16_V3jmD~~u=1t|bPmr(6iBWH(fRp8(c;yWlx1DJJxvjT*eZUc61pD)Ro_kAO9tw@T+WdnnQ&lN&k$f*Pj7PvC&EUhx^ zA9mGf-%yFZHpiuIm`Ywm$!B)ZV5i~rTP?WVl6vo3%bm%z(>IZ$?|WZ|pSGKC*(_oz zzJ0@>*lc(4&Vh%$vee|R(dX@-&|!pl3BCKuGwElF%!w!Ml#625_L@s@;}(=DAQ%0QVcYP)J$Qa$MIyCLW2*x4}B#xIkxr)|cP|gh^~MTXk=B z-TQ%G&YM>Ei6vp62^RQ%RAs-%&My~Xo&WfRZ1m5BEDoss6YZ)8^;)`=ocNz#sR^6y z)*aeuPj-c??X1$+&AWhxZhfskhyo_KRcDrDBVllL<8$dw<15KXG4nY@9!;y6VY7Q~ zXOWNeP1Vh%hRSi~AjG$ywB=fkrKsUvXN`qzF0P{A-Wf8j5dOH%pLYJC zj#?LE_=WkX*386Sh8-;|?R;C6aJ#9^+=)cNY9Mv$-0>*Bwtxt2b$Oh)WY})VcJ6mc zvW1rUm_Noxni3Z(MSdu`T|lZMc+M5Bm}A=wB!TndVT!iJraA@9tX2BmFllvk=X@r$ zDRa8MQ8H<>wcDnGB}t0oXGhGRyQHnM@W0!%F2u_`DE#~Q!QW3?`_{Wet^z4x9-1vm z2bD_XU@%Z9!p?QH*}zB$)VNIOebagp^rD||zh+NAwCb_KU#7hq95pP~($Gu|H$Hb= zUgffIvy^1_(P2$MfEP-JzSKRl2&2(<7s{Jhj!UG@zY6i-n-&}$>yN>VGO!CW zM1X4DjY(f;Y4)EedgI*JcsG(@K>Nk`L>hyjPoH_%eY*0tMaQi!OnnG_-hnxB5q0=* z{%*{%7e&MhQjKTOWPhVb-tzvoAm*k1g`DlQR-BjJ-e{1WIL-S_7Nw4%$+YT3*=l@O z7t_V{^RPxzC#+!4xx>)9lkHi-@=a#D#|?SyoY$vhY?QK$b<^5yWc9NH7-X_Sk&EL4 zn@9HFbgMV68*$MUhFxbDarO`Gu{Pxd>Q@=w+k(#OV#zG)AYs)z`H9}dyX#f%UW$(U zV2!k#ikz={5bNTZ=}%JSF*bI{)0Wzt<<4gE&HJeUF#py|7aSr+1(YXwbfz1B8Ip|V zlFfYib+xaK{I@C|ET1*yw;tRe%_X3WdOiisblG3gUz-R zLy*y4JP|sQ0uSDG?Xq|HUgKK*l%eqrhGY8hp5j|62rj8O5|0E@piL2ho4G>mHpr~gxgHz?=)IF};mu$?~rTNn$Jnc>yi$D@tu*KSRJ)UGm!ZEu{7d#25vm*Nsi zFP?dl{s7OLY#t=>sPh^+=G0Mo{DN)um~b6Ms4h6Q3R&mrO2u&2zmc&ajFd)N$K^Qu z)M=HAZrIEvB#z1Ye6jOJ*b-(#M^)9(8B_Op?_*hiHZ7P z$!Hm@WObX?Zo1(Z8$4*eXq7M2V1dG}I_Gjs$4%k+-0T)#h9xH=(i1BTs;OYG%L97x zw2LLy)a~w;5H)19n3ON%04Ez>bh z*I{$TNaaY{q*DsxTuX>gP`Hm@Z`02mh>;eJ)6a)?4hiQEO1danQ!J*&#{@5?JdVo! z&ukiiiDk=TJM7u;0;x4Zy%9->!>3GiR@d~-#;2}eqgGSto!D`g`3jf25=S&mItkWP-eswCujV8qx5u~$;jrRr<0 z4h0H2QzvSi7FBQE;mfl2ER*wn)X!W5x%yD-wn1LF)NVU`7bq<*QP2F;2#q(VP<{W< z$`D2a=Uh@W&$^gJw(Gp`S8lKvJ6I+>-(m0XrM2K_1?NL<(MK!ZTSNdWhEBc@AM4GP z7z&LJ4xvW1YAcw=n9Mh)fF}Ek_$e$r+IXB~5k@LvxSAtHx^=RY>Uo9L=W!fw0`)YB z<<1)Qb*uG>8Xu5szzW%7Exsz2IH3MfIqA*%NUr35_loUBdf>bjIx1ydaid5%2aRF> zvMR!=^k(?;yEt{eg_iO3zwCg+M^N5nPa(G6XiH~~^1F!+r6-1YJye+H@Y1Nc!^4SywOa?xa*q2RM_~4t}NYOhkbi%}K1&6B4j&rcrpxRcfQ9ITHBcSo)44 zny#^Cb&a1YlPDLsac{hr-B$#s!`ry1Jgiri2CSk~FN>m*s!_2l{%Dt~_BeaP}h$vE_++zA}jck4KrWIk^BW2>3 z-y1{Nrt^hEZc>BuBzvQ3I6(1bKpF;Qif&o-onhA#&-DWuLlDexK|weUnsI5IrEbwE zZH~YVFQRui&U%V^+tPa%5x-ce%U01lES&9Pux#F|5p+0OsVR<7buTTnxS}4+RW|0- zkwQ_)Wg3BwdTH;)42{IHS2=ZUAL)|fF6NvBTgpa8k-~(#{F%JW)CG6f20{e;-ldV~ zi_bA3_Vz9Mn(%WS>u$uD>u}Q5q`ZH=$yD{L(GW-@6myGA5$tI2y}zujD>?yk{Bp`K zlIS7zdAY3Na0)&RJ@G~+>&&AYc9V!Oip4_t_Js7xKFs!LE3L(nu>yw3&B+n}g*d2; zw2!Qim7q2 zt+f^3N#6dsyTh;rvYpB9#8UoO+{o9qGGRZBy*V~@=vt{KYabuOxGWL_t5|7I zUOZ-#S^%XzkV@Gx3L$GGp3 zdMmpELA-46B=Hir{2^-tv5p!(%inuStyg;&`8$tUd(D3WfMYa-X~L2aMKl_=P;V8m zr5Owv6-Z$ov_%f^kK+su@xi@XimQlEE|cQcF=vC(jZtt(+{}tEg^OzH&C>P6`W2AX zmnT2lj>AdgD->=@#q9eyjxWfBTY0%}&W0P2XG)I^@e+s*>tv?DebAF>(l;qwqFnw5 zbcXvy48{K$u&7TxX@7`L=B?Xp5zOS01&HXgnjrlEQ@OskZ~1=Vndk0(lqJupsOy6= z?+CK3lWT#5H5OYE<<|Z!pv6rWojprq=c-SmDsI09e+Z1mM?EMwBwp8;wZXt6cr*~$ zymz+|Z0$J;nY+EiSUmcYLOe}NQ%mXQxF4R`y?bt2W!&3oGwW(RdYEPP_t-bZ-O+Ta zy&9w3pMW{-?M}I*k)G;%3suHP_L)L+^;N%P5VmSr&zhmaep6SOX(Py3x-ca;*F(XM zT6Ye~#8w`;SVe`DM$WZx*V<)J${j51R?dEH439H$MifljRM)ZD6b69PQC44|^wLa$ z+a{E4m^*jqp&g;8f0D9&dGOC_>ge#i8_0i3bd`Fu=g?_&g$k0l27$0F)n}j!vzyX7 zyc4uCHxqfq>k8aR%gMC4eHm+=!7GTq&eP8AYGn9eXty=cysH>z$}snJvXH&}piP1L zoPe(pEoe!LT>YKg6o4_%EpV}!73S^`N;wvjtBnc z_iUrpq`$Vc9a$`ne@%`-XqzYVv=T%bvXZ@hyImgXHUpnnV|HbXm;2CiM$*;O(A_-b z1n+JHQN=`WTyZtZDXrQ|~Tz$IB`(gl4kl32KulHclA6 z*j8ayM?2-KP*AXCs?TC$8yifuV`|JDXi{%38*w^pO^Sjd;~!;ZT~CnO&@~?8FC-7W zwpO*phe#l|Tub3jUC?FbO(O>-DUJJK+PJuu22Yuo8Z$?hbC^co9J#J@B_>WQGF+nv zks0=ji#0_CA7|VvX<}1+4rgZJeQj}dWztMA?!pJEGb9o}y)E}=6(vN-byEtT_3tJ9 zT4OXwA48-3Csj6E!o5cH^E>DRv33WkmXTQ^z78~7SCRHck{S+g9f!XDFMpUUYg_{> zmL?rfBcmst!hJelaTn#cE(`^&a#7^W7`KfYU;M`GGDLD=>*1iWPe)$q|Mxs9QjxG; z{d;yS@yav)q7{WXs;tlK1Z7sQ>%Fd*KBD}~6y)nW373i!x%JMv(|4Bapht3|s^Hf+ z!lAKPe*sDY6UEr6AMCBM46E{+1BI^s>xW6>zNm*?iHUsH%WeN7F&n9URYm!hnmCyU z2UTUC5y3(35{lN9e7ApIRVu79Kr^mlk4?+r{X5#2;RbB$<} zdK(=e?+uBbiJ?+?9BWMsT{4q42_>a%J)LkS6*u>fHcwRMU#szLxrP|SWq%W;Ph4by zB$OlWoCoNlw6AIdf%LY|Z9IHjFFrfy+(?~1RG@Z9M-=#E;6QqUiLqEF!q34$N9#za z^18UWeXPc#8-tpt(%?-9b%^5BmH!Hf-D6zRz4BkIRDv9|-%Tw8#RO{X2Ng9xB^WqND|aiZ`u0ja{7Xv1 ztz^tipl=6?l|+B9C~9aCWE3kDWNKFya_u*{9Z-X5(qh-nLfJ5~-n%-OTvfCx&yPjV z{o*!cMFj26lP1>Bs_N}tJekLTkm8}Fo@KiX(A=73&Z@q^xH$eE6zcj}IGa$hl#?%1 zpM03~;hG-oPL8=XY>6thhbdec%0%c2qm{sq&n29mAAjp%-a1;McYC&A-fQfYf%-06 zdnT*TqM3IAovT`h`zXpaGJ$Zf;MR3OY3p+1?fk1sXP3SO`L6S$hKX447zrG+^ZxYf zM&*CHQ=o1_250mux`4TabjS!DAi;lnZP3upmR95A;%?n%rFG1A0~`A>ct*AA@o2ZD zX6quf>{G?j<1x&YJN_xEWEB|mbFiFYABULoce~z)XBO1Y^orhnb54T_E zER1c*+4?l359@QqIzmx}n(L}nBM7dlxb<|U+>Q*sSVuMZxeN!TEUD0GDvb}7X!!V2 z;{U$j{a;L-WmHvPw735vNQo%j2qN9xNW-CzbW1nV4T5w^cSv`4hjd9xcXv0ui~HUW z_mg8d7zfTdd+#;ZoWJK;)8)A{TCIld29-za@O~Ox{5)V|^P#Nb`*EZagJy$ey9pXd z2r8Q}`}*rp9k>#uu3GclP*R^}(7wxY;e#JCs&{6&|7@jV zg)ag5urrtG3`^b4Jqrql*Pt@|yGN_pR+I%L;T?7RHuIm!O#aP|1cf+Nn0W!0!)I$Y zjmq(er={s1djR}IqSg4#Q`_WpEJhNLgqa@k5mQ-dBjQa{R+OpfVj&!um3LdPe?owP ze@BqvabGJU#;ZFpk4y6}ttGd2bYj#hG7&^Vf4ton4SsEUmNMM=0S(q0B)+?4t$@@) z-a#qOmV!L7;apyP_D7*(^s3+n8{RZ!(!liW2SvJl&;Fo;9+Nqq6F@3qOSC>S1MuQC zb2v`}ftgC}-eBi=Bp3LxENxCVnFvMdoNDWCA@CBD4tR0pSe^o&&yZdMc38l>&N-{i2P6+`4MG}PXB%Icb%tcJp@lyF;)w;Vwuq~;! zyxs}E=X5)I3zoBH2JRL=DUQo(Bq%mMAtJ~V47Z4r>!A;6*8diN|M71)d+&q^bS+RO zG)FLOEl0;px%!Q>ZKYuGGDf~ej`OZxh8Z>e0^|3qMxrWF%9w3jybsc*UYOcP-NsR{ z8G`KWj>-lc{P;7_)0L+dm_enT@I#R92T2*V>?*gCRUoPYyuUtGjQMOB%r zwH)mFHF%(LARcDSUzt~iM|G&tWyS303%|Z!KwC-YS()iuM&M)HXyB?Tzjvx1_(D! z9<@*L|84tRPUdIOjt9>ruI_)%i%F+_%yQ&c1*4vE%ENM0dn3TJHIs)|eh!Xrg&j8> zC~%gMNVq&!8o*-cLdgIzBO_$zCS$FTPGw&)*sobWg{p=R|0yz*iR8p=aF_6Muof1O za#If(9X?{aoUFWJVmigO2p_C_iz9=Nv_HNMN-?`+zeW$BqFSZV z*HwYXn{-~{L`Gy;-&dQnI{QQBt59Qc>SohnwvnAfz%Mm-Togm+$wHwtKphxf_bbz5 zsR9MDir)FUYJw$fLgZVmYH-PzSw;I#iFw5b_aw7TOkUTE{0!13>T7Cx`j+`zz}ZYf+NAw$L%e>jDMoX-NT@%ih+7lD`YszXq(_m1*++ zkhX&`B@&qmc#arVA&LhK32cZeoK}64+22|sMm=wz*Yc-F))y(N`{%&kX)?a9>OQ{B zvXUQ{Ic2!W@TDT8&|AsscL%F#iOnB$Y zpXD|XU0aBzzOtxrxBU7>sAiKNoZ_!eCF!(e{|1@abanV`Hr@SDZmw2jq%sd(UQR)` z!WHW{49&Q7?Vl<(@~T$VJ<0ODffN{w(Wpfnr6MwyxvsApF4gMhf)aUo7U6CY(y(v( zY~-avV#8w~pB3LJ+FnO~NbT@}C^(CyjTw9?iNS2bgVjZO+I>44@e`v2P9<;6Sf!DZ zzk(*#?}8Uaj89hWMn+UJN!n#BayD$V`ieE_!CDeg{y~V#?@QryXLs@&`eo){F?xa} zQSv1zFd?EJ2d%^ZyK*mqwPp7WMk;`%Ra5{B2rsooCNMyQg4={|l+Cog*y2(FniGK@j%&JdBgYtg%y(X1)tUGIZ6 z|15PMSq9awhsdX^*v~exE$(9IeIZXQ*96RomrO~t80vr9^(qXUmqU6tvC{b@_jKo7IiVbxh9t|{6vWY=$GrW*(sUUqJndw*}~++yfsjtS-lQD zrcbeRPaa?UimC9rD|GB5!lqN+9uI-5BzF%sW?(Iz`8@LlV}lN$!;cAm{=8XG^Vif5 zJNPvq0}9&1%@AF)4r|5wQCf*S7Z9lasS~(;|McfBl~RZL-s0DP*8AHWtP3J7dbR9~ zWJA6pFla%KB~*UWsoQE}okB&}-}}}rY#sGksk(inmEY1$Vk6YdC2?I>6H+0_!My3F zx`CJTi8jlDjh^*n->9P8q`nY4UvH(-9>Yi#Y$pk5{6L)pE6gPQ#GF{%QQGOAhUACl zvD(7jAol#PRcZTM$oN5z@!S~!N1YGmE}cEf{>DMiBJH&KTv3u1xOzY{-Q;9Wc>2Jp zt7sg9x{gb>ga~nR2T#0&C`i%L%Ny#j^*&KEXe6s^mye&i%g023feMsT$pe?HRwLRA zZi>9djY6HFur~%zkrHmorsm2a=p^67QV2gM=6=5sAX2Pwbj<}n8DU6y=fFQ2MIP9e%&@r*KKP>{K`K~*-}-Rh?OG=F-14c}KT_O&D`o2Rk6fSOtL^}#zcL{OBj zp=BY-h`ZL`eXIB)fpz7mV0-T!IsP;&KWUJuCSu>LL@pqQYm+|RkUz7!p zYO5NpiILsEv7hLs!Q6D3$es(}Q_YVJNQ)IEYE|UhW&6mMsgjzRiE-9q%xx&UdEF)=FaKV5nEsWy((qqKbfyS_-0mF4 z0YJD#L47Z5Fch^!gV|$ud^>3fus{YsgySM%xZAw;7<|+Y)HDhk@|zr%Qk4f+bM(|B zniC++_?h*=f3XY`M;=r@4hhoT`&@69S)vNTOhbviiOKb>G8__n(B?PZmIz{+Yb(Dh z3at={xll=Ex{nA!o#z%28gml)wJj+)d(vQy^@E@7VKpJKh1%3S7KrG?TkY8u>uQx1 z2HUwTm=!TfxE*t|+mR{dedb6K&2|WL@u&f5%R;?Zpo6XWFB)WHN8oM53Q3qizK_WhG{VE0j?r8CZap&IFjV!1S zsxOOMS4Vt+UR9uRs|>}+H+rXb_iB+x%a@rwU5nOG7?&BA@IE$gz}`?!T%*>)ce{vD zwQ2lkz#%qKD-Zkv8r~cC3@=JEP0f_?-ifMv3GDbzN@JqIug|A95PV}2M54zgk%ng>=g zpmuA}Q>YLHgT^Q3*w|QdX`J2_u6b* z#KH&c!$U^ZS2yRQ%2ii3Yh`_V{Xe8*7|!g+o)(3IT-ZOqH8wkshs-pHAx3?}Kk_QW zYs7t=qxrfrnYnugbO4J}lqF19hPx^$NsuWEH`T*FuSkA*`NBbV@@WZjGt{m`85H3c|>o$|VWUetd3PAH&ZsC~RPMC?WJjS;Ck zlQEclwlkPe^6lPM)av!mCLY_pxp($=oi59UP%gUt=7FKlsxh1%D0#E}<7D*6GNc%XP`j4g~EApvoPmQjL1QKTU9Y zDg>m*hoZGAt2I{3+icy*(#Ca;sh||rZui|zUidhQ0^a|jQ9<}xIh>Qr=-5+{l8&O> zH)V6W}H7(!fz5M$;O z)}fWH94Le|6h-4q%>+fO)MeE~uTJMa6)m`A7$5hqG4WIZ-T-iHfJI3#NlxRMyxAC2%fYJ^A%cOohxG#8?pk{#W9Q^ zU!C4-#8_G1ewm8Si74r2CkwIm{keb)NOA!Sqd|xIzP1(UCV#*+H(Fnc(Nn-N{Qu4I z$TFizuWbE{?lpMDwJp;1up?Q5hWd^pe~tY+53sc#+@MeA=daK0vZflpTgSiseV75X$%V;c?}zImxH@3^eEo$6&q;i&wFU9)zEOYB#kdq)T!{q1ymjmC8$Y1|21k3}r-j1ql8uiBXAi^DIbd}Eoq;7PRs8GD zLNx8Zpu2s)vS>G=59IVY5rJ2N#0+;Iaf;<*H| zc_Gm;Bzyo`u=zw@Wn0Sz~Gc$$=+H>fh!F1!B1R$2*Tcrms)=2(Or?LVnYpgaY zZ8q(tK-=*fcj<_KNJs19P5noNA)QnSaPNVjqKrZeh;qqO=K$sEEcxN%Oe7?ynZ=c0 z|0+BCSexlgNhRtlUGYB!UZWcj^d%wf8RC(XdCQvrJ6F&F{#}}e3MKPPr+Vh7n>ZON zAxq~PV6wC)LLC!#4xL!w61Kjwl^i9YH3Lhy&a}zS%xS-`WGXdv(o}`#`GHK4Ym3BG zl3HuY&OIsf^qCjb^up?}OX-hY61W5&-CA2Gdk)1fZAI0~ueJR*I9dGULZ zF|!dryoYb^?ONb+73@90L~H?44|y)$IZ;pQ^{Xp{ej_|HXW9L!Gd zs(s`o#D;9^dm9O|ksAy=B(@V=U%;$OvV6 z4Q(WP`~_{=MzmG&WI<-8us#JlL4xHBh8<{&&u6@Ps9{TFQ3-LJz8a;Id>M(gc;C*) zZL1MBTpLh(S<2)(9eeJ&l?P*_{1y(#ROUIkO>zDYMv8K0X&_Q<5IuocptdhWd{`q@ zV(`ukG?h#OLOq5P2c2YX?pJe!BC}*3RsQ0VNhe{eP|genXKmLMFGLRAzh1OEe0%HK zzdJLQ_%dxzP^_-11;m;Lh4h{AB(lDa-Ii;gOVdpJiT!1kcC4~{i|W@64<=J>UNEKn z&9F@uh&;M44p!p_RHpnG=4801;31?JFRN{X4+vi8SkLH!%Vy?S-FSJjv<8Wm;>SP( z8grr#2ynYUdsFn!aZVp5n@88C=eVREDbj0&{MPvs1r_;F8>5H}f+J%9|Nhoud%f1k zEtPm#fek(fqe1UX4Vug0HRsYrw(=9HbWN@eHfrh@^amexc8b_$`G@v9xnEgl)HOm-C6^NG8{;jPYrKzANitdveD;0&?g>HRFupjS>ef-Bm8M zcbC{?r(oo4>B$qI_`7oX-RGDu{T)7*Vdi3=guy#QF53+RAo?V|>9Mq0Zk0)PTm*^J z;1-G!?^di!Lg%J3ntjwEx){s%|D_Nv;7pp5&cDmU=*P=0r$j&Y#O`V@9l6zRT59^q z@|v56%i5kQE2^I@ftvf~v^V|6GRr?z zyyR{hz$W#My?xbwh@$GeW?=9M>eN$D@{UNsMKG$K@Xndf{Z>9fk1w~riPb(>vSc)U zCK8@PlY|%zlH%W@GfklyvESbCaJchLqss*QMHpc%W=n#6;Y?$#u~Z zkF$D4YUyZwoG*L4|MMAwE0DG0gV7X`2Vw^P#QY}%GjWllbH9*hOgWvEdt(Z8=4nq< z48lu*DYnWpZ7{LO)$@U+BiC}D$O|Lqtl1+0R`BEJBiPj$a=UF+IiKt4^}D6U1^#iw zSDeJf6pUX+u8Ez$uPlfG*F#0Yf-W5?TlRdsuc$@>XP$}nQji@;nKGTdwFLvr)-Tr{M4&wfW>asvHE%93_7jE0lgH*=rpV zXIV#dQM{Rd_64==NiWWlYqy{5@VRlZVfVJ(dOfj~-ew`2-WVl53-FvaI_?hTm#qf{ zvoY=KTPs5Lorg->7s~KioA17naXRHf=cR5`QUiquPZn&@f?&n38)FLUen3jz*-=zt z$Segqm!7R1UK&}pXz5uJw#A`83YDL}4y&6{2abJdQJ~idDF6Vt`^~y#5bt;xU zWh==l^;FzTC5zuiO=KoRAkY||rQUfU*MdAb-BhOWmC7w5f^ss$$igRaiC9E_PHtpI zpD+F1tpSSUiF4f1ah_c7cpS61@oRA7?IC+2KFOP0I@$;8^p6Okchq?BvA$}=*avF4 zHP;=eOd@|0X6sE^Y+c4mZyz{bY?<7xlinXD)+D5vCrT?mX=$jxW>KgRWzok^*4;WR z%i0~Ai&U8tAl`}UC!@U`NamE`Onyg4jghEr_Aedq_ly^Vs?Zugfp2Hs3!FqENjLgQ z)@il=ulA)MLQj_-8cBk*#F5)v-IKJzHsIl*|J+rOI`*WOm4UTj%!0GLy|mJ~;dY{K z@&2K8SCTQ0ag0pkC9-{p$HiD^-4S2C=w`Cfge9J>Qv*+9Y9Aoo+0>} zKOMcdG^>EU$Y}dOmypv)|7hmKjMT~Q{0q7jp_#D74zUCobBf2@`riD9h5`7*&UmmL zK|FXsNPMe4?WEgZTi`g0)G=DcT2@We1->*t{@157ab!ki5(XeYM-8_%tN=WUv=8I( zsoELOy^(%+4j^$gww;AwrYO&BQ!k!2;@}u_2HuU;LffC(EU5!ho#m_b@A58Z1Mp*h zNn)9jwI_Q4FVx2Esc;!g-Sq{IRx900aC~>Jrm4O=g76o3ef0+#qaYT#<-EN+1-tJ3iBR#FseGXFBE_ODL(^HASh|+Rzx6CH{UhiMX>kU#!F8JM4v>VYUqAX_6~h8@Ig2j*5a9zCGj)3Q&M~Bo{GkI`}jFP%GFaH;8s? zR1BsiTMRdRYf9Ma9P%tTA(TR0NKUpZ+nYhVgVN)*b#8GGZ%C`hOlphq^!KMNlBR)) zN-H_D80$WKbbX|nm5eb;MiV_U01|m7M>U1^4M|Kygi|};J|fWi!~n=@UU8aK=e^U( ziePiI`^$g(9OGI-hf9q__gBWqHTzCgL)1opo@X_MAKbkJQ>8l>Sllgy zBLjqzjw}{nnKe0A#;GI5nQbYDWuw`&)-n0fgc?@uvi|`}MW780F0q3FdvEbPr_Mv} zeGELK?91eDzP`A(#)3f>VX`2LI)@AL%8aKIdlkODzW-!Ot%d`}>&3+1cw!AN-y<8V z4PNN1-BwcURYFzcJb(9}|}+@l{89R5RvZ<@%e`Gm~wsZM$Cb?+9tn!2=H zah@OdDqTd65_bCv?2ld+HK)6Vvkv^*Dymm#QM6>_Y7!F66W0+deY+d#~X?Ggv_ z`a695QCOFg#kU=0Up|~1fE<6ud_4lR2J4ERKJwVoqJ0h=xDvRTXBY&s-r=%gI(5IZ zm5=xv2S&}8a%?l&<7Qi9E~?~Q)m3AH;+G>CHH5} zkwSN0&sBZj?GJPq@mzLW<%WY;iV%2^f)@5eV|y_)Nv0!FZs0CkXGxBB<@12~vfWLm z(UJI4j#+?Ie#*e6hJXFNm(BA6!WG@Sm2J!*3%+dQPG3a#`@_0KqBh_<14qFOSW0Bx;+y}nSm2rb+PJv<}`>Q3xb6UG#<*u@1 zaL$BlltA0nxAP7~%3yJpi2$9NFS>*!^5V*HhVH2(sQ6IUvW~Hz5!d4@Ude%1S^|v2>XzmXO;-G`8 z!FDuK7#AqbnP@*_;<3DnTWH_+mOfW z3;EBhFalNfMO0$B`FSI-sSnLTbicDB0K4gLryI?5=59%U89(tYhpi}72QBB_F&nwE zLi~KauwpWVOy?EpyueXG2~E(hrsZzN!U&o+_tn&*YjNxM&bKWRSE=JHg){bh%C$1D z=7$31g7xmANcuMM93P=Ru2W~kn#18h6!Kai#9(_&G5N+A^^=S}KKe*alNc7=Qy4JS z%}R_@U^M8PSE&923TH4w(C_fk`D^9?dIAOy_(y=<&6WPatAn%)wy}wv6hUT$$0RC- zt=d~1-A+NsT9DgZe4A6#_`Iu2DyMp!PM*rz<_v<$nAR-V%_ZK;eheoGm;cXg_OV7!hK1Dh z9X5an2I&ylzB4Hr|nzt`glArzYN~`&| zabLUw2#x7(1!y<({B8Mi_-IEP3!u@!P^R_u{a)a1D$uAal`+8V?*lnnU%--JYM!lX&CUO5HPy zcIGQqq9siikk}Y4pseByJ2wY(POZ4xi46C^+6FoRYd?wg7?WV{oE(irtW}y9vYXEY z$s%oxj68R`lgs|G?_gq@>s?&nOdm_Gc6C@iF!EcEezktT!^oVHwe4VU@qourhxhI4 zBf_sjDWl6YHG-CE6gdv6Bn)I7penDb<3&;=xKR5)E)AZp2zt7+^kGs27%vNm-obO` z*#4^5vd1Wp30jcvPhbS;H<{1S=gOu+PA+xP*zjoMiYJ))7BOIzz5?%E@V6FCs>5`i zZVYtmT#NXCd=GeN;}SUWAPu7>okzS$zVeFJeV{G1>|P?AZ{VQEfWEY!Qj=GwF7wA|_3!eMH>N&QxYT{f7OY61`4n{B z79m)KU5>D_NA}xNSR7Q_AM+c7GxiEKb1w0Kg9t#Phw{{Ur3v+qU&NKIW2LEoL)6$% z%m+Zc4}DRCYs}p@0sbgpq_?CmIWzoB%ESJ9@E>V&F_|M+- zsQp0BBVRRFS8RVVKN|K%_Li4J(pJP4ja5M+()1sl8h#20>`yY zKdgwS$ET>a(j|@>^`0?~ORuX_1HLTF7(Y*wOOC1ltCmpKaH){&U8+>~;%pcZ-Eywd zVm!-X1g8uJ{?+LApD8VgUms6Ib}2Cd)DS!u8@qtYQE~5!1%xZYuJtdg%G3ajtzq#W z^C8;#q#;0eEi_t-kiT}qrn1E2{979N`gIexaq=1i0?fUvDF7&ghT)-%8nC=tEmZ3| zsg+MkHg;D+^eXBTRVeD6`bRb#2h^xp$9nAer;aLrTPva#DWH-PXgky6kzHWaoqRtPrT>aXgx^W5(Uxl$El8HrV|P8KM7nnLNigH9 z9egX!Dv*gac=gQMJeC4FQN(5|DGhb``}#dEx1iGzzOx;KHDF}#*I>H^$=CUQg~KnV zZ38iGZYzKa0H)i|Z=Y4<4+3u7B!UlIh;GNc zRyc&}gmOR{NZ@FbHiQ#@_{_=ylG;cG>DV1TY?kz7SXHj4bt^58om5X+I*qtD^HR=i zy`IZuqM(02=BgwRvMGUhY?~i@%dqCMIb!ql?+!(>;1ogi*MDHShE~JWP*bVh!WPi>lL!I zaNs5c3R}a|%AD-{+Fw);@2gVl(ppsgn;o1EB zbz;8Y`u$ytf?ULOIG{-(O=7cN|E&G+aQGJS66xnnFpoaF8a~|ruKn?)JMR9h8SBuL zNZUPPqkK7mc>uHEZ4?x?bOBgagCoTirWdXU49&)JwRQGXETfBX5q>K4?(VzIy1BAl zf3p6dsMSqlNywB0_wqC!u>7<{1btyYfI7{^R+&gFNwr$G%f}%|q*o0H7$wWtW&1YJ zzzjL1zIYu>0K}plO8y2em8xm4d)7yS?}k=8UC6#Uvhr0d)%CyMsBiOw>oopDYM_2h z%S0#ofaaO{_e2+vxf|aU5po`4z(6IjPTQuRUF)wd#=rU*vlPOXjIKpd2zWf?E6WDW zl4f7ugSI7+i2Cc#Ah`Vki!TwTq}%Il1pb@mIuV;u@T;hK*hZV2MrCkzV2EHa0PTw?7*f#wcX~10~77_T3`x z%(Y@My%+!B(Xm*arsldrb`YQ=07p*3y(B$b=?xB%i~|nyK(S<$_rO%Ze-{Wsl4y!G zbgy|le2czb75q{g{zueO9VSrgDN|yl(1!t6rkwD;Ht5&a*El@wu`BOC!H=4JfWe)=t~y#z=02b)C@6%`D;tF zPvz&07sW161efK7W|%<$nE>+i-dXCw(q<+3&j2n;G*{NL-EaMnh|ySMo9)Cyv0=;U zwD{tF1G3rQPzcWCVj|PyV!jsF`lA)si#rUx9=9;d*9mv-&E=egHsc+8;(J0Rju+R<5f8vQyzZ^`3C+F47QAAYy6=O!i z`6rMoI-xowi^cnC3Owk;k~Wj&3+z)Z!XC3@oZsmzbb8zE2Tq7gaQ8*Jpz|Tp{%+UB z2n=SiyGe-y58ejHnZTxy7=WMQPW7_Msc~8${=AcK(ql0g-?sE0^6>&5t#GZm5nzxEl6jk_tpwlt+)n7H z34C)atJGPpE~2Hc$%7<~wo0bKM3w*zafi69bm!ki|FshR=tC+ttan>2+4)rFi}DKS zp&=PQVl~Brw{x*d^;}X4eI2?Wh0L=3v*d2)LJ1v}^y0?(X1vgfSbg#+JY?d$n_0#P z9ovdXZ+W%`xPH6~4P)OPZ21;N$6%zk*YLanUyRMYw?j!G#Iz+~TF?wYXIUydd73h2 zVDSSu-&UEVLHCtGsMsqVIb1|ZqiWZE->$#$TF!at=C$TGKaX)i_9JqcBj;Bk%O^pf zGGo($H;P^T9heQ$;r$juMN)u$kO8s6_pr!lK^Q@Q_KL4v`T-udXrdsOnz!NuGAEUm zk}sd}rJGpFBpTFSxh`KA9sXs@C2pQ)k-oiZ$L*<|*52b$An_juHdRnR7H#6>GXMZ# zo#V5stx>3BOJ%b52yGON1@x_I6Y9U8BixUce&W2KjfIJQySL}t6msbTvT^0lF>ye8 zK+Xb!PRvJa9Cr@(J%XuCPU=8a8$Dt;j1wCeATQSt+H0Z8~X!CTb` zm-;>qQ)s91x$?RCU5?OzF?w4zGzS6{9y{Gm7T`pIk-*hYV|&n-_4x|rZahQ1$v%%F ztT>eYzf^udbQPzH;~_loF#rT^SPq>R;DjR9?*keSlS z0i;*#=kDKpuQz_Q2r!8KW4`{&D?N{P1Z~Z+2A0gJNnEF6?^U>2`*9WwN_pc&Ty%r(F^yZR%WJFY>=UHGb zuSE{}GbApoiF;W{15NauWPN?v$nU|Y$JstKpH2l zSLp{jSfRVeko%r+u2ME|w*s->i~THwgABclNg>N!_^$4GrNNCO=`C+?tFXk4gRIVd z0RA<@+J1rVpCVaz&VPJePde(Uep5|RiFJ@JAk+f#B-WCWOhJ^Fvj*}{{+Yo2-G#Ff zD90-?F5Ts{k(3h&P0ZM%2C|SGue_nKiW3v`rf@Zs$*P&R&P`G-V3Y|uCV)yal0fEj zlNkli&Jno%NQn$c?4EQgcPu!e;yXCmY|NzUMS2M4DrfW7ZKrcm>!vdqa^6Po*@>UR zQuFHMTkP^>HYUimS9_k`5Ih%=$(R)d1#wh;*CJ(khL8afc2$<|Tx<-Oq_2(3?Bh5% z#GUOM=(yIs9>CMXXg-H8PX zf`Z#y(?9mFy41mkE#IOk+{lIx0kZY8NB3wbI;X7-vPQ&%x1w3LixwA1A34AOHcZQ8 ztiU@vAp-%=eej{~EcYjJE2ZtYg3{JrxpzS+$YLSh2SW1O&Q82ACN?^T^gA$|-|F%e zaKB2#7=Y~qK2l(gFA0A6n?k`~5EL>IodK$W#Fx`2TJ>aV!X+6$tSCk0*0_%6yTWhS zelAcivcY>PO9IUokekA#%~osZf#mlX(v_q(%D#ZW#HcR`1FU6PEC?^5A4$t1T8Bba zLYN$(vlN*ZBRhzB#azX+fGvl0%bHJ{Q;)G3JF+ri19N0*Z#5^E#LmJ{Brwb*48iml zfG{i`NIC_Ocbl=_-rh30UZ?`+4W-q#K0Fbh>mML7m~HjokukH+6d$ZRIj2oMp8MXsRksEW*DX>t$-{d9cckPR*?LLZRt1@*?a+bgmQG4E^bI(kWoF(eC~ zl+I=)JXxKo^gO~X^mDOtAjopxbeXB3-`8gioV~{5x0GphI^}Q zy4+SA2}=-Cw`Dz+v->d$x`r5pur<;(NYGXp>znPIG~=+*;!O`)(C2J-!14j++%Kar zo^Ug;e3-z*LWK?oA{=ztFaiEKNsTBL{exU>GRj zs#-p;GK%WhSssY1gJ1!54SGkn4#LbN-`=E5(pMMGgv?Inzlp9zY$vf8zC1|YIw_=Upw;*EECuj|o}5}){}c~EFo_O;d`wesV?jK(RV z>#JYC6(xZGbS;`zvpLey@{@7du6$oC=$!enU%G)#G1UK>la)7tCjuO=H-NRqX2V)= z*ymQpGtpLMmpjU$pug4IhNfCCE3B9T&>qC${Q^_@MKdV?%(V9l21^^&d_ERWD1PYwOe1|7pwi8Ju69nVkK0-9P{$ld!hjjE%nNJyZc)-1?j1=+kG-C7 z{Ciy9RP{yDUlPcz^yee1TlVJ8KVz3~4PA!7(*H7-1>q-IGvk39jS01yMgt> z#iYKOuN^By;ovRN_4=KHWFP3AZ=G<__0sRuU-yX^p?)Rx2BjNlFK6& zQb>8RLDzj|a`?tOW@9vj^$TL~<4fIE*Usd|B}|Ue54NPn%f4fv%6bzdl0*VGJf$WC zPI~|~7vu}Y_r~?7op&L905;Wf#(MnU=EZ$pIby) z*jf(2Iv<@SRNOa6E>X2l+J`+Z>K)7ZY^r?S-vn-q;>X^k(i}+_f=H|kV-0cOKuF$n zM1Uh<>K_8lU|EV}AP2-%!qe=>SFbJjCT`o!fcjsWcmKV`1 zF{X}UT(aaNLMm7iBVX&A(vH?pB=-T!aP229Q}Jx9k2Fv$PZs57I{ZrV$g>Bb%slCK z^e(nKzj|6MbG)mUr!&8<7SU-nx^}HEI0eXnwJgs_o+F;Og@>wOT6bl9SdySEyUU_> z@6y=DF$UBNQ+*Z_f4xiTD$^w0l6X)v;6@hDRvIGzeAD8sD9@OG-aA8E~4 zU?yCQnV>UdAU@;EOlrIH#k%u%`hk!)h>bZDNKAv)ex`3k=u1Vv&;=Phe*!NRK*{OhAO#UJjOSfZu%4<>KcvaKZa9UuH*+(r z#o?EBx9>EuBprQunVG%9{6W`W)e!3oJ$!V~_5lPa3IwN$uf!*~&A3?|`)oCLQC@WA zET*0W;EEg#n_%{g-JRTU*i$jR*R=Vw@QaVPd+%%O`Q;lJx zIf|dcBV8Y==W<)yU6Yg6Q@yjINh?LVYc}vmb18_oJ&~qka4aHw)*A)MWKdZVC+$rJis?spqFhJG!cp@?`y&1Es*3 zn*OpyIc^~wyK@!@wuy(NNv=QRP~fr3uZQpyAyfk4*DJ#+nk->2YU48esGF4lXZtsZ z%!dEj21F@Z)hv@&@;0*)VRsQPEGm=s>PP5I0(np5f}0893LACb?rcw@7~2#mz7+=K z;;e-!nfj%dBS`;w2#GgD+48#$rq0DGDtZwpF(81=P-E!3?VHc9KQ|9DJ#6-a#*}6T zd-~?qBl1J7AvNHlk|v>*8#Fo~Q({G@DeHbB{MJsH3{6#NL}&TNkZ~H>N7?w>8N=z2 zYSIryn0IE*1wo$(lQ{WhX`ox&m>X&!@%ngV08~CQmCCyE9L7sKTS6fJGY~(ZqfnDK z>%tlf@?C-9EE5^u^!-tZWkJ}LN`Z9yT9xdX_J5C8aP38Xsp-;2hRxXZmJ=O{7g&tzudZ?c&rCaWb$%=0i&WUi0pc%=PMqyNgk@C`Ww%?IAQ!yF&Yn8sf@#}dLvm$79NcEH-&{_{gUVbVKA7=L? zw9e>=Qix?B2jBh!^y;px=HT7C8<&9_Q#Dfjs~ljMtba;xIe#0PxrcYcGC$!4C&Yl5 zDi14?^aJD7E;SO&c!gdEQho*kd$y#wyeq?ahy-e??>od_OB~4->Bqfj+1VCRiw4Vb zXN0Ty-GbRNA#h@8@CcD36=q@Z*Q4{Cf}lm3B{(==db(4$qqe_FXxID z%W6-a-Q@*ow&|}V+bp>=*56=eh$^6H$+g9IBJ~3tgrS43O2MNkYn~N)0u4RAS8W0-s`qeE2GV{bjBobBWOOuBP;;($7JM-uh zEn;D@k;R*c%g%xh;9gHRfdl>mPEJmk%V4dsyRLS|vZ_rduwoYyo$j6``h-Pgkuozd zq8S84!Y!xQ@yfru59^(oSo0IDnZ_E=skdq+^!VyPO|h2( zJV)CMr_@&0GFVL18V~VhwU!2b7(86EjQdBBgERYl)4$$Y*>GF8nJE}ak^VSa|K~!- z;1%fKlj)TRz zdCY@o^aq0Ah0(D3B=xfI2L=zVjpc0>-o2hhWN9t-6gL^UJsh@kZcCBl6p z*zpR{{z_>gBV{$@yxdFvSY|itK$iS1I!a=YwL;JAzeTCPERL5WwAznk-q`7OtJl^KmV4RG z2??C9Q^k60)=MKdX_UvyblPCr()a6K)dMn|i`8p_L7XTN>#~sNqeW=?{l~%gu(&V8cz=J?q6iW8^?A_4(FGq++pZ zBskQ*O1FbI+k~_H<4WYTnq+}kQnPJ*f-^dcz?C7;|5aN|?usrY#tkj7C4%=5aIJk! zdxnEr$Mc|DPN5TaDppW_sL63KocSCesfd7JxD%p-m87gq0A*fNYkV{>6-hTbH4xBt z8yhy#&ojm|Wnm4sQ@N}*$$wKVPVS5I#wcC-BzxckD z4m2nCIlqPH9?F{SchM~8tGh&ZM|=g5i`mUy zF;_zW**cTps!=IFlUGCad)l}IipHSa5wag?c+y{s|46TkiSTz;X!Ez!h(YlAWsSMg z{2eNJv-(=c^R_R3SBmB4q!$CSro)&lx^zPtDd1>Op;su7j&faDpm0AJY)}3W1*wa( zKC$h+J}{bu0lcvPWr9f2-6AeGQ;?FEVXR5>g5TphJpaSR?=mec_I8#_MFKVDcMMKc zmI2+ibm}@c5lAccG2!n%ts|6Vt{iuFI5L^N;$6t5eVj{|^LMEPN8Gty>?o{UGiWvb z>G%oXV80uswRQfCtAK%fv-f34%sFSmIXPU5B!ipU4}Z4;AHo|)8JxeaJkeM|E%#F? z+Hxz50nH`1G#E}NE?fZ_i|ZczIn95^Z@p~{P`K1t7MH`<$5Hs)ypU@f6x_f)pu#Vk zEotKBZ-3u;Bu4k;66w;V=y_B`Bx&bbP%r2zLX&xtTs!espfW?HgV9H1^1J!Te7K!| zorxj))PE})SX!1swj&PrI=y1xHBil*FQZ}K*xMRjUcYi=F?%KCvq7M(9$rpu`=*uq z$4mC_Q2p5f97!?I?)@6HjXwQsl%}jyKz`nf{C`A!bx@S;_cuNYDu_snC?MTPcc^rC zhvd@TDIne5A>G|6-QAr_cQ5(7_|7}?{^<;|%Y9#Q&iT~to?h%>ykL%^7!-@M7`)9_ z-+%lXdi!efCLSEUHU~|yn@s4X;=&n1VX5j(7+oOhZ+D@V4nQ^}3}=Wfj|v}8WX`;+ z4OxO*FXSj4&?SlzvHr!sz_Z`aE|h;W_&6E&_9wTKhajSj5(H!Sx;|naKMr!T|4J*T zd0*Ei)Bbr=2TNsr4`Fd-vkcV;R)xb4<6GW+Vx-x#hhC1LsZ>x*kZyp3ixp{{-9cfb zQ%3W?nQb-)JhSxDU}Rndh9@yzceS{_e^O}lpMuC1cvE1dN8ssSO}HgZ$yu2?u@^)~ zjTb7RfY>0V)oZbzepS0#1vC2~#fii^ArJ*&xO=41kRk-Hgs17|K$=Uv*u*?VOqdUO z`G_|PX@(!H$o$dcI25?3EBlBNnGd%IhX1(+njeI?ba|)oUTEKrzjKFW8hY($^T0@e zLZedoQ38(6p(e!vks9x+HaB~8H$iFlbTP@^!umY{Dsj_oyC0WaF8WJekxlXF66KA- zd!miDc6Ug6t{GXv>+kLiS3@Y>0~$a4BCHgtmcwkwmW6X=$^kcHyL9e*m*^b@q8Gu* z5F0)?`}=^yoD*Pgoj;fZJlbff;c}u(W$qGE)NvqX0+8iMXFLP9&&x!&i_VwbK0QsuurA@NpJ$G-7lZer#3LC3Z; zeINV2kl)>qdzu%kD|5}Y$}fM%m!fcSN6L{c z3&vY&i~!Nc#|~-zz3UNCQ61?suTjyYz1uW+sqCGNOM;t{98)TlP-IJ%OUX4TF-?m8 zsiv*1E2Ocu2Mg-x!hLe=Jfg9J|lc4iDo~83sZ!tej340plTFNc(^@b%+X|Y^+X^bNPU0 zuA~hWE`Yy(UxR0@9)bHK2YrIX9Wx1@&3ZCZP|0HiomS{YP0~-L53hi&KIHHMZu+Qi zeMm$k{+yCP8V)Rd&{uOXF4J)@UH{AYMR_B(GoDQZLK0!_wM?6t5^@nPR|kC{bM(e? z^|SFGrn0FrMH@nElvcC*WQB?Uc4mNWBZHmxC#~Trv}yLY-^(;n>G$MB!ZgBU;)2z8 z!-P)6dNDK?xfXpTk?G2uoqv^YJse&44XUK{B`83HlG~kcY~PO{2S68Un_(v*WCJa6 zf8JFGa5U?jTILUMzBGspl)3vR7!{E(_Il&UIZTeqyO@$UZ6IdB`O`(?KvMG}463_7 zK5r%7OCIJ!Yj|m$Q98k7!TPEjL=N^+@h%=TgD$w0AKf zuZt@OQZ3%8$nxM<%+hX<<@TJyEK1j9*6jLcp6Zo#<0VwhKO2i)rZ@86AzuMe99R)QBH7$!x7`K+l~y z?BhC%v4)30kSO*=+enDOW3mCF%6?Qsej~@Zr&#%`WP^7?uioJ)}2rI)ufrI<^+_bmOD1iK#SdZV?+hTXbma@ z*!RgSIUmU*aQnGs-Y%(5ANFO8+yS~~4J$r!d2y=72ahA^^SwX(Ijs;kXIKa)!rodBGm+)T>w?2~W`lS7DT)rdHQo7n_{S#|;l*5|W?oVCT@-Wn%G> z#?a^OWAiUho)6tK6?#AzRAeiuUiIEw9k#m&&L@Twu=BdDc2v-)n6gVVNv&ld8{6ac zX}9sW$}$_bty3gl2H>Zf{|AhF+LM*gYjQDy%ob{_9&VZES$9opO>UeK#%hmAHLHx%vPKiVzh?H=ha~(( zk20K4?#go~IX=8&do8*34Pr;yybw&on2D8caaSu%(F8Vry)s3g+IvIg8j_&7wA?^fXoN~rnpp7{IJ@e0EXt$f^SxavZRc&_dw^q#Ov$8xvN@=pSi z$!u*PxtQ--(PF+cPeL>dsyb-oN*P9es!Y2~V|iKBmEtJpNt5#GJ0GF&x8)h$AOGpQ zGUr@eq6F~&8YA{tkCbq|w`uFS#hZ@F39cMbUrC7dQYG35k>$ua{Z=2L7S)#!p@l8Q zLzm4`bym6roFb@)*Nf7{aVigSd?G2NYPe_^yeD|23)J* zV+ICbR!t~MC7Svmb~@YrLEW^5@!iK0hUKFdO_K)lag}Q(&GLf89EOEElccVH2=|3^MD_Ii&%eg zeXstB_4ayhB3nK&h$a{b2;y*8HFpy|!>*L8Px_^IO1z*%%#9Jz;dPmCVRX&HgZG`~ zOC$N8SCi=`17F2e!X-D6_lJvz?-{*yx9z}hfK+Bs3h09tuA#=-pmRn=7Q{+cW|~`*Gjfw zoVdy@pj!m|rAv?OpZ%3b3bO4vSRa+oCbU>wsIqq z4Jy>E3h4}T<*L=m&DvcSTn{onpNdfPnUn?!mdU~71nO}HZ8O>5s`EskEKF} z8Ai3bb_HT)<>ro+KB$pHyRL7ravdi(>KYvQmMhMt@>672nc6GtSjI2`!PVf?j?(9h+E&|)`pT0%4Hgk?ptEbRkC-*6st>z!|EP7FTI07nHtl0xoT5_U*oGdsFtIKp zu-zSkyBJXa^PGc@AP%$jO*|=C)Rc?6cF&kT^$LvJL+jSBaju0pvCvBGuswCcgWlv& zNWH<%i?Xdcp!wzn>(j2V;@MxYUQ}Zv6;~?%4nSnLFXKwH6O`s*rpu zGug%Ea~dmbrg~hK-70cFb2SQ`9=yLy2tL@Cgr3##j@X?hhPFyU&RwIFOvei{vL*|s zBY&-&4XUaDb#B^yWS}D1*#fq^en!;`rsBf&jzIMQv#F$D!H8Y437o|x zo`%S50tJrhLZ%v#(yPc1nuRoL)$=E7D7ymvfs1ZTNeY~mH+EhYYq!>EG`m5Hou9 z03*#>BhWGx=Yg>``W>w(xsf-#PM1IrNRb~ zmzWESa?f~2fN=0npJ|3Mtf31Jn7VJc@^}!SDm}eOKV#g_pIW1gNmCKa?jFb+cV*P3 zqq{Vh%M^#50`sUxm@F+^H#N)DroW@BT>-U@${#yqQ1_F zp(tNwwFUkA3_wOM{&ZpRuxz>>b?&gkBMy$KY_&<(8(*@vNBzty=vmhrI`tHi!M@zY z!Z~UNh#kTMN5lHI#?{#=43eCOL9ILQuo81A|G1sN>%n84?*-Yjt=X-UO*s5)DO)cP z>iU$5jf72;r5^-&4&wv4ftw)cG|Ro2Lp_wEhqJWqnF>Y!FrfJqE(#CE7?3GRzjwBOW2=8lx>)2GPpE1vJa^T;m>UDGMXw>-O>$`f zczlb5Ou{kDp`Ss}UO;KMq}+AzL$o?+h_F&gfBeo#=|5M~((pmGqyW*s87e7~EclIe zTr*{ys?EI>H1M1s3`+ac6^LS%<~J~6WF8jltrz}1qQfhZtGBWSb;?I+e8%khYbHll zpcqc?c6%M>`dGCN85=dOrq-yy_#Nn39mw3>*UNohwdZD8A{7I<{vdrWm&}d31=AqA zo{uhlVq{ju7ofUH@9SHIzCRwTGbWd07xE9g|I@g=On7+91tPQew#kkBktfiy|*myj*hyA*}t;| zL_DYdu$axCj0tTxkut^Tw!SXE{u2wPBC4GJ$)Cq3GNh=7GoeGtQwdC^rCHx;?sh~g z74^{$)KU{M#g>(pu;dX71Y)e26RO8KV2*dGo@O49g=z^<)Gn>0AkAE$6qxf4ga7@< zkHSc{hu(GtP}=&&4b$=jq(7aNclsW(uDE)W2UZ!6Hg`sy+FoY&*mRuO(m3hYOe4E| zNXyv%#s7%VwU_d#z)yH*PEqtCexZaLfKjhsH3aWGAqGH^#TPw6}FQ;(rNmoy~Z<-^| zIvT!MQbX1sFUuah+aW;WVQ(+pa5z0RsdQ>S7s|sBB}6pJ$3!)PJ#|-q`KdiX!ZleD zusw`IK;P91s=vk*9Bv1JFw!3WhrQwh26rnfE9+cmAK!booRcd4_911087;1 z^&42Cu=;)b1LxYD)igVw5ORkn57K0`mY`U2Hx7u6p0Xp8Gt!4jZ z3d3>pYn+n_qm@I(6rRP(Ndkges)MVFm7z`ph_M-rY#N(O`7N~Y&r zU-<(G-8`$!4-9QE1=i<|c~SxSAmMM&fU_AUj5?<+Pq!_$)XKV4OgMApLts2AQB1vT z{@f>VFUElyseuW0vIybRYeeFl@Zcza@-KMiXa$Ov?}*5;J@9cb|I-iqSW_?P%!qqk zXo0CFti<*v7%NkRn5(K-qnnO)jd_9K zjh6zqd+q1R(OPe@zlV{cNCEt-pjw!{s@)1`sX>k4;79fA&x;g=pJ%os+`0;pZM6?b zQ@%Jfq?(~Ng17j*qe{DJg*$ETQ zAN^syOodi<5sW8ON^I`;H$=L?&FIh9p9rVwbwNX1eJz@@KfLtd1*HiI?IuhAmWk=! zF5cnyuf|MbRG7o&A{@22Xk*OMJ?H$qTAuO9NJU7$aL`De)?H!+qz@s$O zhZn8?x7_@6^}<#4w9=5DpMUjW(>LRzz-4IiilmM)6BKt?C|p@q6M3F(J)@;PJ*3k3 zT|#@(sxz<6S~stHqYcZ*aj!n5wJm&_cfC~)-%y~n9|N`Z+hXeN+Z2zGdVgW=RPd^! zYr{VK`%lU&x1w1m=oTxLWi^sz?F2|rcgmpV|0FC=JJnJLH9B|sHBJcOcFEpb6q{s2 zGuoj&ih8>cR}Xn26~pD*Oj7B=b0uKtk4I4V}Xl71vgs&-nNALDwF;ec0z(kg@4f zc2{#Mj^-|9(6MdlZJK+z6-GF_xCd;!;A%SF}7KB$V|d_*FZ(ypD#KL##$+ z4V!LtmgA3pk1zH1>-Vduh~*gjY*i>)wcw`n zVCL`uSjI;s&&xPDlm3^}^`y$29^@&Be)U8lqFR+k{`epT<7nG(v13XEt=XGhZ09C z^u>PMTPw46)L@cy{EUH*HRQ$2uUsI-N6qdKfXe5%;hYl@rz3a~Y*IxZIBALgaEwQj zscN!uirD8Kva4W2WJus^{uC(mYIGtnO<-fP?~S^=fYddbKtwYtt|iJ&aFkHW>onY| zQ(|=(f;Y?ZUOAUn!^Wm!iW@47e;MAhy&)C4!>^wFc_a_s(ke22>gn!va%e^G3m2R< zNNGIzF}`tJxtOT%FJ!o34I1KVE>WRkQER^d!OiEVOWSwhuZ?FX7N$tXk!5P}Ifq!T zxZCjFp+!nR>ylqU0QEqw{$I5-^A>d!HnMjAIGDFK`Z>CNIQy+66NBqDT#vb}qoYz` zhIsrm?k(ZB6%~m$65A2<2E|N5@cw;8BnqaBdj>fgHtcQNqi91dZ5_N8e{`s73{-#G zfQ0wcbOqZgp8ZDw{=GLS)oH<8c71$4zrQsGYsgaG%xq0&dwuZ$tBpSCixioOtp`so z-h?L+I8q9-%f!?gBR}BfbW*niqf30(E$~vMQaF6b6W?AHn-;=mqkpaRF9ys&RrvPy z%z}D|1_K#G9(fo-pYS^8abCP)6S9I1e)3Y!P=5LeClm+2zOTPP8DdvJQTHjufg^!D z5Nt>3#saqt_!-@IuV9MS{#aOHnX(P5`?~|x@lD4e+{a=fZ;FffKJ;EEXoj$??vq%> zSDK^9wdQzLO?FnKc0W-Ehy<`vXwZKQQtTyWX7rrRGI8{2y6WAwRv>u6%qviWSmjLp z{liJo$*1j7{H|mnEj4eMps0#f__y)xiiVUYu*Z^wj8-e1FW4iH+i%<>Qb6 zdg0Z5dlfWOgxOIVnh^5GzTrF6z~oKI1M~O4TC#uFObcq+MGgJP7k~Jc14i0&4N+G0 zuRyWog~LcwfJ~Zd5iEN#Rmz~<-2HA5slMqK3_DIQL$*v;U=R-AbB->;{$jVa3}=^| z2*wIEX(hH>6{+EHJp;Ed^FGQ)*(g;@Wu5a3?vj5&WS=bAQohX!%Z(Oot042@ymC+N zBDr`>mQ3MLD43xclLXkpd+8#k#-=g_g-vw~>jBt{Volc{G7L)xo0x-R0VqdFL>bYAqkCs8Xx6p{e&?}XBxk!>7`?-p z^JI%@4mix#bnlcPZw)3|ao6Rtiw$?GIPP7S{6kxV$paN#dNViZUalTYZAOeh3kbY^ z@Y0=eB{zRUhxC$uCGjO#5k=v_7Kn(xc;$7EsCiDA{aaE?Sh+TMbdNtdI@0ga44}Sg zs3na4ybFwV}3|*5^aL(bKuzIm<9_&<*66p<`;KQL(8aVR6ere;&>JV3P$eMzGG`wthX<+M&N~W-UP4KmgKRoT7Pt4VKBQ!K(BKpg* zD~bQTB?rk*L#=k`pIay^Bq67tW;60xW@{)JP6+l42Q$A`ju8{uiL3pW&;Rd6Z-M^z zYk0UUdt)esDFEJ_KtF^(9K+JWauGsVJxE6vEO^H~5=j{I8}^rLDi@PC2qgKnO-!Lk zNRm?EOy{EH8W0miaC}vQU(mx7#TNUU867M%vPGJ+B#=2o!33rJrzR@y+NYK{=N<1z z^oVlF5+nTTV2(qI7X4e|IqDDn;676)!N4Et)9k9{qvUQX1aI2WMe8Myc?5Oogfgy2gT8CzZc4%Z_9P%b^Z|ZFnu*{MI{en<7 zv|w*-YwH?X>2a(U5DzIVCUa43oZ0A6f5Js*)2S%^lKAlX{0scIpr?||MURC-AZ8)f zVG8Kg58b^VC=LnNI_W+0Fz~aJ&BKsFXc;tkegNS~P<>}|wsmlLEiKVNdV&SSE2(IL zNyYXcnsj-hUorNkXsHm-?xD`b)$r8)k?FE;;?HIcKf`Umpx^fDI z<#Nj&|AC{)gu!YS%{aQSy?CR!-u(n8(tMbN^MTqR>b(pG{SI26_-tQF<%a*f0;a@0 zhjTR!{O>rw7{TfksH8}*`(Q-2?5vbhq%igV%x2y&Z&VkIj4u7AK%VfI^`KBd-@P7O zkBr^QV(KO>tq+82HWJOKNTERfMVU%DnVO;iLhoo+x~%A#xc1p)qz;3MGakpMauGpS zu5))L+5F#ejell|@7^F=pitl>5voixABCMM2J`1XE+Vv)XG3arfIavh? zskmdic&LvE@w8&%iooFX|Jwa$joj0IyA;dve90x?F%K5T#@WE^*JvyP#ZruAb)rh= z&F&*D$;M>=)|RQhjLk$1C9?qEOXxaJm$kM_ev;;ndtx08T;H-^+ZOItss^54N3Q$B zZ71oH>xVyZv-Wxv*15m_GjUTaq6ami?D2hoMU2$}Z*yvJk$ltQy;I|gEkN;KD!48A zH=p1sp>TD;06}eGvorh4*F~=Rmp{)08@SFHR)W<J~Iz3VJ*W7t;ARaov?TxtdOHo|N9?5$^el%-?pEft%fhBsggtNNP%fxKfzOsAH+lsLI5t7BlHTs85YZmiBqH<*;D zT!i(7G$hxC(ind^M(}F{R;j&M$@$1oEB71gN1j@ovXAO^1uWae?knf}cP=+KmrhM% zhm4xX44yL0Ip6FiRSkj{E>_vpZSVE}bHjWEQ&9>eUHo3DYCR*d;dc>c$+;H}2ekNg zaq_nhV#Qxsb`cc%3lUA@REoWl>xj{J6GAVk1!OjXkL}b?JUew?zqxBCthmKce7D;R zr;~&ZB>{w!%gZ%I^=O(co%3}W2Q=F8Ec<1rM=%IJv5xzIx~ts%hnf4X{b!6lm?&!NBH#^Ny`D3^NzPUfT&U~LYl~G@%X>v zBT&%Mk?pk4!7*nTDJwsU&Ec?2p%v*Y-#;mc4lsD|U`=ca5ib~yinB%Q8+!GhN}jm| zktLE4+o$#g)VE%IwTi>{EeaaHnES^0F$7{wWhct(&xusn*R)073D!9-@l2lbi$t8`t_2}__NQZQ$>JU`~!ERK?L70S2FP=z^H70twKf3gJ-tr}>! zxhu?d&@v1^8$7Vf2n`tr_)o4Ke*LR+(t0c87$2#29h_w_+hb`WE7YCxNBH@y(Lp0L zl5PA25jd*kI{YCa3GcH zE60&_su^)$AWe{vzDcFOSO5_h^>H*PD-AIUHai7+0{PUNG#y7;PQH;itcP@xEj*IE z2UTl!wDp3ZjH4Rb7mox)Pgt&muOG!2?rJ-8kF{cQli@CXY+A+cI`v;g5_U3Lj@S>} zPOWj)*GEhEu2)r#@?(aJb@XtmZY&A|Q`#P#&V}w^cwn@&DlmRr^e^v;)tjW2vO*nG z@A9)X18uq_5C4K7H$LqC-)=S6!e~OnRIyk!?$U}ku0!wv&)!E0127|Fa}gMce-ZX+ z>(Ycgd|>sT$lYM2OdeW-{OWk|2ADL|eGKL(S>f(ryhNna!@$egG_HD4-CaI@2pa5Y zlyI~Y<^4+1Y6alTY?r6{Dz0R|ua{v05H*B&00L6nGdGuTa?%ZW2Pk~DiKh>z3f@h#Yw3jIiGdvNj&C- zRNcJhYKZ;P;)uc5>i#f_W9{E$*N$~wj)NL^{q@agj@6?XwWi_j;4snL`xuT2*Q8Gt zD1AgmL}3#(0qBVAMY9HX|B-?&ao-X%m+rU*HcQfG%3^i9hd0kUphe*0M{#-@U8a-N zfB{kb28KrV_fbPgG)U&fr$59XfZyV5IlGK{<7R?InH^kXwh#*j`H*~tLM(0VYS4`{ znswZLu)8CU%Pbb7Gsj)Vt(R|aKHms(a~m_=JerfaaZ$>W8Dc@<2?MOyfiVaU=f8%) zG`OLCs(dZEwju=_ACG#B_-0D)eyEU>2dFE4m>`1=+_~Ce?U-@@ zc~r=bS&d?6kL9gNeV@ScUXC!(afoj7NS|51><92b?_}|2#iODX*aOr7OdjN_UxGQ zHOe}EP+}UYtM$2avI_+bJVvq0zl&YlelWDm)hP>Zn8F0<_FZd$?F#N|r`_y0(T8~w z7E`}>I9`=eNOzLOG^cu|3S6QX0`HSmes0Io%2TInUjd8;0LlWmjAFLjY7v>tm4=y# zU%8hoWuZ@o_f6RshpYX`%sBQUNS~KhLU6BXd4*A|LDDgssH`es<{dPRB_GJp=Oa7Y&{Q6QJ~i zT&(2gTh=McNid>C07|K@g7#0(6uR-#FXKm#B4@=gzOe$rpbX)I?6-QkX$Ct%XtuB9~>ZH%;50Bt|f$R|W#g>J(< z|E~r8Dq%bR#ZhPW;>OwGxEYt$hu0%TP?!PjWS+cZXN^5G{9lDlYTNK;6oS2+)DB41 z#qot+>5Xa(W|hfaXOTiE{YsJPfaX$_3X-}8e#-GPig0^<99CF}`+CH*315LaLGs)` zxG7D9oZ<(LWu@WP>Rk23;f}1KOmh#;)QI;V40PNpj&2?vfMxTfMv`qd0guwX{oz}; zPwSDUX|S2}Sg%n^%J(Tt(l>Ep5icRr=xBNA3YqOhr=@mwy4w+-&6n(gRbK&`3Fg97 z)AFGRBnbS5qwQh94>)2IM$Kn0WR&S8aecU)33EL<>B@uyDcsF>7wh+z9>S7zI!J*% zWeTTxU=GjUqX7~BI`#$-=U!@B>K`SFi#uI3(3mM64ieH#4EDC*`MA%d8hL7{vCHxB zwRukLoATIOv0EC@g#1V`l+FF+$&^vb3Apx(j|x|*Zj~x}fUk0^QvO}BG%sD(hRlFd zn8|cakl6s${btP%9CWH&1v~FPvweVIW4}*Z>Rc^J3y+8yY`7 zA$shu-LW}RQNWxt9o#yaqbFX9@B6*I0xASjEjk>a(K>YW*b36q%N=V;sOWvre0^=1 z>Ewp_vqhYeaXVs}fZ-;HzrBF``-Bbf zcAoLML0-mwt|TJBeO#9?_Pwwb%665V@^}zn#bEG+?VBD`gM^pzm+I^`mlm>&=w>|b zR=xehtMZfPf|oV|lr)QDr`8aqMGcZcwf&F7RhSEtdL{zC*L`=*uGNLOw37dwPscXD zPe{-=*fn4tQmbm8gN+3jJOzMz81Te}2qVsB%AqwMOZWjxJ~UG-52MJHP=JOGkjl30 ziy{PY2Uz~3rRW;;d)adE?u$<$`e0K7?v;plB4SH&l(9{wIwj`EsgW4;2u`tsqB3~; zQ>8k`jaRz2+r=kb;xT8|fGo3>1aD+mF~DNns27z8iiqGNt-8$rehtE*gldhJU;dhN zc8Qu02l^h#se-9|)oSB4UPn>Sy83#0(^=`ORMil9!c3(knS&r@5K-_N@u8UD&AXkG z_e-kpNqLOX9EOA8dX}w1nFgfp8dPS5rC|-T*P@~uH#YDR_3Rs-Hh)&Chfdp?{FMP3+ zt{|0%;fFI(;GZ0W&qbWg)!qsVek=J$3BlMWW}h-j$_8$wo7A`glO=VTet7pvZyh!H zii#oXr3?dQx>~M<^B1-jhd+iytp(jueE&#)P zvDyE7nlH~?jzss62(LhPdZG`O+yDs`r*}+aYwm&#EtlL#!~Dyz^R-`6kL-oe>tg+V z^{1O$41hP#!#?h$9?2ruIc)eraTdkOnr%#eDX}I;|MyyoQ*iR?*hYIf;2))$zZg(8VUOHjMf#pMW`(->b_%)9JtWG zIhc{xSr57Yw%pLF@!^$w%Id%~6HDFP1!ZXV1>P%1BK<}YD)PeTLn9eo$ z%xHO}c)omH;r@WYVzJyl{gWL?XqtsR#6m<7TX6P==sfgJwnNA5-k5V{t%0@g$}kz^ z3tz?m62yT_Riu(GK)9R7yJBcZ8p>R^F)FP4hs7SjCR`M$Ya1_hLp0SsWy3R(mnQS17D>wS;Ofs>~l$Gh3A^?n}&B2cwRB8oBRPG^R>TF>PL zu~O302@FOOhN>GO5h5{J-S;vF<<^CS-mmP|HTM*%mtiN{M>qtAH-|`Cg&}J_yW{;n zN{w}AR}OvpvB*}ddhY>9eFn%l@OV9U&PA+}qMqOr=D6Aq0NvWwgVjDw{ktoUQn*x~ zKjbdL=iS~~U~8D&VG`W3dzZIqac>XrLJqu<70k#9A%Ybd&@~{QD@jcKNGM8gJ4ojr zom2;SA=WomP6#QDwrw7jT6haj8ZblE<8X6lBV5%%#iWRjt@vIsCSLI~fi&@VimYsK+f<(ozSD6cUm( zG*VS#ilu7HeV2qPci9+1J?UKek_4MgIclm+IhfME2w~ftg;_K8=6aZE-ru-z9FGXE zt!DgEWu{zmkiigW2!56aamP(7{hL_2wc&6;51!n0^TRVsR=KUdJT5B+(L6!R$7J7( zC&>*)YG^gCD5lF@uFW~@4|+}LTtT$KQhfE5Ziac99{)(Gp>k!lf-X2>t2rU;_Eu!9 z8zmpoT#+(G{C*sXv$qz=Q)wju@sDg<>!%EI2CFr`MDB&(cKc^Mir*Yh2;Lv53|-Q+ zDYE}(L;wFJEL(Sc&NY>fMdns>Hq=SjD}lK-Vh}|S{9iGs4y|l zvtrkI3gt8%4N{bs%^Q;Ib}cGg@hAw5^w8oA&OeNmgOi6ge#V%a2dUW6+fMo}Hb6i! z{Zj{a`VxN`XGdk{n)l{wLV||@+9|}zSgGF=Bn+L_=Y$FzWJ`%OGAH3!n6;}Y)XCj>>{~8b*~tcIlE^W z#J_RbeIL>hZTd)3CO;FSs+;4!!YThIy4>Tt<=>fQYrdb?wHqpDG5FpM*xU~d1Qj-e zlgGG7Ito0WZ*b8>#)hdE{*%Fg8BM8W<&W4HxmiYB(EmpF30Xgm*HX8 z|0A2{wH)1_d|&&bYySxPjm!|M3|tWXt^m8C=!*zMm|H#L~` z60q8z+=W-2-tSMRMHjV;VoeAcRK5FJ-k0mYD18)ApzTw>QRYjlyAA`pC9P#wKUamP zulW@b&FdASUZwsu5@=wSx>xq9ytli93i&(%I4qi5}Wu z6Nh1Xw=P2-+@rQmnPq|7;y&VWXJKjwwBY;7D)p9K+^f|EA0zP_l9*z~m%F#>W0;R! zxQsYw`e;Zk7rKU}&?{(X9 z0{GRJrS3={9P@{SqpkNB#5M^7by6!7i$yk;(i+Q*rzmeP_v5xLYAsft)w1>VG=KV` z#m94RVpA7@Qs>u$Ch|ETtA_kQ%!>I_-B{^p_v63AM2_;co_|~;!O)%x8e;^vSVPvi z7M-L-&otukje1t6)48uK_`JM8LY7c-FX8o2!3Kj^woo+rly57ud=c!VzmwAvyrgRR zD)X6X&S3Al@n?Eiuy;_AP06O=5R(&>cF#1TL#$usYniRy9ne(Re#Q~2x5lh@+PBYF zKW`Oub>#x~**}V>SHCcXBO-5OnIwZrnL6ie;L%7+TTrnt78obhN}lW|Uhht{1z^fO zm}WGZv#0;<;XDQQ;jek!SLG;g%M>9w1MzHx85hZ#D$51BW^mp-V!xK~kb$r&Cm{wj zd1oUDpH-Vt#nS9Ib|w!nlS0jq{f13-=0Yvzc&NgMN3b;T8IuI&--SRmGa?uZDOZnF zot-1v2*#avxFaV9!MTJ7A=@u`*vjHpG#$~oUL;Uuq5h(~sE4-u^!-2FE0fs@eO!$O zTZ)+dEgy+AX}|YhK5{vJ@EbAH?r3uocyzNWBuo+j+y{?=?4%y$+iIzZ5Y^wqBMslI zqOsE+68i^vMahb(zjg`tM3l!5l^Lt@fggY)i}_>6_+K5mMb>_uBSWQW5)0Rc8-9V$ zoBKLrYLVS?Kz$}SB39p+VLl$q@C=ml#nixw5ru!eA4WSpU}Ko3<@Pw&neKlFq;mb( zL`{MElU~_;BfTw0@17_F6td-C?QdzkJoN3#VC`pfJUMm^nFr{ISoa9;lX#_pL_)m* z7yVl$oMjsZxA`#WY67yj=8f~;L)5d#2pEO<%yH^#@==q-JC81k656P@Me*xWAs^U5 z<(_eTLmZrrqQxYceZ*(CkbvZdEZsh(M@8`W zwz_VLO>l@dga&Q@NpZ&H4F=lY%>n-D;|V}nLq}vXej+O%is2-=yirdkN2)(7MV z0oB2-{6JF%T$PGTs!;XWZs38tGhT2*VWky(qH|AxvV2RMQ0gI8SxC^}Ho{lfR-TnV z1TGGKVQHXvLy^mEh-@`@ZMEy0dexyTB3_n6CSC1!Cg`sBLJ1r}URUi0O~ z&R||anaarC>4XtsM@~b7be^6eCgVH2RMm+me$rf1Jg8LXgj9*yp3AJ*5js*Z60q?2e-&VI@|TK=1iX(;TxkVmqFEQdPJXK zK-q_KrVS;rf_%>HMNEx|5$|k+ct_X$EyDMBMLB%^tfl5H~8EFGSXzndKY77dIy+75Wu{zrn z$&$snrVZXcf}O^POtY&qpgY*yIns#>GC!o^dy6MN&3{V>G3Bj@)|zn_ULds=ytLCD z-g}orEv$RCDBq$M-3`PN{QP@?OL6w{ybhY~Z9X^y4338r{0x&<`6*WWC7#uq)7!JgNwz$|*u_-|!IPYRJc?uo$Pq!UjR2fQFkvBw%wr{0* z=gBF2zgsImU^8v?$^yfW7W~fhyJ_m~V4Q(y3OU4kccWgRq#QzC@lws^*)r{y$i`ef zpgjBIXR?-`1rWs>03=~nhB zG?^*YqdUL{{XtaEc8mG39ocyKkrwCs@0FI5Od(us^<=RlT{agLpA|Q<;W0C3phs~2^r2IN5cRF5x@wJqN-sN&yzS7VBRHqj#BE>CsGkks# z<-}R>@uw|x7FYI_yNk!2xZr*#bP0uywj>0?v~FbblbbqcfRMS{EotyTApuO`+KZ&_ z17kwM@c}&@r8W0_cTgS!5wj;WEelW+;2#Zu?g30!!l46k=X-^v^QN><%uJtAZn@JRqAW4BMt&vE?25-&SLc6JMt8ur7_W?EcXTEy#=Y#E zn5s~L=w&|-;ML0G*qpUr_u*K*x|JsuiW3l21f-zghr8?ZgUS&e20wrQH>qwlB>!<( zA1%ON8k2uq8c9)VY*aVU7e=Q310^orHRc~OGJHU&8wZOZyX#Zt`53A_yqu8zK)|ScvTX)|OGD9W& zu*%M75u3QP#a(*P1NaGq$Oz#mv-yP6g8_&~I51Qtj-J^fqBA6k%s@d6n_nTlGtwl^ zPJFI=UQ0pCtX1LYpcBhIpN>dA8ZuJH0({`z@u6TY*06e0$@V=nw{Zwg^LPII50(xQ z(xtwU-P)psE16(fSV&6h+^x*Ly1An_x%$juyYsuzrH$emD2AXZ4$Et~Y3>;S%jtSt zc-&X7xApEdlA=> z<`stfGhmh{Na&BkpeQf;LJ9IBL7p!c8z2n2EZ#rf+Z9snPPPZEH7_Ai_eP7kRy;S7 z{HVvz(7No*uBr zcI3GqiM!0?{&Pzw-?<c}}Uu#QSK~SDzY|85-!NIu~AiN9RE^`%yd(a|paUC3{pV)qI1n59VQu9*$ zV=5i3WUPZ4;fw4a3XRUOlLs47#}3L; zsj{gW?CCH3r7={m(ml=hbFn|c@7$z6qm+TKlbisEw)gdn5Sw8Xm)~78VwkKoONRw1 zULeAkIaN13<~@>$uwjC6QoTW&?*kvDrzmujDKDRZOI!fJLxO)1xfTOU4uqCR89})vsW}ctWOZzX z;Z*X#S0VuzY>gGGv4RfQU;JvvkyB4Akb&S%1UDCi7%g;jGBD&y?<`FGizWP1L-p+U&>uZ-d}ALe=UCQGmT?}VD30Su1BjUx}l z!8QwvcC~EGJvU*MO13-4Waf2jZ*QDLtnAUgeflb=OUg4>;m^HD%q6GPHyXFNJ2wsQ z#1o+dAX;b19;Mdovl-r}e!BpI?-&9cEG`M5Lz)ya*&YB70OFhb`hB6u@gqXvPN7?r z?bJ_>HlOm zR6;H28pCf83snVyACSF*kIOwVKntasBAeo}!kZS;-h!^GCyUpsCB^y{*@Ob%;Thp- z(RGvJ=#bK#K4~>`S!GQ2XVLI&khv7wi*ZH?>bat=AeDT*eSUG2KD+O5O4yjtex(eR zN(1pkrhq_9s`<@jE~v$; z7=moBvCaFGx#(OxoHVqdNB_&uY|Zaw{vdje)@JU%gvnR8XWq)#hb90!5m3i&Y?9C< zz1NG1G0QQbf^=V8r|Tl+l3j>5f8Pu{#A@b?(p4#xr1ZRH#vsm40BVKJOY@Ro`~#7t zy)F|9;y^-|uS3wRIOU_3Vfv1Y;-0HvFLaOS(?Z`3O%at5F%nc^iQW9`tmA=;>8K#Jo$g; zTil&YQ{j=+Apf&|iUTe?gV9;9t#gf?2F?#2nvl5XH-W)F>vHVNPtR}CH4rBNjsXYd zs#P6uow-K9)d4K$#|k0}Mz6tA>+NLEA5<$8BrHGRmZc!awEpkE0Xcxx-U-RQ<{j&) zVX_r&{8R%cBO_ybFdNb6aEzvy|8|7+3ttN5P@uw>Awvest^V)!DK}AIzXAscj}IAA z;>=d-8KIqbkS0n56+(ocTGq9c{V~zTI%~e-2F3lW=3W7+|3}hUhE>(ITiDko1nCax zPU#Y*ySr=C-62v?(Xh5lkfaeFE0`HT5GN+#<)lH2B06=K4iSS>c9ua zj(iUN|hE)_dFv2O2!@cmZ=?z9nTx8Pw1vuczpOuvVlRa-=QEZWph$l?}^X zTHZsVzk#(-5ZTRkQ4DT!Z(wmU)^+(`#dRL0Z3UD-RwE{}=mf6Q_j`(FqOn`001F;6 znn%n-J$uHzPLG1(<^R02$D^azOX~yB}2iZz8* zw|z9nVt@So#5s>hRF=r=B+^VO(A}ROuchx<=E4Eki_v*RCj^)0d$g@?rR7W@S^A-D zuOh%G*t*ixtOF8S%l8CM7$4ccKYvQ(v_cnC#k^Tg9T5!&8NptU}2sLk{-gA)WqxW_IXO z**WJ!BMJCC+X9C2VOQYwR#pRhNPBHNxSdh(fRpnpbHwk?0mt*AZ-BuIZ=F&Cr zwu19dfT)c90VI`X3#(%Qd6PnaPre0fAgG&3h~#?ycwkQ*4u1cF;tb>pz+V?0p{utv zClO->ZP)qiLZ{Is{G;*XNsJzoy4(?1f}tSgug|=rjkUrG`zX^SL<=~%A^y6x|@{@+n%1q)c&^giM)}Y3DNET(*CP+$rXMX@l>08GHorK zyQ-oN4@-3QRBIXDryslzcMg=QS3m6pX9eNSir-VIS$dU_X_G6 z7XJ=p%H-KUXU)T*(|Yij!RW-Lx{{`C}AgMkrT@YaP-_n7lly;1h4LA(#S!E{!nydn_c`WPSo>_i-Ry z{Td!n-PRvi0^g{9i5+Paq|T8}O@Ztaxam4|u*L!yMc8bGQD)!N3h)okpDaz}j|J(p zQ1xcr3J<{x;W;6f+C9zjJ$P8Y!BX9=G~ED)43F{hL7#odZ&c!3x?PnDuE1z76VUf^ za<2~{65Pm~H~-Z}6-1VoM1Myp*8^6Hj(CG0Jqe5?qF>%Ca@)&-j%OK$HYE?#Z~`w} zs~iWK0KrTd(*JnJKD5hP{iFC)*FTz~57b$svP1O0r#{_}WmrNK`X7e>gKQdDZ#+06 zBx(K7Q^Q@=m7;m<|2sEHlhWiTLc0#hvZnYR7%8S>?ZoC<>5wjK+?K)|=v}Bk?)gc) zCa-TQpz$V&Sv&YL$I^i`gTj{nblJ`JqA})?+*XG2o!0SIH^5hgRw{{zv4E+9LX71U z=vlw!Ed`)EG{|wV7q#yErU=N&N2zl;Ci**UwK_J4;#@1{Qc*(<;#e*Px;T9JH^9C2 zm&i7*f-DkR1F!Hg?Ch!#zma+5O}@fe?=_H?fdygNwKD>^yM8N%GuO9#C~dhZUFio6 z+r1J?OHuF2nZ+B$e&~)f-y|cqg6N@Xzz4|fnY(g`F;e&lN#z?rijXH|fA-XfxuV&g zAt;L(S4JR=^ml*C`9SdL^g9^}1LlDHr8?*Nl-h3yICVi2X)^mwu(SBJp09tglJYkLP$$yBs?m@1LLar_ac z$Xjgnfv_-J(FbF6uiQVRWx&6e2ON`s0wXt#e=LW%fcxiyXgcFEPB0Ijs7F-sUpjK4 zvB69hi6d@xQjIBI$r|w7!v?*@geSteHhbX&dZkXS9T747E6k2P2U09JR%1VLR+*t1 zCWnHmG$WB8-(Q=q>~29Wo0u@cM?KfmEN@neh9UTfEe5u>U5kohSC7GWt$pT1R%)nm zA+$+AZRGQ^8aS=Bmh1r!HO+j6(C0Kq#dko3y&%c(CHz~>b`r=|@j)0oALx&)E3-m-$3)k^BQdYH%s z{K1|CD3C7Ri-=XQ?; z9UozD4f1tFNn{i{kTfCgWm0U2UAz}(B=INwQdAIi$%pzValH<9tACoXg*=l5l&bww zYkoJtkZB~*+>L>Gze|ZCXv_O8-iWh8n82|&JLgqF4=n7X>=L4n31ZwDq`ihQ<~|$t zC`jRe0?rf`mLW_PK9Z-TKF8X>EQ=m#9sLGrpTp7QgP+in>tyg3o`r9pM>gX8>rHBp zg9cU=vhW4OyMJ`3fn(MtSCN?9RH~l<1@=n{f@KRI!BiF-RLPg&KejzNr^$9 zSPD|PE={>_xe-(Pw~CMDUaHK0sZoq?xOdJQ;U;1Gg24MMj-5CW(SX@Z5nb8RjB;Dq zJ7qYyui|n!xpO~e+r@^ox2hISYmetvZ!&%YYII0uIAM zx$Qxta4`D-b=leW6-^LX_;w-(l9qa3_CAQE89_=k$Pg0b0NSAB!-&8(Lffl=5b(f* z@t#m21`G_0?)esN+~C&pqu*gi+@KLUz19GT&#H4dC(EE9iWY&nDirH#O%QoYS=Pq} z+;Txc=;^3I0z)|(H(;cZlm)+c)Sl=5R!A!=D^aCfbnwD(7m=vWHor?gW*-QVVu9-p z5CZ@ocvUISrq($!A^F+BZY?85BG~Y=zs_lEydZQYX87%|$9@!KmCzW61{vZk-EeLn zqfvvBC=x-oK^e@x(eXJl2quFm4LU=IwjGdjr=|k11KVT6Z z^afrjgZiy%4_=_8$9RhXt7tKk-*s7?{%ph}_FJ)-Ef@qb*8asA_T9!i^>l6|O`O2x z$=x)qTy5itfqtVZ6KJyIv$L_y(bJ)Ar()Zlb){e1)2N)n1UiZX?&hS$9%UktwTHaY z;oX?MRoh; z^bHcuddWf4$JL}XzNSrXDi(n8xgGS_I;gjl$h}F$9 zTzxq~Z}s;?&4S?I!);nCC zrrWxN!dob!sIO3S1cg!k6#A>MW14OIIju~OnqTk|FiOwkYU^eTMJ^A3#U zV)BR2oD~UC8chDZFVLf2?u0C-4?O==v5_Zzi7Abv9ZkLGEhtt7PxTT2NkS-TLDniP zmb)cYX}%-S5>lenwX47`|+ED6u}Ks@w45z%Fq z5q6ju$=9OU1lHg?nQ>U0FT%OH&{f|9&ZljZ;qgI1LN4JfU<#67zRGdi&&a0ZlK`MR zUz`bd4lcAN*(@QyAi83WorSTwUR4CZ434po1z=_>EbQ=Vi&O|$pFB4}%;AU_8N)x} zu>J!HnL{Z&;@{ngIGYeMN3EA#X}s(X2@hA%E`&&Tz@-WuZw7^2u}_?*kXcx_rklM)RYbq+REV6 z83RvFKT9{`?rLUSA=H6+d*oKm*_nPF|b3^FEb@GVqYQiZ$ zZ;Ke^2!(=BVt2s@6MNEK+WV9AOU}s+kZ#9c+z*RAA&1^D<4ra{5N@Z&d(Yw%Fm?28GmXKW$H$_aQme%+CBBf4P(4=k@-qiC_XeYHhQ<$E3it<-@WRpe1%G>A z9tuXCuc|y>B#h$)z?z{yT*~dfl6%Lo_rD7VYb~K zaSI`|LS-xdyo&K#{cU?Gp+nMM zp~<4ER;vy+j7Rp#1S%90>I41;C;;4V^r`qgjEd4>sZo3_m${10eStQHh9Ib;2PAL~Wr1cnkPNK}LHy5L=W?!{ z^YuMy$ui?wRupk06+`@BZx)!hqVYGg9C1;a%8}NxTG9y~r`bFnxuBb;2#5*cTC_(S z7!M>hWo$oA^TdDcFB~zaG4uClKG_0gJKmtKvy~H&lB%2Qa{xjR(0&%pndFaf+igjJ zFa)zm7hb7&tm;r^paCV5Oz@*~1au{Del_kT+kuksWF&2sScn zGhi*ZzgGy+ni&$daz5J>nWtU`2EYxMdXGnU;dRCK zfd0+NDl67C<-7B7X};5=hT}6J`Ua;Z(gwBRLJcL5DU-`DSC`5rif?@48U9o!92{Va zKtrQ!ypNZxmDMv3bHJ6Z?>uZ}tg_D0FgU0)!RRt-mSwb{yFSd{sFPWc>0(3QHs-}m zIoRp#yZNzD?ZJbDcDxfXk7ofA4IC*exoBASE>rP*Iqzpku;Ve}Rb#~B|4NwwEyB0( zJFX+%guy^7Qkg1^H$u%9v}zs*?=ul1`}{z!BDe`goUCq6LP}J8rTD@LoY?=_g)_eo z_+g&0IZKw4aN{Ogr?>ktkj>}}T-&7NjigoHm|1h)j9H~;;t ztz`!( z&}HA@y}`LMy}7GVC{R>jIM*leREcS;?wEDw?gYTrd9vPfhWilpBrjDCqo)Ks31^kj z5HI%zhG3xfICGEmyf9%aX^oL5<+mDPa_YzxSmOMiRvN`J{>G*Ief|AQ$MWD{+ASry z2BwciPrPXYocq5nv4Wn+uzbIF#aC>@nbWIk;I{u8WHC*(+7bXt9sqizxNsM@@t6EM zrYk^0iDmSpg{yH;fu2Ee)`mzq0KPq-F-Vil)M8DcTnGr>_{-Nb@-ODMMa$iM)}^Fp z79?SZl`h3j+2P=kHZI2@u;m*Nj$5v;vD+#^yHj89jx2bJk+lv}kAYPpEU2t>x}8(? zsBZyFf}4v1A-j>=>iT)o2rbo)G0+IzBEGY)cai44J5;%TCO27#j@l{D<*-8Fj{CU( zjPi-qh6b#2Z(RgA-9omlugX*E&bOG&XBcn>t|)IAosKlXKKruO<%K_;yyUbq+U;w& zd=ncWn+QEUS4;6&$4`a7)EnD*nEnfNkjFj(fV#$1atsgZ+N${^2_s^=DUZ(0xb=f1 zlvcad>d-CF?bQ2Mcj$?Vve_7@aug0RZ2kqhI~xO<55$!h`y1`Y+8VeZ8!8bTzYc|B6iT0r+Np5{`3dfB3Z^I`04j0g z`D$8aHf4&_*}3)?yBVW=geo)7PhLD&rxRd#7`h>l+nIHJ3(O4F`wIfH2DjSd?Dmet zc6{gh&Z)oVm7=3w6qcLoZ^5WZchl)V(lI`88jYDK(17Wr3LEiHy5b_IUbJYCi=o-w ziR2rh?w z?zY-z;81WJg2~YOM4H^wX#>#tMK<84ULl78Q+mVuBEklsTeE7}>nlZZzXclcar9ga zGx(}*i5?^vk+)t;SUPT*=sK4vsV~$6zLxWv23a_Uv?cn^I+h9 zA42~ZJv!3_k2F&V0RoU!tXTJy(&b*yovMwxeY=W<*afUm5ulQ4HH%?fzP>EeOYhn5qs%{dzV zd?2h$&v5tPQ}y7iEjMx{1TS;UYm2@ML~)?c3Swh^sR*=F-v)=Ccz?btm7JmKi5k!X` z2G0eug_dn^n0nr|k}nrjU8PN*mjLTXEbzaSKUzup_XLWUU(iE)nJPS#K7a9+dk?=8 zsHM#<+$(=ZPE8&7#R`6{&Klx*Hxl8`ps&i=5V{GVrAu9V+U9V)SX+XJ1+eeE!u{G# zvV#2T^S1+4ckPWif4*l?n{}Wo6RiOu7QDwzTUuFBYU-bNs9#i?FE>4qHg#cxEzuvZ z=-(BQtpv*;;2|+kjB<7O_%%ZyYJqd}y$39oDlmlH%xyuk&h?k`tH7pic&ya@Fu^kk zqwR@l%VVqOs-;4;T2M1OfFz(y%*YAcLc+T=OziCJ_LsegE~ZHcrevZU3_Z zGR3J5xOn#d!1SgAtBI|#%wo6}&jTnJX_|8>xIgLxv*1;7FEDF-n`5QLYZ{wWZLik$ zIk}EG+xz{S`?_9Z0-M>&J^Xudz^9#Y%c4cRp+p2)LPnN9;0+a>rz9!+Vn!k8xo0v{ zBy$UeV3-AI-0mD(UJ7C`HhpAdgObE_bvn|q zw0WN?^rznPf&Iik*W61uAj@=F4>VXv_Sjvt4AR`H2G`zlp`kOP)T4-QOpls-F&mUy zJ)lwd)RO&bcxd@6+$lGgA+G_aDTSVAoi^5=xG7&BH7_K(Q<`ry#moph0r_OeA$h+~R>gtH4veHhJ(B@O&;;EA{ zar#-~YU#esOhi5sM#dPyNOvIO{U4f^){Ln#;E~wqHa!fECTV9FaOtLwJro=hB#3#)$5$Y%phM2poOn2~b$+k7=Cg z_MNV;JG-hxJt9>(Huq8yY91XAmZD9HF%xPaR-6Ch=?!vGCzoBriU4~Ux@D+osczyBZQ{Ic4iKY=0uJ~as>F}H>i zY%KRorSxvb1jNhMT)01~Cn&b`jV55(E{{)$P1t41zyyxJ>fWgTX@ zNuCuUP{Z@77b6}uhhCh1>KM4H+XTEen8LwbG3RLeYy z149^)|Kt7y_)kW_&^Bs3{xR&B-O&89pmz030(9cko0b;o?SIBU$UNqnfR_>T&u}-M#mAoUjpamp+Y)O`A1vBo9DxK*c;TF&~UA{w=pT(u2XNdL7l9v%uD$b zzsCUi)>4*icw$!oNZk&YQd>eELsDZ~qihTt(xtJs0d(g#*srQzKCWZfAFwA4(i7ar zhyrBi`>LoQuf<4EQ}oGTSiUWqix-q=OaUTEa|~&9TUT6Q@z_i(OChCVkOvUP4G9nE zU(&=$u)U|aVs|MXE$wkd*&*L7uIZlDE0F#VKt0I|loc53pIgHJs8TZnZU%(|Ry;xG zy$e`RLc8u0n*6(rC#M6)?!er)ce&fImhx9X!w!> zCH?lfsx-DOAMG&V2zeaqYSSTa=s8=+=S2Izs;SPg{*gqn{hOOFo%8uL1f2u+xz^p@ zF8l;4+?bJ^u@nWujUuCx`tM8m=3bNaN_T?|TedAa(Fvl0p``zFq;$0g*w9hpy!RM@}><^rwtA zVqTYjaLv3)OV!~A!%V@&0!f&QeB;8Y?>QAB|<)~6mD$pti0=2xj1)cDal`v{Byjve*%Ap_ck%3XX>aFtX zJJixztQeEkP*)KreEtBb7Aq5lQK+8afR0N z%j_8lRyn`YCmwWZM8SGHeQ^D^sl&=>^NhW9+9x!1Jh)Z&$KxR77rgb!g&Ov>Bc1Ft zvihl!l@oa5W(yYahsC-dEOq-5@=v zHrj0v3rMk?JVzd9v`@zYQ>Yi6`48}uAMRq}+>NAI0`;vpE84>vS#G>a6>}f}X9rHi zEoi;HSBF0U#~dsTJdh&9$cJ-OR!0(9GVB3-2{G_rm#ItlX8@haYB0Vf%|e{NlJZ3b z(mUYL=0fh1?;1p>QTg{OUco@-+H145>^vsV7{YZ0p{0VYYds%KVt18-Q%O?)Z^_%S z^nX90>#s*Nd$%FRqrZO>qr5d2Z!9cw6a}weR@{-(!|%UhEIM4~Il@>fGR{{+Z^nnr`f_rd11y8+-Kx0fW(n``}d(ITRtfO>yT zpl8n)h~RRc0+cbq7t~$tLB6Y-blHIGaE1STopcBu2#O8Zgy}=`>wVx;0~n2TWjDxc z52zXic zedUwKEolgh3r0Uia0-y=J_{|fAbM16?fbhf+pCAE9@JaVfpgN)4 zHDW!aR~2mNna%?dbYOHeTVoYVn{%6LbeIr*VR`%@BIX6Cp}^M^L{=tYVBiTr-k^*L z)v_`==cgT>I8vfY*{5bC- zZgKeK{`94x>P`3iO)Wx{1pAexj2NK z^3W=2q1Mg&CQ1by$TW|{l!NAqz8mjwnEnTxhV)n~)pCksUS!~$Pv;Y`)4%+?%!ET5 zoAPHKUaYzg%8>XU99ByQo86PfZyy6*+Bf=0L+4`ZbsO}15Ws4f&ZW|b zVz8h$bi6K`xrfg9{E|DVG4BUzx})L!MHY0bpe`2m$Fx#NRl1YquEd1o8VwrxdIJJ`-Gy*cM&4i$?E+FOuOR2h7JnGAP3+qMEZS6Dki@jiz7DULT9| zqgDzvaPLbSaHhx5u&zST-;Eo7Z(+5s~ zImeb95UcTf!WsK-w5H(>`1`7X?TPI6`CvhTU1K@*&CghLb-kOffs)$auabfifRU+g zl&jp3{{00q6nK>-YGEQk@alWJU4mZHx>+NXIH~yMBlqFG#T%&6{;+u1TOWY|+xjFmCFts{C9IR^qq#3tC zrZ$KhH9cG2E|-Zf=9+ArX)l^H%&(3m|Y99`KniX#AYw6cuyZ9YOm6 zx?OzBxn4XUoyhAmPd}n8DgiqcZtw}irq69^qX7v?D{qhG88PP(ljRT-U?kJjsn*mZ z*TENV7$g>*%$HFMP3L@Z0q$#^FjUcztE*R8dP*^3^Bwf&T0nq>f{bZeqwx$NO*TrR z`Ld&BtQUaN4sO}orC8u7Vmrph(-L({5}&@@`D8@(eijl5hN^nVCCK<&D!)F`TyG8- zCM!bzBgjo-QKJ9k^V7N0BFEgnR>DkA24XN2J(w=$YAiGRFB@ z&st-Wdy_Kk3M4o*UHTw8qSm_j#Lt4?tWs5z)JZQzNr(;x<0|jCW$NAaO5Uti0T|x4*nZM%y#0UKc?j^EMBcd!dbEd34>M3MD_o{BU3VGZvu?w9(%G#Scj)H7K%&GFx*J?0 zxdhU8g-KqsAWkuoD;HXG;YS3L!eaL>tM1Gjd0?NlR9AM%zCin9_-*n-NL$mdtDf{jE4 z_!UqP+fNjn&>$fDw`pk_1^8RBW3jw$0$%7bk9z z*OrYsvIjf#yZ7-~LvSIym!~B<+%WtTtm-aR3|YmJZffy&vNY-}QbJUXx8tIeQMJEz zypk6lyKcX5P{zVw9zzH@B7lG?&|RVTU8O5?z*t21d-1n}gR`eo5s7wBuBvpV!Gcfh z8CtuWmNwQV4tl#h(wUnsoLn4B=k`i4#>IKI$>RL`K>YzRLT`D^6XmT7Qt38s70PMM zyh&oit?1P=Wd%%giGJvu{_BG-wZ)O!#)lnyFk;fCa_N1gyyk(L9Rb6T0#TW|X&s>V z{xuANOcTX!FU4j&SN~%v2!o50Ff5gMD2-UY-vKuPl{6I90OTJ%2iX^gaKVXK#ayZy?4# z_NZ(|b6g%6siS(FJyG3lQ2lTiqQJr%tHHyj>@)z^Br8DH@uk8R)i%%vO0(6XJ)f{p zY0=Yw6XPZm)l`&r8GqmS>5m>oE@G&BhBn6bFJ#eX9A#BFl4LD`=uiyJ^e~;u%yv3} zR8!SvY)}C1V}<_4V{yxgFMJ&}G<}yP+m{m2u>WQDDXegWMi54-$qC_}HSe6a(EG~H zU{CG|Y}odQd);aCXUlEw_E`dt-!8P8{zg&GHn9KQjR+&AIJsPDRH2O7L5-vMccYlw za1l8z_T|ukn6Jf?_!~wm8%7N~!P)mi9F&@(Qq+^;YLa60FrmmoVYc=eKdAPf#q$(m zC}un2k*W%**sTP+_Qtjr6rp$dnu^|HUv$1k58)bKkL%-&ie^=Pf0pS5V>Vo-27a&Q zHpPTtc~3q&vfME9v~ofa=uJs*pVq6tXqCIQDqDU|k!?9c6*WYX6VpU~2zC=Bl(f&m z&_zLzH4M%gC#AaZusvsbT9pi@x`3hejhq1XHD*aM<}Z=n;`p0ucF!qAN$?FC^Qwk@ z)J~oE5$=5bN^+#M^vH6O>|9(*(1K@Du+Fc=DfP(EHUj7HxGd*u4-y1<%y)!Da-o3c zn-IML1|XEtX7BHn$RsTYSw~N&rs@hgO_gb9%H->k;PX+5tYQYJEf9gNV7&+#sKfmU zzsb!l$~AeqJQpN2s5Q1bUXg%o?=y=IAF7pivNASNW~1*FsP1vSZc9I78t+OVp*&lq zf%#D%DA7!VXVU|O0m&YSlK~#><4Jf#LbwVQ0!N*Mw_J&}U*6?95I=2g9ELxi+q9IX zW*c&*oYS*(1SJN(^|GR*#1f4YydNGNA4E(OfvAcH0wJ7W0fy|z-9YiZT%l4Qm1Jza zu6mUzi`1q(e<97gu_gf&Q4=HVi2=8DQx);<;@|42Rd zc)5@Yun^p@2?`AbYy5kM9TP3u6O?3ayuKj|nvJK{4)k*Cdt+-ChIjy&r-xQbX&k)w zi71@yVxmxa7=8Rf8W|ryq>qFb$ph4N5ed3NxjnkDnXkZ`d5l6qbe#dM4~sI7&TyyN+3NB z#7*|6uEB%u@PT^1&p?x_`By+DZc7?zR>ost-ji33Qn4C42alS6m5l{yhVkeR+z<>@zOo!qhCPs^xal-*30jUy3QtfEYgBWO z3#E(M+N&YUA09uP+n#rHOfE8}LXhS?&?|XCrT_q|!XVJ8j<(COnX6Zun{ZIa^k6lW zql)CxscOYN;LEJfiGiX*mvz49jS}NO^!J&)zGfkpYg)BA9XbQg%^OrEAvp%WHsiOH z@tf5AaFrog01SL+Yr+5dBg{wO!0TZ)w>uWM8Tt!KX!;k=)OUa+F=rfnCUMxG5+sY{ zElU9j8|exki)J;;nQp3q`l_=elcUmN?cy7+Ko5Xj@dU*t^5N4RAsSR?TCXN-KGx)r z`ZT$U#zy&xEc&41NSZ?ZL~9iariTwtca6cKk`&JtYa(CiK_4CHD{-8HzgjNL{9(R7 z{u0?|EYtEt%*0e#{u($K=bwk@I^uZ(mI%x5RS;$72A& zAOf3J@z6jQjw|-`kXxH5$?ITKO23dAZPaEx9g19{PY4d^GN^*!GJ_JZox(VH%kp~@ zC^klMpP_jQRC`k}>!}r?Lg$S3U8MD! zB>KsZWZ|Kv9QE^SS|;R=(4}*H0x(x+QoJpw#}J$>po42 zWGI*m9l^dh%yoEX)_w)OKoJ4*=@>6aonF26FnoJQRf~qBN;O>yPlrR6K1G`9%%D2(tu`P)xgk&umxlUHT z+qg^?yQhMb7yOX37PtxkuZ9~f*S)7HErj1+;2cE}P&At?I8P>ZD^!L(t(2i40(x?* zh5`OB%Cg1o7D~sqxS_O4+Tm zCXKZs5Y8PggW{Shno8Ivr2Ie%$^7|jCnOHarZ#~7_GNG@1m1Lc})jT7mJ@*l#F7v}q&r{d~|F_UKu zwEIrm_6i8(^qk#uOxS`iwjMD4f{Ti-1N_eb1)_h(`h9cQGZD*EhHG0yBbmk7#hNwS z8Vm_RNkI$p1?R?-X&CAVMt0=Q2gz)&WZ5nc`0@<}2%HL=Q&WK+iw=c6Itk3MXY~`F zDM7}3+aQ-3Lh7y4V<>>E+9t$rs!t-wqPbk{!K<+;$=;_^c*QD-NeMkFQh}#P4h29! zsh@3=Xi^71d^NTe;AEw5L=fJ$CI_Lo{OjKYuUHSp!KxC>>$BO7VRt!cU`}wG8FZ>NM{|z^wZ+%}-Lb z;#mMe*%AkHk{-NL2L;=q$(lgyki7U?4$S&yyqFU65<_$eg%&3&js>K=uivFff4~4X z?E%eocCk4S&jq}5M3rJsqmclC6J88my~);ejQ=qh_6LmVAy-sYAW#XRLKz~*BLMuI z)wDXcm(?jA@gFHp#$&2Vzqgz$m>O z0PdWS$B}ED&ubS;wM$Lm+<6}3n&ub{hGGCml{5h$Eb2`|K*sC)#uxl;yx|i~TZ9~| zS8@VBef_Fy%do*DtSvB4uCBzhWOK$sOr5?{Dxb}(^*C4CO&hFjlcryvmvrG11FPCy z6E>%l3zC25sjJ;n>1c^2m#ISOS?`isMZ~Y|R2#jn>hfhPX^jzEFwT#A3hnn{eB=@7 z6WLn0^g7`EVCCe6t>6^{HrE`07kn@oUum3{;mOOQj&HOhZfO9Nc=~_!F}J`03LFIh zNAZ+aehVlKS^4AaZkK6`r34`O+!W1}*(_RrArxeFZ_ZBy?W|iyR?9Iz_jV3XCxSS8 zkmt%2{*UkB+Bu&HKS zZ~SlORC?CX5d<7yGL!np&ed@fF(*zbj{S>4`5;|db&pGeOgYT5GnmTtbwQkBz6xYK z@zD*Zxp;tfNi{Wsr9PEwv`nZPm*$=(d6KI_M1qB}V0k^D7N#eexG*-(j>Wvn<^TZ*mx; zumYr@u~n>Grow=t@j&=nrf`r2aM76h7$y#+5|XA|Hfg8^B;WRhn*1A2jSU)#YTd<$ zm)1Fg=tyKD#JhAjfQP_nssR2k!+_Uv0huuQnbEP=wl*M$#C%E;KXzd~=vZ3EE?JVMmpIyiBCk*B?RS-MZzy!4N&6-hKM)}YB zxn%lG9YBmg5FY=F5QylNhcx;6C*vv{Q-$~c(646MLvA)Um=xX7iBIDQyCLfRIVxy-UR)ioEC3B8?GSkn2BAiwLd4BK1!;%*LW&zsz9hH*u%a# zzDhpI5;yu|v=bI_B=ju{M?ppbRkZCDr3q;kzgRu$=P>O0zqmS_$DN06&3tss$m4e8 zfN150pStaVxP4RsN%ff0GCQoAKBL!!Be-63Z(?sAF>9C7#170Y{EbgrL2%1ZAB!@5 zw9BsG7ox$C`kd7A#al}9fa2(~-h-(+l*cJmYx8Ivdb<>=<~e9>W52mhpaa*+n@yu?AlDEc8FcL{PK5}1PV!F|HwbQ#gi|!BEGS-76k}xz?G{2Q%V6u}U zw~UpWyWtrHJ8UhDn>~0~ST$edJ1jQ$8cM+@YB~2O09J1zlCMv3-0*u&$Ud84AQW?X z+MiNfuTI-Y(;go*auEl?C$npn4~5( zXRUF&X_kTIu+|AAy7;M3C}qB#AmnqI$v9bH)%|nwT$LHKUqzZd2@ghq}X`iplL(?3wnj(WIP} zMB-BX&oi**2ECO&*($ZDk|3W#6%fHs?S3V{ie9 z-9*Luj)=I6i1E1QAxJ(}9+n09tJ?33z3#)j7&F0SLy|Ik#Z_R!}vtW6Rnd5&zB9=J|6vBd%QG7?=p7T0D z?bM;wAg4>UBPhNi9BP;9@T3Sk_|IbI-xq)k-;7Q6$K^0ffq$2bc6-lqs?kuYe<(3* z?qyz#Gslz{_+~zIcsSP8z>zh?1jT8Qz?a!(`Y{~X*C>k~y5C^*9MJDn^wh}>$hWWL z%lg_{(vU6n_NvO-o0@`{``L5YfG(n`0c&Dj%3sOkG27xTYLhOhMJ7;a7jm?ZR_;%Eh<;gsM~E136^!J_vm?HTY7 zwR9<@+VytZWg#W0zcFT#?jDViJB$PvGyW2L%w;`$h>|>eN;gQ+K(Bcfy>b~ZscQ5d zoXWUeWdBu3U%GnpFAJ<1&>J27UZ6cO41nG|>9Z+4l!&Q+fQ!)ViJWmJ^!H6|fb6(f zO}55-(Zsub9QN%b`HiNsyr*m_K6!SD#me(1?B6esnl@>Npl9BM=EH;CG4B1|RAm=M zp^~}q-qUmJ=6Ft@2vYGad8_AVCg&5Kxk}5fe^@r1Edx)9VFnqZX%YKvYObEx-cs5O z^}SVYKzoXq%g;ip4e!`@!s{>4Ij4HmncqI^VJp~tO`RrzmoTx@4&m!My>V%q{u=@w z@H_SM(deM5;2;r)CsLC5o64{x5L0IscdgFNEY#49Hu^fBGmEPr%GmL#>g)2oe3knT zYy}gjFkdH{m;t09l8AWQQK^xNfPiQEe76zv_3MXQ0Q#bt>iIsX_s{dubzxBh^TdH< zm>B+D0^02{)YPcRZ}XggXrdtMF-YsxIiCZd?{(I{VP;IA;VUbMu@dnqu(;j1XSd{` zm{}a2M|5z1(1(A+IXC{am_)l%&8jywaI$g0@`+ig)9~>PoE}5maMjMmYiP?=uWaxX zZ1%%-rYhz0Z?Y z7emB&`Ve8+90`-=$18QX%Na2$M@PpZt%?w@5)(|W9^AHY&ZiVhxhIvKj@?4+xnLN# zLlI%mlldiqJ9m8kq{vU4saJ+Ka4s4I(mvOeSEz$Zu?rS?!)n?P>O#Q z2V{||OAj8ZgZ1$#>>L}suzCvg!fI0$>Gz!{mA1(5+GY!}@1#Sr)Zw^zcf#u0Z^v^j zYdPXo>b48rp+wJQMB#pj^B%r^I|3Eyx&oc30}Y>G#?P1h7#bHyXr73+v6kdpMw`eZ zvAD=#TLRE-0om;=Jy%J92&vHXHrk*#NGmb}xMi5mVm19AZv44~hqFhDUnO~ASQ;C% zevPv2%0AHCNH(lg=^C>&3btFF=_=M3%oW2a9jmxiF^{&qxT7if7Rm!Y>_>88ov#2) z&7{r7lo3@LREM%~YX~7~!LY`=1|eo|nwhL%C2&`gRy{VwdT*YHAy4pgZJTc7XHD83 zYM#F&)&z1-!{60M;@PW1SMs-5h;yX^6y!G7o5(pigAspx8yL-u8En+f`%|n!v$c{= z+)4iZJUzX$8)Kjy&0bynug&V$g7l3VeVHvEVvprCY0cXyW{ozf-U z-CdH>NOyO4vkB>z?(Xic_x3x!U;N-;v-Vo|nz-hinRjbj1iH&K>?gl|=q|rlGs4AV zpn9&P{H*yVzJi0->G#|Byqeb|zhFD)yTrYi8V98_sRs6Jt?rDf3OI@S>%A^RP7H6u zM0~O)b2x0c0+Q0$TAdl%P(w)~1N(bxc3bt0 z03$~Wj_ToGL(Yy zj{l;6?ga^fgrnf!-Y0Ry;fB8t+@wD-mPE6VvOmpiiD1QG>lm!3@(eCl<^> zGvOqPm29|p?f!leOyppzhOO3 zB*R}99h0{9#Yb5O7Ch7tRcKL_yPbo%z{nPVpR}X{72bo(3HbgS&(OfheK(TD{}B zfM_8sf&y{#=0KCyQsmc$w#ev0l3E3p8l#aD%WXRLT(c!iTU#6YK^|7rcj$?5Twb?W zkmIZ!(q)_5bCV(14KzT@7toiO^3#23pJ0k8yXxtryRCnY_Y1yyW{Q4LTDZ_{84&A^ zKeiW?r?F@M)JGy@XOV{yM{U5rX(ZExRhlcP}QQ0LM10j@4IBEKX9?^JITQG+m<7 zAhxK?WVAn#7ly?g_y!jjgeth)i{9JHX9~D}1tPW&A%W+fX^Fg}*LB`ww4$T=3=VFn zwp7HIWX;T_E#D&A^dVZA;IclYD>K(l!kgW*kJ)E1flc0E?0aX{<>8r4e5F%9c^S^m z$eL7SL6+NlPn3auYHYUA^K9diCD*b|MG;>s^ClO`p#x1Symp4aHF3DR)+TU~Y?V*u zpZWF@YtBbMfn_(qpo)0nNJFST+|XPNjAP%;zGFS^_21l9k9dgVMnu0%^v}h-5d%z`1TW?Gu_)zfh)YwP5Y6E7k1*LVz0Mh16Njv)n=%}IBhi>dJ-vN{$RCmJA|N+> z@D%sB@?_z|Lyn-k%}Z1{ndvwdjo#zugo1%FwpwZSYiMW?el#QXyg6N!y*<$^(h!$e zF1F*_KMjlg6+7fy>%qY3yN1ZCAll4inrUBuVQtW}x$71v6)II?%VV9b5wTsaO#avQ z2Q;~#L)a15ui|Z-ohI$1s_i|fmk$dP$AcekXm19t=g&*UBpAot<)QmV^C~^d+0&AD zXdX_L(p&#d+InE>j=zT*q~h@Y)-{9QYVRRLKrYmSZOY6QD>{bo)HIlY{W3oZadh)3 z#}~D^N{wGnGnUKIi}5%l?ig*4x4rvgtw=|1JSJ!@aX)ym%_;gSp0#U?q)0)zdB&8% zvu)bsqVVmpO1GOVQ59l@`}RG2rHA$GpKy`O?sO$de% ztu+wO4XYwa=3ozgq2I%*+W$&~?|~MeU9hFP$(nqv|0A4u70nV`df{E)aN62n ze|i)BbTl3~pBKkeWFwJTPebAbO?Z4E{E<((;qKzeB8CZFGE z7%&c=z{d%_ z2h$~A_`OnbxxMTAs{L^Io=z%l}noQ{nVI4P|!p^)&PtmQ9Q<6Vq>AJb&$ zD-T_mBpXO=sKmP5uPyEji$%*Zq|!!(x;}qva?l9XF8XTLdP%2Og_@)om^Kj=y>hyC zu$NX~O+!c-kMOH)cko%E)~c}E1kv`WH5q(xB6laPtnQy8a4ZK`l{_94;OQceXGX4a z)jpXCq)0)DzR1;_L<+q$fcbYk9ZiAfJ5_bV`(!DozOfRuW+m{8m~ou1G`=Buaj~>?B1H`C z?FMxn%Y9_&{>jb`mT_!T7v{o~9agbdZsZzcV7pAHb41O{+HH^!c0}1(u9qVYkv@Fb z16y)hU(EjeU<9eQ+uC~atuqd`DPDqSf&AX;O1iLi<1R&m5Y@P?NbhK{-r>4|L@Y(` z^&xwi+Q!GA{(doEU*EgKigwjj7eeGHAK=^erl#V1SuHCY(3m}4X;v$O3-nB}Hdmap zz1@HP*#GH_x35|+-E*)^wUkQw#5Lk~d$7F{oIjpy!bTEi&(6Y9zLG@7%0(R2|66>E zW4=W+2`rkVco`<2?# zjLRxUOlT|q36MIuu;GgRA^942!2~kF^+8SAT`Q9$j*eiEe^tq;vz=Z2O+p23TFCk* z@sKBz6jVGC7vyWGu5M~ucD`_#R&DVtMzC0zDvbc0LU!!#@_KT%xWUl)yHtqn&-iPL z##v&VH-7aGwgsQ&0m?ga}Nl~ONEur(%H*h)*`aOl+ z^&cx}^L>8KXq-+ip|8(o9}X1dCS$-8)W$q}LbNNQ_%$f7~7 z%KxIL1oUZslekahov9yOIwgP->gL-_;8k$_;so>4`E6Wjnl6_9-nl*R+xFls#otY@ z(&p6Q<%n8{iv-wIoM?SiQ{4>*NfPfaH=OF9n=q^TgA}RsPM{ljrsJi}AM@5Zb*@1FO)p*r)2f2UFV|TT4uMQ~&*s zWbY=%`yXlD9v42$eq7vJKt-;=n6oEJYC7ED^!^r_lNMxkIzQPM7@c2dNs$upB|@5^ z+Rd3rvYzCeL{U<_f=Q7^iMCdV(@Tvs`C zZl&Om8l~-AlvqdgDF%*W&;Gu@>_=HHl~H zo$IGQl>&@8H;Q0cuP`z~@l5juJkb7LX|pb9&LYVd1=`9$FYtVmJ;v+P<>&Kr+aMu5 zp|hEBhA1(AdAh7b3`KWQ0lnxbeGHbl`JlT@zqe&LbI5xY9kUA2C#_S5BO)_B8tOBr z(pyu82=Z`Z-H4c(nO0~uRtuTQOrmaTilz79jxBzv(q$2FTWE|-`AphMr7+k+G`;GI zK|hPkiCt21`)YLjGM{Urm2FP)XZ>}=F4B9i`JxRl7f9vA6y#~Aa&$^Waf1v=QhVWCVIr5d(7~#{@`Mbg zzfrW|NAH~<$>4%T`0g14!7VD1*8(&7c}x_UA4esB)~HN-u<-}hsMLv(=03_Sr!GqN5;ZH^n~L}R{md8$AIesat?E`LS7;sCPC<6X4}m=YEf`Oa*P&+91> z4u#C-tb?$Y3xTP~H(Cpg;uz&CT*XDA6ckVy|5PXvKtYWW`MM%Ig<{Bk9>;-K^y~|) z@;usKoZ%b#{aFC-DM z1|zSPT5h55Gdnr{mi#*?C@x4~VIu|)T+27HZc9BS#yJX-D@)^{#1)zO2UrCR-;4$l zL~O(EzHfp7$nsLYuu9dzYXxrdEIYOps_MPJ(!O9$^t>5^cgiHzhc8`8>u-hxFL_#^ z$4dkRh2$A>ECfeMe0}Z(o5s-Y63V|#cHn^@amNhYF$4W0qPug>ZU~Wr*6W9aS+N!V zAdVF3PNdKl9BjNz1Mvc3pNOkqcGUG_v})}@sYmi+d~__4&1vwbG&~`qLV1DFHM&n8 zi6h3qDh1%E$6HA23}umY>%kF=M63ge6(H#y#kFdPew`gB%Pndbm&h`yJU-!n(36A& zvbpdC5PwS;+_}XH6UAR}T%j9!Qon_w&&JD|P8pjC=|MiS)N!ze33PT|n{!2IKb9uh zi$Jdv`AXuup@nRLs@JV|xdddYd{5>TE97FO*vZm*gn9`^mD8l~W$s8v%<#X3fzjg- z-2Iny&t?gK5pzADw6X5Y>2#=&9meQ^$<%Nln8WWK5Zi@kzR7o-u)wu zkYHshChw;TFAvwc+MB*&c~pd!Ijk5gDVNgdq}{h(Ls>dkPQ=qI)-%DBJR=`niq7Hu zt*guUJ@gxO_DWp`Yw`v5de7sdDgsyw?$qHuYp@Ul3HHidpeA{lQlr!^VymvRaCZ&IBAFs|!DKqjL2PEqTzmpSPP-qY5 z{}vVD`n>s242fy$OpDdq0138$bL|mN`fw2e!l!y7;HbLEFvX?b$bt=D&D;#FEySdr zOziT4f3E&r{X8356&zW}y_@~ony%GSqW~BqIuC|=KR;X#jjO5+q`KdpR9Vb3d8u7f z4^Zx~4j3?P>}*M!;(JRx-VqB9pL#z_ttz9~*q)J)5vCTbJG{O>DxZ4!H=~yKtE`*G3K@hU zmM1Pqrb_W^3(dRsv?74=oN$sP1q{+|a-em5FBpKVX7v~sC09{A&rz-_5ttT^8P)&v zM4lCxAS22f7vSDO&%b(;e-e@`q!qY^i zxeQE*F~i=Muka6K2(;VtZ&7*WZC{<5{HlT6d#-qv?q(cfpYV?pBLmvP5$xNX?F+`E zJ+8)0LP64Bo7D^k8d1k3EODM^o=bCZ)1{cKUiD8%**q3YbAo=noRAx&V( zrl2_G<|7wlY0IPrspp2)$%JNW(RPDp@RDopZkjw3@IVHN^yFJiAPwl)kUpnbDcvwl z1nz|Cy@NxhjN#>|jvJw*$Yy&Bf#_J#yc-7=U`8{w?H8sVeYJr(H%9g#7e7ClVt&%B#aDSqfX|xDkVJ-_mOc#E`)z~RCwX!5o^LLug~x8x_UI3l29417?sRO9QpuB-f9*V}#l z$mM%t!s#kLQqCWP6q>o{e&fN{pJaxn{aUGod#k@IKfGy$yf;6XF8=lv^18r_FqzO- zbE?RsR}}=3JQKCCnbykK_`H-aoxR?y>!=Y$>!Xv^9QCP@R7%pM5t5=3GIeLK#FF^ z--B%~+Xn7;F_J868qUE|w@=hF4Ggtetp`OK?#Pi_JdU(KC;Tx{5<(8Op~{M+T2%Hui#oLS;xgEjM6m(Pz@2P9*6XZc$3y=(R2 zSnIFXAHpe*H-A-#s^ucjYcNfaBnAb+t()HQTJds?^>FtwB*O;@Gi2uAcC~OvXERo9 zIHS4C485z5!*GYH*rKn zw$fQ0F!+=zL#Rf3rp1fXd&7w1&N=W07tP$@+6oQG5Gcs`c>-~4S6-(m7N}1CJz&`W z94;QDaiE7=^t-tNNKYcpJ#m>!@u^{<*nJ&omJr7tp2cB(Ipt6i`!e&}q3GG+B%0<; z3nkcWpWEWOBd;;TbC37JPL9Rm*wN3s4N$lv$*Wuxpah&98o7e8rYEE7!!6`UlkTjf zp$dGbpdVQCtV?8VtH<0S?V?!?st{)~Bt}A)rcl$>xxf#k+jFh(ZfID26&HU2=%<+oP;r;k+k z2or)Qb_R=a zsb-GENrZ`W!-E@AQ2pcx)Sl%}R>tj4k^@EQ;l)T1zZX$~xrVs_Ir-0Gsd1c&m{v+c z;sY2{#(KFsCQ25U!@dU`QLgDoIZNrx8{k{g$w_UTNG zXGi$1FXI*}2#dp=HV}V~k(c_>WIkj2DMNbwOwBPl=5+IAH1;eWxq!)TFU)m>+g&>J zS7@RfBz14H7lfsPIq=ZSGgYSs$SNmE?4O~Yx5Ew(g~sA<)I|Pt3%`#e-L5Z=C7*wrD1i!&YvjcDo9Es4hzq zySdrj00`=GLB)g=l1G6?Bt<4Ro*2F%N$=RU80pY&Nc2!&XAB}asJE!5o(NvW#+yDQ z@s^SVRHH&))v#8>9P-TGT|O$BL*upoMY)ofZL?7br5f-Lt$F**kJ*1TUsKi4K#zEz zcp7*-ktdmSHUJGTf^v-GAr^zJseL)sCSe3c8JFnK5TUu$TNS$ayw|9GcWn$Ww$k%kK+DC?|)V68@pe&F^LvVt5S46MJ169jDB zL%pMp&L?!=THDpwuVRgFR78%sKD3U32`lOdyE1Bt7ef(6LC6S z&)@yJZgSyEk|Q?4b!TyT^6cNi`;)y9AQ@o34h$4d`es{?FTFGK7MHB^so~L0tV${5 z>rd3Oud1<~r5(Y9nWd@ew8xkWBaB^Ku@xZFS_25fQ!A-YAqO$tCq16!?!9ZG4U}-9 z_Ec)7B3S3ovLa!aJqg-gNy;3Hz(srl`OZ?4{k_p3`y3T6u)4n`<61RxP)?OkeOqeA zG}?n@Lw2^dmsyJDw^1_A;;tEMOkqc>d;zAr+Y0`;!-i7N>n z=bywH$M>k`uvQ(5F@YKuA=OOKxglx+?43m>^Q35t!Qx_urWP+XbwaQyvI!WDbmL$a zUBht5-iMo++YozmxFK1@$2b7KWQ~dL>GsB-;09^@UVMOst;XbDIzueF!OI zkN?fWv+V9{j3oI7gG!w1o*LQGrD3!a zqJaK%5mkNn(RqQbdSr4uN3wzCA7@}(ZemmE*l98qlg*m&=iDJ`vL-GXm>oNk(2Ul< zm-DiWM;z&4ick;iA+fpT#6_|6l*E6v1tQ~}l1@y(x8sf^Wi%A0iA=|N!TlVCsgd^< zzxJ7EauaS|xJ=rpPg{}`*g!CSR)ArBgQBOc+D4Gm2mUGhKJWw&7i^N;2FzO3`(ThU;oi(1c zo%|~_43Bo?W;o^3%&-fduFlM$s`9avkV}zh`@PJYEvCYU2w$MJ)=^XLf#&7Ot?xzL zRSNOl`J5lMt!2YPOK`lr-h|HE-&Dv7w4?DfN{KO`%#5 z%fk~iq_nVUwm9X1m25#h)(w_Q3pC&K^oahgJ=zM6Y2N9#sEwp^H@tQlm9xuE$k1l1Y%AH z5$V@Xc@x(*>}PXUBsa`E;_GjiRo62fX~>V9H5d z?w;OzsK<9xU0<&NHQ&qF~an92G6I zajC&btLx?6)ue2d++5apk*Pujej4^?0kS%&0N5Cv4WYj>_4wLhevpn%()6h!y`)?B zGY2M6@DooR^dC2%^SL=zo&8ZUZ>=$AV?1k3EO5IH<6aQ=ZtS^C;jg`c_yi+hV-zLOu&)dtvF)I z?Fb1YX~;^MrLALh=J<#HT!2UPwuglQP3Xmt$=L=nFzzjXcV=!cUpht1`jOvR|L41! z*;Vgs{f^nFAB{zM0LR(!-Vw2_SUNlgH@e4Hb>{_L_8yrDFnls_)>vj`aKWnn;MHwR zU{PtVR3>N87p7S)ix8!YIUn$s-3JBusJ|aCdn%>H#R)t3fBycB=*EKoZHUX0#^^st z$V#UESdr2ft_GjTM{Y)Iy_KPYLRK=sbak$S>oO~pERPm9=$UR&e`uHDZ#QpaKgQM| zqh1d542FLqi*{3rElt}OzmJX|s(0TBNp{jFvaO~c38Jg1c97qS2U>tyl{=H3ElZz@ z+pg;^%&?(kvlp_={05U(%63x0x9k0^*^k5btPxn$8zze127E~Q(A8Qu6h*kgKJEhX z2jEOhZ51&+LvNn}xb(Av$Q4i5;66kN9*e0v`&h#@u)!}a*Q`%A-2)jQxoJHxaS2-Dga1jt743~&m7iq`|JkF0kH zP{u^PUM6@|LOsl+cTbi3nAhKu8$~+TB));R0ZEE8Ou**;#+WE%C#Uu+*<`5;(*1AO z6j30L@p`{(r0vqYb{Pv*yQvUydtKDe@eG6{0as^a`emriZmepP^sXr4R>YqWx$_1e zQm8q9@!t4AZQnnbyU$OBE3sl-6}mnxV-) z+2{eg5h}X+lhZA8w*bjsBx&yDvAmWTDwsw7RW@DlHRL|$lFcOc@o?9S zW{s&rCDNol1~z1jUlU>U1UcxLiN>6KCy=1UNS(dfLY}(o$8i$nV=;ps)JP~W8M6)V zg7@tu;A9#<-_1k>9b;;9T&ob*N&zeN*uQQIpU&}iMxWt z8EoAwt31Fz9gO>JYgb2a=wS#RNpj991)2cEEJPcq4u;xI%)7+wp$Bb%(#W*Vo_jX_ zkkdRepaL4ODH{wGZ}AJ&+u$Jlp<8oJv8CRz??B!U=qqR-{@Pd=o*e!#4iF;Rxa_2R zVjGG9B`7RrZY~w45sZ&|NiB3f0WnL7+~d63Vd_8C<6@s`+Ay~z#rDQ?s71k~&8rvR z-;wCAl7};8Lzl*5nB$JGPb%Nmv^ky3g5;0$wY4EB=0MlP+&LkpVfzen(Zik z$2=ao=L3~@hP1PUtV8! zN8pa`sRNGr-Ntj3UtDLkgvn5bFOZG3};~gPfjy=zUqqFIrQWp zNeT+Eb;M{bOyzyD6kG3@>HhmvKk6~%&Uj9RrN3*idYLStR~_sXLkxGNQh5zi@nzO) zm^R#Op;A8`<54EB(#8HHl?F(uw(I$U&-}Zs94=N>HE1=j#`uE?u@?fbx8f3mkE7{v zvz#tx1fZFxQ)b^k)DLFUeTgSH>J*E9QFim%r z5RAhCN{~MK-TS(#D5ob$!;K4t_^S!gJ&P3)?+U9T=kakt;z6swNZB9zxC?QV4 znFxo6gk!N%$L}?!a=+>G#0VdUmTVu?Omx<&k_%B|?uwCYsC%mA;~RQxf8dNK&w79J zdK9zkfz6qvi-0pTazU~+Zx6P{sp^b9zY2j7k>7s7_e_s}gb4KYL3TAra$KC``eVcP z89xUs#R({6GbY)cfJR2@s4nB_($^X0p=gTu?rHHq_#Yv`As6*RSfa6 z58RAY_+bm~vJL>>5)D;{6e<+u^(>CTgSYH&1oLl+F95iA=FR|(Lk8-oGB6sN(*t1_2zvVq__v3DqCoo~G3R`z5-LqjZsB+uR&CSl36`XUH+f_QeG=%F z+}w>^ZW9ID#ul8h-Q}B{%(cMZ6LO9AKUnjAR78AJYiZC2O1MC8i(f0?{P?li=35sy z_DNh5aSziU*u;Zl{QRZuTmPEW)>^OfExS`G6$^o(oP~;%-lJU470CGbV}A+1o!d|b zQgH@mr4{H}$Jmn+(KE?YMKKk2vBUb}5*zJ!M0q3WuI1qC{bRf$q(3Ul__{h<@2i|7 zLSu51AO6)4K*VI@{a_5k$nR<9x;>|Zh{;8Z{yM>GBA-(N?mr#C)?do_Maz`V?*F6) zm}$2d(}mvxwB4lzBQ@%d?7D;!>$VML^#xg0UZVHYN;`dt8n6o1ea#yx`8v4N|3TCj zCpUSyu{hOZsXd^`)v976j6M3Fg6H8lqHqCzMUce%32+IC2K$X((|% z9M{;qMcL_LD6H}8u`Af}XX-J0It#`DG&YA9-(mlk966o8>`}2daTmuNL*y;Y*zev; z2Y2>#hL%f<-?U@NC5T2!e>KEU1igjxTNjORy) zTK2$?bBZhU)iRvk;i{c(Sv6fII1n2R0+DyNKB2!-M$M~6&mD@`SlHerNjA_CYjvvu z66|s3NaBv}HaYMoWG4p0jmpto!16W1;?W$eyT^`vTO4`&l@bLuWstN!ES zH+!X9LDUg2@#~efHxhrW7_B{X(%f{_1~F|FSKY)DuG!t!kh|TW%R=^{Zp>?MA0~#F z!%1tTEREDIb$c<|f-|xIQCrB)Bk%Lbp%D%B?2$5~iy7*#_?@xw=(N7*Jw8U?qHkV9 zm29p8c4rv~N8FIGT~SFRZpn)vEV(1@xZ%lfc^{-#a*>hq3#3{Q<2|=K&+x3d^4>eU60EJ$>wivYR=8>U=$Yf8F+UM;}G{)eZf`XCOTph zIJPejK9>zIYd7V3v2^heVvJ=zxPR4rcIViB+Zi26aQ|D`d1CwM;g?=>4D!d#E@%6g zZMEQyXV8W)L?1wvKx8<~NdDDOkwR`{<9OG9`q9Yda$QdF6UJD*4>q1tcZf1>lU_4zFY2>$50*#cxNrr`7<#Fe*>0}rY+9#g)&)s84yz$tdvn!fA z+nS)MMmNx5WVMn#+0yl4y6_#vp+@jdo!dnhHX7wY={NV=G>P@oA#C91)J#NZJI?ST zSjzGYCVY=bJD4z`fqIrDi{l;&W_t6N$%3s-NE9bxZG2d!@CO_Z* zZj?2TJPRe_x=C%^T8DjvwTNWXrRh`;VfZEExMY zyC~~=(>oljn%dl06R1}2fwAPLR|J1ATEp0%TTinT3n3Pc%s8BXR$-bHZ9-25*#>%O z;%gGOtRTV>5D1F2tVi3p8$-XfVb=K)RO;vxv96f@*aN9cLw=69a>|{h^-a#J^6__F zCOL|hj0*Yo!7cGnq2S)uGTC17Whbs<^r9{C6<;`%+I*6x#v=nSEU6+o* zzSZ;UvIv0DpL|XY*o! zGz#|*Yp5vpHC(JV{!PD}pRJFw2*sNag9k!9@waKgAtCEv2Cv8QYAF`K{V15LAXhTo zUHE7JuMMKS_z4P~nuLgx6;JA(3vWCANc!aV>~gRe3DJ8ey16aEeE`s4E-yy$l1DR3 z!P;F!2XaSVg}L*46S08|?R+-?HF;)uxhmzUqjM%{;pMc-Lc^{edDfCI(SMYHp;lv^ z^S@OC2YT}I)mhu~okjCCQ0F#vod1~ea*PWwU`Er4+=iDCDq?#XF)>)cfPionbe#G9 z2p}lXqr@swoEy(H!%#kzAmfZVyHf=1c7F!6h9502D_-oKij?I9{0=1Ijk4X3c$1_| zVi{Krwm=tx75~)VQlm%@Q~m;u#TJDcJq53o=-A_t8~};$&92}j2s$X{f;Lzba2CGs zqKxQN3EIGhp8vGcGQT&*^3!8?E-Y5hDO8Tra18M)-i1K z*A_xkmb1D0mt!H1^B#-}%?6{VVJsj@U2bI9+F$g74DrBq7}k^$YyVg|M8XhCt(x?Z zSrkz10KT^bz(EH|CpB}>hH5kIo7ZZlQvHJ3ETf)O!@wARC#Om= z1b0c$o=glt^`-=$lPZUlkihB7F}bTtBeb@Yo^xtVYVCzF1i*Ccz9=AgYxXyP7+8tf z8Oh1cj+rhm1vNV1z|oMrMMZ$x_BTuza~du^%8-znt3uqa&1YXx)S}uSPq?q%^Gche zYh8q0fvAK#;k3BPjeYZ-*Yqc}av43hIx3IPIEmlHM6T`h7Nbb?P?$!o?g@m(&Myx< zG`3Vu#Inuq9~wE)Wa7uJD2_K})mB4Fm!hhO@G6+9uWgu!-MP@s3KvSQEDV38)Fdi# zGq2WZp0|WtkQ%nCRM-&1$XC@NG1sOLtCasBA|*X#U3+P_d%UqcS!t0Jl!rf^+4EJ5 zW+x`92$s{z6Cc4#ZOPghOdAf*1feY`r|zw0ne>bQ2dX9@xv*tOn-B(-+m;t8BUSc3 zkD&{9AePAUz4Yh4%jlqB9=v-XMhb-++(?50#Z2VH&yJ8wUqz~HH{pAY=T!#=Bz9xQ zin4GKp-Z$dogc?M~}wQ$+&Nqv9|u2_TtRg6z*;sXu0NjRXQn3Y)I zFC2;vae@$R>8B$s5{pKx=^RRdwAS?`jP#xS*CZ}6Qshysp~k;A0|cy=I1A`v(#1y; zbxpWjys7O`w(YX-ijac)6Kd)}UA)AZRgrSGf5UP&ZV>E+zbU5cVu%J*Cn#-ereJv8 zIZ#OiBsu{@>`Hm*drI!d;$Ui|v9~^1@$d8A`*o~9+$YP`;_6e8P*I_Ou4LwUZL_&r zje)mp^z>8D{0i@wrBcaXSnfRO=HB&^Tx_g5YBU5{8!AUC>LxGk(35cZJC)OY2Fy%T zzIe+Pm&vc<6+b=9`5XFkKZLl)kJ|OI0n+EWzzyncNW?_EL}vR&*^72-QJ$9)=>-(k zVm$8C(4dVIqCIG~pDkCZ&`Lugm-!CP^`HGY?=XLVXgofTpEH?cnNr6*8D(|3VbHJ? z3K`VSEJ?}>fQjkplo85O+C6WubCwmEVlKhyIKF)nsmuw4(;uH<7A zu(EOs1zZVMhMFfQ6PC0HB^YI_6>efR7#pkoDfv(wd z41bT|8e!*GF9t&o+MF$Qd4hr53n>g2KY_IcPt7Qexgqp~jUxiGJ*VER53% zFUO$~ZxM%A<77TJ;I%^fhYY_LdAv|0MKQh?%&Cp7{>jYFPqD5P9I8fP)qr<^2wkWJ zJzCNR=%WuO{L?wpN!xh@u+Yon=uLI%;2yP9`?fe+V>qe2O#W!|!1{UDZ6e|Nh-PQK zk{|0VT5 zFB)UIpXw491w-g&hQ^q*sUi|sCVv&LX}|9@KJ6J3E&qY%fL=B^WWa!kk1u^f_%AHf zC6xEN(Zk25V^J;^bszP(keP0@U?J%Dt;bbfahZz?9*=9_A4N%!pk7j>&>!yx$n)(8 z)8|wHWGpW~qqU!wt_}*-#8EKtqyE9FLP^kZ(EMUZ(RcaYJjsL)E!3}SbXu+cirJa5 z4H?3M)iiOKq;b(&FKXBV389&CZ@xpazf{dFwX1;6n!E$<5Rb)W_oqKRS}Rt07kSUE z8^_AgePh>2D=~={GJESAsk6bA&=Vi&}pH{1ILPp^6Iu{X6AiKEp-QuC*Mg= zh|tA2JLvxVrEI)$lM{xER%9+Ar*TVyj5PhcvJyaF+-waRx?=u&yg8O^QQnFX)ok~| z%^BCJvV*xN{C&bRk()wz@!)xxOBaH7i0x%p4r5FsQ~`5%QML+rDRAf1wnig-Tt!!b zB5>Hb|1tNlvzf>dk0@@+InK7dZf-GzLM3~T#8y1diS!+PI=}Set8yN#F^}sLbeWbV zQUC%?3g)}a*hu~{;##3TLyvrZs!=hMMCR2jK!=+n{ zr19dI@%X*M{L+|-gwSmZHPl6@w%A;n?hTstABiTuCRxlh(~1qEv)@v(960W7ckQ}8 z4Q^#bU?3ZHEEkz@y~s0L8Kd6A0OIVW;es@Dg}dy#{EhPJ<)h~g`fK$LAEcR69`S-v zHrYW{74ttQiJ>p5GH7DctELuFHU^-$EfVungj&b=@d2t_f{idHntr|2wP#w~mx|M~ zr&|Z{yE*hy>Se)dFeRBqoG|gnA8vE=b1|{eUV(y2(Qpld|PW5`gJi!I;w<{<` z|162g6(dy>`}Y~0XV&jKRRW?}!B`0vY*sT%CM%g0bW3)c2RNAD9KYd zky|P)Y-8YsfIF)+AqJ$X2hXtNH`UlT0HRloi>jpPGM}AnVW(NJFvxdaj=s&;iU}fQ zy3y`pqZ#}v<%=YXA+GLS`Sp3gc@p8rKRjl3pDK+xrN% zu69B&Gqg~d9QC2a<5KHbGKX8nkc4KTeT+v=@h zc&nrpj|3kI)=rxcG0rE_Gfnhq`l_2dJ#9N_4vs+PJ=^VyTt`~2zyGQzU|DWoe?j5Z ztC}A$+OHZod}K}XXW2D7xXv{|abnBk-Eb~G&V$f?yKsF~4sqj^L4*6LY^~KwzdHU8A_vT=dfIO`Q*FqnTzA@> z!}wPA>tsPP!7|1?_tVMmHJK9QiAeMVqc+@ z^V5Dw1WahlWO+twYf4fH43qtJheL(2!|6554j{LZ&2Qe_xQ>RXNbHr~X$rg4MoqUw zuQaExKzuyYja~llX@`cf+HS`U-%@+2*zQK9r+JgLJ6g*uj2x{@8EEWUK{b=fXYBw$q zqqk$KK20#fb-C3Zs946qHZ&MX&vn>!0PSx;!_M8g9X@W3O>wVz^ip6)Y*WQdSzl!^ zcJx?S)d3Iq=yty8_9n+0r7&MBQXy$2I+9a!_F{8ox@AO3DojM*XHYcicbY^Gmd)9k z0O-%?%Y7MgDKNO^aVF!VOpa@5TYssc{?EaJ#UDg5?{vnBwCCI(W@pO_oR3G`-ypwI zb}c!c1Hb^LV=9WyrBMvbE=Z>T)!6Ffxj>&9NiS6|>ndYmhpJ3=A6Z`DyPFm-837_|XMLF+eny+$PM z*65_>k=kC=`s$hi`9|94m?~qB-%Yq>=v2hHxL`xV4sG0`UTtK9!Bjj&vRT=TmKK++?lGaGx7U3O`Rmu~j%!Y7YTY~#T@&a3Y3#`$;6pmYhk zsO;P{t7;Fy7^F2wGaJpzM2^_;+yYfc`=LFVRAL7VzQ=bRVDJNvK{QYZ;1+%Nmw(JN z?F6AD)qe>mPXk%@?O82~@r8}E~L0!`}G=0FwVd52v#2J+?a`?Ao6fzGv!^%tLM$>+l&)Jdr>W)pp$wXLjlD zY`$wo+^t`{Zs@DN zv=9*S5mM5|b{E$gW(>v^+dSUT0^ut*pS172knRR)Y3VKj0cq(L1ZfURN(z!HEgX=V#rw^C6F-MP9#I~i+H3E<)_q?K zIfrJy!x(Q&v|LFQ4s3vxnZb9-lc(BEfe974A1(8dHbsaQWi$qnuRZ(fr{jjtaUAU* zh#l&PZ;m+{bqLY0pEnt!sI!Qe&CL&gUSe^>S_W@tir@B&XTn32ZvRC3s-mNpI*xAr zu&7R97S3^5(KO6hHAOF;-@Ew5*YS^^C`KwyjhXe&&N)Lmj~(e!0Fs8(4ntn#0zb6P zs@?SUz>vVcv8Ax6Z-PIQ+!foSx)RgRh{UL=#yX3}$VcPvWcXgL*PD7MhPQoM(C*$n zeC#7ZpKJ^QA?GjI4q>)~smF)i1;mYM?e>gNr61xj-q=56f~;orT&rARHa;u!lYe`6 z=-P^GFBe(1b;@w_LE3t$wfgdnuurB9vQBOHD2q-$g#(C@w|wk#Xq`qfp2okS6N>XR z;`}_7^{`)9ce=I(Igz|@l3eqgnQ-~%BgL2VH$Swgtx%gNKJhHjn9M|4xC@K!w0kSd zV~O5*IzI4mdudyK6o;xBIS^~CCkMR zAJ3l5HW41TqP&TI8Xn_eYjQQ)Sp*quyP=g4=A1STmG@2MV`pc->gVnsot&iH9xn1P zziT&IqF+qZ)ph?(w2#4zzHI7*KOu7P#MT=;(O#XsG-zV+0;v95Df~h|M{EmW9|YW| ztA8wb5hYvf47BI5y>p{1^j#7%J$`rH>PHS1b&|Od9fl7!k8Vu|yZv==$aNp7iYCuY zrDKcCFow-Gku)l5*^5lnS5xJX#=zbUAR)wQNw|m3fFt7Ecp2)B1otg*q|v+bDUl^apGbS6$sgOdyN@ z0NIUxMrV$l0LQZ~2Os=}ee;WOO;SnZ7DUl}+vazgWrv*-zy49<%6pNz zSH1N)B!7~J@*v#1l{nA?cIMM>{sz~sr`I3l z2o9pNbAYA*(gz~`beG+T9DYC@q3%^8l~oD`}dAVbNgRM_q)7WI3OH6 zZ$ z)rrz_&oW!xyv`uNfAgyWYa1j_7|vlZ}`Fp2ziC7CAxH`y@kN~pvNcY%Qo5HfGlIF zp25I~^p#fIcAN9>eeGWw15G8K3(RtbswY1sE<UU7 z-3Tm;>crcff7FU5qgfRwLpJ$+HAXfU9a8WAnV5(L>una3SmZj`cfls){%59pXE1;? zUPhwT-R|qJmreV7RG44h;Xl9Oc+rJUs-a0uWZCvv6N(K9BB~nOi~>sUu+H$mlA(Av z)CK%r0#EX?p~jb4QFtWGtJDBfSj){kiyY3lxkvj48$px%ZCStd@$NPNJLDVd^jbAt zqkF;oXSML@u4UhJLDIGRMB~NitZ3xuc`IBlBxYJXb`5?YMr)1FCN&Ko#mj(RxtQ*s zDW{U&_vdQ|gRbrBrI_36GG^uRP{hNiwj`lJy9I`%F-VwER+5C@{g;|N4vt*7g$G4c z;;pkzN0&@1_yv#~nBRMRaI*_x&s8@!CniA1Yl*&~J5y_$$y_0!Xk2@SFzYUe!Tf#P zaO;x!a|^#CEYx2bykUc4XjOQKlH#}BvrPjfa>3&DMST4Z5YZ8Fwlq?t z?qUtFE5BzsXUuGiJcSZLEzO&kr8tCZJ8gdo_fdKsF=IFdi98e&(#R&BSO{ z82-C8e((Id7mw}s_I9ae6L&NAC#K$WmKj2{d0AQS>ysocYJ{9# zd|v4Dma-J*1S4pCC)=y0!~TQFx!1ABV0F3d_!kayBr8LZ`^q+bvCH^y@*a>iny=Ih z&ARDR?d5+gJflnImQ}j}Yg8;k`5~>ArvX`n{N{Z%v@2@#KwZ?I(LY6STMR#lrl%>c z+7>TkCyl-LIx)3zyd{ugP0mbT^dkrg2MH2CI=);+AZAc#$c`Df+QMnLwErEnOUnz+ z>-Rif$_e;*@mUGG-^_6@cj;i8&g$K`3eF(U4%iPzM z19W+-i;}8>IwNJ&EsJ?DJ&1!B~!W&sj7Y%j?&2qls z*|5jJ4e*_=KpFV5S)&P~_#xVPH4pZGRdD|Ksx=ZFd$!1(IN7!Jo~^7tTn5WA&{r8+ zsPo=16wx|fPTd5<+>lDVVi5$@#RkC)SsL zxXg)REfQY8-_$GsAnI1J?V+n%uq$}4U29QNFRRz)S6AJ7`_s>{IU$VpzO+T{AsLQc znQLe02x=mqd!-{q8r2m}jKZtMM+0a@V#9kov9Lq$4SsvhIip8TH%z`g43x%u7v3iW~d-Hh5 z?yq+sJ5kSyk;CU7UBUP2*{|fIDR@%=WzvPHJSaiS8i@w`&G~k4^dIYRwT${lt6TKu zMwX}+6_FcW63hJ1yED*fN%G}qWu-#_5~@IF=eHaXw-0$~SLFlf@NiAfW?c4 @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/adsorbml/scripts/dense_eval/index.html b/autoapi/adsorbml/scripts/dense_eval/index.html index 464a2f805b..47b93552b4 100644 --- a/autoapi/adsorbml/scripts/dense_eval/index.html +++ b/autoapi/adsorbml/scripts/dense_eval/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/adsorbml/scripts/process_mlrs/index.html b/autoapi/adsorbml/scripts/process_mlrs/index.html index 41689c90a7..776d93dd78 100644 --- a/autoapi/adsorbml/scripts/process_mlrs/index.html +++ b/autoapi/adsorbml/scripts/process_mlrs/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/adsorbml/scripts/utils/index.html b/autoapi/adsorbml/scripts/utils/index.html index 98a5adaf74..a422fc7f01 100644 --- a/autoapi/adsorbml/scripts/utils/index.html +++ b/autoapi/adsorbml/scripts/utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/adsorbml/scripts/write_top_k_vasp/index.html b/autoapi/adsorbml/scripts/write_top_k_vasp/index.html index 9a416750da..fe3b4cf7f5 100644 --- a/autoapi/adsorbml/scripts/write_top_k_vasp/index.html +++ b/autoapi/adsorbml/scripts/write_top_k_vasp/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/cattsunami/core/autoframe/index.html b/autoapi/cattsunami/core/autoframe/index.html index ebfbefef93..f008f5808a 100644 --- a/autoapi/cattsunami/core/autoframe/index.html +++ b/autoapi/cattsunami/core/autoframe/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/cattsunami/core/index.html b/autoapi/cattsunami/core/index.html index d7ffce33da..568fcbece2 100644 --- a/autoapi/cattsunami/core/index.html +++ b/autoapi/cattsunami/core/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/cattsunami/core/ocpneb/index.html b/autoapi/cattsunami/core/ocpneb/index.html index c20fc37d44..1c75400ac7 100644 --- a/autoapi/cattsunami/core/ocpneb/index.html +++ b/autoapi/cattsunami/core/ocpneb/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/cattsunami/core/reaction/index.html b/autoapi/cattsunami/core/reaction/index.html index b71a6a4870..f201b81de2 100644 --- a/autoapi/cattsunami/core/reaction/index.html +++ b/autoapi/cattsunami/core/reaction/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/cattsunami/databases/index.html b/autoapi/cattsunami/databases/index.html index 4753c72371..8d17096bc7 100644 --- a/autoapi/cattsunami/databases/index.html +++ b/autoapi/cattsunami/databases/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/cattsunami/index.html b/autoapi/cattsunami/index.html index 9112443659..fbbfb9ba6f 100644 --- a/autoapi/cattsunami/index.html +++ b/autoapi/cattsunami/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/cattsunami/run_validation/run_validation/index.html b/autoapi/cattsunami/run_validation/run_validation/index.html index 0c1fa6381a..7c4f42fcb1 100644 --- a/autoapi/cattsunami/run_validation/run_validation/index.html +++ b/autoapi/cattsunami/run_validation/run_validation/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/_cli/index.html b/autoapi/core/_cli/index.html index f25266ee3a..1d8b2ec4f1 100644 --- a/autoapi/core/_cli/index.html +++ b/autoapi/core/_cli/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -630,7 +630,6 @@

    Contents

  • Module Contents @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/hpo_utils/index.html b/autoapi/core/common/hpo_utils/index.html index 4ddd4e3ac4..27cc843086 100644 --- a/autoapi/core/common/hpo_utils/index.html +++ b/autoapi/core/common/hpo_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/index.html b/autoapi/core/common/index.html index 96b234dcd4..7e216b8490 100644 --- a/autoapi/core/common/index.html +++ b/autoapi/core/common/index.html @@ -337,7 +337,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -360,6 +359,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/logger/index.html b/autoapi/core/common/logger/index.html index e16fc7fc01..0efc8641a2 100644 --- a/autoapi/core/common/logger/index.html +++ b/autoapi/core/common/logger/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -640,6 +640,7 @@

    Contents

  • WandBLogger @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/relaxation/ase_utils/index.html b/autoapi/core/common/relaxation/ase_utils/index.html index a5fe780389..2c61b9e80b 100644 --- a/autoapi/core/common/relaxation/ase_utils/index.html +++ b/autoapi/core/common/relaxation/ase_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -705,7 +705,8 @@

    Module Contents
    implemented_properties: ClassVar[list[str]] = ['energy', 'forces']#
    -
    +

    Properties calculator can handle (energy, forces, …)

    +
    diff --git a/autoapi/core/common/relaxation/index.html b/autoapi/core/common/relaxation/index.html index f75e02d68e..dd8b713738 100644 --- a/autoapi/core/common/relaxation/index.html +++ b/autoapi/core/common/relaxation/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/relaxation/ml_relaxation/index.html b/autoapi/core/common/relaxation/ml_relaxation/index.html index 761ad89e37..64fbd8c517 100644 --- a/autoapi/core/common/relaxation/ml_relaxation/index.html +++ b/autoapi/core/common/relaxation/ml_relaxation/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/relaxation/optimizers/index.html b/autoapi/core/common/relaxation/optimizers/index.html index 8b5528e544..93cf9d3ee5 100644 --- a/autoapi/core/common/relaxation/optimizers/index.html +++ b/autoapi/core/common/relaxation/optimizers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.html b/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.html index 83e3caf19d..6bb4d219e4 100644 --- a/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.html +++ b/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/slurm/index.html b/autoapi/core/common/slurm/index.html index 518ef62b7d..a039255454 100644 --- a/autoapi/core/common/slurm/index.html +++ b/autoapi/core/common/slurm/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/test_utils/index.html b/autoapi/core/common/test_utils/index.html index 08b5ba6279..c938682164 100644 --- a/autoapi/core/common/test_utils/index.html +++ b/autoapi/core/common/test_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -643,6 +643,7 @@

    Contents

  • init_env_rank_and_launch_test()
  • init_pg_and_rank_and_launch_test()
  • spawn_multi_process()
  • +
  • init_local_distributed_process_group()
  • @@ -685,6 +686,9 @@

    Functions

    spawn_multi_process(→ list[Any])

    Spawn single node, multi-rank function.

    +

    init_local_distributed_process_group([backend])

    +

    + @@ -771,6 +775,11 @@

    Module Contents +
    +core.common.test_utils.init_local_distributed_process_group(backend='nccl')#
    +

    + @@ -856,6 +865,7 @@

    Module Contentsinit_env_rank_and_launch_test()
  • init_pg_and_rank_and_launch_test()
  • spawn_multi_process()
  • +
  • init_local_distributed_process_group()
  • diff --git a/autoapi/core/common/transforms/index.html b/autoapi/core/common/transforms/index.html index 3d316064fe..15a6929e68 100644 --- a/autoapi/core/common/transforms/index.html +++ b/autoapi/core/common/transforms/index.html @@ -337,7 +337,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -360,6 +359,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -701,8 +701,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -
    +
    diff --git a/autoapi/core/common/tutorial_utils/index.html b/autoapi/core/common/tutorial_utils/index.html index b7f04232b3..e83783bb97 100644 --- a/autoapi/core/common/tutorial_utils/index.html +++ b/autoapi/core/common/tutorial_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/typing/index.html b/autoapi/core/common/typing/index.html index cb13364b92..7b2ee146d1 100644 --- a/autoapi/core/common/typing/index.html +++ b/autoapi/core/common/typing/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/common/utils/index.html b/autoapi/core/common/utils/index.html index ceb91d84df..720b797af8 100644 --- a/autoapi/core/common/utils/index.html +++ b/autoapi/core/common/utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -636,6 +636,7 @@

    Contents

  • pyg2_data_transform()
  • save_checkpoint()
  • +
  • multitask_required_keys
  • Complete @@ -653,6 +654,7 @@

    Contents

  • dict_set_recursively()
  • parse_value()
  • create_dict_from_args()
  • +
  • find_relative_file_in_paths()
  • load_config()
  • build_config()
  • create_grid()
  • @@ -683,6 +685,7 @@

    Contents

  • irreps_sum()
  • update_config()
  • get_loss_module()
  • +
  • load_model_and_weights_from_checkpoint()
  • @@ -708,6 +711,9 @@

    Attributes

    DEFAULT_ENV_VARS

    +

    multitask_required_keys

    +

    + @@ -778,76 +784,82 @@

    Functions

    create_dict_from_args(args[, sep])

    Create a (nested) dictionary from console arguments.

    -

    load_config(path[, previous_includes])

    +

    find_relative_file_in_paths(filename, include_paths)

    -

    build_config(args, args_override)

    +

    load_config(path[, files_previously_included, ...])

    +

    Load a given config with any defined imports

    + +

    build_config(args, args_override[, include_paths])

    -

    create_grid(base_config, sweep_file)

    +

    create_grid(base_config, sweep_file)

    -

    save_experiment_log(args, jobs, configs)

    +

    save_experiment_log(args, jobs, configs)

    -

    get_pbc_distances(pos, edge_index, cell, cell_offsets, ...)

    +

    get_pbc_distances(pos, edge_index, cell, cell_offsets, ...)

    -

    radius_graph_pbc(data, radius, max_num_neighbors_threshold)

    +

    radius_graph_pbc(data, radius, max_num_neighbors_threshold)

    -

    get_max_neighbors_mask(natoms, index, atom_distance, ...)

    +

    get_max_neighbors_mask(natoms, index, atom_distance, ...)

    Give a mask that filters out edges so that each atom has at most

    -

    get_pruned_edge_idx(→ torch.Tensor)

    +

    get_pruned_edge_idx(→ torch.Tensor)

    -

    merge_dicts(dict1, dict2)

    +

    merge_dicts(dict1, dict2)

    Recursively merge two dictionaries.

    -

    setup_logging(→ None)

    +

    setup_logging(→ None)

    -

    compute_neighbors(data, edge_index)

    +

    compute_neighbors(data, edge_index)

    -

    check_traj_files(→ bool)

    +

    check_traj_files(→ bool)

    -

    setup_env_vars(→ None)

    +

    setup_env_vars(→ None)

    -

    new_trainer_context(*, config[, distributed])

    +

    new_trainer_context(*, config)

    -

    _resolve_scale_factor_submodule(model, name)

    +

    _resolve_scale_factor_submodule(model, name)

    -

    _report_incompat_keys(→ tuple[list[str], list[str]])

    +

    _report_incompat_keys(→ tuple[list[str], list[str]])

    -

    match_state_dict(→ dict)

    +

    match_state_dict(→ dict)

    -

    load_state_dict(→ tuple[list[str], list[str]])

    +

    load_state_dict(→ tuple[list[str], list[str]])

    -

    scatter_det(*args, **kwargs)

    +

    scatter_det(*args, **kwargs)

    -

    get_commit_hash()

    +

    get_commit_hash()

    -

    cg_change_mat(→ torch.tensor)

    +

    cg_change_mat(→ torch.tensor)

    -

    irreps_sum(→ int)

    +

    irreps_sum(→ int)

    Returns the sum of the dimensions of the irreps up to the specified angular momentum.

    -

    update_config(base_config)

    +

    update_config(base_config)

    Configs created prior to FAIRChem/OCP 2.0 are organized a little different than they

    -

    get_loss_module(loss_name)

    +

    get_loss_module(loss_name)

    +

    + +

    load_model_and_weights_from_checkpoint(→ torch.nn.Module)

    @@ -884,6 +896,11 @@

    Module Contentscore.common.utils.save_checkpoint(state, checkpoint_dir: str = 'checkpoints/', checkpoint_file: str = 'checkpoint.pt') str#
    +
    +
    +core.common.utils.multitask_required_keys#
    +
    +
    class core.common.utils.Complete#
    @@ -987,13 +1004,22 @@

    Module Contents -
    -core.common.utils.load_config(path: str, previous_includes: list | None = None)#
    +
    +core.common.utils.find_relative_file_in_paths(filename, include_paths)#

    +
    +
    +core.common.utils.load_config(path: str, files_previously_included: list | None = None, include_paths: list | None = None)#
    +

    Load a given config with any defined imports

    +

    When imports are present this is a recursive function called on imports. +To prevent any cyclic imports we keep track of already imported yml files +using files_previously_included

    +
    +
    -core.common.utils.build_config(args, args_override)#
    +core.common.utils.build_config(args, args_override, include_paths=None)#
    @@ -1114,7 +1140,7 @@

    Module Contents
    -core.common.utils.new_trainer_context(*, config: dict[str, Any], distributed: bool = False)#
    +core.common.utils.new_trainer_context(*, config: dict[str, Any])#

    @@ -1175,6 +1201,11 @@

    Module Contentscore.common.utils.get_loss_module(loss_name)#

    +
    +
    +core.common.utils.load_model_and_weights_from_checkpoint(checkpoint_path: str) torch.nn.Module#
    +
    + @@ -1253,6 +1284,7 @@

    Module Contentspyg2_data_transform()
  • save_checkpoint()
  • +
  • multitask_required_keys
  • Complete @@ -1270,6 +1302,7 @@

    Module Contentsdict_set_recursively()

  • parse_value()
  • create_dict_from_args()
  • +
  • find_relative_file_in_paths()
  • load_config()
  • build_config()
  • create_grid()
  • @@ -1300,6 +1333,7 @@

    Module Contentsirreps_sum()
  • update_config()
  • get_loss_module()
  • +
  • load_model_and_weights_from_checkpoint()
  • diff --git a/autoapi/core/datasets/_utils/index.html b/autoapi/core/datasets/_utils/index.html index 8b5f353acc..76bc033706 100644 --- a/autoapi/core/datasets/_utils/index.html +++ b/autoapi/core/datasets/_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -661,16 +661,22 @@

    Functions#

    -core.datasets._utils.rename_data_object_keys(data_object: torch_geometric.data.Data, key_mapping: dict[str, str]) torch_geometric.data.Data#
    +core.datasets._utils.rename_data_object_keys(data_object: torch_geometric.data.Data, key_mapping: dict[str, str | list[str]]) torch_geometric.data.Data#

    Rename data object keys

    Parameters:
    • data_object – data object

    • key_mapping – dictionary specifying keys to rename and new names {prev_key: new_key}

    • +
    • keys (new_key can be a list of new)

    • +
    • example (for)

    +

    :param : +:param prev_key: energy +:param new_key: [common_energy, oc20_energy] +:param This is currently required when we use a single target/label for multiple tasks:

    diff --git a/autoapi/core/datasets/ase_datasets/index.html b/autoapi/core/datasets/ase_datasets/index.html index c176dbdf50..780f352486 100644 --- a/autoapi/core/datasets/ase_datasets/index.html +++ b/autoapi/core/datasets/ase_datasets/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/base_dataset/index.html b/autoapi/core/datasets/base_dataset/index.html index f1b8279a46..b91de6c60d 100644 --- a/autoapi/core/datasets/base_dataset/index.html +++ b/autoapi/core/datasets/base_dataset/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/embeddings/atomic_radii/index.html b/autoapi/core/datasets/embeddings/atomic_radii/index.html index 3504e0598f..babef30d05 100644 --- a/autoapi/core/datasets/embeddings/atomic_radii/index.html +++ b/autoapi/core/datasets/embeddings/atomic_radii/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/embeddings/continuous_embeddings/index.html b/autoapi/core/datasets/embeddings/continuous_embeddings/index.html index 8acf015b01..fcf586a146 100644 --- a/autoapi/core/datasets/embeddings/continuous_embeddings/index.html +++ b/autoapi/core/datasets/embeddings/continuous_embeddings/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/embeddings/index.html b/autoapi/core/datasets/embeddings/index.html index 47d481042f..73968777ae 100644 --- a/autoapi/core/datasets/embeddings/index.html +++ b/autoapi/core/datasets/embeddings/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/embeddings/khot_embeddings/index.html b/autoapi/core/datasets/embeddings/khot_embeddings/index.html index c49468b88f..7bdef56e16 100644 --- a/autoapi/core/datasets/embeddings/khot_embeddings/index.html +++ b/autoapi/core/datasets/embeddings/khot_embeddings/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.html b/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.html index e85a65affd..4eefa16c7f 100644 --- a/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.html +++ b/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/index.html b/autoapi/core/datasets/index.html index 1c6942acf0..1326a5703c 100644 --- a/autoapi/core/datasets/index.html +++ b/autoapi/core/datasets/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -752,7 +752,7 @@

    Functions

    create_dataset(→ Subset)

    Create a dataset from a config dictionary

    -

    data_list_collater(→ torch_geometric.data.data.BaseData)

    +

    data_list_collater(...)

    @@ -1186,7 +1186,7 @@

    Package Contents
    -core.datasets.data_list_collater(data_list: list[torch_geometric.data.data.BaseData], otf_graph: bool = False) torch_geometric.data.data.BaseData#
    +core.datasets.data_list_collater(data_list: list[torch_geometric.data.data.BaseData], otf_graph: bool = False, to_dict: bool = False) torch_geometric.data.data.BaseData | dict[str, torch.Tensor]#
    diff --git a/autoapi/core/datasets/lmdb_database/index.html b/autoapi/core/datasets/lmdb_database/index.html index 42064b9495..00af806e9c 100644 --- a/autoapi/core/datasets/lmdb_database/index.html +++ b/autoapi/core/datasets/lmdb_database/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/lmdb_dataset/index.html b/autoapi/core/datasets/lmdb_dataset/index.html index 774d2aa0b7..75824f76a3 100644 --- a/autoapi/core/datasets/lmdb_dataset/index.html +++ b/autoapi/core/datasets/lmdb_dataset/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -686,7 +686,7 @@

    Classes#<

    Functions#

    - + @@ -759,7 +759,7 @@

    Module Contents
    -core.datasets.lmdb_dataset.data_list_collater(data_list: list[torch_geometric.data.data.BaseData], otf_graph: bool = False) torch_geometric.data.data.BaseData#
    +core.datasets.lmdb_dataset.data_list_collater(data_list: list[torch_geometric.data.data.BaseData], otf_graph: bool = False, to_dict: bool = False) torch_geometric.data.data.BaseData | dict[str, torch.Tensor]#
    diff --git a/autoapi/core/datasets/oc22_lmdb_dataset/index.html b/autoapi/core/datasets/oc22_lmdb_dataset/index.html index c45f9b274c..311e386d59 100644 --- a/autoapi/core/datasets/oc22_lmdb_dataset/index.html +++ b/autoapi/core/datasets/oc22_lmdb_dataset/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/datasets/target_metadata_guesser/index.html b/autoapi/core/datasets/target_metadata_guesser/index.html index 9745473960..a6d2fc60e6 100644 --- a/autoapi/core/datasets/target_metadata_guesser/index.html +++ b/autoapi/core/datasets/target_metadata_guesser/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/index.html b/autoapi/core/index.html index 0f3d247d50..868e74135b 100644 --- a/autoapi/core/index.html +++ b/autoapi/core/index.html @@ -337,7 +337,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -360,6 +359,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/base/index.html b/autoapi/core/models/base/index.html index 3da66c8b12..91a92d67df 100644 --- a/autoapi/core/models/base/index.html +++ b/autoapi/core/models/base/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -646,6 +646,7 @@

    Contents

  • HeadInterface
  • @@ -653,21 +654,12 @@

    Contents

  • BackboneInterface.forward()
  • -
  • HydraInterface -
  • HydraModel
  • @@ -704,10 +696,7 @@

    Classes#<

    - - - - + @@ -792,7 +781,12 @@

    Module Contents
    class core.models.base.HeadInterface#
    -
    +
    +
    +property use_amp#
    +
    + +
    abstract forward(data: torch_geometric.data.Batch, emb: dict[str, torch.Tensor]) dict[str, torch.Tensor]#

    Head forward.

    @@ -836,28 +830,10 @@

    Module Contents -
    -class core.models.base.HydraInterface#
    -

    Bases: abc.ABC

    -

    Helper class that provides a standard way to create an ABC using -inheritance.

    -
    -
    -abstract get_backbone() BackboneInterface#
    -
    - -
    -
    -abstract get_heads() dict[str, HeadInterface]#
    -
    - -

    -
    -class core.models.base.HydraModel(backbone: dict, heads: dict, otf_graph: bool = True)#
    -

    Bases: torch.nn.Module, GraphModelMixin, HydraInterface

    +class core.models.base.HydraModel(backbone: dict | None = None, heads: dict | None = None, finetune_config: dict | None = None, otf_graph: bool = True, pass_through_head_outputs: bool = False)# +

    Bases: torch.nn.Module, GraphModelMixin

    Base class for all neural network modules.

    Your models should also subclass this class.

    Modules can also contain other Modules, allowing to nest them in @@ -890,33 +866,23 @@

    Module Contents -
    -otf_graph#
    -

    - -
    -
    -backbone#
    +
    +device = None#
    -
    -heads#
    -
    - -
    -
    -backbone_model_name#
    +
    +otf_graph#
    -
    -output_heads: dict[str, HeadInterface]#
    +
    +pass_through_head_outputs#
    -
    -head_names_sorted#
    +
    +starting_model = None#
    @@ -924,16 +890,6 @@

    Module Contentsforward(data: torch_geometric.data.Batch)#

    -
    -
    -get_backbone() BackboneInterface#
    -
    - -
    -
    -get_heads() dict[str, HeadInterface]#
    -
    -
    @@ -1024,6 +980,7 @@

    Module ContentsHeadInterface @@ -1031,21 +988,12 @@

    Module ContentsBackboneInterface.forward() -
  • HydraInterface -
  • HydraModel
  • diff --git a/autoapi/core/models/dimenet_plus_plus/index.html b/autoapi/core/models/dimenet_plus_plus/index.html index b441c78a6e..df2462e052 100644 --- a/autoapi/core/models/dimenet_plus_plus/index.html +++ b/autoapi/core/models/dimenet_plus_plus/index.html @@ -61,7 +61,7 @@ - + @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -1220,7 +1220,19 @@

    Module Contents
    forward(data: torch_geometric.data.batch.Batch) dict[str, torch.Tensor]#
    -
    +

    Backbone forward.

    +
    +
    Parameters:
    +

    data (DataBatch) – Atomic systems as input

    +
    +
    Returns:
    +

    embedding – Return backbone embeddings for the given input

    +
    +
    Return type:
    +

    dict[str->torch.Tensor]

    +
    +
    +

    @@ -1267,11 +1279,11 @@

    Module Contents

    next

    -

    core.models.finetune_hydra

    +

    core.models.model_registry

    diff --git a/autoapi/core/models/equiformer_v2/activation/index.html b/autoapi/core/models/equiformer_v2/activation/index.html index 32a67b37db..1b78262339 100644 --- a/autoapi/core/models/equiformer_v2/activation/index.html +++ b/autoapi/core/models/equiformer_v2/activation/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/equiformer_v2/drop/index.html b/autoapi/core/models/equiformer_v2/drop/index.html index e86d6c394e..7143f162a6 100644 --- a/autoapi/core/models/equiformer_v2/drop/index.html +++ b/autoapi/core/models/equiformer_v2/drop/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/equiformer_v2/edge_rot_mat/index.html b/autoapi/core/models/equiformer_v2/edge_rot_mat/index.html index 16b704b25b..ab727bd157 100644 --- a/autoapi/core/models/equiformer_v2/edge_rot_mat/index.html +++ b/autoapi/core/models/equiformer_v2/edge_rot_mat/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/equiformer_v2/equiformer_v2/index.html b/autoapi/core/models/equiformer_v2/equiformer_v2/index.html index 4c1cd7b31c..afa927ea08 100644 --- a/autoapi/core/models/equiformer_v2/equiformer_v2/index.html +++ b/autoapi/core/models/equiformer_v2/equiformer_v2/index.html @@ -61,7 +61,7 @@ - + @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -627,88 +627,84 @@

    Contents

    data_list_collater(→ torch_geometric.data.data.BaseData)

    data_list_collater(...)

    BackboneInterface

    HydraInterface

    Helper class that provides a standard way to create an ABC using

    HydraModel

    HydraModel

    Base class for all neural network modules.

    - - - - + - + - +

    EquiformerV2

    Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

    EquiformerV2Backbone

    EquiformerV2Backbone

    Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

    EquiformerV2EnergyHead

    EquiformerV2EnergyHead

    Base class for all neural network modules.

    EquiformerV2ForceHead

    EquiformerV2ForceHead

    Base class for all neural network modules.

    +
    +

    Functions#

    +
    + + + + + + + + +

    eqv2_init_weights(m, weight_init)

    eqv2_uniform_init_linear_weights(m)

    +
    +

    Module Contents#

    @@ -774,9 +781,19 @@

    Module Contentscore.models.equiformer_v2.equiformer_v2._AVG_DEGREE = 23.395238876342773#

    +
    +
    +core.models.equiformer_v2.equiformer_v2.eqv2_init_weights(m, weight_init)#
    +
    + +
    +
    +core.models.equiformer_v2.equiformer_v2.eqv2_uniform_init_linear_weights(m)#
    +
    +
    -
    -class core.models.equiformer_v2.equiformer_v2.EquiformerV2(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = True, max_neighbors: int = 500, max_radius: float = 5.0, max_num_elements: int = 90, num_layers: int = 12, sphere_channels: int = 128, attn_hidden_channels: int = 128, num_heads: int = 8, attn_alpha_channels: int = 32, attn_value_channels: int = 16, ffn_hidden_channels: int = 512, norm_type: str = 'rms_norm_sh', lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, grid_resolution: int | None = None, num_sphere_samples: int = 128, edge_channels: int = 128, use_atom_edge_embedding: bool = True, share_atom_edge_embedding: bool = False, use_m_share_rad: bool = False, distance_function: str = 'gaussian', num_distance_basis: int = 512, attn_activation: str = 'scaled_silu', use_s2_act_attn: bool = False, use_attn_renorm: bool = True, ffn_activation: str = 'scaled_silu', use_gate_act: bool = False, use_grid_mlp: bool = False, use_sep_s2_act: bool = True, alpha_drop: float = 0.1, drop_path_rate: float = 0.05, proj_drop: float = 0.0, weight_init: str = 'normal', enforce_max_neighbors_strictly: bool = True, avg_num_nodes: float | None = None, avg_degree: float | None = None, use_energy_lin_ref: bool | None = False, load_energy_lin_ref: bool | None = False)#
    +
    +class core.models.equiformer_v2.equiformer_v2.EquiformerV2Backbone(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = True, max_neighbors: int = 500, max_radius: float = 5.0, max_num_elements: int = 90, num_layers: int = 12, sphere_channels: int = 128, attn_hidden_channels: int = 128, num_heads: int = 8, attn_alpha_channels: int = 32, attn_value_channels: int = 16, ffn_hidden_channels: int = 512, norm_type: str = 'rms_norm_sh', lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, grid_resolution: int | None = None, num_sphere_samples: int = 128, edge_channels: int = 128, use_atom_edge_embedding: bool = True, share_atom_edge_embedding: bool = False, use_m_share_rad: bool = False, distance_function: str = 'gaussian', num_distance_basis: int = 512, attn_activation: str = 'scaled_silu', use_s2_act_attn: bool = False, use_attn_renorm: bool = True, ffn_activation: str = 'scaled_silu', use_gate_act: bool = False, use_grid_mlp: bool = False, use_sep_s2_act: bool = True, alpha_drop: float = 0.1, drop_path_rate: float = 0.05, proj_drop: float = 0.0, weight_init: str = 'normal', enforce_max_neighbors_strictly: bool = True, avg_num_nodes: float | None = None, avg_degree: float | None = None, use_energy_lin_ref: bool | None = False, load_energy_lin_ref: bool | None = False, activation_checkpoint: bool | None = False)#

    Bases: torch.nn.Module, fairchem.core.models.base.GraphModelMixin

    Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

    @@ -830,413 +847,314 @@

    Module Contents -
    -use_pbc#
    +
    +activation_checkpoint#

    -
    -use_pbc_single#
    +
    +use_pbc#
    -
    -regress_forces#
    +
    +use_pbc_single#
    -
    -otf_graph#
    +
    +regress_forces#
    -
    -max_neighbors#
    +
    +otf_graph#
    -
    -max_radius#
    +
    +max_neighbors#
    -
    -cutoff#
    +
    +max_radius#
    -
    -max_num_elements#
    +
    +cutoff#
    -
    -num_layers#
    +
    +max_num_elements#
    -
    -sphere_channels#
    +
    +num_layers#
    -
    -attn_hidden_channels#
    +
    +sphere_channels#
    -
    -num_heads#
    +
    +attn_hidden_channels#
    -
    -attn_alpha_channels#
    +
    +num_heads#
    -
    -attn_value_channels#
    +
    +attn_alpha_channels#
    -
    -ffn_hidden_channels#
    +
    +attn_value_channels#
    -
    -norm_type#
    +
    +ffn_hidden_channels#
    -
    -lmax_list#
    +
    +norm_type#
    -
    -mmax_list#
    +
    +lmax_list#
    -
    -grid_resolution#
    +
    +mmax_list#
    -
    -num_sphere_samples#
    +
    +grid_resolution#
    -
    -edge_channels#
    +
    +num_sphere_samples#
    -
    -use_atom_edge_embedding#
    +
    +edge_channels#
    -
    -share_atom_edge_embedding#
    +
    +use_atom_edge_embedding#
    -
    -use_m_share_rad#
    +
    +share_atom_edge_embedding#
    -
    -distance_function#
    +
    +use_m_share_rad#
    -
    -num_distance_basis#
    +
    +distance_function#
    -
    -attn_activation#
    +
    +num_distance_basis#
    -
    -use_s2_act_attn#
    +
    +attn_activation#
    -
    -use_attn_renorm#
    +
    +use_s2_act_attn#
    -
    -ffn_activation#
    +
    +use_attn_renorm#
    -
    -use_gate_act#
    +
    +ffn_activation#
    -
    -use_grid_mlp#
    +
    +use_gate_act#
    -
    -use_sep_s2_act#
    +
    +use_grid_mlp#
    -
    -alpha_drop#
    +
    +use_sep_s2_act#
    -
    -drop_path_rate#
    +
    +alpha_drop#
    -
    -proj_drop#
    +
    +drop_path_rate#
    -
    -avg_num_nodes#
    +
    +proj_drop#
    -
    -avg_degree#
    +
    +avg_num_nodes#
    -
    -use_energy_lin_ref#
    +
    +avg_degree#
    -
    -load_energy_lin_ref#
    +
    +use_energy_lin_ref#
    -
    -weight_init#
    +
    +load_energy_lin_ref#
    -
    -enforce_max_neighbors_strictly#
    +
    +weight_init#
    -
    -device = 'cpu'#
    +
    +enforce_max_neighbors_strictly#
    -
    -grad_forces = False#
    +
    +device = 'cpu'#
    -
    -num_resolutions: int#
    +
    +grad_forces = False#
    -
    -sphere_channels_all: int#
    +
    +num_resolutions: int#
    -
    -sphere_embedding#
    +
    +sphere_channels_all: int#
    -
    -edge_channels_list#
    +
    +sphere_embedding#
    -
    -SO3_rotation#
    +
    +edge_channels_list#
    -
    -mappingReduced#
    +
    +SO3_rotation#
    -
    -SO3_grid#
    +
    +mappingReduced#
    -
    -edge_degree_embedding#
    +
    +SO3_grid#
    -
    -blocks#
    +
    +edge_degree_embedding#
    -
    -norm#
    +
    +blocks#
    -
    -energy_block#
    +
    +norm#
    -
    -_init_gp_partitions(atomic_numbers_full, data_batch_full, edge_index, edge_distance, edge_distance_vec)#
    +
    +forward(data: torch_geometric.data.batch.Batch) dict[str, torch.Tensor]#
    +
    + +
    +
    +_init_gp_partitions(atomic_numbers_full, data_batch_full, edge_index, edge_distance, edge_distance_vec)#

    Graph Parallel This creates the required partial tensors for each rank given the full tensors. The tensors are split on the dimension along the node index using node_partition.

    -
    -forward(data)#
    -
    - -
    -
    -_init_edge_rot_mat(data, edge_index, edge_distance_vec)#
    +
    +_init_edge_rot_mat(data, edge_index, edge_distance_vec)#
    -
    -property num_params#
    -
    - -
    -
    -_init_weights(m)#
    +
    +property num_params#
    -
    -_uniform_init_rad_func_linear_weights(m)#
    -
    - -
    -
    -_uniform_init_linear_weights(m)#
    -
    - -
    -
    -no_weight_decay() set#
    +
    +no_weight_decay() set#

    Returns a list of parameters with no weight decay.

    -
    -
    -class core.models.equiformer_v2.equiformer_v2.EquiformerV2Backbone(*args, **kwargs)#
    -

    Bases: EquiformerV2, fairchem.core.models.base.BackboneInterface

    -

    Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

    -
    -
    Parameters:
    -
      -
    • use_pbc (bool) – Use periodic boundary conditions

    • -
    • use_pbc_single (bool) – Process batch PBC graphs one at a time

    • -
    • regress_forces (bool) – Compute forces

    • -
    • otf_graph (bool) – Compute graph On The Fly (OTF)

    • -
    • max_neighbors (int) – Maximum number of neighbors per atom

    • -
    • max_radius (float) – Maximum distance between nieghboring atoms in Angstroms

    • -
    • max_num_elements (int) – Maximum atomic number

    • -
    • num_layers (int) – Number of layers in the GNN

    • -
    • sphere_channels (int) – Number of spherical channels (one set per resolution)

    • -
    • attn_hidden_channels (int) – Number of hidden channels used during SO(2) graph attention

    • -
    • num_heads (int) – Number of attention heads

    • -
    • attn_alpha_head (int) – Number of channels for alpha vector in each attention head

    • -
    • attn_value_head (int) – Number of channels for value vector in each attention head

    • -
    • ffn_hidden_channels (int) – Number of hidden channels used during feedforward network

    • -
    • norm_type (str) – Type of normalization layer ([‘layer_norm’, ‘layer_norm_sh’, ‘rms_norm_sh’])

    • -
    • lmax_list (int) – List of maximum degree of the spherical harmonics (1 to 10)

    • -
    • mmax_list (int) – List of maximum order of the spherical harmonics (0 to lmax)

    • -
    • grid_resolution (int) – Resolution of SO3_Grid

    • -
    • num_sphere_samples (int) – Number of samples used to approximate the integration of the sphere in the output blocks

    • -
    • edge_channels (int) – Number of channels for the edge invariant features

    • -
    • use_atom_edge_embedding (bool) – Whether to use atomic embedding along with relative distance for edge scalar features

    • -
    • share_atom_edge_embedding (bool) – Whether to share atom_edge_embedding across all blocks

    • -
    • use_m_share_rad (bool) – Whether all m components within a type-L vector of one channel share radial function weights

    • -
    • distance_function ("gaussian", "sigmoid", "linearsigmoid", "silu") – Basis function used for distances

    • -
    • attn_activation (str) – Type of activation function for SO(2) graph attention

    • -
    • use_s2_act_attn (bool) – Whether to use attention after S2 activation. Otherwise, use the same attention as Equiformer

    • -
    • use_attn_renorm (bool) – Whether to re-normalize attention weights

    • -
    • ffn_activation (str) – Type of activation function for feedforward network

    • -
    • use_gate_act (bool) – If True, use gate activation. Otherwise, use S2 activation

    • -
    • use_grid_mlp (bool) – If True, use projecting to grids and performing MLPs for FFNs.

    • -
    • use_sep_s2_act (bool) – If True, use separable S2 activation when use_gate_act is False.

    • -
    • alpha_drop (float) – Dropout rate for attention weights

    • -
    • drop_path_rate (float) – Drop path rate

    • -
    • proj_drop (float) – Dropout rate for outputs of attention and FFN in Transformer blocks

    • -
    • weight_init (str) – [‘normal’, ‘uniform’] initialization of weights of linear layers except those in radial functions

    • -
    • enforce_max_neighbors_strictly (bool) – When edges are subselected based on the max_neighbors arg, arbitrarily select amongst equidistant / degenerate edges to have exactly the correct number.

    • -
    • avg_num_nodes (float) – Average number of nodes per graph

    • -
    • avg_degree (float) – Average degree of nodes in the graph

    • -
    • use_energy_lin_ref (bool) – Whether to add the per-atom energy references during prediction. -During training and validation, this should be kept False since we use the lin_ref parameter in the OC22 dataloader to subtract the per-atom linear references from the energy targets. -During prediction (where we don’t have energy targets), this can be set to True to add the per-atom linear references to the predicted energies.

    • -
    • load_energy_lin_ref (bool) – Whether to add nn.Parameters for the per-element energy references. -This additional flag is there to ensure compatibility when strict-loading checkpoints, since the use_energy_lin_ref flag can be either True or False even if the model is trained with linear references. -You can’t have use_energy_lin_ref = True and load_energy_lin_ref = False, since the model will not have the parameters for the linear references. All other combinations are fine.

    • -
    -
    -
    -
    -
    -energy_block = None#
    -
    - -
    -
    -force_block = None#
    -
    - -
    -
    -forward(data: torch_geometric.data.batch.Batch) dict[str, torch.Tensor]#
    -

    Backbone forward.

    -
    -
    Parameters:
    -

    data (DataBatch) – Atomic systems as input

    -
    -
    Returns:
    -

    embedding – Return backbone embeddings for the given input

    -
    -
    Return type:
    -

    dict[str->torch.Tensor]

    -
    -
    -
    - -
    -
    -class core.models.equiformer_v2.equiformer_v2.EquiformerV2EnergyHead(backbone)#
    +class core.models.equiformer_v2.equiformer_v2.EquiformerV2EnergyHead(backbone, reduce: str = 'sum')#

    Bases: torch.nn.Module, fairchem.core.models.base.HeadInterface

    Base class for all neural network modules.

    Your models should also subclass this class.

    @@ -1269,6 +1187,11 @@

    Module Contents +
    +reduce#
    +

    +
    avg_num_nodes#
    @@ -1336,6 +1259,11 @@

    Module Contents +
    +activation_checkpoint#
    +

    +
    force_block#
    @@ -1406,11 +1334,11 @@

    Module Contents

    next

    -

    core.models.equiformer_v2.gaussian_rbf

    +

    core.models.equiformer_v2.equiformer_v2_deprecated

    @@ -1432,88 +1360,84 @@

    Module Contents
  • Attributes
  • Classes
  • +
  • Functions
  • Module Contents @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -823,12 +823,12 @@

    Module Contents

    previous

    -

    core.models.equiformer_v2.equiformer_v2

    +

    core.models.equiformer_v2.eqv2_to_eqv2_hydra

    DOCUMENTATION_OPTIONS.pagename = 'autoapi/core/models/equiformer_v2/index'; - + @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -714,6 +714,7 @@

    Contents

    Subpackages#

    @@ -726,6 +727,8 @@

    Submodulescore.models.equiformer_v2.drop
  • core.models.equiformer_v2.edge_rot_mat
  • core.models.equiformer_v2.equiformer_v2
  • +
  • core.models.equiformer_v2.equiformer_v2_deprecated
  • +
  • core.models.equiformer_v2.eqv2_to_eqv2_hydra
  • core.models.equiformer_v2.gaussian_rbf
  • core.models.equiformer_v2.input_block
  • core.models.equiformer_v2.layer_norm
  • @@ -743,7 +746,7 @@

    Classes#<
    - +

    EquiformerV2

    Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

    THIS CLASS HAS BEEN DEPRECATED! Please use "EquiformerV2BackboneAndHeads"

    @@ -755,6 +758,7 @@

    Package Contents class core.models.equiformer_v2.EquiformerV2(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = True, max_neighbors: int = 500, max_radius: float = 5.0, max_num_elements: int = 90, num_layers: int = 12, sphere_channels: int = 128, attn_hidden_channels: int = 128, num_heads: int = 8, attn_alpha_channels: int = 32, attn_value_channels: int = 16, ffn_hidden_channels: int = 512, norm_type: str = 'rms_norm_sh', lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, grid_resolution: int | None = None, num_sphere_samples: int = 128, edge_channels: int = 128, use_atom_edge_embedding: bool = True, share_atom_edge_embedding: bool = False, use_m_share_rad: bool = False, distance_function: str = 'gaussian', num_distance_basis: int = 512, attn_activation: str = 'scaled_silu', use_s2_act_attn: bool = False, use_attn_renorm: bool = True, ffn_activation: str = 'scaled_silu', use_gate_act: bool = False, use_grid_mlp: bool = False, use_sep_s2_act: bool = True, alpha_drop: float = 0.1, drop_path_rate: float = 0.05, proj_drop: float = 0.0, weight_init: str = 'normal', enforce_max_neighbors_strictly: bool = True, avg_num_nodes: float | None = None, avg_degree: float | None = None, use_energy_lin_ref: bool | None = False, load_energy_lin_ref: bool | None = False)#

    Bases: torch.nn.Module, fairchem.core.models.base.GraphModelMixin

    +

    THIS CLASS HAS BEEN DEPRECATED! Please use “EquiformerV2BackboneAndHeads”

    Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

    Parameters:
    @@ -1170,11 +1174,11 @@

    Package Contents

    next

    -

    core.models.equiformer_v2.trainers

    +

    core.models.equiformer_v2.prediction_heads

    diff --git a/autoapi/core/models/equiformer_v2/input_block/index.html b/autoapi/core/models/equiformer_v2/input_block/index.html index 73e6920dea..e3ec893211 100644 --- a/autoapi/core/models/equiformer_v2/input_block/index.html +++ b/autoapi/core/models/equiformer_v2/input_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/equiformer_v2/layer_norm/index.html b/autoapi/core/models/equiformer_v2/layer_norm/index.html index a74d250cf0..4322a07a24 100644 --- a/autoapi/core/models/equiformer_v2/layer_norm/index.html +++ b/autoapi/core/models/equiformer_v2/layer_norm/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -816,8 +816,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -

    +

    @@ -874,8 +873,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -

    +
    @@ -920,8 +918,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -

    +
    @@ -982,8 +979,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -

    +
    @@ -1029,8 +1025,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -

    +
    diff --git a/autoapi/core/models/equiformer_v2/module_list/index.html b/autoapi/core/models/equiformer_v2/module_list/index.html index 6116fcce21..ed1493b423 100644 --- a/autoapi/core/models/equiformer_v2/module_list/index.html +++ b/autoapi/core/models/equiformer_v2/module_list/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/equiformer_v2/prediction_heads/index.html b/autoapi/core/models/equiformer_v2/prediction_heads/index.html new file mode 100644 index 0000000000..bda89be960 --- /dev/null +++ b/autoapi/core/models/equiformer_v2/prediction_heads/index.html @@ -0,0 +1,896 @@ + + + + + + + + + + + core.models.equiformer_v2.prediction_heads + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + +
    + +
    + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    core.models.equiformer_v2.prediction_heads#

    +
    +

    Submodules#

    + +
    +
    +

    Classes#

    +
    + + + + + +

    Rank2SymmetricTensorHead

    A rank 2 symmetric tensor prediction head.

    +
    +
    +
    +

    Package Contents#

    +
    +
    +class core.models.equiformer_v2.prediction_heads.Rank2SymmetricTensorHead(backbone: fairchem.core.models.base.BackboneInterface, output_name: str, decompose: bool = False, edge_level_mlp: bool = False, num_mlp_layers: int = 2, use_source_target_embedding: bool = False, extensive: bool = False, avg_num_nodes: int = 1.0, default_norm_type: str = 'layer_norm_sh')#
    +

    Bases: torch.nn.Module, fairchem.core.models.base.HeadInterface

    +

    A rank 2 symmetric tensor prediction head.

    +
    +
    +ouput_name#
    +

    name of output prediction property (ie, stress)

    +
    + +
    +
    +sphharm_norm#
    +

    layer normalization for spherical harmonic edge weights

    +
    + +
    +
    +xedge_layer_norm#
    +

    embedding layer norm

    +
    + +
    +
    +block#
    +

    rank 2 equivariant symmetric tensor block

    +
    + +
    +
    +output_name#
    +
    + +
    +
    +decompose#
    +
    + +
    +
    +use_source_target_embedding#
    +
    + +
    +
    +avg_num_nodes#
    +
    + +
    +
    +sphharm_norm#
    +
    + +
    +
    +xedge_layer_norm#
    +
    + +
    +
    +forward(data: dict[str, torch.Tensor] | torch.Tensor, emb: dict[str, torch.Tensor]) dict[str, torch.Tensor]#
    +
    +
    Parameters:
    +
      +
    • data – data batch

    • +
    • emb – dictionary with embedding object and graph data

    • +
    +
    +
    +

    Returns: dict of {output property name: predicted value}

    +
    + +
    + +
    +
    + + + + +
    + + + + + + + + +
    + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/prediction_heads/rank2/index.html b/autoapi/core/models/equiformer_v2/prediction_heads/rank2/index.html new file mode 100644 index 0000000000..796b9ca850 --- /dev/null +++ b/autoapi/core/models/equiformer_v2/prediction_heads/rank2/index.html @@ -0,0 +1,1061 @@ + + + + + + + + + + + core.models.equiformer_v2.prediction_heads.rank2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + +
    + +
    + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    core.models.equiformer_v2.prediction_heads.rank2#

    +

    Copyright (c) Meta, Inc. and its affiliates.

    +

    This source code is licensed under the MIT license found in the +LICENSE file in the root directory of this source tree.

    +
    +

    Classes#

    +
    + + + + + + + + + + + +

    Rank2Block

    Output block for predicting rank-2 tensors (stress, dielectric tensor).

    Rank2DecompositionEdgeBlock

    Output block for predicting rank-2 tensors (stress, dielectric tensor, etc).

    Rank2SymmetricTensorHead

    A rank 2 symmetric tensor prediction head.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class core.models.equiformer_v2.prediction_heads.rank2.Rank2Block(emb_size: int, num_layers: int = 2, edge_level: bool = False, extensive: bool = False)#
    +

    Bases: torch.nn.Module

    +

    Output block for predicting rank-2 tensors (stress, dielectric tensor). +Applies outer product between edges and computes node-wise or edge-wise MLP.

    +
    +
    Parameters:
    +
      +
    • emb_size (int) – Size of edge embedding used to compute outer product

    • +
    • num_layers (int) – Number of layers of the MLP

    • +
    • edge_level (bool) – If true apply MLP at edge level before pooling, otherwise use MLP at nodes after pooling

    • +
    • extensive (bool) – Whether to sum or average the outer products

    • +
    +
    +
    +
    +
    +edge_level#
    +
    + +
    +
    +emb_size#
    +
    + +
    +
    +extensive#
    +
    + +
    +
    +scalar_nonlinearity#
    +
    + +
    +
    +r2tensor_MLP#
    +
    + +
    +
    +forward(edge_distance_vec, x_edge, edge_index, data)#
    +
    +
    Parameters:
    +
      +
    • edge_distance_vec (torch.Tensor) – Tensor of shape (…, 3)

    • +
    • x_edge (torch.Tensor) – Tensor of shape (…, emb_size)

    • +
    • edge_index (torch.Tensor) – Tensor of shape (2, nEdges)

    • +
    • data – LMDBDataset sample

    • +
    +
    +
    +
    + +
    + +
    +
    +class core.models.equiformer_v2.prediction_heads.rank2.Rank2DecompositionEdgeBlock(emb_size: int, num_layers: int = 2, edge_level: bool = False, extensive: bool = False)#
    +

    Bases: torch.nn.Module

    +

    Output block for predicting rank-2 tensors (stress, dielectric tensor, etc). +Decomposes a rank-2 symmetric tensor into irrep degree 0 and 2.

    +
    +
    Parameters:
    +
      +
    • emb_size (int) – Size of edge embedding used to compute outer product

    • +
    • num_layers (int) – Number of layers of the MLP

    • +
    • edge_level (bool) – If true apply MLP at edge level before pooling, otherwise use MLP at nodes after pooling

    • +
    • extensive (bool) – Whether to sum or average the outer products

    • +
    +
    +
    +
    +
    +emb_size#
    +
    + +
    +
    +edge_level#
    +
    + +
    +
    +extensive#
    +
    + +
    +
    +scalar_nonlinearity#
    +
    + +
    +
    +scalar_MLP#
    +
    + +
    +
    +irrep2_MLP#
    +
    + +
    +
    +change_mat#
    +
    + +
    +
    +forward(edge_distance_vec, x_edge, edge_index, data)#
    +
    +
    Parameters:
    +
      +
    • edge_distance_vec (torch.Tensor) – Tensor of shape (…, 3)

    • +
    • x_edge (torch.Tensor) – Tensor of shape (…, emb_size)

    • +
    • edge_index (torch.Tensor) – Tensor of shape (2, nEdges)

    • +
    • data – LMDBDataset sample

    • +
    +
    +
    +
    + +
    + +
    +
    +class core.models.equiformer_v2.prediction_heads.rank2.Rank2SymmetricTensorHead(backbone: fairchem.core.models.base.BackboneInterface, output_name: str, decompose: bool = False, edge_level_mlp: bool = False, num_mlp_layers: int = 2, use_source_target_embedding: bool = False, extensive: bool = False, avg_num_nodes: int = 1.0, default_norm_type: str = 'layer_norm_sh')#
    +

    Bases: torch.nn.Module, fairchem.core.models.base.HeadInterface

    +

    A rank 2 symmetric tensor prediction head.

    +
    +
    +ouput_name#
    +

    name of output prediction property (ie, stress)

    +
    + +
    +
    +sphharm_norm#
    +

    layer normalization for spherical harmonic edge weights

    +
    + +
    +
    +xedge_layer_norm#
    +

    embedding layer norm

    +
    + +
    +
    +block#
    +

    rank 2 equivariant symmetric tensor block

    +
    + +
    +
    +output_name#
    +
    + +
    +
    +decompose#
    +
    + +
    +
    +use_source_target_embedding#
    +
    + +
    +
    +avg_num_nodes#
    +
    + +
    +
    +sphharm_norm#
    +
    + +
    +
    +xedge_layer_norm#
    +
    + +
    +
    +forward(data: dict[str, torch.Tensor] | torch.Tensor, emb: dict[str, torch.Tensor]) dict[str, torch.Tensor]#
    +
    +
    Parameters:
    +
      +
    • data – data batch

    • +
    • emb – dictionary with embedding object and graph data

    • +
    +
    +
    +

    Returns: dict of {output property name: predicted value}

    +
    + +
    + +
    +
    + + + + +
    + + + + + + + + +
    + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/radial_function/index.html b/autoapi/core/models/equiformer_v2/radial_function/index.html index 807f9f80d7..4583b51f72 100644 --- a/autoapi/core/models/equiformer_v2/radial_function/index.html +++ b/autoapi/core/models/equiformer_v2/radial_function/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -670,7 +670,31 @@

    Module Contents
    modules = []#
    -

    +

    Return an iterator over all modules in the network.

    +
    +
    Yields:
    +

    Module – a module in the network

    +
    +
    +
    +

    Note

    +

    Duplicate modules are returned only once. In the following +example, l will be returned only once.

    +
    +

    Example:

    +
    >>> l = nn.Linear(2, 2)
    +>>> net = nn.Sequential(l, l)
    +>>> for idx, m in enumerate(net.modules()):
    +...     print(idx, '->', m)
    +
    +0 -> Sequential(
    +  (0): Linear(in_features=2, out_features=2, bias=True)
    +  (1): Linear(in_features=2, out_features=2, bias=True)
    +)
    +1 -> Linear(in_features=2, out_features=2, bias=True)
    +
    +
    +
    diff --git a/autoapi/core/models/equiformer_v2/so2_ops/index.html b/autoapi/core/models/equiformer_v2/so2_ops/index.html index dbb9801c20..f018107cbc 100644 --- a/autoapi/core/models/equiformer_v2/so2_ops/index.html +++ b/autoapi/core/models/equiformer_v2/so2_ops/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/equiformer_v2/so3/index.html b/autoapi/core/models/equiformer_v2/so3/index.html index c0f5d9b2b6..92b27dd2be 100644 --- a/autoapi/core/models/equiformer_v2/so3/index.html +++ b/autoapi/core/models/equiformer_v2/so3/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -863,8 +863,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -

    +
    @@ -1155,8 +1154,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -
    +
    @@ -1238,8 +1236,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -
    +
    diff --git a/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.html b/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.html index ab6910eca3..e67d87ab95 100644 --- a/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.html +++ b/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -664,7 +664,7 @@

    Classes#<

    Module Contents#

    -class core.models.equiformer_v2.trainers.energy_trainer.EquiformerV2EnergyTrainer(task, model, outputs, dataset, optimizer, loss_functions, evaluation_metrics, identifier, timestamp_id=None, run_dir=None, is_debug=False, print_every=100, seed=None, logger='wandb', local_rank=0, amp=False, cpu=False, slurm=None, noddp=False, name='ocp', gp_gpus=None)#
    +class core.models.equiformer_v2.trainers.energy_trainer.EquiformerV2EnergyTrainer(task: dict[str, str | Any], model: dict[str, Any], outputs: dict[str, str | int], dataset: dict[str, str | float], optimizer: dict[str, str | float], loss_functions: dict[str, str | float], evaluation_metrics: dict[str, str], identifier: str, local_rank: int, timestamp_id: str | None = None, run_dir: str | None = None, is_debug: bool = False, print_every: int = 100, seed: int | None = None, logger: str = 'wandb', amp: bool = False, cpu: bool = False, name: str = 'ocp', slurm=None, gp_gpus: int | None = None, inference_only: bool = False)#

    Bases: fairchem.core.trainers.OCPTrainer

    Trainer class for the Structure to Energy & Force (S2EF) and Initial State to Relaxed State (IS2RS) tasks.

    @@ -695,13 +695,10 @@

    Module ContentsNone)

  • logger (str, optional) – Type of logger to be used. (default: wandb)

  • -
  • local_rank (int, optional) – Local rank of the process, only applicable for distributed training. -(default: 0)

  • amp (bool, optional) – Run using automatic mixed precision. (default: False)

  • slurm (dict) – Slurm configuration. Currently just for keeping track. (default: {})

  • -
  • noddp (bool, optional) – Run model without DDP.

  • diff --git a/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.html b/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.html index b60ad72fad..ab4b315921 100644 --- a/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.html +++ b/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -664,7 +664,7 @@

    Classes#<

    Module Contents#

    -class core.models.equiformer_v2.trainers.forces_trainer.EquiformerV2ForcesTrainer(task, model, outputs, dataset, optimizer, loss_functions, evaluation_metrics, identifier, timestamp_id=None, run_dir=None, is_debug=False, print_every=100, seed=None, logger='wandb', local_rank=0, amp=False, cpu=False, slurm=None, noddp=False, name='ocp', gp_gpus=None)#
    +class core.models.equiformer_v2.trainers.forces_trainer.EquiformerV2ForcesTrainer(task: dict[str, str | Any], model: dict[str, Any], outputs: dict[str, str | int], dataset: dict[str, str | float], optimizer: dict[str, str | float], loss_functions: dict[str, str | float], evaluation_metrics: dict[str, str], identifier: str, local_rank: int, timestamp_id: str | None = None, run_dir: str | None = None, is_debug: bool = False, print_every: int = 100, seed: int | None = None, logger: str = 'wandb', amp: bool = False, cpu: bool = False, name: str = 'ocp', slurm=None, gp_gpus: int | None = None, inference_only: bool = False)#

    Bases: fairchem.core.trainers.OCPTrainer

    Trainer class for the Structure to Energy & Force (S2EF) and Initial State to Relaxed State (IS2RS) tasks.

    @@ -695,13 +695,10 @@

    Module ContentsNone)

  • logger (str, optional) – Type of logger to be used. (default: wandb)

  • -
  • local_rank (int, optional) – Local rank of the process, only applicable for distributed training. -(default: 0)

  • amp (bool, optional) – Run using automatic mixed precision. (default: False)

  • slurm (dict) – Slurm configuration. Currently just for keeping track. (default: {})

  • -
  • noddp (bool, optional) – Run model without DDP.

  • diff --git a/autoapi/core/models/equiformer_v2/trainers/index.html b/autoapi/core/models/equiformer_v2/trainers/index.html index eaf4cef4ef..3bc1c8931b 100644 --- a/autoapi/core/models/equiformer_v2/trainers/index.html +++ b/autoapi/core/models/equiformer_v2/trainers/index.html @@ -62,7 +62,7 @@ - + @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -682,12 +682,12 @@

    Submodules

    previous

    -

    core.models.equiformer_v2

    +

    core.models.equiformer_v2.prediction_heads.rank2

    core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/equiformer_v2/transformer_block/index.html b/autoapi/core/models/equiformer_v2/transformer_block/index.html index 0c03314379..972226bd37 100644 --- a/autoapi/core/models/equiformer_v2/transformer_block/index.html +++ b/autoapi/core/models/equiformer_v2/transformer_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/equiformer_v2/wigner/index.html b/autoapi/core/models/equiformer_v2/wigner/index.html index f10818b2db..91af1dc13e 100644 --- a/autoapi/core/models/equiformer_v2/wigner/index.html +++ b/autoapi/core/models/equiformer_v2/wigner/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/escn/escn/index.html b/autoapi/core/models/escn/escn/index.html index 0e531258aa..ce61eba00d 100644 --- a/autoapi/core/models/escn/escn/index.html +++ b/autoapi/core/models/escn/escn/index.html @@ -61,7 +61,7 @@ - + @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -670,6 +670,7 @@

    Contents

  • eSCNEnergyHead
  • @@ -838,7 +839,7 @@

    Classes#<

    Module Contents#

    -class core.models.escn.escn.eSCN(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = False, max_neighbors: int = 40, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False)#
    +class core.models.escn.escn.eSCN(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = False, max_neighbors: int = 40, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False, resolution: int | None = None)#

    Bases: torch.nn.Module, fairchem.core.models.base.GraphModelMixin

    Equivariant Spherical Channel Network Paper: Reducing SO(3) Convolutions to SO(2) for Efficient Equivariant GNNs

    @@ -1040,7 +1041,7 @@

    Module Contents
    -class core.models.escn.escn.eSCNBackbone(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = False, max_neighbors: int = 40, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False)#
    +class core.models.escn.escn.eSCNBackbone(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = False, max_neighbors: int = 40, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False, resolution: int | None = None)#

    Bases: eSCN, fairchem.core.models.base.BackboneInterface

    Equivariant Spherical Channel Network Paper: Reducing SO(3) Convolutions to SO(2) for Efficient Equivariant GNNs

    @@ -1089,7 +1090,7 @@

    Module Contents
    -class core.models.escn.escn.eSCNEnergyHead(backbone)#
    +class core.models.escn.escn.eSCNEnergyHead(backbone, reduce='sum')#

    Bases: torch.nn.Module, fairchem.core.models.base.HeadInterface

    Base class for all neural network modules.

    Your models should also subclass this class.

    @@ -1127,6 +1128,11 @@

    Module Contentsenergy_block = None#

    +
    +
    +reduce#
    +
    +
    forward(data: torch_geometric.data.batch.Batch, emb: dict[str, torch.Tensor]) dict[str, torch.Tensor]#
    @@ -1768,11 +1774,11 @@

    Module Contents

    next

    -

    core.models.escn.so3

    +

    core.models.escn.escn_exportable

    @@ -1837,6 +1843,7 @@

    Module ContentseSCNEnergyHead diff --git a/autoapi/core/models/escn/escn_exportable/index.html b/autoapi/core/models/escn/escn_exportable/index.html new file mode 100644 index 0000000000..60f251ccbb --- /dev/null +++ b/autoapi/core/models/escn/escn_exportable/index.html @@ -0,0 +1,1723 @@ + + + + + + + + + + + core.models.escn.escn_exportable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + +
    + +
    + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    core.models.escn.escn_exportable

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    core.models.escn.escn_exportable#

    +

    Copyright (c) Meta, Inc. and its affiliates.

    +

    This source code is licensed under the MIT license found in the +LICENSE file in the root directory of this source tree.

    +
    +

    Classes#

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    eSCN

    Equivariant Spherical Channel Network

    LayerBlock

    Layer block: Perform one layer (message passing and aggregation) of the GNN

    MessageBlock

    Message block: Perform message passing

    SO2Block

    SO(2) Block: Perform SO(2) convolutions for all m (orders)

    SO2Conv

    SO(2) Conv: Perform an SO(2) convolution

    EdgeBlock

    Edge Block: Compute invariant edge representation from edge diatances and atomic numbers

    EnergyBlock

    Energy Block: Output block computing the energy

    ForceBlock

    Force Block: Output block computing the per atom forces

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class core.models.escn.escn_exportable.eSCN(regress_forces: bool = True, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax: int = 4, mmax: int = 2, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, resolution: int | None = None)#
    +

    Bases: torch.nn.Module

    +

    Equivariant Spherical Channel Network +Paper: Reducing SO(3) Convolutions to SO(2) for Efficient Equivariant GNNs

    +
    +
    Parameters:
    +
      +
    • regress_forces (bool) – Compute forces

    • +
    • cutoff (float) – Maximum distance between nieghboring atoms in Angstroms

    • +
    • max_num_elements (int) – Maximum atomic number

    • +
    • num_layers (int) – Number of layers in the GNN

    • +
    • lmax (int) – maximum degree of the spherical harmonics (1 to 10)

    • +
    • mmax (int) – maximum order of the spherical harmonics (0 to lmax)

    • +
    • sphere_channels (int) – Number of spherical channels (one set per resolution)

    • +
    • hidden_channels (int) – Number of hidden units in message passing

    • +
    • num_sphere_samples (int) – Number of samples used to approximate the integration of the sphere in the output blocks

    • +
    • edge_channels (int) – Number of channels for the edge invariant features

    • +
    • distance_function ("gaussian", "sigmoid", "linearsigmoid", "silu") – Basis function used for distances

    • +
    • basis_width_scalar (float) – Width of distance basis function

    • +
    • distance_resolution (float) – Distance between distance basis functions in Angstroms

    • +
    +
    +
    +
    +
    +regress_forces#
    +
    + +
    +
    +cutoff#
    +
    + +
    +
    +max_num_elements#
    +
    + +
    +
    +hidden_channels#
    +
    + +
    +
    +num_layers#
    +
    + +
    +
    +num_sphere_samples#
    +
    + +
    +
    +sphere_channels#
    +
    + +
    +
    +edge_channels#
    +
    + +
    +
    +distance_resolution#
    +
    + +
    +
    +lmax#
    +
    + +
    +
    +mmax#
    +
    + +
    +
    +basis_width_scalar#
    +
    + +
    +
    +distance_function#
    +
    + +
    +
    +act#
    +
    + +
    +
    +sphere_embedding#
    +
    + +
    +
    +num_gaussians#
    +
    + +
    +
    +SO3_grid#
    +
    + +
    +
    +mappingReduced#
    +
    + +
    +
    +layer_blocks#
    +
    + +
    +
    +energy_block#
    +
    + +
    +
    +sphere_points#
    +
    + +
    +
    +sphharm_weights: torch.nn.Parameter#
    +
    + +
    +
    +forward(data: dict[str, torch.Tensor]) dict[str, torch.Tensor]#
    +
    + +
    +
    +_init_edge_rot_mat(edge_index, edge_distance_vec)#
    +
    + +
    +
    +property num_params: int#
    +
    + +
    + +
    +
    +class core.models.escn.escn_exportable.LayerBlock(layer_idx: int, sphere_channels: int, hidden_channels: int, edge_channels: int, lmax: int, mmax: int, distance_expansion, max_num_elements: int, SO3_grid: fairchem.core.models.escn.so3_exportable.SO3_Grid, act, mappingReduced)#
    +

    Bases: torch.nn.Module

    +

    Layer block: Perform one layer (message passing and aggregation) of the GNN

    +
    +
    Parameters:
    +
      +
    • layer_idx (int) – Layer number

    • +
    • sphere_channels (int) – Number of spherical channels

    • +
    • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

    • +
    • edge_channels (int) – Size of invariant edge embedding

    • +
    • lmax (int) degrees (l)

    • +
    • mmax (int) – orders (m) for each resolution

    • +
    • distance_expansion (func) – Function used to compute distance embedding

    • +
    • max_num_elements (int) – Maximum number of atomic numbers

    • +
    • SO3_grid (SO3_grid) – Class used to convert from grid the spherical harmonic representations

    • +
    • act (function) – Non-linear activation function

    • +
    +
    +
    +
    +
    +layer_idx#
    +
    + +
    +
    +act#
    +
    + +
    +
    +lmax#
    +
    + +
    +
    +mmax#
    +
    + +
    +
    +sphere_channels#
    +
    + +
    +
    +SO3_grid#
    +
    + +
    +
    +mappingReduced#
    +
    + +
    +
    +message_block#
    +
    + +
    +
    +fc1_sphere#
    +
    + +
    +
    +fc2_sphere#
    +
    + +
    +
    +fc3_sphere#
    +
    + +
    +
    +forward(x: torch.Tensor, atomic_numbers: torch.Tensor, edge_distance: torch.Tensor, edge_index: torch.Tensor, wigner: torch.Tensor) torch.Tensor#
    +
    + +
    + +
    +
    +class core.models.escn.escn_exportable.MessageBlock(layer_idx: int, sphere_channels: int, hidden_channels: int, edge_channels: int, lmax: int, mmax: int, distance_expansion, max_num_elements: int, SO3_grid: fairchem.core.models.escn.so3_exportable.SO3_Grid, act, mappingReduced)#
    +

    Bases: torch.nn.Module

    +

    Message block: Perform message passing

    +
    +
    Parameters:
    +
      +
    • layer_idx (int) – Layer number

    • +
    • sphere_channels (int) – Number of spherical channels

    • +
    • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

    • +
    • edge_channels (int) – Size of invariant edge embedding

    • +
    • lmax (int) – degrees (l) for each resolution

    • +
    • mmax (int) – orders (m) for each resolution

    • +
    • distance_expansion (func) – Function used to compute distance embedding

    • +
    • max_num_elements (int) – Maximum number of atomic numbers

    • +
    • SO3_grid (SO3_grid) – Class used to convert from grid the spherical harmonic representations

    • +
    • act (function) – Non-linear activation function

    • +
    +
    +
    +
    +
    +layer_idx#
    +
    + +
    +
    +act#
    +
    + +
    +
    +hidden_channels#
    +
    + +
    +
    +sphere_channels#
    +
    + +
    +
    +SO3_grid#
    +
    + +
    +
    +lmax#
    +
    + +
    +
    +mmax#
    +
    + +
    +
    +edge_channels#
    +
    + +
    +
    +mappingReduced#
    +
    + +
    +
    +out_mask#
    +
    + +
    +
    +edge_block#
    +
    + +
    +
    +so2_block_source#
    +
    + +
    +
    +so2_block_target#
    +
    + +
    +
    +forward(x: torch.Tensor, atomic_numbers: torch.Tensor, edge_distance: torch.Tensor, edge_index: torch.Tensor, wigner: torch.Tensor) torch.Tensor#
    +
    + +
    + +
    +
    +class core.models.escn.escn_exportable.SO2Block(sphere_channels: int, hidden_channels: int, edge_channels: int, lmax: int, mmax: int, act, mappingReduced)#
    +

    Bases: torch.nn.Module

    +

    SO(2) Block: Perform SO(2) convolutions for all m (orders)

    +
    +
    Parameters:
    +
      +
    • sphere_channels (int) – Number of spherical channels

    • +
    • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

    • +
    • edge_channels (int) – Size of invariant edge embedding

    • +
    • lmax (int) – degrees (l) for each resolution

    • +
    • mmax (int) – orders (m) for each resolution

    • +
    • act (function) – Non-linear activation function

    • +
    +
    +
    +
    +
    +sphere_channels#
    +
    + +
    +
    +hidden_channels#
    +
    + +
    +
    +lmax#
    +
    + +
    +
    +mmax#
    +
    + +
    +
    +act#
    +
    + +
    +
    +mappingReduced#
    +
    + +
    +
    +num_channels_m0#
    +
    + +
    +
    +fc1_dist0#
    +
    + +
    +
    +fc1_m0#
    +
    + +
    +
    +fc2_m0#
    +
    + +
    +
    +so2_conv#
    +
    + +
    +
    +forward(x: torch.Tensor, x_edge: torch.Tensor)#
    +
    + +
    + +
    +
    +class core.models.escn.escn_exportable.SO2Conv(m: int, sphere_channels: int, hidden_channels: int, edge_channels: int, lmax: int, mmax: int, act)#
    +

    Bases: torch.nn.Module

    +

    SO(2) Conv: Perform an SO(2) convolution

    +
    +
    Parameters:
    +
      +
    • m (int) – Order of the spherical harmonic coefficients

    • +
    • sphere_channels (int) – Number of spherical channels

    • +
    • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

    • +
    • edge_channels (int) – Size of invariant edge embedding

    • +
    • lmax (int) – degrees (l) for each resolution

    • +
    • mmax (int) – orders (m) for each resolution

    • +
    • act (function) – Non-linear activation function

    • +
    +
    +
    +
    +
    +hidden_channels#
    +
    + +
    +
    +lmax#
    +
    + +
    +
    +mmax#
    +
    + +
    +
    +sphere_channels#
    +
    + +
    +
    +m#
    +
    + +
    +
    +act#
    +
    + +
    +
    +num_coefficents = 0#
    +
    + +
    +
    +num_channels#
    +
    + +
    +
    +fc1_dist#
    +
    + +
    +
    +fc1_r#
    +
    + +
    +
    +fc2_r#
    +
    + +
    +
    +fc1_i#
    +
    + +
    +
    +fc2_i#
    +
    + +
    +
    +forward(x_m, x_edge) torch.Tensor#
    +
    + +
    + +
    +
    +class core.models.escn.escn_exportable.EdgeBlock(edge_channels, distance_expansion, max_num_elements, act)#
    +

    Bases: torch.nn.Module

    +

    Edge Block: Compute invariant edge representation from edge diatances and atomic numbers

    +
    +
    Parameters:
    +
      +
    • edge_channels (int) – Size of invariant edge embedding

    • +
    • distance_expansion (func) – Function used to compute distance embedding

    • +
    • max_num_elements (int) – Maximum number of atomic numbers

    • +
    • act (function) – Non-linear activation function

    • +
    +
    +
    +
    +
    +in_channels#
    +
    + +
    +
    +distance_expansion#
    +
    + +
    +
    +act#
    +
    + +
    +
    +edge_channels#
    +
    + +
    +
    +max_num_elements#
    +
    + +
    +
    +fc1_dist#
    +
    + +
    +
    +source_embedding#
    +
    + +
    +
    +target_embedding#
    +
    + +
    +
    +fc1_edge_attr#
    +
    + +
    +
    +forward(edge_distance, source_element, target_element)#
    +
    + +
    + +
    +
    +class core.models.escn.escn_exportable.EnergyBlock(num_channels: int, num_sphere_samples: int, act)#
    +

    Bases: torch.nn.Module

    +

    Energy Block: Output block computing the energy

    +
    +
    Parameters:
    +
      +
    • num_channels (int) – Number of channels

    • +
    • num_sphere_samples (int) – Number of samples used to approximate the integral on the sphere

    • +
    • act (function) – Non-linear activation function

    • +
    +
    +
    +
    +
    +num_channels#
    +
    + +
    +
    +num_sphere_samples#
    +
    + +
    +
    +act#
    +
    + +
    +
    +fc1#
    +
    + +
    +
    +fc2#
    +
    + +
    +
    +fc3#
    +
    + +
    +
    +forward(x_pt) torch.Tensor#
    +
    + +
    + +
    +
    +class core.models.escn.escn_exportable.ForceBlock(num_channels: int, num_sphere_samples: int, act)#
    +

    Bases: torch.nn.Module

    +

    Force Block: Output block computing the per atom forces

    +
    +
    Parameters:
    +
      +
    • num_channels (int) – Number of channels

    • +
    • num_sphere_samples (int) – Number of samples used to approximate the integral on the sphere

    • +
    • act (function) – Non-linear activation function

    • +
    +
    +
    +
    +
    +num_channels#
    +
    + +
    +
    +num_sphere_samples#
    +
    + +
    +
    +act#
    +
    + +
    +
    +fc1#
    +
    + +
    +
    +fc2#
    +
    + +
    +
    +fc3#
    +
    + +
    +
    +forward(x_pt, sphere_points) torch.Tensor#
    +
    + +
    + +
    +
    + + + + +
    + + + + + + + + +
    + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/autoapi/core/models/escn/index.html b/autoapi/core/models/escn/index.html index 7d752de651..702ee28014 100644 --- a/autoapi/core/models/escn/index.html +++ b/autoapi/core/models/escn/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -685,7 +685,9 @@

    Submodules

    @@ -704,7 +706,7 @@

    Classes#<

    Package Contents#

    -class core.models.escn.eSCN(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = False, max_neighbors: int = 40, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False)#
    +class core.models.escn.eSCN(use_pbc: bool = True, use_pbc_single: bool = False, regress_forces: bool = True, otf_graph: bool = False, max_neighbors: int = 40, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False, resolution: int | None = None)#

    Bases: torch.nn.Module, fairchem.core.models.base.GraphModelMixin

    Equivariant Spherical Channel Network Paper: Reducing SO(3) Convolutions to SO(2) for Efficient Equivariant GNNs

    diff --git a/autoapi/core/models/escn/so3/index.html b/autoapi/core/models/escn/so3/index.html index 33e41c6cf9..1f7723600c 100644 --- a/autoapi/core/models/escn/so3/index.html +++ b/autoapi/core/models/escn/so3/index.html @@ -61,8 +61,8 @@ - - + + @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -1014,7 +1014,7 @@

    Module Contents
    -class core.models.escn.so3.SO3_Grid(lmax: int, mmax: int)#
    +class core.models.escn.so3.SO3_Grid(lmax: int, mmax: int, resolution: int | None = None)#

    Bases: torch.nn.Module

    Helper functions for grid representation of the irreps

    @@ -1106,20 +1106,20 @@

    Module Contents

    previous

    -

    core.models.escn.escn

    +

    core.models.escn.escn_exportable

    next

    -

    core.models.gemnet

    +

    core.models.escn.so3_exportable

    diff --git a/autoapi/core/models/escn/so3_exportable/index.html b/autoapi/core/models/escn/so3_exportable/index.html new file mode 100644 index 0000000000..350284e87b --- /dev/null +++ b/autoapi/core/models/escn/so3_exportable/index.html @@ -0,0 +1,1099 @@ + + + + + + + + + + + core.models.escn.so3_exportable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + +
    + +
    + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    core.models.escn.so3_exportable#

    +
    +

    Attributes#

    +
    + + + + + +

    __Jd

    +
    +
    +
    +

    Classes#

    +
    + + + + + + + + +

    CoefficientMapping

    Helper module for coefficients used to reshape l <--> m and to get coefficients of specific degree or order

    SO3_Grid

    Helper functions for grid representation of the irreps

    +
    +
    +
    +

    Functions#

    +
    + + + + + + + + + + + + + + +

    get_jd(→ torch.Tensor)

    wigner_D(→ torch.Tensor)

    _z_rot_mat(→ torch.Tensor)

    rotation_to_wigner(→ torch.Tensor)

    +
    +
    +
    +

    Module Contents#

    +
    +
    +core.models.escn.so3_exportable.__Jd#
    +
    + +
    +
    +core.models.escn.so3_exportable.get_jd() torch.Tensor#
    +
    + +
    +
    +core.models.escn.so3_exportable.wigner_D(lv: int, alpha: torch.Tensor, beta: torch.Tensor, gamma: torch.Tensor) torch.Tensor#
    +
    + +
    +
    +core.models.escn.so3_exportable._z_rot_mat(angle: torch.Tensor, lv: int) torch.Tensor#
    +
    + +
    +
    +core.models.escn.so3_exportable.rotation_to_wigner(edge_rot_mat: torch.Tensor, start_lmax: int, end_lmax: int) torch.Tensor#
    +
    + +
    +
    +class core.models.escn.so3_exportable.CoefficientMapping(lmax_list, mmax_list)#
    +

    Bases: torch.nn.Module

    +

    Helper module for coefficients used to reshape l <–> m and to get coefficients of specific degree or order

    +
    +
    Parameters:
    +
      +
    • (list (mmax_list) – int): List of maximum degree of the spherical harmonics

    • +
    • (list – int): List of maximum order of the spherical harmonics

    • +
    • use_rotate_inv_rescale (bool) – Whether to pre-compute inverse rotation rescale matrices

    • +
    +
    +
    +
    +
    +lmax_list#
    +
    + +
    +
    +mmax_list#
    +
    + +
    +
    +num_resolutions#
    +
    + +
    +
    +l_harmonic#
    +
    + +
    +
    +m_harmonic#
    +
    + +
    +
    +m_complex#
    +
    + +
    +
    +res_size#
    +
    + +
    +
    +offset = 0#
    +
    + +
    +
    +num_coefficients#
    +
    + +
    +
    +to_m#
    +
    + +
    +
    +m_size#
    +
    + +
    +
    +complex_idx(m, lmax, m_complex, l_harmonic)#
    +

    Add m_complex and l_harmonic to the input arguments +since we cannot use self.m_complex.

    +
    + +
    +
    +pre_compute_coefficient_idx()#
    +

    Pre-compute the results of coefficient_idx() and access them with prepare_coefficient_idx()

    +
    + +
    +
    +prepare_coefficient_idx()#
    +

    Construct a list of buffers

    +
    + +
    +
    +coefficient_idx(lmax: int, mmax: int)#
    +
    + +
    +
    +pre_compute_rotate_inv_rescale()#
    +
    + +
    +
    +__repr__()#
    +
    + +
    + +
    +
    +class core.models.escn.so3_exportable.SO3_Grid(lmax: int, mmax: int, normalization: str = 'integral', resolution: int | None = None)#
    +

    Bases: torch.nn.Module

    +

    Helper functions for grid representation of the irreps

    +
    +
    Parameters:
    +
      +
    • lmax (int) – Maximum degree of the spherical harmonics

    • +
    • mmax (int) – Maximum order of the spherical harmonics

    • +
    +
    +
    +
    +
    +lmax#
    +
    + +
    +
    +mmax#
    +
    + +
    +
    +lat_resolution#
    +
    + +
    +
    +mapping#
    +
    + +
    +
    +device = 'cpu'#
    +
    + +
    +
    +to_grid#
    +
    + +
    +
    +to_grid_mat#
    +
    + +
    +
    +from_grid#
    +
    + +
    +
    +from_grid_mat#
    +
    + +
    +
    +get_to_grid_mat(device=None)#
    +
    + +
    +
    +get_from_grid_mat(device=None)#
    +
    + +
    + +
    +
    + + + + +
    + + + + + + + + +
    + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/autoapi/core/models/finetune_hydra/index.html b/autoapi/core/models/finetune_hydra/index.html deleted file mode 100644 index 624a5c6616..0000000000 --- a/autoapi/core/models/finetune_hydra/index.html +++ /dev/null @@ -1,1079 +0,0 @@ - - - - - - - - - - - core.models.finetune_hydra - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - -
    -
    -
    -
    -
    - -
    - -
    - - - - - -
    -
    - - - -
    - - - - - - - - - - - - - -
    - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - - - - - - -
    - -
    -

    core.models.finetune_hydra#

    -
    -

    Attributes#

    -
    - - - - - -

    FTHYDRA_NAME

    -
    -
    -
    -

    Classes#

    -
    - - - - - - - - - - - -

    FineTuneMode

    Create a collection of name/value pairs.

    FTConfig

    FineTuneHydra

    Base class for all neural network modules.

    -
    -
    -
    -

    Functions#

    -
    - - - - - - - - -

    get_model_config_from_checkpoint(→ dict)

    load_hydra_model(...)

    -
    -
    -
    -

    Module Contents#

    -
    -
    -core.models.finetune_hydra.FTHYDRA_NAME = 'finetune_hydra'#
    -
    - -
    -
    -class core.models.finetune_hydra.FineTuneMode(*args, **kwds)#
    -

    Bases: enum.Enum

    -

    Create a collection of name/value pairs.

    -

    Example enumeration:

    -
    >>> class Color(Enum):
    -...     RED = 1
    -...     BLUE = 2
    -...     GREEN = 3
    -
    -
    -

    Access them by:

    -
      -
    • attribute access:

    • -
    -
    >>> Color.RED
    -<Color.RED: 1>
    -
    -
    -
      -
    • value lookup:

    • -
    -
    >>> Color(1)
    -<Color.RED: 1>
    -
    -
    -
      -
    • name lookup:

    • -
    -
    >>> Color['RED']
    -<Color.RED: 1>
    -
    -
    -

    Enumerations can be iterated over, and know how many members they have:

    -
    >>> len(Color)
    -3
    -
    -
    -
    >>> list(Color)
    -[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]
    -
    -
    -

    Methods can be added to enumerations, and members can have their own -attributes – see the documentation for details.

    -
    -
    -DATA_ONLY = 1#
    -
    - -
    -
    -RETAIN_BACKBONE_ONLY = 2#
    -
    - -
    - -
    -
    -core.models.finetune_hydra.get_model_config_from_checkpoint(checkpoint_path: str) dict#
    -
    - -
    -
    -core.models.finetune_hydra.load_hydra_model(checkpoint_path: str) fairchem.core.models.base.HydraInterface#
    -
    - -
    -
    -class core.models.finetune_hydra.FTConfig(config: dict)#
    -
    -
    -FT_CONFIG_NAME = 'finetune_config'#
    -
    - -
    -
    -STARTING_CHECKPOINT = 'starting_checkpoint'#
    -
    - -
    -
    -STARTING_MODEL = 'starting_model'#
    -
    - -
    -
    -MODE = 'mode'#
    -
    - -
    -
    -HEADS = 'heads'#
    -
    - -
    -
    -config#
    -
    - -
    -
    -_mode#
    -
    - -
    -
    -load_model() torch.nn.Module#
    -
    - -
    -
    -get_standalone_config() dict#
    -
    - -
    -
    -property mode: FineTuneMode#
    -
    - -
    -
    -property head_config: dict#
    -
    - -
    - -
    -
    -class core.models.finetune_hydra.FineTuneHydra(finetune_config: dict)#
    -

    Bases: torch.nn.Module, fairchem.core.models.base.HydraInterface

    -

    Base class for all neural network modules.

    -

    Your models should also subclass this class.

    -

    Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

    -
    import torch.nn as nn
    -import torch.nn.functional as F
    -
    -class Model(nn.Module):
    -    def __init__(self):
    -        super().__init__()
    -        self.conv1 = nn.Conv2d(1, 20, 5)
    -        self.conv2 = nn.Conv2d(20, 20, 5)
    -
    -    def forward(self, x):
    -        x = F.relu(self.conv1(x))
    -        return F.relu(self.conv2(x))
    -
    -
    -

    Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

    -
    -

    Note

    -

    As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

    -
    -
    -
    Variables:
    -

    training (bool) – Boolean represents whether this module is in training or -evaluation mode.

    -
    -
    -
    -
    -ft_config#
    -
    - -
    -
    -hydra_model: fairchem.core.models.base.HydraInterface#
    -
    - -
    -
    -backbone: fairchem.core.models.base.BackboneInterface#
    -
    - -
    -
    -forward(data: torch_geometric.data.Batch)#
    -
    - -
    -
    -get_backbone() fairchem.core.models.base.BackboneInterface#
    -
    - -
    -
    -get_heads() dict[str, fairchem.core.models.base.HeadInterface]#
    -
    - -
    - -
    -
    - - - - -
    - - - - - - - - -
    - - - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/gemnet/index.html b/autoapi/core/models/gemnet/gemnet/index.html index 5a946061ed..1a02ad6099 100644 --- a/autoapi/core/models/gemnet/gemnet/index.html +++ b/autoapi/core/models/gemnet/gemnet/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/index.html b/autoapi/core/models/gemnet/index.html index c0dfe14143..7822748223 100644 --- a/autoapi/core/models/gemnet/index.html +++ b/autoapi/core/models/gemnet/index.html @@ -62,7 +62,7 @@ - + @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -943,12 +943,12 @@

    Package Contents

    previous

    -

    core.models.escn.so3

    +

    core.models.escn.so3_exportable

    core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/atom_update_block/index.html b/autoapi/core/models/gemnet/layers/atom_update_block/index.html index da2253ec59..d2d74ae19c 100644 --- a/autoapi/core/models/gemnet/layers/atom_update_block/index.html +++ b/autoapi/core/models/gemnet/layers/atom_update_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/base_layers/index.html b/autoapi/core/models/gemnet/layers/base_layers/index.html index 3cb4cd336a..bcf3ed8a76 100644 --- a/autoapi/core/models/gemnet/layers/base_layers/index.html +++ b/autoapi/core/models/gemnet/layers/base_layers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/basis_utils/index.html b/autoapi/core/models/gemnet/layers/basis_utils/index.html index e776154876..9baf22c9b6 100644 --- a/autoapi/core/models/gemnet/layers/basis_utils/index.html +++ b/autoapi/core/models/gemnet/layers/basis_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/efficient/index.html b/autoapi/core/models/gemnet/layers/efficient/index.html index 223a309e6d..b4e87d6488 100644 --- a/autoapi/core/models/gemnet/layers/efficient/index.html +++ b/autoapi/core/models/gemnet/layers/efficient/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/embedding_block/index.html b/autoapi/core/models/gemnet/layers/embedding_block/index.html index ba19d79c23..033082ec2b 100644 --- a/autoapi/core/models/gemnet/layers/embedding_block/index.html +++ b/autoapi/core/models/gemnet/layers/embedding_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/index.html b/autoapi/core/models/gemnet/layers/index.html index ffa0d3281f..e898e6220d 100644 --- a/autoapi/core/models/gemnet/layers/index.html +++ b/autoapi/core/models/gemnet/layers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/interaction_block/index.html b/autoapi/core/models/gemnet/layers/interaction_block/index.html index 42ef3fb5fa..619f28efda 100644 --- a/autoapi/core/models/gemnet/layers/interaction_block/index.html +++ b/autoapi/core/models/gemnet/layers/interaction_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/radial_basis/index.html b/autoapi/core/models/gemnet/layers/radial_basis/index.html index 9d0c651426..a889a1f2a1 100644 --- a/autoapi/core/models/gemnet/layers/radial_basis/index.html +++ b/autoapi/core/models/gemnet/layers/radial_basis/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/layers/spherical_basis/index.html b/autoapi/core/models/gemnet/layers/spherical_basis/index.html index 158b8b7839..cfc2bf9cd4 100644 --- a/autoapi/core/models/gemnet/layers/spherical_basis/index.html +++ b/autoapi/core/models/gemnet/layers/spherical_basis/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet/utils/index.html b/autoapi/core/models/gemnet/utils/index.html index a6ac79a427..92eb9ed54f 100644 --- a/autoapi/core/models/gemnet/utils/index.html +++ b/autoapi/core/models/gemnet/utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/gemnet/index.html b/autoapi/core/models/gemnet_gp/gemnet/index.html index 8ce960c53a..d08102534b 100644 --- a/autoapi/core/models/gemnet_gp/gemnet/index.html +++ b/autoapi/core/models/gemnet_gp/gemnet/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/index.html b/autoapi/core/models/gemnet_gp/index.html index 9a79ca6e44..6a168f52fd 100644 --- a/autoapi/core/models/gemnet_gp/index.html +++ b/autoapi/core/models/gemnet_gp/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/initializers/index.html b/autoapi/core/models/gemnet_gp/initializers/index.html index a071c90a79..109bccbfa3 100644 --- a/autoapi/core/models/gemnet_gp/initializers/index.html +++ b/autoapi/core/models/gemnet_gp/initializers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.html b/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.html index 9180f8729a..66a3fde039 100644 --- a/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.html +++ b/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/base_layers/index.html b/autoapi/core/models/gemnet_gp/layers/base_layers/index.html index 803ce65da4..f16efb4d6f 100644 --- a/autoapi/core/models/gemnet_gp/layers/base_layers/index.html +++ b/autoapi/core/models/gemnet_gp/layers/base_layers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/basis_utils/index.html b/autoapi/core/models/gemnet_gp/layers/basis_utils/index.html index 99b8dcc31e..48d6e15802 100644 --- a/autoapi/core/models/gemnet_gp/layers/basis_utils/index.html +++ b/autoapi/core/models/gemnet_gp/layers/basis_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/efficient/index.html b/autoapi/core/models/gemnet_gp/layers/efficient/index.html index 160029bd29..97690aa84e 100644 --- a/autoapi/core/models/gemnet_gp/layers/efficient/index.html +++ b/autoapi/core/models/gemnet_gp/layers/efficient/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/embedding_block/index.html b/autoapi/core/models/gemnet_gp/layers/embedding_block/index.html index 3efc25c941..860a9fbc47 100644 --- a/autoapi/core/models/gemnet_gp/layers/embedding_block/index.html +++ b/autoapi/core/models/gemnet_gp/layers/embedding_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/index.html b/autoapi/core/models/gemnet_gp/layers/index.html index 4f925edad2..c2679532d7 100644 --- a/autoapi/core/models/gemnet_gp/layers/index.html +++ b/autoapi/core/models/gemnet_gp/layers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/interaction_block/index.html b/autoapi/core/models/gemnet_gp/layers/interaction_block/index.html index 25e1f133bd..e4833664b0 100644 --- a/autoapi/core/models/gemnet_gp/layers/interaction_block/index.html +++ b/autoapi/core/models/gemnet_gp/layers/interaction_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/radial_basis/index.html b/autoapi/core/models/gemnet_gp/layers/radial_basis/index.html index cd2d3a12f5..d6d55e459e 100644 --- a/autoapi/core/models/gemnet_gp/layers/radial_basis/index.html +++ b/autoapi/core/models/gemnet_gp/layers/radial_basis/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.html b/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.html index 92b3560206..5ad14d4199 100644 --- a/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.html +++ b/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_gp/utils/index.html b/autoapi/core/models/gemnet_gp/utils/index.html index 18f7b429b6..7197fb75d1 100644 --- a/autoapi/core/models/gemnet_gp/utils/index.html +++ b/autoapi/core/models/gemnet_gp/utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/gemnet_oc/index.html b/autoapi/core/models/gemnet_oc/gemnet_oc/index.html index b6a3eb29ba..f8c8fe4da3 100644 --- a/autoapi/core/models/gemnet_oc/gemnet_oc/index.html +++ b/autoapi/core/models/gemnet_oc/gemnet_oc/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/index.html b/autoapi/core/models/gemnet_oc/index.html index b231085d91..3789fe536c 100644 --- a/autoapi/core/models/gemnet_oc/index.html +++ b/autoapi/core/models/gemnet_oc/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/initializers/index.html b/autoapi/core/models/gemnet_oc/initializers/index.html index 0607796af3..45d1baea5a 100644 --- a/autoapi/core/models/gemnet_oc/initializers/index.html +++ b/autoapi/core/models/gemnet_oc/initializers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/interaction_indices/index.html b/autoapi/core/models/gemnet_oc/interaction_indices/index.html index 21b2ac3fa3..4866918cdc 100644 --- a/autoapi/core/models/gemnet_oc/interaction_indices/index.html +++ b/autoapi/core/models/gemnet_oc/interaction_indices/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.html b/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.html index 36c8ac9684..45f399c0c6 100644 --- a/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.html +++ b/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/base_layers/index.html b/autoapi/core/models/gemnet_oc/layers/base_layers/index.html index f6d6e2ff2e..cbbdb9c00b 100644 --- a/autoapi/core/models/gemnet_oc/layers/base_layers/index.html +++ b/autoapi/core/models/gemnet_oc/layers/base_layers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/basis_utils/index.html b/autoapi/core/models/gemnet_oc/layers/basis_utils/index.html index 92f5947b0d..faf0842bc3 100644 --- a/autoapi/core/models/gemnet_oc/layers/basis_utils/index.html +++ b/autoapi/core/models/gemnet_oc/layers/basis_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/efficient/index.html b/autoapi/core/models/gemnet_oc/layers/efficient/index.html index 088942ed8b..e5a4a0d142 100644 --- a/autoapi/core/models/gemnet_oc/layers/efficient/index.html +++ b/autoapi/core/models/gemnet_oc/layers/efficient/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/embedding_block/index.html b/autoapi/core/models/gemnet_oc/layers/embedding_block/index.html index a831719331..dddb587813 100644 --- a/autoapi/core/models/gemnet_oc/layers/embedding_block/index.html +++ b/autoapi/core/models/gemnet_oc/layers/embedding_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/force_scaler/index.html b/autoapi/core/models/gemnet_oc/layers/force_scaler/index.html index f37d976b0d..f22ddb684a 100644 --- a/autoapi/core/models/gemnet_oc/layers/force_scaler/index.html +++ b/autoapi/core/models/gemnet_oc/layers/force_scaler/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/index.html b/autoapi/core/models/gemnet_oc/layers/index.html index f919f3f120..706fff37ed 100644 --- a/autoapi/core/models/gemnet_oc/layers/index.html +++ b/autoapi/core/models/gemnet_oc/layers/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/interaction_block/index.html b/autoapi/core/models/gemnet_oc/layers/interaction_block/index.html index 8f80632cdc..6546911a2b 100644 --- a/autoapi/core/models/gemnet_oc/layers/interaction_block/index.html +++ b/autoapi/core/models/gemnet_oc/layers/interaction_block/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/radial_basis/index.html b/autoapi/core/models/gemnet_oc/layers/radial_basis/index.html index 3353a6a510..6ddca748f6 100644 --- a/autoapi/core/models/gemnet_oc/layers/radial_basis/index.html +++ b/autoapi/core/models/gemnet_oc/layers/radial_basis/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.html b/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.html index 9ab606736c..7607225897 100644 --- a/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.html +++ b/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/gemnet_oc/utils/index.html b/autoapi/core/models/gemnet_oc/utils/index.html index 808ad40d34..bfd363e7cf 100644 --- a/autoapi/core/models/gemnet_oc/utils/index.html +++ b/autoapi/core/models/gemnet_oc/utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/index.html b/autoapi/core/models/index.html index c3c2e1ca88..67b69860d2 100644 --- a/autoapi/core/models/index.html +++ b/autoapi/core/models/index.html @@ -337,7 +337,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -360,6 +359,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -670,7 +670,6 @@

    Submodulescore.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • diff --git a/autoapi/core/models/model_registry/index.html b/autoapi/core/models/model_registry/index.html index ba3613f394..b727cf485e 100644 --- a/autoapi/core/models/model_registry/index.html +++ b/autoapi/core/models/model_registry/index.html @@ -62,7 +62,7 @@ - + @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -740,12 +740,12 @@

    Module Contents

    previous

    -

    core.models.finetune_hydra

    +

    core.models.dimenet_plus_plus

    core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -360,6 +359,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -827,8 +827,7 @@

    Package Contents
    __repr__() str#
    -

    Return repr(self).

    -

    +

    diff --git a/autoapi/core/models/painn/painn/index.html b/autoapi/core/models/painn/painn/index.html index f325654eb9..0076340182 100644 --- a/autoapi/core/models/painn/painn/index.html +++ b/autoapi/core/models/painn/painn/index.html @@ -337,7 +337,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -360,6 +359,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -914,8 +914,7 @@

    Module Contents
    __repr__() str#
    -

    Return repr(self).

    -
    +
    diff --git a/autoapi/core/models/painn/utils/index.html b/autoapi/core/models/painn/utils/index.html index d94ce6216f..0e8083846f 100644 --- a/autoapi/core/models/painn/utils/index.html +++ b/autoapi/core/models/painn/utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/schnet/index.html b/autoapi/core/models/schnet/index.html index d3df0990be..61138244b8 100644 --- a/autoapi/core/models/schnet/index.html +++ b/autoapi/core/models/schnet/index.html @@ -337,7 +337,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -360,6 +359,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/scn/index.html b/autoapi/core/models/scn/index.html index 3bb9967b29..a8b6ee7800 100644 --- a/autoapi/core/models/scn/index.html +++ b/autoapi/core/models/scn/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/scn/sampling/index.html b/autoapi/core/models/scn/sampling/index.html index ee0eae193a..f04596967f 100644 --- a/autoapi/core/models/scn/sampling/index.html +++ b/autoapi/core/models/scn/sampling/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/scn/scn/index.html b/autoapi/core/models/scn/scn/index.html index 1cea40a441..c0be53627c 100644 --- a/autoapi/core/models/scn/scn/index.html +++ b/autoapi/core/models/scn/scn/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/scn/smearing/index.html b/autoapi/core/models/scn/smearing/index.html index 69b506a233..618a91ee49 100644 --- a/autoapi/core/models/scn/smearing/index.html +++ b/autoapi/core/models/scn/smearing/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/scn/spherical_harmonics/index.html b/autoapi/core/models/scn/spherical_harmonics/index.html index 7c890ac3ba..24428d4820 100644 --- a/autoapi/core/models/scn/spherical_harmonics/index.html +++ b/autoapi/core/models/scn/spherical_harmonics/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/utils/activations/index.html b/autoapi/core/models/utils/activations/index.html index 59a5a580bb..ca65d64097 100644 --- a/autoapi/core/models/utils/activations/index.html +++ b/autoapi/core/models/utils/activations/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/utils/basis/index.html b/autoapi/core/models/utils/basis/index.html index 495f9a2a35..db613fb6b1 100644 --- a/autoapi/core/models/utils/basis/index.html +++ b/autoapi/core/models/utils/basis/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/models/utils/index.html b/autoapi/core/models/utils/index.html index 5ae899829b..48660b8cf6 100644 --- a/autoapi/core/models/utils/index.html +++ b/autoapi/core/models/utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/evaluator/index.html b/autoapi/core/modules/evaluator/index.html index 6185fa65ff..c9e1e8f1d4 100644 --- a/autoapi/core/modules/evaluator/index.html +++ b/autoapi/core/modules/evaluator/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/exponential_moving_average/index.html b/autoapi/core/modules/exponential_moving_average/index.html index f5b4a0f29f..f724d2d437 100644 --- a/autoapi/core/modules/exponential_moving_average/index.html +++ b/autoapi/core/modules/exponential_moving_average/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/index.html b/autoapi/core/modules/index.html index d50c2adc2a..35d90b5ff7 100644 --- a/autoapi/core/modules/index.html +++ b/autoapi/core/modules/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/loss/index.html b/autoapi/core/modules/loss/index.html index 70248a899a..7b8021fb5f 100644 --- a/autoapi/core/modules/loss/index.html +++ b/autoapi/core/modules/loss/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/normalization/_load_utils/index.html b/autoapi/core/modules/normalization/_load_utils/index.html index 384dd7a1e9..6934ec9ac1 100644 --- a/autoapi/core/modules/normalization/_load_utils/index.html +++ b/autoapi/core/modules/normalization/_load_utils/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/normalization/element_references/index.html b/autoapi/core/modules/normalization/element_references/index.html index 0137d00e9d..2ad5608d53 100644 --- a/autoapi/core/modules/normalization/element_references/index.html +++ b/autoapi/core/modules/normalization/element_references/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/normalization/index.html b/autoapi/core/modules/normalization/index.html index 1c2d20ecbe..7700e783ec 100644 --- a/autoapi/core/modules/normalization/index.html +++ b/autoapi/core/modules/normalization/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/normalization/normalizer/index.html b/autoapi/core/modules/normalization/normalizer/index.html index b9d5802fac..be5d2fc572 100644 --- a/autoapi/core/modules/normalization/normalizer/index.html +++ b/autoapi/core/modules/normalization/normalizer/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/scaling/compat/index.html b/autoapi/core/modules/scaling/compat/index.html index 6d2d9c60c2..5e6e1a4d3a 100644 --- a/autoapi/core/modules/scaling/compat/index.html +++ b/autoapi/core/modules/scaling/compat/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • diff --git a/autoapi/core/modules/scaling/fit/index.html b/autoapi/core/modules/scaling/fit/index.html index 0449fbb174..32e68362f4 100644 --- a/autoapi/core/modules/scaling/fit/index.html +++ b/autoapi/core/modules/scaling/fit/index.html @@ -335,7 +335,6 @@
  • core.models.utils
  • core.models.base
  • core.models.dimenet_plus_plus
  • -
  • core.models.finetune_hydra
  • core.models.model_registry
  • core.models.schnet
  • @@ -358,6 +357,7 @@
  • core.scripts.hpo
  • core.scripts.download_data
  • core.scripts.download_large_files
  • +
  • core.scripts.eqv2_to_hydra_eqv2
  • core.scripts.fit_normalizers
  • core.scripts.fit_references
  • core.scripts.gif_maker_parallelized
  • @@ -625,11 +625,13 @@

    Contents