From 3ef5ffb74c0c6225622a2ad6d41bcfba02b0b08d Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Tue, 28 Jul 2026 15:52:38 +0800 Subject: [PATCH 1/9] w1 version --- docs/source/resources/robot/dexforce_w1.md | 60 +++- embodichain/data/assets/w1_assets.py | 36 +++ embodichain/lab/sim/cfg.py | 3 +- embodichain/lab/sim/robots/dexforce_w1/cfg.py | 112 +++---- .../lab/sim/robots/dexforce_w1/params.py | 26 +- .../lab/sim/robots/dexforce_w1/specs.py | 276 ++++++++++++++++ .../lab/sim/robots/dexforce_w1/types.py | 1 + .../lab/sim/robots/dexforce_w1/utils.py | 294 ++++++++---------- 8 files changed, 573 insertions(+), 235 deletions(-) create mode 100644 embodichain/lab/sim/robots/dexforce_w1/specs.py diff --git a/docs/source/resources/robot/dexforce_w1.md b/docs/source/resources/robot/dexforce_w1.md index 7160825bb..1688ec42c 100644 --- a/docs/source/resources/robot/dexforce_w1.md +++ b/docs/source/resources/robot/dexforce_w1.md @@ -17,6 +17,7 @@ Dexforce W1 is a versatile robot developed by DexForce Technology Co., Ltd., sup ## Key Features - Supports multiple arm types (industrial, anthropomorphic) +- Supports version-owned asset layouts and calibration parameters - Configurable left/right hand brand and version - Flexible URDF assembly and simulation configuration - Compatible with SimulationManager simulation environment @@ -37,11 +38,12 @@ hand_types = { DexforceW1ArmSide.RIGHT: DexforceW1HandBrand.BRAINCO_HAND, } hand_versions = { - DexforceW1ArmSide.LEFT: DexforceW1Version.V021, - DexforceW1ArmSide.RIGHT: DexforceW1Version.V021, + DexforceW1ArmSide.LEFT: DexforceW1Version.V025, + DexforceW1ArmSide.RIGHT: DexforceW1Version.V025, } cfg = build_dexforce_w1_cfg( arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, + version=DexforceW1Version.V025, hand_types=hand_types, hand_versions=hand_versions, ) @@ -56,13 +58,13 @@ This method allows fast setup using a dictionary, suitable for simple scenarios **Parameters:** - `uid`: Unique robot identifier (string). -- `version`: Robot version, e.g., `v021`. +- `version`: Robot version, e.g., `v021` or `v025`. - `arm_kind`: Arm type, e.g., `anthropomorphic` or `industrial` (string). ```python from embodichain.lab.sim.robots import DexforceW1Cfg cfg = DexforceW1Cfg.from_dict( - {"uid": "dexforce_w1", "version": "v021", "arm_kind": "anthropomorphic"} + {"uid": "dexforce_w1", "version": "v025", "arm_kind": "anthropomorphic"} ) robot = sim.add_robot(cfg=cfg) print("DexforceW1 robot added to the simulation.") @@ -100,5 +102,53 @@ Choose `build_dexforce_w1_cfg` for maximum flexibility and hardware customizatio |-------------------------|-------------------------------------------------------|------------------------------------| | `DexforceW1ArmKind` | `ANTHROPOMORPHIC`, `INDUSTRIAL` | Arm type | | `DexforceW1HandBrand` | `BRAINCO_HAND`, `DH_PGC_GRIPPER`, `DH_PGC_GRIPPER_M` | Hand brand | -| `DexforceW1Version` | `V021` | Release version | +| `DexforceW1Version` | `V021`, `V025` | Release version | | `DexforceW1ArmSide` | `LEFT`, `RIGHT` | Left/right hand identifier | + +## V025 asset layout and version extension + +V025 uses one unified Hugging Face archive: + +```text +dexforce_w1/v025/w1.zip +└── w1/ + ├── robot.urdf + ├── chassis.urdf + ├── torso.urdf + ├── head.urdf + ├── left_arm.urdf + ├── right_arm.urdf + ├── visual/ + └── collision/ +``` + +The runtime downloads this archive once. Direct FK/IK uses `robot.urdf` or the +arm URDFs, while configurable robot assembly reads all components from the same +extracted directory. The V025 head already contains the `eyes` link and joint, +so the assembly builder does not inject a duplicate eyes sensor. + +V025 currently provides anthropomorphic arm assets only. Selecting +`version="v025"` with `arm_kind="industrial"` fails with a clear configuration +error instead of silently loading V021 arms. + +Per-component version overrides are supported for controlled migrations: + +```python +cfg = DexforceW1Cfg.from_dict( + { + "uid": "dexforce_w1", + "version": "v021", + "arm_kind": "anthropomorphic", + "component_versions": { + "left_arm": "v025", + "right_arm": "v025", + }, + } +) +``` + +To add another W1 revision, register its enum value and download dataset, then +add one `W1VersionSpec` entry in +`embodichain/lab/sim/robots/dexforce_w1/specs.py`. Builders, control parts, +assembly, TCP selection, analytical parameters and FK/IK do not require +revision-specific branches. diff --git a/embodichain/data/assets/w1_assets.py b/embodichain/data/assets/w1_assets.py index d6ec94ce8..f7deba80f 100644 --- a/embodichain/data/assets/w1_assets.py +++ b/embodichain/data/assets/w1_assets.py @@ -30,6 +30,9 @@ # - DexforceW1V021: # Represents the complete humanoid robot asset, # including both industrial arms and anthropomorphic arms. +# - DexforceW1V025: +# Unified V025 archive containing the anthropomorphic full robot and +# all component URDFs used by runtime assembly. # # Component Assets: # - DexforceW1ChassisV021: Chassis component @@ -74,6 +77,39 @@ def __init__(self, data_root: str = None): super().__init__(prefix, data_descriptor, path) +class DexforceW1V025(EmbodiChainDataset): + """Dataset class for the unified Dexforce W1 V025 release archive. + + Expected Hugging Face path and archive layout:: + + dexforce_w1/v025/w1.zip + w1/robot.urdf + w1/chassis.urdf + w1/torso.urdf + w1/head.urdf + w1/left_arm.urdf + w1/right_arm.urdf + + The same archive supports both direct full-robot loading and component + assembly, so runtime code does not download duplicate component archives. + """ + + def __init__(self, data_root: str = None): + data_descriptor = o3d.data.DataDescriptor( + os.path.join( + EMBODICHAIN_DOWNLOAD_PREFIX, + w1_assets, + "v025", + "w1.zip", + ), + "a983814a05b20ba12fce02883cfd1d7e", + ) + prefix = type(self).__name__ + path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root + + super().__init__(prefix, data_descriptor, path) + + class DexforceW1V021_INDUSTRIAL_DH_PGC_GRIPPER_M(EmbodiChainDataset): """Dataset class for the industrial Dexforce W1 V021 with DH_PGC_gripper. diff --git a/embodichain/lab/sim/cfg.py b/embodichain/lab/sim/cfg.py index eb0dd7f58..36e01999a 100644 --- a/embodichain/lab/sim/cfg.py +++ b/embodichain/lab/sim/cfg.py @@ -1270,8 +1270,7 @@ class URDFCfg: """Case normalization policy applied to joint/link names during URDF assembly. Supported values per key are ``"upper"``, ``"lower"`` or ``"original"`` - (legacy alias ``"none"``). The default upper-cases joints and lower-cases - links. Set ``{"joint": "original"}`` to preserve the source URDF casing. + (legacy alias ``"none"``). The default preserves source URDF casing. """ def __init__( diff --git a/embodichain/lab/sim/robots/dexforce_w1/cfg.py b/embodichain/lab/sim/robots/dexforce_w1/cfg.py index ae0b53c5d..ae5f14e40 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/cfg.py +++ b/embodichain/lab/sim/robots/dexforce_w1/cfg.py @@ -16,7 +16,6 @@ from __future__ import annotations -import numpy as np import typing import torch @@ -27,19 +26,22 @@ DexforceW1ArmSide, DexforceW1ArmKind, DexforceW1Version, + DexforceW1Type, ) from embodichain.lab.sim.robots.dexforce_w1.utils import ( build_dexforce_w1_cfg, ) -from embodichain.lab.sim.solvers import SolverCfg +from embodichain.lab.sim.robots.dexforce_w1.specs import ( + get_w1_version_spec, + normalize_component_versions, +) from embodichain.lab.sim.cfg import ( RobotCfg, JointDrivePropertiesCfg, RigidBodyAttributesCfg, ) from embodichain.lab.sim.utility.cfg_utils import merge_robot_cfg -from embodichain.data import get_data_path -from embodichain.utils import configclass, logger +from embodichain.utils import configclass if TYPE_CHECKING: import pytorch_kinematics as pk @@ -52,6 +54,7 @@ class DexforceW1Cfg(RobotCfg): version: DexforceW1Version = DexforceW1Version.V021 arm_kind: DexforceW1ArmKind = DexforceW1ArmKind.ANTHROPOMORPHIC with_default_eef: bool = True + component_versions: dict | None = None @classmethod def from_dict( @@ -89,8 +92,11 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: DexforceW1ArmKind(arm_kind) if isinstance(arm_kind, str) else arm_kind ) self.with_default_eef = with_default_eef + self.component_versions = normalize_component_versions( + init_dict.get("component_versions") + ) - # urdf_cfg + control_parts (build_dexforce_w1_cfg no longer sets solver_cfg) + # Build the version-matched URDF assembly and control-part definitions. if self.arm_kind == DexforceW1ArmKind.INDUSTRIAL: hand_types = { DexforceW1ArmSide.LEFT: DexforceW1HandBrand.DH_PGC_GRIPPER_M, @@ -107,9 +113,12 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: } base_cfg = build_dexforce_w1_cfg( arm_kind=self.arm_kind, + version=self.version, hand_types=hand_types, hand_versions=hand_versions, include_hand=with_default_eef, + component_versions=self.component_versions, + solver_cfg={}, ) self.urdf_cfg = base_cfg.urdf_cfg self.control_parts = base_cfg.control_parts @@ -125,71 +134,51 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: self.solver_cfg = self._build_default_solver_cfg(arm_kind=self.arm_kind) def _build_default_solver_cfg(self, arm_kind: DexforceW1ArmKind): - """Build the default SRS solver config for the given arm kind. - - Note: the W1ArmKineParams below intentionally use DexforceW1Version.V021 - (matching the original behavior -- version does not flow into the solver). - """ + """Build the version-matched default SRS solver configuration.""" from embodichain.lab.sim.solvers import SRSSolverCfg from embodichain.lab.sim.robots.dexforce_w1.params import ( W1ArmKineParams, ) + if arm_kind == DexforceW1ArmKind.INDUSTRIAL: + left_arm_type = DexforceW1Type.LEFT_ARM2 + right_arm_type = DexforceW1Type.RIGHT_ARM2 + else: + left_arm_type = DexforceW1Type.LEFT_ARM1 + right_arm_type = DexforceW1Type.RIGHT_ARM1 + left_version = self.component_versions.get(left_arm_type, self.version) + right_version = self.component_versions.get(right_arm_type, self.version) + left_version_spec = get_w1_version_spec(left_version) + right_version_spec = get_w1_version_spec(right_version) + left_version_spec.validate_arm_kind(arm_kind) + right_version_spec.validate_arm_kind(arm_kind) + if arm_kind == DexforceW1ArmKind.INDUSTRIAL: w1_left_arm_params = W1ArmKineParams( arm_side=DexforceW1ArmSide.LEFT, arm_kind=DexforceW1ArmKind.INDUSTRIAL, - version=DexforceW1Version.V021, + version=left_version, ) w1_right_arm_params = W1ArmKineParams( arm_side=DexforceW1ArmSide.RIGHT, arm_kind=DexforceW1ArmKind.INDUSTRIAL, - version=DexforceW1Version.V021, - ) - left_arm_tcp = np.array( - [ - [1.0, 0.0, 0.0, 0.0], - [0.0, 1.0, 0.0, 0.0], - [0.0, 0.0, 1.0, 0.15], - [0.0, 0.0, 0.0, 1.0], - ] - ) - right_arm_tcp = np.array( - [ - [1.0, 0.0, 0.0, 0.0], - [0.0, 1.0, 0.0, 0.0], - [0.0, 0.0, 1.0, 0.15], - [0.0, 0.0, 0.0, 1.0], - ] + version=right_version, ) else: w1_left_arm_params = W1ArmKineParams( arm_side=DexforceW1ArmSide.LEFT, arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, - version=DexforceW1Version.V021, + version=left_version, ) w1_right_arm_params = W1ArmKineParams( arm_side=DexforceW1ArmSide.RIGHT, arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, - version=DexforceW1Version.V021, - ) - left_arm_tcp = np.array( - [ - [-1.0, 0.0, 0.0, 0.012], - [0.0, 0.0, 1.0, 0.0675], - [0.0, 1.0, 0.0, 0.127], - [0.0, 0.0, 0.0, 1.0], - ] - ) - right_arm_tcp = np.array( - [ - [1.0, 0.0, 0.0, 0.012], - [0.0, 0.0, -1.0, -0.0675], - [0.0, 1.0, 0.0, 0.127], - [0.0, 0.0, 0.0, 1.0], - ] + version=right_version, ) + left_arm_tcp = left_version_spec.tcp(arm_kind, DexforceW1ArmSide.LEFT) + right_arm_tcp = right_version_spec.tcp(arm_kind, DexforceW1ArmSide.RIGHT) + return { "right_arm": SRSSolverCfg( end_link_name="right_ee", @@ -281,16 +270,33 @@ def _build_default_physics_cfgs( # to_dict, to_string, save_to_file inherited from RobotCfg - def _pk_urdf_path(self) -> str: - """URDF used for FK/IK serial chains, by arm kind. + def _pk_urdf_path(self, arm_side: DexforceW1ArmSide) -> str: + """Return the selected arm component URDF for FK/IK. .. attention:: The root_link->end_link kinematics here must match the arms in the simulation (assembled) URDF. A DOF drift guard in the tests checks this. """ + from embodichain.lab.sim.robots.dexforce_w1.utils import arm_manager + if self.arm_kind == DexforceW1ArmKind.INDUSTRIAL: - return get_data_path("DexforceW1V021/DexforceW1_v02_2.urdf") - return get_data_path("DexforceW1V021/DexforceW1_v02_1.urdf") + component_type = ( + DexforceW1Type.LEFT_ARM2 + if arm_side == DexforceW1ArmSide.LEFT + else DexforceW1Type.RIGHT_ARM2 + ) + else: + component_type = ( + DexforceW1Type.LEFT_ARM1 + if arm_side == DexforceW1ArmSide.LEFT + else DexforceW1Type.RIGHT_ARM1 + ) + version = (self.component_versions or {}).get(component_type, self.version) + return arm_manager.get_urdf( + kind=self.arm_kind, + side=arm_side, + version=version, + ) def build_pk_serial_chain( self, device: torch.device = torch.device("cpu"), **kwargs @@ -299,16 +305,14 @@ def build_pk_serial_chain( create_pk_serial_chain, ) - urdf_path = self._pk_urdf_path() - left_arm_chain = create_pk_serial_chain( - urdf_path=urdf_path, + urdf_path=self._pk_urdf_path(DexforceW1ArmSide.LEFT), device=device, end_link_name="left_ee", root_link_name="left_arm_base", ) right_arm_chain = create_pk_serial_chain( - urdf_path=urdf_path, + urdf_path=self._pk_urdf_path(DexforceW1ArmSide.RIGHT), device=device, end_link_name="right_ee", root_link_name="right_arm_base", diff --git a/embodichain/lab/sim/robots/dexforce_w1/params.py b/embodichain/lab/sim/robots/dexforce_w1/params.py index 472c8a775..f3e8a852a 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/params.py +++ b/embodichain/lab/sim/robots/dexforce_w1/params.py @@ -24,6 +24,7 @@ DexforceW1ArmKind, DexforceW1Version, ) +from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec @dataclass @@ -54,18 +55,17 @@ class W1ArmKineParams: qpos_limits: np.ndarray = field(init=False) def __post_init__(self): - if self.version == DexforceW1Version.V021: - self.d_list = np.array([0.0, 0.0, 0.260, 0.0, 0.166, 0.098, 0.0]) - self.link_lengths = np.array( - [ - self.d_list[0] + self.d_list[1], - self.d_list[2] + self.d_list[3], - self.d_list[4] + self.d_list[5], - self.d_list[6], - ] - ) - else: - raise ValueError(f"W1Version {self.version} are not supported.") + spec = get_w1_version_spec(self.version) + spec.validate_arm_kind(self.arm_kind) + self.d_list = np.asarray(spec.arm_d_lists[self.arm_kind], dtype=float) + self.link_lengths = np.array( + [ + self.d_list[0] + self.d_list[1], + self.d_list[2] + self.d_list[3], + self.d_list[4] + self.d_list[5], + self.d_list[6], + ] + ) # helpers: create DH rows and clamp limits def dh_row(d, alpha, a, theta): @@ -78,7 +78,7 @@ def deg2rad_list(list_of_pairs): [ [1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], - [0.0, 0.0, 1.0, 0.1025], + [0.0, 0.0, 1.0, spec.arm_base_z[self.arm_kind]], [0.0, 0.0, 0.0, 1.0], ] ) diff --git a/embodichain/lab/sim/robots/dexforce_w1/specs.py b/embodichain/lab/sim/robots/dexforce_w1/specs.py new file mode 100644 index 000000000..885332db9 --- /dev/null +++ b/embodichain/lab/sim/robots/dexforce_w1/specs.py @@ -0,0 +1,276 @@ +# ---------------------------------------------------------------------------- +# Copyright (c) 2021-2026 DexForce Technology Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# ---------------------------------------------------------------------------- + +"""Single source of truth for released Dexforce W1 hardware revisions.""" + +from __future__ import annotations + +import os +from dataclasses import dataclass +from pathlib import Path + +import numpy as np +from scipy.spatial.transform import Rotation as R + +from .types import ( + DexforceW1ArmKind, + DexforceW1ArmSide, + DexforceW1HandBrand, + DexforceW1Type, + DexforceW1Version, +) + +__all__ = [ + "W1VersionSpec", + "get_w1_version_spec", + "normalize_component_versions", +] + + +_INDUSTRIAL_TCP = ( + (1.0, 0.0, 0.0, 0.0), + (0.0, 1.0, 0.0, 0.0), + (0.0, 0.0, 1.0, 0.15), + (0.0, 0.0, 0.0, 1.0), +) +_LEFT_ANTHROPOMORPHIC_TCP = ( + (-1.0, 0.0, 0.0, 0.012), + (0.0, 0.0, 1.0, 0.0675), + (0.0, 1.0, 0.0, 0.127), + (0.0, 0.0, 0.0, 1.0), +) +_RIGHT_ANTHROPOMORPHIC_TCP = ( + (1.0, 0.0, 0.0, 0.012), + (0.0, 0.0, -1.0, -0.0675), + (0.0, 1.0, 0.0, 0.127), + (0.0, 0.0, 0.0, 1.0), +) +_DEFAULT_TCP = { + (DexforceW1ArmKind.INDUSTRIAL, DexforceW1ArmSide.LEFT): _INDUSTRIAL_TCP, + (DexforceW1ArmKind.INDUSTRIAL, DexforceW1ArmSide.RIGHT): _INDUSTRIAL_TCP, + ( + DexforceW1ArmKind.ANTHROPOMORPHIC, + DexforceW1ArmSide.LEFT, + ): _LEFT_ANTHROPOMORPHIC_TCP, + ( + DexforceW1ArmKind.ANTHROPOMORPHIC, + DexforceW1ArmSide.RIGHT, + ): _RIGHT_ANTHROPOMORPHIC_TCP, +} + + +@dataclass(frozen=True) +class W1VersionSpec: + """Asset layout and calibrated defaults belonging to one W1 revision.""" + + version: DexforceW1Version + supported_arm_kinds: frozenset[DexforceW1ArmKind] + component_urdfs: dict[DexforceW1Type, str] + full_robot_urdfs: dict[DexforceW1ArmKind, str] + arm_d_lists: dict[DexforceW1ArmKind, tuple[float, ...]] + arm_base_z: dict[DexforceW1ArmKind, float] + solver_tcp: dict[tuple[DexforceW1ArmKind, DexforceW1ArmSide], tuple] + eyes_attach_xpos: tuple[tuple[float, ...], ...] + wrist_camera_rpy: tuple[float, float, float] + wrist_camera_xyz: tuple[float, float, float] + head_contains_eyes: bool = False + local_asset_root_env: str | None = None + + @property + def assembly_name(self) -> str: + return f"DexforceW1V{self.version.value.removeprefix('v')}" + + def validate_arm_kind(self, arm_kind: DexforceW1ArmKind) -> None: + if arm_kind not in self.supported_arm_kinds: + supported = ", ".join(kind.value for kind in self.supported_arm_kinds) + raise ValueError( + f"W1 {self.version.value} does not provide a " + f"{arm_kind.value} arm asset. Supported arm kinds: {supported}." + ) + + def component_urdf(self, component_type: DexforceW1Type) -> str: + try: + urdf_path = self.component_urdfs[component_type] + except KeyError as exc: + raise ValueError( + f"W1 {self.version.value} has no registered " + f"{component_type.value} component asset." + ) from exc + return self._resolve_local_urdf(urdf_path) + + def full_robot_urdf(self, arm_kind: DexforceW1ArmKind) -> str: + self.validate_arm_kind(arm_kind) + return self._resolve_local_urdf(self.full_robot_urdfs[arm_kind]) + + def _resolve_local_urdf(self, registered_path: str) -> str: + """Resolve a version-specific local asset override when configured.""" + if not self.local_asset_root_env: + return registered_path + local_root_value = os.getenv(self.local_asset_root_env) + if not local_root_value: + return registered_path + + local_root = Path(local_root_value).expanduser() + relative_path = registered_path.split("/w1/", maxsplit=1)[-1] + candidates = [ + local_root / relative_path, + local_root / "w1" / relative_path, + ] + for candidate in candidates: + if candidate.is_file(): + return str(candidate.resolve()) + + expected = " or ".join(str(candidate) for candidate in candidates) + raise FileNotFoundError( + f"{self.local_asset_root_env} is set to '{local_root}', but " + f"'{registered_path}' was not found. Expected {expected}." + ) + + def tcp( + self, arm_kind: DexforceW1ArmKind, arm_side: DexforceW1ArmSide + ) -> np.ndarray: + self.validate_arm_kind(arm_kind) + return np.asarray(self.solver_tcp[(arm_kind, arm_side)], dtype=float).copy() + + def hand_attach_xpos( + self, + brand: DexforceW1HandBrand, + arm_kind: DexforceW1ArmKind, + arm_side: DexforceW1ArmSide, + ) -> np.ndarray: + """Return the default transform from the arm flange to an external EEF.""" + self.validate_arm_kind(arm_kind) + is_left = arm_side == DexforceW1ArmSide.LEFT + result = np.eye(4) + if brand == DexforceW1HandBrand.BRAINCO_HAND: + rotations = { + (DexforceW1ArmKind.INDUSTRIAL, True): [90, 0, 0], + (DexforceW1ArmKind.INDUSTRIAL, False): [90, 0, 180], + (DexforceW1ArmKind.ANTHROPOMORPHIC, True): [90, 0, 180], + (DexforceW1ArmKind.ANTHROPOMORPHIC, False): [90, 0, 0], + } + result[:3, :3] = R.from_euler( + "xyz", rotations[(arm_kind, is_left)], degrees=True + ).as_matrix() + elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER: + result[2, 3] = 0.015 + result[:3, :3] = R.from_rotvec([0, 0, 90], degrees=True).as_matrix() + elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER_M: + result[:3, :3] = R.from_rotvec([0, 0, 90], degrees=True).as_matrix() + else: + raise ValueError(f"Unknown hand brand: {brand}") + return result + + def eyes_xpos(self) -> np.ndarray: + return np.asarray(self.eyes_attach_xpos, dtype=float).copy() + + def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: + attach_xpos = np.eye(4) + attach_xpos[:3, :3] = R.from_euler("xyz", self.wrist_camera_rpy).as_matrix() + attach_xpos[:3, 3] = self.wrist_camera_xyz + + frame_xpos = np.eye(4) + yaw = -90 if arm_side == DexforceW1ArmSide.LEFT else 90 + frame_xpos[:3, :3] = R.from_rotvec([0, 0, yaw], degrees=True).as_matrix() + return frame_xpos @ attach_xpos + + +_V021_COMPONENT_URDFS = { + DexforceW1Type.CHASSIS: "DexforceW1ChassisV021/chassis.urdf", + DexforceW1Type.TORSO: "DexforceW1TorsoV021/torso.urdf", + DexforceW1Type.EYES: "DexforceW1EyesV021/eyes.urdf", + DexforceW1Type.HEAD: "DexforceW1HeadV021/head.urdf", + DexforceW1Type.LEFT_ARM1: "DexforceW1LeftArm1V021/left_arm.urdf", + DexforceW1Type.RIGHT_ARM1: "DexforceW1RightArm1V021/right_arm.urdf", + DexforceW1Type.LEFT_ARM2: "DexforceW1LeftArm2V021/left_arm.urdf", + DexforceW1Type.RIGHT_ARM2: "DexforceW1RightArm2V021/right_arm.urdf", +} +_V025_COMPONENT_URDFS = { + DexforceW1Type.CHASSIS: "DexforceW1V025/w1/chassis.urdf", + DexforceW1Type.TORSO: "DexforceW1V025/w1/torso.urdf", + DexforceW1Type.HEAD: "DexforceW1V025/w1/head.urdf", + DexforceW1Type.LEFT_ARM1: "DexforceW1V025/w1/left_arm.urdf", + DexforceW1Type.RIGHT_ARM1: "DexforceW1V025/w1/right_arm.urdf", +} +_SHARED_D_LIST = (0.0, 0.0, 0.260, 0.0, 0.166, 0.098, 0.0) +_EYES_ATTACH_XPOS = ( + (-0.0, 0.25959, -0.96572, 0.091), + (0.0, -0.96572, -0.25959, -0.051), + (-1.0, -0.0, 0.0, 0.0), + (0.0, 0.0, 0.0, 1.0), +) +_WRIST_CAMERA_RPY = (2.79252648, 0.0, 1.57079633) +_WRIST_CAMERA_XYZ = (0.08, 0.0, 0.06) + +_W1_VERSION_SPECS = { + DexforceW1Version.V021: W1VersionSpec( + version=DexforceW1Version.V021, + supported_arm_kinds=frozenset(DexforceW1ArmKind), + component_urdfs=_V021_COMPONENT_URDFS, + full_robot_urdfs={ + DexforceW1ArmKind.ANTHROPOMORPHIC: ("DexforceW1V021/DexforceW1_v02_1.urdf"), + DexforceW1ArmKind.INDUSTRIAL: "DexforceW1V021/DexforceW1_v02_2.urdf", + }, + arm_d_lists={ + DexforceW1ArmKind.ANTHROPOMORPHIC: _SHARED_D_LIST, + DexforceW1ArmKind.INDUSTRIAL: _SHARED_D_LIST, + }, + arm_base_z={ + DexforceW1ArmKind.ANTHROPOMORPHIC: 0.1025, + DexforceW1ArmKind.INDUSTRIAL: 0.1025, + }, + solver_tcp=_DEFAULT_TCP, + eyes_attach_xpos=_EYES_ATTACH_XPOS, + wrist_camera_rpy=_WRIST_CAMERA_RPY, + wrist_camera_xyz=_WRIST_CAMERA_XYZ, + ), + DexforceW1Version.V025: W1VersionSpec( + version=DexforceW1Version.V025, + supported_arm_kinds=frozenset({DexforceW1ArmKind.ANTHROPOMORPHIC}), + component_urdfs=_V025_COMPONENT_URDFS, + full_robot_urdfs={ + DexforceW1ArmKind.ANTHROPOMORPHIC: "DexforceW1V025/w1/robot.urdf", + }, + arm_d_lists={ + # Verified against left_arm.urdf/right_arm.urdf in the V025 release. + DexforceW1ArmKind.ANTHROPOMORPHIC: _SHARED_D_LIST, + }, + arm_base_z={DexforceW1ArmKind.ANTHROPOMORPHIC: 0.1025}, + solver_tcp={ + key: value + for key, value in _DEFAULT_TCP.items() + if key[0] == DexforceW1ArmKind.ANTHROPOMORPHIC + }, + eyes_attach_xpos=_EYES_ATTACH_XPOS, + wrist_camera_rpy=_WRIST_CAMERA_RPY, + wrist_camera_xyz=_WRIST_CAMERA_XYZ, + head_contains_eyes=True, + local_asset_root_env="EMBODICHAIN_W1_V025_ROOT", + ), +} + + +def get_w1_version_spec(version: DexforceW1Version | str) -> W1VersionSpec: + if not isinstance(version, DexforceW1Version): + version = DexforceW1Version(version.lower()) + return _W1_VERSION_SPECS[version] + + +def normalize_component_versions( + versions: dict[DexforceW1Type | str, DexforceW1Version | str] | None, +) -> dict[DexforceW1Type, DexforceW1Version]: + normalized = {} + for component_type, version in (versions or {}).items(): + if not isinstance(component_type, DexforceW1Type): + component_type = DexforceW1Type(component_type) + if not isinstance(version, DexforceW1Version): + version = DexforceW1Version(version.lower()) + normalized[component_type] = version + return normalized diff --git a/embodichain/lab/sim/robots/dexforce_w1/types.py b/embodichain/lab/sim/robots/dexforce_w1/types.py index fa65d07e0..0c9b2eaf8 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/types.py +++ b/embodichain/lab/sim/robots/dexforce_w1/types.py @@ -29,6 +29,7 @@ class DexforceW1Version(enum.Enum): """Versioning for DexforceW1 components.""" V021 = "v021" + V025 = "v025" class DexforceW1ArmKind(enum.Enum): diff --git a/embodichain/lab/sim/robots/dexforce_w1/utils.py b/embodichain/lab/sim/robots/dexforce_w1/utils.py index 9402b5657..3d72093cc 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/utils.py +++ b/embodichain/lab/sim/robots/dexforce_w1/utils.py @@ -14,7 +14,6 @@ # limitations under the License. # ---------------------------------------------------------------------------- import numpy as np -from scipy.spatial.transform import Rotation as R from typing import List, Dict from embodichain.lab.sim.robots.dexforce_w1.types import ( @@ -26,7 +25,11 @@ ) from embodichain.data import get_data_path from embodichain.lab.sim.solvers import SolverCfg -from embodichain.lab.sim.cfg import RobotCfg, URDFCfg +from embodichain.lab.sim.cfg import URDFCfg +from embodichain.lab.sim.robots.dexforce_w1.specs import ( + get_w1_version_spec, + normalize_component_versions, +) __all__ = [ "ChassisManager", @@ -36,18 +39,16 @@ "HandManager", "EyesManager", "build_dexforce_w1_assembly_urdf_cfg", + "build_dexforce_w1_solver_cfg", "build_dexforce_w1_cfg", ] class ChassisManager: - def __init__(self): - self._urdf_rel_paths = { - DexforceW1Version.V021: "DexforceW1ChassisV021/chassis.urdf", - } - def get_urdf(self, version=DexforceW1Version.V021): - return get_data_path(self._urdf_rel_paths[version]) + return get_data_path( + get_w1_version_spec(version).component_urdf(DexforceW1Type.CHASSIS) + ) def get_config(self, version=DexforceW1Version.V021): return { @@ -60,13 +61,12 @@ def get_config(self, version=DexforceW1Version.V021): class TorsoManager: def __init__(self): - self._urdf_rel_paths = { - DexforceW1Version.V021: "DexforceW1TorsoV021/torso.urdf", - } self.joint_names = ["ANKLE", "KNEE", "BUTTOCK", "WAIST"] def get_urdf(self, version=DexforceW1Version.V021): - return get_data_path(self._urdf_rel_paths[version]) + return get_data_path( + get_w1_version_spec(version).component_urdf(DexforceW1Type.TORSO) + ) def get_config(self, version=DexforceW1Version.V021): return { @@ -79,13 +79,12 @@ def get_config(self, version=DexforceW1Version.V021): class HeadManager: def __init__(self): - self._urdf_rel_paths = { - DexforceW1Version.V021: "DexforceW1HeadV021/head.urdf", - } self.joint_names = ["NECK1", "NECK2"] def get_urdf(self, version=DexforceW1Version.V021): - return get_data_path(self._urdf_rel_paths[version]) + return get_data_path( + get_w1_version_spec(version).component_urdf(DexforceW1Type.HEAD) + ) def get_config(self, version=DexforceW1Version.V021): return { @@ -97,13 +96,10 @@ def get_config(self, version=DexforceW1Version.V021): class EyesManager: - def __init__(self): - self._urdf_rel_paths = { - DexforceW1Version.V021: "DexforceW1EyesV021/eyes.urdf", - } - def get_urdf(self, version=DexforceW1Version.V021): - return get_data_path(self._urdf_rel_paths[version]) + return get_data_path( + get_w1_version_spec(version).component_urdf(DexforceW1Type.EYES) + ) def get_config(self, version=DexforceW1Version.V021): return { @@ -115,32 +111,24 @@ def get_config(self, version=DexforceW1Version.V021): class ArmManager: - def __init__(self): - self._urdf_rel_paths = { - ( - DexforceW1ArmKind.ANTHROPOMORPHIC, - DexforceW1ArmSide.LEFT, - DexforceW1Version.V021, - ): "DexforceW1LeftArm1V021/left_arm.urdf", - ( - DexforceW1ArmKind.ANTHROPOMORPHIC, - DexforceW1ArmSide.RIGHT, - DexforceW1Version.V021, - ): "DexforceW1RightArm1V021/right_arm.urdf", - ( - DexforceW1ArmKind.INDUSTRIAL, - DexforceW1ArmSide.LEFT, - DexforceW1Version.V021, - ): "DexforceW1LeftArm2V021/left_arm.urdf", - ( - DexforceW1ArmKind.INDUSTRIAL, - DexforceW1ArmSide.RIGHT, - DexforceW1Version.V021, - ): "DexforceW1RightArm2V021/right_arm.urdf", - } - def get_urdf(self, kind, side, version=DexforceW1Version.V021): - return get_data_path(self._urdf_rel_paths[(kind, side, version)]) + spec = get_w1_version_spec(version) + spec.validate_arm_kind(kind) + return get_data_path(spec.component_urdf(self.get_component_type(kind, side))) + + @staticmethod + def get_component_type(kind, side): + if kind == DexforceW1ArmKind.ANTHROPOMORPHIC: + return ( + DexforceW1Type.LEFT_ARM1 + if side == DexforceW1ArmSide.LEFT + else DexforceW1Type.RIGHT_ARM1 + ) + return ( + DexforceW1Type.LEFT_ARM2 + if side == DexforceW1ArmSide.LEFT + else DexforceW1Type.RIGHT_ARM2 + ) def get_config(self, kind, side, version=DexforceW1Version.V021): prefix = "LEFT" if side == DexforceW1ArmSide.LEFT else "RIGHT" @@ -186,6 +174,14 @@ def __init__(self): DexforceW1Version.V021, ): "DH_PGC_140_50_M/DH_PGC_140_50_M.urdf", } + for version in DexforceW1Version: + if version == DexforceW1Version.V021: + continue + for brand in DexforceW1HandBrand: + for side in DexforceW1ArmSide: + self._urdf_rel_paths[(brand, side, version)] = self._urdf_rel_paths[ + (brand, side, DexforceW1Version.V021) + ] def get_config( self, @@ -247,38 +243,10 @@ def get_attach_xpos( self, brand: DexforceW1HandBrand, arm_kind: DexforceW1ArmKind = DexforceW1ArmKind.INDUSTRIAL, - is_left: bool = True, + arm_side: DexforceW1ArmSide = DexforceW1ArmSide.LEFT, + version: DexforceW1Version = DexforceW1Version.V021, ): - if brand == DexforceW1HandBrand.BRAINCO_HAND: - rot_params = { - (DexforceW1ArmKind.INDUSTRIAL, True): [90, 0, 0], - (DexforceW1ArmKind.INDUSTRIAL, False): [90, 0, 180], - (DexforceW1ArmKind.ANTHROPOMORPHIC, True): [90, 0, 180], - (DexforceW1ArmKind.ANTHROPOMORPHIC, False): [90, 0, 0], - } - attach_xpos = np.eye(4) - rot = R.from_euler("xyz", rot_params[(arm_kind, is_left)], degrees=True) - attach_xpos[:3, :3] = rot.as_matrix() - attach_xpos[2, 3] = 0.0 - return attach_xpos - elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER: - attach_xpos = np.array( - [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.015], [0, 0, 0, 1]] - ) - attach_xpos[:3, :3] = ( - attach_xpos[:3, :3] - @ R.from_rotvec([0, 0, 90], degrees=True).as_matrix() - ) - return attach_xpos - elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER_M: - attach_xpos = np.eye(4) - attach_xpos[:3, :3] = ( - attach_xpos[:3, :3] - @ R.from_rotvec([0, 0, 90], degrees=True).as_matrix() - ) - return attach_xpos - else: - raise ValueError(f"Unknown brand: {brand}") + return get_w1_version_spec(version).hand_attach_xpos(brand, arm_kind, arm_side) eyes_manager = EyesManager() @@ -291,11 +259,12 @@ def get_attach_xpos( def build_dexforce_w1_assembly_urdf_cfg( arm_kind: DexforceW1ArmKind, + version: DexforceW1Version = DexforceW1Version.V021, arm_sides: List[DexforceW1ArmSide] = [ DexforceW1ArmSide.LEFT, DexforceW1ArmSide.RIGHT, ], - fname: str | None = "DexforceW1V021", + fname: str | None = None, hand_types: dict[DexforceW1ArmSide, DexforceW1HandBrand] | None = None, hand_versions: dict[DexforceW1ArmSide, DexforceW1Version] | None = None, hand_attach_xposes: dict[DexforceW1ArmSide, np.ndarray] | None = None, @@ -313,7 +282,8 @@ def build_dexforce_w1_assembly_urdf_cfg( Args: arm_kind: Arm type (anthropomorphic or industrial). arm_sides: List of arm sides to include (left/right). Default both sides. - fname: Output configuration name. Default "DexforceW1V021". + version: Default W1 revision for every component. + fname: Output configuration name. Defaults to the version assembly name. hand_types: Dict specifying hand brand (DexforceW1HandBrand) for each arm side. Default None, which uses the default brand. hand_versions: Dict specifying hand version for each arm side. Default None, which uses the default version. hand_attach_xposes: Dict specifying hand attachment pose for each arm side. Default None, which uses the default attachment pose. @@ -322,14 +292,22 @@ def build_dexforce_w1_assembly_urdf_cfg( include_head: Whether to include head. Default True. include_hand: Whether to include hand. Default True. include_wrist_cameras: Whether to include wrist cameras. Default True. - component_versions: Dict specifying version for each robot component. Default all V021. + component_versions: Optional per-component overrides. Components not + listed here use ``version``. Returns: URDFCfg: Assembled URDF configuration. """ - def get_version(t, default=DexforceW1Version.V021): - return (component_versions or {}).get(t, default) + if not isinstance(version, DexforceW1Version): + version = DexforceW1Version(version) + component_versions = normalize_component_versions(component_versions) + + def get_version(component_type): + return component_versions.get(component_type, version) + + if fname is None: + fname = get_w1_version_spec(version).assembly_name components = [] if include_chassis: @@ -358,18 +336,14 @@ def get_version(t, default=DexforceW1Version.V021): sensors = [] - if include_eyes: + head_version = get_version(DexforceW1Type.HEAD) + head_spec = get_w1_version_spec(head_version) + head_contains_eyes = head_spec.head_contains_eyes + if include_head and include_eyes and not head_contains_eyes: # TODO: Support user-defined eye transforms import xml.etree.ElementTree as ET - attach_xpos = np.array( - [ - [-0.0, 0.25959, -0.96572, 0.091], - [0.0, -0.96572, -0.25959, -0.051], - [-1.0, -0.0, 0.0, 0.0], - [0.0, 0.0, 0.0, 1.0], - ] - ) + attach_xpos = head_spec.eyes_xpos() joint_xml = """ @@ -407,21 +381,9 @@ def get_version(t, default=DexforceW1Version.V021): # TODO: Support user-defined eye transforms import xml.etree.ElementTree as ET - if arm_side == DexforceW1ArmSide.LEFT: - rpy = [2.79252648, 0.0, 1.57079633] - xyz = [0.08, 0.0, 0.06] - tf_xpos = np.eye(4) - tf_xpos[:3, :3] = R.from_rotvec([0, 0, -90], degrees=True).as_matrix() - else: - rpy = [2.79252648, 0.0, 1.57079633] - xyz = [0.08, 0.0, 0.06] - tf_xpos = np.eye(4) - tf_xpos[:3, :3] = R.from_rotvec([0, 0, 90], degrees=True).as_matrix() - - attach_xpos = np.eye(4) - attach_xpos[:3, :3] = R.from_euler("xyz", rpy).as_matrix() - attach_xpos[:3, 3] = xyz - attach_xpos = tf_xpos @ attach_xpos + arm_type = arm_manager.get_component_type(arm_kind, arm_side) + camera_spec = get_w1_version_spec(get_version(arm_type)) + attach_xpos = camera_spec.wrist_camera_xpos(arm_side) joint_xml = f""" @@ -455,18 +417,7 @@ def get_version(t, default=DexforceW1Version.V021): ) for arm_side in arm_sides: - if arm_kind == DexforceW1ArmKind.ANTHROPOMORPHIC: - arm_type = ( - DexforceW1Type.LEFT_ARM1 - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM1 - ) - else: - arm_type = ( - DexforceW1Type.LEFT_ARM2 - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM2 - ) + arm_type = arm_manager.get_component_type(arm_kind, arm_side) arm_version = get_version(arm_type) arm_cfg = arm_manager.get_config(arm_kind, arm_side, arm_version) components.append( @@ -495,7 +446,10 @@ def get_version(t, default=DexforceW1Version.V021): attach_xpos = (hand_attach_xposes or {}).get( arm_side, hand_manager.get_attach_xpos( - hand_brand, arm_kind, arm_side == DexforceW1ArmSide.LEFT + hand_brand, + arm_kind, + arm_side, + get_version(arm_manager.get_component_type(arm_kind, arm_side)), ), ) components.append( @@ -505,11 +459,19 @@ def get_version(t, default=DexforceW1Version.V021): "transform": attach_xpos, } ) - return URDFCfg(components=components, sensors=sensors, fname=fname) + # W1 exposes stable uppercase joint names and lowercase link names + # independently of the casing used by each source component URDF. + return URDFCfg( + components=components, + sensors=sensors, + fname=fname, + name_case={"joint": "upper", "link": "lower"}, + ) def build_dexforce_w1_solver_cfg( arm_kind: DexforceW1ArmKind, + version: DexforceW1Version = DexforceW1Version.V021, arm_sides: List[DexforceW1ArmSide] = [ DexforceW1ArmSide.LEFT, DexforceW1ArmSide.RIGHT, @@ -522,8 +484,9 @@ def build_dexforce_w1_solver_cfg( Args: arm_kind: Arm type. + version: Default W1 revision. arm_sides: Included arm sides. Optional, default both sides. - component_versions: Component version dict. Optional, default all V021. + component_versions: Optional per-component version overrides. urdf_cfg: Optional, URDFCfg object from build_dexforce_w1_assembly_urdf_cfg. Returns: @@ -531,25 +494,15 @@ def build_dexforce_w1_solver_cfg( (e.g. ``"left_arm"``, ``"full_body"``). """ - def get_version(t, default=DexforceW1Version.V021): - return (component_versions or {}).get(t, default) + if not isinstance(version, DexforceW1Version): + version = DexforceW1Version(version) + component_versions = normalize_component_versions(component_versions) solver_cfg = {} for arm_side in arm_sides: - if arm_kind == DexforceW1ArmKind.ANTHROPOMORPHIC: - arm_type = ( - DexforceW1Type.LEFT_ARM1 - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM1 - ) - else: - arm_type = ( - DexforceW1Type.LEFT_ARM2 - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM2 - ) - arm_version = get_version(arm_type) + arm_type = arm_manager.get_component_type(arm_kind, arm_side) + arm_version = component_versions.get(arm_type, version) arm_cfg = arm_manager.get_config(arm_kind, arm_side, arm_version) # Use control_parts-aligned key (e.g. "left_arm") so init_solver # can match this entry to the corresponding control part. @@ -561,15 +514,16 @@ def get_version(t, default=DexforceW1Version.V021): "joint_names": arm_cfg["joint_names"], "end_link_name": arm_cfg["end_link_name"], "root_link_name": arm_cfg["root_link_name"], + "tcp": get_w1_version_spec(arm_version).tcp(arm_kind, arm_side), } ) - # Use urdf_cfg.fpath if provided, otherwise fallback to default path - full_body_urdf_path = ( - urdf_cfg.fpath or get_data_path("DexforceW1FullBodyV021/full_body.urdf") - if urdf_cfg is not None - else get_data_path("DexforceW1FullBodyV021/full_body.urdf") - ) + if urdf_cfg is not None and urdf_cfg.fpath: + full_body_urdf_path = urdf_cfg.fpath + else: + full_body_urdf_path = get_data_path( + get_w1_version_spec(version).full_robot_urdf(arm_kind) + ) solver_cfg[DexforceW1Type.FULL_BODY.value] = SolverCfg.from_dict( { @@ -606,6 +560,7 @@ def get_version(t, default=DexforceW1Version.V021): def build_dexforce_w1_cfg( arm_kind: DexforceW1ArmKind, + version: DexforceW1Version = DexforceW1Version.V021, arm_sides: List[DexforceW1ArmSide] = [ DexforceW1ArmSide.LEFT, DexforceW1ArmSide.RIGHT, @@ -617,6 +572,8 @@ def build_dexforce_w1_cfg( include_torso: bool = True, include_head: bool = True, include_hand: bool = True, + include_eyes: bool = True, + include_wrist_cameras: bool = True, component_versions: dict[DexforceW1Type, DexforceW1Version] | None = None, solver_cfg: dict[DexforceW1Type, SolverCfg] | None = None, ) -> "DexforceW1Cfg": @@ -625,6 +582,7 @@ def build_dexforce_w1_cfg( Args: arm_kind: Arm type (anthropomorphic or industrial). + version: Default W1 revision. arm_sides: List of arm sides to include (left/right). Default both sides. hand_types: Dict specifying hand brand (DexforceW1HandBrand) for each arm side. Default None, which uses the default brand. hand_versions: Dict specifying hand version for each arm side. Default None, which uses the default version. @@ -633,15 +591,22 @@ def build_dexforce_w1_cfg( include_torso: Whether to include torso. Optional, default True. include_head: Whether to include head. Optional, default True. include_hand: Whether to include hand. Optional, default True. - include_wrist_cameras: Whether to include wrist cameras. Optional, default True. + include_eyes: Whether to include eyes when they are not already part of + the selected head asset. + include_wrist_cameras: Whether to include wrist cameras. component_versions: Dict specifying version for each robot component. solver_cfg: Optional, pre-defined solver configuration dict. Returns: DexforceW1Cfg: Robot configuration object. """ + if not isinstance(version, DexforceW1Version): + version = DexforceW1Version(version) + component_versions = normalize_component_versions(component_versions) + urdf_cfg = build_dexforce_w1_assembly_urdf_cfg( arm_kind=arm_kind, + version=version, arm_sides=arm_sides, hand_types=hand_types, hand_versions=hand_versions, @@ -650,25 +615,16 @@ def build_dexforce_w1_cfg( include_torso=include_torso, include_head=include_head, include_hand=include_hand, + include_eyes=include_eyes, + include_wrist_cameras=include_wrist_cameras, component_versions=component_versions, ) left_arm_joints = [] right_arm_joints = [] for arm_side in arm_sides: - if arm_kind == DexforceW1ArmKind.ANTHROPOMORPHIC: - arm_type = ( - DexforceW1Type.LEFT_ARM1 - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM1 - ) - else: - arm_type = ( - DexforceW1Type.LEFT_ARM2 - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM2 - ) - arm_version = (component_versions or {}).get(arm_type, DexforceW1Version.V021) + arm_type = arm_manager.get_component_type(arm_kind, arm_side) + arm_version = component_versions.get(arm_type, version) arm_cfg = arm_manager.get_config(arm_kind, arm_side, arm_version) if arm_side == DexforceW1ArmSide.LEFT: left_arm_joints = arm_cfg["joint_names"] @@ -681,16 +637,21 @@ def build_dexforce_w1_cfg( right_hand_joints = [] if include_torso: - torso_joints = torso_manager.get_config()["joint_names"] + torso_joints = torso_manager.get_config( + component_versions.get(DexforceW1Type.TORSO, version) + )["joint_names"] if include_head: - head_joints = head_manager.get_config()["joint_names"] + head_joints = head_manager.get_config( + component_versions.get(DexforceW1Type.HEAD, version) + )["joint_names"] if include_hand: if DexforceW1ArmSide.LEFT in arm_sides: left_hand_brand = (hand_types or {}).get( DexforceW1ArmSide.LEFT, DexforceW1HandBrand.BRAINCO_HAND ) left_hand_version = (hand_versions or {}).get( - DexforceW1ArmSide.LEFT, DexforceW1Version.V021 + DexforceW1ArmSide.LEFT, + component_versions.get(DexforceW1Type.LEFT_HAND, version), ) left_hand_cfg = hand_manager.get_config( left_hand_brand, DexforceW1ArmSide.LEFT, left_hand_version @@ -701,7 +662,8 @@ def build_dexforce_w1_cfg( DexforceW1ArmSide.RIGHT, DexforceW1HandBrand.BRAINCO_HAND ) right_hand_version = (hand_versions or {}).get( - DexforceW1ArmSide.RIGHT, DexforceW1Version.V021 + DexforceW1ArmSide.RIGHT, + component_versions.get(DexforceW1Type.RIGHT_HAND, version), ) right_hand_cfg = hand_manager.get_config( right_hand_brand, DexforceW1ArmSide.RIGHT, right_hand_version @@ -733,11 +695,21 @@ def build_dexforce_w1_cfg( from embodichain.lab.sim.robots.dexforce_w1.cfg import DexforceW1Cfg cfg = DexforceW1Cfg() + cfg.version = version cfg.arm_kind = arm_kind + cfg.component_versions = component_versions cfg.urdf_cfg = urdf_cfg cfg.control_parts = control_parts if solver_cfg is not None: cfg.solver_cfg = solver_cfg + else: + cfg.solver_cfg = build_dexforce_w1_solver_cfg( + arm_kind=arm_kind, + version=version, + arm_sides=arm_sides, + component_versions=component_versions, + urdf_cfg=urdf_cfg, + ) return cfg From 15a883490499ae08f555a692cce917f557ba5988 Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Wed, 29 Jul 2026 14:37:57 +0800 Subject: [PATCH 2/9] remove industrial arm --- .../topics/robot-system/robot-system.md | 6 +- ...ew1_anthropomorphic.jpg => dexforcew1.jpg} | Bin .../_static/robots/dexforcew1_industrial.jpg | Bin 604678 -> 0 bytes .../workspace_analyzer/workspace_analyzer.md | 5 +- docs/source/guides/add_robot.rst | 2 +- .../source/overview/sim/solvers/srs_solver.md | 2 - docs/source/resources/robot/dexforce_w1.md | 27 +--- docs/source/tutorial/modular_env.rst | 3 +- embodichain/data/assets/w1_assets.py | 96 +---------- embodichain/lab/sim/robots/dexforce_w1/cfg.py | 125 +++++---------- .../lab/sim/robots/dexforce_w1/params.py | 149 +++++------------- .../lab/sim/robots/dexforce_w1/specs.py | 110 +++---------- .../lab/sim/robots/dexforce_w1/types.py | 14 +- .../lab/sim/robots/dexforce_w1/utils.py | 63 +++----- embodichain/lab/sim/utility/cfg_utils.py | 4 +- examples/sim/demo/grasp_cup_to_caffe.py | 1 + examples/sim/gizmo/gizmo_scene.py | 4 +- examples/sim/robot/dexforce_w1.py | 1 - examples/sim/scene/scene_demo.py | 1 - .../analyze_cartesian_workspace.py | 4 +- .../analyze_joint_workspace.py | 4 +- .../analyze_plane_workspace.py | 4 +- scripts/tutorials/gym/modular_env.py | 1 - tests/sim/objects/test_robot.py | 2 - tests/sim/objects/test_robot_cfg.py | 16 +- tests/sim/solvers/test_srs_solver.py | 43 ++--- 26 files changed, 177 insertions(+), 510 deletions(-) rename docs/source/_static/robots/{dexforcew1_anthropomorphic.jpg => dexforcew1.jpg} (100%) delete mode 100644 docs/source/_static/robots/dexforcew1_industrial.jpg diff --git a/agent_context/topics/robot-system/robot-system.md b/agent_context/topics/robot-system/robot-system.md index 139f64de5..8af2a8fb7 100644 --- a/agent_context/topics/robot-system/robot-system.md +++ b/agent_context/topics/robot-system/robot-system.md @@ -33,7 +33,7 @@ ObjectBaseCfg uid, init_pos, init_rot, init_local_pose │ disable_self_collision, init_qpos, body_scale, │ build_pk_chain, use_usd_properties └─ RobotCfg control_parts, urdf_cfg, solver_cfg, drive_pros (override default to "force") - ├─ DexforceW1Cfg version, arm_kind, with_default_eef + ├─ DexforceW1Cfg version, with_default_eef └─ CobotMagicCfg (dual-arm defaults) ``` @@ -46,7 +46,7 @@ Key fields on `RobotCfg`: | `solver_cfg` | `SolverCfg \| Dict[str, SolverCfg] \| None` | IK solver config; dict keys must match `control_parts` keys | | `drive_pros` | `JointDrivePropertiesCfg` | Default drive type is `"force"` (overrides Articulation's `"none"`) | | `attrs` | `RigidBodyAttributesCfg` | Rigid-body physics attributes (mass, friction, damping, ...) | -| variant fields | `enum \| str \| bool` | Optional subclass fields (e.g. `version`, `arm_kind`, `with_default_eef`) | +| variant fields | `enum \| str \| bool` | Optional subclass fields (e.g. `version`, `with_default_eef`) | | `_pk_urdf_path` | `property \| method → str` | URDF for the FK/IK serial chain (one source, so it can't drift from sim) | ## The robot config protocol @@ -134,7 +134,7 @@ Serialization (`to_dict` / `save_to_file`) is inherited — no need to implement | Robot | Config Class | Module | Structure | Notes | |---|---|---|---|---| -| DexForce W1 | `DexforceW1Cfg` | `embodichain/lab/sim/robots/dexforce_w1/` | Package (`cfg.py`, `types.py`, `params.py`, `utils.py`) | Humanoid; versions: V021; arm kinds: ANTHROPOMORPHIC, INDUSTRIAL; component types: chassis, torso, eyes, head, left/right arm/hand | +| DexForce W1 | `DexforceW1Cfg` | `embodichain/lab/sim/robots/dexforce_w1/` | Package (`cfg.py`, `types.py`, `params.py`, `utils.py`) | Humanoid; versioned chassis, torso, head, left/right arm and hand components | | CobotMagic | `CobotMagicCfg` | `embodichain/lab/sim/robots/cobotmagic.py` | Single file | Dual-arm; 6-DOF arms + 2-DOF grippers; uses OPW solver | ## Common Failure Modes diff --git a/docs/source/_static/robots/dexforcew1_anthropomorphic.jpg b/docs/source/_static/robots/dexforcew1.jpg similarity index 100% rename from docs/source/_static/robots/dexforcew1_anthropomorphic.jpg rename to docs/source/_static/robots/dexforcew1.jpg diff --git a/docs/source/_static/robots/dexforcew1_industrial.jpg b/docs/source/_static/robots/dexforcew1_industrial.jpg deleted file mode 100644 index a3c4b9bbcd60d5c4847b2aefe9c47c54169c24dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604678 zcmeFZcRbbq|2O`!_e{v185xO;#36}8wn`zJ${wMNW0aZbm_T=lcGx@9lT}Zr2~zm2Px84qyQnP}^3U4UOy-hbgE1itW3LXf?Kn~Sc>ISzxX*EooV_CJAr&CJ5p3H$ed z@degh@5HVSLEnV`i}(D$JxyY1}Eua>2g;0eH_@d%N4%Yhk~z7L!{!T+#!76N7IS z$Q9CsRG@R%`v?C9Uyf-IB)tYfcu~KfGk*+0rS~C-vG@0LJgE>wbq|6{+I~Ox+b2$D zE@pen;e(&J*47ZToC!e`S0U)g7YHIX+JOQCL*^{=;`^%jlTr870Nw>TJNSL+0V&;_aJ< zweBVjgoB5Rhc%6WiiCgwIs)ELgU5+4rbs}mW41`>?Ei@92r%v|9oO&@@zGQI(F}~- z5~t5yx*Zc+^rrn=Cy%(Ku8XT%VFx|$dGq4qO3IejdKOjzNRkVe1Mg+je}B)Hmj0py z(+iQ~?JZ3M!Jx0`Mnw0P_}rXch?m>?bcn_7iFMPVdG5rzRZnZY)1E3vy>5-<2uQ3k zRuKh^>RG<_q=JTQQ?!DYOpXq_#D|%CB9|y>htKTtF~47`^a!fXo2Nv@rxeBe=aW)0 z)mGKBTeE0U)n$-Kta;y_^$0*^F0pjrs$S;&z}B9hD?HMF%{A-Yg%c5-`uwLZN!&{( zhxM4$O0z@g77SFtMpoD1!hgfrq{ybQO8#Z^#rx{<;vsS`o!(KsK?~*TUO8oUnlXiL zDM&o@QV#!ddt;-mtat&ki|JlJWnniel;4!(wl~Oizg%5hef2#vs7~+Yx?YAxq|i-a zvm3XsK&-mY{hggTsK0bR+~||IfIW%WjQBkX(Ejy$3)xVv#zc!wMVaVesV z5k-?bAwCZf?+5eSmU+CGh<(HvwmSJ%*AT@Y@9>QZKi@)2ZCyevFg!%O%3JrwK+aSJ zk(-9=$I#~kx8GtQo3;(=9YzdvzuGKiOm$s?`hWpi9}HDib{&^rVxR%h|K2Tdt~Q%Y z8l-&tj_%?dOLg7Mch8??YwrHt-&Y)6Y{YtYIXnIr- z;t_ZE7p3Wh>ed2S<||aLQWNZ$J$u_y^`}=D$g|S*@V&Ah_J&G9YVbEP#8Y#G)|DNj zV5IMdi(3yI4a^8A570<5K8wBhF1`^CejV!et z-mWObp$%pG5Ws%10ew3ZC1*0{!Uo^`d;^V$KwmQ1X&6m8bgLYPeIXZtFaJ1vcjn0U z-Rj=4v(bMy{_n>B&G>`W?Qh2aE%p12?{BI9-`3+H)YFurDF${k_JWYJjXjRtH{>zU zCJAVE+kab`3$D)|%rRHO}7UjYMA!0q|mFyAo!z zumSEEasR(_!_iB*9cbD{3?x*K@T}Z(*q`^ue%J$z`9s0&ONgWqn1dgKk8|;*AG3;Ie2Kp?nzmU*F{&7RHk1dZo>ZV@!viEo5%lK z^7sh0V($D|F-cD@v8YhhE^f~nGUTPbU(7l6Fq68z;OvE$%9QNEUv!#`m5p!Tw!he< z-x1^XW_dy@J3H&K$i+~8qn=l4v>C+G{pyOY1-E-U1B^zmr$RV9ND~OhMZ-^5^2K*& z3Wu+~1oeJU!w8%w0m9LRAFm-pRz5`7AZB;ZpzfhR*fh?T&q`yU?eL>m;~cy;(T~D zgI^9O(4)5;Kc}c00wv6C7BpBu_#@67((3Tn`a~qntTUm#^(?SF@de(kFCnRD&YDts()RKCL}(@SpMUMsBSF*jLCWB<)MZ&p6q zrziMqj|VtXj~KX|IR1H#cO5zXUF=5dgBok~+7Bc5G)1YULTs(yDT>HQ_;^L*LgnEC z%qlmJJ#d$<;rVca+7yQ;CC`+g=_6U}WcB}y9Lk0>@0{~u7@p@_*Q)JKc_T!&jp$2i z)-@@-<$bo(Lf^<9MWxI~U4MMovy)6c#1xsG(cYnI6jrH3^E~7A<1@x`4^=7W z@{NBGu#i6Dp{y38{_eKH(Hn6kuem%@_0vbb>ZHV8j0=WTFYVgA;i3A#*d)=TPnFRX zt@g|_Q=jVU@ux}}!;$Ql#v>_s-ZcJyQWNz4GUC5d$X_YsuLia+_x;tt{)(UbLhxVl z^RMdtSM~lo?)W?B`a9?PJK+3hnEQ9!@&D_%<5qN}scqx&#rI-K0!HfGq?wJGi_6YT z$`(kcGjHD}$;Tf{ychbR>iSVV6XmPQS|K7yx|**tvR}l@=%s6%Gx;wjyJOjdMTzTP zZE@vlJ0z%w)Ug4`myShz1=rv;tm7TJP8Y*M)yA^*w4W73PHwDc`PM{QbrTh$MR(5o z+*@REyypx?@SAKW8qV6U--!;jIBV>;^a3a7sCmMG@azW!^@wNu5mOekd&7Zrd0O}% z>%}UMgbQR%c_IQ9MOZ$Je|#~*{&SG5G5@TCweSgo4^BDP9q__hYn+=ruXDpq#0eV( zva?SJp0v9}7yaTDWrL;el`r2l>weZhDc4_%DT?Pk^^;e?OBV;9dZ;__8OsAlySa*D zN$cauCnz4|vNTFmCH{Q3YI~AK;^#Nl@av6aMvjsm3D<^*$4f+QCDHF2bsC4JxLqwFv|X z!UKpo%AHIfYOQ~)aayn(v>hzIQdmV7dxByZVV!c5%Hew3rXyu~%wvfdMk2x;&5?&J zwNu%a>G+>AGwSktZ_-+&L!mD1QH+Z0%3u2=Ug>09aeuCS&F!b6IP;us+U-7l1zKZ(!?M|_sq6(iMBYXxE)fy>1O^BYEbt()rE50L&fwmqE zd9GV}wynD$*5u@CF%USIV1zl+ZzV-mews343uv1Xuvr*WVqW`G`P!5x|o7Z;QokP zth6t0(1=9g38&q20flPQKc`-0{nU|sl8bzqY}s^F;@fz0w7goE;4QlQ0(^$d!O}Tw zqNH7fvPXjQf~h#7zFmu+4yG1SQcw4H!R@Z?Vzj%?KsymHMHTYQ=nXa5eZkjR*GTet zBylA1^Tu{quk_rt>1LRXi=Ro0Lr}7D)DW^OakQ%&jXnOHu`^yX zXftS<+$^R%n%v?OvctK4C*orKDg9;(|94LoZAi?+VY{Q4PcS>MuX)gsQEmw3VqBP!~-;&$c*Z-Sl0(rwlU192Vp)*TYpYP#;e2wpf- z%(Rxp9$M`vY7gXDc8e8Ms54(to9(XIi9U8VRFZ85D$VEVqVWZ}#w46t7Mc?z?}MpP z&pq{mvz+fRvXhJ&Nk!<7sMc(TQ)WJA91FW+d*rJ~SbpbE`HreqxsahPi2=90mC>Z@7|L`0CcBZ7Lobd8*htUn9v#RiSFmd@m4dcuCK|(rkHpoatrg8Ubt0bogba)JlDc4gL;U zC7K7%b>4JO4Bs4KEoF4-n9`?8-=@o&lZ?~NBGb62`OStv)t&q#ha&*Tf#wJx3!8zL{L#I7PA;A z$eGG~m*IonyGreg>xTa3rzO0l6yfi^`PA!H%e=#G$r#wP3Hzx&Rn)oUckyLiRL4=5 zuI@Curt-?$v(dEcJ9A{@J1iEPjeSSvtj^1Kvh}^o_Yzu02*jin!wEX~~=PU@v}FTUWK(&Xmd0`DQxMh>ACp=*N3tZlqN6X49q!eI)f!tta|qkvK!6wB{ud8bK3E3&xin86yVC zluyp|jw4@YufUIsOSCgSi8a<}OG9Po(FvS+KHwW}a_dXOh*PU;ljv$G?A$}C&L*e&E6t!pZlud#bMTr(m35L6K#Z2lAGKff=&`0WG4C1NH zU&dAHvE*gcPVHOAx67HCKnRzd#@yWZdPI@v)heZ+P zHE7pYP>u z^-{mcXVKN%pn$lDIl@kW9|8ZzexKcl@Vc@7=)Q$?$uXsM)tz(By!5Q0U0-yT=*jA< ztppe)Vd^TEB$HE^-dj2|^g2Q#B+}L=j$b>G#cNSUPxjz*Mv4Gq@{yp<7d|X0=M?d; zHPctUI$E2bq**~wzv)m)Q^$W|M%sfZF;MG+6Y0xOS1%o96cL66JKG_GC(S+er^BD+ zCHh;GbyA#qdH(xwLJ9Br?4!{oPKx;Fy?1uZc22H8o(qmZB{_BFd&7>d-<%5!c4{^Z zvGREp%jLsHG}{)qMD@-rAs+g4F(zfRvB7h@Fj>ERmrOgfOpCl-PtSRtQ!<=BZ8+33 z{);L{cr(J%h}ML3hw*)xq(`CMmF@|-+RZ9aKj%oQk=RSpV^y4^B;q`s7U(Zdxzai8 z-s_R~oqrfR?s7&qG6qy<6r2fr`|_-d2AdRU-E>t+0mNLpiHIA$F|Zp~`rZRXbSLE& zMKDUrxlxs?`i&z7ddaZ92=G($jy7UzVKjt$FyGXNip*^1T2LT3mn-HIT!e7VXJ0fh znG(nY#cI}O=T5b?R>4BSLXS$1D7%;Ah!NjIpLm}qsQWu-MlXt}6b#xLq(2Z3m*(z4 zkU6!{3@;lpFO8RFBWuJ?{jWyc2?S}^KUwI+n#b+mWQpTY&TRFIt*?hmNZr| z&?i`*$`%_;l9xXVf}7$hnPkS6_O*=Mqn0f-r>H5;dljMnqj))zwn4|N!TjRewV7M6 z9qw|`D9NWb5gBjrCA(*@2VI#Mbl1i8l^#C~A9vkyeJ% zXl_bre<3-qO{tH&UDHbF0+U&QZ!*yW7zngQI}9}D3F{O>MW+B4G{82%GP{uudFj4( zyd~r^veRSo*IBv0`M3pV*)ZIRMBe>n4>%K?er1Obueub?UsAoL>SfK{(1;IV0Y)wt0JH?DWAE`6IWL5rs|&@X=(%R=r#iaM~Od4Z6T_Hn9s0 z+x*9;XtAx_`;^Lg6|-~h-BRsBNMx+Bz!fgkqz@UrL*{$7XGz8r^6;6#+A5WaYBfCc zBb(VooVL%-Hl{_(zi-KB|5rRNn{L72~%meimb5ntSt-;a<7LpbSG{iple9s6P7pl)wrY`F9q9tF}$VV2$mbI>rOIM`MwNy1+R+gwRJm7}{f?1ZeSx!m1qS-sTt2)p-vc)$hWro4Gsd@ox(O#H? zkOHnlr)<9Z-0e{kxIA=YxASRu!0iIc4Izr$Gs_H;p-{9boT0d-SQd4s?qDXV?}ZOG zlLYrN$(|Ll**InTkMZAt_ZL8t!1^xqVxSqYiQ7H4Jl0U~&9K%~JhE4U#-EGt7fXc_ zlh`*w-GLTf1srUq{io|H5850JJ_{UKvY+Sf``bB=fp7-fR3BjjFo{!*ZLlmWLpUMQ zY@nA>1_H_F*Xg3L#GT}8+ZWG6*e&1RQ+1|NJL73MZ}0qMJwo)s!Ar#4#6YS=>zYF2 zTBY-Xd{OJH*!{)_~0N2s&RhpX#@{^*4*&o!|26R7A+45SXWZSN9}z&^WMW-+{1199z|pJy#^Cl_4i zu=~Wy);J(h{o&Ax3;(fV?VpAAR}k-Zs|xV&i~U@pKA1jQpgDkIikJpT_-`FJY+~cY zdv&BH2BOqC@abNY3=qa9g>Hyx-~FOffq|AH+qtoYSoT*Tc1G_P;sRt^l$t;OxXrN~ zoU-q4suGnI3+OjYI!pVS5A}(2uy#IF^iNKK^__aN0W$9TzNfbPJeYWg{sr52FYWMM1&Yf~m?7x9!6lB%vLIFr%6(RO zkX;o;C#}l~hyBZGNppL}8LSy*%(fE_EsDS{3R?TWvGGs%d4TZC1X^5@QlDfiIHxq` zCbm_;<9GEM^HH*x6#?`5QiE($ExyH~-9G~w@n#PogjHKEpkU5degOm!FIQ%t0&m1` z95nzr4A6)?=+i4I?J!APpFZOrl&`amo^=HgrLYU->(M_wx?++(x!r&$bOn_x6Fnve zs_vr^M5o}sCrtKh9eX0lyA>mxmN{$s@vh{rPWcAZt~bFC$|>Q``QuY#n!mg z{D{tSwW-!DkeN&MHMDo%lzft`eK3bK5!e)h?Wd5^ek=XY6snJ!m=xt|G`|04OQCf> zl~Hc6vYGLul&mbJ)$pO31DihT+w=u!dkANZ9K>?edb7Jv8F$?Fc@R;0JA8S+cS@;G z&VLXCN%(+v{55n+xvp<;iP^KER!7fo&WASYAF)a7WsQM&lpD9trxe~BM8g089`h;0KuC)fOVUqpJY&4+PjjU)mM<)VMNHJG z4)nJ5_-O%j0oCmD&xvUH&CC-ZG3w(>G!R=&ScDU~u7mhCNjC+yxc*(?P0(7kRCoKn ziCr_0e?CgixVy>jUO&w|FTzQa#gHR$<|Ib4}2E<}&~X;3e@L7~K! zne)E(_sz~H8pu?@0%yj*J{{&k8pR)4$zm@Pu%6W0!^_o8)Cg>NRZs7LR-n`;g=HjB zvDBKOHZHRUezpEC6a1t0#RKS)lLzDf;(l0SKL@0?w|k$Y`X`08P#?Xlfzg{Er-0k8 zb&M*oN3DD@Fj1sdhf)U7bUW%-2$h0E-(bZ&v<|ulV8o%bDu*l0=!%s# zT+^P6jI3NX`MRX%rJPaCYis518+Q)16ve#?2LRK&;BV^jKPoBp`f1FkLhMQ0@#3dT zRb$4g%$37WdM!(_i8Q<(`+e8zfX>M7tqD4KBwE16ad(8R=V=e%G5%B&Ek_Rk4i5l0 zBz)~&#%ago2^I=33xvQwT~(lEj2iClnHN3!{mjE@(_^6wWx`GD$ zzCP%g#i>b~w+YBc;|W>zO)7UM^vUW!ncfWmB^oCxi)jrEC?FrVGtm{h=I2WUTp-~x zq1}0fna9r#uAK^OtXS6&$3TsHun1Tgze@;`NEj6jZVEJkDjlXKDN9! z6N47+yHNai7d62@(GyB8Y%ftdu{&RX2%D;)3ji|Qqb821rTr}51LW1)h&_<-70XQg zXj55pAa2pI+PPQE^(3Z0FFY}ts5oir=uv@-Loc*&kZ1e?gaL}{prnX^U%S|=+Tm2I zpq>n4p!VPFk^RY7!LWXW5(97Ef=0|*zSDExnblmLx_ zS^mI4fCG&rf|d}2XHOG{2e@~2hWuAbA`h)Z z^P4bSf$a_t^qz&S2LZsC4wzw3^$kja{pA$5oIoBPL!Lt(>mcUwvm@pVg>#hcDg@() z;~LvLwWi*|^9_7mvU{iM&3S0P&Tm;2j%wd7@BuEQn}V zz%n#s%U&3JRi%K2&i-Uas!iM1MA$6!x^}A41VrYitLUUCpi>fOujIg^KeZs1c7CsYR>B((B~cA&dhm^fmkn|;Qxh{!SAIS%ru0|**0Gjva5 z8}P894t@aTpdQ5W=<#QljvwNO5& z;Gd1g9c-nP@U^{nwN5m4pASkf zu+w=I<@TM#2h$iRH6ZPQ7O@@0qW5_Z^Z**bj#U)$ek%$|6MKcz5`_CcS30yD-=E82H)TKnvC9ECiWLItF zUx;jRX+G`sE~nF4)MudX#wjF8aYDbJqiIe2hVk1&a6uK;4)*0&7ew@Xl=!aD*=;xNry}>HN1SLe<9Z#jY|Z<>Xn# z<&{v*>T^_wDu)_?Rn?aBDOikK=4if0fJb2a#Pg3Pm`HE&!|NWh2HEG`mprfqF+Ylx zNys89?;XQga6AB0LG@@vai#Q}!Ao)M*KHldDwMDaG(PM-2O=GiSM}1;d4b|KwC+E0 zD(%F0-e)aQV{?g_As?xfw}&blP@jJ@pI`Db`<^B!^sk}^L|(uMrCi436H7VmgEa`F zV$poxV*C4)><{G(w(|a4*s6g_2}E+f-zx7b#3c24s{=a*df@wLE0-2mu~jYfYYtK5 zsjkxIX#H5+Q^=8ZMEao;VY62vg!eN07t;qS#z7skaiT1ZF74bo)*SJZ-HAxY?5elK z;V`lG!IQp+xF3)oL74*5@Gt!YSh%O74*u3*r$MV%)cM2+TMtuM;k{=xp)I9ALPDgl z``Y|&ewT6cA^Q&J^`3FJK+)C33$tSZzsm>`LksN;YN1eHRU-ABo!xrXieQq0$$=j^ z8?eiV1Sd5yY_E9&Lpl9UQg8)yQ@kTel~NFaS{m5TTk1E+*nndR)QXUw+wnfHG{R4x z^y8rdTjqQoYEnPpp|NWRw^|LP16D2uQn{Wh1`5GI_RIhPP+_qzsB^N2p9;?EfSRfz zN+KSEu=wzkd&L+Wqxm5~sf(+dHeVy4iL7xPs0uw6dK9On*!IVp&BIxUXct9AbDO*& zqKic1V9or3z?Smjy`Jz2G|69y?J21{R{;^)@Z7RfARje(fCK-SnwlZlLq~_J=esEI z(N)@%SXb3{qUT^meg;Z8x(PYA?l+QX1pJEC9wUIaF;JmZ%AUIoQ+8GM+J(wQX^fbV zh{5Iz&gU5F^rxCSkJ~Ry)G$nG9TwHKwv`79Z_vvRZf5rYcLaOg_|lJZyXm>%dW3-;_|KuN|`_>#!xYiQV+|6VP@LxuZAf9v3(rovy{3B1cSi0vu+ z<@UJ^0_FUc5lFiLg$V(d8~W+2nTH6^sy0ih^=rfYPjj z+0R3Iq?+Phz@70)1$24z-5aVDJmqR^|JuXEvfu`Q&R?{jJ zvIJ36JiTYk+g}{nlK1%;JKLd5(*lhg;JN)V7T6!}JzfPi4qK;mX`cf@!%uGjB9vYQ1F?1HAzP8>z_M8)vyD-$KPT zBE%f?oe09S3x|+PG(dEqJ&Eo~bN?YzV0!{=i+yX3J(2V_R0iirl;KV-+LU$dWMUek zW~3FzODHg9#BCLIA$UA^rHc~d7D?wSFZWMGUj5Ar7iy{-6>SLGf!uWcI+ zal&|z>tGl$gLQ^(Kj5c(fy0AH2dYhMCg{|%*pAqOR+(W>JjWYLBaB0t)+ToI+z}5! z-5A|R@0xHvE^-!d*o|u6We%qq&N_s7jZLtWp(7udmM#~Jm0i{shrI68XQH@(r}FAR zhN&awff_0AO~aljR+Z}YEYtvpwmk~2bM<5NQ%%~a09DCjED)o>t^Pl2Emn2DjY!wn z;iqVATxGj~y%2#;@q87JcBZoH1=PC*f&UscLrj`-1wR>59RrCFIvJVwf5_h44 z5R;E;TNx;)w!jS+u)>{O5nzIQ;Op1?dN0=56KQj4(`d)*A`Dn5=RB%IZsg?|Jv-QW zK=nE}R00zpA{19!kMwD5N#LyBP}u?K6X-ehkU1Rh?KHkXQ*$#T^(@K4DMRmOuFP{X zL5KFv6Oj&ZNNe&Skm12lYH!L6$_#dTpaob}{vM!CVxG3B!9c9sE7zT(YB?&z$~hl* zysw{{r@A0^o2%zrOfctX0%_<62U5g<_FCuRx!NfD5g6cOwSzkeHT4Uwj z(}jD-BW7Xyau49hTlwU@<3bc43H(IrpW^V@xO$!28Agr~xp&|KcJ%Cf?&5EW4m%sx ziQH3&%CJuT4fU!E9l^BXMdv=p0ATdVqH{t~d}kM4U2aLood*3(+}^>OomB@@*F#PY zKYS7bl(_?>&Yq2ZM`^oDb+=2ci6h@R=7vcB?n1`Km-9GI`XuT-kyK%koN%zYWPvN_2XYDhC z-G~xjOT-*iGvjXO7gf{K9z4`z;>HjCcl&#peo8X9Ge|;F<4usgYsDW~hdtOK_os^X zk5mX7mK(y%0uap!-@M4%V%PcSn9w%wDj0ZC2(1L)55 zY!!ZO^*B;(9g6}^0fO>-;ZpqBU^b+&clPF&sE)HY zJICrK$tKt;;*D4ZLXZFa52DP;?FJ>;p7V)C-7fCaukX(us{cT0!qyGYPp~@4{t*|T zlN=g8fuUW4|JOOk$9SEIZkUsJ?SM?@1d~g!dxl!rX$?^KmLk7^=_M(+e~pG3KHGknhObwLkd=iMp2yeMskRKv z_BnC~LrapaKZ!hrc5ATEU_PgFOe-lW0GwX7)WyRjq+=IxkG7;MSlM= zqXr`FzaWEsE@`(6RCFr&*8~HDc|XCV`Y@#jF$!eqJ#BG$eeeD3T}gO*RM72@^1z;m z!)Hpo#Ia_}u=wVJ4Jkf9tKYlrr==B)2YUhk-nk`*K`dSb*rWmrM=l-}aHs4)-4)(u>%AC;lBP!T~Qf}oyugngr-U1D95d-xCG7Wmnf%6iL6ID62inUfmWn2v(MVcEOe7Fn@ zHLi`9G9?o7<#zS{iNf~J!~MI$KVwJG0y#kN|9K_^dm_$`+;Oxd@Wt-KjZR^qdq_B* zAPHqst%?FNinv<)$k3OAwG~W#|80Hy+62&?evb}b{WCfMXHACg%S;&g4dE`>m%B}| zysPExjv5YURqUYeQ(-#XW9$&=fa8W^pw${@4M26lFkWG6QNn1iju1No@DbvU0CS+W zJki~+Km^cLum-~l&HVmsOGz8J2#H(P(_xO(rQ1nH)+Ms#{&_#ud;0fUkm+v~IsAH&$|)waw-460i#~;N8BSnAQoPXn zs*kFuU(G?RM*cgxovq&|!%1FLKA?i^Y1kry)eHPS4F7PFn)|WPZ|&v=ZoRV%bZIXi zD~9NPyP}hOGxJquw2p}7n@1Bu5|XS6gdO^6z1Pl{asSA7e{ZIOfkc(ICG(0Tt=1jd z&N@kJO$p@09w{nHTsd3$?&i^j({tGsL@@DhuUtZOM3j13Do1|2T+Ze}QZ{tclzowv z_Ue9A=~;4Oy_Fk@EKJZTW zQ*cthwz0?%&Ur^GFE8)*$3jT$(!jBXMz`_mP=dVIkDpo63_$rD%+gYlzIPwFmqgG! z7NTpYwSg%}*v{XTT-8mknP141Wb!mgqB$2TDJ$Qy7^)WG&s)N3QZu((4<~&aieDO0 ze!bUayC&9;(f?JMlj^wXz~Wicu!gI4cTX2Hm2)J{WtJ)Hzj?I@afsh%PPQ8CXEsjz zq+cu-X6SmG{Ya+V{kHNu%8wP0S0fU$kJor6a0Ta6+G&(jcXD@S1_|o6vlKuDpUx%r zt8O+hMx=(A<2|xxZCGnxD9QN>l{^BhsJs5|+RPxnF5QLTFCpNhZ5avY=e5o2by{uj z@uIrvtt)7^w-M?3tV;Qy46FEsr{AHuqnJJWw67}m2UUd2PBpVoz$awtC>3sX{-`W2S`B;I5D?O=oLFPKx*Q-t z;_%R+S^esVPOpfw;l-Ww_c=089y1nv>q>P8imbC(KF%Lir|qCb*x{`;WggZ{F}uN1 zZkY9TE#P>$)S0I~#3W0~GugJX`Ap|lgkfPLvy^RKlF9DVwAQp2>~bL1j(bzL z^C|B{yOsx>K%V{ru`T%Y_RZZW47+smrnV~1#WecVAzZZp8goUnxLSYSq>Nkmet3Rz zeKEJ%4fijP8>f< zeU=!XH7QET(`Ck7z>CIqmC8XyXFPX_qdT8m$+peeD^Y$lUHE(jo`)%OrexRD*JB~% z4sgy=Cb4fn#(EWx;K{B22&Z2%9}x29ARq20D#!WAobNRGJa~dr=6l-^*L-S}n$eNX zJRked!zgPqwwVpvW7xqt~nyZ%J7jH zvc@=&70>?FR_)P24Z?vl$#;u$I+K$=TQ|vC6;vtKpco9L|tZGH8Ku=|c z@Q^AV5)_VWCJU%VZI`M9@ELYVb0Ism#R=%L81QN7&JtToc4bw))-DxnNdQL+wsPv@ zR(dx&i4(@w@XoDw&i$MmWH`b|N5t9{q7l`5u<(tj2YSBVu95 z)Knb&`zPr+lDz^bpA^^x9M4M6iV2`~z~Q`rQc#r_V!zC!9A_27k@3F9if}&Pol{x4 zssEHhFKvFgy6$lvo}lLBX&ZWTWW(0=0cshNw{V^a@IRtI7q5tFbr%uEzep@2o_(Ww zSkqMhg^*p8+MUAXvN9g(HH)P#N3vdiJQ`aW-WWIcewt?`>&v0K6&W%i$NU9cvnwK! zaPk5T&z(TRd5S8!A@)@I4Z@J6{+Z&o$>%pyY0l-76$Rl3I#OSoSTFE#6Zw8=rzWUh zRwZeg-eJ_fC~i7lTQ2Kj`@a315Y;)H&Hf%o07RQk;wxn$J#{(Uc z&HA|y8#?M-h>X+x9bWXAtDB^Jp7}&vNSmrag@9dC!V$XK=i@E9{J=?7a+{Xc3o<$$^lRBYBc!2SCY+0Sqxc%l6!%+7 zPF^I9%Xz6z{Rh-E1=}zLDX@BA z`>G7AO`*QD}KLsaa@15>*wRU!O#@EjFvx2e; zRjtT);(7QCY3=N@+j(V3HO+NZkLj!P@+8JWu}AEW<#~ujzD&B>lJY^QI9p97M%_ax z5&uOEPAUXW??7b4Tmh^XDKnCg9vsF=J-Gu)syNzZOg(KJpw62)RkhvvE)3UnUc1j)QyP$7EdCF5qlz zyKzrEo{4BxDjb;|d?r9s8wXDi-VG5nEz8{&)qWxP=`=oBIh8GYJMn#JIDs-na&4Se z7YE|M=+4^Zh&#MiA=%eJ%u!H4U4M_}xqy^cyt%Mhb_MKul(KFHe^Ii6eBfuZQdK(R z6$0Qp0-u@J<8{9V(tMD)BRTxw-OKuZQkEW~Rv%D

QJQSa^T9w>6@RG1rcS+z0C?Ztxjb81bTJboH=5bHdgjVamw6LF@19zI7^wr!lx zh7a>rO->Jjh8)h(yKQ&+i+r%5vRcJ65p@P~J1Q*>i80X|flpe|RVBMaVFnB$a2Jhm z<^_w_BcBCzXBaokL?tXEeBOpRS6JXE(&tz3DMzsYSJZ~ z8p1&_P@6b2^CSH{ToSig2BLaws+EM7B8rPPdOL@IMOE*_Vm`NcOkmZMxQSl3AZzsp z&op7wUU40n74|~&ebG1Idi^Kyz2 z-nmL;nO?BrVD?i=_Uosjm!}aB#EZpkW} zhBYgE2{3ZAy;_XOOuCe!BCq4rz{4yV+<-#xg()5p_b~L4AkuU!?c}c)JHuE&9(6T* zA@B3^LDk&U=+}wypQB2mludPI>$DZk4ZZwY9F4isk)o;YEL9Z>{kgTxN=0krreW9W z%ZjAE2CX?@r&`|=oH!Nwwe_JoMPOnaji9ZVi&9qA*z|byDf4_~%V)McoPs(~*1Z4& z3b;MwqY+q7J$OAh-h@#Ec5YsVUVe%2MQw@#Yf5wU!bxQsZVepU#3%!)%N1+#)G|~q z6tx|OPQGc7!Mji^HHF(&LWKUyxQ<&5Z1eK; z8|OM-``d1jt#pX_#qwUfx@M|~e>x#}{Q1w8N}7|@IQV2mg7b3ytKU5R8hV;=YVfY- z8sK!I@U>sJxy3BIPKV zpm}0NMzKzBSLI%`c_GaGB_QvAr%?#rYm`HW+sP*7r(&S@iOE? zG__^>Y23g0KF(tSJ!_@{eCh6@fO=|2T&rfgpXb8ZwaKJ7UO0GcDYJ6^XsF0x+rfKI z%w^Z49@lWwu7+Ro9zOvtaRGz9ndO9yX$=|S)-42oS<9(b+3XVkg(cr)F~h68_dmY` z(<&;e92x^P-TO$F@?$XyaML^a)46lmH}u5w;ZDk{Yzv5J=9A=t`Kq?8N(IY~K6&#Y zyQK3`FMhoC4P(2eNZZc%C_8_vq`#WKd}3a+tMoC#Xhh|<=ItqkE$Nc}G@&*RgyWx-z!B;o~>*t*uG<&cP{`aJRjN!dU41y6^{2C)%EVnCG%S?jB>M zhPWI3WSqoBTb1HTk5RC-4reaTjcYM<|A>%xuM7bjSj31CZ7ANQ3)?_(hK_n(cfxXl&D`l#_0e(O9#DjOQik>Z&!V z2SeE$6-Y@{s9YBJJr6{-MOGmtV%STZ@H}BAA-~#q*QamQ0-_~Bf0m7sx1_xbnd@yL z`#;Prm9`QD30H04%lwq{QBC#D_$=!^qWswa*UhDFX1>chtnSjLf*>4DIjzzD!W5~h zF)P#OV-OZbLg4RCZr3$6xg5$fPLN|H3rSQM8u~e=vNY>5(wzd$kspbaeb)1_DkJED z9qTH-;-?%x0WDKk!cT5ot*T>ocl@d2ofu2?S)yFx@iX?vpLVy&FK8azra9C9UR8jzPr=?tsVJarg4jMJ*!t5a+it(~ z^q*|Qnongme|}NE8G4PDAr^kI${MSk+;krhrLWD+jlP$fe-qNeWHP0y#ITuj2xH`Lkv*(%?`KcG*e7D?3^To!5 zY368`i3=%xz;iKDxWiBVrZa#~%`zLhiBTelKbo#Dy&H_4TCkoFtPn3azRr=)L`K^? zN?o~MOM@f%g;vtcSF^TtLzG%0!HU5}m8Za#?ZKp0 z^CgQD{QN9krt2MYHEfeh0sK7iygA!Ml-pt~Pd{>yofNeVa0yVQYErUSHwt_mDaxoV z_^yd5v8eQQ?$fQgD{{KJz=VoJbYKA#y)5I8&A{3iL z?eJ2pRddQ(IlOXgPL5Z@9#d}U%ub};CXrO z^4Rlnzum64+r4D#t6Qr)g-`CH5KukDy@Su4nmTfljWIJNTTZMNBQb)?o70NX zM|!5oLAm=qOjD#x=JbEvimz zc%Jsz?B{w^QYSnV3FS1bSb0xFXt5Aol%&QuLjoe7As5uEc1PClou}Dl=TfqC=)P@> zTa!l@E<1aphQ#+h4gnTd=lfn0ouko3wc2=Rg2r%iFl%X3dd(hIDN(nF^@4U#)%VLM zEjFa?KcZXpiXt|aisj^jq{S=|y?hv^RW79fT!73uJ_v7~rq%&Bq|z}2! z#N(b+@LX~}^GKdQn1r5KJ6^v+4nh$+O2`agSm#Nj6a{Y2{-`xWwtX^FpF| zcAkV59Zar|WBQ#26N97}2fNvlckjHKVJnZBnPKGzMw1u8*--){{#Ufe>A}LR%L!UB zx`7c*OEOztgSO$bSB$lxW^=Z579@MpS!oidN2hBtcN@*vaL!(9Z-~x#VsI`) z!0~^GWVq>&v`Se#f|--pG3gnRy(P0x?x8vR>h9;R5!D>y+Mm(S|5#0Y&NC-Ne`~Z@ zMQFMZ6_XO)w+|U_<&;?KME&!-Txk{De(T<+Gl7;?{8^#wB7@($od9fKU6i!aPHq}o zyza8iOf2rx*u7cPAaLZ+ohRn9L&TisWk+F>iE#7mWC)-9)3=JOt+$FzHi--v9oo38 zRVzi|k~~ee5*;!SZZThB=euqGanvoo3ar+Oo#`JLy`0sq8>^&m9h?1}0|4*eFvV}S zy`z_#?V2uMAN`n{7-bv0c=yM`x1?D4ZQ>GOIQN!d`UCCQplw#k?|D->`YTXT`-RbU z)@1tn=w+?vK_E)hn}|4Ra`Q?51Lq^V`{tM(#~oS$P`5*5YcB326ybcF=)3z87K#AX z0ZJfDM_tX+OA11+A73-|$NP~h+tqQ3n4wrmUHK}?G8rJrydGH=I(k#*M1F_x&b+$D z;lugXs=qSWb ztm5*c`S`iNZ=_H9ZPsD~-sDDF8rc>F1xvW(wd*PjDn9h=5Dj z+tuT?`>Q>FM9td7M~W;hY(N)io6~~bxDR>7wt47v^uM$;@XQoyVyE#cQDNTE-?cP` z;WF_gz$-$e*83X!`{$O2TWtI5IpV~0$sn{z_IN})@A%S-03POwO(vXHVk3a-o)06N zOEsv!K68|-kF7rz0tTr>*T+_W zZ)Y6(2YqFqvi#?rJ2LKnZ=n+*D>hH&9)7;|%Y-N|Nxy3(u5v1m=@(!Kil{X9U)qg6 zGA3J?aenGeV6vTjDGfiH<+1Rkv|}dPaAkpZ`0Agjq^}y&f&#+9R)cTAk9W)d`5mNy zO}~+-v|gBRs@TK2bMtGWQz2`pT>Hz1_4TbuV><_IKZXUAC5B*H{|QdSy%_x3SCP+C zKn8>V$gP|&y}y&v0yig2Y_in`=bkL(C!$l8sM2Ez5M(d@SRukLN&L?(HOt8NIXO8E z3MSPLvYdZZA-Ya!)2q4&Ajv!0B)|y1|2++0wt$t5&XsYGynz2XDfK^K*D;Z;RQ1eb zB|wy+jcU7b=26zre_qU3t);0aIKwcNPWJDb=$CqYp{^Hn4A=}uSq|OWQc`WC^mm;M zMmH>-c$)Uj?Q7F=ci@o&w^1F}hud#7Kl!^S{Z+)tEvk>mSZ9f>Yx-#?w2wzd?e^cP zvwD(=s?||7xjS{X{Khw#=x0JC-|t|hoBK+*A@v14(GDEV(|0V;wzFDEbDX6AlvhS2 z<&(RF3tf2jWTT&{OhAKm4snkyYAKb;Q}k95$#jDgS}}4(dtUb0_0gUXB*JRWd|50Z zQT%Lg!F=n!Zi&r(ixoy?j(kB|F3!Cj7in^prpr^?_hI+hJirm#kPJxJY*~Rv4`YP| z$tY8aO!chplG8HMa;hDEvX6Fj#sf7SWN2Mn`-X=Xgje{0PS4#!l54#GtLNJ_Bd~(W zV*$q=)Ls*Ha)}Rq4*Z_f!B=pI9a-|z4FCRZjjQ*kF7#V6_R(x~L6qeNI{E77b7UMA z6}HQtzPcU%5?0za$PQIC%dA;XR`CUOQG-W*M{F)s;eVHZh-^YFM7ZiYGO&Ef zqfFtml&QVH%dp9o%384V%^5!GmHty&ImOW7;ZY+=rLc-9rG=tV(lci3kY#$`o%J>5 znmronU)oFf@bVp+v!d~PMKhvZCBcy?NizhoJZ!$6n-#y^U?+}gRsH^&`(mCtbSZeoxg zW(J!{#Wrm=Np$4XwtN`b7lk!Ge||e3gyu@g1=-2Di5d6_>trSA3j2a4+m4;|pNXlv zVPlYUoKEh&k+|BmJ+%r^D-h(0#L*`$1~*oN%lOC)};|eM=sZ*9fIT+Qo)0cH?TWVnWq!Kfj%8eyDumQ|J1(1ex$ie2ecOZ}5aT z7u`@7ZWjDBxdl!RA{~CUM-J&`vJSD{Thj&;>I!Sc{s-8Q3}IdvLfoDoMo^Pl=nv>n zC?JPSm7b{s`TzR&*N;T%$m)$Yve!oUr^{MEMG6zvkL(fI05e}upoFjv8enzBFpS)kiqN87lGHz zBl8P{b6}dA_7&vKL6jb#c&7}@JK&Fr%qqd?rxott$M5Z9f4!$&888J7*{dhyQK+~& zU7VHOp~1VYi1rPOj<(m{dU!x>NbK=)gO64cR9nF3Lt7zg<3m3Jg)R(9CvldiIJWpo zLRr{~HYK<^1BHzWvYV>#9Ol|`K_sVIOh=+9&RciX+!4bOYkEAnQ{1$3$?=(vKC;~h zwvW}j>xk>)Tdcf`PC!g{>3H9+Owel$x3clv#GJ8`S0-OKyGBed{%Lf^XzPW>@Q849 z_JD;E{(4Xq;>2Yf2VH4d{nTITkiRq}sDNV)XC;pAtn&`HD>+%Q@06*GE8|rgC->fGq$RCC>KQd-9YyjJw5<>e0aa_ivMsjvL=}C&2A9wa@smRD;$bXYPzLu(l=jAGglY88shRJGD8D=->scFYs zK6|vaR)7E8XMgPr^EGV{T2mw0Y2S^3349<)n%wuXy z^oG_f%pq?+`id35BmiH%cHx^|X&r(Y~007A$4mGK@u zW5Q)Y{c&CrC*&Vafcv?M0wf%bP{{I`;>tdK=z1(nD?KvHe`WN6hChlm{FHt4-pE#R zINQqwg~}&k$T0txj<>Gt=b)-i*`Y4Pl=&h(iX(ruB4pdsEXHaQndCmX0mFg}x0=M=%giM3i5X05 z^VxvWpP}z{jM=R%8qlagV$qKlSZ)KDfjl@mKXD(+NOOD^fBw3|57F_M4hZp8vyA@4 zy80JZg)cKTkIz_tZ7s3hSial%1?HJnjdxxv*>#VVz7RsVjw94yCHkZ$QSA7>S5ihC!3e^V%O!3nLc|R92(rZ zlK_(x_8waT6Z7iTnZalGe%iTTEEBo9(2|MkO_5@r-THPN;242)d+|9v zOMpk}p{9eE&`HSsL!9}QDc*rVkKW@eASmbK_+(&lphVD9D~IcmATeW(oAbNb|fb_1XE+b#{03}Kk6)7G!U^2u`YI`kWK5&bk}qCDb+bP8NOvyc?q4<87!A?)K~Q8iPhFBYQ}p zt_q2v-M^{TqsH1d^XK3q(pJW{K`va?*Qdf7@veFmg%V$x*^VA-Rdl}fce2YcpKDz~ zC<7K7>S`X_J0!<_?uoqW!(Ca3`1ALwk)4cvi*H?64M%5M>H3@FsoLIWyd75aV~4&| z*-21jcAdR|I;X-J6S)`{{d%;}iHV`HvWv-e7k-wF{ZRUSGT>?9Qx67&3oD1V&f1av z-T0xGnv>JN`Dj%>(dtD$>KiIkubI$G3zFHu!z9rrWrIPpGBZ{u=8#g>Eq?>hNmAzi zyC)D=zbuk?sklyvh!#N1WqIE?q*W=Hrw$XqFGuArJ+^1AZ~X2MNM#v)$>rjtg=3tP zxu!vpH_VdkL=3@t|7DpOh7pFqzagb0*1@ql_TZQnz+U!dO(e$6k;2& z(%0^Oe6_Gx9EZ;He%=_{EC)UFF0OIqkChOn#Rv5tcH|(*&`w{!$oYYVX2DT5e9Zbp z_uQ|hM8Hx4?fM`$l&fvW6ElWxXH70<*`+y2E2qiy{7^e9jz*l!8@w|Ip}AAMfX`Q~ z7I+))ad|`K>sHJ8EfrMZ?wX)TGu>nj1OLuZ_jul*Z-$njmJOI1evv%)CIM}BB){3+ z^ruDO+L%2ifF@LB-PlWgc@ zW`pyRR#b~L-?jm~>22X>ZRVp@ZczLkKacfIuP3Xe1(Z(7R2u|$p(@NYH>krkzXMm3 zxLK)Szt#-EeKnACepVHhH4$Of^XJL;t#%mRA^l5uj>zFL? z$iD-l&$9D3cg;IIe=eE_4{0eZpU<6p`hxK|yFPnh??}k|f$gnij)zGc%3JlP<%967 zLkVbemc}zxtBzN36XLL3UF1a7$b_rwIO?P}x}KVbYq%8}QoT`*sjl@Ysd|2Wo#xDO zG;3hYp?%zkP=@3x1G|(jhVma@{4lbIV_q_+UqrFqhT$2%G+`{Bs}ZToA%#g2BZTbf zF>}yz6qF#kRESQv z(-G$l-8J?5?#`D69|IPSR_VqsK(VQJ{daElf;E6LCC6~~HDcMh8uyLZf`1{0!uplO z-efI&YBYWgZI<CkHdVsnR^~)+oY&&JGy+9w5iYPQ?in-d$ zmzKh0eAj8TG>l!D#sDxmH9G$Kdo)vQ@zE=PwJ{Ho`001T_S5#?cOjf-diP@Zg!)qt zukW=X1>U}iFN5&ky!mVO;;lnV8R0}&dvVM8Flg`ei}-hM4{70N!COZ(YR=zSK-EVN zL8=?CSe4UYB==kE&zQ2K7e~&v{H$``Wz5UYz01x=c2wz|1fZ+_zlg{Iz?4?+`tbhp zwv|x}UzmzT^2E;9$_rDz`r)U zD==tEW4x)|QK6Mf+qIc-_Zv2XlSm2P%c|5iM=IDPD}sducfEq9cr$M+JFGl3!}`8Z z?JDwxn^Ek3K97LI#u*C#n|@H=Q3D#w2_0m+&|f`7^q8S*Z_Gf%Pv=^A=m}&pbkkHA z@)4F2pwdC+zNTME!0+q+rB4bQp5zs4@BLzvC~; z@H1^M$9mlN3o1%-)1cmZf zH_jsZW1{lZ}>{3N(j)o?l6gw&CwXJxfat-Hmc~ z?l65Rtzr4>rY%s(r^w}xo#G0hP^e{597ZsTG*lBIC?%WPQRRp0hu_o_bf{PeXR+n*9gwEpuoep6oQqpbFIN32Z?mcSwy3QI6#zhXmrekcxOZhO(~mfzYx zBr+U0L_;?sg~7@EZY+7t7H4f3s!~eVPKy?0LNKSZH!XQgtI~rg%LJ`@QLl+4#Ip`l9~UUIZGe~~MD_XB zn3Xr@Jc|_VOhKN+>l;bpXxU=y+?b+*P1J6S_G&T5E?QQM;H#ae4&M&W{E4pdu z;A_Bi%91Y?ckyw3&q_t2xfo;~F~tSp6=3r)Tz|-=K}M0b z4h?3h(JqPR2Ml6X!qKiGDtdv0hQy(QR*3tW4NrfY&@Fj7j!n5>ya=X?)!Sqng_qB( zJVnw;K&4LDuIm>hj;OaH0Hsr{(9GM^6t|9B?Zi5rOk+F)6p;+fb@pv&=5)JsQRZ-I z+*Bhp9znnpStGYBl(>3az_AOy$8|LD?fo*7l*KgJ$JaHgg9EN!cWfWKQ#_b^qc61T z*h2`7j0X2;WB`FZ9Qfzi>d})(K^>LHBgwi~gOe?232ji6c_PJD zHoL|<2^;I#Lpoukej6Y~Y<%c~l~jDSaOvH>T--F4jxEF9^%s>c%z6chLaT!Wra8Oe zvFUl1n5TcR<$MIOm0<1dg?C}_eiugUvq0Hejz1 zBG~v(?zeRkaX8<2w1}Pz2{S!{PCC6BBw-LT*L~x3a+mz+(i!QVra9>XTf=x0ciiv` zV~blw1;w5N1-hIT{;bKxRVIGG*F9S9NG>Ib!d3K~a{@R-5J8Q@h*upWBA)exD4~FD z&98xtz?~_Nj?T)!?%Z!l95~ChI1$^FXuzD=SqZXxeT7a(`j%r-whpto>V35Vs+`22YJ8g2ymREhmHHI*pVHCqJ<4Zd}51>aVD>DCA5fEYY=CB z03nRE`l@Gsl>-Z&nZf-$J{r9^=v0)fThN-8iZ%PDt6SU8MP`LG%F#JeU|Cr%3%{jwjjjKgayT_c)0s#zEvN0JwQ#kPh(ibxLb_eGu@ zlalQvR@Zyvl$utr0x(IHkK>rv1d$?)D5)8m7-{gO5p@hx80>E%k6jN}DU;lM=GVnt zb4dRFVr`WqPFJBJU+OcSC_7zu)*w|1phETFp_zB(1b6D)b@%K%F3PDR8u$=06bpxlNbDKp*F*t85`nd=+|gERMImw`vCnw~z#qGZc4l}+M&$CmK#WR<19^tPS|F4Q;6s!M8Bd{2{@ z4powM;NS<&4W3l&+t^*heH#v1^+sPtHP@qgWPlHij>FGA@cuZIwF)^+OG-`)1Giuq zrX0|xp1S@FR&bFvtjCRyG}MS=jcQ6@ugNP>Y;{v1ymoEk@xnQ;XH$3H{otZyzr87n z+>#iFQo|%kp!d9~{Yjj_lhW-{~ll{5L72;0zl4>A@yR=U81p zmW_iTkuRB_aXx!n8z1(f#v z{{l)bsgF*63hc4xm$^RZzk1o(=6wLn;#SF~mb&24%1RGRmfYtn6lIgTXvs&aya2zq zUW36(@@ZmTJ^RLKG-15-loIf4c^y$u?0shMi$=1)m5f~Y=-9QV-<5v0%G0Zg&brX9 z!#cdv|)T6&JFqeG4H=o%{gLmT#q{!Ht#X5SF1V|kAe1UnYK%0VPXm`B4 zC-w81olV<&ibyFcr(`4il%p^C{$g|W4PE$fG>&5!tIa$V1SdK|MT-LlW>CG#r7-{ZvAFlnexm9@fq{<}rGRJRoPc#RN9PdUzx7h{ zJ9oZ5K%+@aMGuB8AQar{A~~){iUM+mH+RdnLZmB^)GS?reoqm^jC;EmR-TCcGjw?; zsGmE?kobdD?~?G})lu_B#=+v%<(s)Xia6|}k#f?$8I`&=g=jWi>ROXupIumzv=pjx zG2ph3kE0Vb>fQQKPG)TM&&x*-Tp-~j^|Z+YUx1~ng^{jaT>U6~bS6cDpz`VrCSe`2 z>`z%2NBd9%Z|uqYI)RWYMh$O%9~ozrwyj)~XzhJ&*(x_&lKr0~L>%YaEP`i5LZwMEqUyKd>xto1Tb32m0wUg^@#2Q!9~hf7;;%GuC6hDQd+8xO91U}@2- zb?>smAYchsshk9A?OAfY)ESY#P|0rnSH?HCzP^?U zzINg!9Xadz)2-CyUc?>Zuz z)@Z1l8KX_obF|6YPxB+OMamk{n{EL!0dx2+@ z#E^b1C2c+Kh#t)_@{;ZVcf78}kFeE$aQ9R)NX|A~g?ygKdvf#!K2N{6Wt+mnt;fmZ z`2da9tKpnHdYW?VNd8IflhzUuXYd3dfGlDy&q3%th0yT~iCSih_-uvNmWun@D`2IZ+hrwJZ zNJNL<&1_+Rxz=Jj3$TP`J7Hg4eYEQNHi$CEU_~I_JnnSALM84`K_~u-93nTD z7_BdWY#`(mEfLM9J7n|yYpnNW*?-qJWx2cccfHH}E|x28VMErK;xn%A{>;{lbdD>0 zaAXJ?1)a>Q{Xioq4Mqlt;!q00txQ1Pmroj)<`OK9RLcS=sh|;$tUoWz){_Ahg0T2B zD^*;k7?WIno`skFW&?lMF?y`Ie#g(>R z;h=`r_jHA$lQAg)n+A10MG)?&grW0`DDQz;hJPf)wdyRr(4sLrb^$=p{gNhamRZcwtCg zdoj9>(zL&ez*m|Ag}+)0e8o7w_%reH9W9Xqb?KEPz1ACCg}iCA&;qxXcX!q9^b4fmx(YL`LihP{P$}@MrNVud1LgPlUW#z z77!{)GF(wL?lZ}58gyjRZ3rx>Ivlm~E31=9wX8)Cam8wJILkZ5s%i*7d$^;#x=_Qf zP|P-1AWZT5{T&tedg-pofe*$wB@Lbm_g+tdk;Z&*S;L`<7E(hw)Kwg`1pkfN)BC0~ z8eig&w&3h**{K|!T;fU{x`Tsai;5|vI;gJX^Oi9q@A**}C!IyAWv}3Sd(|h` zJ`XlXC7g^^7=375aj*CA{XZdzpfpj=DM-P_CdDy8CHl_uO;w^i&je!!D8SfW+9-<( zDV*KU=Q-okN8MU8&q;Q{Rv~Fn7xTVDVe_U@6dQWPetJ4YQTjhqOahc(+T&1Hm!ybX zWd_cRMPy$?C)EsWPHx0w7vKaq8Q{3-9DLA7XIC#j`qPrhq0lQw!UZtT3ViS9u3%(~ zWt{)?l@zx$??|!b?SGd2HFA?0ep~ly>viQmf+m*(+_Bcm5U(#NQqTSvFtLZOu^tr^ z&?1%YJ)m)rO_%30(vHn^RtO*80TJzWvPz=M5cc-}yt&7!fZ{x2;V`jQ9EozYM1tYO z5Y%nyecsn_fa6yN)Hm(x-o_!Q3mUl6%VK{(P=p#A>F*9V8RC@3MW zuOhu%L}8&Uu5?7PNp*pk(xqKGzpEb)|2N`xB*9?j?e+UVo4p*}?YLs1?of1X&EwDN ztqR$rz;?=N_b>OE>Gu&W$!g%iJuepJeudYo40c%#i9z1v z6nD96W5I>nXe>W3H>f=aNP0u2Mvw1Z>XL?+VF+mfg-mLr+$oag2pJHqCqSFXz`+B5 zmF*BTzVLDVahkfh)^DlxhEN?+F)`xHhqvb*-5lsYaG)C}NY&SsWQ!G=Owyk-@x3q7 zmLWE@e;U6?Ig&jeqO+h(|Q)Y5z_V8k>pp^Cikk_e@PG4v=&oHzXit(Q7$ zw{L6pwLiv@X*MlKX4Ac_H`x4fSnZgyRyl`}g%*ZbRy zS4F1hmmLkI2GJk11Vp?ho43ru#kX)Hdifk%uFvf&fq5M7>>M7bqfrzp8_%dbFNN_74IQpw{h_W%3tMTdgI(Xey5Yjrnd z0^h@gnfyxh!cnFPw%!df{c?&sqsIpY&)`=)T-P^5D}S~!(k4#_+$eEN{pUv8e&K^@ zhn#LH^XJiXkk9`;vA?K?LFcfA*a$wbn_!>T_{Ek=VPmny+83TQCteZcW!-nY(`PgD zh1M*7t=LH=JMA0B%%C*>gtFG|vouM?`#pI^o?<~KhwCC!m}4n@oK#&XQhW}rds~ZU zWfV@!-xZ0zGp@a_lS?$1Q`~qfa;Pl`G?FaUB3tmRq{m8p`4XavA>I)0i){{or2{>8e@P3qQg$3{59p2d%v5o5F4 zzwRqc`{qb@PkClx?ptH>*^VzM_H`CKof%uf*=brs6hL*cf`Uq1vi5j(rG%IIo7|-J zK81xU3Oy^PNH;Zv3f64DU6e1#|FXB2Dx*1#jP(>rGD6O(x02}|!tdGy%IV5+vXg8+ z5Fy34U#^R+=Aspb5UneDY>Bx0$-xQcZk2bchqiAwd_tMftG!kZFr{w~Nf9zXDh|~C} zeB_j(DNFD}R-^6^SFb(R$gwL`o=N{Z9-zE91N(wrKw*@o{0G9y?5(r`pczknjS<_5k0O4=|7>2!@ zfpD)n?)q#?7~ei&Y>isSkGO5AE9sS+n+1x3c{0{*KzYWB>8pMRObmo7zcVIN*CXes0$3ndgpe~0SnmE$|`By=rDi^V_9vnwOGtn+!)xlrT5bG5RdSOXlf3zZoC zhb##mtArG8-KV+JsK@CLt(9s{7f>RU#jO>!2wQDdc zHNl#lVkochGnbK)qLkz08s}|b`w52`1%~IJRBy_bsOL~C$sj(mauT>8_jYo+B+-jkVH%yyy6EIjS zCQwFI63az-?>pc7P81ymm0O)P3%nAjTmMH(u<7GM*Q}zYNz(m>S`3XMH2SdM_F-eCE- zk=*n6kaU)GvFzET%6RC=%mg|mwo!G!$evjh{V@K>!5?Zf23PgwRwE`qzB0UXX~f|I z)(b5n5qm<$q`R!J)x*&pa2*=eWp=bcL@PzHr5gBTpn6kHb6)Gw?EMQb5XI3pX%sS; zNmMyrXR|~eHJF%Dgq%6@VO%>wX|ciod-tRU0(v?<>#?m9UUAt*u}j!n@16=z|b^q<=dlFk(r)zcjTLqbIYO8vf} zXOEyfQ;H}}Q;;N!uRv?O(3gWDr=28E#uNZck_o%l3qt#|7CQ}P=|y;KY8<4X1(JsL z6RYjBE7%*-5;IFlWuC6;KCu&P?5TSqNgx*J^B7W0b`0yW{14)Vg6MidtPPIF!SXKZ zY1?NnrlPOJ2#waI4?{>1JjSCH7{oo>^wBq63Z10?Pgy&+u^sj9NPkgXA48&_GfU?H zthw%yHTP?%{D|S7%GGaVsZA}E+(Q|9cx+Gl& zbxfW=^N+XG6?$37mG6qoNeBe4z0$%-6R@G*H?HSyB%WIxco(XmK&61AD970aTm|=W zF+IxB9?I+LVa|UfGK7;0!xyqf)fzO0S`~t2ucX-hHE0$%luQKNAWQ^)Qo8s2o#z!f zgSH6%hg393fVf{r*7=#5k#5N9|8AEV<%ygJ6eRZwiy=5|?G|)x&s41^VBf;kL()0l zHE~QXodj`9Hn|dA$S7`VVFJ*c#=y6)X4a78;DDPG4wd$O`Pw~He5|J->a}!WrulJy z{|V{sd$2r;Qx}PZBZ=wJ@CU-gjOR}UHyTkhdB^vEyyHuwHQwarf^d|~Y%gk5uH)Wz z8_ajPJIEF%Cl^`;k47_*02GSP`106-ECsH#9Ml{hL<StkrORemkLS3zTfHu0{ zllym05drPIR;*`M%@6Q6mQ=8(%JXrp=5s;A=!GI-`TM2teZu`Nke26bl7PZIj&zbI z(=VKu;(+#U=bd2h{^T3+S6Qnj$lI{Nihz_Abqs&}skTeV|B)ur}{MkOucXmhQ|zXMGtl1l*;G{Cr2En zHxd49vONUPDm_iE)Hc}0p$z;bZ*4*<@8)^dM*)^ds!70=XM;a&?;a?SOi#6LG;`s{ zq96(}A`VMQ35PCX)QV~r@}>6E(qz1wX|rQ1Jr?$yGoL8RSnW*x=czMEz>g?PFg7s3LpWNQKh3Juvpy5({!6)Tr>toC}Y01q1`zb2HG$S z7WdRyt7mvxxh+5bp2VX$6AB3B&@s8Eu9t0Hm}$9tWqWX45d;$@zgE$@q=kh>`P{S) zBIS}-xFdTz%J5pgOlBhMRqE36o0M<=`k0{PGT}Y0`}@H()mc7X{24o}0mka2c1xxk z<4&c;nB3|v2HClBU^RPublgM71o>2poaoCTe_8nHH#LXre(yMi>~)sX*N37NVuZTL z-@5Zq(HaF!(bMa}L2zkh9{p?BpfUR33ZR5-Rlqr?^Z+ELSX3SwP+$FanXB4SB`*4! zE&cIFIj7Or-wO-*{itjG$fz}h7s1PRi(oGJyW9zgt4D=BFSA!E;R!gl_0jyo`B}~j z(M`Y+$2=*h*>k<=TCOj$T`FL?Kj7Md-}_mw;r0ot$e7sODdOj+9G(Fe?Fod}0`;l7 zy;JKebEA_Sgfz%7+crCgAU2uZw8$|$_2!+*M2+-tKM zD*F!Z{^I^RasDNY^I$wx$J|1{VcZ)P-FAd-8bHPoNAWiA{%xa5TC_BdZwF4eSOCUSeqZmEB)Y zi^ZWmaB!A;B3AbbV1YOn09Z5(J?E}gkxnf$85(a>9*8I4;owi1(l+k?j9{`9k0XeatsYB0eywQx{UoW)ZWN_+yaA39#N&!h!;Xk2U7QB~= zGxcVjO(K(7)_eMc5q2G==l8ns5soSi2fEMv(+-?^(|@AjR7|S-3vo!QL^GPC)1_h{ zh3-M79)vUVX%$HFxsWWRpZX*LLqNK;@CVCw|3xQ}Wm5Um9w{qh)n1dwe%hZ%-q^JP zY-^EN9k-((Nc&R$**}LYU9eFCT>~tiXuEGep|3~~lRm1KlJ3pbhZLy%u`9s~FOXJt zFqwKMxfBK$5Hs4BaljDrpDV9g7xY&!zi*0uXZ|na3xeu1*DZ59rLq2($Uu^&?|vOo z)7uj>7^H+U>`16Fa({K`!hjUM%3$@L3xzg6YfORpTf@{JoV3%eC*TaJ zUIgFaL`O77d~>2>f-XrXc98~goD*|Wlo?B3&R~MSZ z!}l1ICGE#^$l8_~o5lna^*n9+(?D=gYeqwR5$?!G@O|d!lc@v@9_B*EZdnfVLDDPA zi{-{nAKV*R^#4O=K;`1EvMf=fXZ-<#AjWzhhq%SwYDI*OeILEi{RvsYjYy=~O5uq1 zTea}Xf~p4dr#DG>q7rLMwZ=x&2(I-!{3uQC{5Zbrd5vmvU}4UHl#<$&ZJGS<3aKT< zxK62XckN{0h9tt!t&HSdw|D+gi}-o=R&b@qU5!Qqw*7^4y^sPs;n*nd;|qkQm+AA{ zmuLkD(M{0D+*-HXBV3nqQdD-PGeHgYy8IZ2MNSP9zDymR`}ph?Rs7 z9HIm%Djr|5^%2Y(#86}Xm&F(>PxpWh7e4u_5}y;-ON zMbBUIrb;wruHXYN6_mI@wV7C+P&jr7t=Gbb4-5yG2AoSs5A}W6kYcy{I{M#T(#QXq z#?|!*b6o%S7oTAQ?6zIDxOcCma}I*KK@q!>6IhPCz4E3EW(!VFk6}HmLQ>DM zbGsF$WuF;W!`{?-<0buO;ax8D{{QWytg2=0^B)UIB#|8@u{vx3dj%=cZZC*3@Own_ z_(_N3uAeu8+(sGxCMrsVM2}mb@Oe|jnuI8d9#-^=a{!5bOl43f0H8p*G=70@o}SIw z*R)Ex-YE%@x1Uc?LGplFEZ>y|$NwII#nCuuBvSN!`*oyoQeZ=QAB-)Ms|^}e+S+El zJh#8S3?LbjK>b(KZWtW+x|aF`L)3GWlzxOgRDJsx_+_tzu2xksH9KEW;A>8QWJBp^ z$Uo%v8ivUR=AETY`TRc8wB4xn*^!_x<+2wm?ADbDa{oRrNha4a-PXO6kXt&U8lbbx zPVtmDMmn-?mEa#RB9BR5D zLowi}H*={CR(cl)(%VzT&^b^oeB^qtp)(`(zvXjxZPZ&N6%u2*F#(@(_rS<>Amt62 zmipu#a}Vtg9-H20#GZQ+5HVqZ*B-VWt0K|6%usbTATOc$ zg)2eI7&v68kr0rZ{J@=c`0wP?r!biZH{$0fNm_R^kRtwa*;j7v@dMq4|5#BO1!}-T zqw~nyUrW6QCG{z(<4{bALa;{0A@G|ICt!8j{{U(X%OTCPL3RTq?A|Fg`OeSbvZG?p z8^0}5I`+5GW<8jUGF9&MYBQ-zUoQ>%z7UYk7567!zxE>V$wO4N$tkjBC95j`?We~+ zSHW9DLqyaE8NJgQgaRd+NZ-DFPzCwgw7R=hE|zOFc1Xis25n^>p0;+ZYWjxnInlOQ zr=44mS8mee3uF6ts(;zv%zSL~2qUSR9%_Ko#znZ>uGN)A zI#hEpELKGFKkdn)+#6(NP}a3*p^*-W>tVaj6wS5LuGuX=`-i-6}xhA=AC)|Gb6M6NM@ZB$(U`F`bwYy|bUsnSwaL;4&-rL^Jm(x~ zr|E=FTAARMhmo$+>7K3=xAl<7-s|NUC^PjfjCOLI(l+j}4e#QEhP=8A4WZK#AFgis zj6H=o!$g=TvOqovOpY7_EFL7j$M#^LqNF3XIMI1lDh&t$|IPtkL9_lJj?TrO>HmNK zugx4brQi7Fx64bUXB7g7J%UvR+NfHOf|@;7javkerWsiaXB36Jmynz z?)6v?t6}Nb|2ebfAQZ>S_kKS>`?8JQ@|4*5s2CR7bY$La5+hvj_X$ z##N_${U~?4+~{foew;Q5B%8Gej=@O3qzVEE3p&25@WS^+U6h<9DF3~sbXZ7iqgz<4 zb4gij3jI-;?hXd4IxC|NN{x4K4?#i}z0ib76rf^}YQ14XZwrKGbneitlX-Tjif$MD2rCNEVg;ePxQWnfBVDbILW>xR6Hv zPgu>xQV7XbNUrFlmj=+~#6&ygBnqL{B+_tZ;r8^5ju*V;vdp8AH*>EmO$qat`Heiw z&SCCtk9#3>UTQ~>@(p235mB*dw8uG=?A@hgIL5nR(8$<4W7V>iF-#;X(Qw-=NA`Z0 zr4q5jJNOV-)qqJ-1pJo1g|L2VP4$3J3WSmKdzw+0SDc5iJsmh8r^#HMvu3*D+4D8n*!&qGOK7FU@45 zRn#V8uWdb94}$OjdLk>R4j}v;i9ml>d(FjQQ0($O$sV2$_8ZKof0)<%_OLH$wpEl67f2o7Goe}qr5u6e zk1{`$rMma%<|DDDT<{>PnMHa039h%dX7Og^*!^Rkgm6e!qaR5qX2w&z0!SD7I0(&; z<$1xQbF39r#|sZVi}u}`D-%}3Xk4WT_xByin2t{$pR4?*#_`{E1@7aIrj!Zo_=%9l z;}WQP;%K)-{uHMsvcdlT-0v-@-{gfQT@A&=(KHeIXlFH>Xg0#rX&+mFzfWZ$sZQRu z1RX)Pp|>qKv>b~sY%p7a5+JM>S$WOk22>=8U2S4*zz&LX`+6i!^_Z!K|Ba6uZ@_!8 zk)%O#b7kK0YC5t&1V4SNdv9mUuI`{c7xKfzNIEyZs{q%1m+11TT69WD=3VLj@AzoytM+ zBUCOpBFtS`-~@BmyOZKy=D)%LrAsw>X=qDajlz~Bws=VC<$}8x%+V1`0a$%goVf@! zo%xI{vt69soB1m%BX$|X#S|w%LyU%eHicQ&9u0wlDwMOh7_}+SV3P`k{>rU)%H(hh z^f4&?u7YFo(jWk7F~x1$nUOdmf0*a<`6_~Gqa{;CtZ_5Xc<}AAd+f_4-4Zi@Rn^!?z$G(|GygRMZS7EVa>t>}8Lkgq?5Q-z( zMlMu!V;okXJ7)hX{SE0Wt9c!q@n+xEVhE84$(ijq;~<9v%iE|G$`IG$@ei9cf>dpd zzmA0u3#^Vr;cIt*4VZiKv=R<9P&lutTO0$}e#VjR+tUe~_dyaj9D`_Crky^y{Q9W@ z&lV^W4|E;-86cbcVNmC^mw9{c#l3|CUvebqXjQLd%)1Iq785W`Rw%|h`BxMiw72_3 z(w0+rxvIdPLfb9<7!Zo`;yF=98&e-euK`PqfF zf3g%!@GhrXF(`QL=1v~I1DIZ^H0C$zn@dfQXgTER!I8*sOH!=zS{6)MRww}yf! zc#vn&?C7r7y-M%WWry3SGm>4uAlwC#-6TNcD*G*DD@R&~E@GjY6&?x8SdbGr6()0E zj%|3VQm3FWt3TQViE^<$S~VWEKR*eDgRIv@-~~%x$LXFIySK*R)~U2XUDI;5Sk&Xr*zuTkpF9C zQq~HZ3bHvWQ%uqyI(oL^`YE;$QN=^?!}XKCL|B~_-WY8Qk2ISrY*%0C`+D;W%Y2AV zucd3-oD277{(v8TAcN0MQA;Yctd6KBeP@;)t?t^j>Cc#4g=8OkB~==4S4&k-KTp98 z(nzG>d$rvM@;CTT&)Kp}Q3w+$`a(s9cO`hR`c#t zgNMtK;}1@K+ie0fn!PsX`(o(cETZ{;(}jDd1lFZ?Ak`AhfC*XYMp^+=#mH0nv(u(eQzE z9-4S@f`WBE2G#7=lB>FaZWRTl!65>x^`6>*gQTP8S?k6O|Kzx<0DnC8$nm8z!r%j?A)na&mmB^ zeNF+02i7#b!y!S{Gb6W<`6-jzx?aSeJpts#+_C((&?Q_)agCF0{#{VnxhH~jt2eFc zGazLwy^ zI-}+rRmOUZpjDd`P-Ej&;STy^a=?mTtiz5Sxs$4s%jeGfpoE;*r9tyIk0k zeA>!*Yu#iRN>?GGt$*juta`Q&-x{ho)w3Y`{`z__vS6hx2n-F6epuP@=6O(6?9Gmd zr59EY7aOVv=uZba%x1sY0O}z8bo6lcj4Nw(6X|qd+}_TA#*4!;>_oHl9zGM~Rf?51 zCSxw!wT|<&(jjOm#nXo)@51>oXZ=D2T&5NCA@zm(x4+@lRW~)4MqLL&{bdnGsO@s^ z%;iR9vt0Vh99#uOdg)@DNL-Mkg|xKhAqT;SPmc@lbxLcgI}X|!1D0(ho1_fzHidsv`M6OxRpUI5fE{^7CMfO7L_Ni!v<>x4YE30Fu@)s z^@>A{k#9o*HJ`bR7Uq8GWAAG-9SXWFpErJAms=eKc$2>ye*7_`XVoDh(CXE`WxP}2 z?wWQxLnF)>;qK)XT1gT`Rm$vx(-!XVmWTwky{=iN!B>2I$aLUP5~wquKum9z1Wu2- z?ZZEfX9jm)#7j{K_tFqU=BM<-!5gOg3cxIGHW*>zUqJt75z<+>Qi^g40p)Qk-T_r7 zm6nO&n-q8+(-)T?lg+?>Lf} z{9|BSxadp)o?Ai(Fc4T{T_ z-qsJ&J_D+yr0W1`Gj3zkkdqg-G)Pc)F{k0(P0RLm+qBT(XW+6`h zJv6MIheie3!?!8;rN=vLFfhAv*d{WyB}T8T;wnAZt^VZsD=8W(iUCG3t9jdS7+A=H zI+gy5t;A21x^6;vet;Y-#miFUG;MwW%jAZl2Xvgdy7%9dz+D~dXI=)3yz+~@)8+S; zVN#K)wc7Fgd4x&>&k1VjUKnQTdeyz1viDbURROo&u7FI0WWyQnkG~HxalTOf1&(eY ztGY@#Q;Qs$=Q;%>bxbg55wUyg#RTUulFqs>mszurgpd8_Mki5+oefzW7E}^MHseax zLGitswuwp!YesGVmUNx&_Jtwk?^Ck{n@1TNg7g#jY;P-1tVNXvopQW&I1ZU#qE>x* z$~2k+%IeFmGx;^(+88vG>Jpv)Ham>wMCxFzoMB{sD&RROoEWfLVjS-MHD4VHlzm1c zTC+qY+t$L)A%HTF*NfdJ`jwk>b>uc-Pg?xQT#`}a)PR+waEL*T08fCrTAn&`ypa>TbEpc;_5G{dJ(dYTbR{>+_T?ob%!0RL%^!E``mfJ{zndd@2$teZeJA`gUS~W-gab!Zd2;P1F1ToeezpNM)prS&|Y{XMXP>IyaZ!ptoXfxhJB;0kJB{qZR;N z7hOc#|JmvD%3aC%IrihX#jl?; zEU5?12JqF3e07SeAeOk?JmjiXy<*{120FvKX9XIvpmdV!)TJ)}8|*+1aK-g@6rWyb z81@<)yaZ-9=#WviSc;V{NuFL7gYuIj#-o&I$#=?=^JNucC&cR?`Chcg?in{;oz$g- z{wgd4L*HsV??jkVai*WAOih^@3N1{NVPZA3n0_m+A1&j3d7TS^#&ah*PEL3Xa?LZz(@+ zmJqeW27JcuVT_;tpJ$_@nfqggKz|C7ALU2qoQQ<^Oryfm)Kkp1{D?#05Cmm!1Ppn& zE7kO7`*Is#vG+uZ)i?E*OTXSA^TikyRaGL29bVfy!UwXoOOUWlSu8n6z<3v#g7%Q# zpCA|wa^pPPJw~|8Z0LiBU+gtJ36YfxpnC`^n@P*f`Dt%s^|GimyTt}-2<-eQP5C9Z zzg4(&?)MK~bcA(C0f@h;ySpPzgmm&6)e>YH?I>M1G(q9Rg|y2y7hkfZWcAKO3}+33 zv1vIp*$>q1j=g5gTu`0}Nq^Pr^0ebP56Xzq#blP(QTLs=hp@NmxX>?zzsS=rW0kiz z-adc-W#7s_M2Beqq#@TEG!WL(^!{sSZv4#jC+rG$PujFFd*km$UUMQJ1R2^>=$mr> z#l5JYW^NspBIoBew}jIa`_U*27+*ufFKE?k`P(mT?j$qFG|&-ygh>V#1|vHH@J$WV zNbKnrNM;GHA1enyYMz4AM+nFqXUC>!$zCr9OD>Er3={4jwqD4kkI}s^pZ#|1?}RAu)-RIN=+RTN_sK18G+@N=G=ahv{UF(SHvhi_@Z zkoduu2tIB(@8ggH%b2rgZ{`dk#yRJ&yoat{ZzG|zG7{*bnaQRRCE5O0COb1UJY|f} zddRNB@xk%cLAS+2_Q|8F$ME+86Io^kq9M5&Ad`s|E*_$n;4c`L!p>F{wnBN^srJ6; zh=6)?E(WQ;0oNnPOSR8T_x5?=Wqv+fR&VE1F1p^xuE6_A{!gOLkP3aw+|mphT7w&U zk^#x++I1t3L8U-x49IyYTxA1X2XwSSx(h;Wwj)3=+XD*ja;m>$LGqM$rDxEsN!Q*g z5M)1TFaw3QC%Pcy*FF+4yShvR{#qoch=S2rHL1jn>Tb!WN!uS)+@9_uD$ssk+gEvK zJ3G87+0vfPMySX&xx$>|;J^AAFoM^}04D z#xNM_FCy07J{^Nr3cUJxkR4ePB6TAQjr{Q2blq*>kE}6Vh@jYmxe>S(a7md6bTipP z;24VI>8sgI)vvW^pFP`J;2ab&YP*^Atfeq|VSDbFwCvajjv<+^fvT) z?iIpa-p=P6eKScaaN1ORK(m6u4UfH|n#QSx=s&~6U0hq&qIl9^5oot)Yi{;-J$x|I z=(G9qE;9s|%fq@kt~M$TeRvMh5F$<=S8`+WBsdj+BwmzNmm@>egu3J^?9+IJQ;{Vi z2o$tbKR(;#Rs3-XNzZ#WtT``{UV3CePF6b#8Le2Tf{}ES#8eo~xPV1dJ^W)|mTRkG zy{WerMnCzw6QLz{WvnfTseo!SopgdcaX zWy_l~M$;E9TD<1LvF9Hy6Lq<80E)9naB;|PyR~*iwxVcyrL4MITxBh441*r+MT4-@ z-*0!8TH*o(C=NH1yMwvnuAZ^nFDF=dX6ck7osdRp_h-I#6BJ!R605|CodXe{Y&YIg z`q2aN{V&rhKCx1r%gdFQXJ!@Gbg@?NBhme#dg3rVJ6Mjf+@Hxe+V1%LQFsYFfB3*+J+m|ucAVjcW zwRKqO$P_A1>1vFuv3MUXpnF&G(xTI)1)e6;;_MG4(G&m8#T$FdxaaX-+T>+oos@LACO$i zcfeKE<2T*45&&0mJ31JOn5)(g%OH2kTD3?nb!t6(KIn%`{DmLLR1bY@?(tv!V?9X$ zpf-qh%gGp?R8=0enO4N&05sHHwOH`5u;gRpqM9}*+|ZqXr-~(}P?{HDJlO9inz~DE zE^O2Y%2y+!($@c3)C>2J3p8A|)Kovj+TZk{o%=Uirza(wE3Uc6rKBZeDQ7d;*|T5O zraMx*rUb3>+`DBJETCCj(eVLZd?Zos^k&ZV@nzg_64gZ)#fwZINVbrBsDU7xn7e=X zf_U{VETX$U;IQs689z5w#=+9T8eX>cF5Br~>5V%Vu)dw5O_w85%!9gfj+BAk+e5Ox zLPJ*+y51f&kWhAJ_Z5OQcW57}dvVu*PN1MtuK_d*nY`u(Xo@mx#PkzkmS>lTXBE!A zOW(H`CV{#aPh+0pGC-TFV31$Axu^(J54ZA~T$i)_Pwic9PkHW8oVoxTu(ww~^!=Sf z|LxR*dQo8RyGOv;571!sqPZ_mQAKYKMnPpY1c;8DYm|k)2||54DwLwIW7Wd6TXSA1 ziF4q9Iq*MUSqkwwKOM@;D+f-9v=pgwd9toiqndK$$jQMiyuJS3wHTx={p23k+o4+q zT908HL*0?Uzv&EJ%vLr4x;Q$$OtglS#mAqACCRY!iy1t{R>g6DS zQR|_EbuyjdCU~K$cyi@sFY9A>5yj$K)wd1WiM=Z(oeFBDwuxh{YFT)@0(SP*PumB@ zqAUI>iP>Nm5r;!G(?Mt^ah#c|>)Jp7hr<*@BrUnCk_-7j-0QTQY*F3qpYK!E>o)G$ z9zv}Eb9`z5d;Jp$h97D!K!~O+f}TaU$@uS{#^XR}5#n%yy5PZoWbE$H=kPviS$24U zPUasTDkps?H=j!5ZJp_b2bxJkzoQldnY}t03CYh@>WH8UJ0@Oba|%Qm_(Ex)QQ^XM zI0Ph|Y~5Fsi&ZSjVyTS7128qz@*TBhkdh~P2Z|m(>enb;JNw9RVp|g`5<^Yf`?sG$ zBcrC@ZYDh-o8@P?=I0!a$j@2`>CUxO47bF2g~q={?V3NE3U1525;}0^Zr^`6*O@}Go3n*rJ06#C$Lc5moYD=dfVGvd<1QJC%c{XRY`a2hCf*{hXQKusvWlSCoxU-=%> zcnT?`A9QgQ>60Yban4k*IThw^6QdQOepwy)Z}i>2Pw&aAc`yGlIyh@&v1S=@PJiys zRXRf(4p6gt@mD{gP2*WW^B{-47QakG8NFG)kmrjfP)A!O9JTR=k;<2JZ(jZ=g9#*# zTs5{miQqjNDfL_VOiy#pLiC)M2&e<*cfHCEU_Q+pd|$Ee*UuMYPG{WP_9Wf-_jk&c zpM7rEJP&@*1^s;k`IWzEyCkyZ#>0BMFu|BFCsx3D(jK70F{+Y_vzN##;*I1!m4ARV8n_6bqo7*#D02!>iZ}&e+{Gk zyN~M=p)@+%9FV6@p*u6M$RAD0C8Qzo@cU3zr8}9=ir?u$`0kA;d2D3*PPz6vQRm80 zt5KN!IT*G1M{2=^+u*fA!z{M06)pu3LCR0bZydo>tW8(~IVGWYQ}O2BxK}Eua?ZKZ z%Mkx~77H{O)EOb)3gCInwI#x*^C$7QT6e5C`@fumdsRH-`xtx=+dmT21bhz%W&aO= z-wagb!GjPQxmN?(a)tq<2YFE+cpl=q5bJJ!=YQ4PnMFDtjJ$M;3Be8mJF11%5`RFP_SrM>Ad7KYXS@C=k z>$RmOE3+R=s1`1t1RLcUyX=)zXMt;G*Qm*Hi0KC9K_J++oii&xKX(Uf>*6_JN^HHz^yncf zWRG9^amYbkZNvmDY!MvlZKDyZr=y&w;h3+=ZA5esQA(d@R78QPF$yCT|GPhTr@u$fXTYu>4TFZLs8WbtW-Dnul`|a0O9^I$qB=6Y zYiIv~mqE>fJQEn3N^EawPdBAjI>cQJohbDfMBivBS8BUas5TD{CA&A&r;Tiw1C#aj zV@g9;k@*89yXX;NTpun(P=NSim>S|Egc49%DUchV@?0423=wZ@hGZK4`Ti8Sqy3A0 zqs%ZQsGXWQH7k$GKORPYKgOYU_2DcDig&=e3Ch17@3C=}gftLA8Mo9foqe z=A&>)C26MT*n8bdB8#gh5H|juhK&i8=3QewtC19p(5Juqmeq+a7|BV5kWZizVQD%Nxfo!JAMk$D zGlMT4VCp9>u1yB=MbYV@AV|#h+p;aS`{Y3aK?R#lqS7h9v5*c3ivV+GXvf^Bfqajz znBQOCP2V@)#zf8>S}4mkOkC9XaPdQ1Tg2zHO$@WJ9*lf!rMWP7IEvsA0%aWcHk-%WatG*~(Qq63~oB8n6uE@g+%6cI#?3dDG z8s+U%nG5~eep%?mG4WNb&ti>_=->CaV|jq1sIU+SBFT6Nl7H|D6HN@e%1P|Hkf8y6 z;b%sM=#!6Ly>KSzkb&4b#4@0uKdh7cIwd4t3OK2%-}6WOT2!TR<2e!8;qJ$Di*erV z5kp6>D#yqO{5G_`mILy}=_5x}^)!lYRTxIi9QD>)c}=q}WhTa|zYXV?lAb^!{0B2; zRGl8n0FDaqIp#Ls$}JqC5Vx|^I=we4^s${XqJXOcSt1ZqJ}ALxRzhnigkeO~(G`k` z^iiMc^_---;E^B^a*rA39+$D(P>NA&)k%5aFD(hM{@!$4tJR-qYMKGt zc4ow|NT&Mju@}UX9v%+!7_Te&L8bbYPtBs$$MO89kHRVceX*B7ThG~};_YYhmlz8oNpLpdW4WOVT031#`}*v^5U}ITJKSbRIak# zFq3O#rs`kFPb8SVj$vAjJ%YO>qfn@9aX7KxFoUvCKLGj-H3_8)a&5>Km}Hw2^7yha z?N0D>9Eky^_)5R#XhrHOjk>K)n{Ukz} z@S3aT(UD(TzEyBCxU62LsFr*nqBZEv$q2nhrB9^l*ze2Be?En-h~(RsiuE#Z&FXnE z0nhp$kezF%;0E&pPWGxZBjxv^=dRF*Y5|pm)m-8MIW_+Zb+>tnUeytwXEHjFO6-;#|5>? zV0^FwTP~UpOATpaMa#fN#cY|Dzny)(*wQ6dY-QJDt^88J-L@^_dC#0(gf13{pesd? zvZUG_G7eF*9c3SMi|qja%w14bC8L4?JSGvfsDk{84u)uX*$v?2KBH7*>Ftb+j<+ui z*p(_rkJKICW%4IZdm3YbL0_CJIeTu;O3oD?9g5^OZ~9eLa7Etbh|i_2L`Zp|{|Qu95iWa`#8;F5EqtU|_&6fA%r* zb*UXA5tcQw(5CUOnX~`Q>MJ3%ik!R=h{B{3t1^bb8V%R~%R=EHtq% zIG2r6tiYPOHl@Hq=syu0&fbr*Wx8E{;tR*v)$Tcad97`&^%}ujoob{3q;O(jD4oNDNAs*3D#!#E{GK@OxixG$OATCZKkQ$+8J@O0%q3-$Rq$?%UN z3|0xsBG68ILlv0vW;I7gRB&cvow4*pN5>j_*C|(-&s{lbIULk1;?RpnO*UOt?;z^> z6jz{O)bbxCf*XIw==;|%9KOGyGkO5Dmp-Ydyd{abz$O5N2y((i%6ZzaxW#T89-0&6 zzy20~I=Agbh+CW4`D?*tF}HHoHh;}ckuP&7lo5NiE7U@xH5LWC?UBbnB)X3efM2O( z*cXMDm*1*fG3yI67Bf>{f7+P7=>_EA#N|zg%s%!Fk-&)~t}{LTgff`pVEyM&=>LE# zK6{?0g3uHiSjzGYSr=rt#z$V_^AiXmNnNFhOD}seZDQVhNP!S1E4zo1erLKw$f%qw z^htfT4zp2C*epo~w!}H-o~lC(b&jj5-Fg7wr#fYV(wJA*`$!-!Ds}%#tm4Hr;Q7yQ z(<;J-K_XZRfC(+D1dZfmeP_;*mYRP0SonY)9l@rVW5Y_Fcmhhxib2cqddrE!fqgp0 zJDfH;D)%RSoLw_J;?sPS>L&;%^^rpF#xC9s&t|lP%z6(Q*$f0s`}Z^1_EtE z$+xze)l1oMG?)XX!;(#B58Mzj0;EoFR`$*<94y^i}@2>YX@jS zCfjoAWp(90;F3#OP=r`$X+3X8=hjVq0Vq#Kn)2FsI$f!BgrPi`)R=bb;UI3QS8wy) z7NQ=-V<5(qE6DRJrE-LfmATAUr>c3*)uAT^C3@9zNP5GuJ=s{jWWA8mlrhlm%g!~> z7V0>MS8wI!X5NeGViQ7t7DhuPUr^UuJ>_=l2`g>GZ%BFeK+~-ELLLjF5}-qOu|?*z zZ;k_NpI%piGTb2maMp{AKVf5g94Lkl!z|&{zy@NO#pjfe2Hce5|SV7tar}uYs#dHawIR@?ezO%)6Lj)YEh*7F{%Et z$UjM}(Yn9HR!yPmsO`8~^8_cxf1qEfTuZIgLzv1}*@0?t;@7 z{LN3!1$+OURk$|lTF0rE#f9`RHw1Kl(3v51DSw{Ap5_krB2c172D~aAuhF~ z2On?T+B&A!mMwXb>Sewpy?A-uvC(x-Pza+@$KfD46Q=@cOx$Gk%x_uMrw>c8v_#ow ziP3^pg5uu0ivv;Dqqc-97yj7I!i+G2S2j(M%?1ZQ_kbCL@h8<57|KLzz}aTw5kW{T zHmOd(DFq0gb)uxJW-DnPt@9nNu8e;g^L8RWa#=*-cX8;6%me8bpQ3I??}n4FI@q`U;FJ{=GH%#htFh^OM$uf5x37hD z(3hwLSbpO8wc)TWHU|Qq-D+B?jWF6jd-?sw-bqrO`MVN zg8j}(m%^K|``w(m68ru5pPjxQB%WFI88JGNv;Tj9+ky9ouJ{^miry2#>P8ja4d2$f zbqo_u&wN^>6}0g8qdPV4-qZd7{*X^&{>5|NA2YrZ_sgQ+U({N z$Mn6epz;cr)3e9bGuuq|EWFpUzm<1yn`PiXjn5am>_z>DhXM-n6P_#n-86y`)+FHF z{?BV={UPcv@5IBe{&iv)~%ld?sFB&!YU##B0=Wo@FhBE5c?f6Z(qr-iF zI9?&2-(KcHp??#@`)cwOd^?0Kcb>(X7 zweLsHC*-yXK8waIS}Xm1Gk!V0)Ihy--e9|V?f$hcWpND^+%in$Ibl|ec8oo|99Q>V zwk7tvQE>NthxQr9RL#}5;3Y@qwAJ08YugpRMSUnP28y?vG&{2M?)skIF*;4~JNE== z=hL^G0t}yTP5~j=YGy$16Cw8wik8KlE1lFO5Rx30PM98CxhM^R@ar@xOrpUBL z#fuAP{@Vq;7Bju^fwF^CuR{bUB2>(J;Y0|7rPBPWUyh`P7$EbIACWV<{zvWpJq7M% zRujC8z`Y6slQHRq0E!7h$f_KP6RpqkfrRgxDO1D!k49=Ga++1F3f|hC6R9& z=aYD2K5sN?>zmNWIvhk+Feb%|M6X_2&r3{d#F=i33zgVOX#sL{?;ySLd~Kv6>_nH6 zmJYf7 ziC#2CplGJ|r$nUWp&EZg{rz*MT4cpydD8vAemFLDJMNr{Sv0r14`%Y8VEPE6&_3rq zEZ$A}BC?f6ri<%DwK($GpY|NG0=~N^=IJ`A>@a~W???-r2|O6znTJr>z)61o{MT<` z!CTTIraF|WQ;xNyP$+LX#-|*rTNce3d;ROmRL;(o4ZNX_mN!k-#j0Nm54y)gmPjJe znI%o5%4dt+8jgWf=>pUu#cPm5fH0q)kwB)T#+h0k^;NDO^fCS(regF}mZ<39*`ti} zy-i1DQ4jpmHVv+(6l$zArim~dV9>|t*Z$`UCCp8Po|j`>Hi71O;e{#)^3<r*?HZq845MvGPK`KK%TZR6UKkZ#Vnyt;&A(-TN}tea@4uYiS+y zU~>l%pZoVQ+@rh-Q+D!(=th^vn2{nfQX ziNB&D@IM|$<(!5_4G?8DGhE4Wb4YAJU!L`S2y3C#_NA;wy9 zb9hWp1JuxeitEDZ{rdO>gy3@-f4=a&F}(ZLW=7NAeQEy#j_<$8I^?nZ9>&_#O=nln zB7E5AzRv4%(UNG=l3_Hupn%$(j0_T)_zy)bW@$q@jtvU>D-4W3Kej<#+;6MmUAQN? z1A#1f4D)HGvAJE4+|lESm($N_#hGS{2SN5>viF${;DGZ3{`)h6KW5 zo@L9RP_0oUAyUlfM3h4zQ*(1m@sEAK`f?8zTK!+5RgOIXaHu-I+Lpvvhh;b@pt%aY zcL9~kB^VYlcbG3`S4Vh4&}MY>0+~8!zZ9H%+J9WAb2(9)XH7YB0^$>D*rNf`dtyG9 z*^X>?);b|?Yjb;+wz0|QVHx@g-5X!!S?eR9mMPW?YW)9WGW=D64xIF;`Der@Qn+4?;x~A$`DV% zj9Ty|oPG^Z6U)i^IVxn7a%itKzkt7ZzEeA^V_w!3B)wxHId~#%n#4LQ$@s+ z(=$0z0OF-+_;?yk^~}c7NQH%V1wM+C7njd%V`7;5Y>%JXb#B{?%H_&KzvuGb5=rB{ zs>E>>CqKg@>uW^E$knDNnfJ7<1HyQcu>H6&`RklQjI(=@>zXYniFs+ zT+#X3LMj5B1hTMI|B+W9%$4guVI?6!cS@8#eOz!|SVXZ}tI9tqei*{}*3^nzOwp{d z*39J1_O?3|vo0wsTn*+Y@^5F(87DsZs|6z~np#q46lP&+l+9Qfcg7|qX~uS2s5vA% zk`_Ufy`$6jOG8Q_mBz~Wg-LBye_|+`ctp^@*>NG2F8$nfa!WLV@2-?0>m%&W$Yd{l z2fc_gr<9{wr`-AOdI2zZ3|JMe-UBh|fe>}a&E2_RF&BDkL1r2~!gS*pBWvx5C~%Pd zWS-p6kg`}#h>dIC{pVlCv4#B}t;2_CJdHQ@S{47khn{X(bXE)>B!_r-)DKW=+%HYx zw__<~JP97E!CefU*3Aty=s~~=%Jf!Q3V_3wL;&5Y5o;x4$h`c*D;7$<{84q!J|Tkc zY)iHN0JcMzmVfhC-Oq$(Qo??c|F>OcDP2#3LW@p)(npDItjh{q93&s79_|Fn6Sv?bb3 z4Ei6?C>!c{;XLutaj{#AZpFKoIsE=I`1Fs%^|szDvAI8Kugffr3NGXLQ&nKT1HWA- z8$+xc#Q$r?Uld|ZcXWifE1{l6T?yxT^y^ggHqyE9 z(sXJm*P@&Qyw-I}@{E|B)P9sL7=Qt2JsqygR&|Qz3z&Y)>|dV^OP4c3tmIF3Cj-=XL1t+Jz3*PQ8U^dbDg*W&G^Gd?-LfBEJ8Pq?c#l<5 zHz{8TYuli%?rgkK371S$GuQFv_16;wyOc1c_0Wm&B@hcUO}Y_j!lL zb>LMsI-|_!?m9W`iR&pRLmPJHS=4LMICHrPL0S>J&0h6y%hLAaF*h73TNO)Avo6l( z96YCM@{r7a#y7fj?a@IB5X43gZO)c^As}y z)%=g3{pkveI61}J<|bb09#N!V&~fYGg3*24W#|}%0!elwr|Q)h=joBS{mEO zlUNv%GK z%}CF1Jd;DJ;Pf!ZW)F+BeB_?tH09g;+n0&8J6y4Dt{lqFk%sXfF1qHS2YFE|_$=1C>zyoSoe=PMZi$rn|N|&Sx+-Zi{bp zwVfzA{?M~44)K3gGS$^m=R*DlI&3*a*!I}<1>M>WHYsMg zoHdGo9+z?ioZ0BI8iiPZ%oQ$ zn`^-fZ#!o^Nf#_1O6>-$w?+Hj?)%NuhvBHT<>g_ze~YCldP^u7iSKj;4a<4xH&{4? z(=K@4mnQI+Q)$AONxoI_j5}3{=(P?r%Q||R+| zRU$3j`fdwxYgDodEgZ(dw@;)d$`OwLx}xd z-m$m5FH!fuS`=CKAt~t7O!m1XaW>?d1i0%$<@*gMcw+>$NN&O^8`N*LhOstYmx_zR z$of3~bF@LIIKgLTm zk(>m|U0#`w(=tZi{e7#rVYv0+m6t>!*}WKEn82uYgkZ^pQ?1I;K5^(qWf1wd>0({l zYowfeqO=$IuCWwc_PvS%w$hiUzO(1rxW-rjfkT3Gc;n`B@sM++h^yvGAx#t@1_v)F z!>B4s2eAO+{{zUf_rnKNFJ9~acWPbH^Qm9g@25o3%OIBokgI}09u?puphJ4VxJlF%c1=RP65-SKe@I3OTJGQ!V)mRiR#ELh#2)+UT1elWh zWyp3CniNh!r0Df3%72`C8ED(_;8F2s1;f{TB`c&($#@OGjg!VHC<`MHn@|Ad;kol1@M)sM_s?Cr9N?C zwWk(|*Q3do>Lg)PS)Fu?IrCeSxk;H4LvM~W9(B?wB}wh}>(y>k`p;PTD3MbqMAfh$ z)gt<}=n5_(bvP`uUHC=&mSXR=$3EXi{ts~E@%JNRf5#WEjr=&gIXB;K`wv!^DEIqQ z=gy}#N*zz+Nm!P^T2%xr$1Nf3(=9Pkcs27!kK1Mk4bJQdzIM*!|3l2lH8gwFPo^uG zNylt%$1!cH9OhV_k|eNKaau?!i8|)=mJ>k%=vHlvqA}XeWWQZ?G9+mLvt8pcN){g? zAX&Ghig!IjOFTFIYLXh(Ap8=)#wHUU2I-NhbjOfGZpGqw?0uvgWa$Ww6?dt~WLa^& z{q)J39rJtSolVice;BM6%8E@&0|9+YuFhoCOq?$Vc zLxZbKCEof66uhMH>-^eu^@0X@L^8E7Hm!^JMkeQKZ;>veQn^q!-sbfO`p2k69})4G zVH5&K`YxNqX}Kmx?SUez@c1&t7$7M~s#)#`FRX1Wr=(f{1|<@d3=ffP$wyf_0og*| zs^D%J1{j4Z!p59H?yCai$L=^hn$}r0)msx$pP^bWhEZQ)_CyZIy?)!#QZYAqE z>e}0`7dypC4DJ0Hue``o18A*}Yh=dS8;1E-gZjaYngn5Lir2ztiPd-i_ZEKNbGwZ0 zHdbgXG({ua7|e!8X)jf5v8fB=C4?(XKa}HUrS?5&``5Q$j2_+p)V*{cM}m4;HAtCb zIp0$sH^vUX1G`gBwni;?d^x4YL8$IoBolmSP)tw8Hh1Fop|9x+t%R4GQqp)b$K!-G z*_M22WxQcnc<&~sx#{#-U8ZLlzjcA7ofquayJvTHx;R?KvzyRj0NY0eLK&|J!~Uy` znVRNjuY9uf&@Tv3)N+ExVjP z0oh)nlK}7IzUnZupjZlOcfRSJNC-&5XEAl3&r|ntn1?@po&r+FEXcvo}P;vHdLlVknbX#N~)mCA2o7JzMf$ zva|)9fpMUArK9lP91eY)eVuESLoNz44RLJhqxCd}NqMu|!F5&g<$-X4X0F^wmLnSg zU*@T2lvuNr^HIe`s&F#Od)yXWH(}QR_>KU8`j^|Fj{dP4TqHwGd;AS#dSg=jPe2xS zvec{nuj~jx=ef_PzO-iOiRYufZPvlU7Ds1ZmqR&^&3^t%aqq;qn$0knwVIkD#_O^< ztMm#?hJvCz-l2~7kNJx&X`tm(M zH#H|?;6Cojo4w1>oEPLo3pmqnG}erM>dIKFnEX@`yQvV?Qzs=Yg2C6K6N5x@sMcqy z0fn8*Z+>lmxG3`2<~okkOpyZk_ZB{e4;V;AN|w*(H$9VLh9Fs>AxUscw%hW8oDkOd z47#*~bZQeC{l0&GKt_t{^}CD57MUfBP*XRfRlP%AOXIy9J%upDR}82y+NiXuDW0}2 z>X_js_crO|OvcZI z8Haoe zLR@H|>i#Z_4&&hN9d|CuzE0?{UF~=clJu^xIacJ?V_Rpcg*NT%{Kz-NlU)A~4=5^0 zEo5|DlN!ypK3$3wpYSRyZB^AHuOVP?mK#-$wW=obhdj<C<=4eWu`jY zw>a?hbityoV&YxzZm%l>;Q(oPlNdE1=N*Ty zhLBj3t0$M=-Y$qaYFCHZKp@dpD$Rzl&#LJ-B6t~wc8w3{f9?S&%4XBYW9GfrH{#0P zP~+ugEqfGKc9juKt;QQ}YOIuFwa>&YJ&h03tzW!zzU<>6y-FSoPn%si>s$ugvN4_1cY( zuQiak#=#%iJCKy2|`;jucD z95kEgI@5!UpA*pWaIFi`)EbE2gD@feaKzmdY8S2E}sm7`8p zkAMFlFWwiJWDZcM1iq@Bm%6oB6=9{$RSTIU=}3(;`p!R?M#I_cT1OC2b5>R4k0E5; z$pS|ORR_-@h_X~lwG2yIT5pT&&^YJyzJbC%^GizibZuE$b%emlNl>vig22m;FEVM1 zG`p26Wi}4DIw2B~Gpdf!S@3fLJfZ@YQx!K|uEx-Z2K(hTB1aEa-RWH(E4p5G=}&-@ zcpDglJpWJ8!F|lPJ;cKGo+f_S+-BBxA?2OjnvP z5^XLs$i$B_NBLg9#jzX^WkT8fD#N3vj?e+1BaSJ zLjZPf{8ytPT(Y!B2nK0MBultOtB^1GkEAxI6t#FGoPFCIiy-a)%v>h0-tuMN(vNl< zHJLXVsp5b|Z8cHtsj*E>X-H2?)3lZo6wRmjpkWeNIbivLMd0YlVxP%{Iq8UF=TY{O z`-}|9Bqi~!jM2$(viOYaDiRkSD{5SC5KmR{KhYzhmJj(93?~H8Fw+ z+TYvO_w+(it{|MOcF9oIAgbQAxWWqzp(vXmvD(^i{H_!=Gxf%bajxDWE>uve%$Nz$ zX;?6)ofIFwLW-kJ>Quo&?u})Aw?!_D{{bwo=bygSjS=RE))|VpDx@Z&N^*C_;^NxGSL1Yn-w_PLW&3_%2Q0EQ#?wyyF}6jR_jvbKDTQ z{o4ZjuqCaE<5|*YjJq&mHhX+d1xQDySLS$hrNVToyeW>6`FGnmbs%6ze@CU_05hQ2 zsBeG-aFi0&x*&pDbcgt;m$kQU2>gq}Y;bX%L(c@Svf?sLYvcPn(Meuh3bO^R-3;zJ z88Bqcex2x8?zmqGPl1W)y75LxQ^j`0adtm|@nh9=P58gJrVz}}d9{Qd998@u7_@c( ztHDR0WRw-F&yWc#hpgC=okhCo(&re2Ik!;Sa9XqVBD%;^$3g_+3nZ~;JqT*)Rsf|U zxQ^yLWMFEn<0F8LcUzB5u9{wwRFB@9xJSjyvFrxiG>JXD?Q6|g_PwUxtlD4tjK|`J z0uQIlKqZc!v4yam^9Zum&e`IQysii&l}Jfe^k1)%@A}ak1b|5xBt9I7TW5eR zwKk8sG};SH+%i@sth$;H-DaXtR9o+HjaD#gYj5C%a*SD&*!H1YN*s0bm<%Tfjc-bmV`n{dWAq#536M^QXTavKd)e`mt|euiPunm-Bvkvz1OS z^Ylt#xXpKGlP|$t3as-ggmLP66}R?|DBi&A{lMOY&%BCXa~Zlydw)AR+2YOb)?~+a zzZ*-mZ}j_%oI4@^eb^=RxW1ee9@x}|%5)!oS>LBgNZ0H7kWeHSx%}*CNL1N{rF)P1 zqc(R92km(>2fM!c=sGDw5b@Zr07b2tecky63VJzz4U`Q0ZI&GO+b!Al`nMC`E_{m| z@qhH=UL)@H)b$se+H;=H;PGsgP_>uZ5lyqJy=JMSH-t3>?s+G_{zz0N3P*pB1UHOb zd}pxb@b7Y_RKV947x2^i5q0x!C%8(J1xd*5|FSTemY(N@CX@yG@U{ z$UAj)K8JWb(u;tK53aARJZQpXC@Oa#El*ktX0b9Wlp|* zHxzkv!-BtSNb>fc{Q8&X$FDz`-?9iP^K&}65Z=>Xw25dG|7tS#oSJw4?tI8W&Wp>{ z-~PRGKUp#I%s8c@KkEIHCy}QY7~t-DeT65!d)+f*VT0?fS*jNOkx$9Fg2vBDi|@9g zzXkrrzSzHTtZ7$Z-}IfrY6r;2w?(&ief*32(W6*ZdeF?E_P*tFWsOYD(;!tV$h_#+ zTM(55;-U0#9O0nDA`DP!;X1QgzD03`Po>Ug~ zSgOw5%nOeMsg+a0r-v4z&)bC`x^vz+D*8X}Xd&(Xdu_*eb1?QMcl2w!=GWXI$J7I# zzg@6-W zyUKaxN(~r?IHqq2!;-^7PW5 z3wc|wuN&UZ7@Aqq@~=OA_VqT6J~j~JI`CpmD*EWv#rjTVg+d8OTa^v+J8pAZc6>N< zJ~+a9`^-rHSf5*eV_Xf17uWrt5A}l05!@V?2{;}5>yO5NAFuQex|tq7eC?6n9*nVw zg`R5hdH4BWOE%{Fno>INO-A*qVt_V{nD|SVd;x}rn1s~f{OZAF56$MUD|e&ro4ok& z$zSC+?ZN}2=Klen+5qnvKR9(^*wQq+dD4TcGW+*>U}uPhLNaZT?nare8j3J}5Ox-G z;}8P(v2EIZ(^pIR*6`VgnlpyFr+s%pYHA(!UsT%L_FMG5uevZ|@bYlfo__bMDOHCi z+X_rBdvsiv9lBxgxBfT$#qyzw7=7#dr6c0$l_4}u{rsv+@uYTa> zBYmabjoxN_d_kl8@s5^meSoA4&HuyizGk4Hvtd_#a>dd`Vr_QyBinZ`HPe>>9j%Dp zO-qAXUc9hVPXL7(!~fmRv`9)$Fq_%=F+=pO$!zHvUN+HU;1ApUIN~Z3H3DTMz|u>7 z8_r{Y_wD>We_{Fgf`6XI3H6lrzLE2~*}hh2zfh6MPoCd*dYgW=C3)A= zD_5R2UU7_w>Yj>DjCr_}Z1#2cmjA>(p5$Hm>@aym#`aK-9w1HkYFw9maEn68b+QCv>=KiWDD2%@T#MI7;VW@*CvL}wts(e@rX^yBPS8_i7RmVMzO++6b4AP zb<>@Wbfwz!a4lcR{l;s{zv37yvn-F2)YI``r_nerhz%T19+NRol7=JmsxUi1ICH>0 zm!|;OAkKb!*!^A=z#8r{Z~F4#ZS~D2A8NE}gL$ z?I!Eg(XZJ$4b{UcYIBy&OMiymhPAZ|724LU#fo4tA7Z&y*6I{VgG?xEjhs>xpJcSU zWV-!8MYKj?m=7PiBj2YK%UA9Gq_Fb`f9_}&&lF$qNzMO!r?N!Y5Kf7oL`0(JXK_yj(FCPabsfk7_y+Ek3Ti zsw=Z5Zt7H0)}fCPi2vB%KXmV}oDv-6vU;e(yM4&wG9kBItLW~NPdjG=QI1Fy`r-@C zob>0tM8JnyJ-D}#85Yun5G;*)>N^ufI@kLzmldHoIZ*K0jKXJD^`HLW)@LJ2+fD%E z=AN$hjFNMfkG^!A$qvy}Dm)IErEMD)x1LH~P@8FXHNdVm&nZPJR<14$gZ69#)j?9F zTr`-=N5OGq8m%eHi$xuZqm|KzNOL86br=4boaLH z?DwP}ZGOu=<^5|zr|BOruGtTd(xyL-#|$7yasRc?v~PU!e}F&8yLJ&MvKQJrhjRuE zFZJ~Oq^6x-jkSvuX&9AoUU>a>S<3i8AvYINh(Nb)E!mi0#mvqTOhtYRxV}Y_?fwmd zZHlMKS)YZB-90OR6#5-Lar}eZzq8)-IbW37=32Wf9U5oq->C0m`xYZ(Cn$I-HzrFWjNS4Yx|G<93xZr)ais(oLiN_6 zb;f9&S@M}=i1(_JiQchblJ6s{p?y%~zWAlkNex+j*p8y3v=?-$5XGjwQr)2`TQ$AqcEJj5V{A|S~ z;c#EL6~<;FV8szAgxd1gDPUhkDU8wS>*i0iw;oDQ7H3m}@G_m`^t`v!xcnI=)LUe| zj@d!S91SB71XD7WuVHX<=JYS22XM&pM|C24tu8v{3hhhN8tl33C%P z{$vpXlaBTDZb9LT9iR-Nh;o6kSMpyf?|T2@-MzsHQK+{)G)dIL-fQ>rTVR8Bjt*LGEp+X|*al#osyPDWi7*z3Crl-|^{m_S*n5_Q_KGonsY;j$BDKcRz=vO{ znvVheOdA%!BH_(0URmS#mNGL4k&?h<`Q04JOK(g5)ZConnKwG&!Y)#kb7Lf8&Zn#Iu4n0c!EGcoyOE<4HRpOP6}Q zsGy5B7B#SKdT2EgOlfO{P~-V1c4duZh{$w*xFyB{1fK9B&nvd1sib2>acQ@85=BmW z+!L~X70D0=+TJq3Cxal>=0OCe^FXIArq##<$8N^32y`c9*^41$r!KrdY@bgw*l|7R zb@cfLg?~!0BX31Zywi_}-5VQJT6P%A_1VGvBEL3xVWcUrQuc#TF0m!@*tYg6W`PXsxrlnCcC8bvFMomx1O7=-B2O>Rlc?5r$Se zAjxxGoa7qc85|hxvPJwJGZi^V7@i)~b%B#G4Ehu|zGzfkEdKsx&c;ZI5_eQ?jRn9= zNB005$5Kn48_h~xD;o1|L3>YMT}-d)2zDuq$M}{!7$l`Ahz2o7vI29eV0+uTQ!w;zM0y~i- z&>J=0Zq_w%sZs>O#v}||4PmKN4?GTRw$Tu2w%O@S84{UYD-QQ$$`9;TlAwZ)$9#n1 zE-_@)0iB=Kb)btYV~COG!@S5Jy-IdE!~>~Dwb>tk*fWo$WrFvDH2z5EYUWZw>Lw9n z(kRn~mO6U4EB*VDnw|i8Jb_z}b+`5cAXSsxQ6lRI7zOuV6Kx5AanFzJsIP~$%)1Scm;|i*KB$pacA}wI`x{6@g6{X^E*=?DUrJu+YB7Nf>Y)MW(jr-H?c=QLMJ> zgkJh#tHwm6170EF8J+HVe5S^sZM>FfKtT%7E(dh=Rs3jCN8#q)7B4XgD#ck+#7-Cy zmvc2iO*hDVF88rGoL^T5&o5$Z0tyjO&IW8thJl$b56GDSD1vBg)`ZNy9a)`A3Z*dt zMEq1a`B+jnA>O*oJQSMNTGnq6spyX~A;uxNNXw|V_~|a6oy}0h4XwX@zTQ9He<6@w;thej&Qmn!pXhv9~K4mYxn8 z{JHZ#fRS=wuiUiGw^p-W$x5)2=Q`9FMUgZ?#}eaSb!&tK0If5po=GbesjQD5R&aPcvMzEMF4~lwO`z!V#s782tvg6 zD@IA3jtO}8iJt3JdkuAY(eX$qa+=NHckQn8waLS0rBpu>J({g@H246;uE?1fit``O zKb6_0bi)W&3ZULMi>w^5p8(wBv7pbW9oMDxO+5&sK_0BQME3YX%Cql$;LADUk^r7oPfD8~MV5b2Ow2@rK|ojW zOI=ns3Gr$RHo#y805stR+h=+3$@6ZPO3S1}7rfc}*y6ZZ?$kC4{|FTr?m_i2>v!=0 zE@vjudylQ~q%;L||I7{!KR1ToAb`dpzU>PmD+;>MdwcNuIJRgAWvW!{bW!Sqa)7EV zwPc`l=y}k=Uw>9}b)%Y*Y2RjR*dG?V8RoDFz{M|+qvpAZXq^3A&1qYxv*!^S!f%$U zCNt0loY1<&+sWndFTbTs7CK(RV^sFKo}Au^+R``?C)OH2Bbk_tSDqJ9Z1)>te)f=3 z&vlv89O*ko>*tCs+MwBCwnS+lB0>%j_7KFUQ|_{CloHnUY`J5!EgXB>qpjBj(5>UCaKIhfhs`Lo;?{g{ANB= zH%PD%aH$xfZ>`t^k#B{soBtt+U}WOi;$#Jlm=%ll+i6O)$=F&l%_Rp*KG(ib&~vHw zvf-VSz(;Cq4tRo0c9=7@{?auSec~g-is?jlW!2v1_1+*-?Y@PO+!%Zz$vqpZK$YF& zpYdX5oI$6zsp}I(O)uaAG|C)NW}~KErXczn@Im!fn8~$ERRD;5QKtm9&B>PJ z?ZFWBZCNVA%xQC|=)_iPfJ3fFcZ1Gsj5NNg`REW*h;S?}cht1S7ryE<7>C9(=EhFuBa3SoS)HJr}p^SP96#K8?ax@ zcF5M~$=Mc>R~{u3o!k6fG3EZNv$~)xEJoH+ybL6(<7+9N%dl<31@T!nR`C$e4TBQ( zBGK9z;AjWzL>xUmss}eU)gI0;3c#*rzzgUn*TGbkVNYOyr=;$Kmr20;c{?Gg=lLwp zWfO4E(u<1z9-d@k`eyW-e@%muXOJ>_(=?XNeTs%~s1!1-)eX%7h{In?!^+_XcT%FH z+RKzz*OvtS;>*f`DGgh87g(R2t_nYdiwTvS$QCCM)6xt zSRY^7H?+TDwP5CKo02ElvtX%PYPZ6?msh8=KwP@`R1ozk(^k*qacR!3X2T0vfJj3<(t%{eO&GAzUsL8>~Ei4|6X4G5`7{e z>e_N+@t+gSe~qLF-p^e2xx-k0F=B&pqa6+pg$&C}fm^TqiVO2SyKV4odf(r_r`~G! zA(pOn`yBmeqy9Ijn&-N4CiKv^l=IcM5>LLmU3fUn)2b=X0{Ayt7KN4N#U4BI==Enk zV?&jGoi9ysYx4cAo2P1;(jn^)xbGi5xg4x(|1%rS%g)^m$qsRH_`r$N`lKHTBkkLX zi5dKx_~Se@XN*A9*`7?}f~3X!V<$1^!hld4-_YwSWwwRBX+hKidYyiUbTC7S#w;Ei zhkyv2w%p4NM9aEb+L|g%q<4z1h!RGa>y3G{99xs{ou`KFUJj_e-T%YcRl+%V>mV7p z=282Bl(?OJ1}B&hN4r^;Vm)o)T-4~VYXrUenEDG}!nV#>xa@>{dARApP$_=XR zMJ`FVDX$-N>SBj>oojpRLfBLgkl`TjVZ}a7i@GdMYwj>|!xFz6Poh$#dmAKEGaQKV*FI}mu z7LK4E$Dv&pVo5vJ*UC<`d-6i|_wswbQGerKSQv##+yoWf8OB(F0c#&7K3&w%?Qj6N z481vj;OnD%NXO-&$+!1ToU90?OIw+0=lM8+DC- zWVL?TyX#?Pb}NLzDeI#7vP83k9!1bai1)V2&3q7uPpu?Y|m8@ z$``40$~b1kCcwTi4Q^6+ET>^Ec2nHzk#fLJ zsabJdTHMZBu5@|q;0=J7ZF(Jqe2J^Mq=jG@+t(iPP;f3&XcaL?XJD>M*IB9Pp0d7%!=>p_qccE$QdC(kx0`Nh+nqTW%LUg5GAvrH0bc)KCwVLab9JjTZj#B55l8&)CL3WE_08^o2;oA*qW*aprsw-Sz5nUY!j~m& zE=opL)NPRrfjQ{CxH2H=c-C{M@4J;#dX4XkSR1c!1GkP=YQAx^wDcJ^cE2k)cTZ3p zo2v%PWvXDU1hc+cjHu|Kmuehlr3_P>u_*(!0&k}35!8I6Dobo01+`4BL()f2MezmgEMy}u1Ses z^}uX{$#J0{kZFZ+ifVq@I8KMz=Wxfg-EuAsk}fh^`c{;#RIB8M`h5MR0n&Mk@;s zbz~rH9Vsw)-9O#6OEHa!7AIfPb3_egaR}r)9Z|6*t>6>7M|ZCoE`dWwisoy0x#$}A z$bH~U+3T#z zbcoan(Z{D|UKiar*}!3PQUlr%#zsB}RucyqsD~FjEpGxLfK}Si?+SfbE>czR>2~-dJG{ zI? zGK@dYrmD1~K2=GhU00a4aYG(jI#r+1dJj;_$uE%Ota|Wbt0(B2oa6K3sk#&?nQ7); z+<>xt%GM6 zB&IZ{5k%qg%iiFD_oAj-fU#vl_hpN-{FvW^d5t|*a?uY0mh$oy9n4drAH4f@{zbi0 z8X$PGq@5if%FYf4rVl9Bu#f5O7PanbpdfsZwpz1--KEZiI?Gn3nFIo5Kq12B2zWR^ zCQA&LO{R)1vjNMwMYYv72w{^)j#K66+dEUrSf06vFll8sbUg^ z!t~c6f7XF}A}c>K^=?KJSfU!DGp)^%mo9WbZb0POiBRC^pxx%4r$er;CU8~oB*56| zVL2*g(2>v5X%*M6d6}Fv>5lcHUKyt%ZZmA9fo*{&Z{y&FD}P?@6Nx#hxcD$q7Zeep zZ#$0%=(`p%YYh_>i>Y&y8)`KQIt`!SK&& z&QDw5bfJF!+tBY7e!2_^qdCQMaUzZHi~h4$4}MQ6Zmg*=H}>87ckGs^cp1qzc{tM8 z-W&AJ4N&pOSUO>IVA~EUFMnHM9iDq{zbBs|t#+95>KPWAJ?gD)d?T!bYEvii8v=2y z{X92p4I*yZbv>s)A#AK)>Bu2-ad9~z6TX8$YMLlF4v(mY$O5}e+@X~%sanfQr;;i@ z+J6fF#Hg5=f-9SNQPVP@m7?Fq;$&HaB|I_U8JZPWcbTtGmBAnXOIzT**@YWeV*1n` z3TEsXA*CE{aWDC;$o>u-g;L@YwSI~0ZjCl~Dg(!NLq^)kJ^g(FtIet!g1pzfs(*JIY!wm^U&P{P?`emM79cIfDN`~b zWb*sJf+`^S$q$ZglbjfV)jlC&sqm3uqA2m+e7PC>B(}nnAnSWX2kM%@OAkvBO^;O_ z$(K}3qHY4?u(r_BBe?ml90PAoyOxlQAlq0W9`xy3x1=#`d!8Ske=1VKx*L@7rP*&s zNdd}wPN|7HpAooJH3eGKo)^zBZ4-sY#j~?~l%y`|hT@p38ocejwyNGRYr3FDE8*kU zS74_p;b zPSYI-nX4BI)2D%%RRL|K>2*l+o6X6EMU4;EctxWHjt$kd2bj_AK*znbY=6rcGi7B{uGw=!j2@+mWtlcT`!& z#ntiYxbR2D+QVISwC4Q)nr|^fQ6ds<7K)NYD`RQxj^Z-jswVV6VC${@Bb8lGTF2S@ z0sd0;*obu}r{Oe_trA zq`nW{MlZ0ErRX1cFkqthme#f=r;#C=+EJ!w>@UCbk;G^(cRmRfzw-0UTOf6AG!DXc z=T7@B(PKIk#M;EZJIWwsK|kG##2$K)9Yxg(hzjjG9n1^xOz8P}3hXgi4WdCtW2MM= ztp6HZHS$Jwv{)Eor7==MP5;^Yg9rFF86N@4%GR-&3{j1Hjbp|e)Wmsu8lSE6cPoOJ zi)ZaTjrGaj6YFp$F~W~Ilc|ODr!K^phmGYqWCCW>-MGPQj_SBJg)0x zwO!%-a~;g@Q!iARdb(ak)ewr*uIJtq>t-+F$K79YI2gGReFM&hI*Ae~HkD;K7q8?A z%^@~nW!by8HM>oHPu2ez=EM7fY!@&6J@Qao)FmN_*^&bOWXvd68V1(7+`c#=s_|}0 z?Mh7SIq$RH;OBs7NtaD(RrK>=^&8JV*~xCC0Ae+?F0cdE(-1hDlRJp-9EnK@?g$ zLJE8%h{d9r%-6f5qq+685Hzi5lZ&RshFC|PbS(RRXV|PE5|2F%73I_c4fm|CmyAan zB`@#3*QRbYeLADP(w9vXX)!+RZB1JIkkdE&Z`Sx9_{GoJI^)fNvg0{FM7QpZhaW%e zB45*WaDn0MTZ*}7WQtwU6*)On_KlL_mPfeYlGCoP``*>=zVPJLZ+*-9ONXZS4Bojk zlWhCKUvu@m4Wxd!InStW;553s!A)^EW1s5*O6)c=`|FwZFZIK;ojMtniAJ~R{9k0l7ZY1U9i8? zPuEq?DJNm7q#4(8^G5acpT2)9pFOm!OzA#YHJg0+=8eG}-@|gN&m>>G{oz@5T6$vm zt#R*Z9DJJ9ot-1B8*a9m6|HuQTbPJM{J7+>nT=iZMX9`J?_H+fU*VbGx;{O%wS2(< z*s^nW(&NG4`vYg>j_d^_&SU$gZ!Ejvf4OAYyd=iP2fv9d6{=CPx<9!!=L=L$?8V$eZ|G?*I#TV=ZMok&!0 z%;6ZiqQYB*`Jtv&Ns}RpX=ws!X&@8<1por}Hw6y;FiJP}m+z0=-qRl@pad30<4|vf zYgH&9Qs-?hRADyiae;ZlW4X_ILPuA4(FSqm)7M`|jow^sRp}7Zx^1EnVHfeLxO+UL zA$GA-A1_F+w*A#EeZ+(I~o2kvTVs&KPGPS(5bXeInc0)0n zX`g;fx%TmKS{eB?|bP9+;RP<}9uFL2x|lhXHZp~O08lAN2WH~QkT z!nF=(9lzj3<VCwX>nZQgX^g>vVsi_!Tf z+Mb>+ZM)X`5p&YGGqkJ0=C_@;_onBG8yiZQVU1VfBXD(tGT5(|O18cSeXCiHkG%8c zqX>t6^zxycS2qZfv)@f17Jw-Jo4K0Bh@uQ zvMsYmjU5(x{`}p45h@z=g>P6IOv6*^X@7qO8sV<*6&4AD;s#LULdwmT60|D#o+;cX z{hp9y*@aW@&0bErwB)#7)C%Z5>UgNy^P01(c}bOD3ANU?qPV)+3o(EcRf_~zU+X^q z_lE_2PhT0IN_@B_8~cTET6la{NBz9e1lBP0WMM(H9?ecfN@`~*s-LfYGh3Xon(UA| z{Dk4Kdk!7AM9dDWcex2KT@*})!T&}NU{B2aKf2ESpXvYq|HB+M(ab4PZQ9so!v48C61LtFQsZORez1rOK>)?d` zJ&@_CVCZ;M@BG~u@p29VRMU0|RhvHtr`XAMI zDrW5Njjt`f@0IjKM!YGNgCFl#zxz5YP^rHJczCDe>)a5$8%fi}oT)jJkgU!a9hLG6 zOwP!_`LWZjPYI|GTQaVS%R0$V--gHAozXK@ZR&JCsNY~awDJ1o=LfGH1hIMpYwnbM zs{ByAyWCmBzsz@s-~RWsD9Dtz&pqdsP3bQ-xM#F9+AW&aRHX|S$uXy;#{!d}BSsIs zw#B@lxhnt<3loKw%s=NzCEH*!&b44aH>Gd!C$?5)eF2pt!UFJ`u0aZ>Ps44u0L z%q+An_gj@zfR^tYTqekFy(D`baTs2waa)PQ3ADJa2>O;fl zshO>F&dMkRn{mFyH;w-JUUyW1b#RXt7fRMOM-lXQQl->gHuT<#TPDB-r9BA%WlU)9 z6v|3wE(^%>?v@3NS|~*m+mTC;ou5_IsN-{ps_0-GQ4f2x2$%%S>g>zG13oKGLm!8< zTPVFBdo}G!6`s$|I*WU@s`dH%w;Bj-1psjGUw<>{=WeB9Ca`&>85--X@*VK~my0+G zz~Im!8(N1JCQp31twn>A9`O+K3I2;JqMH`6!=c!jOBUyg9++AxfBRvPWO%n|*YuFk z`?-1rlNL)M> z%o+yFb>Wg7a_P4GdvCwyl0mW$K#}4q4H}TE9~ODkS3kVDy;R5{HtZVs3S@7QstL=9 z!L!qwKcqJiO?rggD}Da2zh#bJX-uUB~;PgRdv$8Rb3=!m+^F~mrp)_-Ec z7`7cBZ1VzjbO6c&f%lJS#t$#_9;vz^S=p{-HUBoA89IT)J#?JEv%Hm@lq(vbrukYA zYmBme+NK&Q#H~RuRmt|2#jsphy)U%@n_+%xUlfO}H_e#Ik#3Wa>e-X1?22@bP?DHV z(bV78f>W986=PHddLfeb9H4{*0(nxiK?Gnm#}@!V6bcpR`WE`j5a|xI0hbGeVkV4z zR86Lwf357rNn=06Emng2REO!o#Kbombiq5fRvB-HS}{A!Jd#Rnp(`>WiWv+eDE5@A zH=2m|A*p#mw5`CD_`h>vSK=3niUlhYW#;YH!kr>fBXlJK4o48}Tu@FO*>W66M8oX$ zMvSd9r@E~dJW3{zQi|gMDSH&|iZ-~&#VNCPhFj;bf=uWGM0#5g4_aVz@Z6}B+V^vP ze0P_kS|cov>A_ZHpdWYzN}l?3u-1)H9T73d*E$oi#PSj}%er`cT`o+$q#A9898`z= z8SjSn!`lAb4&rY%TouC3J?G?AxfLm=gCX)#N=~hSQ`#-xz>1*DCe!Z@BNav!`rpF}b`bGo$jksC z8SBd!I^8qMFBVk%Q%j1U?JZ};GmCCqa)&UC9cxFj1qVt8?JG9dQZ}}#`*Pi^)j_CO3M?b#v zN3~e^=Y+!vlt$7Bb$>Q&!}TrBzQ$)>ccwY&x_Q2C;d7Uo-2|QACIOO7f)m?X|2>Z^ zz1+EcmgV59IZS6Ps-YNa%_4K84JWj}*riF>(X4My0KsK#WoR?M1~qsn!_Q)~RoJ6N zUMWy7SaF0YvS!o^SX4qY1P8Q(F@oZ8+L^1_e*U@>b)$IkzeQ2enT|uKjzB=1xyU@m zf7IKGM9mkw6n1p%e0?$vl$;vy;N@x8$5GpPP%+zx^8pUeDDzcUZ5=N?O>#ns!M@6 z=6Lz1LD^gftVIh>qF|RdYMl9e?|RRxM{Ny14WgDHI6tt0Hj)j&yAOE_(N33o=7D=p zo>!{?HnmZ?f};eu0%=!%C)3B&#M<6iCV)|1yzbi*E3ET5T`@6ryg3VK6#@;{ zt*#cW>+2_g+=m7TAVR8TpmJ6ZQr-hYfP*}p%=|DQ6R9T(hgFxzw+5jrT%%XP>~J95 zI*nhjZP(o=mE0FCyK8b7{7+6Kzy!zwmSbv;vEZ5c|$c?p@;wI;S=j zh6*O{%`Rydq^+M?97uWHGBR;=Ho~0LUs%8?2_xY;qp3#xXG7%|@4Nb#0?9)rptEnx zEGf?RU{vZk7%r}R9(a(4@#lD3J|X}CURac_O(TZ7KVUF6c!1!~ptY2ndYg~aRpD@w zgPaAX*wqrU6d0FqhM;GD48PW(-(a!f!mg#p=Z7Zbf@}l#<9`4yL3vB&d@1ljs&E;m zFxWCsjVvzkCJ+1?En#$nNrOuQUeMPk>3K;B4J%XY0b?o8YiWD#`a4=~ob1X!_%)^= z+}OL5$O*3}xk@$V*#_uiaVEo`w2!L8* z-i1B%CNZM(Mb8t|Ra?)4;T@bFfvGV!@BRt?AE$4&Fq~G&9RYkVt0#$cObAX3hxIT*du%CIpnc*WnwAttK#!UPnlR zgQ+7MXZn^+eT~a0{oHv4dCWWDlE;N~z{# zHW(-9Cieqn-BTY#NW^->yN@)>jOiVb#e$CS=QX2_Dr^iRjfo2WeRK93FVTXTIT>XI zPhKqb|MMTf+*k_3a&@`3HDp7jX8!u;4=j+Cp%ooeQ=^=}vr-0IVb~8OJ)ysI>~T<{ zVumrTMdyP^z?A#TlqJMx;{XS{7AGMyeTwtph2CH4+0kJ`&UnF}gx2vvYod6qN;sN{WO31phIjIv?G^F1(0YJP5@uki5A7FH2DVi z%88~zYyT&uiiK9n2BmTkRo1SX8(00q9Oh7qRzJqzw7C?5l&KOStL^%+>B%)$m-#^h>U4+wm4&f* zfX45ikUjqa9P!U>tXUv6_f82WMj^%1zqFuu>HG)};UV8fj2()Qb1lS&0jwY-e{`4ti^Tg?U-S-MlZs2C}02TNYv_bZ_ zdc{Q6SLg}988`Qezh zwmTQ>cyR6j)n_}Ha0oqk$Qn1=mT}+Ln90?Jrpb>laI;p-1u5s)aMJCAo&1UBqcazH zuV-#jWl$flV!(B7gFH8of*w`rY<3}433i8B7nDWG8H_p$XeW%9ad&*ljv+7J#7ugG}p9*{Qx#^}U5GC;HJQ5~NCEu$$~D zC`GNG3DdfpwDnLpyn;l55Haebfc*D{w@P=s%sOIc%#_k@cjRaWsts7F2RdPEb9}r~ z8NG&(bs*Jw-qE5=^2_v*Aik-JOBemg>R9r+j*EogkXp!zkX;Q(%r%?0)IG znhvCzAdt=&8aX9D!dZEb&!;K&Dx+3u$II}LDl>&w$6u1)sm{heict+Dr+o_KBXzZQ zkV(Fc{IuqhqaWnz&z_Zgr#GEG3(NUe!dBVu_#?a4xaz3YWZP%j#Y5%{X-X4pl|y(Eh}dWIpksv zARN}7(3Q0-H|-z17oZE_GH3(d8;u`fH4#d%^Lt#+9u1lW*Vx_IS^y4d; zUKNxh5dtSNJKet3egUo+-LrprwD#IQ#r3yuv{Rv+qFakLRA|>D|dhlKu0; z&@SvQj=LZYcqi>xJi}y=-C4^Dc-+e>gff!xx=kz~3Aqr?!n=UK-1HQFCc1`l* z!wqd+DhDqYP}~wZI546xh-(?HZ!%q?*dvi1ILXbOLKwEzzHhW0n`|6WyP{$2B*#c% z6ZMNwdt@7pB6_Ng@I@M=>D)TBPzOJIHAxQq4`e;dCpg4~X)wAd(|+rSr_WAHV=mNWuM zCaZbJ&O|9a^V?4u&J!F#ZcDM70=1?I-*p!C?)CW%BkgFcApB z1#4t)rMSqkXuiETEgj`ZKkAX|(GQOufBJ5CL>wk14qiXIztcC9sjR5P!2v`NkGx*U zKK^eU^gHx-Mr&!=-#@Fn0?a&#M7?;rXwOV~;GwI#f2?~ZFHN$FhK^7bD1WD}zZ-Cp zf<^|679Z>3=gZf5VuJbVl7O~TDdGBR7Dn$XmCL4ZP|(!Uj~tqNDAP&`mM5Zu>gqw* zf5}<}YxTovdL5y@?R;US9=uXTx$DkPSQKz>kP68}hNeq85xsr|V%|xQbZ7bGDN3|7-J$$$Un_ zY=r|~?`qj5j2-Ygbyf*mizIq!A#r! z5Bg@`XwXgb)UGK`^1sJN@~<7+)OT*8_x!!OzgvrXJ1P5~PHxTGtGD+*xn=USsk->aC~yhaD1Xv7&QSju0+RJEBz&&kcqaGLX*KQ*GbX|iV#Izht;MUiO>wVRV{+yv zt|>lo8zR8$wl(Fyn0)BIqxBXoE5dQ-+s0N-#Uch9`tY*zi-L$vzOT;$X;UBm zS-Mz_>n*50FWQ^ueeRU7w2SP-W@LYv)R9mGP@F1-t8$=xz zG4uK{L>*VXu^Zy>g7Q6p+?)*q!L@#tW|AuLzqMr$=b(ZbM4wU_iaOzX7t z)&gs~w4+>VHcBLJx0qB8xw71zP3Ev!612k8U!6{Doxg83jz>#s9IbXXUPeM@gZQ;M z`g)$^!!!5a#mVJ`3jP_USqs11yvwC)vwvAXJdpdkBL555An?i)3?;Z541)Uv6G^2f zG={U|b_clbOs0)Mgo9{;FtzQOxSlZ0&vt@3DQ zQZgxR9ASvltJq`_N%GOjtgZGVJr7dgPY@TgijLEj>_#gC-SEqSs1 zx=c>WJ>wSgsBl7(*=z9}E!)t{9wd=3PANnhdwQn4;I(}<`YiHwgDV?Q`lh(BvYY65 znL+l{(cpf!64p}_DvRbJ)c0SDjR$9DHTK1WrP)caT+?b<4#Anj%&00 zBVYq%6G?}=$_R#b3Xfr1@gLB}imrV>~7xrw~p$>bu3SRu`WCLsWk zqj7=4lJ<6m#m8!Lc(AUyE6G9P!Z|~{?fux!cmTt`ZmtYIkvB33PUk$`J&TL*C&9rOv*d#C9rRYfIq6>?wn ze~VyU&K!UlpXnI-6jm9d@?^~~@;PPl=z}LNGXK5cT)zhrEM0N?)&~ZYx-c-q39F3l zE%y@llUORTGusDUS@M0sTeo1D^`LiuvZkw#B2C0Z24P_4aGV)nf~ZdN=HcI1Qx8$p zvyEAWJgfb-v=Ys^7C4eAKoJ11=8*lPMd=u-yqZl^eaM-(B~qQ!ikT_HBJ zR5Df!Fj1@?T0Z+^ z*!AORMC7Rfo;{vXa+kzNcW~I} zt>W${{dKa`#e^uMNr8&;MlnOx;RMAVwQJ4Ax?HhevreP@BN|bqv*~b<_DY-(CBs-d67tv8G?IV6=4rnjc63QH`293aOAUE)`HH6U6d7 z9N`3hgjF0E0xPQjgBOt6YUA`sR5cmxMFX&HPVxDiQNl^0GBO+XNiBF+-gX3J&ffUn z(NjsQ2@JR^f?Wh3D$msnp836}t~S7ot8HnHF$J70cxGK*zj3T zVCAJl6LLB9OgMC84Z=mD4J`p0=6XB}|JU2!Cltq6y1_c{dRowX-o*B*I=bp{%cBYY z;RwB$b7}AqhZ(Ry1Pn|S(VAxQ2zVb=y-e`eN+vCUaw4!Fp!1AFKIBbtqJ77?ikZHK zoSU6fD_!wx0IZQ=hwk>q=c%WUsby)d-Ms(QHS?JeSwU9dh?`>f>3swUtIBj-E5CUxjzS3ud2k1p?x?I{>lv8VL z>pL@|{VvW}g_e`CnG#o4D1#v9S7-qAO`R+PbB&Wo5xS_S1ilzb9EpGt4AL6s`a9aIe4~+y?>Te z_}M}6(c5qajIpD|&wA{3ADYT=t`;Na^%E+UnXP|~b1=s8Xy6>DO9fz;3;+Q1hNA!o z4dTMk=0CSi9#*T}vAXni65C=B#v<74z4Mz*NIx`oS8~H|x#!Cr?Q!aq zxA_4sI{*Z{+9QTsajQ@V1oVy5J95paVI0;eysSYCx9A6BKHDZJ=}T#=r<9kYgZ*9< z{_{i?SqGu{%sMwBNx?Hn0^6N+L;4%1qilvIX!2~Ufmw5Y4-fswVTd3?63u`JYc$H< z>TIB{El$TAJz)?XWD!hC&~Hb3g|&Z%+D4uw`TT8p-3h(>$q&N@^efT_tD0O}r8bg5 zp6&+YZZrP@jHf4-KGpv6XZoPd%d+1}*QWNmm%nps;v@pETeGOm4P=#d$m-6{(n$@Y zNu-I(fW&R!fm>@h=5m-M7Eel(I^MTZu;@}0E<;=|0Ue^lI;^=qnQ34ySL*4h`pc%8 zZRi=%TDqHClei64w6o3N*b6eMlkpCUAD=fkf4VzcGa$QhI%}|45auT~j$yD(3^LFb zHkywT2DVDj3&rK1bs>N`_Lj4)PfPA`wLsW7VZtk=l9P+Ce)Z!k5zImAaCrrrrgpq> z-HDrmk03CXoBnHG?Ob|u4Nl$fcdh!TNoy!lHG|o5N&lZ z0smxDa^yD%jA@uU8T+)j9IVb}h#fes$S9bhr2^5}m;HWcqPX1r@vD^&*s&4yUstN0 zCSrG-G?rP5lTk-z5KYfkSlYVH^K8X%jT4>@o4*7PE{ag4&EG^e22G=!15O#1hx(SL zw;HMZTy@dO=-8}!WXqu|@h)?OB#3}BssybaaLw<)e?v7lD)GB|WnzEN$x8ZDi{3}p z1ANeMcyLjQhGc9O+7$`Nxs`uuY;kd4-{hMECmAN&%eURZMEWA1m)Tpq?t#n{cgT{~ z0g*^F1qly44=%fSF`ufz8vkJL?DoE%E!MTM^ph1dtcxAfG#Io>Pm~VUsrih_DH;mn zTeqd#?tJ#cn8XD)1I3Cjhv(rXYpyPLZywhxqexgJnt&*E6hp%XO&-0XLOAsutUEHR zP3idWe(IWY_`u8c5i*^*e80nE4D4}- zXa$l_OGdTwtqV_o=I|r~z)NMnzvuOhK&YG+bZCGDg*wTL01m`ynmM-Xvkv0 z&+S3nc?IvwpBB%^P2oIMYH535RkFVA`}UDN)&B6)-`S&!O>txy0?v(>n<9)#1B&@QYca<3k#jD!*iBfXNG$A zO7=GFY!sB5E}vLFXp!$Cn%zarJl}I`mF0x5x?*;{Bxl53;)jr3&coC&a$70q9`M~- zZZz@J_N4wnrUrf*JnhgIgnDjw=0MbOr4ZX|bpPd`Eu^|Li5cn5NA|Jr@A?mLowe0k z?Z+|KHT|zQqpHWwT2c9fRX=7&koC2bc~wpj3-aOb-nZX_8q98={J!yeeVM&ik!>jV z(e`f(NLRE=m6t++{LO^oze6hmUhOTo7wMa?@Zfda>zMJf^SWOyDLtOPacq};wp8$- zxc`3q;(qXQM1WWN8&K7avI7&Cw$ooGbWgM-RuXKG2k6{K0$YFD`40OdVV^8#PlGT$ zy)2%M3FuCS)PF>-g0a#MhM5@?kqG5mPJsDeVav6DFZjA1b$mciWv$u1*|k-F_RM*m zS+~S3-7#OI3s?Re&??Ig_9lw`8+TcFUg>CFNVcwiYI3LwA&D*DqIY`TkCO4T=`C#w z>alVA1I^;xOAdrhe+)Wwq5ii;vNbchUUH##tm1j&BjMOpAIzRPt2ztd+D(z>;8N|m zEfIT_FNDKp8Z{sIh`k?IecU){5#qeb{ZhPnlC$HBIz5gP{7n8DHgK1{>+-WTR4R(M zqz_ykxNl^$q@Md%;u*5RIPb%0te@TXKS#j#E8Te6!L)Co!?U+dFU(fB2xbX8IwF9z z_4IqgN{eB=xieUA-(JCY`S+qCPV1^*2W`;4lH5*k>scLXlM2#pba@u zpBJAmZQQRv(|*+PVBXeNyxk>MUX4^58ctOkqW0W5_T}=Dic)L)l#;EgJ{!3$jDYm;e#gdBMujb#6 z^VjixdCmViCdhZ?S&Ze49!hu9rTXf#A@}`z{E5HCuf3lp{?+($LqCvC-fxk->5zG1 zr=?`HSqJ&dt1wtFqK6-mDl3F+moO1hfz`U!M3)B5>CULLCw@%*xf>b3Ux!@lts5$- zDe&^>;5_w2hSMH7-f!WHP#+w-opxVBEw5+<{~WykzUH8R%{2#FYc(3AhC>li1kG4F zPZvr%&n!OqI&8PyIg{TOgG(j@XTuw8Gm`m$o6nt{{V~CoNn}6I;hi67*8-Tm9GPAJ zkE0XG`d@XAd#UFne)(DY`5>v&W9=x}-^@~vc68}}sr0B`6!7Ak$?muq$gYwfV-5$F zl$O(`k2POyK9e}PZPP4NM4kE3{2!p=OXF^}`iG4!19WMu1=H;KB+U(k|DboJN1(oB zsuy~_(L2At@PI>Q9rb%qtX+}$NYM==gt#oZdaJz zgO%Q!4XuN!goW6%%FT|^sr0efPXi%`-#)LLY`-I%^fvg_tnwD@QH_2UbAIr{pkzAg z+2&e%-d79VL(J`FN%FkA!4b%ZHC$$3gSb*``R#ddH2V#C-Sh3x4YL!y_VqCWlJgc1 zG3n^0Q_Ed{g@;G}-aFoA)BDFOcW9qctA~g3eXe(+iq`%1c#2yNcw>^AzhdfkWRf?S zc=aHKRrvN1m3ydvbN}D8)bneHk8k_2zxg)w^p`ij1v$s}p&gP;HKv;?&Fw3F#%lb( z3y8%FmpK8hek6{UDf)QEa`Li4Uh2u&XWp~Xf&*PAcdf=eXjJUrEF3iS*xEs|+v=mHQP0k4hdzm{+Q$S;9<6zBw8cw=mD(jM+)_UjxHBqUq5E9_ ze}KSajZxbbJ6~LyT%TumRrjiC%VGU4j^#hd{m5w5)CS%5N2-w74crzpJD0is`!-c* zT1%QJKkmWR204WXiM@S5?$*9Ko3AqK??VSJeC{DN<@zP z08v}l6)BI=l;e|7@a^7T*o{^ntp|ste=}0m@0*1NCyhTenBDWd(R-jTHEgE+ z{QAK0B2fJAq6?LNr1_A-lO;yme>R(xQ+esMem<+>#5{S;F#oLh%eI!3=F*t-JLQz1 zDc8&p=o}i_2plXs$eg9>+J>3fTsTn7^APo-r2SQ8m|z;RCdq+SXdk(^x9Y`O{;#Wf zdq(e$d>Jwpm1R9$bL{0UzG21-gkj|~M-9sCHzc|61lA_*1^JI8HM2x76P9SJft$d~ zn~W(nef1wewf=$E(iTxb*`!8uqh+f8(PdJWS>%$#A^Rb5v+Wh+k8{klhe4J%Qa{eb z*tVHJJMNo&=U0%|I_bsKL)kj|zCSLsU2S%>ITAko^=ERHddywEp@vWA{*n06$(bYC z_~sYbnjR^R8*TUdnYCE+rDY5=R6m(h4i(Se z$?_i%6z@)N-e0?}b%ErBTn=6syIJ*udyYL~-Q7#rvn6z!AUZp>-FNlU<^CeSJ^uRU zHkHP5)89sDE6}{&207j~v@#FD@VRIJJbzw|dhf@)B6V$kZw=2RdV@LG`GP_1zxBWg zbw1lCj9ph~OC81X0#N>3B@{g?Wg|ny^&;`IT5#q&`h|o8jxYMxE9q+^xa=_5*<@ zzm<^EMrKMVOA5t#y_pb&KW3iW&dPCg@BHVEYE0)yD}70{cW{3|i>~G=22uVahSTD9 zGHcvM0p8|LC`F!Dm{PeaUh{_ZE2i{=Ob}VrX==53UU$o-+pn3(Z73MGqiv$M#q=&k_L!-wEV-u%|y&JzN3V1rB^;rU$XO z8~bdbSSx`DohNe`D}SI`=77yOn8q%(0t-J+(5H)QA3%WC*ER|Zv(kriXVB zKD-Az#;PywIK!h+B_6j9f3$*{TKJtiRcUe(_#NapspF0q$iFh_RuQY`>e8DblyUp< z`T2N?rcgrxO5-B9Oy;E}1jKyM8h_(a`jf8PV5$nehFYA`tkQV`+2!CjzDHcnD)JC> zS*u=6Z{d+EEPRyml4SG2j8ChTI%EMlR^d@8d0*OP*F@%ntHZJ3S@UD)L77 z?LH(zXPluHBJZ0QX@wb|=IC^*+9ez`SNHDTC^wd%I&JtC(;I}vQgyiTXI_)&gLN7tH{2H)$VgM0o19N1ud`mH1})fHOhb^Uh0RVT5cv&N3^Q`F{K zNjAADz%QHp{S!lGt9dM<&0eGZ+lvQSENA+r*{{j54`*l9N)zs|U?sZis$`0lUlO4$ znb$Es0)|Ya3@qB1GQ#ua+v@8f=o0Dzu-p}_5QW6R(uCM)_JdDG+9^+Jd*r#+2s0E^ z(T8Vfc#ArZ{GnW`-wxxLnXCBcfQVb^Ii#m^B3;C)Hl)RkU%|?zw`QG?&;Fd1TLhrq zw&&qvu=GOPP!7?+;8ezr!74L(JvkV2qKI&!y$}m`B^R4UG~pGB*b0f3wJ0qi0k`g< zWdnj}&qD8<^Sk|H<<}$@ni8&X;m+R^7itoGOfV@?wx=1^ZZ^&;fr(-Qm2a&=HrI%A z3UP7kK&tto&<3Sph!mP4IQ9PD#rwhQv?vO}j|Q%OGg@^`Lo{^kDrZzR+lwnGNM#_# zKU}mxBp&wbjv|e>Q=L#=XafQfPz()|aSxgk2{K{B>VJT2kr*vqZ&r|6Y+QlQNh2U# z8swVVMA}r@Mg$Y-g3_thqY|XJjSS5TCB5cR@pvv-Q4D!GYt#sAPYHv5c$UT1!{Smj zlNufA>oan@A#+7?^Ig2N)z-k@@BFfZvAAv37#a6+0hL_@CYDmmn$qo|{S7MJEfE&~ zvz|XSC()Wr7+##%j+`w&hnZ;V#VHVrxD(!Gjwy7YcX)-%d!oI1c*eo=64YfbYS53{ zr04@_5TQh+HOeNlYBiD?Uy`*D$lhcv7Q3cD3sN9`Amx@NTOGGO5*&7!mMr2#gBN(2 zD+CgR$2u5NEKx@;QhTfhV#-d$wcI_Fqf zzN#pUe7V3PR18tLGp}HX2*EJin2L1AM$$H_fUpZV?A*(=zKA zY#Rht^$!l7y)o@ndyW|C(x{NZArK;zlHXSLEcBSE-Z(r1Jm}V1clI*Wr-=Y^k`ay4 zQof~A#~73rG?>)HMI+_e`#uaHV>tI1q!&O}X@7g(`N$9!pJCqb%~b>H>&FX~AKYlY zajgLRzYKP_Cgt+&8bAN+11D;EDY%KL`Hr?rpEOELB7y~C+N#qTNy*k0O=mf1VJ(2R z7kcE#BHy?-8=(=hC$iFeR}=H8aWH<9^;4hl`iEB3N+gx;xT3>tqo@Q{(z`FPK#R|O zYdG4I$S5x2oehv%U47&W|L!zSZ=<(h@k#utSADnk68b6Etf8JO+)=?PBsLF)Je4TY=D7vHoqQYH zRh`Go(Ilc5P+p+%8EzI4{KgV{3T0(zc%N-DNb$SbZcKmuv4Gh z%gnC{BjY%%Y+o;|MPM<rO)3BCe&ck>pZ>+WB>epNu*&xq z-v?*Ek0w^aP}u|Pj1T~tQxfVHmtM^wGBCN2Q@F=BP>mEc2@mCz4mBJU9DP)*tCLrI zALAuSu|lJyLecddO(+y#+nE7rqFwT5WWFeESZ+fYzFC<|mN$rC_^pEo9S&26Q&^3F zOn=(WA}OI`)YU#C!D{j0a)%TTrcN&?&P^eYFAl<82_zo^unr;4P2m(#&x{z+{lB=n zeNb0#^oi}QR<=)Rr@;O4>(!pkemAL!Zbp%n)Ba9L5(OA~as^8%T3%&B+L;_*)>W z@3#nTNh9U8!3>SMbb)CHtltDUG2w|25?hR53dxI#RH}XM=d+C20V-Q4LW!N_`^Nq0`f{?WFG6R~ zJKMU7x^Hc?0`amYLRD!&xNKI4Iv!?=p&3wg`F+Ca)SOl+6iQBsk z)wH177FYsMp^1&VkVCX7wo>&9H-LoT1m+ogp?5w0_s*fwPz!?79K*HS{lYc?ZStSkPsX8X*p=k*sHyP)!RF-)`qlT!z$=^$U-qZvq%zMraV=i4NwZl z)2bZ&Ob<;?%h&%L=hqSK@mNBmeD4YwYrP^stVBFAdI=?r8g8F{fNgy!m4xxfGL(59Oa@*51_B!R+%5%^U|eyiIM+polUgz@N>N9AwpR3c+Q zYO&f>We3X$o5vX1Y|7I*OlLI{-8#HX%mOndE?3;x#O9KOtc|2ho=LDHQe39Z6_|Cz z7zcAI9#Rxw^hqmkhv*V(ex*V)YCOH}=hk-{T*T1`6pF!_@d&uDbvE|EZXv6JQDj$I-d?>Z|-74K}uAp!pfMbB+r#s}s*K#DzoQB?Uym66bBJxv8@jn_qcrAWnTzO_At+Ud`dlqDft~Dcy z)|a#>6o)xZP@JZWp0M&4Mdv}oj&r;l$8!*p!}mHrtoPCa&iOweQVAbPy?ibBDqtUz9Bm!&IMj-eoe zHEE>M%|3(2cId;Gf)w$jtYBf;xYFa8Grhip6ps{gf~@o<_Vc~RB0RD_xQUGO7jzL2 z{IM?WxS?0;f!-H{VG$I4<>D3RsS87X{jTQLL^ZUg@f6BWvc820E}|p(_hvbItZd|GPPC4wpkLzgqVQzT)qk&2 z{sSNdU;LPi$D`X%?fHM?$Muus~wL2&#!>h zeGVg#3bv?LL#IeuE(-@?ljGMD&eW7vFD{hZ%)h`KOp<%TnMG)8*oEIjtTA zRij98z=>Q#n^UeZmS_OIj>)vy{EK3Gd7sn$a>U11IZPNN!49a0xDc1CA0p19A*!34 z3xylYDqyVUaN{5Y#2`nd-$wnHAlL8azK=S1sctclBOAnSZujD(b!qxh zJ_a2-Ae&YsIxm3Q!yvumP+U&8F2AW&*9?V0u(@K;H@qShFb7cFYNe2l{Y}5HFd3I9 zoph-K;XALpJtQEBV1VI@#|cq;a|8Mbi{->8F6oG}uvB)1M;AlXut2}L6-Z+x$d13Gn)7rwfJK5DrNnd}vbZZp1)ZPj+_5xT7Ycs+zCc%7q2_I(Ppcjl} zP=z8iff6HjF+8>Y;!?dLoe!jRSAB#$gG=1)YgjJX6SZc7eGzX^yEF>MoCiswP-h>w$;o zrKh{~Fzgni>%c85>B?=53U$LLoiYt_)QALAe5)ArHVG@*Y&&T5vzT!R6Cp5FE z|1&_5`(CBnl{G4g(q*WLY^I<)0gWq-s~dP+9!jVqtmYy~U@CPPOd;X3*MUIfl77)-e5Bf+}QJT5fR?o78kH%uDve*IeAfr!b!uTnxMIz1kp zk|Sip!y7wW^N?r^*5I)N#_eS|seL_S) zma(osa^3h663P>|m0qZ2dH(&#sOV1+i-#Rl-vPy6>@>MLscK$aXx0SN{8{N339bYB z&T)vI7zBqnS}55~z906eIRAqWm8Zjl`I$-S%5s%simR3bDDA?sOS@1ad(gSBAf$y; zGEk%)v9Y&WqzklH*l)}&twH_MMTJv{lxJ{~LO<{Wp?Td8?7w9a$Slc%0M*+^Mj+AF z&X8q!+6(E@9;wE?T|pm1AhypfpPi3Z{JafwzO9uE49F^w6J|k6lvZ_1QjfadPyF)P z+Cx2wq6qgPIkfWUd-xw&mWZ)SFgmi2B#O6H2jJ&6ueRvn+q&Sz~`TEGY zucc-Hd?DtFTWyzkID$`%0JvRl=*!?K8!D>5Lgn1;KkT}zPy5#b87Q)4;Z!IKf3Ku$ z{0Q{_Q&ph&duev)Njy)X*v7UtAYIMzjz39IFNVU%HKsa$Ok2>Ew0@()FG2j zB(o^hMOYz<<(K9|Oiw5knOTJD$|sO!d9(wf#?Pz^l|MqyWDt-u*;+Bk?+D||Q`Cz> z+|k$|XUlEJ^tV;^)un!$sBr&@%uq=^dGbW^u8sm*I?p}f|0p{5c&7e8j&C!UAu;z{ z8g1Iv+@oA78)_FcvxEqXxmKD`NzFoT)yy{LQfR|OxfW5m7BebIA*FJOq&r3R{q6V1 z{@-Jd^Ev12{eHck&wNaHNHU>u_I?Bm?m>x<4BpmKTH;s&GHl|foW!I&Y0)`oKh`t% zN^rRX9UN5hVQK!+^RgV1C>Or=1dP*|kK*en931|w+9Bk~VQ$%wga|Hyz$Ug6@}ZsJ zEJnWd4={&LIu5I9JE6A}yYlrE$KXrb3CX9C?$?`S$yK(D1tye{+TlSZih!p0mXeo! zW8sO3xOJDF9g#MrkK>!3T#klWGlE!9ugSIeW9^&ulp^9&hK4d@9$X%titY8qjd11y z=qjte)XvriaaA#l1)+*SaC(F*!N`%e#T;9t@V;h)^BbIB8k~B0=OO%3-^0n}$;-*X z!%9s)nWF&it){EMk&^-+!sc;lvv%r#fCDbSUvINHn=Yh_pfAb-1^J*&opS}-J<#@+ zyeKvQx>$Dv9#cjs^W^Gfn8%%I{bns|Mf%oL`e{`GxE%hnkS$^_%ToGnA#+Milv^E* z2PoVb0LkMgx1EK@!UplGawvSt)vxX&)N(YLFXr^4Z4qi?0ayf#Hz;L8V(w4ug+bz0 zck38i{^=;c9Co8^I}dmSBR2g9Q-55(>C$wT%(S95{I=!(`wwGTLv^)@8-5$@@f%tn zw~<7c1%9iLWeS*;`ndhkx%q_HVdcgT*9GI-H=iuTQs@If*o`LB5V)?1Nhks)tWWTO ziI!F1Icf^dxe?jaA;R|WLOv`jzOs@!qP5{sG{WSJtqIYWCI@w+$W-U#X9z9z3S#4p zj;==e-MCWiP{HIqUYBVPYpXp)2Y{itGWV9L*lIj2T+k8N`S8WrO7d;yh*F~x002EsA|UXk($%N_$|+C=h+nV#cl3RJrc z-ltM<R8j&Zwu3Y_ddynAtHow0EKSq=ikwnK7)TciYSi>{kN!<(9m&!0LUvu z%F8Ttcx3<|DP`AIk*9S=LGO^7b%Qy4aKg-{)y+V;Io;8y_G=2q*zRm)5El1h!m!KL zj2cEp!7Q!O(tMta5X8ZnN9NgD5q;T0lb7JifUF%3l?apQ2P;`I%%_)Ld$tv9NZIlI z&Rspjk1=Py%sg@XJY{&BLLf^i@ir|X^J^xaAB6{*gEPJgaqe$)++_R&pbo;DK* zE@A7JG6bxxEy5(VURAyhCfY_O7F#L9)VG6omu`Q?rfrkt?>@3(GlyZ$Hxaom&xgr) zqqE0r9W-kw{kB>LcQx#|d9CuAP>NguqSo+d?m_3@XSc7q?WqgNiEIfY*e-miq9@u^ z3NcX?QFH|4*#XiHM+2*@Q-L#v-{+p9U>s38mE}@T)Ufc^HCyzrr&%mK?*jXeEG+1B zJUE9ZEVJ4))$b%b?muCXfGz~61xMCSpv2x#j<_G($c9$D>gTsH<*M85zcTsv4=vO+ zf74z4qzb+SF?^Z#8>>U?6_#yjyedd-LitdHe!4)TY~t~u2-l-ZLXnBSL{t$1v-XW6 zpJwvldu*@^9S5{+^Fwa+&;xK?a{HtlrJ0R6uDieJ{u}Y&ZTa_(hzXxx@P9J)8jV&Vu&kABz3teFu;Ai7vMMayA~d16=4UJl@CqNxYXlISm{ugmZtJu?+dJbjvvh|Sk3x-Equ}g z`d~#bfMwCkDWDMm*MJa)1?KFbcU!Ef+OXVe6>$C1SXNqlxGIM_qwexrz2@`>uLMF7 z*NINi;*L*oDG%2gnv(mu1V_$U8o}{U|HeY&+gU{A(#8zJ!P5jhEE?#ob{ZI8pDBCa zU_yZXaJ5?C)_%r+TcDx%`AIG%=+B z2@aKT>F^zfM0y<){v-^Sz#y~*j4F=`g>Y?cgvrZbY$3BMle#iuMkD>!>Di{q;-Dj5%) z1@LBplID=EWjtN6*0T99Id@UQd27L7#o{+PZ2GZ5f`n|s>iF|J2Jk?lpFGSQ@oFcS z<>I7XY5G~{HV}i$rt0H&O)L3UAy0hO)MVZ%C==+=9;LmX(b|p-Kln3;a__8}!lf5+ofZ z`+eXgwQ0h}%(D`RGFd0K&x0^1&S4c;$#x8lPvUP(y^khw;yNaL=SRoU)c$6 zJLb>4{#DY!T`q76|K)V$yfv6qROSap0Ae|nj&JT$v0u#lk85jcY36Z;SBb&@0lXrP zj*tJ$N%WyAvxqGJe(>dhW-?;m@$=TY41}gY$)!<1fKo&m)H2FnO9{xJLC-x8FGIbrhlD~g)1k($`WlMQ~kP7jXU`r)yAv$hw{u`b1C=}^fW=i$wv2K(20j!fUakeG0$ zmH2C-)pw6JwvQ*+dm*N6R6MF%i5?Xb9>=Q$X)y~KYe37D;eXGD^=@7>3!aF`iSxiw zzKss-Q;iGKc54Alah_b=#1}KV_phsKqM~5pZ9w_mwJSdV@^wFXtVHbJPYU|9nR!n{ z%6IUgOII#+Zr8i#PBb%%ruS3oCu&XI1SF5=fb8hgD88SBC>!uS{_|&VyT;On1UE_g z$g@Eqw@rwqp=KR;$hszTo9=9lQXLxLnfT$kq5Q*(2JMBy!lki+ zir<-QE!Ck>2XrLHTRILMy;u9mcK_Jqq;EBAMCxUK-%Oxrf0u9aGm4!cpJp%|ex81{ z`@zVwUQKV)oKO2!wycmI?L0dp(W|sunmAyllItraa(SbkJ*W8Bw7Rp`QTceHlk-RK zy-|$Oh4tVS>fgry01cX-5;C8J8oHA_S7aWlHQ|7$D@8O=_f{315}rVYBFJBNYmo?r%2}f}eXm`UjR@+aX{QVZO zKZ#YG^r3(-SxAvUP{MItoF@Vw(1|y8G8ztB7QnnH-o3$3TWK69yCYw>r~jrVndj+I z+ov}(z?ntU@+}y%BF(co&6`u_%m0?4$Cg%9q7$7A$QO?<9WBr7oi2Hsk6xM*`{;Uv zPVtDRHnl3Jr`;}%_Klm1yU%WSC%kET_wk?_bN*@X!SSCxt~tyj_4`E`{Ctevm)4B> zj7!~50?tQZR9Wx3ntTigh+KuR;%MNB5b2h0U;pO5 zX_=p#Uz%BW`EsktIp(spvBSFUy6Z!fRY~%NhTQ!cH#_5cu1H1K%igPPD)6==cB5xK z3h+fGoS6$InnG$Se3VqY7PD@-@^k6q(R3)XH}$tgZ~V!5Y; z)S&nGN>1fFg{|T5Pb3qI1J(}274L0F7j54Kx)`~#8ofd)S^H^Usi{a-F8_f_*#nwa z;P22{RE@lWeW7)tF5Le4Mf>Z>(cQJbd{*wJRL`Z9+?SkM)@B~4xpw*9%}qBIJKGU3 zDkUUeD1YJ@oZTL-7x*I-0;{B%9YIxd%I?PY{5p+%xN|u+i3&gxQTvi-Ewo?me}u)8h#oiiOlkWGVB-VZ z@HS7mLOF;1aR#sMDKA;B+kSWfxn1ghbK+iE#Cu%ei{m;kHe7G~@HgazeZJK@KCB+_ zl+u!vX~`I`x)>AvwqEV^5mW>31h&)e_1zo#0jSrOJk|vICT6gW$ zHP^iVIm7fc6eSu`vQ=S=r2WK9yafUCdG^A?vqydW9nbXP3JOtEUUHNBrg9dSA(lpt z9SKqLxKL@w)caqBFLNAd6Hb9Y&#jNYmNv-;RF2&6Y^^H~n!EAw-KJ=#F)HG5TrrE3 zncuP0dvjmZ(R~MF;%ZNbGAiW`c?qWE>!tv4nMM=ySG$V=-3!=j+2wwhLeXgIKvfgA zL6YUhMWJ9&Up2Y~!0OdO&9WK@yJN>j4>r`B!{K}MqPCz9Oh~v{86f~`DPCb&^#nRM z)MvBJK(d29EU5nuNpEC-Z_`fs;ndetM_YIA{;>Sx3lHr~t(kWik`Ok8Ef2rPPSJfc zCGe@Zy-fi-{5Fl1EWsZ^-SUlt#*7|xojq}=`&X$AeAHuI*ar?DzRu+V*wbxCu@PawJ^iib7XpLBF`}5| zo7+?Vr9OM{?ku-}L7hANYISHtNKlBfB4etit2Is@h(0H#a9TspH#s zX2@mVtikC#=A2wpCfx7}6;Pmf2kib6KhAA#a!P7wpelTRuY9Uba7p#f&FcZFH#`iw zUiEqRjKVMar@62Xs!Tww56Kx2=FVMS+*t$NKU)2$np+3A}{B+1KA8S-=Y|u{{Yf9O))3l51=aTZ3jSZH+*hUY_%{stGom+%JafTUMt-|E~L}G*5F;JdlX|jKanP_nsNVQ@mK$y zvYqMV?%~%u-|k7NB&TZ$pMK;HDg#|*^R}iW?4RQPJ+5jbE3(O}49oJS4{|YWAM3MC zadS{X6lD|$N5Jbh@eP3D#MhXtu#(i&t-mtyiehho{j#jTis2SR>uUG6mBfgTU7?GK zobgmO!`<%-vmk1H*j>lm|A74f8(xHl?7jcaV)teoqU+=QT5|b~L)8V8AD_)xm+rjS zyCJ2FGRp%A!c?GIRq^*aJ+EwQ`JBW;U{%rl^WR_U)DyYGlXLKox31w!-V%TwHsdf7 z9`1CPufH#-s~%w0tbw{*ckDz+x_wAK*T1v=XJjaY`Mn9gc_n2YG*g^=r`;M}oYz4e zBt!1{Cjrd2x@or@erxtT|F#ABc(aD z-WVAugzvJ|hRc5RW$Lk+^x7#4dj(62Ga`sJOlL6ur{XiqX>Ii^9l zS#c*W6~>j~d^ZZ@vBR}kN4J%?qvdEH4nD3zp|)%ME~@AE!|ndC0?g9N;_J3kT{`$; zujV=*p_KY&nkweZNC>9A1D+1a7elS(ZWO5dW{Csl_g4qLlLN8q6F+-UJImxQsh@pq zox_0r+*6jxG7|wrlAaIH#i929FDLJ;-22K7Ly|NhJT{Y&HR92A-MQShdDA6|-X61D zk6S11SS1`S+#K+ehE@CYl&P~S_jxtmGdb{ z$z|BqgqSDGn}c4jo$Ls!7kP#IxDag2$BukLtRwAP2fGSTi%EvuxVrZkb~X=oI9pc*T!IXA(O zVAUGI1DPQTlrlDRrWA_R0bMi+k>hXj&$&IjI-z<)4hJy2ZT{h5?08dJ1IdOe6oi3x ze>A23>Acpro#-*EYc?2gTL*|qmtGZSMHe=v<(A9uL;F+%;X1Szs_$=fX%nN(i1kHn zHkk9!Jh)VX$Gp{Vf;0Wtlz=b)h9j$R+^{e_9PCkLtHAg>ot{`TF$fmMf@y}`!~0!k z{Oofd9d0;i@^CWa%kxLq!H48c@m!u+1;Lk^Z*Iz{1i2!S0u*1bt?{J_==!OS$E|;- zjEZW`eWx{ZNl*ydlAF$BLSLZbufqXrqqk@8te&LLKj7M3uz%vt@kDX-HJ>@_!0VLx zuF(J&a(tP^NvlP;fy#&!_x9-gZ76|rziO^1+NMjF=$Cs_zjHM3d#+yrX40wU zo{=*wo8YZ>QkJ%+?D}U7ZatpDd{D4okh9WcBM6O#js}(?XW{l`R*oC?b|bZ1$f^?6 zK)G^-UKaL5HEq}^3!DuLN!X~Pj3;u)Je0>E!YgBk1jHhJh(`qJy@qKu#Cg_Y=@xbk zVEY(b4mM7TuTZL&NEq1LD*GMBLCgQ9j%y1ra`7E4mi>(6LTD1+>io~ zy+1pB@6H}1lRHmF$8nCa@fiP3vV4c%_t%(`(rK*ss4igR+JGdeF2wzho`wwg8{Iu7 zh}G{7H>KzWW^lQH^5qJ?=tJq$4SIoaStCrE7>qPpqn z0c2X(a)Zx5t+}TUbjXz{r8lQ{O=oK%UW&HiW9BU8=_bI^tTxBXd-ZK(&~jv=hy+-j zO*4D<`#`Bb)1CocTIoPa3&{vx?H~aTtLCzT`qerMc4SZ82|ar9+k`A8=cUd*up95K z*vivS)3`1M;`Q%h*g*3#D**~k{-iD}NBR5tlCh&(o0ZTM&uq$O3J~~Sb}c2*dvBnq z^>|ersT7D9uU-25IchJ}Tq=|jz~P0yfMmH>6m5ayMfjd~s$bX@+u^7D*8AS|7uy_~ zDHPr%dQn`3EM<}{3qnxn^=oCBRYVbW(#-rHA1RWxs{qqlH)+cGx4y6mM`%E0O&x9> zB!H83sT9EG&03TU=r|DIJ8wTFS3oRgSe8lW)lWz3eKW;mrEZhQdvqE-seOyy6j)a7 zURQCgR>Sg;#`DWpKAf$fQHA1gED)CWYHzIg1JBa2XhlYsC~VAaEa#zdv095NmVexm z$d(N5)eF|6c@z-Ag0={Kl^E^6Nz)p*;W_I?WY_@8h2ZWc7+ywXbrG5_Y9e64`v^M} zv0!|bw6-m9HYuX%dt@l5S%~CX>t8U3H|71pN>wh52jn+F$)Wh`8k51 zP6;Sx!&SHpijDMBiTX)usx{zJH&-e7qRvBQGMT*9%0lIpZjy0Jhdj|+N-8B_0vBh0 zw!K!m8s1L~94hoRVuh>npUhFZnNMB^d)0T0u+ERy*6v7dmIo_5H@ZrD+au4~t!@!r z8RU-zz{7FsdeLuDYA5ekQ4S-i$`lYqIcU_D?$fmE+r(0*QD8Avljp20U+EzT^GlPj z-mKvef8N}@R-xtugC_{bW^px<8gI=}az}4>AoWuO@@QK~V-u5I?04M+{_*T|FiBT* z>&w>@xAK4Sbw)J^lq}h{w@vn$+s|HgGx(TtE18i&#L>-B)KMb1A+WQN`ztFlAg9lflfgw`f597Apc^(NIpRWNKy+)>A|qZS53w0f)l0p#zX@V)$ zS0dKM)S;C3tZ7(&OP3uLWfa_&E8gbWGmb}WysfcDE5R0S_Z z!L0%tTGA&(RxIHq!si@3=w~iNX-tpl%GnkCgN3;~WK!rV7{cO9m}vtwvco> zoGwxyKC0!`f?;#mFA(vFLEU6IYl3_+_8G%icELHk2|XUS`qy-dJ32^wZk|$akA_e{tU* z92{J$nzFW+I4=qkASn{X^DTwGyi$M+#m8pr*@tW1$h<(Qt-*PtP(B$;BBW4VnqH?| z$RFo_PB{+7LuA-*FvkU;2>)i}vE64#DnvqJ@C-qX$MrJvH>h@Xm(e9voSE1G*Z#qa zj>~RT?YedsmnzS-Vb9pG(ksN2_zPC3$Yha9KmI>J0+HDHVZq8>e{bOU$nRp9GI~n_ zXxuNd&!s?h!vxmF8+T){C9`Czqpx2=M|&2SfLs-mpL-MkCDP{$0&92cWthE-uUIk ze2W0We}Gz9<|H~rIXe?9^BM;duw42k0p!30L35q*8tQRl(KxbUPAR?8|Nq-zaQ&iu zl(OSLElmM^0;V~vRMR4;q4se^=EMLl0YUUexZM|W2#BfIaJFo*Cqh^(sx8Jxfb)*Z z0VA1^IQi9QJ*Tob5d*&dS%EDYf=UDdZUB<#emJAiz(OXs+!|hE(DZV2Ep}_{wgRJ2 z43*tNjk?v}U0`277w>+muwK@|62IIDL*XQGYP4y&h!AxEK^a_dl37JE04+c)ENplQ zN3=6B7U%hsvKWbvU|CM){QO<~OL3R!rcclBy2ZQ&YZ%B?J8Hz8VPW=pgK?!LG0(mo zm!Rq9cqL`uz{l)@y+;i}@2w3cx^96FrksgU|GSZ7>?&$`4MAO{x^eZh3zhXq9wXT2 zsl>u>WLber{`%HsZ8x}-FMy4koq39Sc@d7hz_s~UE*?1irUVbSR@>P6FyaVN zD>;D6H0NIpm^bY79R|1+W`vMmB2%o%`#>ogUNu6 z#~PJxGphZX$2xqJ)5XM>2#Z+|#tZW*h8)AHebo2&`C<=}_JhkqZ92lusZ zUTiKcTUg7V%pO$AAQ!c3C{*-*w#<2(p$RU=#y9+2uAKyCuO6JTp-}ATQ^FNa9 ze}G3+)Ris9{@H(%qR>AqV_^k&wX!AuR84^$&O^`=} z)8QAYBg`M%R}vZrWbE3P$+8!h?%VCZKEW1`flhMGRS*NGnOjVUd-;?sMy2kf?M!)3 zqI3aZ{HJV@09GhWR~JSPyF!J0xt_^gJZGlXDgPc)!+TO`X+DA^clFhS~kF% zh0oy$i8IQzY6bTOW@5FGg8GjyXArum{9-S(^!VCGp^ zuaZ_5?qXyJ^6Z!E-(YfVZ(63Q((!$ZPZ=zLg@v(%FdKtxXl*z$f&y#U1VCHDWlvJo z-(zN4?M~-DX==@5ry@p~Galnn{918QR{1sO1}pdiy(lZ@M7vPMuaJsW+oV*K3ctKI z#+g6>56%P;LPf7iNs&K!b`*MLSc|y|vGhqtcF3__kl}?Sg~t*tO>QyYDQCUM_|9)< zJYI3XqUD$4x6(9@KF{*;LfCCLYV~n`Jyivl`N=B+o1K8+CIi5wC(rRc^V+J8VdAul zTE9{SW@lo9AVujFSEJ;ayQIBSm`~SH=Zb&-%m(K`m9I_5etr=wQM%@!88zm%K$NXv zg)?C2w8etY_^lJeUlKnCIN7MnG;Rw8=I8_zktPea!L)V2Y&OV6W;SY!o*y_JMJ`OY zq6(@#7Q!~@ZzEEx*T9+G>``7+1`MpHKbyNvYuk69Sz)1G3F?Apns&Pl za0YDV%+>T}yh#@omL{1AFO6t56fS|1oi$p`*`Ku|cl_m1YS}@IX{G14p(=-w8|~c7 zYjS~ec$(|0=1>6fn?E{EjiC;7(nd1%;$;sa-gUl?n%7$WgFVGfGF6DYL7PrU@5$Cp zJL7`NMG)vngPk&ki{*m5tO1b~9t}w02OB9R^*QXYl2|6()mB}kP&_3Rozvq8yuzzd zXPN_>pc|o@6rsDN``;PPmKV3qYFMz+Y^XY$9k$7DmAS}38SR{wxw!F@_Oe^XNs*VH zwssQfLSeYckbwJc%}L!o&L#BT1>4P=Fzrd&&FGSUC{Z*3oE{FqYNgh1I{B=7>YN#j>1y<&sbT*3tQIk+ zz-K3&;c(inqGpH5(w}?55u;t&FHn(#g(#EIE(#v($1;y2S#Q>BuAo$6B^5H)$A;Lz z@${V55W~XCIM2S@-{kL?6d~tDYa1m>jqPDg9yqNolvFb>M2@ilK<3qOwa%$MH@kc! zF<#n;%g%Su)Jn6)Tpgn}`c?q!Ihygw8k>HxAtPVh^H#&bJVOZ{?;sMIqtJKVx;G}- z{jRpv%5euYF?KXL8JB%}uxmA46eGLQz+|z@4|~&28Cqkjj_ zY`YQsNPv*-KASag&oOyiq*W^%sagI{tNugKt>k8ZO)_^#HYoBBaKSyFnB!vG_R*VR zb8nhGIwv;Ja8YBB$2OEHO#0Sl+=J%tP>QhNr37|9wy%I-jY9AB&x#$Ffk%KkcRN3m zEE~H?{v{2jdwl^P4!@gN>XkcIbhK86a*C1)%eHyVv_+DFe}$Jr6sz}lDzO$qD(4>2 zpJ5*q|DhEXZ&)&aJXY^6Gs&gZ$*_%rEJz`@I;~bk)^oja@d1}wJz01=_4e_C?k6a; zXJ+V7rsB}8A30|JC4_$QI+;jfqK^9R2I);k;{rXH{BlU%@g z6P_N=?UsmP1K>-;Wb-l>=4@H?((7+4s!2!NdPMt+%|j`p6w1jsS6NtA9hV9gUeYQc zrh?nS3yj&B?cb=C-k-E0=HcufG`-RfGR~fz@_Hind5-WOLDX`&dG=KC05G62f)s#N z)pwyQETA0o!q7DVqneH!w})+H1>DOw{toI1X9xKeBv8OZ)f&5t%B3EODuk;n|K+ww z90yV#6&=zw8u$=1UQ>k2bb$eENCg-G#L)x=ZX11d$?H=1=%^IzQR)!Fd>a#x3hL^D zTLFOmfG2KG(|w1CRU?Bk{54PeCRQ0KF>)F7b9;hw&CBa=jXSb=`5C94H%M)fjp(B_ zk%xz=9c7BI_$S28WX_+Wv4xM*TTFuje}|gbYLN?~;z4GEpJQGX@=RC$8K3d%(sBMx zS)>Tz%2#2^;4+r*wIw6d-M{{0L9LXWNvi!@uT58tm^)?AmUV_uw`~Fwww-ewtucN=A6IgNxP z+l^aQ^Bt|vd4fG`E4lh~+Bcn(bQ47L$sF1JI+F_4xK)`2SOmgOo|p%FLkW(ZT%Ha- zK3VZe;5EQ*vUOri`wlqjJD|5xD-#o9WPW1Xg+?%OMN=zrdII2<0Vq+fDP9dgjKTX)&mNZxZ&mfx>DBc zz-L`11T1v!1zcWzTln$8TmA4^!VIzh`7pbA)}f?W#Y*8%4!dWpUg1O`)NrSKmI2eR zVez3-tpFPa7VC3Y{FNpXEYYr)qcwmk7JlsCu~Mzhrtj?^LqdY-z8*pp^4y2Q2I~;J zsZeMa<3B*Ro)u%*k3O!iE{JyjURH~8vjX4k2ixYBsr&{ZW_@!{Cs*kGZnyup?5!M- z#UN&9CBfSq^Xt|=iq(Jn_-wQ3EEM!uM%YlhEX~>mfZzfheO*iQzODwS=|_HBn7jxN z->D4NnR|4k;R9_^DS+!X*2w)1E%SBdFRzr&#(M*Q`hGpueX<(_6%Qg+qJr;9E|;rO z_6pUNUTp};qEphEhY}e5atJmC zfs!*X?eb2F8#>8SI-zp-Zt$b|V=~tb#mqdYV#)_nkBB)dF~Rh*>N3c|`M00(o>1Q- zH&iFu%U?-;E*mwTIsWm5#6m7VM!mZ;=Eev2wS~R-!ktH3BU(O}`ZO3c6K$eLM;tH+E!XlFtKRgvSUx%t)DKl zzvD$68xbRTTHn=2xBAC_ytXlY=45kgO6-o=@QlCCvMe_+c*EmXoK*X3{vr7417ouO zRu_f6k6d@XxG)tvW=gQ}4c`^+zWwe3^>4oKNVflCV3sZ2Z2#*p>ecSBUUWF-nN3lE zwqq%y$^tjSqi1n{5(X11JURjI`%6H$ano6EE zEVs`jL6giWM)^NuWNaQ&lskg%P7?qlmirT4OC#cbmg2=As`MXIE z&4z(541|x>Lo$QTuVk&{9s0Cq@=EhLtG<}|g9nZ{`)7OERv9kZ$`a>Op&$Y!Q@0+$+AEygt7Ehy`(RC#;lph@`#*mT_T?2QuiH zI>!7GV0XhKk3suh5b#Kk*=8v9cJFyWSz4QXVIA2e$f|yDw!P)rv3+~Ltv%8U@^7zs zV>Vk^Y(KTd=zuHP{nqG}`7sBx&;Zk(yyetc$;NXr)O(MDEw9E12))YLMsAI%@zpVZ zjVEKru2}r-XgK!f<*Ew#W~59<`(A;?pbPnjnGCxgC~4SUh`36wK>p9u*IJJ2Sn z&nODztM$8EzU-Jx%J$BD_eZ5CN+z+r__mdAOBU8@Y0(mFkWmy@j@jV9tQtxx9%ws) zwK&wAXdB`9Ao{k`#O|BMErF!cBdrtL(L19t^R8wyx=IQkvnNmGk;2{sFK((0H+vO$ z|2pu!Q&~ZLX7MeXWRptwh-NPX-u5b#SnN~xO@uGIK{3-&-qJ)?QRVbH8Et%m@X3m# z3Rlnrg1z*F^l;C9yf=}W5H`EbqSNUPYgZ02;BVRVcXghIr=|KeJHkeee_1t$XY4Xm zYT>tMqA;)ZN}@QLl3nuZ(WurQ*nfcLl&;h6=La`0T{-RPAy`y~&WfWjGjL1(G?cTn zgw;{dUhj2G{*a6evUq&t`e&^Kl?(BsSDakI3qxF~H|g>MB^$5W$-*~9l}*@UP{;PB zS3m#`xfh&ozyjNdN{IF>*EV=M3Wz2@*kRx%;4Z>zumn1uXO;HA#tf3Z%kN5mj-L8S zYv;e`>O0|$H=C=kevl|9{vn?D)@Hn5lS-6XIHCKJ?knvg;5|DIoicq0ZqMfeMW1g@ zt~Kj3eJ;X24#wPJ=3XG#`4Wi(Pe>*aBoLHz%I|w5Q9MubJun!cgpm+s60e+7#aQjK zi+@LMY>j&91^x79Y1madM|Zy6YJXw*J18E?)bFZkZ-i9Gf}K zS?FV4CH>1;!Jc17f6f458y_|@SP%UM3m1XIO9m8+6@?|YGCYih-DK=3fujfxwVwY0 zpp^PVdq3E3)@!Rjqca<)hKBVbZ1eMaK3wkW+=4AWXql*O>&>ld;FJFC@I4y5?tlEL z^QtA7NMuSEh_5sl$yJ4boTa{Jb(aKLE+~t1&><7$`lEqb1*G)EolChfIdsgS&y zT?)1+eX;fMcfP9a6EYwVZUx!)cZK1fog+mtT*pmd?LZ+d9l6b3Sb%Ur4c`0i)Ha6U z3FXsG&}c6zPy2#p2QPxJF08VJ4@R+QHd23yj(W3(LUh(sRq43Kb)*xja<#fyQbtzIxxt zoehWQyyFEu8LE#CExzl)?U)BssEi$_b5uBEv$rP>4V#QUT-%Yn5HdHnb|q!G*#t%K z7&Rx+$n1`h!GGG?gT%ut{i4eek&PmAI0>$ubf_u7Os)_?08%7fWch5YGO-j5A){FE z4W|oQf8W0!H;sMPGmI3XlqEP$y$HlpfC<^X>PlPU_I4Dyfm}1%&K>*rS#xoQ>}p(m zX3Mp@cR<)AMd_dCn7q>)zq_u1<5wT?Glo9$FS|#@ZzXwCblRei_p->IeI<%9a_?kj z6to$skRI;V2kjj$usF3tUJ_wS+fUiIy*Rqz^~gU!C$t3$W`;tX)ap|B;)Q2ki-QlX$aU}*t5mu9{A?M2}sY{5g*K#_+>-?=47 z2y(s{r3}jtGoy{PrJWClP&js*^l0IOvX<6kPPz$!7>4xvM5n*@_Ye`n7Rzm-wNG%- zOYUwf%7jnacAI7gk>(f+!M9Itn^_Uw`;(}wiV*Fw^fBb`D-M@Qk{zT+wlTfU zWoc}Ypg_t>69Ix6Ycb+OPUV=D#8e`8KncexoI{hzj)8!*+1J0DO>P?IS@~cFZHdCP zwCaXyaF6A-WBs?98Dq)&!HHNkII1r2f^nLCrJQflY!dao!HHr12SuCv<|_BbG)UFq%l;JdW! zhV|LEz%v&c?^wCJmBTH!_ripJ>P;oz2srBInoOe*BAHSlLL$$pL#MB;a`DGiwg_#keyAY3b5!AIxB4dal! z@`g8sG&&^QgL{`FTxIk8CffyYVJX+b9@cGoc=^23>5s?N;@sIByO6Rod95>hhb_4|M6pBDD zi3}PUlqHMaN5M)Y$|jw0N;uyeO$uO;E8DQo)X-_yZ@NJ{6 zTZ@$J){Kg==*JPc0W)AGVHY5~+|~>#%kf`&oFMN3VBmqDZt|O!Kd(2x{l!LDqSei97d)Hb6V|FL~6LRV;vL1xM%TmLmSPfFah0l(qazJKTD(Xn~9JJ}ph2_3_I zwSEPBGivjhZm8UJu_JHIb6U5 zozGc~!Cm_gfIAjiOI>it^1Pf1XR2Hnt=|;%BfAUiiRVy3qr$BT2#3cU0%`r>-CiU~ z3eu{`|3k#f|F$hS5)rpnpWX#NNCDv?0S5~~jJXE$DF>$74%$Ayj)84l7k_@dQ(}C$ zXY0{qySkfuYgdn&82&x;t9NY`D}(7qL$$;)!~=06IP;J%Jorg=xczO>ofnTED(=z! zuHLu5q}eQBPD*W7r=(-Jh*Thlq#%DmMN!?YQRVi1-At46?($F*{cu~Y2S>I!faf~8 zbH}f_%ay2oa0qm(h<1VX7ub!uP}*I}Z+quODXg|4)|~Q8l?FZ7>4NwfsY*aR@wB)S zuj)mMFbO4K1{^Nr(FmCZW+n5~#XJ-W!!=Pj`#h*bgX0Ydy!sT*)>9{d{p$DP-K_&$ zO3E($;@SI?f-I&4MJLgYnn!n}2IY!|iEeElU?NSeh$PE!nA)ICTLe~>B$8dl72jq( zix?z+TMlF^M&<%Qm<&kRc)YHCh@&fAKa&VQH^Z&Qpvki3laH0Hh;{u=TUz~_l z(MCUV4j>ZHCTrmiavZt>W`^18);o{wXG19qUPlB>`E{3uM6>COTSLI+xG{sJJ(jnI z%4mR;n*nb~lR?Hx0{gNW+Gy&y$jhb*y>}mYYbzI?0qmF6D(^74>=MzwyPK`(zQ6qn zymBj`f6|WR4eo=vQsfj24l8A4>66Qvt2sd?XnEZbEuzc+=z7<9Cj9@8dz;bb6mv>c zqm6Aw&O&5E?SPn(bIAEnnp4tYmNR{u+2$;?$%Gt>NQhz%2{}bkC=#7Zr{A^zb>q5s z-SgN@?D2VjKJVA-`P332417TS`mL?7wEgdd{S023Pf8F=(djx{S;b<2(B4MhSTyUH ziPlwS=pd#1qB1F;dG($YHxBd<$rUuDmLD*N5t|hia@lF(qRggvABzD00`}RX*}$|X z6%-96x^{qBL~ZvD%lBXO2S%vRMZgkC7n)ouneY)0OGU&%Y*Y;*`CNi)QI}^b1zOf zj=sj{k0ibLoOvQps6&~s*#hcfNdMJUQCTVfzF^lC#SD@Wu=%r%cmFMqR%EYwGa&c! z-{0!~Cm$s=yEt0;fNlyJ_*19JpiEb=5j8BpWNhf_w2@NA^I_ExBK0no?||Z#C|UDLZlK3{KtZaNOFAn+DwdP zKG>ni)_{a5&x}jiV zsjD14-lBtgy&mym<)FNQqFI%Tx&1VMcj|=&=1Lemr!+wPW1W6__W`?T{yJYx z)~6zSiC206iZD1F4TNv(UJO308yUy2iroF%FXMOdsm~^tGosEeT;lxkPWgA681svh zZ|!d$Z5Sq<%A1R(v2zE~gr%J3697zkm0>{&xxxeQMEB6zVyU`>)A`+@zvMw0vlF;o`lw z_PWPQVmt2+jL|=I`JySaNZ}v?P+&?U5O(`-#f4f0rk3oQq6Lz-BX<{C>Ol|D5s^P z(G*c&9?m^?TRuiwK2Yw=Z{;hHW*^^c89g^Z+dGfPLKh)x+A<^MFMUO63nqm4T(rk%*M~$M0d5fBH#% zpiCSkzlnmU9;c?Ec1u5btRwQKP4pX#j{cIltnK(Mo6)Zf7OPCKP;L_cFD=u+8HX^R z;cgy#ctiK~v0^i_NQ=FpVaH@LucYZc5*5!8e*!z|F5HcmtK>L0xijUj$$a!~S0z}Gk5yf&51&Dl_(@NQe{tMr>GsQPe z-o16IgJ(LdH@lTn*2vEP5UA>x2g^#sNA?JR|I#8k)E0Xhk$j+^dpSqDs_<-QyfS6e zNOQ^Ov4-RJjQcy|v#ViY{Bl7^M393a9rFR)rU+)>kT#~y6%}WC(kRt`{lM)V zqOkI5VhmASK90<#iGhxZJZGP^5Dtd7;My7m=C?>_IM0G5*;&CTy(bAwOO=oO>WW(T ze>@)^kofsaPP48F4sqn_9f`)&RX07juwM@KTG?o-)pHnTz{k%_&8U~B-s_kIzM_i@8IwRIeQB$@U)dUUHp471y+$!RD*&lerDMO zHioRZgn-uydF>rrsTpSH!koPrTJYd-x;QLVDP2!ena3d?5lRx3&ui9s+RXhaHJyHO zu42-!DR``~qdJzaAlcF-psgS=iQ=#oQ2+}N2O;630Aj=<>$q|7T#FXKN4%Z{Xq4?Q zX$0;7Oc^>_Tz=RG`4i@p?N<(MiY6i=IPziI$xGJ{N|Ah+KKdW^mW(3eW&8S8=?E&? zMjzR6VN$5^?LFA3NJj%8(8iOf8~}7JL)L8Xe|hm*KFxTMEENE*hnB)t)7?ujUM;(S zbr2I=@qlw7=O$LWc5(0BD-+53JZ>F&p%-z?A6I}hQkQtXCJfxy;rk;SN$G#$OyOrl z@idMHu}C5GX@tSEl)Zfw3@sFIRj5?F!=^$ICBaTMHUJOU%}cGh*Sk^=!t)Vz2%dvg zjmI_`cN{a3rt^R!bYvXsFFi~@RrqNd(!xLKSfD>bK|CFSpatx#p8Fo^Le1UXI7}gaZJ5TK!G;8mi{ERJ&?_U!#s3 z`l4~I#E-uX_J*#P->$v2O<6FUG>P21%UmmU`E_l2-;h8TdZx^IFb0lnNy$k`Fm509<~|1*6ZGw` zv%hM-O#b;dVO6X~A~N>Ot+G2aXYQy-l7OoCEHH?4Rk@@2Dsw4EZaGu)nN77G1dEeB zVCydwe?q>Vr^y3*y?*jWx=4S-#RUr9fTe0^)a}tg?~PM=@LCjXUtltwHkmM{6A!6D zN7A3&)6CNi7CCoO#QSsv;_hnQS+L+(#H6k`l+tRXq9^JtF*?#vV!qU^=oW$cQBtP` zFZ9etXg>U{ECEqTBlr(tZeU^dFZBcW0QqfiMZo89ei>H0NGlKr&U?kR8C}G137vAD z{?~AFMYl;@0=LNjg{I^nStfUa|H`|rg&S!fJX(V4>d4^|0-dW^W1Gu4R)5Z_p1M+4 z{b6-bpkeM8)yOHiTI3oGjiq*alDz5&@VU&U8T}eEiItAGAwswe9OC{|syMcL1LG`) zLSi++>y?t+q8!+Cosg@DmrRMF-smI1)iQ@MkE#)z;hO5gp);d_RnE$>c>z+ORhxut ze~%IfB|JHp?dp_o?!;sZ0!f^rS>WLcB@YRr9wE>V(u9L|f7<&f#C3|e+oC+KaZ{0p zg5UVzK1c0a&1(CahLe}GeZQ4;=F!g7*_$m-e-x=UrzJQZZAEMpY$hLhRM%5}43Z~)?`uGo zL+O8ld~l!JB5cAL5cS~Sq=D9!p+qEXQ&*SbTGEQ2A_V0bpb5{vAcj5lJn7CMQ@t>c z&snPJ|6%{sf0OHJ<=dpD0c#McOqmoRzO@N{HB@?2!}Upc8H^7Haq)O=Nvwk6Jy~@I zdApH;c9^55ZwDtx61;3@e-O~oCK5|~?sFAWuR5_s(&y0=5z37xmd)9MaA>4rCF0@v zvZ`Q*x%xsfSq0=%WLWq=z;~YZPClr%R++^aD{ke+34)1txq7Srq{Q;pgn zA6^2E^0^Zx=tu#C{Vf8|Jv~k8=P7l=l1NHwyKT@E3(sR}rk~b6kI%c8N?I*5OdAmo1_uM3t=EbSWx& zw<8WMY#oM!V9EL{Xylp=DNEFlAWY9NkRz~^eZ|$NQ>Jlz1TBPeBQatAM_abwvtjU< z!k)zE=Hk0M;Y3o#anH!e^Vb(@c!`s-Ma1A2f2Y(RD!rn?4IjajP2dQIqW7gI*IwPk z!6psRQsPk8MoITXG9$SXLpp_fDH$@mp>+;W0hZeqnIjL43lJ%1E-q~jiF^7;(DZg? z$?ocXRp)k9G@kb==mLhkWGk%%2Ak1>Hy_N<=t8(4lZCmd&hGp=OPX^gzjp zEbqS8ys@sRj_8gD4yjOr-dYuTF=euQ@Yg9!e#&wY9#S$p=tXq2YgJ?# zIy&^%`@GOpPFLe#RrVTWXIrG*SR@-Ih9exE)rHO*pkK^!ev!RXYP}dLrcInxKg@>& zmDz-f#R@nMTXZIyX?Q;tWb3o=Wo6zHr*sk%)rM9;)=Sy0i3&yntjB#SP&)pcR4#AE zO+y1(T35M=hrpR6(W@P6DUtfd+vfqtt0Qe~IA7nAj;toA&l!SSU)AWg;FM8#A&Ehy z>`^lCcS`x%Jr3r8aQntr2lp>|{*BUDi{c#JT7$pn(n1oZKOE9@ETzY`-@TU^PEIJ( z1vds~rPx_Nm_lR49`sH{sb|sVm+H|ixnt8G!5!n_(*Ry4X7h*taZdX8S<|&=Xja?* z04>BqTbBGw?AV8&g#c1cV$=sEYDX59ht_7L>`RmZQyBC{sv_kVB2~~uaK6ktAd9Cm ztK!te&NbZ7k?q7UF|eiYT=Ya~bhjKc!!!Htt$zOMXZfi8=$;tsU8$$3?4M&Qo+$x3 zHN5iNi5a6ULp)358CAhV8!xq11@Sd6X4N1u90U2aez78lw}!NP^*1NG#62-rAOUfL zV)t6br`07`(HKanz4a6>a0ftp08+4(42dHx6D6m}A)6!7ur;^74|2A1T?bA~y9ku_ ze*YWNai_Wm0w1mp(wmtxoC*9yJtfYGnTe$9CVV*dmoj-;_gpz1&bY6avAMW8#ya~F zeV)XnTm==^X3y{VOEnhwx>4zlLvSDE6$vMU&CpaOQutcT%iS)z;sI#)eJ6^YUDLTd zp*X-B<>W4+IX>ir5XYG4Yp!_%WfRGn|R3|1PDYpW^jA<{}iP%FK!l=W%VT4QOy+0xFi)1efqL!O31 z@w)LwLnRyq#*VQ$e5hNouMPKhGZT9Ku7dvkBtci}KehC!FBAVxdAvECv1_?4u?U5p zS~+!c?~5moIQ0vr$9YFCOG};~dg21Ua^svyF_;jY+&=n&N}VvXN$Y$4+X{bYrs|UI zH>_C9&`68Ufp3Ylty7klhyRUyYB2aNpr1Phn>ew@3FzsVO>m52U0;_JYWW?|a>&Xe zD8^07>qYa65W^e|2t~2$VI0pL9p`35Y10h9Rmj2#V--=#LJxyRf7|)_C&fRt(_U=9^W{%a_DkidjpW{EE!|9 zwY9pl@k;0T{+i@pAAjund)n>l1#PDno*jMgh!^nGYjQF4z5n;!G~&mV@6R8r|N8H- z7n_68 zFcda*3BcynuxtTDtn|fe-yaOTdvoUKlcw6Fe68j6a{WKLu38R7#SHqTm(;1+(^yS@ zcoCH?X9(R9RUpMCU%q_MQk@}nds$Y!4%dIquHlAqX;Cnl_b7D8OPfgIEOM;tuy9XT zdHAS@$l~I|49f4>e8!-7fAu;XD0cX1CPM=)V=h)j}^P*=RGB=emE&-T`yLYFmugJAXfk z>7Ts$Z>-R>_O*JXyepJ?J`hc${jCqihg4oQq&q71-LhB>5bS?o$exy1X}Nk!cd>r` zP2Gdsj}h%=8J1pxfWzH-JZhi@iS%1N%PU*}qeGG)h276=YE)a?g=omZyK9c+T%jOq zMZC_oU8ei)+wV5T z`~g!p6s8&Y-au#F`_HD%RPOwYRPm~2FWlz;{r>i~*kc2lPiOhLc)RB$JZ1M;Y)xkc zG>v#B2wwf$@Va|uxbDyC57jnL-;_Ajua1hu@_yv~n|%q$aNw&Lk+AQN+2Qt5dYbmu zXPj4}-w4;1v%R(e7N>uG`;=YNxH`N%dFN4`e9+&uFalwaDa8;`wfFuHu;1Z{ zcgI7f|J0P+x&E$P^2V}mt=Rhe` zsKUfGh!p8d*a{%EPOTlx{Eh&8x(1dHy0mC79*%MbUw=%$nV{-SRmRPxGLtfE*WV6D zedaQ+Kq&-p9J0Ls0LZ*A#X{!S?%jKuLmY4;X#(v+1Wt*d*RQe?zbY?lx09JL7%S(L zM5$JTMTKbC>k%=+W6_IO35D2`7|KI=#F|s6MjHE(?&lS#_%H(i$dWr|1EaFu6><)1 z;KC_h+Y2c0=HjPn{^nS(OnA|8^9dnNa%6Pwt<@%P_p%9uPsU#nDJ)*COMIqlR8oo<4FckU1@Dy4u0O z#sHuH0)BgEMxT9WvtgzD=`XnliXPzzK>Zp-u1}bdq6NH^%g=ir zu1CD#Z$q+at_d8X`6T)TiV6Ms4*K=apCsF71{5}51NM8+8Ax+622?zrgf%K2O~bLJ zkavDk}2z5o~d}Wu#+)fvo4t z$I}K#BL!U}ql0J{05tQ1y6;G1-O?FF3ed9bnnI{XFMPYHX;(qPVF1|rzc{SdhxWyX zrSc}HI!P*eH0c2ll?|<=4gOOSskw;GdLZS-{xx`emK2`0it)-O6l#&UfOCHkoQ)MR z4kC)EXHb8?A>RK(+wiZCT|PkCK0nKMNy#@>&ufYh6gFKQU@5am16M`J9|xWmC3(^L z&FR2Ea6cdK&t)^~<_HSNyN?k4^-uoN8mHk4rFf#*Yzb}sV-8QbyX3m<%O|hlSwrQ) zd4|-1%7}|QHU*ra7{=8&=9sGPO=Ems%rL11;VbF`M<`MiUMeTVU1P^X(SVz#$&-`JPYf+hhvy>>9R%vYosU``V|;JBREF<=FMr#ql89($4V)bsVE|SR z3B97cp-Ep*xSRXPQKI<5JFl!-qB)602&6bZ65ZN#1HLg(P_Y{&5l2ena_pZS9##P1 zWn-MHItYaoTe5CwNfh!MPJFhr6%%ZLsRHZgoS?(~0hZ&HmasF`xQ$|#jyyaw%jyFWs7&x@d*GGa=77h6hTnLz@rK>El z)dy)(^sEn6SuuOT$+%HAX+jzFQs#-o1Vl9D;v@O6zyh!g(t=SL;JQnJ4aUCY_q@0#8YtX z?OE=8yo-QkrC1el-Sj9?j?c{%BvT%K z;upS8=qmQ2QA4My$}A1+aiD$+=hnKiQslM41CRE8Lz6^DD_==;u(5~>`GU7&nE7Al zHOGv<@&xZ!QyJdaETLD4(>j+;Pu!mU(xGS=1WQI|7qcI%snQgyqhW6Pck4qB#XwGH z{-$N;#dxUgEc}eWB+@tpiXPp9CqoHl-nvOnJxsh)#!s7r3mR?;nFq10CB85u**S3c zYrEF6j)&ZKfy>IVhsRg%4BWT14DWDgGDwO?ja9Jz8te6(;#O8<`V7=azo(?nu?e4d ztt(<;R#=B_@BFD8DsMW}GK^wyp{X7iif3KnIb>k}81}@@{#tO9n|8($s!fVc* zzrU^p*M5MGaFH%@<&C*5rhAe-!SnqfV}1Kvi}~HVr_~JY*0r&7uE>&fFGbcH=YFxU zYKj;WHxAmnJ##jGA)1Dwm0A0l$sP&pVfu~u{qqWYb9NdNZ+fP*3ZDIU=~2<;kPl;H zZwGeHjBK1tB4JLNynJIroHCtBJvDRa_!}6|bl-_#5yT>GbgYUWe3?k1+=*LJJ? zW*9>uZ=A*|w@b%p)2fJzoBhWFj*9ZEBe2b3w1)U%=e+Or_Et$2Pw_1U;2eWz%s;(Y zl=Ef9_iO5!c_9bAwc(+ zna$K8jopQA$6OC0+R^|scV{kCLTedT;(t~2T7tqZWSSZsL}-y zCglZcbe2O_$PsnKlb#RCxjO@1V1OO8sD8I1qb{mww44=1Bpz9x4tf5{<5pA~oxxYk z2vSP4{VXG*1^_G4Z#NrGfZVmr$EsS{a^HpjjrOjQ2HVm$>uy%l;}PbjAwLUN=JVX9 zlJ6?Z+%zj}*FM(vBi&BlKWfW1*mUBThvoKHgNqqjm$!W8)C^-Sk1k!D^Zr?)Gxu`b z-b3>>wePAv*^|qH@l#n$Cwh$pcysNyy+=!1N3WtiwOP$|Epc^vCdcUFYuOuSs}K7i zeAl%@8264GF&%MT5@=-4ethrU##YiThoLz-oj$V}3{79jC}KLeP1#S80mdYoCx|j~ ze+Tw$$?NAehZJ1qz!+**|ACiBUXFK2FV$7j#fv=>J1hpMf)Fnc6lRB0)|Y-2 zLqnvG-)DbsoG=)QO}?(Nb1&5gIs6XN9&HgmS@7T`q_F(Sq4RYHbE@e*tPRK65|8k6 zEkRX26BV^t6c3AJ7t8J??mo8QTFBJ3s2{n8dp35bdLRx+%x(Gox=vr8hBS+~YlS=w z+OQ?sRURz~*ibSaR+$0`kCbDIjNH409zH|qy`uiy&1eQtYo_f9K{WdVcL&_g6OLYq z$q{la0tj3NUw}ggwLOgk-3I*gd#7nwqi=RdbmjRJ9XH#rq8z!{@nK?qJNh7M!jbD2 zZ*OJDss@jaRQRp(v?3mR`=+#&GG>Z?1Q@)Xc5_eozapA2JQBO26^!q+VP46i{suYk ztH|-LYS{aW_Rp_)kD}~vZgf(P(QMMOxcT{{Op?8HZqJ&L;)!t11m24jRKXC#3NS8U z0TP+{@N4c0!4N^pgNwpZtUT@oHV}~TFjH%-hyFn{85%!(j;;7^1aKZvY)uFo`djy2 zNN4F0H8i#Y9>zL3hq$?tWP4R-OdQ$juRg~)l264m;y_!({5%7_Cg+X;4XwZpBYt|{ zsURtnj7yIT!o1|2kQ}8^1#&Z($KLE2F#>fwjClu0Y*NZb1-DZ~PbA)&u1G|CY+2G6 z#rW^6-Wf0{Vx1qf85Rs@ z8`axo`^E?=*~7PdX3*4XFv!i+=T_n$%?PGjWx_7q7NZQ!a}72Bl%Quw#Uf;jp0}M4 z4*=GQ(;HtJP;VO8N4ik5MNDlLQIF^fqY|gSX?sM3ujv@zl^f}?Y(yP$6N&}{{s-tM zUtIQtChXsL?9STqU4{+~aWwJeqUxiExJw^kAtPR{Nb;!=7Acsse^k%M^oF#fMLR49W@+UZpQ5-719WJZM) zjA=_Jz+qS@*j(Ad#@oOjPsBoLVzVOJ(B0}WzaD$TjMyv6f4cW3z0?Jt^x#5Z(|qYl z;kX>WqzgdeE~$Z*@@NutG!Uf`?&5kM;1^^NP&5IHjW9&}dd!Om7Kepad4-ay7$L3* zt2-Nxt#LsA4{%;vrycpoUXIc1p|(r+{g}og0;V2*#@jOao)(yE?f7{`TK-ha?Ad2y zcYj8VUe3d_tZ(i7^qRT!L0LhW6GB8E%sZ>rc$5t!5hbw%JrKj~dFGKH_l`ZwtRce1 zDkf(hJxfoO9t!z`>nqAkjQpA0X3>up{T+!XOi8rsa6t5hFh2y!f!fNDBND8Schzt0 zDVaT=BOmKy9Q>&9>osvDRHqe>tP*&Hg2e=xp_Jw*mM&-9jX-0GGs_zUf)As?u;g)Y}saqq$Kv#%^Js^Pf_lLLJ+z z9dB+$pGn>Pw0b`Oa4t@D@ADI7BH&9xCpn>EGJLetcJCzjv;tL~m$ZjsLx>T3SbzBj zL7*Zr8X9oNP|W1&!$WHJLorJ^`!1{JMBbT@z>I$hSsO{{{vo>1`dskTe3ERL{L1mv zld)aSdtXEzwgz9*RfY{ViGLTPd|ybusX=XFSGvs}CP$VB$~hH>I$!djzwNCUdId3(E6MPFYxBvlZ|53N z-;O&RLr${%&~)#{N`zYp|L^?QhwD?1sdHgA__bh#{y(-I5n0{?2*f@z*L_^9D3xkDgp6Bj;(y$3@ zRpgrLhWWG+Gy((N+q|36Ue2)S5<@p#&t6$EMRv)8$B-d|6+G+=kRB?mo6AI$@L_Yh zA+m|djhaG3K`r2SB~{RWZ!r`-L1sZbpGG)g9`AX~D|#5DtU2dJX&6yxQc<=yn$SXlz6AfAZN=^rW$Gh|dT zedy|in!VryvD-Ydd`<4uFm>W2&LpC^%FnJ*5bF%l#^5R7{>{P8xrT$15w}>bRpt#ZL!e7i`1$|fryutS|6s3`kQusoeKZ+2RXazq2a6QtHK$EHpbKLkuJ#wPN#CJ z1I4z>Jw4!7pS$oYLN3hJn)>>963StTr*h^;BwDO%%uwLI5=Bi|xuCFQ3o?%sKGQut z<7-X7Sds0Fl#tZfEr5VQo6MaCNQbG2G^KJp%AvjM7jI%p^JQ0$;ALocM_7CaB7aB{dx&q~UPEwy;1%N)l?Ej#hJDm%>+T z1cbZbOG}5$3EEueJ)2%nmKBur)VqJrWwdXfordu3$7Ol|(eo`U-#Xr~lSuaAcQROg zFVF}@rq6vUM6=&!dR@c~%r_15;**LDV03C1}ckQwIs+jG0{zFw=v z8*x}VtmEstUDkkJNgWa>;zcrGH%Bw!5@CJMDEUURwFO5yCBub|R=zLpvvoZ~m@BX} zfJe*Rw@Tn~6dK&Pt;q8(aslX@A?V`YGl%o+l;fJ>*kyVU%D%4_I{a@8%_u?Z`ymUj zRRJT@L+F&&tGT{nd-Zld(tl%n`%28mACF&cPx6sypB=Z))#UiW@~qpNZUM}OD4zO| zaA}y@zbnSC@3H%CDjPgfmN6vdLb{5O7;)lxWn41;XtqOpzdUx@ zzst0W{XIVj(@@A`k5v_Oh7bPsWMx%qAQ+82iFSN^SOG^Gbzcc^c>|>VnHQ z%oVpR(97sI-Pi8k;d#YPjrau-3XmEHJ5ZzO7(KtJq1us~u`eTM0e$c(0VPl54*> z1mb#6k9g@UdG|r?82Sv6QH5#4USzZsk(9E*0UR&P(R0DeHS_jA8-$AZQeu}8e0!pq zOyRChOMF&xAv`MuVmQ@e;pHv`B`L(#7;!+zqA0Ub18t^RFpr1kQs++HFVK7AyqqE% zkM#h6Z7;lk`WRCIxujOs9lgr`!O$Ea38lnBgIG__B_I@%@3F1JS^RvYf*kimLR7z_ zv+m{3!6a$N3B&vLSuU#oVF-KQc`u)9H8Oe?8kr+E7WMRI-YpN!kbrzWJI0p##z@r2 zT=U)k0n%P2G_pr1pa~Gc1F(iyjyEGxNX+BLc^^|bzI3zh0@IeG{dv`Slq$z-UESS# zZ(MDa*GKX0`zSUMWo0^)o74;pf*S&--P;5a2o({<@xO?U_YWR*Ia_U7>p89UL`R#v zg}r6&zq0QrN>ixBQKe+%ORt9$Nx@^F2#Qh-(HV2xRhM|s8P}!jim1ENOyyX8Mm2Z< z_Q4uH(q=wL0X$HB$DN-{f7D;GTKMY+DMy4Ngg$L^dP3nn?`GPFh!3I4VWQzVuss7R zy0jq?SstvcVZ-UtBw7GxIQ`??AC#zX7v@+$hN+;zIR;>oMm4&AGEvs!U?H(ri=}6ikvNpQAOx zi*(^4ixMmiwx_jCZ{T`TkLHuW6^6QB@7<5n^Wm}6DDtmw8_$^Gp&FhcWS?fT^c%SL zzvdok(KpUy0wuuMkl2E#YOA?Sud5lsA|Kp@jmT3bj`%?Z)q_cl{Xs$~Mv0=BfOmB% zEcuZ<0b@ody8H1u@pid4j|^2FcPF~l zO6P4{bZ1Fz3{}*eI?*Z|#fA)HXj7ev_mXI-3_gNc$wr6-I2yg0Jn8tz*!0?%5#=n( z>fJ0LncOrVUU(*nB~us`QJa;It)TaN!d5G1x13X1i{$lAoYJ0+>9?woo3{%~C)Pz- z0;r^2QMPC;jgVtW$$nao4XfSQ(BcgjxmX86X=x5#Oo%iT+|u|S8q0t2JI3 zq?67ns1E9UQluw=CPu#TgI49CCeZk=f|2Kz1*JIf9SaNMLrKAEQHHgr6`E#0Kr{6Q z+CIOX5t;k!&vURYo-_4R)2jlgn_muSh)j;FWWwvB9jAHq-eRWwp z4%(9)e5ZwSwWXFQ4Uh(2I@iLK>g?`%qH(8v#~z*&mwn#=rFC*k<>g3iwx<$hfz_*H z_*@?$BkM3^CTl}=GmMyvMQsF+DgbpH5#wo|y`&Yz;X*YL*P^_S+=zVRwD1RV=+nLT z6Tn5&ruEZcPa_vsOz8GALocCEf&eADDOoM4tB8LnR&=-jZ#4ATR)TfMdsWDtTAMS^ z$pj}Cz0;0d_I#huc^GjDVQ#T%zTxCkpDKc|xHU}5Y@5d?>@xW;s1ojTCyX=hrh)MwX~SWl^)+F+ zMDK5tnv56vvWF_=>>2Jr=~Jh7))TsXR3;Sk6|t2>ied>GLlo6U(k1t&J>6+ z7x15XZ4dK)^n(cMKfnv;8`meW{i6NOE9IX!d9X>`m(@yz5K>`Q?3K9@kx>h~if)e$|~5C%uYjEWl;w@6~Tb5)d?XI_sCbHG-8$A2s*r@J*WGi>Ly{xG?j#nFNZ1A@x~9Y10q>h)Z1?TUY%HcIGGW3s zHcM}rO<7m(BV2-Nq7?Pk#edKs6Tg})He?@&c^-2V+V$t?W1D|>0I}wYCn!G<_)teE zh0=yJ0!R_C%D@=Kyuinsar*bnI=UZR3|v1(8=??3w(ysu4%~c5;0%@gzc5|#+(8Tx z82&H`oKA`I$PmBw0ZjhCm`o1nsejVZ&+jKhnPxd0tp9g8qza-*%a4I3OUT*FOPl!r znO8?RIg1-s%f$tu{#skaXTsQ?pXo{UfLVGJ`I`M;v=hA-_I2W=_`?FWk5eff6oREk zvFb$m8UC5Qy&sY-TfJLE74KxMLF0D*ZKG7C_eq*sVk^+lBgCt>vl*z?VsZ7sjboih zE zYl0I$JMH+o_hMTR`wl!D@m!$Rn*ss!{f)#imKuwT8_TM)aXd` zmG5C*@%~V>N@s*+=-gwpX>s{I8KdJNp;e9OeLG}@;P0;Dy`qi^*)qZ^i;f7+EDo>cQ2L_uKE^z<7rLh5T4JAa^moU8XfsKfEuhv5LaurKW+l zBX9gyHDl0Ri1Yq0w46SBv@33W{eaGtMA>oue;<2QeZs?(g-cJHE=*o-5iLr;(KUA% z5}v<5Lj_QTxW`4Si_5V#^GgR#9eAsRIhq+8GFLoizB3@16&jrsabf3(4GRkX$cWWE zRNi%DM00WZXlD(#zK;&RyJCGma@g_BjW=$-_244iLd4pU6oCFNZ&>0=pT%odEE*xB z+I8{Bo#pO4VdzwC@R0{oVhjINfZNd!aQNvr>Iqs!CW52xth39PcfhBvXD{%U_Ij80 zA3vC!y#2|?{UTp!BoY({w;H&bvp)U%NH~TMkm)|K+uE_|t$K4*Gw*wm{i8@hM_cRO z_{NFDe?5SYK3wscrR7d-3{8N~+lg_{ow;Ch(zrk9xY+dR)SpU^Hi9@x!GBJEJhJ88 zbNn&EW1YDV^?et(kb+-B=yaknea$H=kh4 z)k|qhCi``6jQ36Ki3oUF9dY)T@D6~xZM@a$st2+=t9%u>((6=HbK|6Syqm*Z{su-% zFK%a&deSgzE*s-D&4*F>C>HUh`P=6E==eWLk3NS8?N+k0CR01E<&kgkYHnaldomn` z!knAhB`m)Bq>Ndfn(f1V&wE6e9ckEiHr@S|?YV}M5d@p+e=b<(ilkwGI#V}$jn-e^}woOz2N-Dy*n3Q59OJe zb1OL)S_d>;W$dRZdXRHRWa@H-P4O=PrK;yC=&Ic5Bw`{k`YE zK1;gYT@?`?UR=pIoDiq#586n+stdmr@KW|>cSY1#FI~y#zA^`#p~_`zb8`EbfA@Wx zhExa(IbbwW9Ea36jm&J?HjB%-I`}y(4;wnzR;i}MqNcodRwR7fwRoPMl}+?>L!V1`!^PwA*8tOeDy@uYCCJ=C^DNvcVts?f7JcXM`M zyyXC#p~EKvZCgm$Y1!Fjx&mpNPchLjEq29lkQ@QQhS%tiqi*S|v`Yd?3YtVCr-P9@ zMWM*^_{UB<*<36%^4fJZkd1dRFxatB%4$NEw8`#8Q&%}}2?T0G zR|K{-zwXY^Dk9OA@h{R3P3ix6O(Mvg8)P2Uns_M>sygq4GYK%;S~EXe-}*4aIz$gs z9gL;~)gyQ{7;4>qQN-%@{r*0G!W zuQo81-B{q%#-FJ`j4BMp)@UwCcbru*1ZrDo4-w6sVpvREcQBR&U6J5lTP)3yvReGF z*sA-Kn!QI!N+8+vS>gR~8^qtWGV{_^Bgtv8>-|VkA2ZOzRBy@l-&-_7^jM={j{6{j z-K|#Wa78Ja>bYy9OF3RJzoi#XmU;$Q5XqP^6Vtb!XZSabei*Wcs|CJ=p~XnXZ54_g ztNOt>Cr!>4>(O6bL3Tk^-;x9ek8nl?RU5Kydnt;BhP@~B`*F%p(zX8q6y{&Pi@JXy zi~gNfjTL)|#!+zo_H$)7t_U)UH`2s7IABjWssN78avq)205s_t!REzozG(<#$D&2~ z;G7!PcMGO(>6t}%*6Xa(f2(*E=_4xE6lwwBrH5zXlG-f|@2iV3{;*(;7Lg}vmuTHm zMdPd}rfU06RrKVy9MkZKJ~XyyaSGQ+SH^lUo(?hzq9Q)_4>J1nccC@fZ zMpUnVEMZQc_rIZm%yWY5Rc%q`BWBA#gIl-%-k1a+9(=cmoOyIUN8n z>QeN|WU<3&HTuNz<-0i!hE#S!SYg`g-wlp|j-+e(XBhG(JY-8iZr3)F1643|1cqM# z92QGV5GKSO?2@Di{sTVCI@dUHP^SigMh*f`aLlkPbsFg_fFr5hK`=njg409*EQmfPG|c;r7yYIXyV`&qePT_hYN4P9eRKBhUyJR}rs>=3SBF`UsSBc8c-)8x!~jyYA41`r4~p#R`|YehV*DwfWMgsAi7?48 zg73~csDKb5Jt;p-(+B6gzpHzfd#v)QkP14xURwvt5l>SPh_yJmL?Q&o>!^HjPfC>> z$;PLj-Gr57vlDV9HmPK5XEF#iR&wf8#($sSj1QALNf-CShvL77Q51b`P&FDDu^2&- z$v?RYMIVWC%6MfQKq(k}8x;dsU}7yw{;%2a;*Rz&dC`KE2SAVgDJkgul9OemtjMd3 zz+aJvBGHixO=9@7cjycR8oSaqdTk+o^3}&I0#T)-<8I{jt2?%eR~N+z!DkeqfHRHE zDm{C8!aoI`Cxpd8ITUtY-v8JyrXeYJfJE``{G&~Y!V;RAOX5xcJgv_)M&1R#C@6or z+%PY~+A|Hc60XOq(ks$UA&{-IL#6NRzj!^a5ML|MB0&g5CtCwOi0G_-&Q3~K0|1*~ zkFFM4GPVah-@hK8$iBW= zC;4Tqt?rOgRgzaVrfeJlL7^QUp9|2?K+GnxDXTeUm85Ef5}9)RJ5osl{>uJP+ZBmu zk4#s4>IiO^%Pl|qwpWjzf}JGThdz$j@jVh#pU-Z*X(I0c#|QdYzEGc5{^m&(lzt|b zFNKw9s7TmnV0i6NK*HPZnYoOcA<74tA0w^j^Pa8;YSp^d&^sca3C`{|et*ZiGM4nn z1CmnAp5`1TD6K6Ji;Gk-ofwr9^U{I{<^)r5iL={Jryr^TUhF=x^L}cee|-=~($Ym^ zzT(SgeCd-`>9hAI?%GJ~cWFWFZ->D5=|r z;SoNFPC)O%zGBNGuP;_rAGi-KRY`2Zu!|BRn@2OvI_0$>7uKsa%%=nhn!}Ec->aUi zY?mn?iT6;7;tUuxqd6mM_4-ZU{2t9}e<`)dr^C?$uPX^{50>ZXpH_@l<#^0_=JdN= zlRMFh4DIxgy%E@piS&J?9#_m}lb8MJQTtzsLXY{@_slE?WWEufK~B<{cS4L#+%H%O7wVM(?)>3gN$H*F{r`uga}Q_wfB*Q# zFo(p3SK#%AOYa;Rn~+Z<*NA;NM#B}9F6&~lcV*~Xl5*f1f-kPeRJFo#e=bV89R z9YpH$+xPli*AD;e+I4N$-mkr0_x-#dk3&Hyjtg6G-6STt;Q%GWU)nkHH(AdIg)LZN zykHHmoM2@Lt!5_6$EIk|b^W=O)k|$1eSksC7aKm*C>ZV{Vkg{VVZ0}lY&TQjQaEyR z3g3k6>=&`*-yB#MQtfucke6F*R7F&PxWwe@ip9p7ep&2TzxktLf57&)$FpOF`iI@! zYWaHDZHI?Fb4Fm2#N}OyG2a{VL4Ovq5kWPaLneWh1-I`5%!5n#L}a}kyS5FBCt>Y* zIE`XBrBL!H$^OxqczYR?KeI|C#93(D6tx&$G%)&`XDLZryWmXdmBl&j%0*rK0(@K ztFMo}k4H^k9nz%>#f?cJbJDgG9sVZ{JCpVyJ!OMihm`%>gUt_5xk<6zUQ@=4YVK2% ztf)9D*P`~@NDQe51;cS^AOj`X=lZ@#kSiM25UGCns;>0*H+fvd@zQMbZ=0zQ z-wF#~$A1qWt&fDdL{_D~-F|&R6KD!(e(ipsa<}8cJ@4%%(lBL--?U83lvF|-4i7zB zME>q{F?CkC^+DaUdj@Vn$gJ-NhJ8PPoNQLEU9L#cHoKT%KaK3h*!S_J63l5r=e&}4 zzrA}PNJKONNn#fJei_C?oG1q(0m;eyq{NtoowSv2jV)5q;=dVhj%+8^TP}ca8&Xjw zo`$?YOe|J_#I@c$F94*%0!6D0j2sLk*MvBiYkEN=Hq$a-0Ls1z49i1wegxl#s2DtY zbav_61;f-J4X*{zsqOPLRP{hmo?#fXyJwLH{G6{SIjnm}z0L3K!Eg{s8}oVT@PTWU ztWdu{B_|WFpjM}ETq^5UI&-;Y>8varw1?uPKYey`Qs|kaH{Be^oIZU#qT!JPz51Z< z))lIzHz)T123mO;XsW&z_xgLf4L`FJM3bVixx@JUB)n@YLYo#RKDQ#{6vQ4mw9kS> zFmwCEQUuA?)5@k+K!kxRc-AKMQjz$*9k9?L3W_t?c|r{9yY(~Vo9Fg)tPpXg$HNTmGX%ty1e;0VrY|AKT(}4X=&lhDrk!;^ z)`uu@9MOL7Cdrk*H=qu_E=3z4eJA?%KS-udaUc_lx-QUIt@|B*M%f%9hWcCLULGK; zLBGdwUmAmeN~JT-BL>)uujY4d3sC}2yVI$U9zXkjw(9Tj@Y31y9bVucwZ}gHdtg2E z>cI0IjmF34exCdqC9zY7>@!fmE?NT*QU!Z1}ysZA>>?hv49Sx7pbf@8dI? zg%|ySV`;ryC*h?-3YOiSpV

xBkD>Xc}EaC6A3*LOA`$LCH}7Ci(5q6+mVePye- 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 +F5 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%0DY9R+c4%#39Mf{U^zy6`_-s`oy5+0%C4)B_ zPRSVC0QA^p1-}wkNPTRj@)J)BLk|@_Lf*hPMu%aqM~z zTmkfR@_J8!!MIrj)Wu!+xCtg>B?4ndRP!sOuU;#{FwGsZiaB7!3lDNk*kbuO9ep(@S23Mmaauj8 zET8=pi)v1e0K1yfrY~SvLmw$}gVys{Hz^5G#653Hn<@reLe1a%ul>y}UU<^T3eEZ@ z?b>Juu6fZ?&>?E^x>t9B@#)9#hm1N$GYV}(07vM?92IKCU!74lNa3H?ng0Recx=>0 zfyKKbGFuMC(H5*EZ304Vm)9F>zOqn(R%W-mV#R-K_I!UCp;Zn z=amXO*j~7MWJgVJ<0iSnk{|V=OFk$%MX7nJgeJ%q+4=%WVj76Xtk0n$&9XvNapmdG z>pkERWRbrc>lhw}_p+|sg+|_X5}tUpShFgkItpm%2sCFZMI6%A*XDDk#kEvdU1;&C zW0!=TiX+gI0uapJek*_GikQ%?V(?pSGh826U&yD_gukObS+M)uGqC-rJql+e<#9oE z&16>A@9zdLORwv%Nwzikik=*qt<|?~ja#K_a=JUM;*)Z@vKI1Ixj!>313M<)eZ` zB&Ijt568?Ds>dM0Zcr_-BHY5tw`Z zl?`?E-Xz{o5IhZzW1cD0j0xpC;}`@&`?9BL$(QAE_o5pRHt>26{k&o}_M;*2BI?er|$08305 zNJ})tB}laLX?nh8bh!$K@2?Y*b%q(1sqm*>Z&CNAyj69PIp@{AC_E&nnQjC&2Gnje>e5fMl{jA4uqao6(c0bCRROi2F>VK%p(T9tvKB5PVwU5hJ7%&T%+37 zI*n43A0w%KG)j{EP`*5$W#meud+VsNN}KUEs{*}xIH>MKWxo8k^ABom_rG6QnPJ0wXcoqJ_SbNB`PP0PH zN=Z6|VMFUCMkeuhAdCr(wV_Ylr-Q~-^9&^4e{!JU9XF#(tXnyqyw41q7~s}(G~%&r63N`zFA3U zM38iFpVCtSe}Rp$#6t4&JFtdtp!av|(t*P#x5MJNLB_C89qhNYpB(~Hi5AlK{)tk* z4Ev2&uBF*ay&?##j=~j{ydaNhkE%DufQNS;wDvntIBmq2*o5cYNho>J)TM!RS+>lK zTs*Qd?L4{CacvqklLM*rfwCfPwV$LUEh<~WTIjcM@W*Y$KL?iZU9FBzg1SVoDr<&c ztnfrZtt|20A!%#sCbgwmdF#BO@MXpT<9n^wpz}4LAEs zwGKZ}_&eOMv9@Jk7HfyR@nA}+#FYf+gq48jCpeJ0LHT-dpiSkhCSNvk*-Uby`JA4f znu~kz=Si~;TASCujERY^%@_8&h+)v*UbUoiqgK>S1C`gy1Jl6S%)7XK;rqugm$%2? zZnwq{PQN2ENQfebQCFVY>xg^X32ejZyJEOxo$5Z+LWEmUTIldN|Kt$2e%C%x9^mga zac8RD$+Ki@XYEq;bc8wac(4}C*^1Df;K4!m_sqppGqW-A${}VwI`Io5Ds*$z?%lf| zC~#pFBavySGYG6vlrH-S809Df??XdE_ysoBRR1THMd@!xr-iiR0y;Fie-uBMZGso{iTABqY<5k z>VfGvjYm^NOf%;+*I>Y(!0&pJVF|GY)7~&qLlaKLz`itw&c)MPbz#SGATh%U%w$sM znD?OMpnfL(Beh#9^w)Z`#d4yFYicco(hn2cFeDbo;H)qrALWp-aiwK4A}oPTgwxQ#GX!8 zk`AZVFHR%kSr6stW^%iWuQ84-z!-5A*3^BJ?flX^kg#5pzxHD~WfyIQogwN+9jr7l zS*yvzEG>=T_u2UmP-p8b_$?`13Dq@{X$k4YXZfUHMZH260KoUTx_p~h6@z>`_^aDp zmt$)_D{H)A)%sOXSm6q@!sjoNrooQ}-y?#4|BByIO>=n)9sMNfA-wjRGzgB=jR^*g zddSYnOG{JU&D*Dq6TnCc5sFe`Twb5>DGxsP^nCXwnZzRKQRJdD`e*%{%#^M=%Xb3Kn=77zf^|*xw*9JYyqlK zQ)JgB^a|c0{~q5kwf9kd(1ZupwZV<#x`(3Qqz2T+F{C*57r3nU1~#Y;*8d{uboJ_O z4j>vNUm3xOND-USTA_~Y9@TZ{uzvOn5Ao#tflo%u?J=SS5R?ZnM?Jz(~!in$PfDaRbdiclv zc}(J8Wzw^h<{aP6}QBdYH#GerOqF&tB&PM$c_E_|W(Tb-v4Gy{uQ6zZg=pYP> zVx6Q~Ug)x#CvrB@nC_zIyVq*y*zoNwt?$zXWviyHW9f>J+69>!>@ibv93l7gKrhPk z%=7~W!!S{4s?`pVD_g`0ENLKI*V5 z1GO)G?NYL(B-#UW$3k#on*)eXoA4xcnzc!XeAh_F_#`9~)sg$wE8}FcrxkA663$E> zwlb$fs~=rGFULtYEN@9mM@0`HY(?sHPmwl@kG;j=e3+{muEA1bvtdwTT(JbsG2&$? z{t7Waa~>*p-D?81wL(pi5_oStazo4b?IS_-BHv*N3ezxTJv~Ygeg7zm+nM9;Ma{C% zQm@JPB(1$=q(1_l!HEwq4{vI6Nfn`cnF$>9tgyHDwn@p71rvL&D!jM7j2tIm z;9kO7=`G}`VIZQ4s2GqNN4&-!Y*CCRs=Le4Ir%!i80Ka5qLeta zc}0Lr8fl2Ut2WO{Wane+W#)l?2n~8=8%)h4$)F;MDw2UCXod}P_eBNDvWX5 z?c_}%rb^MKt;)i*qJ75mIszXdMJD_D3G_~(54)kz1U;+SL2w_ zrLfD@t>2sCL;tiB-giJHBsV&7E2!T}hONksx*26Q;(n$4R zU?`g;rJ}4-G-WS9I{f2@;{;*J5cn*HnN2YX(n$~7n3WO^cj6uxWFHr$=#sPFK?+OW z9{rHIU?zd!MTJi;agO6e>JP_GVn%@74e?WMlH#?;zWoE4j;A{8+*ASuDTN%QfJe5l zV4RrUe9-Aqc&D9sQ84J(%k&lJ>Gl$79(eKMafV7k^Mz@4Vis@O8_VS(!*aeTy9PKd zO)k>E+(u#^%E$>P+AylWTmL zg+C=NoKBuw7G^Q3`_(=Eh8seUvkZ)i3CGyas$~2@%Ael`U0HwPT+>H^Mu$C}K}{8` z*t}DRuGi0+vO&;Te`2IH=D{#Ww-gO1obbKJnN^+U|BWV8YN_vv&YSO-3IBcLOTBDs zXp?Np&$VY)e)x6=9S_ttN7s_cXCsfWN3GYqD*h{EDLYS0Mz$PLj@(m!m@+P0tSh_ zLfRbnf|#HvT+jm!vNUCl_Xi|4yA;vI)c*(I_`gdDnv&Vy5P1B55AI-YqU4rueV#Lr zQ95)|h1ZV>fG%g&5i*Y)LX5@MsI?IAf3$3J@b#1&K-ketim5F+`R}UM`mH&(y+SPB zM`-^OLntENQB{ga^MmR@qSm#2z!1Yb5|V?1+Rrx`?1O4xuBFJ4^+T*)Aw|*#q5Rp1 z^I%}na&x<51u|Mi68EfJS%sOdI@`W-xvsgwKrc!~v4f;7p$Q_8pj?yQWlC&nPS<9{ zm)aV1Ps3+*6~fDHU>IBk&_QG z0^8H~-ePL}g=v7~**%hio?%6#1BP8Dq0XrG@hPRbZwH$Z&A@(wlQ(>QbT#s)KZBm0 zD__U;`G&+sx#QRhSk;#S&1|GtW$20)89v&{fYU}1S24u-sodC?KSIkUOfmg6;%=l-3l#q^shT!#AZ$olMj5*+%rPaqNP6we2;2Kyh z+#{_Epe#`O`#@TgLPcqf@Y;F$O%%X6a7K-v7UAag>?n9FTA=23y*ik~5Dyddn+a94 z_5Mo@RQ$(%%PrypoE8tH9fDHj8?zMjwu6>Xy$OVH$lU~Ue8u>8Gp{a=nl0m(sh!Z_ zg!R?Hwa~cxcao)Ue;(f?NQG^& zafq+N{PB^jO8VD2l_mN4?ZwX|N$QzkbVp6pbD(!@7+MDdedrS6Uvvn?k3NquuzwF} zEVqn-4b<=LOf!TJlBh4lXw+XOji7Xmip{MH?jJx7ATD4;=NW8BRvM9uD~tVi6*-ML zM7i5|ib@Rd_CW_gHEmEcy`mhe3|>FIl7kn`%J$FJQKks1#!To#@TqQmuYNvZn($DM z!K5KS2oe*PZ~%JhcHS>C1)*nxoemzi-bXbs)BV#{kCn7Fj2>SU zchAydxH#Zud z@A_O3%J6;@%zs6me$PpQCyV&}fmZz{X6`h4xW2k4BMz_Ia(S+j*m%D3GS2eDV8sJh z#Nh1>Y6br%_Yb>2y$M?F2WJu=QYU41Gve62j-Hp-`;p^!f_9U_NDL^8x+2zY zmvp~#nQYV9br3V!^0Bdxz@u(uTagA#Pxt$7_;7RQ>Hw+w7o#grZ@5nvHy0h-PGJsIzrph zC_<(u)bY4MfI3D?b9BGXY%8yd4J5Rgp0##|%Oj&2V%6Rw8@eNxVcXP-#wGn13(%3; z;$a}!Jn^nG*n)HOv_c;4_ZAUIpWES0G|5#-DE7yDhYwgn<$kBSBdmkM)6l|vC!M%M z;9zSY)?Zkuh01H6RlGKf+~kr}$f7FyUMHBW0>ac{l&b<}a=hI=Dcx*_d{*B!;7k%? zB`%-%@g)GKt4pd=IV}B+0~NU9FXPn;?$I70Rd&*LJIFEyCh~{ z5ueCE-Ma*+8h$6z>IZDdyQ4u^Q_0C*u?S}nrW(C}x3Ml8Gxr2HWuKjuHp=Q}Pbc%6 z_v{4b2ywl^4n6Is2P}KKp(!BkM6eEGMOvQH6F9`9w9dxbtnQGqB5FtCcJx;tBmY@< zs(d2oe2EWx^A)fG`5UC2L&*K1dSpd)N$tfvH;JYR$Vyq9sesQAcppECbB%Fbl04MB zK!$H-@iKldboUVnzq3e6t2POmNkJ{m)Z^ZjnIdO{!Qti^#lKGG z7fWTkv_6A@;7&xZaNLjSNdHj=Qdg0;l-I>ghf0@E{NXHvJD*Fhn#*~LfC&2(&3T}Nv*HsqwmNKXKm;YYGcK`8!(J!+RFi#vk zhbvcXM@J{yrue7h@=Bg?opgz@;^k%qYst@8nS0>r9VB!ED}|RPRMG=fUzo z%|9TVYolO}$?TT9 z6?d27QrrnvC|2Cv-HW!kYk}hK^4|1+=bO3nF_RgX2}7RnWS_IwS^Kw~n8p+&-#J|^ z;Pa9#8E1&xblq{rtxW#{V-nq=clOKS5`qR=imq$r%1(ocf z-GH*7hE}sm9V31Pp6i#$O z(z;q?{pHCvc;Yp1tpAw8%vTE%$9z}io5Ne214@P+k198ChC;Zdhi;>WkB-sZo`W8K zx!I--{sB$3ZVq|d1N*^p_r(0lyxze(rU>3dIN|<9mqsA9k98X(?&ZW$NFL*R8u}1T zaTC&BY<^(hkCM6o5THsSBd;J8$E~84wBy*$+QWMLVFW*{f>~#5d~)(^vb(BjxH-OU z&}Duyqkxg1Fi83Yxg#Lp&1L06pD74nVkftqEo1Qbdc1b$IM{nqu4KpD;8VK>Yrczx zg)ZVU_Oph~peyz#GDkLNAsO)~3aKbp zb%r6A>bqK5Xd`1odKR-*5Mq<-ll7j8J^Sy-6AdpiDLmL1fi_QU)N{U_FjlZjigaN+ z_w4fLk;b?xIoRZsiaa z@)68y?4vf#Hvx)xTVYX9iaOr5`HUgJ}g z*MjcF?hT_E7MB2~!3yUD%T@yS>)vcQRjm)EbGW#cKT~4O>Lmut&!|fa)l&JZAS>S# z(p42QZ8Also{)c8ZOt~nayaODSDMz;3ljtn@;VsSuej(F9IXv#SlNfFR~LOEzKdI2 zWGjqkTP=vGPjl% z4%dIOYl!p+R(v4B|0lth)(;GCbh*Xxed%Yho(yHp5w~DsKd`&rEVO4S-_t09N~8s1 z)DB6v#YON`S9$NwT27Q3*#vR=MK06%dw9+rpM{LhI#I!=J`Q`1@sOS$nDxewL9GlM zl=&rqTksy(E9jJ8h5;;k(Z$Rf_#W!N+~FT&#TVx{@aTa$K#8^R<{p*65394YR!JGLxFjk;$(@9%?tj`IQL+)gTY(O8;dsimN* z`v+G!q?5Z2zWdk>+^tTnQ^?XA-dd)6pIPbho}UMtT;`@3koc<*8Pv zQ8Z5Ugw>vv!17nTI;}pVinI>S{sH!i369L?XU7iahh@IXr2sPyy8> z$z%iTY~>&)sd+&r06tvrcB6@W=j1J5K36U%2=G_Pb`$AvPG-Rg*3JCuQRXy69d#eX4Yt#!yy0u}M^C=4G$1EWV{^48m) zZcD!Bn{82=NC#7|YB>4fe^@Vc$6)M(%`fpF@mx#EwH@|=aflSa2YXX@vo{Zdrtg$| zpY9Dg0Z2IlPpel^p)irzBxKS=Y&wYQ->o5!hZmUb*AKg2sGS8>0}Wlmz=hagg^>`_ zLipmsH>;a_pI_nh%}$Yw>2j=yg_acvatJW@U{X-{(pvx_wmNbRR)#vvt!Qp4=;dSX z(Ww7N9b55B+eK7pA)&NHS7uxHhU86jnfT+EKW|;X@+MYrCSQRDJGD9n2ZqH$M_y(`&|1ppxM?Lj7~$t!^+Dq1qC43?)i^=5!5}QJhI+ z2ncz3yO+~RwkCHBC2`P}6vcKZo4=*G{mu7zQ_I$&I}t`#8WfFdio88ujKvXT7#O&D zl95o1@2+V+FPYpWG?jBgR73D0IIMhX1hb>i7Qiex`ZY2FUNXsKA;L6vcF~MI$ zcJe-|PK1obqUKz)x2~vEFB%(FoS(cZmJ2r#zXS-{{)eydrSOrQ2V*cgL5fiNfbRrCsLo71j7QO}!FB)*(Ng?*OpqgVaq z_K@@6@*qGO*7me_!F9euT5Vw&s7M~7AV)ihEl%A^(}W?D*DG&A(MKpU@@Y-K^cn`S z)P4-k@%nY-lR||Ur`eFq`({kGhA9*onQQy} zx-AhEF z*F4nk8Y#pMAR*^|q^lk8q@k{=NUueJhsUDS*bc4u07%9~VgK<8jj%+vGE|nZDPr-E z>SIyB{lsmS0Z6LQNtSOwW)wfC5FQi(eJJHk+=Xx zPKmUayYL4k$xHN&tMGCM136u`6@#rOFP2{{^2+dWqck(&l2hNSteDtMsQn^BK?v*F z5%Ci56}JAUlR?Lc1H+zE(U%_(k%-J;83K1VFJWb@Bszq^L2qiYb^g`w$9p|iAAJ>U z<(*}>iB!!3dC&_jt!k)4;2*&^?HQVsURBEA0MO*UC1lGp6q9BPjgR*=g#&%}}7r!i);h-n>{Q&7Gfm^n1r$z1f-N1E zNV7^tpgIwTmMkc7Fqz~YbQ>aOITElw95`h5vG~ht`$^3c*YflZMFLD++g_CU{BUm? z^BMojB6j9d=+Q!_Fh6kpA7HH^`o;QGV;x4I_m#5TOlWS6 z`NRJ;&^nS6rH8D@AjLs3DewR|#%Bo&0|bb5e7QkTa;WY!6hyh4W_?M5tq)o-jSW8( zK}GKt5%wLyfK(1qf;qO_c@K15m*yUDLUOkUj4on@k9pLez?x!1{6xaZO-SO0tVavm z)|A7RCtB(l1iaaykr|FeH%@63vRsZS;+5M4I1^+h>i?C+f2A=>4$B{@{gsw_24uCk z6xACCpmyu7x!iwgvQF<>a_#P}dhCzRwQIm@yB!~XPsDEX>yT8|3k#%*ndfLP=oUP} zb&iveDKgScC*CyNqCDlfsZ8Tg9=U@vVN(J5K_WSO%Nn1c4Z(AY zMpijWO|>8gE?q6WU2c>QfdZ^hjRFYa7~_-YJyMBSVH31F2zYOerL$@&e0_IG{^J9U zkB0*7YSW`l%M1ZYMjZK?PVibujOSe`4}^& z;5aqWasz&08MXBe{zVPXXH1=psL=y|Qq=FhPNzv9EJf*B?f(x@$i?j13pYJ*OoSr5 z*bv12AE6Ghf$mY z736>E=nq`SAW)oMzjQnIk`CO)$Up?ckCdz3aB@+4cp*pwW8~1_xu=^;R7HcM032t^ zenz^Xsp+7rp0&uBBKkhsfox6?7NrXpKhmFc=X-sc9iIZ)QJ_=at#_;V#y%^65Qmy% z!)06<*$`h6F7F+T{%(M{l{C!uKkTBht}nXpm&t$g9-)1En~R_Rt^W0pr$Zce7iw{G zAOCiDb#Y4JzoI^{L{#!luf?0aEsyX%TvBAQhrKK51O(24JO0OjfXm1AP#z>4!-2Bq zZ!cYuiGzPBQG8*4jYaKG`eMm3UKPi}sPP?P0 zM)eZLqiu{Aw2aQD#`X6Ia4{io#Qqabp*+2}N07J+&y;c!yjzpZ3;^`QF51u)0D2br zjSa@dm1DH@eR`!8$acjUe0@8H!nT%@-Z8>r>c4h(V3$wRy#VM#&#XNl=`;gj61-1nsDz0#G}t$pOmaE-fr^bYOXlsiMqbi`_X za$v;@9l;qqL>MgPH1i2C&Xx>I;PB4rOkK=z(R-JDSIg*dzwm*=gC$v0I`UVrulw=Y zMf~kB=gb(5kYz`JUvGTNpmh*SEz*;~=yDev{`hwq+axi0imkI$bnLu)iHNW9tJ}_@=1ocYr>>t?iGHKe+bY=!qlxj(s%M8ir0#9#*2LC`&utM#Ol#W+#q)v}m$_ofb# z31>hnw|Q_MQpgTTgz4D)kmq>qI>#J*i3Z^o&b2OH0`u6j562Y0i+lL|sX^bJb`eOy zay$X;yK~PRC!g=ec2(;+C>4j8=@(q68YYbLsV-VVzFHTjYht9%G7=0}PDl+xb{bua z%Up*wN2`?@HMH>YXXj=EKYz3^ZmektZ2XAw%jLel(tc-2R6JciYP-n>m#dp{u%2F{ zw$cqa&8O+nxTnAZArec@M^lz2fQ{W8@_c#$hLEQk_T7&ZyiHQs8ryAJu#2UP1pI6b zcckLBRaZ^8xHUDD1zxIv5%2SM1@V9PoG)A;6^mJl-`MHk z)6T&nwl(7y&Sn2>dVBHpkCWCwI$;F26C^Ye$>7O1fidvLbbG9F8_iiKc7W3ac!xki zyjdb}UQPDx+gC-EJiw__uKwYp?C|vR<}>&;*}tyUhuD+CSbiX9_HSZJ{Ikd~7mMzP zxwiV*Z!nzTch@Pdu)l2{&`}np0%^@?pV99u#*3Y(?@LM<^pcZ-()lbC*wSaU3i7P( zAV*^2mmjAv5?zbMU9+(1=>(9@@>B$G+}89GW8Iy2y+Y}ygB~Asd+Ha9n?iM240=J$(D{tRw%OFX)!kV?KAn2#{t_~~LDJ{y4P=MA(^&RGrjkyN>!Z~Uoht{Q zhXuZPEWczq0ii>>giR8QF$XZj`KI%k~ z2O~^-Pb&qdW+6+>SIGz08{LhPoQ*O@A9XViGMHz1Ial=LWL?kNS^wTUV;KxskId1<&W8J*wT~`=E;^I>2qR3 zjtU?@rSyN-9d;5<(rQn3%p?+Re{Wn)m85s19qH_Jjb=z zYk?4zoXzNi@`X@_gRnnr2Trbgc$WxY@uR**{avvM#3tu-LYbfY1VTnXEZaEgjdSn^ zW)bgP+o_?@I}WCScrc~cFe&1zpK9ZjjTrEY6(UK3mK(1SyKu-;S@8$4ta3#f?<5vH z+{lF}MZJLrF5G>zpCkC+9674ue+TmrWms}$fYHn&K-UdA4<~~U&OeMwm`~%aCeGkG zY!;_hq}3z$zd=cYnAw|f;loNU-)8~X$zAPaR-H{-*pQI&rn0+#aTHdHwWi>njJWrb zd;7=KmR-_UTl?B3h^nAhN$)p6 z4X>6uquXJX(bF_9$Wb@|X{cxZm9VX_1tihx8Vp$iXpBr>^FKBoEMqODd}ZA7mf;9@ z*=(tFLRC5=+hP?npP%SW)nH;tr`XB-3vIXmh@r5^I$n~=#n+msELG0Sta+Fa-2ahH7eHTqfpu4_nZO?@zf~@+b3(; zlXOeG1>t}yD(=(s!cGB8=DFo8mLhV;RbPr@6t;?p<&I@xY@I8rD9opcfp=c^c7&0i zJKRpA?w0Nr@8<4e^oKX*>V8J{9Uj|#>KDNS^P7DL47)f=Eu>9LQ!F|6s7PUv-K=BY zZLY{pWkx9}IVmghK@9D_6yuaV0*)-Lax^^iAlKco!(%phTE2_1Hs#b&Q2rqi#~=G` zc>jRJL$zvx~kWo<2qVpyuF?3zmn%d<6{qCfgdd;ns+QX$|1Z zB=;=t{kaK?5v93*L5*`h1s1S_I68q zI+r!GtR^-^8fN)!1}~jz_+|Z=3v4WHI6x#|sQM{Sw`J_5%@1uiTX+DUn4Y)XmgJqDT3^46#fd`v z`C@8I{80XnQ8+pWIe&facXw=O(X$#s;tp6eHvuqr3ifInWC<{oVbh_5g{2*r*36Nn z9lu+8Z!u&C!#$XnjEQ3ieLQ@8b7_En7d1HDdz4|pCf6T)<==BUAVURbZTM5sJPk{u zv+KY;q5C{N3`2Oux*Ui{Npm@jQO0DqFW-#i7=iMmzjBRgFrsPdA2(rMF9T$@DYU{@ z-6`3ZP3C&JA)a!PbjCO_aYU*X%$cm+e?=lnZP*+iF#d72S@z^BSMs>41^Ztq5qU#I$FP{ zqfuC!T=*e$*zGtP)^xGvg(lOM0}qN9Ikq;9r`Qm1hrv1*Qi+3+k*vy`P7Y!>uwT>_ zSRGjkkhhf=67K1J{Qd%%53e(bzCFy}27L#%98McUB{E5KDI6~LdI~f-<*D&F8EN>( zzTAgFvB_J~ufnSIg7^LX0+})!!h>MYlM`O=K^DfmJw%iB&zuP4R}>rkf^J_C+8Ecj z{|VQKw+G|nsx@B=!no*?teKIiy{(3+T|WY?qsyo_1Jb-3v9)zBq(@s3vRYk%Yc+vC zhU^avR|AtCBAJd}jaNNzv;biLVCzO~asM>YV@i}dc~`*2rm_B8ov~5ZFGy)&*Kl{c z9XfT$Fcr4AP#+!2e6dEQ z^h;<6&Hwe=Nh?@L`RiqMKhBE0LGoJ5>Ve)*Pt2MqGEd8vJ)j zaDZ;UTjGPn8B3)=MC-RtPBf53p7$hI3KsL@W5lTS!@99wvAHKno;RRHCuDer-kg(MU6AZ*rJ-z)S;kJprmGqfu?>A#R|g>+l=92Y`m9nl+}S=rtrBWcU^b)0-u~5f z+59i#PsQ;JDu`5D3somzm=Lv(d4SRXtlB+#h{i!FjNV28HxOevN-uDwAvsYKnuW;n zN9JJxyuG+osNU_$<}8~K7-rifB08X$y8LNTk=D+tII(z~mB%WBIA>8t-Ym;eF5bI6 zihHlz{4gq=9U^ZqgbgjCJp$cyW#B3Y)5q->!?G{UhY)B`-e=SwO5nn$;w}ITQXId1 zRCS@kt|9zZt|yxwF$M`ugtQlhY}+BO=&5drQzva`B=;8>`M8c^wN$3*YdEyWSMs#0 z;<{i=nAwyh7yZCW<-C)BVJT&1yl)_Vw0EUhLQgzdvo0Da-s8Dp&S#fE} zy(K}$I=lA+DOF9%%>s8L96b2I(XY{h_{(dU*JIR0_g z&XRLjq6UFxhu==#l3mUFtRA-ELJuwtw{@hK8`zMFN{!2uJ!F5c6ZLamL&M_+cMxJb z7yO^-=sLQps`C!`u@yfIZDL0OG`95%#-hptJ8694B$KtSHy0qDzxZ*r>%X#=Xbyj{ z5oN26kbuQ8e|~2DBb@#0>G<}b6B+XI>KYkLjVkKFRC!)?hRWZKU(hqOm(!wp<@$Cb~`_P21s^ zkrN7#-I5-`4>eK4=jF0KtZJkSh8YEIH(713A%3y!b8ZrNwIxAL_JNsJ#Ng#TVNoPMO&w&Y<=xQQr=B}da_Q({&Fl{n;c=}}w{4c8`Ls;Seu7&3MVr5I>)ZO+( z=+Id6lf+2Zq`tNsnW4~%yOkt_zqS2c2tksbkTn{@aoGUy1$Vs|-eVmWRLURMhvOozVj zOVxQ~Od*A*%fWVYPtjK8QkxJKxBDe7nt4=1*@0p%6Lb>VI3e*hS~D3R9fp$w0_*-d zQVr9awfaR}{hVk6^FR!sDsncZ2q*ZcNK?t^L^ubf`+j)Q=K5e~vbnA}dMb5qJ3vwAt1p z05vRV2m+O3cMNePhMPmj@N=JCcLaB#-1;5j9+fdbCgmWO;}8ZK@wF;e*fr(zJLr2~ zs|bHp>aSzIu|-2csFsMNIF$N+KmMS6i=3?;^OLM_&0<)LvqmeFlc!GP#5HMiJ%FbW zkcDCk>4!lgrw<5G&6jj+zx2Y?VX0fHJ-tj3>Ag9J5gC7cTH;AsFmu0<$E^6K$9 zf1BF=jf>iDoit^QFE)0W05{$=qT>()fQgiKjtdhciJ@n*LAMug>LwH20%)wM&V#XVV%3>1#0c5Gns=gBIv2)@*VygH#A)s)pjZnfM>v zL@{+`wh!=zut$NBef^ABATqTNq_oIzzRptF(N- zjH(&1#2hf2b)%P$$3F~@v_Q6UoBqdimyf1WU*)7RKTs16}&?#0u6~{X% zssz?f92O)e;eikc|NZ6xZeNx)Qt#AV4@&DjRvj*N_#ahcELh0ko+6LH^d_!k&jO|H z{fqyiR0hrWT;qsid}g|V&jjq=MDW!+(bQ3&N1tQiKxt+ojnU~Jk}|Rj*2JcH)e-cW zJ)IW&mUj*n?P|vRLC9nz@VYsYgUi@Kk~x90F@3o3SJxk@nD87HHWNf0P9JEYK^}XH z5QpO{&R>9E;_!gyFOPZ*>@)>;wK@L*y6`!@>;{|H-fF>koos$j7t@-WqZ~DgZ@Jl@ zXbzkb7LT_Z`B5TmwjC*{XtttkP>?QwN`kDL*Eu*0JaHy8!T z72(JP9RRKKcq^F2&nwy{b~#mNgy-+vQ(SgdTwv7BDKi7jiHcx&^WFsWPvCJ@i} zj<3>*!`*%Nn2sJcDtSC5eJrY(y>^PVs(`F+ZcuVsB0J_KKnb!=)}5f_FWT*{U`p9- z7^#+*&s8DUKT!Mrp{Xt7PmH`7@X5n^VJZ!Mwe;d}%l&W)?KpUc_zMiER+6(xWei`U z`Kgf&gM{j=@-7H7A7RQ-H7EH_)ew#d0uGm~1mEl`VNO~qurLz{6VpE_k zHDC{NxlmjO?apv9%TLq-)iNVBaFZ9|hGz7JDv9kVopKfVldW^9xsW?k^0AyH$?WDn zP!Hdu4->GMS1o1n3+`ooOlrU7G&lvEpNQa55iIK)r%FCdIo$e}#5F~65_!5X zqRsByTwBiMGkBwEt3gBR;cGd{I&{{uWF;2VrUpvbAq}z75Cy{I)S|edTStALP|C1g zu4Rv89DYb|Mk2zpd5Bs8uY-andn%zzLkR7QWdDtbyi!}^p)~({=D9dL_Iy@(g~|G= z{{Uzi!7nPjUwtXhYpD`+IRt5RLthFmlcG%Lbu5%%)hM0W6{^mKh5^Z+6Apn7LB|Fw zE?+|Af&MRB?&UM#r^xbOKJD0&FRgw#S;mC_= zye$t`JI+pH^io4nE!M~P=*ZkCc=Q}hO3OSN+?s!c7--}{vUlpw?Ee8AIN*H06mM^u z=Gyql0`CG(BPWuiLtIWRl-gAYb`KB7Y15KRr*(*Bv9(I`Q0)xHY>#65vl=qF@OK|7 zqf&+Jqej1jsx=Q474}rp3Zjx1Lhw_^^>m8lY5EYby}Yji6*eM#84v9~Q{=WVk+aVZ zG#!|qzR>Bd=QmW~(Ef4Usf~9hU1GUbDB0tjsU*|w>ZuoPT3JsTj+J>=Qq@1_7LeXh zf$O}K_70Tvu}=HlM2!jyzez;BUZB3;JG0~{X$FHoRZI{og^Z{f%W)lfrJru}sfub4 zO?)(k??b_!r+zdVpUfku*E15Qi(nmM;JeKRtGjDog=aqXt(?*B-|ik8v;NRoEsfdj zHNEok=p62C1)k;EOf8nu?EF|5T|*wZFPi?BJ&&){M7P||Ilj;;M zL#dezm3ZbD&2$dDfnt?(wI!2EnHmh0^=irTo~vU*$kCVXO5cS$2Rg;CMSAJU&}WgL|1N_2hZD9KNUio#eu+I%nPVgEKh12WDfIqL?=VM=I?j(1-43^PdfBgosOT_Y}vj{S$6aNAB7}oOOs+(aYFFbDzh!{)A0XIkqK&ca&@NF=_!y9TS zbF7tf$-JT5LA836#jL1S|E8d+Q}lgh#n#Ee2eUE!lR_?^8+K3;HpOrjUWp8$z-26t zR3=1eWv@U_n6|NSLgjP5<H3ZL;4>G-Ddny< zAUf7LdL~zBqP${EvS*v+nrpaxaannW#n>mm;;30*^Db?yoy_4Ak z$&Qie&IZNynvk9?1L96=ktp{9h(^)ag28@nDmxFiS*gvAJuCJHuOH2`Zoo!1f7FKv zl-H~ewg$^(?~6Z?nBk5}6zB8cmY1W_%cG@pnOkViRVCtM6d0o3I1WE?osKxUDCaN7 zg+>jkZD3S2USdA+PYrmCJIboPH zi^2IMYVH)^1wz2qCN1yyM?$ zI)0DBL~d!t(Qm2pDJ-Vxsl}P5qi?ovt5nV71Va{|$r1jCIKIU*^-goSwurzFTRB3-wmU8bte5) z=%dZ}Qqg!AwX_%JC%=mo7uf#P{Mlg1W=sEbhA#*}EY(M)qftDjWWi$ZAmqNXz!ht4 zM?4&~&{Sm&qsai^@&K?eqC`!%Y_E--1Hr-8WCMd8^JL|p3}>Ky@1G!89JVGqNIJr+ zqoxxky5(i!ByRETdl$g`ETa^rIiG^L$W@KGVLyG}rbZvl^7ux*K*Vj|CeM;ln+U%d z2m?{ZQOMBnyD%sI1=oGL#PR>wQ1!FNPzoDYF5Z>HzRl|HzADbbuiVw*$9;<4p>n?} zL`(&SNc~;qR{rUmS$0=S0pum9PGq|C5F=HkK-^4Tc>U-6({-S`!(l0Y0juKm)jj7& zV9}pJ%K0eR*vH6@4 zan>>Xlq9NM&vIJ4-6IpE>C}Dw4?w$cKP=K_zpg)>2%mCoJ)IUGVD(qjpN{(IOTv3v z_gWpG)%MXF&UcPLj>^yZ!ikf4uVU)SVM#lBzoe5B296h}|8i^OU0{cmfR8g{3nSDH z1HFzB7N@rtqirPtqHf{TME*VL#<396IIM&{L*an-GjO}Rsq3q-!;`3;hO73t+c=ps7Y<}FtHOgDnaC1M;&mI!K zwae4qQ8yacibzReLoC^Hzjof-6_*AHrP&?M1tgY|UEPBb;RU%s=(d91)7j_+D5TTP ziC|qY)^R=+imsw?`uf=u(Lsk`cpoB8jiK|FW1^(7m5Bk-y_6(=@_<`+%gd^)g9vRH zPH6}_0JGb3TxkM}COL$1m<6)^wS~Ok7tD7}Q)v=`AL@_6R2V0lTT_Xn8RYR5O2k&Y z2bFWbM}<=+dCI!eF6AO3MdP)uPe?aArM$)$c% z&(1WZ);CJK^7r$IV1PgpdD$*+7wE+~sRd*<$8TrW6|mfIFBD;x@K}Q&_ZNMDq*Fzm zOV4`;QwVVj6Llxv_{2zjUEySZB#e6k(I(E)d3xEYOF~gIlg*z&DIhEi2l<^I7v(1* zz<-8WtcmMP{93LYs=N*UC$(Ta^+Q8TDfOP)UPMUA5O6;CVM2^$d~>N14D|;iHUIaV ze+Ww-1$9)h?R4!Ms7!rn-PFoGOS=KZR7WP3((|E|lg_0!9X zXlY8C*^!)Psq8_#;+EQ%{4$_Dd$Gx42U4xqp+B3i6smH9FyGT(2kL@|8R6-odln8|#n;>5x-b2vv8>(IsyFnvvQ44PQXHO^DitS+p!p~Y(4w*s`h0dxgCzjmW=>lCx19}UZI&jr-^_9YMWscyz*Oy0 zY=wCfsltj2I_UszilBZt-@?O6eHE|q3D?v*nh>6c%QM5^IMV^LJY3Ks3j}{wtxd*Y z%;!8+4$rl)Oddl)fx#l+L7pZ-)y$hM0Jq>ha~k#^h60GfA11@djHFchnq*6@;Bq-L zyRW+$X~6t@g|95~?T1#l?HZ_4$> zrf_IzL_aw}{{c|l+?>(5aoN)ReI8iSkukxfHj8PWrDs_{f8~)KmPeOtc4xAu@ifNNgDN5GUQtq`6Y|^(q_6Y1E5SrSWDbsoyjszCQd={TxYkuk!VKJ|KMtjbfd|;)TJamOk_A<* zF{)a4H!@&l^-{3aM`?*n!TZdsGc(s4<4`nIbMb0~kVYCW@hVfW;)dDQ2?lzsHANn+ zxQT6jktz~7JCSAZ>WB|n_Zt>h+H>Rvp-@~49{8(kwy~4L&M$zWs`*&nAt~fdKP^aD z=WdmzC;R4fYobww7y7ew*v46y< zHzxJ}PjKdVi@o!Di1{D9<3Nmt>WS-fRWnc2^+vPr>23|wcGqr@>ap%~?|H15@x$_o z=YXdJ@1OMvu5O=`BraWUF?(LpE!>JE4FYjnksN;%y%S&>)RkjAjfD1v#>H3B` zDpBf#r}IloRKyq9Ik@dN==oy$@kIy&n7F(QUgr034=}(1?R24j1#>AO?adg9-}ms` z{dv+dwGcVbC{RZ|o8R&X2-O~X<2-@o8?@sDmjJM~9RQs`m<3%XR{PY%WEm&KXgXRh% zFO&f*i=oriRA&EkCx@Ug1F{gnHNseg2YUzx*yIM*FC#rN!gZpCd4=zIkT8_n;+sTT zHFUfIIw(Pj=p93_{PV<&-4S+45I9qg##&oC?<paq!xzSh%x}et3gwtCf^?THcb0J3*johnr+$guLU(2+`labjl|?R2u;pLZW`J$@It^Z$hBpb4g+IS# zms@Z!9;L~XOqWr z_HvEsR*8hO?E~98u!B!b1RVE5BCkfNw!t71=e4C5UT5(t850PfLi(*DyPWX26)PFh7KH_XeC4v#;y%uot6R3K6n5AH67mohF)lh#4 zO9q)Bm`lUXIB>AVVQMzI{_c~MajZuT6^axXHZ;1*wTR6^*ST^M`5R-H`9SeIg-{Rcqm0gU;*O%;shAtUeg3_Nl@y@}N;Khl#ouL3I&q7s1~u0?ql=zE4 zCQd74fn_;u**^>&u&KhCiVO`cfF`xJZ(`{ifKISy=uGQ> z*!OsnK^yACIz%+}K6mmTKB1Hf-as4DF%uCp3NurpinJ+v8aBJ36zfikuBEa&5_Nmo zDzpYBe|*8E>vg%9sN@S8DNg#zMRT*Tn}6#W7o9wkf3yCX#AeQZqnlIvV5A3nl{650 ztrs=3MkOlvc>NL;Cw1g(I8q&|%I2ddi2Li=SVAzt7>j8zljVubcSPmKA_UUP7eF2r zr8Yisc${9qHvh1IQOIl#f+l-X>U~)p?`G5p`I8Vaw)mtw^do-fgP9e*B(>=5!T5Im zdQDOJ{^&mUai5|RPQO!bpHD%17$8r>_cYL$cw4Jc!^V;{T3jMxSKd-j9+ZIXi2jaa zBJw=j>Rl$A0bcF;ca;U>PfC@ic{ zIt1!`m-FhL(&76t-I_+A9zHh#ZDgiFS7Z7Zt&6OBpD5jj!vJfE;5?as2ymj~JusqcbzJ9km(Z!Z} zw>`9DQfKFDbQBB_D;^XmP5{5=yv=p5caMwMNsep`ycW11!@D4oFDvK{ytiTq#Ytf| zv-BS)81PkXGvn1jleJO)#9*IVJCWQE8;OUtk|JLm4oLN7t?XZ`LI&+m%R>53$&uJo zN_U*S*F;&h$#CR%C{&uzCjEtC>G<0U**eAOaKfro@xlhR@{MA?J$aPQd$2TSuSRg4 zu(=u9|Dm#d+j;8?Jmh(Pzq3LPAJn}f^1(mbMK9o7_T$POoT6Aqm`RKZB)2NV0r>c~T}6j^sP^KqD|x6!iAaKlD_Lwj0KY zT^hQ3Poz6t{+jWGY-dlT=>pqXGUh|NFdX5E245At+aJC-U^-y1aW0AF2Hh0J@g8nB zzhP!+g&@!TAFkdqD6X!J+H9Z+?gV!l4H8^}TWFj{g1ZykU4py2CAb84cb5bRjeA1~ z?iw=vyx+{!)cl|hKPU?N?Aqtv>#TLHibWCw^BjrKzy2naqSqoCK)KRbh322qsSNsT zDk;=yz*1fGE1ptj#G5P-9esfvpx~BbhWEaiTEfrH0|U8UI^eZ%rKKl^-rmZp%l`mTrBLMz zKi%}eg?;7mM*I(bp4+!p3ShmoB3$q^A_nj30BOR)bZ-Y)Dfek?m^)^DvYa!(y$=QqSMwI zUK0uF2Ra6f2vcduoG9N>97u zS?pQ7ahAu>FLDm2^la^23>>@gwCK|Edj2T*a1%frYi}l-gGuQ0h_@2cj8@>`y8AVz zwH&)j!MfF6`tTjTO4N$Mb}OBM%1m}vW2^L9sdzbEu&xxhat5jb`d~)bcd_f`!v2N% zf_J~VobsbrIzeqq0rXVsfgpiDnZo&$dG8<`h^FaWY?-L~gUAFB5$&6#qqIZvXuxEk4h0ILV@jcbf;Y9Dll%(o~{pFMc z85qqp2YB|?t9(lI1i@V%VFlOk zLdtT~U&>4iN)hrD`7{_5QP_U6o0QT&j*m3>E0R{`>&EPAEvIW9#bonWbyfvv$sARC zu((;x8BD}LrcyKwuHyySPJ7}4+?JgNr0YeqJTQ$ms$)*Aew654am70lSjEJL(j!Zb zmTEUgVGf(wH4I%XTY8^u+;psBRj{h}^CwIU3F7gBtE1UyoA@>X_Hl;_sT4T-?Ht>8 z#i!8KvDVK4M|HfLO&sJeE6cv#N^gj9LI;1^ShDdG#S0U%G^1i!vO3t4p#TuC{V~>7kGSn(mlm7`_I@lEB9|az&C2L?%NAmwo@gaA#(yL`UebQg+;p29T{H zb))b5lV9CDDG=Vu?hYM+4|}*sbnDo9Dgp2x9m~~Vm1nTKK-_=8^1lh4`P@9U^KG1= zj%>0<7C#?9+fB$0C3=3fjYBNT%7Z-GcE42)G3<3# z@7hZuBGnfu6J0;6C$!eA6Z!QvAMlDRgis#dvYxdpU&88mZd{kK;RGXR(Xkj#-f+*y zG5VPL@_lE*`2@~-z{gi?4enXF+xiLTA@2(xe``q1TodBGg!N;|Uj0(vvCo2V=dP@L zcZw8CUS6igm@X(GV9TVpcbHxEPH>>ejeO8@<7ROkSI!?2JP@)C=;oxH__FQFGANlr z*@F3(vv%`u#|c;JxVN=q$>i|iNQA$CVq6V2*$xXNth82#2+Y5r9N-f>=Dc&`YMYW) z1mZzK+JGP0FHFhwEbdG|01^kYf!yp%oJYA;gAoAodh(y=zM(-L1R@Ni(v>Uta8P$; z(3p=nGkl`+0X^ zBn|!AMB;jf2ehWb;MVLx3jA^{F6tg1R_R4__41T2bWE6roU3oxalY#nAJz<5+T0X* z2{igW3&f@}GPD8M+C^gv$ot?|GM?sVA!MW z-jlRh<@{ZTy!yQDVL==>|_`13e0y-9i zZ{j9I-1c$)>sltvjOPrprlu5mgr7u0N5PC9ZQ2Q_p;$Db|3MzK?W1Uv%eSC?G3>_~ zmnhQPCbR>18d;yQzkG72GdaHqg_nih7g9XBT;W$put~3H2K3mwmF|{p_BfE@A-Axb zcE82=h{vB7UIb2bf)pjEiEZoOnA^LGa-wAmv0zp9<*rSAqWE4EK9jZ7)Vj2$=u2)- zqQMyH>fR&{z3Nkx)H^gHGy0))fUr#umxu%As(l?q&q)-G%&U9mioL52tU!oDYs1D< zBh#Ot-%UyYLhgcIMpoW~p%h%v(SUrU;V|ZtO|b%WI6vChtPvm8Z4Nq1Q(7w^%+uEA zG*6P8#^3N>O(tHhV=K{UL@L-z9H$7^g51N|5ogS)h|8NMNpv-zejmS)D#zb{D+uMN zUTt8&YbEySUfRTT5?w$pEOyq1(r4WzJz>i@qF#F06%SpW_8tjZTd(0PIF@~Pcn-@^ z0*c0g!I;la#0Neyl5!XPLKh;hFDZ+OC(nh~FFO`o^l26{gkS3Vyjh~M;;t43x$oe% z-_gHlRKKHWX!g@eGC_uacUeaYp`6mj%>KBLhF$K^&29cy|6bge$`Agkhj0frd(qM$ zYFadBJ=U@QUvm~_w0RJKjm{)$iB)#Mfx{r56XxKb3-@752U*uoMqn$Vh>I(?=?}`^ ze}>nYce$@#>{7dmi2C-WE6DbY6~u|oOl`O!lU=ooaRvFqDiuOO5w9}-yEG-nbt$xp zi|__Lexjbph2xtW`Ai_LBq8p06c|%~Df7zPUtPk^p@`~w(e57rC6ocah~NiXTp6ht z#njTmoBe-)S#p#*JveRwkA|SZ$q-YY_UL#LwGs&A#f!fXP~9}+n>&}0!AG9?W@-BeoaA5;lT0hb?gVw6A~8~4P>@;ovko5j|JcP zJh)AmyL=+7#?xFEz|jlG?1*g1S<%u|H^KfJqxmS^IF3#?D2P4*N})hF_w(^F_FCm= z;ojFwO~1{MTV21u$)#_k8A zM5+OX2Y&D3V)2!b(K84cu)`S zvUwFlQKgO)CfaL-taJwReq0L5C}(M0ohVq=ClWJ48jW8B`bro`eAegqLtAWvJD(|2 z>J4j(z=1|g+j*)=ctYIeX}Equ(Wup_Cg`QC3y?cxc~(gpWI+H4dH>ciQVl>(&ueQe zr2*3$C@%~e|`95ANnTP(V#IK6uv#OGfPUcHh3s$~b zXY_rx@?6-XrTr=qHxx@GH3W#V zrK-gFTV`XX8%I#`-uHHHl#S?Pk}143AxXsk&=sfgqYa zsOoVpO3SGpJanT@e^Dej^i=k!{OEWonN28>+Lb|;h(esXTk^*P3BN^Dg8*3~!qtK@ z2BqY{E$ncffJ-T5(_F4(Lv2N-c)~EjmP#vlhyu^SrC`7zomxu4j0`B|* zIO`_)T-tVV#dolUrp-wTU-<*O0?gI_f6nIjcjbQ>Pl+$jp#K1iT%>Tps#F5^`Gwxr zSwcnOhpZb@p|NpB1G2gO3r!ggQXv0*^@tma^-Ir1{{r+kYnZ70Do{8 z%SUAq(Y?Cw2r>3`#ZOu9B3u$9>({R)A8Qg;6dIVUE}x_poxBiQf4;zH`!r2Nth{9^ z6}BKnX?f?d1?n378G1U@MU?KQ+4KL03zrW~YU;<~_ zlRmakX!|fR(Fbq;e*g_k4Dz+{*ZSh~%Nvu%P?_;4M4<8s4|Hqxzl2Xi_6{!a0rQpl zKVksk*_~6(+gx1mk3`J6!!tDmVPCkiWd>P|9SKGpWJJek0swIG(*Ve;uYH-}MJD`s z@8KFZRfK#fsvW?3{e`9kb0X{Ek&=NWksg06`JTidS3+XmZ_aD&aPk3$pv^XYK9xVz zfU-;9+5V2~HTm0fi_)N-O-i=qRFy>%8Du7JMM#kx7yP0kY-5o7{%7I`habK_uo4KO z-l5keYh_F6=wyn3T5ZuyzSnA0EOhf(ze%)llizU}+ilVaJnq`go}(>6aP07k#5Z-l zjAL{VmR>|yg;dS0A#9*C?!3cJ$Gzi6{^A3Zm4{0~_?EL$Y3W}jV+d0qB^5?TR^q5P zr*x&7^66acTo_W?=@@X6++YZjbcKnkA_-iFweconuKpSGb813WyX2d<(|{VqTf=2# zVy0)uZL2s<14%aiMX&qopO#fWZw6l*7w7QJ4Vz{FIP%zacua) zh?aL1F(-z7=-%2}3L!w0Mj_t1qA#E41mdL+^RpL57y@OGjHOVMp6$zfUiDtg$vMuB zZx5oQ*2U9Ld{;T&qM51eKj^0#U&qQ>$jGz1)QK76Ow!>Pr^ywMV*B%r`+ttk=By`= z*B^NGbAaow$2+jLV(;K`8Z3$qoYIwb{jFvrhPS#WvaKA4koya#G)YD5)7ZYFtJY-i zh=me7fIvZap{I8ioc;|jFHP|mT>g?~Btvn1_YJYhpJl6txp_ zPani+9@qvekq2h|!GoaMN~{?lI;B6!ShN{)Mq7*35wxFCofjG{D#ijUPB!^tfreA= zNU8$2v!q1!;!F46jIE(NPeTBERGQe}H`)w%KsW)JcBJiIMlf+=vHz@nuKHVA5qajt z!rs)-7N&`)8$2zQ1Rx^b8{0xHL3DqNG9i^@+PS(v-ofz1q@bL7a`Kmv_-uT?dS7tT zyQn&wvFJ4CNu609b4dK)5iUs(VCLfi6$NL<7tFQ4)V;(>vYQy5Im}Ju-bSMd$sa5Q zaQ@2mI)phhUF2^}B{(>7=AU9b^F=R&B{1#B#_v@af$bfCJHN8Sn%2g2cC!sq^qz2) zb5{M&DN|$Ql~&QdN=8YlvA=+E_G-&-6FTVGv*BsNO;nz-ihGtf+<&%T@H1OB534Z* z>PQqu3NwFwt;UpCb25@XtbE@RNO0`^O(F@QA<@wu%PDt#ld6D=5oz0GR{(K7O>cDYT@Sg3^eAQ2FE9-uzp(T{0 zW07U=!>7njFR4pDXR?)MPqnmdQYuGkePZW6DrL2s=v8wqA|fqgZiFP8C`7e~rjKRP z4kf7^4EwcEGhN5U_#;;1q130y6#3l}ASr?oPL!9HFq2gI@m5KK-Y8@w^LLoJFQz5a z0`8=SF7ZcAT`4dt1v>nktmYXN{CJBPge1`9P2R)}1h)<)A=MIVBVDN`_;dI5bxP`z zt0+HO28lP#xUavy9XhhK%4XBjWMJy!5?!QhRBXp|$X0PO;rOdNtfLOrRUnN9V1+M- zls&y)ohdJFK>yqyOt~?nUl2bv^fjSj*Os?=UbFHKT9z?ebAw*?TIYT+z>BuSprK!} z@KPY2C;y{H_9TsLWP&%U&Z*NjP$v0L;v1`CP3Ql-}YS^57r+44uDM7+NO?O68GT!yJj3WYU;E zsj|Rjr1_J=A=y;PYL92%`ZZjhUaa$%1$Gv^Q#ZtPR|Ov4;MCZA5tkm}MbsPa&|+47 z$tfx4PHJUh;b(*-dPvSDkc3cKj@B!5>a!PTC$flqENzzp+yR1DN7YJWhs0=v>keGt){|V@VZ!z4c%L4 zN@xlS?bGAaMKCk|5VTtEI?CG#cjswjL2DcWLE}CETpiGkV@NgAG_)2iM|SM>H?&2L z52)1}J;KDS9`h1EsfMzqizi+`y1nfF&_eNa@M(wH!2VNS@Fi`DvXh*q=$xjyM%cnd zqpbtnuh?I{mGo?$eV$$o)N@~=L|0e*tupfcWjr*a^ODSpr;Sw0%`f+s3y+Co?(q7C zj;5&jfIGxNM)uqFVpZkp+`djTTicz^Eh8nI7N5FMP(ILW(77DXWuD?`(ohGj(*AeGCI&dwkWy2s12rqKd-0?i{|f0}z1O)1ixUVyT5xq-gYp!u z_J@u78-%YOABHW_+eJF`l_jokIGsrZikHyA0DhjOP2og__mYI~h@BFD_HiKt43>rI zp0GvtU|i_KAvK!QQj(A~eB=p!#JL*#s&_xx(#r2+_i^0Cd71=bZ{rmXR4O#S%eG2= zboX)8>DjK4?C8#=MBZJ&ci&c#a%|NSOfrjcCiKz^F){cpV0AIiXDc%iJKMsdzy?#D zd1;>Cpq8IZS5ZX7dKD{J^WbVpmOFJa#&DzZZI4FuJznuZ_<1rFyfI~ngLcQNzQAZp z1jxlJzP&h_8x%^Q4nJf$>q)Hk{b22(GiuPj(7 zGh9(@c{;=Kb(^Sng%P}jg_gVw^E@_kP|(I7FQZe1|K;R~THgmy%MnKyiI>C}*3Kt7pR^UghW)R^%aI7Z#qXaZ43F z#27^b+V#?o*rO$(mmHpK8ZU^3OB!K;L`ei~%`o0X9GRE$2{$zAF79tmRjNQ#LFcY@ zyU%Dws6k$3Mg~Hw1AB4rlkbN=J|;Z+Dtc7C)RKG4?e}leqtlla06CeOf8LX@k55|w z06>7sM_@d~svwzVm0pZyIx>S&kt8xJkr@f@m^pd8v!`yz)l~XYSC0OLuIm6aKT>Cz zMu=(LyU>_qINkHNnD*l)KXjkU=QLqt6|^B473A`&n#5~5^Wz;gvmr%n&gT7R9DI};@f`$m+xgNlw$2{wY6 z?x&}P5=#c6mPm2^(bkMw&A~S&6c}p#d@&5VmG!2(=F2EQq+(W2{r zXv?BVjOuxzt-yA#5B+lIu~8V>NKi?yh(q~zeJ5Bn40jmo?^YfmX)xpARac9UH-=w& zKfr%Zuv0pD{`GeaAL88H(eDA7bzU8eLX79@rGU2BA|Y2cF&8z8kXb4u9Z7NKxpO&# zr+c_d_kSJ$W}g%?VPTIMAsPVL9Wgvs#tffmMEU{x`hKEKRWz{xcp68!`S(mUNxSly z0hZA7lW1-^GiyX@fQV?@@dz6zKhBUvATXohD*Dr$2 zZi>r=CP_QZ1sGo+5rv|4FF0X5*e@AQyctfA8J12<8g5xGtYO3;#jBv%mx9*;rIWX_ zSG0aP{+V}-oJN90A(y$6(`~Mj1)y=bzAf*Qi)1lDlysZFtjX&hk-5DuusIifZ>QwbN+S*b0XR{c2`j8jc;SFAI`}Nd3};L(!c`fqEhk?1Me4Gs z@IOBc8?RyWxom(jO_S>bWBUJO`T!0<{@oB6+6eT+R z{gYG*`eOfO+!ou64+z(`KooK0UISlF+qA*sbvWV^yWIKY&|;iWbpL>jfWtI4`s{nz zet0qvi2o6fYbvvM<2U@+QwrZ9|K}@YkW7q!Wh$?A(Xs0{)A7A6OR8WdN`|cmt|X{M zRekxb6OXBf$|6sj*tL(7aEW`B1i9(S8LG z1YrlZ9N}sdAq}7JTnm^yp8^#_L7{xOT)$%7Z0P=XP!sjNgnuNER9ByZ(yfV(i~zbM z7z$PAEyWJkN7#YLz$3;tItBE|!jG4Ib@aGl%qc1ncVfzAovsTtp2q0TZJUrdX}mN) zfK=tt0YlvB0=Jnwbtk(;;jnb<2U8b&i&RI?bkFzQ!N_HQu|vmpj0m46GNaA#H|1$H zZ>BJ<$OG@}6nXiLd@Ni9@xx%F_LAKlEO=s3aXI zR~;@W90M+d52Hs6RIIA3$R&C1kry=7Qbt`okQFmGfC_EiD~dlGzvO<;_@?REA@CWQ7k_!p zrf?~R;QF1Mkd`)HunW7mV_fP|kpgQ;L{&KmgDpZ7>c(M1_YV+e=j#Htj~9W1A8$O; zd3hGp!D0>~KR?gMS`nRnXP9p$!cJ$9XyTQ0I51h=n|<+3Ptyzmss_V0h{&j$T;eV~ zIU|r~lD-(rzcJ-kQ2iW+-K+$_XbN{Bl)%i%__w*y&aY?*A?lo<%4*rFib+lF;_SF>Y~32& z0o%AE46>*cww+xuLoXIK`##1^`pk$j`d(rsL{yi)vgr6Tp26iZyd1mIm>j9vlSe>G zT8e&43YA5xwYsGu_JGyg7)E{9m$rzpt9iBtqGTw`@ff_B&BEiN$-iY`YVLx$%KoN%@2G8GHGctV$m8cI9aWdta+Hh9)B@b6|B;IKO4Cr8E zOStM@Jh{#qWE_Cs%L>X1pgWJlhL)NC0bU$<@vb>O+@0~fzQg;=13lfc{I4o}79I@! zocLE9yZdw)E-uMYz{B!q=J=ORy{gpWl=K?pMs$#mxO?6I0A*YP;xAp|bLE+Fwv(f? z=D(+LPT8nmIH;e9I7g`#gGx5Oy^5~x{R6C$B<3`DHu*d?v-loAxj#MjYsE&EQ0W^#n&Goex3lD3uKi-Q1PW=Akgs3)5 za6Gk(@hB;fOEB2)LyhrVQ%YvDH6CCLBZ}I1^4&UW?LNRD<+koh#I}L&gJ1ujeel1l zJn-lS?(h=nSW68Ipc}6bw2Z8yPE1ocBeC0qBg$KB*m6g`<~)n2(9~z>vR*QCbdN5nW*~y_xO;J zR58(*_MK;l{vl$>BHX37cKqmiFb7Y(QtoYbnXlY&tuD+AR%vR9rPC}Rf+3ZQ-$(?_ zS1Khzf@f(F&2BaNXyqf!<&Z@hi$XRUe2TATzq3;AAezI(4P-}D{zLD|O|!x|XhGqu z1<`)*5Tlci z?|N83vAXB*fc%N0Xn(L$w^=?5qxwlzKahYqm|@xkW&4whswYIkguc$A10nb@fR~z` zot$u;;)h?;qyzol4pDlgdRJ|NKmqIU=a0!z0IZ0*^6&hyNzy4Ie{BI^+P~C><}_|) zJo_@a8PuDQC>*romLV(H_ z&sYmlQ6Fi15`^>1;3PgeW<4GkF;B|%H<|Z?pw_jk+Z%5)Byo=J7yhOIOt$Zc`=PUE zPHh@p!JPK8TIwKTR=~pv=Xpy=TbwyjyNKW|;PFB>6=HwK}OfVY4-_^mlF>Js4e`8Qm2lV1%0}Kk;f!Iu< z{yud3oW#r+YO<#}r*e zzrOFG(yN)X6(w}`$wQJ3?!-R5JlZ??zm53FERYO}f|)xCt2EY6%J&v8)u$wU+YU3ns)F&ln)>nzQ?JUsAa1Fd#e%ybGX9IkM7J#xGISoTy?; z1L14KnvwQQp2j{5deh_A+5Rfk31G2AED6_AQba@q)x;&Bp3j&d_*dDS#841m4_fRO zC*hYNxIxq14wA(24{+~kCpFRmD=Y|M<{sK@?+UtNCP`F0?+ZFHYU*oI^Lf!8z73ZE zxaX%hd6R}cW3kiTI8S)s{{uwo94xxy+mu8@80hqnLm_}bixi3!M}tggnv=Xd*5UV) z(>BAuupHdx(wJxj8Y@WJ1j2`O0@GbZ<8k|rGf#_qRWC1W3?3cinda2WopS6?hwlvP zId@Ek`g`h}^yCupE0UF2+^m&knrWC*T7cIy0G)KbeuLjgqg~{?Pw3nogrs(V5SUL< zUd^Xy2ZUA*n8|Sqc5t?qZ^fAOb)#l@s{UB12t_M^ZC%%o*a5&21P6*gng%`D@|_2R zE5}f^ueX577n(8Dv-&n%6-b-+7y;Us#vzD?dCoU8IWuEj8#A({cW!Q`eR^hu3#>~W zO=*=)+U0sn-%1I-_6{Yrw&Ha`^ee1h{ysex$PsXFBO*}s__)UxEyV@58A|mVC`||$ zn#P*!*s4#i{^mu5wv|zmS2rjz*gztbvA^5gXeotF1Ctxb#EY-R_;=cCv9l}GQN2)7 z-5x&+#B`*l;l$MYkgofE%Co=NmdbNmnINY&*4a*P)*|Ft_$0pr=4fv7uyMT7WZ$5n z#0Ztdl;GNIZzb$tRbw_elrV5}l>Vb9sO*5Nrsim_9B@ze)F5cE($H|v_T5v)8wRUu zn{Y7@AmqX9%n_%K7^^+>6 z4WKKgAOSdMqM{tVQ$QiaqX_#?$Rh5^@N#_1qKMUxPgTwYM~jxK8FKCnDjoL3(?~*+ zw1ZJ*CyMQHAiSLMg&`J{42Mb;rVV>bIvX7yH*`ZAkj__`duf~l z`Z<5yeywHDt#V2#e^QF2vb?Yze!~ms4NBI6_dW&Fm^E*XlAN_QA6u9*h=E6EjW1Z? z&Kix4L@?o~ytZ_>1nn)0%n<=(_#JCat!^Gtrb|%CyV!W2@#7WCJ=gRJb*14X_e<-A z!)YhtgvZ@2YlKX#aL{Z@BRJiXLsy^yXM++<8%w!Y`tG9YMA)o!HmxBo*?n{K)73ri zTZ0vD`n8R@V*ffg%$FSHK~^FC>jnSqZ&{O~_eSze!J>pC%y_-sw^ZkhkAvIr1M5<( zaqYe&?p{_*dTi4T3>nz5>f9Ej4cpb)tzu)Zyt!y>asRJI61<*8V?zvb332sCJ%qjm zrPj!>O`A74G>FBqxVf(9^HUrD+OA`gcq4V#`9n~NqFI$y-tUMI@<>D`F7W6(&#tPd zt5Z@|ATx6C%4o5EoGszIDP%-Bpv4oV^?7qvm!7xdv-X&JRs=#6_UOHR7Bg0N?)}!; z5{FwpF}6gmm`NrbrN+F$ z_M(%5RYL=;K#0U@)-?s{^RC#qSw`^0qVRfKt5``B`2$!G86c#;W5dF93d>B2n<*BV z+sL@&Xql1Qer25%s(kk0Wn7sW`g5Io+=k+HQy@A z9f3P8wQ`5#<)tzVW#D^KivR3pTigl+Jt_zWd%XH#4`4t`G$q1In!iquTa$7nX)Nj8 z@OgQ)?w6ZX<}feo5f^xP2$?fgmMBd^1P8#Km*Obx?Fpt47dI0yCKj_H)yRy?n$oK07)sOJfOufP9T)*P?Hl#RhbqrCRN^{9mVa^71D5EhSH;&U+aRI4n zpAECp%*i! z^Hy1YsJCX#c!H6a*lGM4y^OvYAbS4jMNQ3@Tt~BhPelp;`1n@c$KC9yykNz-e*>2G zUStR6xr`qT@ipGza%lfu(K1{@(?RNNYVPOw{MCzml{MO}wCr;!gDcdXh3UQ6S@|$I zQT$D&F1Wre);mCy1d7cjin+Hl#(}|xf`g@skazLkugH>41gb8rE-U0}$H1X<^p5*L zL9J7hpQuyit3;9{rqkz2e#hF^^J?*sM9JNCfylka;0nrk1^jtCwKpa@$*a0cu|o1@ z6fJwD4NCZ3Z)y!0K9|yD8btSts;cmr>A&Eo=W z#Bz~41!2(@2_fZ){71Nq70zk2NC)gEX52kIj~(SGCWDV&*u67&o)$6LZXZ3g7u|!5M4qgR-UkM;7uVUoV+2FMpFD2d zniBP{MTL5h-79~~gRI+9Z`S)hwqH$R-cD-5kpdU#^{7nxIQr5OCO<`T&i|}->wr== zyewBLaULV!=BRy03Ep7Nn*lV zM#e_|+rh*s4kdrHpViVLE{UH`p0k>9B`JPC6)UP5{fE|6GqfSvBkC(O>izrX%pztRNu=AbTR zx>9I@bnibD8qZ=zAD_n#H|z)e`1JJcC&-zg-%B;%muozU|1NiVQePb>vz4qn71Nb> z%9jR|9bn;0#sToCT$h3Hjf1Ff^CyPRTXB9Y*kwdoazm8)R9&VZbA}z=PrNH=jwG1e zBPuS6gi?AyKAw8p>FSQnJ2c4ykwQ&45eN2``2+ETr1Gte=q4F8$<;x6vPduEyOk|{ zr&&@UApmN5(y$=bmF`-erif5~FEfB_LxGZ_mt0A8@aX$6xJO45iG>Wr`_Kxb{MgmS z8}%PntNajyCf=mVU?&R?D*oS@lr1I}n1~hN`#AU&meo_U`7A|KOpnj$4V65jw1M9z zNK_^EOLle-w4-hIlqeLnVLMvQ%*WxlMCO0mBiR#l6cw)2nvVMwnU2d00Ksa2EeHkF;6_vM1dz$!R6H9RLCef5uNMW%0xY zC;+hP0p87wX25z9U|0sJ1Ogf$xF3L@7K{X#KwR=VHe%Ub3{xI_UmBs;xU@togD(Mp zF)QJmiCv0_Mz6EzrVK&g&#N=NZs=SiZw`y1LUe~+i~bSpin-2i*M7@Y(yP!pOr&{j zVxdTzqbG04My&36)^!`YapUxTA}D@$60XdQY)k+**8jZvN=<+|;v?#L0UQoUi9THW zg5xuGJ+OmEa7cM3Ro9U7M?pzU{WLMcRzLFJ0ZuoMmc+K$q?Y!}I#sN2!Gk>Pf)vBs znB8e;1dou}6%4PPOV!UE*)7%e3^Jn1yNV0#$3`vcc`nk~TosVCw=L%ghl7uY_}khq z7p^a_O0;J3%|utf!B@gCaEu4FC=%=K_?yg2{%h0Y5+fX=o&a-Zhp^4nqfDH{8T=@X zjVa?#RB-SH`Dnl!mQN8grYS&KHs+=#CF$v;PT6?kD*iw@R6uF->~;!ZKyA8D3Ie)b6APg7xycO#LdnvN z+wG0(WqaYL<|vbEp$@Ofvq}l;Hoc76dygc8Y*Uy$MTV zY#&Py4{~hYB^A%KNY4L;-|1~$bM{|lLN@-w4>jK_aA2-eY1ps)a9t0HsGp0C%&c?? z%q+nKdbHq>={E??j;5UNPYDlGQa&+PktfSKdl87fs4;z$(SnvLY^GSe{8vXL#XPKJyznnVH^#_JfS@hX(gvNfi3O#5mjtX ztT-lrwDXi_!;E|Wb>h*(zAwE9ZczVZs)1Sc$0zOBc?9gvM){V*#GPFfQiq3%4#YS) zgx2On)jxOsGNp+ZKHd&Z%jNM#Ra$IRQQvGpXNWp~)1`ytMGQAx#ZR>h5X}=+%9({q z((@q7My+YHdxC=Hod(T8bN&b}LjBn=|La0zj6QF9yuog6G*`i(H^8nA5{LI*8@Bm#=27GXOs3~MZ0Q48Lk4HdKe|Fkf5o%B8NtZePFC;zX7Ddz#+ z#>7wI_qsA7ez~xxOrAi;Ijr*li`xynHWcH%ys<*L%fNXh#`%juyoY1wuP} zT6&Izz{2c>@TFROfC1P2#@7b5B&=YkjNW^{KKKhI!HGhSuAlJV_+S6h|ASokf3FG# z#MTahg(O{n&N$e&4+A|Hihh2JW|J*UI>urNqO1|;(7vaXA(D1j!7~9_(FyY}z4=rH zW;OY|e_Gz<>K}3WxpV#Tv^KBPQ49|aOw8rYn)+r{;yiY)paQN!R>7YtaLp$cn8JPx ztu3Vi!)nUnQG%nt$ioH7;YjRZa^qZ^S)9T!EtYB1RY}74JuOgZo)WGk?vg`u!pfaP zd?^8=Nec!o!@G)NRt^N^g9-Vi^VMJudE<~jHUaE1e}r>{IL`|-TOCs0Nrm6M* zD&;sigc@vzDJ_UR3)ANcY9N$057}I9O}>R*!61A&PH9yQ2Guo1a2DyaP}~AT($--2 zgl9W8n|b0T{7stD_oCOdAdzDLDhkKjf}v3 ztR|G0wQAL+_d;znUKYTRj7%|HZbM<+x)MNyOZnGsZG~sBPh*nf*`1luH2IwAESrQG zN@g9&mMul&60{{U!9{>3ZpVhE0&AEJ2Fet`c~d_asAau-KIU5muj|q5-!Zf5a&e}xIts+aG*QD_cZsaebDfz zD0{1e?Z*S*-57kuhLzK~vhOp6HT-X0UQFUD;5V_vK=gDx`O)Ti`Pfg^Lqu>bz5VEX zJNk>nK$sG)Oe&=t((ZrDN;T5ZxGO&yS0*gAt@_oN!^Jrv@Ei)Ar{iRN5yU?8|0xBz zr`r@uoMgjKK{Bor4H6H2!vVkDp$u*H}rQ0t<(ZK77RU z2YjJ*l>2MoP;P9n2Bfhj-i;+qeu)KhNW1^y$tcC0V zp&wXdb5K$G1f^ldn%0DU`yis0ZXX^I^D5sZ!}G5ltE+FKICnBP?v6JFGwvMe@OLox zJfEmJ6XpB0>?U56=ljL`>e%UZvwF*+%5HeW#pv0PfLjIcBJt`A~iQd&Z?=ZD9C z{sH92rr*>Gb9wVbK&_q1>nQ2)c!WD%fa)?09ZZ`WPCG~6^2=2dj|koTj?IC}{zXDT zv4j7Wo$X*@Wtx%q6CEDbFrr4iDIP^lqG(H;`gOO2F45kG=+|DLfL(rEmj}OtvHg8m z3}BiNE2lWxpr}XxFp*O;EO=~VDGeg&HcsI1;(*KrjEfFAMSI@@;u6NGotfBLkX?2q z-spHRq7jyKJq>uYy*Mx_LBwiWbirrjX+E|$uzSNhIJEhy@AK*$>V_zJ$*{KXv_qbQ zNsl*jkgdsEokxg$1t}q&75rTA>YS@*?wa0dk(w0N>(S)ZcR{Xs}0q z9zAOXLs|8>dUiUacLdtl{;n9!H#UStAF?gEucxZBURE!~d-gG{0GP_c`SJxz5#i&)L!ELW-J?hVkdCYNj+yw7eP50rn zdkhtwbCh?)((#Z8_DasT_KM93*Cu|8qBE9Z(?`QH*hGgui?tfDmsI3o>9lsrvJi;t zf=^z;W=6#M}J^Gye!hc?%+cNtr0shc0VBCIs&cSir8riTOOrj!=kdwJ}i;au-P z=>{qL8Ls~Nv#`_iAw8^(@rOieWpb=CGH|GJ69`6t#L`zt`98BfYTRfjgvYf-15z`b z@bOOow9Az%4pR1OOZ}1Hs@Z{edMbRg2^JOE`fT#ri9^@m3vpc4PW>Rx#ek3pw#p?iyrd=G4f`E zf5ntZCZ&IiNd7g6t#gTc%ZHyaVaeUvwf;O486}WVID9d(@Le9_&JgQ^)oFiW>ZGWW zLYRX3d)T)2r6a&=d-(u8dPhNlR7nqd`zXL%ohxJ|S|#}f%5v{&FFKzR@zOQ@go?(iB}ieJfaEGzK6k2rd3UCL@a0M# z-)OpyRI;*Osit};_cZOnIAT9W=TE;cn@ATKSd>n&+f_i-w5x;S?(mWZ7r#QBi0)#; zkFo6Ngv(zTq&u_wxm7~S03XVRx=Dz;oWeqRbjf^jWt%3s?+@rhNT2N^A0lM^)0ESN zcuKyHOoj5A%|bjmh7JB)HjWB9p^TMeCZ$cYFuaq~tibna89JSIyxdo!Ca)bR_gs97 zOgo_2=myS88c9pt@O-5iMzTckKHDU@OIH+N%aby*WqJ!h-)hix+R2e-QY@9For&he zt)bv908lY?skF0m;y!a$CY36eNR^dFPY1h!_)8phJ|CRU3)glb)_v7gny{ng^zVvC zXzil@3SA}ihKb5SerKfz7k`_VB%<55`Kvm}gg5x!Ul%x2lJpJIA6CLL73t~ccKJb4 zNxpp{IebTp(N5I|T{T8!^Ro8k-bPo~1i5A``s()kJQCN>gsuSv5oE0_}nk#-|-hJAV5l z_!<%a0{|{c#68VsKVi4L{~$i??*OEep(bhVK4kaBD4tw&Z<9PWM(qTt=IG*=G3O70 zADTY;fOpvV74Z}@558t?-Z9*?Y*j3dj*!UGeW*xEwxZl1>1kcQTGId~5KXb0M;~j= z6Xpp;Y2j*zD*_!kD-ZfHK5`5_@X>@TEB<~AVRAGLzopGODju^ASW*hJVv#ptlR&P$ z7kPS&S}>!Kl#FbjPG^Z?$(Z7hG$U724gq1;T&Pleadi8o+dAj?a&2U!C6Vpa2rVP>+7j3rS6cw1qea!MVPA_3IdeeC9zs`8aF2rQs{ z0PyN}pxEi|K*=*x=N8hKRHZofOT;Ix440F}!BoYpWpPd=vgg+Bv-MoKWkFTVf-I z@ANmsgsX)5tz5f3Ogg)eclf5qf#1NiUp{m^Jh;Os*MUSAvz!#3W1`z!u3zrYm?A;>!^7`;AlFc&qL9KQE|H1Eyb3fT z)1A5N$f?#R)_(wYe=!%C65PWe#$za)$^yc@f9dxBYis6&U^|IC>hE!$eRn+ZKF`dP zupal?cIl%%t=@-(mliG-os~T5UA(nrLkGUkX{u#ejI@mvi0D7QFK`JLeJNg!jry%w zEwPI6==M7~B-nq7_B)m0c!}q{1hk)MK7~T?I|Ipx0@7Whdo)OjAR#R+-6bF(C?Gv*G$ITE z&;2>y^LYGz=W+hn{@d<*alg0s^}4R>sZG2dmo=51-xOJcu@;p3!$A)vgK>SAO*@yE zS|himRMgJm;B(Z*uh#MFuJeo4Hhmn8?^0+{w=3-Yy@ky_LottmHw&f+ITM5xdg~pII)0%Gdh(f(S@P;6 zY2tPCxUm5Y&sNg$v-|gLI?Ok05fF!-cNZ6J0(M|Y2&1v(phV;(@7YFT!DjnVO9Y?K z!s3evub@P;L%Xy?M5A}56x)isRi=-9xdXWT*XiYwE912EGulL6LY)S?p zgNjRN=?v<7={D5y0Hup>N_lb{V$<-__4K3ipg>561@KS!QMwVnkfTDkKk88|g0xYM z!$5w$=8<))X1iqaE9CKHw;*ti2q@)$qNx@FgJ0X{_bd;{WPJ%J<=sEj*E@gj1TNvcd3&|Mw)k3zf`S+S`#Cj&-{3R?0* zCYe)`L-o{ERY*;j319Jq<^CnP3pN0R)PV_URtpZEa&AYU(r8S1LKB4wvwRDKz%T~m zrhF!(Ydq5>!tiVCRiEt0&#I4}S}>(b?TySAcWqO{|MW_kz*x)dtC+giRENPa+^CS} z@9C+Q6r}n6*>rAN;}mkotPVr#+~^hmR#GZEgvC-oc71IMpU z&Mz$d*<~Fstj^~LCK1QUpIm?IE9`$%N4n9nL~Yw%Q2sHQQ5xwD)*SA8 znXjC{68W}c12*}1$KEqT{-=kLi*^!eXJ#GcM#uM$M!fMA0tBb?&&e?lNiyRXLBP_nS3HpJQYc~QW3cn zOM3Ha9(}OsL#Hxn`PG^TNrc=7rr%d*tUT!u4a>3rip2nQPDv$h$X2zUBi_rE-Q%-+ z5+n0A?gS`>yUG=S=w18I#?zo;i@`CeNc!+w70OQ*`<{y0GIG@7p7~xpjsGxMcbXla zgCK`eiKp7@&D2VlDSj-L0bYSc9|G)^NJiT35v7%zkKt=AH`?dSIK>^`$ixPNzFg-8 z@&4_);>mMv`%53$71OHc1-9yB-c~OqXx#sLeh`*j>+~V)vE=wRWBA07(k|)qY8 zwpN=qb4+kny>EIjhA5wkTJ!bHR;G@{bXyUlvdspI*fzk!9~-NaJMAOBv8BA^&CjVMW{yqHrnxede8JMUKlMyXKqU~GZb^?6U#A`R8ZXhr9+OmGWyNCcs^3C zXI5*VXEg^9g`5;xK#LvM{t6X-K1(1E?>jaCVP_)f-(Y4kOCR-7d6E_!`7;ItAm4qe z3af@vWOou>XZ#WD-)ztz-2mrs;0*N3&8*s6IkB}<5_eJIW8MCr_c~#rv3J3aLTx}0H z37Lc08`A(X+$nbBoNSL35A!mR4otLvsriN+hTH?%o5K-e*QZp#?CyW$O+eyofUzBa z+t4yUa4(LMA@oGGC#7^-L88(FBxUd9u}DBfK&Ch9YZDXR%X3w7we%c8@7sRmPMl(| ziw6&XAhC#GY8IWWlXpsB_sln5&wVmfp7;f=b`_t>av~>v!)~m0veq5gm^i6++P;$W zWvSo^_|!eggxB?o1T`B)QP}1Fu}G%$sMqmkuF`{bzv?q(-lGXzXfB$%FRzwGDZQ%cqgElW1C;~6py|AA*2hg1{YqCE zcb5FkH?NI^VxAjvhIK0kF=XcRiq3*w!j15AixS+@K3NtF_O(y%vMa9+F5Dl;1^5MV zg|re?NabJ~5hOfK$HWm(&eGQb*}v!G7Av9WxV8_c|62~pNs%f`s{@4cJ(h@Ve$ZB~ z;q*A$3(xrCXAR1l(%K~%)kavNKaekeeweBIIMJLrrJO)R3e31meBY`U*Ep7)?M772 zJY#@Pi+0~w*wlO-Ey5Gx&xGQxTNO{K4de;5OSH+~^$HY;w8?G#9ID|%s3;MVs!ey^ zDTL)Ef^gwNozL750UDP7K%SgYRJC2DWfW~sN$%Lrv8B<;sr4m^xDiY}gJ<}anZIVh zYl;>67oKC_2(Y6*xe^9vlo;6L?%wl{AI3_pN-lhbde#Z0_9_sg z813_F*;D*4EF0%iprg4JR1*j1Oce;0P$atXjL2KJRqIIg>Ad4$=ZUIZP41G(IP(-B zHh`{u1|JFZ=9}1u8Vs}vOaL-M?zNR@}aAg?3 zn$%;X!T8ZKd5c^WpLo|2%D!heSyWFg_zz?>*#4F|_}iOTi&f7kHDM5`&{w)b>f)0| z)IiI#UaMvl_ zi>O?4G%l9S2TQLuAC6ABRhNcKS5vX|ctMCr-?DDhU3WqDyb}h_HBv5OM&UsorT>)u zUAn3LyrybA41}!>xDy@ckadRI=@u`!m=FYFMvSSS zHTV8?0>hb^P{ZGvPhV(4czusJ(-{tNc6qsu;LCo=KNdSiIVAGVmWCcnA6o;+$W2Ou z)3eF+o$sPm&h~j%ROOnP5o_kdQFx4awlLd1nUwxx=2uDQ*|t^2rlbZNi#nt*PcjDq z<^C1EOx=46j)X0rtoDNG#isXOZk~{3^9G9nJzTxh@vp17eG~n0a~rD>Q%`y#`)-7nhKZin_>YPSv%&-p3B0y;0#eN1_Z4lZ$Is8R{Zw z6WeK5{;PE_@;cj)sH-9K-o4)9dT(-;yB?L%sp+Uy5)%!909MPMC(&R^%hB(*Bg2|| zZnbvk5t;N8e7lNRpyEbn)yIt^jsX>Vup~g{BGndm*X>UC+@8%kn%gBM^m>1dqTTR| z<-Phk{-|Novy^38_ZsRty!ef|y=W0o2){z8dA-Z1=~g>?)kGm_P9rGs^~_9N9kJiV z4yRHtJ99m%u({dE{DO2yY*Co+S9~bo!9r6#x zxU`6kI_DCKtR&?7S(#(=L+5@cUE2P6gr^%K!z*ai(I#}U+5xG~sgwo5J+7iDDN(U% zd{VxK?NjE8+{1 zXb#`TI#Y9juGZllMKN6by8|tP7d^7Dt6+a`IC)-(nq009=;Ki zM+=`?m-!4~21!11v^F2H$XDg7f1v6Q3pAgb^|t&Cn;r9C=yHN-&411z5Q`jL zwU&ck6LNhG&l1>1Meuesbp3REK4@63WHTzFCbd!6>l1_1^4rH}@DR2a!v)-0rChe2 zd(;KxV*7@_vuC3xab(QStv-H8dKsiT-~caBfCpbO`eqQ?Ycn*Z<2kh$Cz2PgN^~=d zd@OpJCC=-9UGSTq>Fz3tzP+Xlo)_?uIhUMqW_L{wCL&NcE5cdX8Vbc1_{ar+7}E~){ETxet;#1_>6@!c{*FC zT)P57*#e0Lr4ESi>n1t4h%^@`r?UJVF}bXg=xF$>0QF#!#H$+OW`7}<#a|h&`7|B* znNkdW5b~j`-RfrsEz?tAB^Wm zhGzClIT(DB5GV%WGW7ysAxU-PSwcfS3Tr?F7qh|llURqt`Nfu|m#vBQQbFNm&k0@^ z@=6dif?8wMFByprIa-`~A#*UG7?hX5njS3WC>Y9JhfyPU5tFln|fOHv=8>jEb0VmTJ zuo$hZo)bdBW2m)ub}Wj|K+=OA0~=*?eznbLT1^~PMZh*)(7C)$0$mhGYXz0Bnmr8$ z*K@6O{IGum)(w|?C5BN#8$VH}fxL|26!5BI*|#P&Q}O4)3THL?JCvLMc3NTWcRA-| zjE&tA>SB*Jn+wP3X`7%zSk3@Truf%e*WI&)_rtm7w?GSqN}U_GvZL6NaBXsrG<6GA zRfSe%ny^8|gphzUzj{iRcminx?4;7T%kLGT2d4rLj<~*>eBkq6YV(5r*p1oce#(6v z*_yJ%)92sb@cz>?cI0uFV)yc9E{c^Q5u4>cg zzjE|4OFDmuIKrvZ)!&R$WEWbkeQ9UR_!#mirko<*@tPg%JhFx-z&<%sb;mIvf(Rq> zrs-9|aeZXT_(CG3Q|n-FTwe>({3B7Myb?qM7tG=uh#>LLvsvk5jSCxZX3=kGp48T1 zO&zu`33u;uT{nsjw+H@HJ}=;M$DL`o)x zeTdbRRj^TYAYE|CNh7P*s>aKlgE~jTl=l@mwYGMy_F*5UCODS(FY0|_q`aSQud;^t zOA?K^_`LYjhQFW9lo&N`e3lNE8WL3;wM4Exf_?&K!ov6ZeC2(uIAsAE@}A*wV^L8V zEgc7_ZBlpyTb*z&#rE|l?sGCrRyuDm4frCqA8$uS6r0s={6Aq0$UT86LwgkqsKkay zPWO-=+cT3jmSh0YJ$Ed(t(aA|>?=c&HBcy-w zm8m3?(x@E!Ewg} zk&Iw9>B7fV5Z!bmz+p;FyFwN4C&yjib~#WZnBv}p4q5Q=X(;Esy+>z8`t7K(KC_xR z6B%fJX-|rVBnv7ico_3G3NzNtZ!)m70}^eu%Bo~c!Gnx)NjSo0dB=P1r-?o+C{?5Q zV6Qe|%y!f%*szS1C8%E~6y5O`|HcmxXepr#H>yxgQ5hCIc_9{_gv^-PY^IsLiwg>; z7}CG}S}Ppe?o?DJRqPKKIXewYSGOW+@cs4VXfIh>S7B09mId4jj=9MB>@` zG)c}@Zx3~Q1OQbf)v}|X62`rDoxtNrvXmd9C`9KB6(b>N@E z4o|=(tUxpvRF{(4Jn5dwM1Zix2Fz)Ehpr9`-la{A zXx7K>iYIEUGE4fDi{FJ%w~sm9SJCj{gk?vS8ejrMcqQhAGEBKhH?bZ>qo8?}v$6^& zAld#TpaBszkXYk0n0%;hpG;C?aI`Tt?|c0bobWD_Z{a{sPXvh|JH>C*1HV7oiCKhn zjphjU0NFHWi3d4dmM{dztgcRR)rlCd zfFR_;y(#Ym9l?&R_#T^ zCzjgDya&6HN3{BkK$=aZWBtd37rp+XmNrmG9Zil)0x zM}Qw4$HJJ+OT?k-G6O8mKwp$Ey))poR>t4r0VuXNTzUo%ZkA#%}Kqqpd*;$v1viFoGxqq8fn6*BwONe1gDgF>Wb^^_j0 z4{xNd?>{GmZC8xEla$l=2g)av{|9=rReW=B{xS7q!~e(0Vg923e>ge+K!zV(3`c z!-$B?1CB4FB?DrvNfi~WXkwwvm>l{?&98*N|Bu-d^oOCJRLgAp`(2>;X#6EFuAu5J z_IZ;YsmV%JOjLQR{2OatyyC9ma2I@Dh%-m(53fUgY;$m-E6o_InfuJ-(llX}KA5Tm zMT_sM`vquF+}Z%qK`H6>mylQ#l}u{;kV)9z1(-eL`F$*H!z#!(mmMfGwLh`ihX$I?}-xpz4P(| z4L&yJwZiGsMS5%sNJ&h4hYk9{19)6VVn4PLi48DfqrfHx+DC#dc>O{OoWF#C6W&8^ z+yKx#0BR&l;Ki6!3CDsyQnFdNrSNZT06D7N*@6xq`V6qLf3sC->MnBP%bMpG>ym0Q z?Cv2cu}L*V1a%+uM+?lxA1MVimSEXu{lwsBvAR>xB~X~a zSMtPk8I9VY;$OwnazHEOOtBWYs<<01`@QB?& zvg8KwP2;rs?1E;WoqSBy&a&3G+SDnt%1Xkp|wk zO?Gm+8)DWzQPuG{k-n3?(YmZoEMxZm*>Nb*^@44ZML$QO(EBsj^J$psPf>vDOidRJ zX>5Dm6MekI`j}j;erKhv_L#BHo&3b_kHh4rTH>sYL{6c)l+oe|`Ygd?bl|yvGp(g2 z1F4Z*U@A5Y&N7I&RswFSCnL{9k1kXZ>Ar1J?HZye*U>NA#Bc~m;g{}m0-bDwe=hxf zz&-oV7n3=o-~WM>=a(!3*ux3t7&4=-G0`A3CVL z59&C;%*=$tFd|2KK6X%!`l7yZd}`=b2@B@O15vz^dR9#UYMCy%LCZdob*7_2At${{ z_5?@wcURi1=;o&@3uTb@<||6mAwInlQ5So?pMu-?XXqwR#F%^%nLcc2U{!NZ*W?NR z_yyQ{a|UO$OXKZ zK|(``@Rr=;&{z*_Ltdu*{!$T=_{2sTJUD(OIi7Jr6>@U(5a=m`J_6D%Cb2@Mcc-8Z ztO7AGi92c=TMJHCrclsvF+V>HS7K1KG7W%IT4Q{TEY3la0m+oo1MS}|G`GRvcs81j zUfue7sY)0m#p;u5#heJCv7*uZHfsG5JZ+Ugf@*zwoW%EVc9v3%ZANczUd<5X^{PAG z#vQ0^m0H=j5oAk#dbIDHUH1O-f&i!3+zAHXI~A(;69tE|B<7m5TzHf~`xCrWry8P-eyF9jIO@Bpo+_t$!7jVR5JaCqRI%;65iYRsAAp1w%lXn+9>E1TY$6U^BZ-v70RA2<78V)cW?)o0>M zMNn|l-umZf;f-%6zvK*tbLXbNWF5HiA|Bv`j6sVH@xQ*1YxY_@=3~MJr30RzruNU9l%uY^oe2B0p_NOX^} z93v@IF z@rPzxovix0q)^Lu5)-8SLV)th{RDM+fCK)q{L@j6dxD@r2Hxz&`8mesLa|<*lpVh_Zpj?{TYGMiltt9cp$5p`s+bv zI#x@)EY1^gRyy7(;@^|cG?Fj#_9o4n$zdpu$pYK2+HKKY8kfllvoM*Q1*cF(b-p<< zM@IjLuxUc5%vm12^Z8`@?2G4IPT=t2KkFG1>y>0okE#07geNHbI@)%>wtg9P(8;p1 z3Hb+7Fkde^kC0I^21hP!?rQWFZi03>wf32`v3U7#a3W+~&U(A9{5QVeJl?hUk_ltG zJWGWw**N8ry=B&|f9&7&cKHsU{G)myX(3TS@CW)=L>GLUx2%dnZSjx4inq%|$ghX5 z>vGM?UZhCt$5cTYTz#*9+kE^x`X2QJkB`erzT>!J$6U-qW|~FPp4rDOkaecmcxacP z`@_srpFg`zv9HOD6nQN;MdF=jMJd9#gUsfCCvb{W9_3{yxo;YTqwnRmKl8oiB-^}U z?tO`Nc>u$6C)UOR$ z{mfj0UQQ}wCh9LOqiQVw%=x|i-L?%^W?|~yZl2Waj*kH(CXT#ACiVx0i_`<7m(;!txL5V>QWEUOILwh%pahAkW9ryn+bPX z-W{G00X0=3NLpxZMf`Pg&}mFahHkZCM^@7pdVcC5zcJ!BbcoHX`H^qyck+GhMwFSp zB2)!LHD#2@W{>VRcl@d4;5P#6PH2~%Mww6QFBN@@H?)qPD*D)$@%QBhht3HBv^N;Gzp7u?7h%}JfM!{v*0_q{TE zcC(w4TQXC3lA{@@*WKOLN<~gCErs-GliMT8sK&93z2AwxRwu_Zmog*D&+GKJf5%`u z>2`97EX6lq@pQ2G7D|;4h}7{1H(yHLs;Iu79FG0ola|Q|f5SQoz4h<1=X$BZvWXh} zh2NF(*E1Q!vQ2{!RjU;{ZJWHj6}=hwDk*#x1{63+W7>DBkaXT-`Fkf4D#JeC2rKyB z4i759G3FJC|Ar$(@cL;=8LuwR&}2zYd<|Ranm|ilMQofGb4oRL>q}W#&mHmg zi6<2{=m;D^WLFqlUBOm#lOeSSn zA_}$6pfD9p{^nT^*eM{`r&-@r)iNj|g@K~Zcj>8-6!i0tV4DM|8??4d44@=1iLdxK zEQDB>!XgHb=ARb@Ovgi+W^z6zWpZd+*?cTY9RLA;g;SAt+iW1wlMqt^X)8e*G&A_` zNjU+1f;YGFitBmfJx9^o^+!{Kw0t=f0Sg$2cksh}9mVKA&nnoLA60A@F(6W6B3hbQ zNHkOD7fkmrM9jfokK6rY#iYnR`Hlkc4k1*K0)6bO)pihr{!Y(waLQ>Ud_)Gr9247#%&sh3ag34bZR+H6SUEMRmq+w= zq{bF^ejE2Vp$7OhDAUxnC&*9NkDPr;F~9I02&KQqn6Q{@^{CR^Ree_T{3Rmf*;J!`=pbR_J*d6iJJ#dgq}3^@8i^2Bz(U zBtwJ@H^3P8q6v?I1fIuX)7q73MdCDiVgCBFS4@{n^Ida6A%AcrJ4%JJwek9%5sAbh z1~a1St$Z@T3DKA)07}=wcIK>^I(zB_;hsa>Bw85TPri`uOU!@kxq`+wl$M~Gx0|tZ z7xI9A(t+i+JjI^8ACNh_l$+l*)G3f1wNTmjamyzW zOJYBUh+Ip7?9t|f!!=+w5N}U~&7TsR(Jd#PX zA#$TcNqY@Zt5O86E3%7Fu^ow&F$wj&!HNN8w}o?d9}vOTj`(r0}l(>L2Qx)y9{ z*isw?oa+>-{0~zm@S!2W)fF(4ecEVJ+OnOTbnI zjt>y3ZQYyWQ!#FMbuQB;!QgortDFgayTo|8{J=`bZUP9{`s;J+IkhDOQ%WuXwtiU} zKu*4GtT%P}RGy{`r;gXcW+=zpaekO`G6z-gZ=1XOV?zJQ6eZa6EU*bT0i5uqR$i_Z^e6yaOvym;C8ya*Vd+Z${#yLgqvGIyrd~;9FweU zp}(rSo~=rM-mx_93R-r}aGE;QU2eFUObp$M-pmc2t^N+ryG)mD9#p3M=a#Q&8v!Wwb zmIoFl%*CL|838<_ZzftHVzwn9N0&A+-f@YQ{0>z4!^h~@tuc2Bn3>iej0*3D_^QXW8i(((af#%&wrq;r&;$Z zq+R+$Htn&@sHCk}Ab9qljA*VA$~KzloMh`aYuf66b2E~y@S*Qvt{=dpZ2kkix4nxy z*0_DTEP%KDtA3p|NtpTV24F{&$ia-O(v(#A&n}LgF7o74_C^N^RofFYAb@SgYi;H! z9~{g;XrFsQ*x*7;i3WtOTeSgE{%`m@9Y>@)B7v%*N|X&ln@oI%*ys{kdT` z!{1~k#z*cKTwib#Icpl`B*l~Sb6f1`El$(JU#`8T&t zS2zyL;tou=CgaDPx|wAHI7j$R(Yd@3Onf|TQcJhtC+J*DHhneO^YPpg_zA7R%j^be zUTkLEQxBRCdfEMwG-tCzdoIhtNTbi-)3Dl)FC!KX8`Iv;TXYA8U|T-smuia-BbN`j zQCGorH7ho_Ydc^B!MMC>@rbF;baP+_DE8zA5p^6;C2so7F(>8$Lurx&V& z((_Y}MgDpj26mg?**+WAcF^CyX@(H8kRHJAnSo#joc3}588CIEd2M{dax~zNNpQ~q z6`sPrtSE9ZpEX$1AgpPPIOLR;@M-u3v2}t7k&7#O$TuXEd@N}&_qw0jL0dF53}0t1 z&zTPb!fNXsSbnmw#$<$hirQqTF3ZRNn-N9PJuEQ;nIg-w}A#F46m}ksJx3SaQ;bG2Gl<53yH~;_ouh+Gq2- z4doCs+*+QjCVD>kVH&wl)NA(RCI;;`tM(S;NGy)N?ESdQUJmLNvHG1zf)`uMZXGX8 zdR#wP96Q2~$dO&1mOt5|C+~9t!97mea#cuGR@rTpIBx^5zHQN6z}35*F98>G%+qy? zz`*@8qhG@8mjj^|evixiT>Tc0PhIY=P|k$fqKT$6_0PiS!pjaSvU+$wO~W=e(y!mEa|H`w*|jhtNMXLatVTbZkFX~Sjm- zgRHL0Nda0*>z?VdagoEuVP90+gNC*~r9s%AyB$PFHmzz?+5_4X&td#yhAyv&v;9N` zBB}{8{>%`BWej4CcNv`Ei56d^U`9 zI+Guj;mAMZ&*FWi5*>qvTYB2gS`9<2`G0W9iCy~%dL^9qI+eo)9H<+4UYKvd*x~{V z7C@xP@1n~5>HRkl^yk;ye8K2Xh2qZ$7i$*fV!}N!2VFl3p-E9%ZHwrh8 z;F^?Z(2F7|kVFMir&Td)@fx{bysn# zRNV|DT%u2aP%QZy%^e+8(i01GKTgu#=%>F13nWL^e*4P-!M?ahO%fbqBdU5IgxgAQ zZ+tFedTp+EKE4tq=Xd{Tu||Lc`h9kFjviRZzP`P3$N%xMP_5=qcX9Tz`)&RZU)Iwb zZ}bgd>$Wb{H9_A9nC8X1+y%JQr)uiFdGxI01gOAgohG;cjnN@>>mT^U2-`k*%PW}- z#If42$YkaOYn_>sz=bWZ0R{*ugEF3$<{gsJTzI`zXpbe4Wdlar#F}NV8m}O$$N2$T zz2AV^T=ciR9MMWiJazSpCR7O76te>PbL7ISy#i-Iy8M{Wt4g_a*JIvoWhRb8x>@7v z3N#62GjNiq1U=ARxrgp?Vx8?WUPlJeQw)_t#j2)j*`3 zzw$L_YD)^WO3Sfw3XfZRYqu?M5Ki_Eq4pyoX6P&ZP7ajWc% ztjqob$qtO!g;}MLA9av(!3Xvo` zRm}Ckc^qMAaB3kfrULiwtk+<#ssYd=+3s;$^MHU(>yPYB$M2;NSfxoZG>ib5y z-*0@^0dv7*T-}Q5mR?DwT$F5F3d8Qd7p}(0diShF`I0gYG}%Y(W#DFg&LPiwlkB36J^K^I=v!THofe(QP%-nW!c{?~@U=rRvT0D2_ib-+0dVF!KVgSGHRSygMK*O}Pr^N5-EO7=x4zZVL zbp$hp>5{3|&Sa!kEd3%=t*{NeVmW?zc6Nrq61}}q9Z|iAXI@jiSr^1_9BM4VKG?h^ z)1}AH@d#lY?+H;5w*O#sUD)Y`KBlLf!yx`kc`qk$w*iujSQkyB2%a|mtFK^QqSU4f zaQUXM&n74VkIPH$Lt;VG-0)?~6~M!t=>Wf`u-6iSdgAr94L&WtO5iJ?C_mlX(9IE| zn<4_?`R!wC^2&l%R~7-}VIww-DK<_-=;$w!CLsjVi25KX@N!?E*+WhnM`S!tKn4#? zgmN!Do*!+}!kAmVlV8tdcaBY$*Q8T`y9w*%571oikQK5xvn3IjZ3iiiN#r?e8LJSs&ctxy*9&FPY`Df3WawwJq$>73sg`h=fZWFmnvukv)&utsj6DD|ywqO5r@OqRZk5AF9**v1^dd zDlv4enM<8d6@>D2#YdhdIugRPzVtEUWBcF?j|#s}m=Cbo@j}%{eEGpgTp!{i+dU{c znPzFO9gZRR-q!D4fDGmxd*y%Z#=Bu?7~fumo5@}RsVfZ^c`hDV?eL_5ihiP83TIry zKRmFKQ!~ItD^0{SGd|8#%P6`GVNjMIIXg0M&V<3R?}d8zEr>|>vDIMJ=}Q=>`0Oxm13Hj+4|C@l2ke?=^S@qnTCx$Qg&aTkvYI5ic8d}cR$`N0TMfaE8T%AT^ zO2pBLjDLHuF5}-s(xerI-c>|5KXHe26tTu9yifPgatxn7&acFo>6pBeC@G^M8Aqd2 zQ*u(eGqq?4->Bc!qwmI3o~s$sq!s)Mzdi{GVP&sT8|~`Dj-M2~mu*^uQbWCaM~i?C zm##;CTpOc;OciN6$?W~AtWV9uS>fSM5*Q@w-<0Ck!p6X2v2Nc&H0Ujk@e3DJz zd8pqZlW{e-M!r*02*vtEkAbIdvrUEQ{@U}zz|D=+mmI|P^Xu4by7)J{9l6obi#U8f zX=7BVDjCK52Veh5%J|-~;9{!+5mTJwir$%Da|FV}T?);Kqa03M_v5g1i4NCZQ8a!a zWL<#$5%kg8Y^JJt-nG!?9M$88PM`8rqgf@XT_@xne0}5KeTo z+P^fw0I+{v)^(o1C|9f%0&}__N-?PgRq!szNZ~9j|3L2mBVB@K2aRih?7^+8lR40I zg(*jAlKn(1 z2@|FfGyecKt8l|$*zcJ~a2QMIH`Z4M)dm@DojiK#IWhe>%wCu1iBUL1+0VY7`>>bm zTeFqCUjj5|(g2Z;Qu{Od2AG|YKkpvdK3S5doB-jOVeLO4+Q$Hwo~z*b6EOw6!9nRW zP11=GkuBGp^>bcfZ29*9qssX_XqcTE)9hl3-q3(K-`x!NMmf%fZY+V9)Z!GicxE(> z|2ZZj7pu6_GcPk5*jE(q5rUI7ioPKLH{dPWe^@gJsyf~sH+IPs>Kg@Ud_F5n^{n`> zGlH-_F7@V}?GeFS&uN|n?0Zfuo$l9aHnLsKS^}<`x4^0Kl6lyj!STQ59g>CG{sYlz z8YuU~P^-|$sw+p*wB-~l6tyKFNK1f`D{Xt@STfnKj~(!|M?A2fUGid5<(w;e!FaJ> zJAXTwQ$oQ~q#95BM@c)hE^r%#&VbIdp8NObFGOiC&fzWL8?twl)^L1Y)#p5ZuRJaO zv}-WW268rNm#rkd}6S?DYE^ALBt*9?-R^Tt%XK{)dcy?lJjd| zF8eyWxxJ5|>+!(k(9-o`*-lBex?V+K7F@P+9SnKI^P^RN%6BU}k5{$BS&KX>ij8s( z0m2B!U<(I1*B$#N{4cJ)!Xe7Fd3)(@q&o%a?rx+JkXi&OX^>Ear9(O-B$W~*7U^6X z2|+@-L%Mr`<$FBmec#`A&OgBL?0w%e*IYAmO-QEx7@OMDCI<~YZcH_#$7+LV$Wut= z%uycXM9jDfg$5Nkm8Mj^y<)m|FOe}E^jA4V2{M~@i7jo^hlXUB6W$EC0_PS{ISuLIHCSYrz_2ATJ!y;P40#EIP zL&Cx6h?l(;FDnd44GljVsy_q7G+9SQc`4fK{6@8Nw~5F@)Q30UP|fp7O;xC-=gMUq z-V{9+UfRg`qArR|)14R{yBqVDlz`%Ud7d|-RjKlFPUw>6cUI9XG9A|kdxK7(3!43L?aV*>PgcPBe9W%CE5F)((Hyx2t`yWON*~MEu1bYN~!K( z&$8JCq?Nm}=iv`&-oMw}n_@Nc94%@RM7#~4W8vr&p}TDFISbHE_iJWJ?1@*-kDk2F zK|uLIa~%uNYZ8csb1{t2-tiI)8i^&TZ!g6UDytGQGvy-fw9@ z*P6%P8Ov-FCP^12p$oCgDp~bJB=Og`9@{s{c9FCTP4VXWAu85#cKDlzbNfs;+HvPw zM?ZH+Kc)uZ4JPa76Jv=7`}2)2BH+#C&HRoML=aDyt{v+IcnRuE4uTlm0l8mKxWd z1S1b&H+nItQg9-My?D;EP)FtGDcL{iM?YsGdu=Xz&IL}Q{Q`4rQI_p)F%w4+_V{Jr zt~`Gnf*(MoJAO0gKXf!6lE5IQj*)q-a7(462vR!RizlL!)e-meBH- zU>Xb*PR~0FXT&|jzE?WW1eoDj;?7C-s78)5Ju&!aCyoiV63Uy#T+DoQJQ8wD|E$+b zJgGQGuBP5gMEv3z$jphbNFQUR3}(jUo&Xe=)4N)`s6lZ8_lP6$!%)hnnf2A5q6dhX zOlqnfJk)g z)9-Fc*-b3PkOLdxl#o!f=BF0c8S+CqNcI$KdO+GCM92pMp6&G${8bGdWhfwVMdI`( zx;Dt;pm3SE=_%+>s_vm_F?_bItIu~;mDzrl8XOS}yrJ-K{^| zi46HHP~Vd*1tTJJ6xCScc{J;d3+(rcAd-BU<_?-P>iOv{TzoZ}P%(z(JW;M6M^kJ_ zlRZJqX*C$b6qlb9A6aW194>cU5LwZypa2pGD8Sb50E(`?m?gVA`H5ETOxsR1K6xri%cSnD z!LP+BGT=bN8^=s;t7L3a^zzOHPgJlLb10w|ivO`pXzhIa{vL!Js4Muiz( z2ofq{V8s-Ww=OTRW#z4bC6L%$E^QlORmY-J;@Oj0x}}N4$%$^0NW4{t+GOxD^@ob1 zAhDh>F6kp~VBsQO6hmSUp+#11>_?q=Ywx77Go07Kdad%vRxe#9cbQIGvm><1drV^H zFD7A6x_vM90wE>~9%T6L=C6w5#N#-pO3$%%n@guYD}AfL-XKr=O3;OaK~#=Oy|*`Y z^4;KdFx7ISnYO^wy?s+{>cV&|E0X*eRN8~RO+34wLKa-+bS<)3F*mX@)&h@BlAOyn zPa}))H;@3TeS|yl3|0|n6vE{m(t806m`T!ynS_&};+Gg7Z|)wChaj<5>`j+otAS<{ zDs`1=BmCR5+_s}?sd{SYj!)=xfhOWf!l~)e^=)N__X_H$ai2vuj~b@v(yZp*PM0er z!;xT`Ip@5`z@Ai3Z(dYjYocx)n&suP=G&_rTq1=@9HAG(1eq78Nk?!5^t3i^xqCuI zAeD4qJMxD54LY#4nq+yp4^D?h{7F+A0qk;wcb`5!_!3}Urj8Uvhk7?Z_WtnRMC7y@ zO6hU(xH<~GMsM2sLN`56F16@mjn3-%U&~Wtu~E_iU(&ISZ2W_Zo0roXjw8Az zleMb0ijy$YAL$zPYc+K%xDIZt$h5cC)XrnrU^r}009l>@V%biplp2&qoe2Jrbr$;A3fP%Juu1S; zVsHCxtDX(_()3oz4*bkIiKRpIXpeDUH?=)9<=PME(=5gE!R=S&@|m#56&DnXJ0u9Q zZk*N4FJgQ84Rvm|W2h+gma)1{v-tR{q51>W*n5es` z^M4;e;&@>-OnWnTRGdT5%sS3%KfP0dpndwvuzX97DmyZA{>x~{oGk;7>zf@wlH+qQ z7G>pTC+qweM%UaPMN{Gj$(o>zJ+B`z_1PEgCvmYh6oCX+hy2qlwC+qP6D-hWg_utKfWyc~9E z>|?&3g!AY_Hc~5*U#gkj4qyP>S!M65g$SgeS`Y8XWiLzzQ@>&9r)i`Wk+YO453qY` zw(31aFwhIgKIxlx6mA_A13*_xnfU#}H<{-*Pguuqax!lgl3{U;ws>g$TEx!}eNU?;0Q4LlwrJB~?OtOB;I@Ac(>YaJcWF7yPmr<)%w@a8(yMTD55 zu%aaXzU8+$<_lk4&Ep`44R+@>i*}+N6)mYP%5Oa1-QCSg}Rh4L17y(nD-XLn~SEXPVw^6OWYII;(;wilm z9wabfyfAo+_Dz_%Kmm5TG^fH(Y$I&VICU>qFhQ!jxlZJ($CE{$uroRKKS3Lh{Jh$; z3z~<+$_`#sM7Er55;i-&(&XU5bc*pK?EKMg8rA5WkPtO7YC#&JV&OgT=7%R)h&_CSxmvTJowf%LRXRPw2XNP&65 z(}?v(e+6iufynAA-9UZG?60<*8IqOhi%mk?ixZDlFYH+4;v5Z5HGLo@_G)bStnN3> z6IIlyeN`jeN|1K6`6xt?u$+!rFk|Ghc1iNA>B#)`pw~6niR><)*nFoxJ}~~RXWVfS zDq(LY1E2qe6a1$si(c7k_R*+oB(QpCiSEc*>qcuT$e`_ld{;_{UiO{pq98TPjTk&Y zC)-nLEZw=K=ALeez`v!>+5wAT7MAjkdUO3#NXSXabNA}uz0a#KPkd+U6vyAw@B=I{ z=YgJ4TkUv6|ZN{Dpd_`t(*$PG>r$u=o}Is3r!4>aX}?U9dma zmMosclZx$YJL`-}Gcq4h$>*b6PNJ52>fN42n}!`&_I9`rAcnxIk-Hy49l}91F7P|W zYe!0sWN~vmXORZjA~9;BSXnwrRl0tyK6J;y`3ne#4<%h%M(^W$t8^ziAA&t3A zY;$s8+O?435U3%NZ+%+MoLtoJJC)eG-x!4WzSXpYUva+8M#kiAok#C~|A}|=7IxWDnx#yjt$+SJkrN|=~rzYDQAjV_{ zQ#2#_I*D#lQqopVZMLcy`TEcVHD2Aq6)T%DKk=+KOn3VYD8iaXVXm+|G4t9G<+zIg zlRzJltyM}6qz)9Lam*-+nge_&(roV3^4Zj7jEL17>@ib+B&$yS=!8DdAQ1H!Z-uIR zZP>a4grSAtQ|7vrytBct!bvd-Ax$k(zU{!EiEGcxwo~qkW;y_*X)JvLp?dszK^Rhv z{R_=&Ftj|CBARghPIvwN-l1h1*tl>`=(f1S4{gqlb{F=zSe<n}#B zj0@U#T*9-hOz%r@L9oPz{>{NB&2MPF3FbX7HBB92>UfhZlf?G?u4M2?pj6_rQr}D?mLcy;J?G`jeUuaw*q^CZmNYQZ&B~6231% zw$KOyVZ|fc{xBf8GE`>>>9}NK6Jz1`1ZQ1LxOwf-IXul@2@@wLN7y0E;r-U`%cNyF z>YsZI{mGEE^lLagC(-qIJdl(=#ib!}aFMR&p=lWS%ttk4e-;n8G85YU5$m@c@h%qU zey_oHSQjb78S!@SCcq~AL={uL@BP=ugB&M@CCxRCkJQy_n+E8^Z8LOex4sRi;SF;9 z#v0K039aQua@5x>Qa4B}OtS_y9(-Tu>(aHw_!(pgKiJw@bE81X?zW-zK6&1txZ&u@ zw52wJ-gNaNJ#(5VKxlJfa>)FBv?ho7hr+_bNT|CYOYowuJMdeDlARI?>|?%{%CXp`!n(9G zfBJuC3Bdt-d=L$frctqQoUG7DZP5AEc(ykpj046;P2TTp`~4G?;*JF2-#9)_O(fXb zx>4!IjJMlrN4@BKZSsuxP(~IEHu;fS$AAN6&l_lk&p2T!=#$E{w>h@Tbj{0jEk99C za@*ll=TMkjfug3^{6@qaP|Im(A(~$|VvLBj7V)doW$n2QisMP0KTRWc&X;g1h?B8j zbl`FY5s|UXG4rPrkU%`YKVjDd=07nDa)IS*y86 zYq;*Ay50Qh_A>bKTVe{brgQ35QlO6rqpDJIlTu9^aRg2!)mF`9b45)$OynNrenni+ z&_3omT5%unV!+xY5)vlJAb~RKdksGei9J->ewp_YiSq312htVpQk&B{2_7ajEanbo zd=|>EcLP8FsjJQcj__~{^&_I^3NdCofBTMc^@{r4JLBs$k|vfgTb&sBA-+d4+uq* ze5Pr_a}6{zz1ky{*OQp{y;e?m{TK@SF$B|$@#|snu9{yclVgDf`XV3wx_A8bRt{5? zicWPEPVw#Iu=$}k!QKS0RGg(S&i8yw_v_5UTZF$Q4Xo>K_FgoMd;Kb)y+!tw*l@ab}QB2rS}XK#}fV)j?nWaMC)$P8+9N?!Fh#pvBXkH zydkgE>Zf#ZkezR5l!*0n?n<^$p__c`Y>DbQLmJA;JyV&w0ny;q#kAU!{$H`fp)`15 z{%5h##RiSUVM}l|S&6Vuo{P(E)Q#ekI^8AWUA85*4DCBZc`^_ouczu{VEX~> z8dOPPiUNdIw|gHDz?dl5mY27O-+X9<-b2$m>OKME_3V$5Ao~@g_+8x}!wqHqXzBPf zW_4tshM6@M<%~b?qMykI(eX8aM5ErQNi1vYY#$xJ-=Jw-+WJ%%8NTuv^*fXJZPdxI z*>fz@F2giwDel!)TMh>HFHUD(@VhFUkn9x-k!tdoJ+hlWQ}9?UO^wuod4Y%~WlXJ% ztUC-dr-^gV+F%i4F}bYZK+0QUGMx7Q)xB(e0i(3B`7br66H`CKL71+_o0}JROIS%s z$ZDuG8^GpsX~OCc*6*ww`w}!DI`ZdVCoMrlIZyemy)9_NEYNBfH z8+u2JQ)2UrV}N356q2=j6}DDy2~$0k((mQB6`FxeqiXjs2c>*^iKPcnIKx6oQ{Z8k zrUol3@g^gaDPh<*{oqC9jv1s1ggd2r(FdNVwO9_RL8*+4$zg?ppeditVHX;MD8Ek> zLY0GxT0LxYrW8aB)RZ;yH3X~bw5K>?Xmu>DC)ZCYb4zCGJ6uFY%ymfiN6XV>Nj-40 z$>fWRGNKy`R}>V~IEvJ#UiDwjizw}0i7-jLavn%g&k}x>DPa9Rt?uy$4y8rqk)wcG zGXLgMgEITdcfT@IO1MhB49!cGWA04ws7LtIKbjyZao!TSg*P;u#YN}`Q`#;8)1J@D z;o)29_|a<5c~p79yotlM-(N9E?cuwM3z=qR zW=01tMf^y&@lis;ODpY5HZ*syx-(vC%BI{-X&C- zuM7-d&+qMR;Rk|W6F6TpnIm0Zd7Um%<)`7lZb(ogCLWQIh>AI~ccogI9j`D1f88bs`mIK)*ddMLVzd*cdq}Ny|5BYdh?%ccbMVlx~ajXSnn? zer^nwMb0g29yoio%T_?QCeG-!%f{*ai_I|G(mYdLe}Ks_({q!-moO|JwVyC+KP$+V zL%|Y9nwjGPG<8HoOxa=kgp896ML|>|8POkdo&cQ>@75Qy_}ZpPppg~zDQuCaL@U+< zV`p4mTn$|iH2Y4u0fMHZW~S(T;POe;`I5iZV_uUsu5hkJ(WU;Y!&>#TCk8GmH8rDF zU#1Kl{G1kkuB_0lAjue`5*~tlTFtm;2sHs_`1evX#W|~SjVoSi_V=!m(9G<0vE3iz z1$TZQYb88?^3__g&t73|jNVhr@}oY&1yi9$GHqB(m5aMj7mTy@$X;8N!g1L_5SibN zmk7+1S%E{-6k+GMj4c|yt+|iNT7Y~ zT5%Y^D>HH}myU?dy|n8+fue}xqBDU+MUm$EIur>&?w_OB@$+1$$@_wSM!tv&(xg>m z_w~#BMPQ9^s*{xudjM7F!GB7#Lhya4Z-(3+KoQ1Tn+$c?ak4oHDMy0>N_8ya${$zz z+1YbLjp7%iP`Y~f^UIt}Y)n?hzE2R7dmeqQo<#Rp$)#qDqt(M5_K0=yw&$_CO>by>paW#_bBj^KY#LWLr zsF`)bDJHV5?d=lBTp<}Yj9c8xHIJ@(2WfvflnrDYHms-fTINaY3|>Xl#o3aG!2O3~ zmJZT#GOyH@SSNb*%{#ID8WI9 z8ayKDdneY~K0DM{lVfoc;o{<-TaCM_^q57stD^nWzPU_XO?~z5BY&8UMOI5GHN4$ai!||(gqNreN)BxTT{l0BK>EJOWWMWc??$cvvCyU z-i$M;ssfRPg2}uSoeqU=v^-!ueY92K$fN4~>$cjo3N?Dteo0UVgH=tRJ>)KX4Wr2y zvSW<#h2h{6A6@b#jTuf|Snva=v2!OKA-hm=@dd7gpxOtY#V-IAfGWPmpRW|d&hTEG z5OyUe)5b(vsYGTu%p=0vgaM^xDNIb+pBJbRNGD57B2?&N)zog}nfndFzY~qa43j}> z&c0CwR$!&Id~%j#tx5G^&5WcS-WN_`bHC3JHW)*|@{P^WNM!m7)p7RYQJ~zO?Xz|5 z@g~Z)*;}F|*wz0op^JaYa14w0s!$~^mzA-*eIyi31m085y2umNoaoYoAHw)%O*o%T$2|xFp%en?xW10 z7;XqYo~}YpXTM)`OtKE5uEF!*Yjv&K<+G0HJ29aXyL!m0Zb^uSI@4Jr)#tyz3X@H|-;1NWgAg|-Or8L@^Up=#fx)7&|6N-%O|ZyS0r2I4stUyn1uHD{Dk&b2Dw zxb(aTNLu2Xl0Cii=sUp~*cNRQg2vKOF2Hm9Aj^(jZxvE*!G)yD)62fY?07?3|FIp{FRhP~hxn zM#n^IPlWj1m@YR&61YbH;~5xdcCtFEvA2S?=&qdV7aHaSZ6l0~G@@ra?d|+uOBIae z0Y8^EFeXG2T-PTUA1B2xiEpFWN`Kv-n8vcR=Uc65~eA%$g_pamtL|XwL`0JZ+ zFaLhpJ z(pPwgPCKz z&AP&h87bLL(Wt=DFVPo)_H_>+dEg~i9c|D4(~8n3>y4S<;p(k?8B3yMGHSt))OZ)W ziw5q37TDTyXm(2YB(Wlxs$Z+l3ZG5x)B$#9aU33bZhm-}cf%V;_Vf7(odN^==?wb= z2&1kE(HWAxb#^G_wej~W{+|PWeemejhIZ03E&h@TuBWPRa^l8)I83-c`J(n0KwI^n z*`i55{Y>RtxRvH=TORz;w4C7el{s$xlvwGdf0t4?jmR4YLVEJPTE;k7p_#(SXbHo7 z86ADs@oc~c(y~nAGrK{4E-f2A2H24knK%B($Yyp51?OAU86C1N7b_J5MT~Cn>ERP$ z-cI9jW)|9-nJzKBg8J_hinG6}))w%M_`^ptxtWhr<$mcC&ZdE{zLjI?W^oaM80@fk z6rR3LD$z|N`;>0pk%%c3HNPNqmY~cTk|P&V_L&ru`RJmncfquHip9)YC9E&P4fS~P z^ywVd;IKOPd+P!G3KOO#hBqLjMjP^yohR0OV5~Zqu6Pn&8t83@`8z+Od2p*M& zLptzD8W1X@xR~|av5^?Y&I$;(6TW)`AA;Xm;ByLDfGc?=lO!AAPky)FAln^NJY3L1 zs2CG>BizZJTSa!;JPEQ=&P=E%Xu?1`ZXA#Jf{qj+7*~S7yq zMAct-Cev*+u`vVI!2hr|?ed@CZmb#3lJ%I7BE{$TT!56dM&ioz1@sXtS^5OU@BKh1 z=$*!V3CPYBy!wXm;$Ad?Bw#R}JtGU9C0WFw^wO&f4R$I~5wSdxaZN?!&aWcEuKNP; zIK0D`ux&ob#XXRB{1w{&7aDd7OGO)LX-Bzb?2v>AU)Q&-NYmq7t9n6tM=|-;y32w@ z8Ei7HF)ZYIQFbjBucCEo+KJRSw5j!xCUKo;X&yjV>@Lp3!_>zSdA~%h5dY^1_Spa7 zKP?!FLV7uo4ne%u@Oixg@IV3OGc2@J=)UuYgXXm$j%ZUso5B8iXtMc>54-^$t#7p9 zjYe$p+i>SGWq-kyI&`B)`l|O$388E2q-Zzf9@SC6l_3A^51=Gj_{Kl4ME*0~&?Rh2 z^WsJMyXM*WVlsA6JqyQ=@G9ue(S$|SHo-M?CFi)Tz_(qphYjIZwLLYCvfmw|DMO-X z1#lyiv%VFvEWKghFPB7#Fl%CM^dDsX!7*|fT;cNR;f-1f39lm!L zdzSD?DOGV%Q;~N?pMdtqP+* zU`5`0RVH}=a*25WZD?s-0NH^`{4~YaL$}rMLJ8_-IOc3qvWQT0DTv$O*IoE;EJSM= zn9jjsq5hMautPSy9)iqRtY5y6yHyF(s+G2ZLDu?1JU0>1rGp)!=Uar%=3uy9=PphT zmcy%ntYgpD-CxnN5P@s7675d{?zb|dfM1XN_n(B|f8MX}8@sQ6*y z+I=E+A*l3LE92*?mLU^5hM0uAE@ao-MrE|%4$yh!*3T(0&HaVnlni3On znkwjVBM)fkBI_rD>axD}zDF|Av_+%L$Wf$*307RThX_nWjDKR~5LQx*AK@^0@57bAAp~R9rLiw3u|3p%3O^9NG}#r$z6&kUifw@rbAE9TAi z*fR}Od$jK7!B?>8-T8}i$er1-hq`*#R-!AIvY-9|q>V`avFh)FacA!Cg>+9Y9T5t* zr}=&L02+7_InxN;pdu*D`ESw+zIy<%(pTt=^BzxIuRyL8T^-Yb0pZ-u-#hw;TER>k z*JMZlD%HJJ46C-|(33Xp)>}iE7mUfCxO8?90w@{_EkZmYXkCk6$N0A;MvXQOHa6n@ zmthbn+lfxXVP)+lU15m!5gA=_JtlqaWqr~uI>Cp6o%>zbKTLQRQT7=$3;(2O_n`n-Zl8R728Ua5bx-C1C<8$Wd-4u>wbR%AoZYy z&Ox{MQE1oD{bylC)ZD<((W(#Eir@smHH4ECp&9dCFG&=OHvWiC6P@JWLjvsWh0QII z0)POhE7Jdy%kWkfAWkiOi4>6lOx0C|j-w3@7{p5HW`^{^TJc^oR%0Qo+TSx61#=3SFJH_NG5K z;nQUtUvXBx_!TkNi`!#|1S3IR8hM+S9#=t|4OkmRlo?^LK>JR5B3Y83izVW398AbD zVW1p;=XqQf>|R3AC;SB!1t3K(;Jc_g|46T{E>ZxC|KXt)^BzE30cTIDh?7zY4g3Wo z*^XSU;0nLl8-WD{5hFZTgWXl#B`-@t{9JHGK59T4+*JhQW)@5!YS3z)u0uw5BkI;z4n*>|3!{0x9(s9x3YT z(+2l?#GOea5L+j-I$EKIZ`Jp&1<$prhAwgGIr2^sU|NHJ0rCQsXN6&#x^10xxeHa_ zgAl(%@Vb(@xZML|rMO<#`fOC9uSPQ}JVQMXPc9b!-;0nPG&(6T6Qo@#sY18=7<(4BVv%BA*CYQWZA4M{m&a@dm^yS zIp7Z2YJJT@)TrUXm-q%s&?;-V7%p3TS?h5jCVmR{?fo0A{Eu|o;i%O&`b?_ZlQ_Z~ z*u1ytM)7N875*kDP0d~+0_yVmt^fvGI|}pd-u1y(q2Ns{&RydGDyrYwuGQ; z=qp6aCdfa6Wl8EP61c0{e$oJQLk<*3`Y%vA|Cy*|CE&606sD#_Y2w?dceNVEuOlPV zK76T(fA`*}Zn4RK-)5q8h3=6&tI#8DMe@GtUNJiam)f?_W{q4f@~UBkHoZOy?CvCP z*8*Tj)!G(d(o4)2nltp7E^dD%RPYlW0LqeF+gC$IB)tG$x-a`l4Vs3W`!^bfmf*%F z6a}#LAv3p7sT`Il4|U6gg4|;KymOy4n;$`V>MV4pH;VD(sriC~`E(25g-TcONm#zD zreI05v&ZaXLT_(zXtP!rq*?btE}?TLsH$VffV)Ao{_EE8ius5e5`(&~gQjXEf2RgG+$9#svFTCR*q~2eCSkrH+`vfUP-d zwhJ@p=xZk!cg_C=f=B1Y>2 zi*T^&RsW~{nk6DoaQF|KFNhC)Cf5l&=*-25)j$fQuMj~ZM7R$rI;j9OY%U4{xZuts z)~bbVL4PjjJlG&KZ|~~xCiS1sKEFlxk|Duk3_(4|yJ+CL-?vY%%B)2{a2bF90E%fR zWE~+F%C&#gr#@CE7RlXIJ&D=uhZ6QPIczmWLAwBMKmk(~K3t@2R)!fahTarU-=qJJ z2mW8OxUHM|8_U0@hR<%RxLJI=@A0$8Up^i3IGYGYvP5jdy{Dv+b5U1c2GWSw2=ez- zKSOUHtYkd;DjmL0wY!o_q06vZcJ%7k^+%o1Vkn^yl)=QbGq23G6G*XufYu3_F8OCx z08v2F#q!x$a)WNXxmLbK#yi{$vgQex_rrUm8dwq{W{Z>(`BW!@`8|sJlx%>FY0SK;3MMMt^SmSN$X$8D-qH69h?ifoxp!{+m7+-APQhrhw%P3D=T|UMaTl zB`-uD%ix_Ye^_r#03Da&y6^0ZTVH=)yr2k@SR%Ma>8jK@575lJA6^geK_s~hc}|*R zCj3o;mE89M4T-nc|KXVbkDc;Sim>9H>g;S_ujUFkG4FVU+!2!%Qx7Zd&tQ{my_H&J zrRm2n^ox7+*QEBXHbQv4~| zMZj5E>|g%#ce9WPwNk65Zt>ax>(IGxfWC2I1;qDtj-HF8$QOaB_7%x6yaL=+OUn+UVEBp5e{r`^fe_!UUmZ+hQ z!~)s~y?_UL#Oot}OCCYOIJ>YXpzRPNk5Dj7XqvLswZ<2XPp8`TU{Xo930PY`W{!Yd zs(kK@L}=RJPuBp~Q*(#lALPM5oker11_vk(zTABVoi|f4EY;=#jrT0x%t@+CJ?f4& zdO2oTc-~tbB;+E482yzqvkOekxe<_-vL%1z%oDV}?qFT^up~I4#f$6hu>TXYg#hq5 za16fqn-KkPQH9(%Q@t(PN}X{?l&!^CC*g5}^{_$=5tL;ys+!6q-7ScF&L#{>RK%?u z3K{YHT37x63h=4_=rr6KPudZYTGN}^$NJvRxkxtVsHv7c!0ih<=dyYWrpc;Ets^O) z&*m-UKo^2WpcWRmf5{1n_1Ra00b2IK-g@$^@$-ozZ}_PXMeO~hSfBQF(EK>Q7dlyz zv@oX+;yuxy{94*u?JK!(e?OYd{nsaZC>vyEki^(vGn|<6c;xX zvjgj!KaC#+1MFgl!k03NWNmXZ3VBwgrrVhQ*oyyD0uabXMS(BK*$&44u5sOh$*>51MP&6P2ra(U`pOs7gZP_$yvsxTU)cWN?R?Ey8etoPgS3Vg zUv3gQ{EioMUl5rB>0{3Yb&KG_d5atEDGrT zpm}6HX|Wxz#*q%FcL$ksYG%vir!if(3n?#bdytW{%e&MP8SLMNy-%&$9+*u9u~^T1 zXF+!XrX(#g4-bF;skZ>{8v{_|=?uky-@_aK^)66qtoF5R|5^W=x)V*%?k;Bgm|y0Cq#>_vP?!dUtU)L*ZRO-Djdz4u3vYmo_x#%5P@uI1nW=?}q06 z4r9>Jy>MIwnSbij9-|O9Z_?i^$m$Ft*ttnQB$a$whO`i?&gCKcX_$51O7#v==0R?6 z76j8}1bi>WT*+7eZHt}BH6{Xuk42_eRAhJFk;)lNkYAbHL=l_mwejV*y8AN@xwK4f zxn@%Q_vjso&QG0Hkiuh^Tgn)fKA=Rey;6r}=SH+EfFbycE}el-e-lAD_RyWZIu^XC-F7Q9;5o zVruu?YTCF7DU*j&9t-bf2r*6~O$t>_Cyju`w*9hEuSalEeH9rXse4APbq;JaY$tK@ z0`>=N_R~(iOZy5#qgPWJ@)@<^%|4)QI^N&iAw+7Hua>}9Kp0bbQBhbE8kOhEAbw9w zRWGauU7I}N>)u5MwkXQQ^=wIvQ&vxr3ZxHnwhobucGSkGSb7E4sMpj zbJut96@|7Kfd54i&uCwusPvuuR1MZy*TwIe~p~p#F_W0^{>qN7mn0J@lWNnhp z)MJhgJb9{rJ&cc1a}b2?fX}BNo)|Bzp8Rz0ECSw4tP(Nww1~G+RYrQkvrY^ zS5QVLSM?y-EzKSIGz@vsoB(-_8i?)v7eRhRMqjkMIk{LgOJfu3_i7J^x7Vu386fkI z7odG06cW-~$re6u!b6+Q{;&J`t9X(y^=XHAtiFYuOtx9l$At)>9FMr|H#>_oFm&nQ z$>IP5<|*_1dom7dCyTS?`im0YX_L+ERcA62Km@opWQwAa+m2I&tuaxuuQPmJj%r{v zoA${_=CkN$L$PM$_?nRn#{8mOYFw8N|0&u0?KJZdScoJo80{q|Qr;pSP{%zwI%y!+ zq6(#nRJaPL3$%>Eh+)gIw$lwUH_J-&X_^l-k9O7f^TOsFO>TUW(Z?UQKgZUJccYX` z*G($VQHjb&>G94&1Qdj+<&NI7dwA&fS8#U(a`TiG*xqDd?XnuI+u~2DzZC}eg3b0V z*dK;-@_-D)7hAor1^LJMw;0%)i#=(`W@j6wlYVQOioa^~#kO=F-@`JoC3(Nr6xCJ} za4`o*{#np9!=Y`!RvX6~YlB+TB3=ba(82}ssy_f0p##v#ReQ;Q?B)G!FK=}O@og<< zvXG3*>&BUSps81_-fC7y_ul0@IYx>q7Y#=UhU24jTrhbbe#i5@A-Zi(imVh*%g8Wy zVv30=e#pJEjU)`QL7SaChvMN*`KOlqLj-pEj{N>@VC~U=&D4tkS&;qP)$VAlXm1ec z1aGX9d(>j4K8aDCZ8OHsxt_bOVhzJ&vp?)uATfmrS}2GTYr}$WHw7!{IpckO+>RZh zR#M87n2X?eKYSSZV!6WLl`D@kuvzdw2DkbCpqGgNCMV#w0A(<7$oUqe+I?dfbn4L- z(VjK>VWz|cjfIeQUK2x7_OuD#CM}n|)3CfRH$PXEq*q`j9@nqWuunvKgF<*f8*r~*$PRZ*Jb%n!-U8d*8}L%=jK(T{VMjbVu+$7 zKTYrKOjZCDS6G>Kh(6NmrX%!w(|dwc&rSDY^v~F(W$K#MV#QBB?hJWdZ5jJ4uD#jw zBfwq>Yf3V@gq_#(=CcGpfHL98TD8~zSAqN101UU-{4TgC{$FDcKy^&yz;6fF(6Hof zL2JFKn9IJhM6ej45P_l~7U`M2iOOjL7m-cbV*?bf^9%bYf@{}(JwPks&{6)c0~f3) zDfZyx`#7(;b*jG38sR=BtUG24SD-gh``)1bPi65&h5#TbUo&f$=KQ=KQD3{?BtqCl!jx)VX$<-Dw<#d*bV7PWcC>yC{HWWVW`a z@&s|~v6xmAxa#!;BZr5UuwzlsFzHKcG&w@7evdUd#>^4+;uUBA&bZb89Vq1Q1O3zE zlXw58u$gmp$s+?T{}f7`P988jFyGz#>6N8HYQ3G*#cvw^>pR}TNbHqQthBid`ra5c z{f}B^z7nzWXmzQ1Sg-wrT{8xKlP@V3S41wiq14X|YK~_x)CwP9U1&+x{J+C}07bFy zX#p)9|0!G09PM!<+h#_iG4-3B@<701#YR@*iM%l0Et*Uk?odr_Lyam8^E8Sn;nHf@ zdFY*$6n7}Ct#MY$J0~hpp5NCIMMs<81^@5w1IdqU&(6jf0I==plPYS_YBz9`WB+tgNq3-JEUk2;(11nH^1z$J%*Je zRX&nCI>-Bd(f1bMHlcen}J zdHSsDc?OZ`+CtQF_CFk$&QuOSoH$j#13*1(lZP83`)K|1Dyo1N8iu`#S`#R3p`nq) z4p2HXCG>5}WQ?AT%S)k;l%(Mf0m&7Ap^OGPCs?XgS<>+8(lq3r%RKK3kQNy&s}vL$Po$P!~OSt?1gWqD{Z zGANW~M$DkG$CG6k6_v6y*+wH{8A*x|Ci{|Yl<=T27~fmVb6rnAeE)$t*XKTSpYwUY z->-9S(y?={17t5J(>-J#{TW%rXdcj;zvwY-+T9%cmW-CQi1|Iv2X`uvwLiXP_AC7k z++H`sH9nI)OrO2%lcs~dGpVzZb849{ZBH{GSj@*f>z2ETN0U&YrW^=Xne$|#mlsjh z?CRuNPEKP+!!e!0gBEF|UWiSi*A?!NXw3jozH#+>1L8vAFPq_~h%JcZA5PU8aK%ro zKLl#4?z0Ks!*kBMHp=#ItC@?&V_oW5X-kD>2~ULunP1CZmFgbXJI=lEi3b|=jQ^5H z!h{F@i-qit5Ota%mZlB>8B^$u<`U?arUZX!9_)%_ik$J{lpFOau0E5skKT^(9i_5i zu?we`=KN38{!eNWPflqolJ&T1b@j%X6NeCq$VGXPQ%3_Kennz_H-vSwQXz=$S;S1)=NgGvt z9ur$2?XH1-b82Vpi}prMJq=AuSdqLz=Ej?iwdEMqn7jo(3$HLdBH0yR;hi7|7Vcu0 zF3|#DYGi1b`z`zz;JZ7D`vhZpIOivJ(yCA+YxfG<9xvoJ#P3U8g%FoqpLs#2fLNo= zYlV2rYUse?w8u^2Yv)MIR0)7+K3taD*kmVs+6Kdo5v0JBC|)Q=`1!UB)E9ayoT6SMs;ei%c{ zQF_o9z8BOGTXJ!VBO6x!v(Qa=+mkv%I!H2Bu5>l{Qlvw94SpB+;;EbZQ47s%@%PU;F{8s}i8zSi6RI7dX;DgdyWj7g>+H^!D=~})5o--a6 z>x4ge5v!M`AEmW)#aq!%OxeCDFxFe$&Hnxlq4XFGrx6GzT~>SpthZay?#iTnpX^ET z3?)fy0Ejb3_lYuHD%XW!sVUFr2!FO~7cX*Ur47}*-++bHG~!a`0u0m?@Wh$nlvQ)< z=M-z<>!=r=zreT7#s+?i3wjdGG6l z`%c}?cKT}zv;!8c9mL69VTdf9I}LI^a=n(-)A1xnFTBTwsB0dis6KgeD2^jd9R%XW z7zxP{+Qt(0R{8s$Q!EW{+?*UIlZLXeD65dftP0gp?M}cW@y&*x?wC(6_so3ZMB4&^ zQGJoOu1NS7_+hQBp68tFg{~(++7WAGlg(FpH^g7bwetA|D|35S1kaa4*)~hmA(_jC z_l@*0@?697Q41cvM?Bhv@;P|El_b{WVtUy!`e-%?_4ID8V}#|I{ac`=OVVEM^QrOP z6t_MK!z~sQdhSANeo?m)7o>&L$SO5MZYRHG(C}$c5zaFZSIx+M?#Dh}Ie%c|wTKG( zpS6*%PNf^WUdbM67%;#u07)^>ir5OPJmE>Q1BJNHLuzJv_2(+ANtvlxatD1B%H|_j z5prbe_u2qP)n1_#^z|bX2-+T99H~4&PI^fukzDOo7lZPvV_z%_96lzm71$ zO_1`<#>h({I;9#VRJK8OW4~5bKHzQ)YFcIQP4h3+NR%;^2@t-RSB?LV${?1Q0$t>< zL`8#5s5;Ma19Iwyyr|0|fI;Eq8}Sl&YwXE|u>x+W?sg^2hR*MAkUj$9yz}HJd+Kn> z8gZ7-(4PtiC@ap;%bdg-dy=|wGby^go?zT~ZE}B_&6}{_yUMo9yRscLZg+7%x>jb$ zMC!ziZscf6JNSJT?v=Kll$in~x)3&0($UvCK~CmeXz0CD77X};#V9xhL(jmrad!k9I%4o#_CpN4x!cco7a=5QdWgLl}7En4Q zod2VP`b~$ev$X$fj&$Lis!#azxtgx1A6E;PElRg(bm}PWcSdVV4eM94HOObR{mH%J zC5waM(c^dTcpDgVOVvG+V{3$3^Kh6taZ*Jkzl-wisU#USPBmaVbbd_JPhacSA0r8- zTfPMeABikjk+RTiB&wHq-uj0-aUc(K_kI$f&+&CTLv$i87z7N4FVV*njx0}!Fezhu z&@+t3q^hIIf_N^Z^-;I5+T*}Oqy7t`eqToZkzBMrNiQ5yNbkSh-V(qPYZv;Yc{_|2 zg>w6xWU;#GrvG(cd#K@s3$_qDfu1bDN@B#HRnmVZE`P!NQ|`BXU+5)*?4$R%Qx4~m z^g8WFAwl70!;?u5J!Sa{hT;`bVGe50=kC)4z)sjPNo@EdWShz07W39iPOe#=Ee|!> zWuhBiHs(hcD-P+}B%s1y3p8EL1W9^@E}19!#*AO#CfC5yR4oDY+ox7KzeTvjPtt3{ zEX7omc0dBexUqM{d0Wr}F5xyJ4M@WOK<(45k5jtOt9DF`QR|u;4#_z6r{*uN(KDC% zS1&dEb-0mnL*cb<^6en~mpG-*F3;sLlNex}W4j)Os~4x%v@r4T!1tS~pRX&tbfJk@ z<_KJx2?KaY_&B1CdFr|2PyFa#6dSE#l0B=Aw0vvo8V3{AnijR&h+CAo$%Gb!EUr4& zGY%>@UhPR2CD6A(VnxKik&YFvhVMevps_;5dwr7^#kzCGn^*MyUo|)5cc`DdcHt;D z^B?SL6z?kKqKPh>FwxltR1*X>+-;X{mAa`*10gWYJV_HKpHqVb4cnM7jIg*}{UP8* z8{RKbRdQ!26Hf6f+J38mKL`swk3z2uZL$XbsK)=RU15zQ_yKYsiz2b1E##a*Fu7`y zQ13H>r0#Aa zX#RDvET{eyNR~n85XcN_Nf93T9Og{;(2%t^d7z*1Gx`13LcaM$FAMjwraSM$JB*{~ zdLp)hOacc}3>RnMz@d>hu(5MUG;?(PDA^BPILP~fv*|KoygF*AUEKcK_ZDVc>{N>c ztg2mYoB9SA%<37SzCVC(BZ!~pPAi{};7?KXY=swSAzRaxc*O1n{imjg6Xofe)o8&$4BM)i=M*BAe{Eq&OR5 z02P5<%j@0F@u<{?mwrTRzwtCzK1I_(5J>HY;LLzwK`4UaWn;@9Sn%DRKSEG+w)*ft zAAMz}RX*M0X?vUQk>Sq66&@C6?>f}#plm76_*}PG^I#RYk}FSwpj@CNnh%^`i9WAD zA20R~iwC5(MecCrnCcEt{&Ej{snp?N_ zh=0to>&mbtY9nV0cE8W8EIKJ4s;#lBpIK}Z%!hNJIXwL^Aq*}$UCRd==gJ@C6N7Wd z$t|mReVImX-hHvKd$6Uq0r^FEXL*rs`y&P!simwXW7FX)?Kn+p#=i5ypHTO*u0(Hr F`XAPQ5&QrE diff --git a/docs/source/features/workspace_analyzer/workspace_analyzer.md b/docs/source/features/workspace_analyzer/workspace_analyzer.md index 133ee0ebe..85b987ebf 100644 --- a/docs/source/features/workspace_analyzer/workspace_analyzer.md +++ b/docs/source/features/workspace_analyzer/workspace_analyzer.md @@ -29,8 +29,7 @@ sim = SimulationManager(SimulationManagerCfg(headless=False, sim_device="cpu")) # Add robot robot = sim.add_robot(DexforceW1Cfg.from_dict({ "uid": "dexforce_w1", - "version": "v021", - "arm_kind": "industrial" + "version": "v021" })) # Quick analysis with defaults @@ -171,7 +170,7 @@ sim = SimulationManager(SimulationManagerCfg(headless=False, sim_device="cpu")) # Add robot robot = sim.add_robot(DexforceW1Cfg.from_dict({ - "uid": "dexforce_w1", "version": "v021", "arm_kind": "industrial" + "uid": "dexforce_w1", "version": "v021" })) # 1. Joint Space Analysis diff --git a/docs/source/guides/add_robot.rst b/docs/source/guides/add_robot.rst index 5a4d01386..f6557f60e 100644 --- a/docs/source/guides/add_robot.rst +++ b/docs/source/guides/add_robot.rst @@ -73,7 +73,7 @@ Key parameters | ``attrs`` | RigidBodyAttributesCfg | Rigid-body physics attributes | +---------------------+----------------------------------+----------------------------------+ | variant fields | enum / str / bool | Optional subclass fields | -| | | (e.g. ``version``, ``arm_kind``) | +| | | (e.g. ``version``) | +---------------------+----------------------------------+----------------------------------+ | ``_pk_urdf_path`` | property or method → str | URDF for the FK/IK serial chain | +---------------------+----------------------------------+----------------------------------+ diff --git a/docs/source/overview/sim/solvers/srs_solver.md b/docs/source/overview/sim/solvers/srs_solver.md index 0cd7350dc..8e2d73563 100644 --- a/docs/source/overview/sim/solvers/srs_solver.md +++ b/docs/source/overview/sim/solvers/srs_solver.md @@ -31,7 +31,6 @@ SRSSolver is configured via the `SRSSolverCfg` class, allowing detailed control from embodichain.data import get_data_path from embodichain.lab.sim.robots.dexforce_w1.types import ( DexforceW1ArmSide, - DexforceW1ArmKind, DexforceW1Version, ) from embodichain.lab.sim.robots.dexforce_w1.params import ( @@ -41,7 +40,6 @@ from embodichain.lab.sim.solvers.srs_solver import SRSSolver, SRSSolverCfg arm_params = W1ArmKineParams( arm_side=DexforceW1ArmSide.RIGHT, - arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, version=DexforceW1Version.V021, ) diff --git a/docs/source/resources/robot/dexforce_w1.md b/docs/source/resources/robot/dexforce_w1.md index 1688ec42c..a2c484032 100644 --- a/docs/source/resources/robot/dexforce_w1.md +++ b/docs/source/resources/robot/dexforce_w1.md @@ -1,22 +1,18 @@ # Dexforce W1 -Dexforce W1 is a versatile robot developed by DexForce Technology Co., Ltd., supporting both industrial and anthropomorphic arm types. It is suitable for various simulation and real-world application scenarios. +Dexforce W1 is a dual-arm humanoid robot developed by DexForce Technology Co., Ltd.

- Anthropomorphic Version -
Anthropomorphic Version
-
-
- Industrial Version -
Industrial Version
+ Dexforce W1 +
Dexforce W1
## Key Features -- Supports multiple arm types (industrial, anthropomorphic) +- Supports dual 7-DOF arms - Supports version-owned asset layouts and calibration parameters - Configurable left/right hand brand and version - Flexible URDF assembly and simulation configuration @@ -24,11 +20,10 @@ Dexforce W1 is a versatile robot developed by DexForce Technology Co., Ltd., sup ## Method 1: Fine-grained configuration with `build_dexforce_w1_cfg` -This method allows you to specify detailed parameters for each arm and hand. Recommended for advanced users who need full control over robot hardware options. +This method allows you to specify detailed parameters for each arm and hand. **Parameters:** -- `arm_kind`: Arm type, e.g., `DexforceW1ArmKind.ANTHROPOMORPHIC` or `DexforceW1ArmKind.INDUSTRIAL`. - `hand_types`: Dict specifying hand brand for each arm side (`LEFT`/`RIGHT`). - `hand_versions`: Dict specifying hand version for each arm side. @@ -42,7 +37,6 @@ hand_versions = { DexforceW1ArmSide.RIGHT: DexforceW1Version.V025, } cfg = build_dexforce_w1_cfg( - arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, version=DexforceW1Version.V025, hand_types=hand_types, hand_versions=hand_versions, @@ -59,13 +53,10 @@ This method allows fast setup using a dictionary, suitable for simple scenarios - `uid`: Unique robot identifier (string). - `version`: Robot version, e.g., `v021` or `v025`. -- `arm_kind`: Arm type, e.g., `anthropomorphic` or `industrial` (string). ```python from embodichain.lab.sim.robots import DexforceW1Cfg -cfg = DexforceW1Cfg.from_dict( - {"uid": "dexforce_w1", "version": "v025", "arm_kind": "anthropomorphic"} -) +cfg = DexforceW1Cfg.from_dict({"uid": "dexforce_w1", "version": "v025"}) robot = sim.add_robot(cfg=cfg) print("DexforceW1 robot added to the simulation.") ``` @@ -100,7 +91,6 @@ Choose `build_dexforce_w1_cfg` for maximum flexibility and hardware customizatio | Type | Options / Values | Description | |-------------------------|-------------------------------------------------------|------------------------------------| -| `DexforceW1ArmKind` | `ANTHROPOMORPHIC`, `INDUSTRIAL` | Arm type | | `DexforceW1HandBrand` | `BRAINCO_HAND`, `DH_PGC_GRIPPER`, `DH_PGC_GRIPPER_M` | Hand brand | | `DexforceW1Version` | `V021`, `V025` | Release version | | `DexforceW1ArmSide` | `LEFT`, `RIGHT` | Left/right hand identifier | @@ -127,10 +117,6 @@ arm URDFs, while configurable robot assembly reads all components from the same extracted directory. The V025 head already contains the `eyes` link and joint, so the assembly builder does not inject a duplicate eyes sensor. -V025 currently provides anthropomorphic arm assets only. Selecting -`version="v025"` with `arm_kind="industrial"` fails with a clear configuration -error instead of silently loading V021 arms. - Per-component version overrides are supported for controlled migrations: ```python @@ -138,7 +124,6 @@ cfg = DexforceW1Cfg.from_dict( { "uid": "dexforce_w1", "version": "v021", - "arm_kind": "anthropomorphic", "component_versions": { "left_arm": "v025", "right_arm": "v025", diff --git a/docs/source/tutorial/modular_env.rst b/docs/source/tutorial/modular_env.rst index af4d14992..f79ee6d36 100644 --- a/docs/source/tutorial/modular_env.rst +++ b/docs/source/tutorial/modular_env.rst @@ -105,7 +105,6 @@ The main environment configuration inherits from :class:`envs.EmbodiedEnvCfg` an Uses the pre-configured :class:`DexforceW1Cfg` with customizations: - **Version**: Specific robot variant (v021) -- **Arm Type**: Anthropomorphic configuration - **Position**: Initial placement in the scene **Sensor Configuration** @@ -241,4 +240,4 @@ This tutorial demonstrates the full power of EmbodiChain's modular environment s **Using an AI coding agent?** These skills can help you build on this tutorial: - **/add-task-env** — Scaffold a new task environment with the correct file structure, ``@register_env`` decorator, base class methods, ``__init__.py`` update, and test stub. - - **/add-functor** — Add observation, reward, event, or randomization functors with the correct signature and module placement. \ No newline at end of file + - **/add-functor** — Add observation, reward, event, or randomization functors with the correct signature and module placement. diff --git a/embodichain/data/assets/w1_assets.py b/embodichain/data/assets/w1_assets.py index f7deba80f..34c2b2225 100644 --- a/embodichain/data/assets/w1_assets.py +++ b/embodichain/data/assets/w1_assets.py @@ -28,10 +28,9 @@ # # Main Asset: # - DexforceW1V021: -# Represents the complete humanoid robot asset, -# including both industrial arms and anthropomorphic arms. +# Represents the complete humanoid robot asset. # - DexforceW1V025: -# Unified V025 archive containing the anthropomorphic full robot and +# Unified V025 archive containing the full robot and # all component URDFs used by runtime assembly. # # Component Assets: @@ -41,10 +40,8 @@ # - DexforceW1HeadV021: Head component # # Arm Assets: -# - DexforceW1LeftArm1V021 / DexforceW1RightArm1V021: -# Anthropomorphic (human-like) arms, left and right. -# - DexforceW1LeftArm2V021 / DexforceW1RightArm2V021: -# Industrial arms, left and right. +# - DexforceW1LeftArmV021 / DexforceW1RightArmV021: +# Left and right arms. # # All classes inherit from EmbodiChainDataset and are responsible for # downloading and managing the data resources for their respective components. @@ -63,7 +60,6 @@ class DexforceW1V021(EmbodiChainDataset): Example usage: >>> from embodichain.data import get_data_path >>> print(get_data_path("DexforceW1V021/DexforceW1_v02_1.urdf")) - >>> print(get_data_path("DexforceW1V021/DexforceW1_v02_2.urdf")) """ def __init__(self, data_root: str = None): @@ -110,58 +106,6 @@ def __init__(self, data_root: str = None): super().__init__(prefix, data_descriptor, path) -class DexforceW1V021_INDUSTRIAL_DH_PGC_GRIPPER_M(EmbodiChainDataset): - """Dataset class for the industrial Dexforce W1 V021 with DH_PGC_gripper. - - Directory structure: - DexforceW1V021_INDUSTRIAL_DH_PGC_GRIPPER_M/DexforceW1V021.urdf - - Example usage: - >>> from embodichain.data import get_data_path - >>> print(get_data_path("DexforceW1V021_INDUSTRIAL_DH_PGC_GRIPPER_M/DexforceW1V021.urdf")) - """ - - def __init__(self, data_root: str = None): - data_descriptor = o3d.data.DataDescriptor( - os.path.join( - EMBODICHAIN_DOWNLOAD_PREFIX, - w1_assets, - "DexforceW1V021_INDUSTRIAL_DH_PGC_GRIPPER_M.zip", - ), - "06ec5dfa76dc69160d7ff9bc537a6a7b", - ) - prefix = type(self).__name__ - path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root - - super().__init__(prefix, data_descriptor, path) - - -class DexforceW1V021_ANTHROPOMORPHIC_BRAINCO_HAND_REVO1(EmbodiChainDataset): - """Dataset class for the anthropomorphic Dexforce W1 V021 with BrainCo_hand_revo_1. - - Directory structure: - DexforceW1V021_ANTHROPOMORPHIC_BRAINCO_HAND_REVO1/DexforceW1V021.urdf - - Example usage: - >>> from embodichain.data import get_data_path - >>> print(get_data_path("DexforceW1V021_ANTHROPOMORPHIC_BRAINCO_HAND_REVO1/DexforceW1V021.urdf")) - """ - - def __init__(self, data_root: str = None): - data_descriptor = o3d.data.DataDescriptor( - os.path.join( - EMBODICHAIN_DOWNLOAD_PREFIX, - w1_assets, - "DexforceW1V021_ANTHROPOMORPHIC_BRAINCO_HAND_REVO1.zip", - ), - "ef19d247799e79233863b558c47b32cd", - ) - prefix = type(self).__name__ - path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root - - super().__init__(prefix, data_descriptor, path) - - class DexforceW1ChassisV021(EmbodiChainDataset): def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( @@ -210,7 +154,7 @@ def __init__(self, data_root: str = None): super().__init__(prefix, data_descriptor, path) -class DexforceW1LeftArm1V021(EmbodiChainDataset): +class DexforceW1LeftArmV021(EmbodiChainDataset): def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join( @@ -224,7 +168,7 @@ def __init__(self, data_root: str = None): super().__init__(prefix, data_descriptor, path) -class DexforceW1RightArm1V021(EmbodiChainDataset): +class DexforceW1RightArmV021(EmbodiChainDataset): def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join( @@ -236,31 +180,3 @@ def __init__(self, data_root: str = None): path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path) - - -class DexforceW1LeftArm2V021(EmbodiChainDataset): - def __init__(self, data_root: str = None): - data_descriptor = o3d.data.DataDescriptor( - os.path.join( - EMBODICHAIN_DOWNLOAD_PREFIX, w1_assets, "W1_LeftArm_2_v021.zip" - ), - "b99bd0587cc9a36fed3cdaa4f9fd62e7", - ) - prefix = type(self).__name__ - path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root - - super().__init__(prefix, data_descriptor, path) - - -class DexforceW1RightArm2V021(EmbodiChainDataset): - def __init__(self, data_root: str = None): - data_descriptor = o3d.data.DataDescriptor( - os.path.join( - EMBODICHAIN_DOWNLOAD_PREFIX, w1_assets, "W1_RightArm_2_v021.zip" - ), - "d9f25b2d5244ca5a859040327273a99e", - ) - prefix = type(self).__name__ - path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root - - super().__init__(prefix, data_descriptor, path) diff --git a/embodichain/lab/sim/robots/dexforce_w1/cfg.py b/embodichain/lab/sim/robots/dexforce_w1/cfg.py index ae5f14e40..756ccd283 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/cfg.py +++ b/embodichain/lab/sim/robots/dexforce_w1/cfg.py @@ -24,7 +24,6 @@ from embodichain.lab.sim.robots.dexforce_w1.types import ( DexforceW1HandBrand, DexforceW1ArmSide, - DexforceW1ArmKind, DexforceW1Version, DexforceW1Type, ) @@ -52,7 +51,6 @@ class DexforceW1Cfg(RobotCfg): """DexforceW1 specific configuration, inherits from RobotCfg and allows custom parameters.""" version: DexforceW1Version = DexforceW1Version.V021 - arm_kind: DexforceW1ArmKind = DexforceW1ArmKind.ANTHROPOMORPHIC with_default_eef: bool = True component_versions: dict | None = None @@ -69,6 +67,11 @@ def from_dict( A DexforceW1Cfg instance. Defaults are built via :meth:`_build_defaults`, then ``init_dict`` overrides are merged. """ + unknown_fields = set(init_dict) - set(cls.__dataclass_fields__) + if unknown_fields: + unknown = ", ".join(sorted(unknown_fields)) + raise ValueError(f"Unknown DexforceW1 configuration fields: {unknown}") + cfg = cls() cfg._build_defaults(init_dict) return merge_robot_cfg(cfg, init_dict) @@ -76,43 +79,32 @@ def from_dict( def _build_defaults(self, init_dict: dict | None = None) -> None: """Build default urdf/control/solver/physics from variant fields. - Reads ``version``/``arm_kind``/``with_default_eef`` from ``init_dict``, + Reads ``version``/``with_default_eef`` from ``init_dict``, sets them on ``self``, then populates ``urdf_cfg``, ``control_parts``, ``solver_cfg``, ``drive_pros`` and ``attrs``. """ init_dict = init_dict or {} version = init_dict.get("version", DexforceW1Version.V021) - arm_kind = init_dict.get("arm_kind", DexforceW1ArmKind.ANTHROPOMORPHIC) with_default_eef = init_dict.get("with_default_eef", True) self.version = ( DexforceW1Version(version) if isinstance(version, str) else version ) - self.arm_kind = ( - DexforceW1ArmKind(arm_kind) if isinstance(arm_kind, str) else arm_kind - ) self.with_default_eef = with_default_eef self.component_versions = normalize_component_versions( init_dict.get("component_versions") ) # Build the version-matched URDF assembly and control-part definitions. - if self.arm_kind == DexforceW1ArmKind.INDUSTRIAL: - hand_types = { - DexforceW1ArmSide.LEFT: DexforceW1HandBrand.DH_PGC_GRIPPER_M, - DexforceW1ArmSide.RIGHT: DexforceW1HandBrand.DH_PGC_GRIPPER_M, - } - else: - hand_types = { - DexforceW1ArmSide.LEFT: DexforceW1HandBrand.BRAINCO_HAND, - DexforceW1ArmSide.RIGHT: DexforceW1HandBrand.BRAINCO_HAND, - } + hand_types = { + DexforceW1ArmSide.LEFT: DexforceW1HandBrand.BRAINCO_HAND, + DexforceW1ArmSide.RIGHT: DexforceW1HandBrand.BRAINCO_HAND, + } hand_versions = { DexforceW1ArmSide.LEFT: self.version, DexforceW1ArmSide.RIGHT: self.version, } base_cfg = build_dexforce_w1_cfg( - arm_kind=self.arm_kind, version=self.version, hand_types=hand_types, hand_versions=hand_versions, @@ -124,60 +116,37 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: self.control_parts = base_cfg.control_parts # physics - physics = self._build_default_physics_cfgs( - arm_kind=self.arm_kind, with_default_eef=with_default_eef - ) + physics = self._build_default_physics_cfgs(with_default_eef=with_default_eef) for key, value in physics.items(): setattr(self, key, value) # solver (set exactly once -- was previously double-set) - self.solver_cfg = self._build_default_solver_cfg(arm_kind=self.arm_kind) + self.solver_cfg = self._build_default_solver_cfg() - def _build_default_solver_cfg(self, arm_kind: DexforceW1ArmKind): + def _build_default_solver_cfg(self): """Build the version-matched default SRS solver configuration.""" from embodichain.lab.sim.solvers import SRSSolverCfg from embodichain.lab.sim.robots.dexforce_w1.params import ( W1ArmKineParams, ) - if arm_kind == DexforceW1ArmKind.INDUSTRIAL: - left_arm_type = DexforceW1Type.LEFT_ARM2 - right_arm_type = DexforceW1Type.RIGHT_ARM2 - else: - left_arm_type = DexforceW1Type.LEFT_ARM1 - right_arm_type = DexforceW1Type.RIGHT_ARM1 - left_version = self.component_versions.get(left_arm_type, self.version) - right_version = self.component_versions.get(right_arm_type, self.version) + left_arm_component = DexforceW1Type.LEFT_ARM + right_arm_component = DexforceW1Type.RIGHT_ARM + left_version = self.component_versions.get(left_arm_component, self.version) + right_version = self.component_versions.get(right_arm_component, self.version) left_version_spec = get_w1_version_spec(left_version) right_version_spec = get_w1_version_spec(right_version) - left_version_spec.validate_arm_kind(arm_kind) - right_version_spec.validate_arm_kind(arm_kind) - - if arm_kind == DexforceW1ArmKind.INDUSTRIAL: - w1_left_arm_params = W1ArmKineParams( - arm_side=DexforceW1ArmSide.LEFT, - arm_kind=DexforceW1ArmKind.INDUSTRIAL, - version=left_version, - ) - w1_right_arm_params = W1ArmKineParams( - arm_side=DexforceW1ArmSide.RIGHT, - arm_kind=DexforceW1ArmKind.INDUSTRIAL, - version=right_version, - ) - else: - w1_left_arm_params = W1ArmKineParams( - arm_side=DexforceW1ArmSide.LEFT, - arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, - version=left_version, - ) - w1_right_arm_params = W1ArmKineParams( - arm_side=DexforceW1ArmSide.RIGHT, - arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, - version=right_version, - ) + w1_left_arm_params = W1ArmKineParams( + arm_side=DexforceW1ArmSide.LEFT, + version=left_version, + ) + w1_right_arm_params = W1ArmKineParams( + arm_side=DexforceW1ArmSide.RIGHT, + version=right_version, + ) - left_arm_tcp = left_version_spec.tcp(arm_kind, DexforceW1ArmSide.LEFT) - right_arm_tcp = right_version_spec.tcp(arm_kind, DexforceW1ArmSide.RIGHT) + left_arm_tcp = left_version_spec.tcp(DexforceW1ArmSide.LEFT) + right_arm_tcp = right_version_spec.tcp(DexforceW1ArmSide.RIGHT) return { "right_arm": SRSSolverCfg( @@ -205,12 +174,11 @@ def _build_default_solver_cfg(self, arm_kind: DexforceW1ArmKind): } def _build_default_physics_cfgs( - self, arm_kind: DexforceW1ArmKind, with_default_eef: bool = True + self, with_default_eef: bool = True ) -> typing.Dict[str, typing.Any]: """Build default physics configurations for DexforceW1. Args: - arm_kind: The arm kind enum. with_default_eef: Whether to include default end-effector configurations Returns: @@ -225,7 +193,6 @@ def _build_default_physics_cfgs( DEFAULT_EEF_HAND_JOINT_NAMES = ( "(LEFT|RIGHT)_HAND_(THUMB[12]|INDEX|MIDDLE|RING|PINKY)" ) - DEFAULT_EEF_GRIPPER_JOINT_NAMES = "(LEFT|RIGHT)_FINGER[1-2]" ARM_JOINTS = "(RIGHT|LEFT)_J[0-9]" BODY_JOINTS = "(ANKLE|KNEE|BUTTOCK|WAIST)" HEAD_JOINTS = "(NECK1|NECK2)" @@ -242,11 +209,7 @@ def _build_default_physics_cfgs( drive_pros = JointDrivePropertiesCfg(**joint_params) if with_default_eef: - eef_joint_names = ( - DEFAULT_EEF_HAND_JOINT_NAMES - if arm_kind == DexforceW1ArmKind.ANTHROPOMORPHIC - else DEFAULT_EEF_GRIPPER_JOINT_NAMES - ) + eef_joint_names = DEFAULT_EEF_HAND_JOINT_NAMES drive_pros.stiffness.update( {eef_joint_names: DEFAULT_EEF_JOINT_DRIVE_PARAMS["stiffness"]} ) @@ -279,24 +242,13 @@ def _pk_urdf_path(self, arm_side: DexforceW1ArmSide) -> str: """ from embodichain.lab.sim.robots.dexforce_w1.utils import arm_manager - if self.arm_kind == DexforceW1ArmKind.INDUSTRIAL: - component_type = ( - DexforceW1Type.LEFT_ARM2 - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM2 - ) - else: - component_type = ( - DexforceW1Type.LEFT_ARM1 - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM1 - ) - version = (self.component_versions or {}).get(component_type, self.version) - return arm_manager.get_urdf( - kind=self.arm_kind, - side=arm_side, - version=version, + component_type = ( + DexforceW1Type.LEFT_ARM + if arm_side == DexforceW1ArmSide.LEFT + else DexforceW1Type.RIGHT_ARM ) + version = (self.component_versions or {}).get(component_type, self.version) + return arm_manager.get_urdf(side=arm_side, version=version) def build_pk_serial_chain( self, device: torch.device = torch.device("cpu"), **kwargs @@ -330,16 +282,11 @@ def build_pk_serial_chain( np.set_printoptions(precision=5, suppress=True) from embodichain.lab.sim import SimulationManager, SimulationManagerCfg - from embodichain.lab.sim.robots.dexforce_w1.types import ( - DexforceW1ArmKind, - ) config = SimulationManagerCfg(headless=True, sim_device="cpu", num_envs=4) sim = SimulationManager(config) - cfg = DexforceW1Cfg.from_dict( - {"uid": "dexforce_w1", "version": "v021", "arm_kind": "anthropomorphic"} - ) + cfg = DexforceW1Cfg.from_dict({"uid": "dexforce_w1", "version": "v021"}) robot = sim.add_robot(cfg=cfg) sim.update(step=1) diff --git a/embodichain/lab/sim/robots/dexforce_w1/params.py b/embodichain/lab/sim/robots/dexforce_w1/params.py index f3e8a852a..d61f366e1 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/params.py +++ b/embodichain/lab/sim/robots/dexforce_w1/params.py @@ -19,9 +19,7 @@ from dataclasses import dataclass, field from embodichain.lab.sim.robots.dexforce_w1.types import ( - DexforceW1HandBrand, DexforceW1ArmSide, - DexforceW1ArmKind, DexforceW1Version, ) from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec @@ -29,15 +27,13 @@ @dataclass class W1ArmKineParams: - """Kinematics parameters for W1 arm variants. + """Kinematics parameters for a W1 arm. - - arm_kind and W1Version enum types expected to be defined elsewhere. - dh_params stored as numpy array of shape (7,4). - qpos_limits stored as numpy array of shape (7,2) in radians. """ arm_side: "DexforceW1ArmSide" - arm_kind: "DexforceW1ArmKind" version: "DexforceW1Version" = field(default_factory=lambda: DexforceW1Version.V021) # (initialized in __post_init__) @@ -56,8 +52,7 @@ class W1ArmKineParams: def __post_init__(self): spec = get_w1_version_spec(self.version) - spec.validate_arm_kind(self.arm_kind) - self.d_list = np.asarray(spec.arm_d_lists[self.arm_kind], dtype=float) + self.d_list = np.asarray(spec.arm_d_list, dtype=float) self.link_lengths = np.array( [ self.d_list[0] + self.d_list[1], @@ -78,104 +73,52 @@ def deg2rad_list(list_of_pairs): [ [1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], - [0.0, 0.0, 1.0, spec.arm_base_z[self.arm_kind]], + [0.0, 0.0, 1.0, spec.arm_base_z], [0.0, 0.0, 0.0, 1.0], ] ) - # Build parameters per arm_kind and side, minimizing duplication - if self.arm_kind == DexforceW1ArmKind.INDUSTRIAL: - # default tcp for industrial - T_e_oe = np.array( - [ - [-1.0, 0.0, 0.0, 0.0], - [0.0, -1.0, 0.0, 0.0], - [0.0, 0.0, 1.0, 0.066], - [0.0, 0.0, 0.0, 1.0], - ] - ) - - # fmt: off - dh = [ - dh_row(self.link_lengths[0], -np.pi / 2, 0.0, 0.0), - dh_row(0.0, np.pi / 2, 0.0, 0.0), - dh_row(self.link_lengths[1], np.pi / 2, 0.0, np.pi / 2), - dh_row(0.0, -np.pi / 2, 0.0, 0.0), - dh_row(self.link_lengths[2], -np.pi / 2, 0.0, 0.0), - dh_row(0.0, np.pi / 2, 0.0, 0.0), - dh_row(self.link_lengths[3], 0.0, 0.0, 0.0), + T_e_oe = np.array( + [ + [0.0, 0.0, -1.0, -0.066], + [0.0, 1.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1.0], ] - - # fmt: on - if self.arm_side == DexforceW1ArmSide.LEFT: - limits = [ - [-170.0, 170.0], - [-120.0, 90.0], - [-170.0, 170.0], - [-135.0, 90.0], - [-170.0, 170.0], - [-90.0, 90.0], - [-170.0, 170.0], - ] - rotation_directions = np.array([1, 1, 1, 1, 1, -1, 1]) - else: - limits = [ - [-170.0, 170.0], - [-90.0, 120.0], - [-170.0, 170.0], - [-90.0, 135.0], - [-170.0, 170.0], - [-90.0, 90.0], - [-170.0, 170.0], - ] - rotation_directions = np.array([1, 1, 1, -1, 1, 1, 1]) - - self.T_e_oe = T_e_oe - - elif self.arm_kind == DexforceW1ArmKind.ANTHROPOMORPHIC: - T_e_oe = np.array( - [ - [0.0, 0.0, -1.0, -0.066], - [0.0, 1.0, 0.0, 0.0], - [1.0, 0.0, 0.0, 0.0], - [0.0, 0.0, 0.0, 1.0], - ] - ) - # fmt: off - dh = [ - dh_row(self.link_lengths[0], -np.pi / 2, 0.0, 0.0), - dh_row(0.0, np.pi / 2, 0.0, 0.0), - dh_row(self.link_lengths[1], np.pi / 2, 0.0, np.pi / 2), - dh_row(0.0, -np.pi / 2, 0.0, 0.0), - dh_row(self.link_lengths[2], -np.pi / 2, 0.0, 0.0), - dh_row(0.0, np.pi / 2, 0.0, np.pi / 2), - dh_row(self.link_lengths[3], 0.0, 0.0, 0.0), + ) + # fmt: off + dh = [ + dh_row(self.link_lengths[0], -np.pi / 2, 0.0, 0.0), + dh_row(0.0, np.pi / 2, 0.0, 0.0), + dh_row(self.link_lengths[1], np.pi / 2, 0.0, np.pi / 2), + dh_row(0.0, -np.pi / 2, 0.0, 0.0), + dh_row(self.link_lengths[2], -np.pi / 2, 0.0, 0.0), + dh_row(0.0, np.pi / 2, 0.0, np.pi / 2), + dh_row(self.link_lengths[3], 0.0, 0.0, 0.0), + ] + # fmt: on + + if self.arm_side == DexforceW1ArmSide.LEFT: + limits = [ + [-170.0, 170.0], + [-120.0, 90.0], + [-170.0, 170.0], + [-135.0, 90.0], + [-170.0, 170.0], + [-45.0, 45.0], + [-90.0, 60.0], ] - # fmt: on - - if self.arm_side == DexforceW1ArmSide.LEFT: - limits = [ - [-170.0, 170.0], - [-120.0, 90.0], - [-170.0, 170.0], - [-135.0, 90.0], - [-170.0, 170.0], - [-45.0, 45.0], - [-90.0, 60.0], - ] - rotation_directions = np.array([1, 1, 1, 1, 1, -1, 1]) - else: - limits = [ - [-170.0, 170.0], - [-90.0, 120.0], - [-170.0, 170.0], - [-90.0, 135.0], - [-170.0, 170.0], - [-45.0, 45.0], - [-60.0, 90.0], - ] - rotation_directions = np.array([1, 1, 1, -1, 1, 1, 1]) + rotation_directions = np.array([1, 1, 1, 1, 1, -1, 1]) else: - raise ValueError(f"Unsupported arm_kind: {self.arm_kind}") + limits = [ + [-170.0, 170.0], + [-90.0, 120.0], + [-170.0, 170.0], + [-90.0, 135.0], + [-170.0, 170.0], + [-45.0, 45.0], + [-60.0, 90.0], + ] + rotation_directions = np.array([1, 1, 1, -1, 1, 1, 1]) self.T_b_ob = T_b_ob self.T_e_oe = T_e_oe @@ -192,7 +135,6 @@ def deg2rad_list(list_of_pairs): def as_dict(self) -> dict: return { "arm_side": self.arm_side.name, - "arm_kind": self.arm_kind.name, "version": self.version.name, "link_lengths": self.link_lengths.tolist(), "T_b_ob": self.T_b_ob.tolist(), @@ -210,17 +152,12 @@ def from_dict(cls, data: dict) -> "W1ArmKineParams": else data.get("arm_side") ) - arm_kind = ( - DexforceW1ArmKind[data["arm_kind"]] - if isinstance(data.get("arm_kind"), str) - else data.get("arm_kind") - ) version = ( DexforceW1Version[data["version"]] if isinstance(data.get("version"), str) else data.get("version", DexforceW1Version.V021) ) - inst = cls(arm_side=arm_side, arm_kind=arm_kind, version=version) + inst = cls(arm_side=arm_side, version=version) # allow overriding computed arrays if provided if "dh_params" in data: diff --git a/embodichain/lab/sim/robots/dexforce_w1/specs.py b/embodichain/lab/sim/robots/dexforce_w1/specs.py index 885332db9..ee12b757d 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/specs.py +++ b/embodichain/lab/sim/robots/dexforce_w1/specs.py @@ -20,7 +20,6 @@ from scipy.spatial.transform import Rotation as R from .types import ( - DexforceW1ArmKind, DexforceW1ArmSide, DexforceW1HandBrand, DexforceW1Type, @@ -34,35 +33,21 @@ ] -_INDUSTRIAL_TCP = ( - (1.0, 0.0, 0.0, 0.0), - (0.0, 1.0, 0.0, 0.0), - (0.0, 0.0, 1.0, 0.15), - (0.0, 0.0, 0.0, 1.0), -) -_LEFT_ANTHROPOMORPHIC_TCP = ( +_LEFT_TCP = ( (-1.0, 0.0, 0.0, 0.012), (0.0, 0.0, 1.0, 0.0675), (0.0, 1.0, 0.0, 0.127), (0.0, 0.0, 0.0, 1.0), ) -_RIGHT_ANTHROPOMORPHIC_TCP = ( +_RIGHT_TCP = ( (1.0, 0.0, 0.0, 0.012), (0.0, 0.0, -1.0, -0.0675), (0.0, 1.0, 0.0, 0.127), (0.0, 0.0, 0.0, 1.0), ) _DEFAULT_TCP = { - (DexforceW1ArmKind.INDUSTRIAL, DexforceW1ArmSide.LEFT): _INDUSTRIAL_TCP, - (DexforceW1ArmKind.INDUSTRIAL, DexforceW1ArmSide.RIGHT): _INDUSTRIAL_TCP, - ( - DexforceW1ArmKind.ANTHROPOMORPHIC, - DexforceW1ArmSide.LEFT, - ): _LEFT_ANTHROPOMORPHIC_TCP, - ( - DexforceW1ArmKind.ANTHROPOMORPHIC, - DexforceW1ArmSide.RIGHT, - ): _RIGHT_ANTHROPOMORPHIC_TCP, + DexforceW1ArmSide.LEFT: _LEFT_TCP, + DexforceW1ArmSide.RIGHT: _RIGHT_TCP, } @@ -71,12 +56,11 @@ class W1VersionSpec: """Asset layout and calibrated defaults belonging to one W1 revision.""" version: DexforceW1Version - supported_arm_kinds: frozenset[DexforceW1ArmKind] component_urdfs: dict[DexforceW1Type, str] - full_robot_urdfs: dict[DexforceW1ArmKind, str] - arm_d_lists: dict[DexforceW1ArmKind, tuple[float, ...]] - arm_base_z: dict[DexforceW1ArmKind, float] - solver_tcp: dict[tuple[DexforceW1ArmKind, DexforceW1ArmSide], tuple] + full_robot_urdf_path: str + arm_d_list: tuple[float, ...] + arm_base_z: float + solver_tcp: dict[DexforceW1ArmSide, tuple] eyes_attach_xpos: tuple[tuple[float, ...], ...] wrist_camera_rpy: tuple[float, float, float] wrist_camera_xyz: tuple[float, float, float] @@ -87,14 +71,6 @@ class W1VersionSpec: def assembly_name(self) -> str: return f"DexforceW1V{self.version.value.removeprefix('v')}" - def validate_arm_kind(self, arm_kind: DexforceW1ArmKind) -> None: - if arm_kind not in self.supported_arm_kinds: - supported = ", ".join(kind.value for kind in self.supported_arm_kinds) - raise ValueError( - f"W1 {self.version.value} does not provide a " - f"{arm_kind.value} arm asset. Supported arm kinds: {supported}." - ) - def component_urdf(self, component_type: DexforceW1Type) -> str: try: urdf_path = self.component_urdfs[component_type] @@ -105,9 +81,8 @@ def component_urdf(self, component_type: DexforceW1Type) -> str: ) from exc return self._resolve_local_urdf(urdf_path) - def full_robot_urdf(self, arm_kind: DexforceW1ArmKind) -> str: - self.validate_arm_kind(arm_kind) - return self._resolve_local_urdf(self.full_robot_urdfs[arm_kind]) + def full_robot_urdf(self) -> str: + return self._resolve_local_urdf(self.full_robot_urdf_path) def _resolve_local_urdf(self, registered_path: str) -> str: """Resolve a version-specific local asset override when configured.""" @@ -133,32 +108,20 @@ def _resolve_local_urdf(self, registered_path: str) -> str: f"'{registered_path}' was not found. Expected {expected}." ) - def tcp( - self, arm_kind: DexforceW1ArmKind, arm_side: DexforceW1ArmSide - ) -> np.ndarray: - self.validate_arm_kind(arm_kind) - return np.asarray(self.solver_tcp[(arm_kind, arm_side)], dtype=float).copy() + def tcp(self, arm_side: DexforceW1ArmSide) -> np.ndarray: + return np.asarray(self.solver_tcp[arm_side], dtype=float).copy() def hand_attach_xpos( self, brand: DexforceW1HandBrand, - arm_kind: DexforceW1ArmKind, arm_side: DexforceW1ArmSide, ) -> np.ndarray: """Return the default transform from the arm flange to an external EEF.""" - self.validate_arm_kind(arm_kind) is_left = arm_side == DexforceW1ArmSide.LEFT result = np.eye(4) if brand == DexforceW1HandBrand.BRAINCO_HAND: - rotations = { - (DexforceW1ArmKind.INDUSTRIAL, True): [90, 0, 0], - (DexforceW1ArmKind.INDUSTRIAL, False): [90, 0, 180], - (DexforceW1ArmKind.ANTHROPOMORPHIC, True): [90, 0, 180], - (DexforceW1ArmKind.ANTHROPOMORPHIC, False): [90, 0, 0], - } - result[:3, :3] = R.from_euler( - "xyz", rotations[(arm_kind, is_left)], degrees=True - ).as_matrix() + rotation = [90, 0, 180] if is_left else [90, 0, 0] + result[:3, :3] = R.from_euler("xyz", rotation, degrees=True).as_matrix() elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER: result[2, 3] = 0.015 result[:3, :3] = R.from_rotvec([0, 0, 90], degrees=True).as_matrix() @@ -187,17 +150,15 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: DexforceW1Type.TORSO: "DexforceW1TorsoV021/torso.urdf", DexforceW1Type.EYES: "DexforceW1EyesV021/eyes.urdf", DexforceW1Type.HEAD: "DexforceW1HeadV021/head.urdf", - DexforceW1Type.LEFT_ARM1: "DexforceW1LeftArm1V021/left_arm.urdf", - DexforceW1Type.RIGHT_ARM1: "DexforceW1RightArm1V021/right_arm.urdf", - DexforceW1Type.LEFT_ARM2: "DexforceW1LeftArm2V021/left_arm.urdf", - DexforceW1Type.RIGHT_ARM2: "DexforceW1RightArm2V021/right_arm.urdf", + DexforceW1Type.LEFT_ARM: "DexforceW1LeftArmV021/left_arm.urdf", + DexforceW1Type.RIGHT_ARM: "DexforceW1RightArmV021/right_arm.urdf", } _V025_COMPONENT_URDFS = { DexforceW1Type.CHASSIS: "DexforceW1V025/w1/chassis.urdf", DexforceW1Type.TORSO: "DexforceW1V025/w1/torso.urdf", DexforceW1Type.HEAD: "DexforceW1V025/w1/head.urdf", - DexforceW1Type.LEFT_ARM1: "DexforceW1V025/w1/left_arm.urdf", - DexforceW1Type.RIGHT_ARM1: "DexforceW1V025/w1/right_arm.urdf", + DexforceW1Type.LEFT_ARM: "DexforceW1V025/w1/left_arm.urdf", + DexforceW1Type.RIGHT_ARM: "DexforceW1V025/w1/right_arm.urdf", } _SHARED_D_LIST = (0.0, 0.0, 0.260, 0.0, 0.166, 0.098, 0.0) _EYES_ATTACH_XPOS = ( @@ -212,20 +173,10 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: _W1_VERSION_SPECS = { DexforceW1Version.V021: W1VersionSpec( version=DexforceW1Version.V021, - supported_arm_kinds=frozenset(DexforceW1ArmKind), component_urdfs=_V021_COMPONENT_URDFS, - full_robot_urdfs={ - DexforceW1ArmKind.ANTHROPOMORPHIC: ("DexforceW1V021/DexforceW1_v02_1.urdf"), - DexforceW1ArmKind.INDUSTRIAL: "DexforceW1V021/DexforceW1_v02_2.urdf", - }, - arm_d_lists={ - DexforceW1ArmKind.ANTHROPOMORPHIC: _SHARED_D_LIST, - DexforceW1ArmKind.INDUSTRIAL: _SHARED_D_LIST, - }, - arm_base_z={ - DexforceW1ArmKind.ANTHROPOMORPHIC: 0.1025, - DexforceW1ArmKind.INDUSTRIAL: 0.1025, - }, + full_robot_urdf_path="DexforceW1V021/DexforceW1_v02_1.urdf", + arm_d_list=_SHARED_D_LIST, + arm_base_z=0.1025, solver_tcp=_DEFAULT_TCP, eyes_attach_xpos=_EYES_ATTACH_XPOS, wrist_camera_rpy=_WRIST_CAMERA_RPY, @@ -233,21 +184,12 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: ), DexforceW1Version.V025: W1VersionSpec( version=DexforceW1Version.V025, - supported_arm_kinds=frozenset({DexforceW1ArmKind.ANTHROPOMORPHIC}), component_urdfs=_V025_COMPONENT_URDFS, - full_robot_urdfs={ - DexforceW1ArmKind.ANTHROPOMORPHIC: "DexforceW1V025/w1/robot.urdf", - }, - arm_d_lists={ - # Verified against left_arm.urdf/right_arm.urdf in the V025 release. - DexforceW1ArmKind.ANTHROPOMORPHIC: _SHARED_D_LIST, - }, - arm_base_z={DexforceW1ArmKind.ANTHROPOMORPHIC: 0.1025}, - solver_tcp={ - key: value - for key, value in _DEFAULT_TCP.items() - if key[0] == DexforceW1ArmKind.ANTHROPOMORPHIC - }, + full_robot_urdf_path="DexforceW1V025/w1/robot.urdf", + # Verified against left_arm.urdf/right_arm.urdf in the V025 release. + arm_d_list=_SHARED_D_LIST, + arm_base_z=0.1025, + solver_tcp=_DEFAULT_TCP, eyes_attach_xpos=_EYES_ATTACH_XPOS, wrist_camera_rpy=_WRIST_CAMERA_RPY, wrist_camera_xyz=_WRIST_CAMERA_XYZ, diff --git a/embodichain/lab/sim/robots/dexforce_w1/types.py b/embodichain/lab/sim/robots/dexforce_w1/types.py index 0c9b2eaf8..7ca056120 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/types.py +++ b/embodichain/lab/sim/robots/dexforce_w1/types.py @@ -18,7 +18,6 @@ __all__ = [ "DexforceW1Version", - "DexforceW1ArmKind", "DexforceW1ArmSide", "DexforceW1Type", "DexforceW1HandBrand", @@ -32,13 +31,6 @@ class DexforceW1Version(enum.Enum): V025 = "v025" -class DexforceW1ArmKind(enum.Enum): - """Arm type for DexforceW1: anthropomorphic or industrial.""" - - ANTHROPOMORPHIC = "anthropomorphic" - INDUSTRIAL = "industrial" - - class DexforceW1ArmSide(enum.Enum): """Arm side for DexforceW1: left or right.""" @@ -53,10 +45,8 @@ class DexforceW1Type(enum.Enum): TORSO = "torso" EYES = "eyes" HEAD = "head" - LEFT_ARM1 = "left_arm" # Anthropomorphic left arm - RIGHT_ARM1 = "right_arm" # Anthropomorphic right arm - LEFT_ARM2 = "left_arm2" # Industrial left arm - RIGHT_ARM2 = "right_arm2" # Industrial right arm + LEFT_ARM = "left_arm" + RIGHT_ARM = "right_arm" LEFT_HAND = "left_hand" RIGHT_HAND = "right_hand" FULL_BODY = "full_body" # Full robot diff --git a/embodichain/lab/sim/robots/dexforce_w1/utils.py b/embodichain/lab/sim/robots/dexforce_w1/utils.py index 3d72093cc..dfa7d5e54 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/utils.py +++ b/embodichain/lab/sim/robots/dexforce_w1/utils.py @@ -17,7 +17,6 @@ from typing import List, Dict from embodichain.lab.sim.robots.dexforce_w1.types import ( - DexforceW1ArmKind, DexforceW1Type, DexforceW1ArmSide, DexforceW1Version, @@ -111,29 +110,22 @@ def get_config(self, version=DexforceW1Version.V021): class ArmManager: - def get_urdf(self, kind, side, version=DexforceW1Version.V021): + def get_urdf(self, side, version=DexforceW1Version.V021): spec = get_w1_version_spec(version) - spec.validate_arm_kind(kind) - return get_data_path(spec.component_urdf(self.get_component_type(kind, side))) + return get_data_path(spec.component_urdf(self.get_component_type(side))) @staticmethod - def get_component_type(kind, side): - if kind == DexforceW1ArmKind.ANTHROPOMORPHIC: - return ( - DexforceW1Type.LEFT_ARM1 - if side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM1 - ) + def get_component_type(side): return ( - DexforceW1Type.LEFT_ARM2 + DexforceW1Type.LEFT_ARM if side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM2 + else DexforceW1Type.RIGHT_ARM ) - def get_config(self, kind, side, version=DexforceW1Version.V021): + def get_config(self, side, version=DexforceW1Version.V021): prefix = "LEFT" if side == DexforceW1ArmSide.LEFT else "RIGHT" return { - "urdf_path": self.get_urdf(kind, side, version), + "urdf_path": self.get_urdf(side, version), "joint_names": [f"{prefix}_J{i}" for i in range(1, 8)], "end_link_name": f"{prefix.lower()}_ee", "root_link_name": f"{prefix.lower()}_arm_base", @@ -242,11 +234,10 @@ def get_urdf( def get_attach_xpos( self, brand: DexforceW1HandBrand, - arm_kind: DexforceW1ArmKind = DexforceW1ArmKind.INDUSTRIAL, arm_side: DexforceW1ArmSide = DexforceW1ArmSide.LEFT, version: DexforceW1Version = DexforceW1Version.V021, ): - return get_w1_version_spec(version).hand_attach_xpos(brand, arm_kind, arm_side) + return get_w1_version_spec(version).hand_attach_xpos(brand, arm_side) eyes_manager = EyesManager() @@ -258,7 +249,6 @@ def get_attach_xpos( def build_dexforce_w1_assembly_urdf_cfg( - arm_kind: DexforceW1ArmKind, version: DexforceW1Version = DexforceW1Version.V021, arm_sides: List[DexforceW1ArmSide] = [ DexforceW1ArmSide.LEFT, @@ -280,7 +270,6 @@ def build_dexforce_w1_assembly_urdf_cfg( Assemble DexforceW1 robot urdf configuration. Args: - arm_kind: Arm type (anthropomorphic or industrial). arm_sides: List of arm sides to include (left/right). Default both sides. version: Default W1 revision for every component. fname: Output configuration name. Defaults to the version assembly name. @@ -381,8 +370,8 @@ def get_version(component_type): # TODO: Support user-defined eye transforms import xml.etree.ElementTree as ET - arm_type = arm_manager.get_component_type(arm_kind, arm_side) - camera_spec = get_w1_version_spec(get_version(arm_type)) + arm_component = arm_manager.get_component_type(arm_side) + camera_spec = get_w1_version_spec(get_version(arm_component)) attach_xpos = camera_spec.wrist_camera_xpos(arm_side) joint_xml = f""" @@ -417,9 +406,9 @@ def get_version(component_type): ) for arm_side in arm_sides: - arm_type = arm_manager.get_component_type(arm_kind, arm_side) - arm_version = get_version(arm_type) - arm_cfg = arm_manager.get_config(arm_kind, arm_side, arm_version) + arm_component = arm_manager.get_component_type(arm_side) + arm_version = get_version(arm_component) + arm_cfg = arm_manager.get_config(arm_side, arm_version) components.append( { "component_type": f"{arm_side.value}_arm", @@ -447,9 +436,8 @@ def get_version(component_type): arm_side, hand_manager.get_attach_xpos( hand_brand, - arm_kind, arm_side, - get_version(arm_manager.get_component_type(arm_kind, arm_side)), + get_version(arm_manager.get_component_type(arm_side)), ), ) components.append( @@ -470,7 +458,6 @@ def get_version(component_type): def build_dexforce_w1_solver_cfg( - arm_kind: DexforceW1ArmKind, version: DexforceW1Version = DexforceW1Version.V021, arm_sides: List[DexforceW1ArmSide] = [ DexforceW1ArmSide.LEFT, @@ -483,7 +470,6 @@ def build_dexforce_w1_solver_cfg( Build DexforceW1 solver configuration dict. Args: - arm_kind: Arm type. version: Default W1 revision. arm_sides: Included arm sides. Optional, default both sides. component_versions: Optional per-component version overrides. @@ -501,9 +487,9 @@ def build_dexforce_w1_solver_cfg( solver_cfg = {} for arm_side in arm_sides: - arm_type = arm_manager.get_component_type(arm_kind, arm_side) - arm_version = component_versions.get(arm_type, version) - arm_cfg = arm_manager.get_config(arm_kind, arm_side, arm_version) + arm_component = arm_manager.get_component_type(arm_side) + arm_version = component_versions.get(arm_component, version) + arm_cfg = arm_manager.get_config(arm_side, arm_version) # Use control_parts-aligned key (e.g. "left_arm") so init_solver # can match this entry to the corresponding control part. solver_key = f"{arm_side.value}_arm" @@ -514,7 +500,7 @@ def build_dexforce_w1_solver_cfg( "joint_names": arm_cfg["joint_names"], "end_link_name": arm_cfg["end_link_name"], "root_link_name": arm_cfg["root_link_name"], - "tcp": get_w1_version_spec(arm_version).tcp(arm_kind, arm_side), + "tcp": get_w1_version_spec(arm_version).tcp(arm_side), } ) @@ -522,7 +508,7 @@ def build_dexforce_w1_solver_cfg( full_body_urdf_path = urdf_cfg.fpath else: full_body_urdf_path = get_data_path( - get_w1_version_spec(version).full_robot_urdf(arm_kind) + get_w1_version_spec(version).full_robot_urdf() ) solver_cfg[DexforceW1Type.FULL_BODY.value] = SolverCfg.from_dict( @@ -559,7 +545,6 @@ def build_dexforce_w1_solver_cfg( def build_dexforce_w1_cfg( - arm_kind: DexforceW1ArmKind, version: DexforceW1Version = DexforceW1Version.V021, arm_sides: List[DexforceW1ArmSide] = [ DexforceW1ArmSide.LEFT, @@ -581,7 +566,6 @@ def build_dexforce_w1_cfg( Build DexforceW1 robot configuration object. Args: - arm_kind: Arm type (anthropomorphic or industrial). version: Default W1 revision. arm_sides: List of arm sides to include (left/right). Default both sides. hand_types: Dict specifying hand brand (DexforceW1HandBrand) for each arm side. Default None, which uses the default brand. @@ -605,7 +589,6 @@ def build_dexforce_w1_cfg( component_versions = normalize_component_versions(component_versions) urdf_cfg = build_dexforce_w1_assembly_urdf_cfg( - arm_kind=arm_kind, version=version, arm_sides=arm_sides, hand_types=hand_types, @@ -623,9 +606,9 @@ def build_dexforce_w1_cfg( left_arm_joints = [] right_arm_joints = [] for arm_side in arm_sides: - arm_type = arm_manager.get_component_type(arm_kind, arm_side) - arm_version = component_versions.get(arm_type, version) - arm_cfg = arm_manager.get_config(arm_kind, arm_side, arm_version) + arm_component = arm_manager.get_component_type(arm_side) + arm_version = component_versions.get(arm_component, version) + arm_cfg = arm_manager.get_config(arm_side, arm_version) if arm_side == DexforceW1ArmSide.LEFT: left_arm_joints = arm_cfg["joint_names"] elif arm_side == DexforceW1ArmSide.RIGHT: @@ -696,7 +679,6 @@ def build_dexforce_w1_cfg( cfg = DexforceW1Cfg() cfg.version = version - cfg.arm_kind = arm_kind cfg.component_versions = component_versions cfg.urdf_cfg = urdf_cfg cfg.control_parts = control_parts @@ -705,7 +687,6 @@ def build_dexforce_w1_cfg( cfg.solver_cfg = solver_cfg else: cfg.solver_cfg = build_dexforce_w1_solver_cfg( - arm_kind=arm_kind, version=version, arm_sides=arm_sides, component_versions=component_versions, diff --git a/embodichain/lab/sim/utility/cfg_utils.py b/embodichain/lab/sim/utility/cfg_utils.py index 12246e848..d047599eb 100644 --- a/embodichain/lab/sim/utility/cfg_utils.py +++ b/embodichain/lab/sim/utility/cfg_utils.py @@ -84,7 +84,7 @@ def merge_robot_cfg(base_cfg: RobotCfg, override_cfg_dict: dict[str, any]) -> Ro """ # Only parse keys the base RobotCfg recognizes, so subclass-only variant - # fields (version, arm_kind, ...) set by _build_defaults don't trigger + # fields (version, ...) set by _build_defaults don't trigger # spurious "Key not found in RobotCfg" warnings from the base from_dict. # NOTE: check RobotCfg.__dataclass_fields__ (not hasattr(base_cfg, k)) # because base_cfg is the subclass instance which has subclass-only fields, @@ -217,7 +217,7 @@ def merge_robot_cfg(base_cfg: RobotCfg, override_cfg_dict: dict[str, any]) -> Ro ) else: # Only apply keys the base RobotCfg.from_dict recognized. - # Subclass-only variant fields (e.g. version, arm_kind) are not + # Subclass-only variant fields (e.g. version) are not # present on a plain RobotCfg and are already set by _build_defaults; # skip them instead of raising AttributeError. if hasattr(robot_cfg, key): diff --git a/examples/sim/demo/grasp_cup_to_caffe.py b/examples/sim/demo/grasp_cup_to_caffe.py index 25a040e43..aadedac1c 100644 --- a/examples/sim/demo/grasp_cup_to_caffe.py +++ b/examples/sim/demo/grasp_cup_to_caffe.py @@ -93,6 +93,7 @@ def create_robot(sim: SimulationManager) -> Robot: cfg = DexforceW1Cfg.from_dict( { "uid": "dexforce_w1", + "version": "v025", "init_pos": [0.4, -0.5, 0.0], } ) diff --git a/examples/sim/gizmo/gizmo_scene.py b/examples/sim/gizmo/gizmo_scene.py index a37e6eb86..79927b0c3 100644 --- a/examples/sim/gizmo/gizmo_scene.py +++ b/examples/sim/gizmo/gizmo_scene.py @@ -68,9 +68,7 @@ def main(): sim.set_manual_update(False) # Get DexForce W1 URDF path - urdf_path = get_data_path( - "DexforceW1V021_INDUSTRIAL_DH_PGC_GRIPPER_M/DexforceW1V021.urdf" - ) + urdf_path = get_data_path("DexforceW1V021/DexforceW1_v02_1.urdf") # Create DexForce W1 robot robot_cfg = RobotCfg( diff --git a/examples/sim/robot/dexforce_w1.py b/examples/sim/robot/dexforce_w1.py index beee19d9c..082d15d0e 100644 --- a/examples/sim/robot/dexforce_w1.py +++ b/examples/sim/robot/dexforce_w1.py @@ -35,7 +35,6 @@ def main(): { "uid": "dexforce_w1", "version": "v021", - "arm_kind": "anthropomorphic", "with_default_eef": False, "control_parts": { "left_eef": ["LEFT_FINGER1_JOINT", "LEFT_FINGER2_JOINT"], diff --git a/examples/sim/scene/scene_demo.py b/examples/sim/scene/scene_demo.py index 1c08af6ae..72e4c1db9 100644 --- a/examples/sim/scene/scene_demo.py +++ b/examples/sim/scene/scene_demo.py @@ -165,7 +165,6 @@ def main(): { "uid": "dexforce_w1", "version": "v021", - "arm_kind": "anthropomorphic", "init_pos": [-1, -0.5, 0], "init_rot": [0, 0, 90], } diff --git a/examples/sim/utility/workspace_analyzer/analyze_cartesian_workspace.py b/examples/sim/utility/workspace_analyzer/analyze_cartesian_workspace.py index 8d2b5b9c0..095db7715 100644 --- a/examples/sim/utility/workspace_analyzer/analyze_cartesian_workspace.py +++ b/examples/sim/utility/workspace_analyzer/analyze_cartesian_workspace.py @@ -43,9 +43,7 @@ ) sim = SimulationManager(config) - cfg = DexforceW1Cfg.from_dict( - {"uid": "dexforce_w1", "version": "v021", "arm_kind": "industrial"} - ) + cfg = DexforceW1Cfg.from_dict({"uid": "dexforce_w1", "version": "v021"}) robot = sim.add_robot(cfg=cfg) print("DexforceW1 robot added to the simulation.") diff --git a/examples/sim/utility/workspace_analyzer/analyze_joint_workspace.py b/examples/sim/utility/workspace_analyzer/analyze_joint_workspace.py index 5c658fa98..c65f97866 100644 --- a/examples/sim/utility/workspace_analyzer/analyze_joint_workspace.py +++ b/examples/sim/utility/workspace_analyzer/analyze_joint_workspace.py @@ -33,9 +33,7 @@ sim_manager = SimulationManager(config) sim_manager.set_manual_update(False) - cfg = DexforceW1Cfg.from_dict( - {"uid": "dexforce_w1", "version": "v021", "arm_kind": "industrial"} - ) + cfg = DexforceW1Cfg.from_dict({"uid": "dexforce_w1", "version": "v021"}) robot = sim_manager.add_robot(cfg=cfg) print("DexforceW1 robot added to the simulation.") diff --git a/examples/sim/utility/workspace_analyzer/analyze_plane_workspace.py b/examples/sim/utility/workspace_analyzer/analyze_plane_workspace.py index 8bd1b4ce1..5bd9b0873 100644 --- a/examples/sim/utility/workspace_analyzer/analyze_plane_workspace.py +++ b/examples/sim/utility/workspace_analyzer/analyze_plane_workspace.py @@ -44,9 +44,7 @@ sim = SimulationManager(config) sim.set_manual_update(False) - cfg = DexforceW1Cfg.from_dict( - {"uid": "dexforce_w1", "version": "v021", "arm_kind": "industrial"} - ) + cfg = DexforceW1Cfg.from_dict({"uid": "dexforce_w1", "version": "v021"}) robot = sim.add_robot(cfg=cfg) print("DexforceW1 robot added to the simulation.") diff --git a/scripts/tutorials/gym/modular_env.py b/scripts/tutorials/gym/modular_env.py index dbe05ec26..ce68343d8 100644 --- a/scripts/tutorials/gym/modular_env.py +++ b/scripts/tutorials/gym/modular_env.py @@ -103,7 +103,6 @@ class ExampleCfg(EmbodiedEnvCfg): { "uid": "dexforce_w1", "version": "v021", - "arm_kind": "anthropomorphic", "init_pos": [0.0, 0, 0.0], } ) diff --git a/tests/sim/objects/test_robot.py b/tests/sim/objects/test_robot.py index b3a37837b..876781a60 100644 --- a/tests/sim/objects/test_robot.py +++ b/tests/sim/objects/test_robot.py @@ -63,7 +63,6 @@ def setup_simulation(cls, sim_device): { "uid": "dexforce_w1", "version": "v021", - "arm_kind": "anthropomorphic", } ) @@ -409,7 +408,6 @@ def test_configured_qpos_limits_sync_to_solver_after_initialization(self): { "uid": "dexforce_w1_solver_limit_sync", "version": "v021", - "arm_kind": "anthropomorphic", "qpos_limits": {"LEFT_J[1-7]": configured_limits}, } ) diff --git a/tests/sim/objects/test_robot_cfg.py b/tests/sim/objects/test_robot_cfg.py index a345e5f6d..48a97a04f 100644 --- a/tests/sim/objects/test_robot_cfg.py +++ b/tests/sim/objects/test_robot_cfg.py @@ -23,7 +23,6 @@ from embodichain.lab.sim.cfg import RobotCfg, JointDrivePropertiesCfg from embodichain.lab.sim.robots.dexforce_w1 import DexforceW1Cfg from embodichain.lab.sim.robots.dexforce_w1.types import ( - DexforceW1ArmKind, DexforceW1Version, ) from embodichain.lab.sim.solvers import SRSSolverCfg @@ -32,24 +31,25 @@ def test_dexforce_w1_roundtrip(): - cfg = DexforceW1Cfg.from_dict( - {"uid": "dexforce_w1", "version": "v021", "arm_kind": "anthropomorphic"} - ) + cfg = DexforceW1Cfg.from_dict({"uid": "dexforce_w1", "version": "v021"}) d = cfg.to_dict() assert d["uid"] == "dexforce_w1" - assert d["arm_kind"] == "anthropomorphic" cfg2 = DexforceW1Cfg.from_dict(d) assert cfg2.uid == "dexforce_w1" - assert cfg2.arm_kind == DexforceW1ArmKind.ANTHROPOMORPHIC assert cfg2.version == DexforceW1Version.V021 def test_dexforce_w1_solver_cfg_is_srs_and_set_once(): - cfg = DexforceW1Cfg.from_dict({"arm_kind": "industrial"}) + cfg = DexforceW1Cfg.from_dict({}) assert isinstance(cfg.solver_cfg["left_arm"], SRSSolverCfg) assert isinstance(cfg.solver_cfg["right_arm"], SRSSolverCfg) +def test_dexforce_w1_rejects_unknown_fields(): + with pytest.raises(ValueError, match="Unknown DexforceW1 configuration fields"): + DexforceW1Cfg.from_dict({"unsupported_variant": "value"}) + + class _RoundTripVariant(enum.Enum): A = "a" B = "b" @@ -139,7 +139,7 @@ def _dof_of_pk_chain(chain) -> int: def test_dexforce_w1_pk_dof_matches_control_parts(): pytest.importorskip("pytorch_kinematics") - cfg = DexforceW1Cfg.from_dict({"arm_kind": "anthropomorphic"}) + cfg = DexforceW1Cfg.from_dict({}) try: chains = cfg.build_pk_serial_chain() except Exception as exc: diff --git a/tests/sim/solvers/test_srs_solver.py b/tests/sim/solvers/test_srs_solver.py index 83cd4a61b..540814987 100644 --- a/tests/sim/solvers/test_srs_solver.py +++ b/tests/sim/solvers/test_srs_solver.py @@ -31,7 +31,6 @@ from embodichain.lab.sim.solvers.srs_solver import SRSSolver, SRSSolverCfg from embodichain.lab.sim.robots.dexforce_w1.types import ( DexforceW1ArmSide, - DexforceW1ArmKind, DexforceW1Version, ) from embodichain.lab.sim.robots.dexforce_w1.params import ( @@ -44,23 +43,17 @@ class BaseSolverTest: def get_arm_config(self): return [ - (DexforceW1ArmSide.LEFT, DexforceW1ArmKind.ANTHROPOMORPHIC, "left_arm"), - (DexforceW1ArmSide.RIGHT, DexforceW1ArmKind.ANTHROPOMORPHIC, "right_arm"), - (DexforceW1ArmSide.LEFT, DexforceW1ArmKind.INDUSTRIAL, "left_arm"), - (DexforceW1ArmSide.RIGHT, DexforceW1ArmKind.INDUSTRIAL, "right_arm"), + (DexforceW1ArmSide.LEFT, "left_arm"), + (DexforceW1ArmSide.RIGHT, "right_arm"), ] def setup_solver(self, solver_type: str, device: str = "cpu"): - for arm_side, arm_kind, arm_name in self.get_arm_config(): + for arm_side, arm_name in self.get_arm_config(): arm_params = W1ArmKineParams( arm_side=arm_side, - arm_kind=arm_kind, version=DexforceW1Version.V021, ) - if arm_kind == DexforceW1ArmKind.ANTHROPOMORPHIC: - urdf = get_data_path("DexforceW1V021/DexforceW1_v02_1.urdf") - else: - urdf = get_data_path("DexforceW1V021/DexforceW1_v02_2.urdf") + urdf = get_data_path("DexforceW1V021/DexforceW1_v02_1.urdf") cfg = SRSSolverCfg() cfg.joint_names = [ @@ -83,24 +76,18 @@ def setup_solver(self, solver_type: str, device: str = "cpu"): cfg.link_lengths = arm_params.link_lengths cfg.rotation_directions = arm_params.rotation_directions - solver_key = f"{arm_name}_{arm_kind.name}" - self.solver[solver_key] = SRSSolver(cfg=cfg, num_envs=1, device=device) + self.solver[arm_name] = SRSSolver(cfg=cfg, num_envs=1, device=device) @pytest.mark.parametrize( - "arm_side, arm_kind, arm_name", + "arm_side, arm_name", [ - (DexforceW1ArmSide.LEFT, DexforceW1ArmKind.ANTHROPOMORPHIC, "left_arm"), - (DexforceW1ArmSide.RIGHT, DexforceW1ArmKind.ANTHROPOMORPHIC, "right_arm"), - (DexforceW1ArmSide.LEFT, DexforceW1ArmKind.INDUSTRIAL, "left_arm"), - (DexforceW1ArmSide.RIGHT, DexforceW1ArmKind.INDUSTRIAL, "right_arm"), + (DexforceW1ArmSide.LEFT, "left_arm"), + (DexforceW1ArmSide.RIGHT, "right_arm"), ], ) - def test_ik( - self, arm_side: DexforceW1ArmSide, arm_kind: DexforceW1ArmKind, arm_name: str - ): + def test_ik(self, arm_side: DexforceW1ArmSide, arm_name: str): # Test inverse kinematics (IK) with a 1x4x4 homogeneous matrix pose and a joint_seed - solver_key = f"{arm_name}_{arm_kind.name}" - device = self.solver[solver_key].device + device = self.solver[arm_name].device qpos_fk = torch.tensor( [[0.0, 0.0, 0.0, -np.pi / 4, 0.0, 0.0, 0.0]], @@ -108,15 +95,15 @@ def test_ik( device=device, ) - fk_xpos = self.solver[solver_key].get_fk(qpos=qpos_fk) + fk_xpos = self.solver[arm_name].get_fk(qpos=qpos_fk) - _, ik_qpos = self.solver[solver_key].get_ik(fk_xpos, return_all_solutions=False) + _, ik_qpos = self.solver[arm_name].get_ik(fk_xpos, return_all_solutions=False) - ik_xpos = self.solver[solver_key].get_fk(qpos=ik_qpos[:, 0, :]) + ik_xpos = self.solver[arm_name].get_fk(qpos=ik_qpos[:, 0, :]) assert torch.allclose( fk_xpos, ik_xpos, atol=1e-3, rtol=1e-3 - ), f"FK and IK results do not match for {solver_key}" + ), f"FK and IK results do not match for {arm_name}" def test_update_with_robot_limit_intersects_existing_solver_limits(self): """Test robot limit sync only tightens solver limits and never widens them.""" @@ -212,12 +199,10 @@ def setup_simulation(self, solver_type: str, device: str = "cpu"): w1_left_arm_params = W1ArmKineParams( arm_side=DexforceW1ArmSide.LEFT, - arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, version=DexforceW1Version.V021, ) w1_right_arm_params = W1ArmKineParams( arm_side=DexforceW1ArmSide.RIGHT, - arm_kind=DexforceW1ArmKind.ANTHROPOMORPHIC, version=DexforceW1Version.V021, ) From b3f4c9b2be581549e109603d34cf2a9a1f632eae Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Wed, 29 Jul 2026 16:21:11 +0800 Subject: [PATCH 3/9] attach xpos for version --- embodichain/lab/sim/robots/dexforce_w1/cfg.py | 95 ++++++++++++++++++- .../lab/sim/robots/dexforce_w1/specs.py | 49 +++++++++- .../lab/sim/robots/dexforce_w1/utils.py | 16 +++- examples/sim/demo/grasp_cup_to_caffe.py | 60 +++++++++++- tests/sim/objects/test_robot_cfg.py | 34 +++++++ 5 files changed, 241 insertions(+), 13 deletions(-) diff --git a/embodichain/lab/sim/robots/dexforce_w1/cfg.py b/embodichain/lab/sim/robots/dexforce_w1/cfg.py index 756ccd283..3472635d9 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/cfg.py +++ b/embodichain/lab/sim/robots/dexforce_w1/cfg.py @@ -17,6 +17,8 @@ from __future__ import annotations import typing + +import numpy as np import torch from typing import TYPE_CHECKING, Dict @@ -74,7 +76,92 @@ def from_dict( cfg = cls() cfg._build_defaults(init_dict) - return merge_robot_cfg(cfg, init_dict) + cfg = merge_robot_cfg(cfg, init_dict) + cfg._compose_user_eef_overrides(init_dict) + return cfg + + def _arm_version(self, arm_side: DexforceW1ArmSide) -> DexforceW1Version: + component_type = ( + DexforceW1Type.LEFT_ARM + if arm_side == DexforceW1ArmSide.LEFT + else DexforceW1Type.RIGHT_ARM + ) + return (self.component_versions or {}).get(component_type, self.version) + + def _compose_user_eef_overrides(self, init_dict: dict) -> None: + """Apply the version offset to user-supplied EEF transforms and TCPs.""" + side_by_component = { + "left_hand": DexforceW1ArmSide.LEFT, + "right_hand": DexforceW1ArmSide.RIGHT, + } + urdf_cfg = init_dict.get("urdf_cfg") + components = ( + urdf_cfg.get("components", []) if isinstance(urdf_cfg, dict) else [] + ) + if isinstance(components, dict): + component_names = set(components) + else: + component_names = { + component.get("component_type") + for component in components + if isinstance(component, dict) + } + + for component_name, arm_side in side_by_component.items(): + if component_name not in component_names: + continue + component = self.urdf_cfg.components.get(component_name) + if component is None: + continue + spec = get_w1_version_spec(self._arm_version(arm_side)) + component["transform"] = spec.compose_eef_attach_xpos( + arm_side, component["transform"] + ) + + solver_cfg = init_dict.get("solver_cfg") + if not isinstance(solver_cfg, dict): + return + for arm_side in DexforceW1ArmSide: + part_name = f"{arm_side.value}_arm" + part_override = solver_cfg.get(part_name) + if not isinstance(part_override, dict) or "tcp" not in part_override: + continue + solver = self.solver_cfg.get(part_name) + if solver is None: + continue + spec = get_w1_version_spec(self._arm_version(arm_side)) + solver.tcp = spec.compose_eef_attach_xpos(arm_side, solver.tcp) + + def to_dict(self): + """Serialize EEF-specific transforms without the derived version offset.""" + data = super().to_dict() + side_by_component = { + "left_hand": DexforceW1ArmSide.LEFT, + "right_hand": DexforceW1ArmSide.RIGHT, + } + components = data.get("urdf_cfg", {}).get("components", {}) + for component_name, arm_side in side_by_component.items(): + component = components.get(component_name) + if not isinstance(component, dict) or component.get("transform") is None: + continue + spec = get_w1_version_spec(self._arm_version(arm_side)) + offset_inv = np.linalg.inv(spec.eef_attach_xpos(arm_side)) + component["transform"] = ( + offset_inv @ np.asarray(component["transform"], dtype=float) + ).tolist() + + solver_cfg = data.get("solver_cfg", {}) + for arm_side in DexforceW1ArmSide: + part_name = f"{arm_side.value}_arm" + solver = solver_cfg.get(part_name) + if not isinstance(solver, dict) or solver.get("tcp") is None: + continue + spec = get_w1_version_spec(self._arm_version(arm_side)) + offset_inv = np.linalg.inv(spec.eef_attach_xpos(arm_side)) + solver["tcp"] = ( + offset_inv @ np.asarray(solver["tcp"], dtype=float) + ).tolist() + return data def _build_defaults(self, init_dict: dict | None = None) -> None: """Build default urdf/control/solver/physics from variant fields. @@ -130,10 +217,8 @@ def _build_default_solver_cfg(self): W1ArmKineParams, ) - left_arm_component = DexforceW1Type.LEFT_ARM - right_arm_component = DexforceW1Type.RIGHT_ARM - left_version = self.component_versions.get(left_arm_component, self.version) - right_version = self.component_versions.get(right_arm_component, self.version) + left_version = self._arm_version(DexforceW1ArmSide.LEFT) + right_version = self._arm_version(DexforceW1ArmSide.RIGHT) left_version_spec = get_w1_version_spec(left_version) right_version_spec = get_w1_version_spec(right_version) w1_left_arm_params = W1ArmKineParams( diff --git a/embodichain/lab/sim/robots/dexforce_w1/specs.py b/embodichain/lab/sim/robots/dexforce_w1/specs.py index ee12b757d..44569f5fb 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/specs.py +++ b/embodichain/lab/sim/robots/dexforce_w1/specs.py @@ -60,6 +60,7 @@ class W1VersionSpec: full_robot_urdf_path: str arm_d_list: tuple[float, ...] arm_base_z: float + default_eef_attach_xpos: dict[DexforceW1ArmSide, tuple] solver_tcp: dict[DexforceW1ArmSide, tuple] eyes_attach_xpos: tuple[tuple[float, ...], ...] wrist_camera_rpy: tuple[float, float, float] @@ -108,8 +109,29 @@ def _resolve_local_urdf(self, registered_path: str) -> str: f"'{registered_path}' was not found. Expected {expected}." ) + def eef_attach_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: + """Return the version-owned transform applied before every EEF.""" + return np.asarray(self.default_eef_attach_xpos[arm_side], dtype=float).copy() + + def compose_eef_attach_xpos( + self, + arm_side: DexforceW1ArmSide, + eef_xpos: np.ndarray, + ) -> np.ndarray: + """Compose the W1 revision offset with an EEF-specific transform.""" + eef_xpos = np.asarray(eef_xpos, dtype=float) + if eef_xpos.shape != (4, 4): + raise ValueError( + f"EEF transform must have shape (4, 4), got {eef_xpos.shape}." + ) + return self.eef_attach_xpos(arm_side) @ eef_xpos + def tcp(self, arm_side: DexforceW1ArmSide) -> np.ndarray: - return np.asarray(self.solver_tcp[arm_side], dtype=float).copy() + """Return the final EE-to-TCP transform for this W1 revision.""" + return self.compose_eef_attach_xpos( + arm_side, + np.asarray(self.solver_tcp[arm_side], dtype=float), + ) def hand_attach_xpos( self, @@ -129,7 +151,7 @@ def hand_attach_xpos( result[:3, :3] = R.from_rotvec([0, 0, 90], degrees=True).as_matrix() else: raise ValueError(f"Unknown hand brand: {brand}") - return result + return self.compose_eef_attach_xpos(arm_side, result) def eyes_xpos(self) -> np.ndarray: return np.asarray(self.eyes_attach_xpos, dtype=float).copy() @@ -169,6 +191,27 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: ) _WRIST_CAMERA_RPY = (2.79252648, 0.0, 1.57079633) _WRIST_CAMERA_XYZ = (0.08, 0.0, 0.06) +_IDENTITY_XPOS = ( + (1.0, 0.0, 0.0, 0.0), + (0.0, 1.0, 0.0, 0.0), + (0.0, 0.0, 1.0, 0.0), + (0.0, 0.0, 0.0, 1.0), +) +_V021_DEFAULT_EEF_ATTACH_XPOS = { + DexforceW1ArmSide.LEFT: _IDENTITY_XPOS, + DexforceW1ArmSide.RIGHT: _IDENTITY_XPOS, +} +# Calibrated outward flange offset shared by every V025 end effector. +_V025_EEF_ATTACH_XPOS = ( + (1.0, 0.0, 0.0, 0.0), + (0.0, 1.0, 0.0, 0.0), + (0.0, 0.0, 1.0, 0.012), + (0.0, 0.0, 0.0, 1.0), +) +_V025_DEFAULT_EEF_ATTACH_XPOS = { + DexforceW1ArmSide.LEFT: _V025_EEF_ATTACH_XPOS, + DexforceW1ArmSide.RIGHT: _V025_EEF_ATTACH_XPOS, +} _W1_VERSION_SPECS = { DexforceW1Version.V021: W1VersionSpec( @@ -177,6 +220,7 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: full_robot_urdf_path="DexforceW1V021/DexforceW1_v02_1.urdf", arm_d_list=_SHARED_D_LIST, arm_base_z=0.1025, + default_eef_attach_xpos=_V021_DEFAULT_EEF_ATTACH_XPOS, solver_tcp=_DEFAULT_TCP, eyes_attach_xpos=_EYES_ATTACH_XPOS, wrist_camera_rpy=_WRIST_CAMERA_RPY, @@ -189,6 +233,7 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: # Verified against left_arm.urdf/right_arm.urdf in the V025 release. arm_d_list=_SHARED_D_LIST, arm_base_z=0.1025, + default_eef_attach_xpos=_V025_DEFAULT_EEF_ATTACH_XPOS, solver_tcp=_DEFAULT_TCP, eyes_attach_xpos=_EYES_ATTACH_XPOS, wrist_camera_rpy=_WRIST_CAMERA_RPY, diff --git a/embodichain/lab/sim/robots/dexforce_w1/utils.py b/embodichain/lab/sim/robots/dexforce_w1/utils.py index dfa7d5e54..637e96620 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/utils.py +++ b/embodichain/lab/sim/robots/dexforce_w1/utils.py @@ -432,14 +432,20 @@ def get_version(component_type): ) urdf_path = hand_manager.get_urdf(hand_brand, arm_side, hand_version) - attach_xpos = (hand_attach_xposes or {}).get( - arm_side, - hand_manager.get_attach_xpos( + custom_attach_xpos = (hand_attach_xposes or {}).get(arm_side) + if custom_attach_xpos is None: + attach_xpos = hand_manager.get_attach_xpos( hand_brand, arm_side, get_version(arm_manager.get_component_type(arm_side)), - ), - ) + ) + else: + arm_spec = get_w1_version_spec( + get_version(arm_manager.get_component_type(arm_side)) + ) + attach_xpos = arm_spec.compose_eef_attach_xpos( + arm_side, custom_attach_xpos + ) components.append( { "component_type": f"{arm_side.value}_hand", diff --git a/examples/sim/demo/grasp_cup_to_caffe.py b/examples/sim/demo/grasp_cup_to_caffe.py index aadedac1c..9eab9ee2c 100644 --- a/examples/sim/demo/grasp_cup_to_caffe.py +++ b/examples/sim/demo/grasp_cup_to_caffe.py @@ -30,6 +30,7 @@ from embodichain.lab.sim.cfg import ( RenderCfg, LightCfg, + MarkerCfg, JointDrivePropertiesCfg, RigidObjectCfg, RigidBodyAttributesCfg, @@ -93,7 +94,7 @@ def create_robot(sim: SimulationManager) -> Robot: cfg = DexforceW1Cfg.from_dict( { "uid": "dexforce_w1", - "version": "v025", + "version": "v021", "init_pos": [0.4, -0.5, 0.0], } ) @@ -159,6 +160,56 @@ def create_robot(sim: SimulationManager) -> Robot: return sim.add_robot(cfg=cfg) +def draw_initial_kinematic_markers( + sim: SimulationManager, + robot: Robot, +) -> None: + """Draw the initial right-arm TCP and the simulated left_ee link frame.""" + right_arm_ids = robot.get_joint_ids("right_arm") + right_arm_qpos = robot.get_qpos()[:, right_arm_ids] + right_tcp_xpos = robot.compute_fk( + qpos=right_arm_qpos, + name="right_arm", + to_matrix=True, + ) + left_ee_xpos = robot.get_link_pose( + link_name="left_ee", + to_matrix=True, + ) + + # Draw only environment 0 so multiple identical initial poses do not + # overlap when the demo is launched with more than one environment. + sim.draw_marker( + cfg=MarkerCfg( + name="initial_right_tcp", + marker_type="axis", + axis_xpos=right_tcp_xpos[0], + axis_size=0.005, + axis_len=0.15, + arena_index=0, + ) + ) + sim.draw_marker( + cfg=MarkerCfg( + name="initial_left_ee", + marker_type="axis", + axis_xpos=left_ee_xpos[0], + axis_size=0.003, + axis_len=0.10, + arena_index=0, + ) + ) + + logger.log_info( + "Initial right-arm TCP marker (axis length 0.15 m):\n" + f"{right_tcp_xpos[0].detach().cpu().numpy()}" + ) + logger.log_info( + "Initial left_ee marker (axis length 0.10 m):\n" + f"{left_ee_xpos[0].detach().cpu().numpy()}" + ) + + def create_table(sim: SimulationManager) -> RigidObject: """ Create a table rigid object in the simulation. @@ -420,6 +471,9 @@ def main(): table = create_table(sim) caffe = create_caffe(sim) cup = create_cup(sim) + + draw_initial_kinematic_markers(sim, robot) + sim.update(step=1) # apply random perturbation @@ -432,6 +486,10 @@ def main(): if sim.is_use_gpu_physics: sim.init_gpu_physics() + import pdb + + pdb.set_trace() + run_simulation(sim, robot, cup, caffe) logger.log_info("\n Press Ctrl+C to exit simulation loop.") diff --git a/tests/sim/objects/test_robot_cfg.py b/tests/sim/objects/test_robot_cfg.py index 48a97a04f..8c077e2a7 100644 --- a/tests/sim/objects/test_robot_cfg.py +++ b/tests/sim/objects/test_robot_cfg.py @@ -23,8 +23,11 @@ from embodichain.lab.sim.cfg import RobotCfg, JointDrivePropertiesCfg from embodichain.lab.sim.robots.dexforce_w1 import DexforceW1Cfg from embodichain.lab.sim.robots.dexforce_w1.types import ( + DexforceW1ArmSide, + DexforceW1HandBrand, DexforceW1Version, ) +from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec from embodichain.lab.sim.solvers import SRSSolverCfg from embodichain.utils import configclass from embodichain.lab.sim.utility.cfg_utils import merge_robot_cfg @@ -50,6 +53,37 @@ def test_dexforce_w1_rejects_unknown_fields(): DexforceW1Cfg.from_dict({"unsupported_variant": "value"}) +def test_w1_v025_eef_offset_applies_to_attach_and_tcp(): + v021 = get_w1_version_spec(DexforceW1Version.V021) + v025 = get_w1_version_spec(DexforceW1Version.V025) + expected_offset = np.eye(4) + expected_offset[2, 3] = 0.012 + + for arm_side in DexforceW1ArmSide: + np.testing.assert_allclose(v021.eef_attach_xpos(arm_side), np.eye(4)) + np.testing.assert_allclose(v025.eef_attach_xpos(arm_side), expected_offset) + np.testing.assert_allclose( + v025.tcp(arm_side), + expected_offset @ v021.tcp(arm_side), + ) + np.testing.assert_allclose( + v025.hand_attach_xpos(DexforceW1HandBrand.BRAINCO_HAND, arm_side), + expected_offset + @ v021.hand_attach_xpos(DexforceW1HandBrand.BRAINCO_HAND, arm_side), + ) + + +def test_w1_v025_eef_offset_composes_with_custom_attach(): + spec = get_w1_version_spec(DexforceW1Version.V025) + custom_attach = np.eye(4) + custom_attach[:3, 3] = [0.01, -0.02, 0.03] + + result = spec.compose_eef_attach_xpos(DexforceW1ArmSide.RIGHT, custom_attach) + + np.testing.assert_allclose(result[:3, 3], [0.01, -0.02, 0.042]) + np.testing.assert_allclose(result[:3, :3], np.eye(3)) + + class _RoundTripVariant(enum.Enum): A = "a" B = "b" From 6550640276fef02a64b0c433e402b08b23ad786e Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Wed, 29 Jul 2026 16:28:00 +0800 Subject: [PATCH 4/9] update doc --- docs/source/resources/robot/dexforce_w1.md | 54 ++++++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/docs/source/resources/robot/dexforce_w1.md b/docs/source/resources/robot/dexforce_w1.md index a2c484032..9040efaa4 100644 --- a/docs/source/resources/robot/dexforce_w1.md +++ b/docs/source/resources/robot/dexforce_w1.md @@ -117,6 +117,39 @@ arm URDFs, while configurable robot assembly reads all components from the same extracted directory. The V025 head already contains the `eyes` link and joint, so the assembly builder does not inject a duplicate eyes sensor. +### Version-owned end-effector offset + +Different arm revisions may place the physical mounting surface at different +positions relative to the arm `ee` frame. This difference belongs to the W1 +revision, not to a BrainCo hand, DH gripper, PIKA gripper, or any other +end-effector. + +`W1VersionSpec.default_eef_attach_xpos` is the single source of truth for this +revision offset: + +| Version | Left arm | Right arm | +|---------|----------|-----------| +| V021 | Identity | Identity | +| V025 | `+0.012 m` along the `ee` frame Z axis | `+0.012 m` along the `ee` frame Z axis | + +The final assembly transform and solver TCP are derived as follows: + +```python +final_attach_xpos = version_attach_xpos @ eef_attach_xpos +final_tcp = version_attach_xpos @ solver_tcp +``` + +Therefore, the V025 offset affects both the assembled end-effector position and +FK/IK results. The offset is also applied when callers provide a custom +`hand_attach_xposes` value, a custom `left_hand`/`right_hand` component +transform, or an explicit arm TCP through `DexforceW1Cfg.from_dict`. +Serialization removes the derived offset and restores it on loading, so a +configuration round trip does not apply the offset twice. + +Do not manually add the 12 mm correction to an end-effector transform or TCP. +Those values must describe the end-effector relative to the standard mounting +surface; the W1 version layer adds the robot revision correction. + Per-component version overrides are supported for controlled migrations: ```python @@ -132,8 +165,19 @@ cfg = DexforceW1Cfg.from_dict( ) ``` -To add another W1 revision, register its enum value and download dataset, then -add one `W1VersionSpec` entry in -`embodichain/lab/sim/robots/dexforce_w1/specs.py`. Builders, control parts, -assembly, TCP selection, analytical parameters and FK/IK do not require -revision-specific branches. +To add another W1 revision: + +1. Register the new `DexforceW1Version` value and dataset archive. +2. Add one `W1VersionSpec` entry in + `embodichain/lab/sim/robots/dexforce_w1/specs.py`. +3. Register component URDF paths and the full-robot URDF path. +4. Set the arm kinematic parameters and + `default_eef_attach_xpos` for both sides. Use identity only after confirming + that the arm `ee` frame is already at the physical mounting surface. +5. Verify that the same version offset is present in both the assembled + end-effector pose and the final FK/IK TCP. +6. Validate hand/gripper mounting, wrist cameras, FK/IK, VR teleoperation, and + real2sim task regression. + +Builders, control parts, assembly, TCP selection, analytical parameters and +FK/IK then use the version specification without revision-specific branches. From b34f702037db7ba91ed3b7178b4a8bce0613d55c Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Thu, 30 Jul 2026 17:16:18 +0800 Subject: [PATCH 5/9] remove unnecessary --- .../lab/sim/robots/dexforce_w1/specs.py | 6 ++ examples/sim/demo/grasp_cup_to_caffe.py | 58 +------------------ 2 files changed, 7 insertions(+), 57 deletions(-) diff --git a/embodichain/lab/sim/robots/dexforce_w1/specs.py b/embodichain/lab/sim/robots/dexforce_w1/specs.py index 44569f5fb..f9f3fa8ee 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/specs.py +++ b/embodichain/lab/sim/robots/dexforce_w1/specs.py @@ -6,6 +6,12 @@ # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ---------------------------------------------------------------------------- """Single source of truth for released Dexforce W1 hardware revisions.""" diff --git a/examples/sim/demo/grasp_cup_to_caffe.py b/examples/sim/demo/grasp_cup_to_caffe.py index 9eab9ee2c..cfa0bab74 100644 --- a/examples/sim/demo/grasp_cup_to_caffe.py +++ b/examples/sim/demo/grasp_cup_to_caffe.py @@ -94,7 +94,7 @@ def create_robot(sim: SimulationManager) -> Robot: cfg = DexforceW1Cfg.from_dict( { "uid": "dexforce_w1", - "version": "v021", + "version": "v025", "init_pos": [0.4, -0.5, 0.0], } ) @@ -160,56 +160,6 @@ def create_robot(sim: SimulationManager) -> Robot: return sim.add_robot(cfg=cfg) -def draw_initial_kinematic_markers( - sim: SimulationManager, - robot: Robot, -) -> None: - """Draw the initial right-arm TCP and the simulated left_ee link frame.""" - right_arm_ids = robot.get_joint_ids("right_arm") - right_arm_qpos = robot.get_qpos()[:, right_arm_ids] - right_tcp_xpos = robot.compute_fk( - qpos=right_arm_qpos, - name="right_arm", - to_matrix=True, - ) - left_ee_xpos = robot.get_link_pose( - link_name="left_ee", - to_matrix=True, - ) - - # Draw only environment 0 so multiple identical initial poses do not - # overlap when the demo is launched with more than one environment. - sim.draw_marker( - cfg=MarkerCfg( - name="initial_right_tcp", - marker_type="axis", - axis_xpos=right_tcp_xpos[0], - axis_size=0.005, - axis_len=0.15, - arena_index=0, - ) - ) - sim.draw_marker( - cfg=MarkerCfg( - name="initial_left_ee", - marker_type="axis", - axis_xpos=left_ee_xpos[0], - axis_size=0.003, - axis_len=0.10, - arena_index=0, - ) - ) - - logger.log_info( - "Initial right-arm TCP marker (axis length 0.15 m):\n" - f"{right_tcp_xpos[0].detach().cpu().numpy()}" - ) - logger.log_info( - "Initial left_ee marker (axis length 0.10 m):\n" - f"{left_ee_xpos[0].detach().cpu().numpy()}" - ) - - def create_table(sim: SimulationManager) -> RigidObject: """ Create a table rigid object in the simulation. @@ -472,8 +422,6 @@ def main(): caffe = create_caffe(sim) cup = create_cup(sim) - draw_initial_kinematic_markers(sim, robot) - sim.update(step=1) # apply random perturbation @@ -486,10 +434,6 @@ def main(): if sim.is_use_gpu_physics: sim.init_gpu_physics() - import pdb - - pdb.set_trace() - run_simulation(sim, robot, cup, caffe) logger.log_info("\n Press Ctrl+C to exit simulation loop.") From 7305d45055c3c47ab4e0df69775540dbd741b50a Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Fri, 31 Jul 2026 15:45:51 +0800 Subject: [PATCH 6/9] huggingface download assets --- docs/source/resources/robot/dexforce_w1.md | 19 +++--- embodichain/data/assets/w1_assets.py | 38 +++++++++++- .../lab/sim/robots/dexforce_w1/specs.py | 62 +++++++++---------- .../lab/sim/robots/dexforce_w1/types.py | 1 + tests/sim/objects/test_robot_cfg.py | 60 ++++++++++++++++++ 5 files changed, 137 insertions(+), 43 deletions(-) diff --git a/docs/source/resources/robot/dexforce_w1.md b/docs/source/resources/robot/dexforce_w1.md index 9040efaa4..421a8b14b 100644 --- a/docs/source/resources/robot/dexforce_w1.md +++ b/docs/source/resources/robot/dexforce_w1.md @@ -52,7 +52,7 @@ This method allows fast setup using a dictionary, suitable for simple scenarios **Parameters:** - `uid`: Unique robot identifier (string). -- `version`: Robot version, e.g., `v021` or `v025`. +- `version`: Robot version, e.g., `v021`, `v022`, or `v025`. ```python from embodichain.lab.sim.robots import DexforceW1Cfg @@ -92,15 +92,15 @@ Choose `build_dexforce_w1_cfg` for maximum flexibility and hardware customizatio | Type | Options / Values | Description | |-------------------------|-------------------------------------------------------|------------------------------------| | `DexforceW1HandBrand` | `BRAINCO_HAND`, `DH_PGC_GRIPPER`, `DH_PGC_GRIPPER_M` | Hand brand | -| `DexforceW1Version` | `V021`, `V025` | Release version | +| `DexforceW1Version` | `V021`, `V022`, `V025` | Release version | | `DexforceW1ArmSide` | `LEFT`, `RIGHT` | Left/right hand identifier | -## V025 asset layout and version extension +## Unified asset layout and version extension -V025 uses one unified Hugging Face archive: +V022 and V025 use one unified Hugging Face archive per release: ```text -dexforce_w1/v025/w1.zip +dexforce_w1//w1.zip └── w1/ ├── robot.urdf ├── chassis.urdf @@ -112,10 +112,10 @@ dexforce_w1/v025/w1.zip └── collision/ ``` -The runtime downloads this archive once. Direct FK/IK uses `robot.urdf` or the -arm URDFs, while configurable robot assembly reads all components from the same -extracted directory. The V025 head already contains the `eyes` link and joint, -so the assembly builder does not inject a duplicate eyes sensor. +The runtime downloads each release archive once. Direct FK/IK uses `robot.urdf` +or the arm URDFs, while configurable robot assembly reads all components from +the same extracted directory. V022 and V025 assets are resolved through the +registered Hugging Face dataset archives and the shared asset cache. ### Version-owned end-effector offset @@ -130,6 +130,7 @@ revision offset: | Version | Left arm | Right arm | |---------|----------|-----------| | V021 | Identity | Identity | +| V022 | Identity (provisional; calibration required) | Identity (provisional; calibration required) | | V025 | `+0.012 m` along the `ee` frame Z axis | `+0.012 m` along the `ee` frame Z axis | The final assembly transform and solver TCP are derived as follows: diff --git a/embodichain/data/assets/w1_assets.py b/embodichain/data/assets/w1_assets.py index 34c2b2225..2fff2d0d3 100644 --- a/embodichain/data/assets/w1_assets.py +++ b/embodichain/data/assets/w1_assets.py @@ -29,9 +29,9 @@ # Main Asset: # - DexforceW1V021: # Represents the complete humanoid robot asset. -# - DexforceW1V025: -# Unified V025 archive containing the full robot and -# all component URDFs used by runtime assembly. +# - DexforceW1V022 / DexforceW1V025: +# Unified release archives containing the full robot and all component +# URDFs used by runtime assembly. # # Component Assets: # - DexforceW1ChassisV021: Chassis component @@ -73,6 +73,38 @@ def __init__(self, data_root: str = None): super().__init__(prefix, data_descriptor, path) +class DexforceW1V022(EmbodiChainDataset): + """Dataset class for the unified Dexforce W1 V022 release archive. + + Expected Hugging Face path and archive layout:: + + dexforce_w1/v022/w1.zip + w1/robot.urdf + w1/chassis.urdf + w1/torso.urdf + w1/head.urdf + w1/left_arm.urdf + w1/right_arm.urdf + + """ + + def __init__(self, data_root: str = None): + data_descriptor = o3d.data.DataDescriptor( + os.path.join( + EMBODICHAIN_DOWNLOAD_PREFIX, + w1_assets, + "v022", + "w1.zip", + ), + # Recalculate this if the archive is cleaned or rebuilt before upload. + "867f52d684b8cf5161f9c8e53ff493d2", + ) + prefix = type(self).__name__ + path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root + + super().__init__(prefix, data_descriptor, path) + + class DexforceW1V025(EmbodiChainDataset): """Dataset class for the unified Dexforce W1 V025 release archive. diff --git a/embodichain/lab/sim/robots/dexforce_w1/specs.py b/embodichain/lab/sim/robots/dexforce_w1/specs.py index f9f3fa8ee..d44b96d99 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/specs.py +++ b/embodichain/lab/sim/robots/dexforce_w1/specs.py @@ -18,9 +18,7 @@ from __future__ import annotations -import os from dataclasses import dataclass -from pathlib import Path import numpy as np from scipy.spatial.transform import Rotation as R @@ -72,7 +70,6 @@ class W1VersionSpec: wrist_camera_rpy: tuple[float, float, float] wrist_camera_xyz: tuple[float, float, float] head_contains_eyes: bool = False - local_asset_root_env: str | None = None @property def assembly_name(self) -> str: @@ -80,40 +77,15 @@ def assembly_name(self) -> str: def component_urdf(self, component_type: DexforceW1Type) -> str: try: - urdf_path = self.component_urdfs[component_type] + return self.component_urdfs[component_type] except KeyError as exc: raise ValueError( f"W1 {self.version.value} has no registered " f"{component_type.value} component asset." ) from exc - return self._resolve_local_urdf(urdf_path) def full_robot_urdf(self) -> str: - return self._resolve_local_urdf(self.full_robot_urdf_path) - - def _resolve_local_urdf(self, registered_path: str) -> str: - """Resolve a version-specific local asset override when configured.""" - if not self.local_asset_root_env: - return registered_path - local_root_value = os.getenv(self.local_asset_root_env) - if not local_root_value: - return registered_path - - local_root = Path(local_root_value).expanduser() - relative_path = registered_path.split("/w1/", maxsplit=1)[-1] - candidates = [ - local_root / relative_path, - local_root / "w1" / relative_path, - ] - for candidate in candidates: - if candidate.is_file(): - return str(candidate.resolve()) - - expected = " or ".join(str(candidate) for candidate in candidates) - raise FileNotFoundError( - f"{self.local_asset_root_env} is set to '{local_root}', but " - f"'{registered_path}' was not found. Expected {expected}." - ) + return self.full_robot_urdf_path def eef_attach_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: """Return the version-owned transform applied before every EEF.""" @@ -181,6 +153,13 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: DexforceW1Type.LEFT_ARM: "DexforceW1LeftArmV021/left_arm.urdf", DexforceW1Type.RIGHT_ARM: "DexforceW1RightArmV021/right_arm.urdf", } +_V022_COMPONENT_URDFS = { + DexforceW1Type.CHASSIS: "DexforceW1V022/w1/chassis.urdf", + DexforceW1Type.TORSO: "DexforceW1V022/w1/torso.urdf", + DexforceW1Type.HEAD: "DexforceW1V022/w1/head.urdf", + DexforceW1Type.LEFT_ARM: "DexforceW1V022/w1/left_arm.urdf", + DexforceW1Type.RIGHT_ARM: "DexforceW1V022/w1/right_arm.urdf", +} _V025_COMPONENT_URDFS = { DexforceW1Type.CHASSIS: "DexforceW1V025/w1/chassis.urdf", DexforceW1Type.TORSO: "DexforceW1V025/w1/torso.urdf", @@ -188,6 +167,7 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: DexforceW1Type.LEFT_ARM: "DexforceW1V025/w1/left_arm.urdf", DexforceW1Type.RIGHT_ARM: "DexforceW1V025/w1/right_arm.urdf", } +# Verified against the released V022 and V025 left/right arm URDF joint origins. _SHARED_D_LIST = (0.0, 0.0, 0.260, 0.0, 0.166, 0.098, 0.0) _EYES_ATTACH_XPOS = ( (-0.0, 0.25959, -0.96572, 0.091), @@ -207,6 +187,12 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: DexforceW1ArmSide.LEFT: _IDENTITY_XPOS, DexforceW1ArmSide.RIGHT: _IDENTITY_XPOS, } +# Provisional V022 baseline. Replace this with the measured arm-flange +# transform before declaring the release calibrated. +_V022_DEFAULT_EEF_ATTACH_XPOS = { + DexforceW1ArmSide.LEFT: _IDENTITY_XPOS, + DexforceW1ArmSide.RIGHT: _IDENTITY_XPOS, +} # Calibrated outward flange offset shared by every V025 end effector. _V025_EEF_ATTACH_XPOS = ( (1.0, 0.0, 0.0, 0.0), @@ -232,6 +218,21 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: wrist_camera_rpy=_WRIST_CAMERA_RPY, wrist_camera_xyz=_WRIST_CAMERA_XYZ, ), + DexforceW1Version.V022: W1VersionSpec( + version=DexforceW1Version.V022, + component_urdfs=_V022_COMPONENT_URDFS, + full_robot_urdf_path="DexforceW1V022/w1/robot.urdf", + # Verified from the V022 left/right arm URDF joint origins. + arm_d_list=_SHARED_D_LIST, + arm_base_z=0.1025, + default_eef_attach_xpos=_V022_DEFAULT_EEF_ATTACH_XPOS, + solver_tcp=_DEFAULT_TCP, + eyes_attach_xpos=_EYES_ATTACH_XPOS, + wrist_camera_rpy=_WRIST_CAMERA_RPY, + wrist_camera_xyz=_WRIST_CAMERA_XYZ, + # Verified from V022 head.urdf: it contains the eyes link and EYES joint. + head_contains_eyes=True, + ), DexforceW1Version.V025: W1VersionSpec( version=DexforceW1Version.V025, component_urdfs=_V025_COMPONENT_URDFS, @@ -245,7 +246,6 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: wrist_camera_rpy=_WRIST_CAMERA_RPY, wrist_camera_xyz=_WRIST_CAMERA_XYZ, head_contains_eyes=True, - local_asset_root_env="EMBODICHAIN_W1_V025_ROOT", ), } diff --git a/embodichain/lab/sim/robots/dexforce_w1/types.py b/embodichain/lab/sim/robots/dexforce_w1/types.py index 7ca056120..63aebbf3f 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/types.py +++ b/embodichain/lab/sim/robots/dexforce_w1/types.py @@ -28,6 +28,7 @@ class DexforceW1Version(enum.Enum): """Versioning for DexforceW1 components.""" V021 = "v021" + V022 = "v022" V025 = "v025" diff --git a/tests/sim/objects/test_robot_cfg.py b/tests/sim/objects/test_robot_cfg.py index 8c077e2a7..2bd8f2eb7 100644 --- a/tests/sim/objects/test_robot_cfg.py +++ b/tests/sim/objects/test_robot_cfg.py @@ -25,6 +25,7 @@ from embodichain.lab.sim.robots.dexforce_w1.types import ( DexforceW1ArmSide, DexforceW1HandBrand, + DexforceW1Type, DexforceW1Version, ) from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec @@ -84,6 +85,65 @@ def test_w1_v025_eef_offset_composes_with_custom_attach(): np.testing.assert_allclose(result[:3, :3], np.eye(3)) +def test_w1_v022_version_spec_is_registered(): + spec = get_w1_version_spec("v022") + + assert spec.version == DexforceW1Version.V022 + assert spec.assembly_name == "DexforceW1V022" + assert spec.full_robot_urdf() == "DexforceW1V022/w1/robot.urdf" + assert ( + spec.component_urdf(DexforceW1Type.LEFT_ARM) + == "DexforceW1V022/w1/left_arm.urdf" + ) + assert ( + spec.component_urdf(DexforceW1Type.RIGHT_ARM) + == "DexforceW1V022/w1/right_arm.urdf" + ) + + +def test_w1_v022_provisional_eef_baseline_is_composed_consistently(): + v021 = get_w1_version_spec(DexforceW1Version.V021) + v022 = get_w1_version_spec(DexforceW1Version.V022) + + for arm_side in DexforceW1ArmSide: + np.testing.assert_allclose(v022.eef_attach_xpos(arm_side), np.eye(4)) + np.testing.assert_allclose(v022.tcp(arm_side), v021.tcp(arm_side)) + np.testing.assert_allclose( + v022.hand_attach_xpos(DexforceW1HandBrand.BRAINCO_HAND, arm_side), + v021.hand_attach_xpos(DexforceW1HandBrand.BRAINCO_HAND, arm_side), + ) + + +def test_w1_v022_cfg_uses_registered_asset_paths(tmp_path, monkeypatch): + import embodichain.lab.sim.cfg as sim_cfg + from embodichain.lab.sim.robots.dexforce_w1 import utils as w1_utils + + registered_paths = [] + + def resolve_registered_path(path): + registered_paths.append(path) + resolved = tmp_path / path + resolved.parent.mkdir(parents=True, exist_ok=True) + resolved.write_text("") + return str(resolved) + + monkeypatch.setattr(w1_utils, "get_data_path", resolve_registered_path) + monkeypatch.setattr(sim_cfg, "get_data_path", resolve_registered_path) + cfg = DexforceW1Cfg.from_dict( + { + "uid": "dexforce_w1_v022", + "version": "v022", + "with_default_eef": False, + } + ) + + assert cfg.version == DexforceW1Version.V022 + assert cfg.uid == "dexforce_w1_v022" + assert cfg.urdf_cfg.fname == "DexforceW1V022" + assert "DexforceW1V022/w1/left_arm.urdf" in registered_paths + assert "DexforceW1V022/w1/right_arm.urdf" in registered_paths + + class _RoundTripVariant(enum.Enum): A = "a" B = "b" From 51610b0a88cf40f4d80ee123cd5bcf0936084441 Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Mon, 3 Aug 2026 16:35:34 +0800 Subject: [PATCH 7/9] fix --- .../topics/robot-system/robot-system.md | 38 +- .../source/features/workspace_analyzer/cli.md | 6 +- docs/source/resources/robot/dexforce_w1.md | 97 ++- embodichain/lab/scripts/analyze_workspace.py | 6 +- embodichain/lab/sim/cfg.py | 11 +- embodichain/lab/sim/robots/dexforce_w1/cfg.py | 185 +++--- .../lab/sim/robots/dexforce_w1/hand_specs.py | 202 +++++++ .../lab/sim/robots/dexforce_w1/params.py | 15 +- .../lab/sim/robots/dexforce_w1/specs.py | 59 +- .../lab/sim/robots/dexforce_w1/types.py | 44 +- .../lab/sim/robots/dexforce_w1/utils.py | 570 +++++------------- embodichain/lab/sim/utility/cfg_utils.py | 5 +- embodichain/lab/sim/workspace/analyzer.py | 21 +- .../workspace/analyze_cartesian_workspace.py | 1 - .../sim/workspace/analyze_joint_workspace.py | 1 - .../sim/workspace/analyze_plane_workspace.py | 1 - tests/sim/objects/test_robot_cfg.py | 191 +++++- 17 files changed, 775 insertions(+), 678 deletions(-) create mode 100644 embodichain/lab/sim/robots/dexforce_w1/hand_specs.py diff --git a/agent_context/topics/robot-system/robot-system.md b/agent_context/topics/robot-system/robot-system.md index 8af2a8fb7..bf7e4ce9a 100644 --- a/agent_context/topics/robot-system/robot-system.md +++ b/agent_context/topics/robot-system/robot-system.md @@ -33,7 +33,7 @@ ObjectBaseCfg uid, init_pos, init_rot, init_local_pose │ disable_self_collision, init_qpos, body_scale, │ build_pk_chain, use_usd_properties └─ RobotCfg control_parts, urdf_cfg, solver_cfg, drive_pros (override default to "force") - ├─ DexforceW1Cfg version, with_default_eef + ├─ DexforceW1Cfg version, hand_versions, with_default_eef └─ CobotMagicCfg (dual-arm defaults) ``` @@ -51,8 +51,8 @@ Key fields on `RobotCfg`: ## The robot config protocol -Every robot config subclasses `RobotCfg` and overrides two hooks. `from_dict` is a -3-line template — do not reimplement it: +Every robot config subclasses `RobotCfg` and overrides the construction hooks. +The default `from_dict` implementation is this 3-line template: ```python @classmethod @@ -69,8 +69,26 @@ def from_dict(cls, init_dict): reading the PK URDF from a single `_pk_urdf_path` source (a property for constant-path robots, a method when the path depends on a variant). -Serialization (`to_dict` / `to_string` / `save_to_file`) is **inherited** from -`RobotCfg` and round-trips: `RobotCfg.from_dict(cfg.to_dict())` reproduces the cfg. +Serialization (`to_dict` / `to_string` / `save_to_file`) is inherited from +`RobotCfg` unless the config stores version-derived runtime transforms. +`DexforceW1Cfg` is the current exception: serialized hand transforms and solver +TCPs are raw end-effector values, while the in-memory values include the selected +W1 revision offset. Its `to_dict` removes that derived offset and `from_dict` +restores it. Every config, including this exception, must satisfy +`type(cfg).from_dict(cfg.to_dict())` without changing the selected components or +applying a derived transform twice. + +W1 robot and hand releases use separate types and registries: + +- `DexforceW1Version` selects body/arm assets, kinematics, and flange calibration + through `specs.py`. +- `DexforceW1HandVersion` selects external hand/gripper assets, joint metadata, + and raw mounting transforms through `hand_specs.py`. +- The current default is hand V021 for every W1 robot version. Never infer a + hand version from `DexforceW1Version`. +- `DexforceW1Cfg` always represents a complete dual-arm W1. Structural + `include_*`, `arm_sides`, and mixed `component_versions` options are not part + of its public protocol. .. note:: `merge_robot_cfg` calls the base `RobotCfg.from_dict` internally, so the @@ -119,7 +137,7 @@ Full guide: `docs/source/tutorial/add_robot.rst` · Quick reference: `docs/sourc Minimal checklist: 1. Create a `@configclass` inheriting `RobotCfg`. 2. Override `_build_defaults(self, init_dict=None)` — read variant fields from `init_dict`, then populate `urdf_cfg`, `control_parts`, `solver_cfg`, `drive_pros` and `attrs`. -3. Keep `from_dict` as the 3-line template (`cls()` → `_build_defaults` → `merge_robot_cfg`); do not reimplement. +3. Keep `from_dict` as the 3-line template (`cls()` → `_build_defaults` → `merge_robot_cfg`) unless version-derived state requires an explicitly documented post-merge step. 4. Define `control_parts` mapping part names to joint name lists. 5. Configure `solver_cfg` (one `SolverCfg` per control part). 6. Implement `build_pk_serial_chain` reading from `_pk_urdf_path` (property for constant paths, method for variant-dependent). @@ -128,13 +146,15 @@ Minimal checklist: 9. Add robot docs in `docs/source/resources/robot/` and update `docs/source/resources/robot/index.rst`. 10. Test — a `__main__` smoke test + the DOF drift guard + `preview-asset` CLI. -Serialization (`to_dict` / `save_to_file`) is inherited — no need to implement it. +Serialization (`to_dict` / `save_to_file`) is normally inherited. A robot-specific +override requires documented raw/final semantics and regression tests for default, +custom-transform, component-version, and public-builder round-trips. ## Available Robots | Robot | Config Class | Module | Structure | Notes | |---|---|---|---|---| -| DexForce W1 | `DexforceW1Cfg` | `embodichain/lab/sim/robots/dexforce_w1/` | Package (`cfg.py`, `types.py`, `params.py`, `utils.py`) | Humanoid; versioned chassis, torso, head, left/right arm and hand components | +| DexForce W1 | `DexforceW1Cfg` | `embodichain/lab/sim/robots/dexforce_w1/` | Package (`cfg.py`, `types.py`, `specs.py`, `hand_specs.py`, `params.py`, `utils.py`) | Humanoid; robot and hand versions are independently registered | | CobotMagic | `CobotMagicCfg` | `embodichain/lab/sim/robots/cobotmagic.py` | Single file | Dual-arm; 6-DOF arms + 2-DOF grippers; uses OPW solver | ## Common Failure Modes @@ -148,4 +168,4 @@ Serialization (`to_dict` / `save_to_file`) is inherited — no need to implement - **`all` instead of `__all__`** — lowercase `all` does not work with `from module import *`; use `__all__`. - **`solver_cfg` set in multiple places** — set it once in `_build_defaults` only; setting it elsewhere (e.g. a build helper) gets overwritten and is dead code. - **PK URDF drifts from the sim URDF** — route `build_pk_serial_chain` through `_pk_urdf_path` and keep the DOF drift-guard test so silent drift is caught. -- **Reimplementing `from_dict`** — keep the 3-line template; put construction logic in `_build_defaults`. (Making the base `RobotCfg.from_dict` call `merge_robot_cfg` would infinite-recurse, since `merge_robot_cfg` calls `RobotCfg.from_dict`.) +- **Reimplementing `from_dict` without a serialization protocol** — keep the 3-line template by default. If derived version state requires post-merge processing, document the raw/final values and test round-trips. (Making the base `RobotCfg.from_dict` call `merge_robot_cfg` would infinite-recurse, since `merge_robot_cfg` calls `RobotCfg.from_dict`.) diff --git a/docs/source/features/workspace_analyzer/cli.md b/docs/source/features/workspace_analyzer/cli.md index c1698fc7f..2e53a2de6 100644 --- a/docs/source/features/workspace_analyzer/cli.md +++ b/docs/source/features/workspace_analyzer/cli.md @@ -39,19 +39,19 @@ to `left_arm`/`right_arm` or the first available part). | Argument | Description | |----------|-------------| | `--robot NAME` | Predefined robot. Choices: `franka_panda`, `cobotmagic`, `dexforce_w1`, `ur`. | -| `--robot-params JSON` | JSON dict of variant overrides, e.g. `{"robot_type":"ur5"}` or `{"version":"v021","arm_kind":"industrial"}`. | +| `--robot-params JSON` | JSON dict of variant overrides, e.g. `{"robot_type":"ur5"}` or `{"version":"v025","with_default_eef":false}`. | | `--control-part NAME` | Control part to analyze (e.g. `arm`, `left_arm`, `right_arm`). Optional; auto-selected if omitted. | ```bash embodichain analyze-workspace \ --robot dexforce_w1 \ - --robot-params '{"version":"v021","arm_kind":"industrial"}' \ + --robot-params '{"version":"v025","with_default_eef":false}' \ --control-part left_arm --mode joint_space --num-samples 20000 ``` Available control parts per robot: `franka_panda` (`arm`, `hand`), `cobotmagic` (`left_arm`, `left_eef`, `right_arm`, `right_eef`), `dexforce_w1` -(`left_arm`, `right_arm` for industrial), `ur` (`arm`). +(`left_arm`, `left_eef`, `right_arm`, `right_eef`), `ur` (`arm`). ## Generic asset (`--asset`) diff --git a/docs/source/resources/robot/dexforce_w1.md b/docs/source/resources/robot/dexforce_w1.md index 421a8b14b..6acf8e3da 100644 --- a/docs/source/resources/robot/dexforce_w1.md +++ b/docs/source/resources/robot/dexforce_w1.md @@ -18,45 +18,33 @@ Dexforce W1 is a dual-arm humanoid robot developed by DexForce Technology Co., L - Flexible URDF assembly and simulation configuration - Compatible with SimulationManager simulation environment -## Method 1: Fine-grained configuration with `build_dexforce_w1_cfg` +## Configuration with `DexforceW1Cfg.from_dict` -This method allows you to specify detailed parameters for each arm and hand. +`DexforceW1Cfg.from_dict` is the single public construction entry point. A W1 +configuration always describes the complete chassis, torso, head, eyes, wrist +cameras, and both arms for one robot version. **Parameters:** - `hand_types`: Dict specifying hand brand for each arm side (`LEFT`/`RIGHT`). - `hand_versions`: Dict specifying hand version for each arm side. - -```python -hand_types = { - DexforceW1ArmSide.LEFT: DexforceW1HandBrand.BRAINCO_HAND, - DexforceW1ArmSide.RIGHT: DexforceW1HandBrand.BRAINCO_HAND, -} -hand_versions = { - DexforceW1ArmSide.LEFT: DexforceW1Version.V025, - DexforceW1ArmSide.RIGHT: DexforceW1Version.V025, -} -cfg = build_dexforce_w1_cfg( - version=DexforceW1Version.V025, - hand_types=hand_types, - hand_versions=hand_versions, -) -robot = sim.add_robot(cfg=cfg) -print("DexforceW1 robot added to the simulation.") -``` - -## Method 2: Quick configuration with `DexforceW1Cfg.from_dict` - -This method allows fast setup using a dictionary, suitable for simple scenarios or when default options are sufficient. Recommended for rapid prototyping or when only basic parameters are needed. - -**Parameters:** - -- `uid`: Unique robot identifier (string). -- `version`: Robot version, e.g., `v021`, `v022`, or `v025`. +- `with_default_eef`: Whether to install the registered default end effectors. +- `hand_attach_xposes`: Optional hand-specific mounting transforms. ```python from embodichain.lab.sim.robots import DexforceW1Cfg -cfg = DexforceW1Cfg.from_dict({"uid": "dexforce_w1", "version": "v025"}) + +cfg = DexforceW1Cfg.from_dict( + { + "uid": "dexforce_w1", + "version": "v025", + "hand_types": { + "left": "BRAINCO_HAND", + "right": "BRAINCO_HAND", + }, + "hand_versions": {"left": "v021", "right": "v021"}, + } +) robot = sim.add_robot(cfg=cfg) print("DexforceW1 robot added to the simulation.") ``` @@ -77,22 +65,13 @@ robot.set_qpos(qpos=[0, np.pi/4, 0.0, np.pi/2, np.pi/4, 0.0, 0.0], joint_ids=rob This mirrored design simplifies motion planning and ensures that both arms can perform coordinated or symmetric actions efficiently. -## Configuration Method Selection - -Choose `build_dexforce_w1_cfg` for maximum flexibility and hardware customization. Use `DexforceW1Cfg.from_dict` for quick setup and prototyping. Both methods produce a configuration object (`cfg`) that can be passed to `sim.add_robot(cfg=cfg)` to add the robot to the simulation. - -**Note:** - -- Ensure parameter types match the expected enums or strings. -- For advanced simulation scenarios, prefer the fine-grained method. -- For most demos or simple tasks, the quick method is sufficient. - ## Type Descriptions | Type | Options / Values | Description | |-------------------------|-------------------------------------------------------|------------------------------------| | `DexforceW1HandBrand` | `BRAINCO_HAND`, `DH_PGC_GRIPPER`, `DH_PGC_GRIPPER_M` | Hand brand | | `DexforceW1Version` | `V021`, `V022`, `V025` | Release version | +| `DexforceW1HandVersion` | `V021` | External hand/gripper asset version | | `DexforceW1ArmSide` | `LEFT`, `RIGHT` | Left/right hand identifier | ## Unified asset layout and version extension @@ -151,20 +130,20 @@ Do not manually add the 12 mm correction to an end-effector transform or TCP. Those values must describe the end-effector relative to the standard mounting surface; the W1 version layer adds the robot revision correction. -Per-component version overrides are supported for controlled migrations: +One `DexforceW1Version` selects the complete W1 robot release. Mixed body/arm +versions are intentionally unsupported because their assets, kinematics, TCP, +and camera calibration must remain consistent. -```python -cfg = DexforceW1Cfg.from_dict( - { - "uid": "dexforce_w1", - "version": "v021", - "component_versions": { - "left_arm": "v025", - "right_arm": "v025", - }, - } -) -``` +Robot and hand versions are independent. `DexforceW1Version` selects the W1 +body, arm assets, kinematics, and flange calibration. `DexforceW1HandVersion` +selects an external hand or gripper asset from +`embodichain/lab/sim/robots/dexforce_w1/hand_specs.py`. + +The currently released BrainCo hand and DH gripper registrations all use +`DexforceW1HandVersion.V021`. Therefore W1 V021, V022, and V025 select hand V021 +by default. This is an explicit default, not a compatibility alias keyed by the +robot version. A future hand release is added by registering a new hand version +and hand spec; it does not require adding aliases for every W1 robot version. To add another W1 revision: @@ -180,5 +159,13 @@ To add another W1 revision: 6. Validate hand/gripper mounting, wrist cameras, FK/IK, VR teleoperation, and real2sim task regression. -Builders, control parts, assembly, TCP selection, analytical parameters and -FK/IK then use the version specification without revision-specific branches. +To add another hand release: + +1. Add a `DexforceW1HandVersion` value. +2. Register each supported brand and side in `hand_specs.py`, including its + URDF, joint names, root/end links, and mounting transform. +3. Select it explicitly through `hand_versions`; an unregistered version fails + during config construction. + +Control parts, assembly, TCP selection, analytical parameters and FK/IK then use +the version specification without revision-specific branches. diff --git a/embodichain/lab/scripts/analyze_workspace.py b/embodichain/lab/scripts/analyze_workspace.py index ee1c22301..7f1649c14 100644 --- a/embodichain/lab/scripts/analyze_workspace.py +++ b/embodichain/lab/scripts/analyze_workspace.py @@ -29,7 +29,7 @@ embodichain analyze-workspace \\ --robot dexforce_w1 \\ - --robot-params '{"version":"v021","arm_kind":"industrial"}' \\ + --robot-params '{"version":"v025","with_default_eef":false}' \\ --control-part left_arm --mode joint_space # Generic URDF/USD asset -- requires --ee-link (and --joints for grippers) @@ -247,7 +247,7 @@ def build_preset_robot_cfg( Uses the robot's built-in ``control_parts`` and ``solver_cfg``, so the end-effector link and joint names come from the preset. Pass ``--robot-params`` (JSON) for variant overrides such as - ``{"robot_type": "ur5"}`` or ``{"version": "v021", "arm_kind": "industrial"}``. + ``{"robot_type": "ur5"}`` or ``{"version": "v025", "with_default_eef": false}``. Args: args: Parsed CLI arguments with ``args.robot`` and optionally @@ -775,7 +775,7 @@ def parse_args(argv: Sequence[str] | None = None) -> argparse.Namespace: type=str, default=None, help="JSON dict of variant overrides for --robot, e.g. " - '{"robot_type":"ur5"} or {"version":"v021","arm_kind":"industrial"}.', + '{"robot_type":"ur5"} or {"version":"v025","with_default_eef":false}.', ) robot.add_argument( "--control-part", diff --git a/embodichain/lab/sim/cfg.py b/embodichain/lab/sim/cfg.py index aa782b0e5..815008c25 100644 --- a/embodichain/lab/sim/cfg.py +++ b/embodichain/lab/sim/cfg.py @@ -1842,6 +1842,8 @@ def to_dict(self): def serialize(obj, _visited=None): if _visited is None: _visited = set() + if isinstance(obj, enum.Enum): + return obj.value if isinstance(obj, (dict, object)) and not isinstance( obj, (str, int, float, bool, type(None)) ): @@ -1850,12 +1852,15 @@ def serialize(obj, _visited=None): return None _visited.add(obj_id) - if isinstance(obj, enum.Enum): - return obj.value if isinstance(obj, np.ndarray): return obj.tolist() if isinstance(obj, dict): - return {str(k): serialize(v, _visited) for k, v in obj.items()} + return { + (k.value if isinstance(k, enum.Enum) else str(k)): serialize( + v, _visited + ) + for k, v in obj.items() + } if isinstance(obj, (list, tuple)): return [serialize(v, _visited) for v in obj] if hasattr(obj, "to_dict") and obj is not self: diff --git a/embodichain/lab/sim/robots/dexforce_w1/cfg.py b/embodichain/lab/sim/robots/dexforce_w1/cfg.py index 3472635d9..823d164f4 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/cfg.py +++ b/embodichain/lab/sim/robots/dexforce_w1/cfg.py @@ -24,18 +24,23 @@ from typing import TYPE_CHECKING, Dict from embodichain.lab.sim.robots.dexforce_w1.types import ( - DexforceW1HandBrand, DexforceW1ArmSide, + DexforceW1HandBrand, + DexforceW1HandVersion, DexforceW1Version, - DexforceW1Type, + parse_w1_arm_side, + parse_w1_hand_brand, + parse_w1_hand_version, + parse_w1_version, ) from embodichain.lab.sim.robots.dexforce_w1.utils import ( - build_dexforce_w1_cfg, + build_dexforce_w1_assembly_urdf_cfg, + build_dexforce_w1_control_parts, ) -from embodichain.lab.sim.robots.dexforce_w1.specs import ( - get_w1_version_spec, - normalize_component_versions, +from embodichain.lab.sim.robots.dexforce_w1.hand_specs import ( + get_default_w1_hand_version, ) +from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec from embodichain.lab.sim.cfg import ( RobotCfg, JointDrivePropertiesCfg, @@ -54,7 +59,9 @@ class DexforceW1Cfg(RobotCfg): version: DexforceW1Version = DexforceW1Version.V021 with_default_eef: bool = True - component_versions: dict | None = None + hand_types: dict | None = None + hand_versions: dict[DexforceW1ArmSide, DexforceW1HandVersion] | None = None + hand_attach_xposes: dict | None = None @classmethod def from_dict( @@ -80,14 +87,6 @@ def from_dict( cfg._compose_user_eef_overrides(init_dict) return cfg - def _arm_version(self, arm_side: DexforceW1ArmSide) -> DexforceW1Version: - component_type = ( - DexforceW1Type.LEFT_ARM - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM - ) - return (self.component_versions or {}).get(component_type, self.version) - def _compose_user_eef_overrides(self, init_dict: dict) -> None: """Apply the version offset to user-supplied EEF transforms and TCPs.""" side_by_component = { @@ -113,7 +112,7 @@ def _compose_user_eef_overrides(self, init_dict: dict) -> None: component = self.urdf_cfg.components.get(component_name) if component is None: continue - spec = get_w1_version_spec(self._arm_version(arm_side)) + spec = get_w1_version_spec(self.version) component["transform"] = spec.compose_eef_attach_xpos( arm_side, component["transform"] ) @@ -129,7 +128,7 @@ def _compose_user_eef_overrides(self, init_dict: dict) -> None: solver = self.solver_cfg.get(part_name) if solver is None: continue - spec = get_w1_version_spec(self._arm_version(arm_side)) + spec = get_w1_version_spec(self.version) solver.tcp = spec.compose_eef_attach_xpos(arm_side, solver.tcp) def to_dict(self): @@ -144,7 +143,7 @@ def to_dict(self): component = components.get(component_name) if not isinstance(component, dict) or component.get("transform") is None: continue - spec = get_w1_version_spec(self._arm_version(arm_side)) + spec = get_w1_version_spec(self.version) offset_inv = np.linalg.inv(spec.eef_attach_xpos(arm_side)) component["transform"] = ( offset_inv @ np.asarray(component["transform"], dtype=float) @@ -156,7 +155,7 @@ def to_dict(self): solver = solver_cfg.get(part_name) if not isinstance(solver, dict) or solver.get("tcp") is None: continue - spec = get_w1_version_spec(self._arm_version(arm_side)) + spec = get_w1_version_spec(self.version) offset_inv = np.linalg.inv(spec.eef_attach_xpos(arm_side)) solver["tcp"] = ( offset_inv @ np.asarray(solver["tcp"], dtype=float) @@ -171,39 +170,51 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: ``solver_cfg``, ``drive_pros`` and ``attrs``. """ init_dict = init_dict or {} - version = init_dict.get("version", DexforceW1Version.V021) - with_default_eef = init_dict.get("with_default_eef", True) - - self.version = ( - DexforceW1Version(version) if isinstance(version, str) else version - ) - self.with_default_eef = with_default_eef - self.component_versions = normalize_component_versions( - init_dict.get("component_versions") + self.version = parse_w1_version( + init_dict.get("version", DexforceW1Version.V021) ) + self.with_default_eef = bool(init_dict.get("with_default_eef", True)) - # Build the version-matched URDF assembly and control-part definitions. - hand_types = { - DexforceW1ArmSide.LEFT: DexforceW1HandBrand.BRAINCO_HAND, - DexforceW1ArmSide.RIGHT: DexforceW1HandBrand.BRAINCO_HAND, + self.hand_types = { + parse_w1_arm_side(side): parse_w1_hand_brand(brand) + for side, brand in init_dict.get("hand_types", {}).items() } - hand_versions = { - DexforceW1ArmSide.LEFT: self.version, - DexforceW1ArmSide.RIGHT: self.version, + configured_hand_versions = { + parse_w1_arm_side(side): parse_w1_hand_version(version) + for side, version in init_dict.get("hand_versions", {}).items() + } + self.hand_versions = { + side: configured_hand_versions.get( + side, + get_default_w1_hand_version( + self.hand_types.get(side, DexforceW1HandBrand.BRAINCO_HAND) + ), + ) + for side in DexforceW1ArmSide } - base_cfg = build_dexforce_w1_cfg( + self.hand_attach_xposes = { + parse_w1_arm_side(side): np.asarray(transform, dtype=float) + for side, transform in init_dict.get("hand_attach_xposes", {}).items() + } + + self.urdf_cfg = build_dexforce_w1_assembly_urdf_cfg( + version=self.version, + hand_types=self.hand_types, + hand_versions=self.hand_versions, + hand_attach_xposes=self.hand_attach_xposes, + include_hand=self.with_default_eef, + ) + self.control_parts = build_dexforce_w1_control_parts( version=self.version, - hand_types=hand_types, - hand_versions=hand_versions, - include_hand=with_default_eef, - component_versions=self.component_versions, - solver_cfg={}, + hand_types=self.hand_types, + hand_versions=self.hand_versions, + include_hand=self.with_default_eef, ) - self.urdf_cfg = base_cfg.urdf_cfg - self.control_parts = base_cfg.control_parts # physics - physics = self._build_default_physics_cfgs(with_default_eef=with_default_eef) + physics = self._build_default_physics_cfgs( + with_default_eef=self.with_default_eef + ) for key, value in physics.items(): setattr(self, key, value) @@ -217,46 +228,22 @@ def _build_default_solver_cfg(self): W1ArmKineParams, ) - left_version = self._arm_version(DexforceW1ArmSide.LEFT) - right_version = self._arm_version(DexforceW1ArmSide.RIGHT) - left_version_spec = get_w1_version_spec(left_version) - right_version_spec = get_w1_version_spec(right_version) - w1_left_arm_params = W1ArmKineParams( - arm_side=DexforceW1ArmSide.LEFT, - version=left_version, - ) - w1_right_arm_params = W1ArmKineParams( - arm_side=DexforceW1ArmSide.RIGHT, - version=right_version, - ) - - left_arm_tcp = left_version_spec.tcp(DexforceW1ArmSide.LEFT) - right_arm_tcp = right_version_spec.tcp(DexforceW1ArmSide.RIGHT) - - return { - "right_arm": SRSSolverCfg( - end_link_name="right_ee", - root_link_name="right_arm_base", - dh_params=w1_right_arm_params.dh_params, - user_qpos_limits=w1_right_arm_params.qpos_limits, - T_e_oe=w1_right_arm_params.T_e_oe, - T_b_ob=w1_right_arm_params.T_b_ob, - link_lengths=w1_right_arm_params.link_lengths, - rotation_directions=w1_right_arm_params.rotation_directions, - tcp=right_arm_tcp, - ), - "left_arm": SRSSolverCfg( - end_link_name="left_ee", - root_link_name="left_arm_base", - dh_params=w1_left_arm_params.dh_params, - user_qpos_limits=w1_left_arm_params.qpos_limits, - T_e_oe=w1_left_arm_params.T_e_oe, - T_b_ob=w1_left_arm_params.T_b_ob, - link_lengths=w1_left_arm_params.link_lengths, - rotation_directions=w1_left_arm_params.rotation_directions, - tcp=left_arm_tcp, - ), - } + solver_cfg = {} + for arm_side in DexforceW1ArmSide: + params = W1ArmKineParams(arm_side=arm_side, version=self.version) + part_name = f"{arm_side.value}_arm" + solver_cfg[part_name] = SRSSolverCfg( + end_link_name=f"{arm_side.value}_ee", + root_link_name=f"{arm_side.value}_arm_base", + dh_params=params.dh_params, + user_qpos_limits=params.qpos_limits, + T_e_oe=params.T_e_oe, + T_b_ob=params.T_b_ob, + link_lengths=params.link_lengths, + rotation_directions=params.rotation_directions, + tcp=get_w1_version_spec(self.version).tcp(arm_side), + ) + return solver_cfg def _build_default_physics_cfgs( self, with_default_eef: bool = True @@ -327,13 +314,7 @@ def _pk_urdf_path(self, arm_side: DexforceW1ArmSide) -> str: """ from embodichain.lab.sim.robots.dexforce_w1.utils import arm_manager - component_type = ( - DexforceW1Type.LEFT_ARM - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_ARM - ) - version = (self.component_versions or {}).get(component_type, self.version) - return arm_manager.get_urdf(side=arm_side, version=version) + return arm_manager.get_urdf(side=arm_side, version=self.version) def build_pk_serial_chain( self, device: torch.device = torch.device("cpu"), **kwargs @@ -342,22 +323,14 @@ def build_pk_serial_chain( create_pk_serial_chain, ) - left_arm_chain = create_pk_serial_chain( - urdf_path=self._pk_urdf_path(DexforceW1ArmSide.LEFT), - device=device, - end_link_name="left_ee", - root_link_name="left_arm_base", - ) - right_arm_chain = create_pk_serial_chain( - urdf_path=self._pk_urdf_path(DexforceW1ArmSide.RIGHT), - device=device, - end_link_name="right_ee", - root_link_name="right_arm_base", - ) - return { - "left_arm": left_arm_chain, - "right_arm": right_arm_chain, + f"{arm_side.value}_arm": create_pk_serial_chain( + urdf_path=self._pk_urdf_path(arm_side), + device=device, + end_link_name=f"{arm_side.value}_ee", + root_link_name=f"{arm_side.value}_arm_base", + ) + for arm_side in DexforceW1ArmSide } diff --git a/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py b/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py new file mode 100644 index 000000000..92b88d1ec --- /dev/null +++ b/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py @@ -0,0 +1,202 @@ +# ---------------------------------------------------------------------------- +# Copyright (c) 2021-2026 DexForce Technology Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------- + +"""Asset and mounting specifications for W1 external end effectors.""" + +from __future__ import annotations + +from collections.abc import Mapping +from dataclasses import dataclass +from types import MappingProxyType + +import numpy as np +from scipy.spatial.transform import Rotation as R + +from .types import ( + DexforceW1ArmSide, + DexforceW1HandBrand, + DexforceW1HandVersion, + parse_w1_arm_side, + parse_w1_hand_brand, + parse_w1_hand_version, +) + +__all__ = [ + "W1HandSideSpec", + "W1HandSpec", + "get_default_w1_hand_version", + "get_w1_hand_spec", +] + + +def _attach_xpos( + rotation_xyz_degrees: tuple[float, float, float], + translation: tuple[float, float, float] = (0.0, 0.0, 0.0), +) -> tuple[tuple[float, ...], ...]: + transform = np.eye(4) + transform[:3, :3] = R.from_euler( + "xyz", rotation_xyz_degrees, degrees=True + ).as_matrix() + transform[:3, 3] = translation + return tuple(tuple(float(value) for value in row) for row in transform) + + +@dataclass(frozen=True) +class W1HandSideSpec: + """Side-specific asset metadata for one hand release.""" + + urdf_path: str + joint_names: tuple[str, ...] + end_link_name: str + root_link_name: str + attach_xpos: tuple[tuple[float, ...], ...] + + +@dataclass(frozen=True) +class W1HandSpec: + """A hand release independent of the W1 body/arm version.""" + + brand: DexforceW1HandBrand + version: DexforceW1HandVersion + sides: Mapping[DexforceW1ArmSide, W1HandSideSpec] + + def __post_init__(self) -> None: + object.__setattr__(self, "sides", MappingProxyType(dict(self.sides))) + + def for_side(self, side: DexforceW1ArmSide | str) -> W1HandSideSpec: + side = parse_w1_arm_side(side) + try: + return self.sides[side] + except KeyError as exc: + raise ValueError( + f"Hand {self.brand.value} {self.version.value} has no " + f"{side.value} asset registered" + ) from exc + + +def _brainco_side(side: DexforceW1ArmSide) -> W1HandSideSpec: + prefix = "LEFT" if side == DexforceW1ArmSide.LEFT else "RIGHT" + side_name = "Left" if side == DexforceW1ArmSide.LEFT else "Right" + rotation = (90.0, 0.0, 180.0 if side == DexforceW1ArmSide.LEFT else 0.0) + return W1HandSideSpec( + urdf_path=( + f"BrainCoHandRevo1/BrainCo{side_name}Hand/" f"BrainCo{side_name}Hand.urdf" + ), + joint_names=( + f"{prefix}_HAND_THUMB1", + f"{prefix}_HAND_THUMB2", + f"{prefix}_HAND_INDEX", + f"{prefix}_HAND_MIDDLE", + f"{prefix}_HAND_RING", + f"{prefix}_HAND_PINKY", + ), + end_link_name=f"{side.value}_hand_base", + root_link_name=f"{side.value}_thumb_dist", + attach_xpos=_attach_xpos(rotation), + ) + + +def _dh_gripper_side( + side: DexforceW1ArmSide, + modified: bool, +) -> W1HandSideSpec: + prefix = "LEFT" if side == DexforceW1ArmSide.LEFT else "RIGHT" + suffix = "_M" if modified else "" + joint_suffixes = ( + ("FINGER1", "FINGER2") + if modified + else ( + "FINGER1_JOINT", + "FINGER2_JOINT", + ) + ) + return W1HandSideSpec( + urdf_path=f"DH_PGC_140_50{suffix}/DH_PGC_140_50{suffix}.urdf", + joint_names=tuple(f"{prefix}_{name}" for name in joint_suffixes), + end_link_name=f"{side.value}_base_link_1", + root_link_name=( + f"{side.value}_finger2" if modified else f"{side.value}_finger2_link" + ), + attach_xpos=_attach_xpos( + (0.0, 0.0, 90.0), + (0.0, 0.0, 0.0 if modified else 0.015), + ), + ) + + +_W1_HAND_SPECS = { + ( + DexforceW1HandBrand.BRAINCO_HAND, + DexforceW1HandVersion.V021, + ): W1HandSpec( + brand=DexforceW1HandBrand.BRAINCO_HAND, + version=DexforceW1HandVersion.V021, + sides={side: _brainco_side(side) for side in DexforceW1ArmSide}, + ), + ( + DexforceW1HandBrand.DH_PGC_GRIPPER, + DexforceW1HandVersion.V021, + ): W1HandSpec( + brand=DexforceW1HandBrand.DH_PGC_GRIPPER, + version=DexforceW1HandVersion.V021, + sides={side: _dh_gripper_side(side, False) for side in DexforceW1ArmSide}, + ), + ( + DexforceW1HandBrand.DH_PGC_GRIPPER_M, + DexforceW1HandVersion.V021, + ): W1HandSpec( + brand=DexforceW1HandBrand.DH_PGC_GRIPPER_M, + version=DexforceW1HandVersion.V021, + sides={side: _dh_gripper_side(side, True) for side in DexforceW1ArmSide}, + ), +} + +_DEFAULT_W1_HAND_VERSIONS = MappingProxyType( + { + DexforceW1HandBrand.BRAINCO_HAND: DexforceW1HandVersion.V021, + DexforceW1HandBrand.DH_PGC_GRIPPER: DexforceW1HandVersion.V021, + DexforceW1HandBrand.DH_PGC_GRIPPER_M: DexforceW1HandVersion.V021, + } +) + + +def get_default_w1_hand_version( + brand: DexforceW1HandBrand | str, +) -> DexforceW1HandVersion: + """Return the explicitly selected default release for a hand brand.""" + brand = parse_w1_hand_brand(brand) + try: + return _DEFAULT_W1_HAND_VERSIONS[brand] + except KeyError as exc: + raise ValueError( + f"No default hand version registered for {brand.value}" + ) from exc + + +def get_w1_hand_spec( + brand: DexforceW1HandBrand | str, + version: DexforceW1HandVersion | str, +) -> W1HandSpec: + """Return an explicitly registered hand release.""" + brand = parse_w1_hand_brand(brand) + version = parse_w1_hand_version(version) + try: + return _W1_HAND_SPECS[(brand, version)] + except KeyError as exc: + raise ValueError( + f"No hand asset registered for brand={brand.value}, " + f"version={version.value}" + ) from exc diff --git a/embodichain/lab/sim/robots/dexforce_w1/params.py b/embodichain/lab/sim/robots/dexforce_w1/params.py index d61f366e1..4831a4985 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/params.py +++ b/embodichain/lab/sim/robots/dexforce_w1/params.py @@ -21,6 +21,8 @@ from embodichain.lab.sim.robots.dexforce_w1.types import ( DexforceW1ArmSide, DexforceW1Version, + parse_w1_arm_side, + parse_w1_version, ) from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec @@ -146,17 +148,8 @@ def as_dict(self) -> dict: @classmethod def from_dict(cls, data: dict) -> "W1ArmKineParams": - arm_side = ( - DexforceW1ArmSide[data["arm_side"]] - if isinstance(data.get("arm_side"), str) - else data.get("arm_side") - ) - - version = ( - DexforceW1Version[data["version"]] - if isinstance(data.get("version"), str) - else data.get("version", DexforceW1Version.V021) - ) + arm_side = parse_w1_arm_side(data["arm_side"]) + version = parse_w1_version(data.get("version", DexforceW1Version.V021)) inst = cls(arm_side=arm_side, version=version) # allow overriding computed arrays if provided diff --git a/embodichain/lab/sim/robots/dexforce_w1/specs.py b/embodichain/lab/sim/robots/dexforce_w1/specs.py index d44b96d99..739578fba 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/specs.py +++ b/embodichain/lab/sim/robots/dexforce_w1/specs.py @@ -18,22 +18,23 @@ from __future__ import annotations +from collections.abc import Mapping from dataclasses import dataclass +from types import MappingProxyType import numpy as np from scipy.spatial.transform import Rotation as R from .types import ( DexforceW1ArmSide, - DexforceW1HandBrand, DexforceW1Type, DexforceW1Version, + parse_w1_version, ) __all__ = [ "W1VersionSpec", "get_w1_version_spec", - "normalize_component_versions", ] @@ -60,17 +61,28 @@ class W1VersionSpec: """Asset layout and calibrated defaults belonging to one W1 revision.""" version: DexforceW1Version - component_urdfs: dict[DexforceW1Type, str] + component_urdfs: Mapping[DexforceW1Type, str] full_robot_urdf_path: str arm_d_list: tuple[float, ...] arm_base_z: float - default_eef_attach_xpos: dict[DexforceW1ArmSide, tuple] - solver_tcp: dict[DexforceW1ArmSide, tuple] + default_eef_attach_xpos: Mapping[DexforceW1ArmSide, tuple] + solver_tcp: Mapping[DexforceW1ArmSide, tuple] eyes_attach_xpos: tuple[tuple[float, ...], ...] wrist_camera_rpy: tuple[float, float, float] wrist_camera_xyz: tuple[float, float, float] head_contains_eyes: bool = False + def __post_init__(self) -> None: + object.__setattr__( + self, "component_urdfs", MappingProxyType(dict(self.component_urdfs)) + ) + object.__setattr__( + self, + "default_eef_attach_xpos", + MappingProxyType(dict(self.default_eef_attach_xpos)), + ) + object.__setattr__(self, "solver_tcp", MappingProxyType(dict(self.solver_tcp))) + @property def assembly_name(self) -> str: return f"DexforceW1V{self.version.value.removeprefix('v')}" @@ -111,26 +123,6 @@ def tcp(self, arm_side: DexforceW1ArmSide) -> np.ndarray: np.asarray(self.solver_tcp[arm_side], dtype=float), ) - def hand_attach_xpos( - self, - brand: DexforceW1HandBrand, - arm_side: DexforceW1ArmSide, - ) -> np.ndarray: - """Return the default transform from the arm flange to an external EEF.""" - is_left = arm_side == DexforceW1ArmSide.LEFT - result = np.eye(4) - if brand == DexforceW1HandBrand.BRAINCO_HAND: - rotation = [90, 0, 180] if is_left else [90, 0, 0] - result[:3, :3] = R.from_euler("xyz", rotation, degrees=True).as_matrix() - elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER: - result[2, 3] = 0.015 - result[:3, :3] = R.from_rotvec([0, 0, 90], degrees=True).as_matrix() - elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER_M: - result[:3, :3] = R.from_rotvec([0, 0, 90], degrees=True).as_matrix() - else: - raise ValueError(f"Unknown hand brand: {brand}") - return self.compose_eef_attach_xpos(arm_side, result) - def eyes_xpos(self) -> np.ndarray: return np.asarray(self.eyes_attach_xpos, dtype=float).copy() @@ -251,19 +243,4 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: def get_w1_version_spec(version: DexforceW1Version | str) -> W1VersionSpec: - if not isinstance(version, DexforceW1Version): - version = DexforceW1Version(version.lower()) - return _W1_VERSION_SPECS[version] - - -def normalize_component_versions( - versions: dict[DexforceW1Type | str, DexforceW1Version | str] | None, -) -> dict[DexforceW1Type, DexforceW1Version]: - normalized = {} - for component_type, version in (versions or {}).items(): - if not isinstance(component_type, DexforceW1Type): - component_type = DexforceW1Type(component_type) - if not isinstance(version, DexforceW1Version): - version = DexforceW1Version(version.lower()) - normalized[component_type] = version - return normalized + return _W1_VERSION_SPECS[parse_w1_version(version)] diff --git a/embodichain/lab/sim/robots/dexforce_w1/types.py b/embodichain/lab/sim/robots/dexforce_w1/types.py index 63aebbf3f..dca8ceeda 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/types.py +++ b/embodichain/lab/sim/robots/dexforce_w1/types.py @@ -18,20 +18,31 @@ __all__ = [ "DexforceW1Version", + "DexforceW1HandVersion", "DexforceW1ArmSide", "DexforceW1Type", "DexforceW1HandBrand", + "parse_w1_version", + "parse_w1_hand_version", + "parse_w1_arm_side", + "parse_w1_hand_brand", ] class DexforceW1Version(enum.Enum): - """Versioning for DexforceW1 components.""" + """Released version of the W1 robot body and arms.""" V021 = "v021" V022 = "v022" V025 = "v025" +class DexforceW1HandVersion(enum.Enum): + """Released version of an external W1 hand or gripper asset.""" + + V021 = "v021" + + class DexforceW1ArmSide(enum.Enum): """Arm side for DexforceW1: left or right.""" @@ -57,3 +68,34 @@ class DexforceW1HandBrand(enum.Enum): BRAINCO_HAND = "BRAINCO_HAND" DH_PGC_GRIPPER = "DH_PGC_GRIPPER" DH_PGC_GRIPPER_M = "DH_PGC_GRIPPER_M" + + +def _parse_enum(value, enum_type, label): + if isinstance(value, enum_type): + return value + if isinstance(value, str): + normalized = value.lower() + for member in enum_type: + if normalized in (member.name.lower(), str(member.value).lower()): + return member + raise ValueError(f"Invalid {label}: {value!r}") + + +def parse_w1_version(value) -> DexforceW1Version: + """Parse a W1 robot version from an enum, member name, or value.""" + return _parse_enum(value, DexforceW1Version, "Dexforce W1 version") + + +def parse_w1_hand_version(value) -> DexforceW1HandVersion: + """Parse a W1 hand version from an enum, member name, or value.""" + return _parse_enum(value, DexforceW1HandVersion, "Dexforce W1 hand version") + + +def parse_w1_arm_side(value) -> DexforceW1ArmSide: + """Parse a W1 arm side from an enum, member name, or serialized value.""" + return _parse_enum(value, DexforceW1ArmSide, "Dexforce W1 arm side") + + +def parse_w1_hand_brand(value) -> DexforceW1HandBrand: + """Parse a W1 hand brand from an enum, member name, or serialized value.""" + return _parse_enum(value, DexforceW1HandBrand, "Dexforce W1 hand brand") diff --git a/embodichain/lab/sim/robots/dexforce_w1/utils.py b/embodichain/lab/sim/robots/dexforce_w1/utils.py index 637e96620..6246302d2 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/utils.py +++ b/embodichain/lab/sim/robots/dexforce_w1/utils.py @@ -13,21 +13,28 @@ # See the License for the specific language governing permissions and # limitations under the License. # ---------------------------------------------------------------------------- +import xml.etree.ElementTree as ET + import numpy as np -from typing import List, Dict from embodichain.lab.sim.robots.dexforce_w1.types import ( DexforceW1Type, DexforceW1ArmSide, DexforceW1Version, DexforceW1HandBrand, + DexforceW1HandVersion, + parse_w1_arm_side, + parse_w1_hand_version, + parse_w1_version, +) +from embodichain.lab.sim.robots.dexforce_w1.hand_specs import ( + get_default_w1_hand_version, + get_w1_hand_spec, ) from embodichain.data import get_data_path -from embodichain.lab.sim.solvers import SolverCfg from embodichain.lab.sim.cfg import URDFCfg from embodichain.lab.sim.robots.dexforce_w1.specs import ( get_w1_version_spec, - normalize_component_versions, ) __all__ = [ @@ -38,8 +45,6 @@ "HandManager", "EyesManager", "build_dexforce_w1_assembly_urdf_cfg", - "build_dexforce_w1_solver_cfg", - "build_dexforce_w1_cfg", ] @@ -133,111 +138,40 @@ def get_config(self, side, version=DexforceW1Version.V021): class HandManager: - def __init__(self): - self._urdf_rel_paths = { - ( - DexforceW1HandBrand.BRAINCO_HAND, - DexforceW1ArmSide.LEFT, - DexforceW1Version.V021, - ): "BrainCoHandRevo1/BrainCoLeftHand/BrainCoLeftHand.urdf", - ( - DexforceW1HandBrand.BRAINCO_HAND, - DexforceW1ArmSide.RIGHT, - DexforceW1Version.V021, - ): "BrainCoHandRevo1/BrainCoRightHand/BrainCoRightHand.urdf", - ( - DexforceW1HandBrand.DH_PGC_GRIPPER, - DexforceW1ArmSide.LEFT, - DexforceW1Version.V021, - ): "DH_PGC_140_50/DH_PGC_140_50.urdf", - ( - DexforceW1HandBrand.DH_PGC_GRIPPER, - DexforceW1ArmSide.RIGHT, - DexforceW1Version.V021, - ): "DH_PGC_140_50/DH_PGC_140_50.urdf", - ( - DexforceW1HandBrand.DH_PGC_GRIPPER_M, - DexforceW1ArmSide.LEFT, - DexforceW1Version.V021, - ): "DH_PGC_140_50_M/DH_PGC_140_50_M.urdf", - ( - DexforceW1HandBrand.DH_PGC_GRIPPER_M, - DexforceW1ArmSide.RIGHT, - DexforceW1Version.V021, - ): "DH_PGC_140_50_M/DH_PGC_140_50_M.urdf", - } - for version in DexforceW1Version: - if version == DexforceW1Version.V021: - continue - for brand in DexforceW1HandBrand: - for side in DexforceW1ArmSide: - self._urdf_rel_paths[(brand, side, version)] = self._urdf_rel_paths[ - (brand, side, DexforceW1Version.V021) - ] - def get_config( self, brand: DexforceW1HandBrand, side: DexforceW1ArmSide, - version: DexforceW1Version = DexforceW1Version.V021, + version: DexforceW1HandVersion | None = None, ): - prefix = "LEFT" if side == DexforceW1ArmSide.LEFT else "RIGHT" - if brand == DexforceW1HandBrand.BRAINCO_HAND: - if side == DexforceW1ArmSide.LEFT: - base_link_name = f"{prefix.lower()}_hand_base" - root_link_name = f"{prefix.lower()}_thumb_dist" - joint_names = [ - f"{prefix}_HAND_THUMB1", # Left thumb flexion - f"{prefix}_HAND_THUMB2", # Left thumb abduction/adduction - f"{prefix}_HAND_INDEX", # Left index finger flexion - f"{prefix}_HAND_MIDDLE", # Left middle finger flexion - f"{prefix}_HAND_RING", # Left ring finger flexion - f"{prefix}_HAND_PINKY", # Left pinky finger flexion - ] - else: - base_link_name = f"{prefix.lower()}_hand_base" - root_link_name = f"{prefix.lower()}_thumb_dist" - joint_names = [ - f"{prefix}_HAND_THUMB1", # Right thumb flexion - f"{prefix}_HAND_THUMB2", # Right thumb abduction/adduction - f"{prefix}_HAND_INDEX", # Right index finger flexion - f"{prefix}_HAND_MIDDLE", # Right middle finger flexion - f"{prefix}_HAND_RING", # Right ring finger flexion - f"{prefix}_HAND_PINKY", # Right pinky finger flexion - ] - elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER: - base_link_name = f"{prefix.lower()}_base_link_1" - root_link_name = f"{prefix.lower()}_finger2_link" - joint_names = [f"{prefix}_FINGER1_JOINT", f"{prefix}_FINGER2_JOINT"] - elif brand == DexforceW1HandBrand.DH_PGC_GRIPPER_M: - base_link_name = f"{prefix.lower()}_base_link_1" - root_link_name = f"{prefix.lower()}_finger2" - joint_names = [f"{prefix}_FINGER1", f"{prefix}_FINGER2"] - else: - raise ValueError(f"Unknown hand brand: {brand}") - + version = version or get_default_w1_hand_version(brand) + side_spec = get_w1_hand_spec(brand, version).for_side(side) return { - "urdf_path": self.get_urdf(brand, side, version), - "joint_names": joint_names, - "end_link_name": base_link_name, - "root_link_name": root_link_name, + "urdf_path": get_data_path(side_spec.urdf_path), + "joint_names": list(side_spec.joint_names), + "end_link_name": side_spec.end_link_name, + "root_link_name": side_spec.root_link_name, } def get_urdf( self, brand: DexforceW1HandBrand, side: DexforceW1ArmSide, - version: DexforceW1Version = DexforceW1Version.V021, + version: DexforceW1HandVersion | None = None, ): - return get_data_path(self._urdf_rel_paths[(brand, side, version)]) + version = version or get_default_w1_hand_version(brand) + side_spec = get_w1_hand_spec(brand, version).for_side(side) + return get_data_path(side_spec.urdf_path) def get_attach_xpos( self, brand: DexforceW1HandBrand, arm_side: DexforceW1ArmSide = DexforceW1ArmSide.LEFT, - version: DexforceW1Version = DexforceW1Version.V021, + version: DexforceW1HandVersion | None = None, ): - return get_w1_version_spec(version).hand_attach_xpos(brand, arm_side) + version = version or get_default_w1_hand_version(brand) + side_spec = get_w1_hand_spec(brand, version).for_side(arm_side) + return np.asarray(side_spec.attach_xpos, dtype=float).copy() eyes_manager = EyesManager() @@ -250,88 +184,58 @@ def get_attach_xpos( def build_dexforce_w1_assembly_urdf_cfg( version: DexforceW1Version = DexforceW1Version.V021, - arm_sides: List[DexforceW1ArmSide] = [ - DexforceW1ArmSide.LEFT, - DexforceW1ArmSide.RIGHT, - ], fname: str | None = None, hand_types: dict[DexforceW1ArmSide, DexforceW1HandBrand] | None = None, - hand_versions: dict[DexforceW1ArmSide, DexforceW1Version] | None = None, + hand_versions: dict[DexforceW1ArmSide, DexforceW1HandVersion] | None = None, hand_attach_xposes: dict[DexforceW1ArmSide, np.ndarray] | None = None, - include_chassis: bool = True, - include_torso: bool = True, - include_head: bool = True, include_hand: bool = True, - include_eyes: bool = True, - include_wrist_cameras: bool = True, - component_versions: dict[DexforceW1Type, DexforceW1Version] | None = None, ) -> URDFCfg: """ Assemble DexforceW1 robot urdf configuration. Args: - arm_sides: List of arm sides to include (left/right). Default both sides. - version: Default W1 revision for every component. + version: W1 version used by every robot component. fname: Output configuration name. Defaults to the version assembly name. hand_types: Dict specifying hand brand (DexforceW1HandBrand) for each arm side. Default None, which uses the default brand. - hand_versions: Dict specifying hand version for each arm side. Default None, which uses the default version. + hand_versions: Hand asset version for each side. Defaults to hand V021, + independently of the W1 robot version. hand_attach_xposes: Dict specifying hand attachment pose for each arm side. Default None, which uses the default attachment pose. - include_chassis: Whether to include chassis. Default True. - include_torso: Whether to include torso. Default True. - include_head: Whether to include head. Default True. include_hand: Whether to include hand. Default True. - include_wrist_cameras: Whether to include wrist cameras. Default True. - component_versions: Optional per-component overrides. Components not - listed here use ``version``. Returns: URDFCfg: Assembled URDF configuration. """ - if not isinstance(version, DexforceW1Version): - version = DexforceW1Version(version) - component_versions = normalize_component_versions(component_versions) - - def get_version(component_type): - return component_versions.get(component_type, version) + version = parse_w1_version(version) + hand_versions = { + parse_w1_arm_side(side): parse_w1_hand_version(hand_version) + for side, hand_version in (hand_versions or {}).items() + } if fname is None: fname = get_w1_version_spec(version).assembly_name - components = [] - if include_chassis: - components.append( - { - "component_type": "chassis", - "urdf_path": chassis_manager.get_urdf( - get_version(DexforceW1Type.CHASSIS) - ), - } - ) - if include_torso: - components.append( - { - "component_type": "torso", - "urdf_path": torso_manager.get_urdf(get_version(DexforceW1Type.TORSO)), - } - ) - if include_head: - components.append( - { - "component_type": "head", - "urdf_path": head_manager.get_urdf(get_version(DexforceW1Type.HEAD)), - } - ) + components = [ + { + "component_type": "chassis", + "urdf_path": chassis_manager.get_urdf(version), + }, + { + "component_type": "torso", + "urdf_path": torso_manager.get_urdf(version), + }, + { + "component_type": "head", + "urdf_path": head_manager.get_urdf(version), + }, + ] sensors = [] - head_version = get_version(DexforceW1Type.HEAD) - head_spec = get_w1_version_spec(head_version) + head_spec = get_w1_version_spec(version) head_contains_eyes = head_spec.head_contains_eyes - if include_head and include_eyes and not head_contains_eyes: + if not head_contains_eyes: # TODO: Support user-defined eye transforms - import xml.etree.ElementTree as ET - attach_xpos = head_spec.eyes_xpos() joint_xml = """ @@ -365,50 +269,43 @@ def get_version(component_type): "sensor_type": "camera", } ) - if include_wrist_cameras: - for arm_side in arm_sides: - # TODO: Support user-defined eye transforms - import xml.etree.ElementTree as ET - - arm_component = arm_manager.get_component_type(arm_side) - camera_spec = get_w1_version_spec(get_version(arm_component)) - attach_xpos = camera_spec.wrist_camera_xpos(arm_side) - - joint_xml = f""" - - - - - - """ - - link_xml = f""" - - - - - - - - """ - - joint_elem = ET.fromstring(joint_xml) - link_elem = ET.fromstring(link_xml) - sensors.append( - { - "sensor_name": f"{arm_side.value.lower()}_wrist_camera", - "sensor_source": ([link_elem], [joint_elem]), - "parent_component": f"{arm_side.value}_arm", - "parent_link": f"{arm_side.value}_ee", - "transform": attach_xpos, - "sensor_type": "camera", - } - ) + for arm_side in DexforceW1ArmSide: + camera_spec = get_w1_version_spec(version) + attach_xpos = camera_spec.wrist_camera_xpos(arm_side) + + joint_xml = f""" + + + + + + """ + + link_xml = f""" + + + + + + + + """ + + joint_elem = ET.fromstring(joint_xml) + link_elem = ET.fromstring(link_xml) + sensors.append( + { + "sensor_name": f"{arm_side.value.lower()}_wrist_camera", + "sensor_source": ([link_elem], [joint_elem]), + "parent_component": f"{arm_side.value}_arm", + "parent_link": f"{arm_side.value}_ee", + "transform": attach_xpos, + "sensor_type": "camera", + } + ) - for arm_side in arm_sides: - arm_component = arm_manager.get_component_type(arm_side) - arm_version = get_version(arm_component) - arm_cfg = arm_manager.get_config(arm_side, arm_version) + for arm_side in DexforceW1ArmSide: + arm_cfg = arm_manager.get_config(arm_side, version) components.append( { "component_type": f"{arm_side.value}_arm", @@ -417,32 +314,27 @@ def get_version(component_type): ) if include_hand: - for arm_side in arm_sides: + for arm_side in DexforceW1ArmSide: # hand_brand: DexforceW1HandBrand hand_brand = (hand_types or {}).get( arm_side, DexforceW1HandBrand.BRAINCO_HAND ) - hand_version = (hand_versions or {}).get( - arm_side, - get_version( - DexforceW1Type.LEFT_HAND - if arm_side == DexforceW1ArmSide.LEFT - else DexforceW1Type.RIGHT_HAND - ), + hand_version = hand_versions.get( + arm_side, get_default_w1_hand_version(hand_brand) ) urdf_path = hand_manager.get_urdf(hand_brand, arm_side, hand_version) custom_attach_xpos = (hand_attach_xposes or {}).get(arm_side) if custom_attach_xpos is None: - attach_xpos = hand_manager.get_attach_xpos( - hand_brand, - arm_side, - get_version(arm_manager.get_component_type(arm_side)), + hand_attach_xpos = hand_manager.get_attach_xpos( + hand_brand, arm_side, hand_version ) - else: - arm_spec = get_w1_version_spec( - get_version(arm_manager.get_component_type(arm_side)) + arm_spec = get_w1_version_spec(version) + attach_xpos = arm_spec.compose_eef_attach_xpos( + arm_side, hand_attach_xpos ) + else: + arm_spec = get_w1_version_spec(version) attach_xpos = arm_spec.compose_eef_attach_xpos( arm_side, custom_attach_xpos ) @@ -463,240 +355,52 @@ def get_version(component_type): ) -def build_dexforce_w1_solver_cfg( - version: DexforceW1Version = DexforceW1Version.V021, - arm_sides: List[DexforceW1ArmSide] = [ - DexforceW1ArmSide.LEFT, - DexforceW1ArmSide.RIGHT, - ], - component_versions: dict[DexforceW1Type, DexforceW1Version] | None = None, - urdf_cfg: URDFCfg | None = None, -) -> Dict[str, SolverCfg]: - """ - Build DexforceW1 solver configuration dict. +def build_dexforce_w1_control_parts( + version: DexforceW1Version, + hand_types: dict[DexforceW1ArmSide, DexforceW1HandBrand] | None, + hand_versions: dict[DexforceW1ArmSide, DexforceW1HandVersion] | None, + include_hand: bool, +) -> dict[str, list[str]]: + """Build control-part joint lists for a complete dual-arm W1.""" + version = parse_w1_version(version) + hand_versions = { + parse_w1_arm_side(side): parse_w1_hand_version(hand_version) + for side, hand_version in (hand_versions or {}).items() + } - Args: - version: Default W1 revision. - arm_sides: Included arm sides. Optional, default both sides. - component_versions: Optional per-component version overrides. - urdf_cfg: Optional, URDFCfg object from build_dexforce_w1_assembly_urdf_cfg. + arm_joints = {} + for arm_side in DexforceW1ArmSide: + arm_joints[arm_side] = arm_manager.get_config(arm_side, version)["joint_names"] - Returns: - Dict[str, SolverCfg]: solver config keyed by control part name - (e.g. ``"left_arm"``, ``"full_body"``). - """ - - if not isinstance(version, DexforceW1Version): - version = DexforceW1Version(version) - component_versions = normalize_component_versions(component_versions) - - solver_cfg = {} + torso_joints = torso_manager.get_config(version)["joint_names"] + head_joints = head_manager.get_config(version)["joint_names"] - for arm_side in arm_sides: - arm_component = arm_manager.get_component_type(arm_side) - arm_version = component_versions.get(arm_component, version) - arm_cfg = arm_manager.get_config(arm_side, arm_version) - # Use control_parts-aligned key (e.g. "left_arm") so init_solver - # can match this entry to the corresponding control part. - solver_key = f"{arm_side.value}_arm" - solver_cfg[solver_key] = SolverCfg.from_dict( - { - "class_type": "PytorchSolver", - "urdf_path": arm_cfg["urdf_path"], - "joint_names": arm_cfg["joint_names"], - "end_link_name": arm_cfg["end_link_name"], - "root_link_name": arm_cfg["root_link_name"], - "tcp": get_w1_version_spec(arm_version).tcp(arm_side), - } - ) - - if urdf_cfg is not None and urdf_cfg.fpath: - full_body_urdf_path = urdf_cfg.fpath - else: - full_body_urdf_path = get_data_path( - get_w1_version_spec(version).full_robot_urdf() - ) - - solver_cfg[DexforceW1Type.FULL_BODY.value] = SolverCfg.from_dict( - { - "class_type": "PytorchSolver", - "urdf_path": full_body_urdf_path, - "joint_names": [ - "ANKLE", - "KNEE", - "BUTTOCK", - "WAIST", - "NECK1", - "NECK2", - "LEFT_J1", - "LEFT_J2", - "LEFT_J3", - "LEFT_J4", - "LEFT_J5", - "LEFT_J6", - "LEFT_J7", - "RIGHT_J1", - "RIGHT_J2", - "RIGHT_J3", - "RIGHT_J4", - "RIGHT_J5", - "RIGHT_J6", - "RIGHT_J7", - ], - "end_link_name": "right_ee", - "root_link_name": "base_link", - } - ) - return solver_cfg - - -def build_dexforce_w1_cfg( - version: DexforceW1Version = DexforceW1Version.V021, - arm_sides: List[DexforceW1ArmSide] = [ - DexforceW1ArmSide.LEFT, - DexforceW1ArmSide.RIGHT, - ], - hand_types: dict[DexforceW1ArmSide, DexforceW1HandBrand] | None = None, - hand_versions: dict[DexforceW1ArmSide, DexforceW1Version] | None = None, - hand_attach_xposes: dict[DexforceW1ArmSide, np.ndarray] | None = None, - include_chassis: bool = True, - include_torso: bool = True, - include_head: bool = True, - include_hand: bool = True, - include_eyes: bool = True, - include_wrist_cameras: bool = True, - component_versions: dict[DexforceW1Type, DexforceW1Version] | None = None, - solver_cfg: dict[DexforceW1Type, SolverCfg] | None = None, -) -> "DexforceW1Cfg": - """ - Build DexforceW1 robot configuration object. - - Args: - version: Default W1 revision. - arm_sides: List of arm sides to include (left/right). Default both sides. - hand_types: Dict specifying hand brand (DexforceW1HandBrand) for each arm side. Default None, which uses the default brand. - hand_versions: Dict specifying hand version for each arm side. Default None, which uses the default version. - hand_attach_xposes: Dict specifying hand attachment pose for each arm side. Default None, which uses the default attachment pose. - include_chassis: Whether to include chassis. Optional, default True. - include_torso: Whether to include torso. Optional, default True. - include_head: Whether to include head. Optional, default True. - include_hand: Whether to include hand. Optional, default True. - include_eyes: Whether to include eyes when they are not already part of - the selected head asset. - include_wrist_cameras: Whether to include wrist cameras. - component_versions: Dict specifying version for each robot component. - solver_cfg: Optional, pre-defined solver configuration dict. - - Returns: - DexforceW1Cfg: Robot configuration object. - """ - if not isinstance(version, DexforceW1Version): - version = DexforceW1Version(version) - component_versions = normalize_component_versions(component_versions) - - urdf_cfg = build_dexforce_w1_assembly_urdf_cfg( - version=version, - arm_sides=arm_sides, - hand_types=hand_types, - hand_versions=hand_versions, - hand_attach_xposes=hand_attach_xposes, - include_chassis=include_chassis, - include_torso=include_torso, - include_head=include_head, - include_hand=include_hand, - include_eyes=include_eyes, - include_wrist_cameras=include_wrist_cameras, - component_versions=component_versions, - ) - - left_arm_joints = [] - right_arm_joints = [] - for arm_side in arm_sides: - arm_component = arm_manager.get_component_type(arm_side) - arm_version = component_versions.get(arm_component, version) - arm_cfg = arm_manager.get_config(arm_side, arm_version) - if arm_side == DexforceW1ArmSide.LEFT: - left_arm_joints = arm_cfg["joint_names"] - elif arm_side == DexforceW1ArmSide.RIGHT: - right_arm_joints = arm_cfg["joint_names"] - - torso_joints = [] - head_joints = [] - left_hand_joints = [] - right_hand_joints = [] - - if include_torso: - torso_joints = torso_manager.get_config( - component_versions.get(DexforceW1Type.TORSO, version) - )["joint_names"] - if include_head: - head_joints = head_manager.get_config( - component_versions.get(DexforceW1Type.HEAD, version) - )["joint_names"] + hand_joints = {} if include_hand: - if DexforceW1ArmSide.LEFT in arm_sides: - left_hand_brand = (hand_types or {}).get( - DexforceW1ArmSide.LEFT, DexforceW1HandBrand.BRAINCO_HAND - ) - left_hand_version = (hand_versions or {}).get( - DexforceW1ArmSide.LEFT, - component_versions.get(DexforceW1Type.LEFT_HAND, version), - ) - left_hand_cfg = hand_manager.get_config( - left_hand_brand, DexforceW1ArmSide.LEFT, left_hand_version - ) - left_hand_joints = left_hand_cfg["joint_names"] - if DexforceW1ArmSide.RIGHT in arm_sides: - right_hand_brand = (hand_types or {}).get( - DexforceW1ArmSide.RIGHT, DexforceW1HandBrand.BRAINCO_HAND - ) - right_hand_version = (hand_versions or {}).get( - DexforceW1ArmSide.RIGHT, - component_versions.get(DexforceW1Type.RIGHT_HAND, version), + for arm_side in DexforceW1ArmSide: + hand_brand = (hand_types or {}).get( + arm_side, DexforceW1HandBrand.BRAINCO_HAND ) - right_hand_cfg = hand_manager.get_config( - right_hand_brand, DexforceW1ArmSide.RIGHT, right_hand_version + hand_version = hand_versions.get( + arm_side, get_default_w1_hand_version(hand_brand) ) - right_hand_joints = right_hand_cfg["joint_names"] + hand_joints[arm_side] = hand_manager.get_config( + hand_brand, arm_side, hand_version + )["joint_names"] + left_arm_joints = arm_joints.get(DexforceW1ArmSide.LEFT, []) + right_arm_joints = arm_joints.get(DexforceW1ArmSide.RIGHT, []) control_parts = {} - - if torso_joints: - control_parts["torso"] = torso_joints - if head_joints: - control_parts["head"] = head_joints - if left_arm_joints: - control_parts["left_arm"] = left_arm_joints - if right_arm_joints: - control_parts["right_arm"] = right_arm_joints - if left_arm_joints and right_arm_joints: - control_parts["dual_arm"] = left_arm_joints + right_arm_joints - if left_hand_joints: - control_parts["left_eef"] = left_hand_joints - if right_hand_joints: - control_parts["right_eef"] = right_hand_joints - - if torso_joints and head_joints and left_arm_joints and right_arm_joints: - control_parts["full_body"] = ( - torso_joints + head_joints + left_arm_joints + right_arm_joints - ) - - from embodichain.lab.sim.robots.dexforce_w1.cfg import DexforceW1Cfg - - cfg = DexforceW1Cfg() - cfg.version = version - cfg.component_versions = component_versions - cfg.urdf_cfg = urdf_cfg - cfg.control_parts = control_parts - - if solver_cfg is not None: - cfg.solver_cfg = solver_cfg - else: - cfg.solver_cfg = build_dexforce_w1_solver_cfg( - version=version, - arm_sides=arm_sides, - component_versions=component_versions, - urdf_cfg=urdf_cfg, - ) - - return cfg + control_parts["torso"] = torso_joints + control_parts["head"] = head_joints + control_parts["left_arm"] = left_arm_joints + control_parts["right_arm"] = right_arm_joints + control_parts["dual_arm"] = left_arm_joints + right_arm_joints + if DexforceW1ArmSide.LEFT in hand_joints: + control_parts["left_eef"] = hand_joints[DexforceW1ArmSide.LEFT] + if DexforceW1ArmSide.RIGHT in hand_joints: + control_parts["right_eef"] = hand_joints[DexforceW1ArmSide.RIGHT] + control_parts["full_body"] = ( + torso_joints + head_joints + left_arm_joints + right_arm_joints + ) + return control_parts diff --git a/embodichain/lab/sim/utility/cfg_utils.py b/embodichain/lab/sim/utility/cfg_utils.py index d047599eb..51ce7d028 100644 --- a/embodichain/lab/sim/utility/cfg_utils.py +++ b/embodichain/lab/sim/utility/cfg_utils.py @@ -104,9 +104,12 @@ def merge_robot_cfg(base_cfg: RobotCfg, override_cfg_dict: dict[str, any]) -> Ro # 2. Part dict lacks "class_type" → attribute overrides for an # existing solver part (e.g. {"tcp": ..., "stiffness": ...}). provided_solver_cfg = override_cfg_dict.get("solver_cfg") - if provided_solver_cfg and isinstance(provided_solver_cfg, dict): + if isinstance(provided_solver_cfg, dict): if base_cfg.solver_cfg is None: base_cfg.solver_cfg = {} + if not provided_solver_cfg: + base_cfg.solver_cfg = {} + continue for part, item in provided_solver_cfg.items(): if isinstance(item, dict) and "class_type" in item: # New or replacement solver part — use the deserialized diff --git a/embodichain/lab/sim/workspace/analyzer.py b/embodichain/lab/sim/workspace/analyzer.py index e9f427698..c2decb5af 100644 --- a/embodichain/lab/sim/workspace/analyzer.py +++ b/embodichain/lab/sim/workspace/analyzer.py @@ -2102,17 +2102,34 @@ def _build_cache_key_metadata(self, num_samples: int) -> Dict[str, Any]: robot_name = Path(fpath).stem else: robot_name = config_class.removesuffix("Cfg") + + def serialize_parameter(value): + if isinstance(value, Enum): + return value.value + if isinstance(value, np.ndarray): + return value.tolist() + if isinstance(value, dict): + return { + serialize_parameter(key): serialize_parameter(item) + for key, item in value.items() + } + if isinstance(value, (list, tuple)): + return [serialize_parameter(item) for item in value] + return value + robot_parameters = {} for parameter_name in ( "robot_type", "version", - "arm_kind", "with_default_eef", + "hand_types", + "hand_versions", + "hand_attach_xposes", ): if not hasattr(self.robot.cfg, parameter_name): continue value = getattr(self.robot.cfg, parameter_name) - robot_parameters[parameter_name] = getattr(value, "value", value) + robot_parameters[parameter_name] = serialize_parameter(value) robot_info = { "name": robot_name, "config_class": config_class, diff --git a/examples/sim/workspace/analyze_cartesian_workspace.py b/examples/sim/workspace/analyze_cartesian_workspace.py index e5f0efa49..fb9160067 100644 --- a/examples/sim/workspace/analyze_cartesian_workspace.py +++ b/examples/sim/workspace/analyze_cartesian_workspace.py @@ -97,7 +97,6 @@ def main() -> None: { "uid": "dexforce_w1", "version": "v021", - "arm_kind": "industrial", "with_default_eef": False, } ) diff --git a/examples/sim/workspace/analyze_joint_workspace.py b/examples/sim/workspace/analyze_joint_workspace.py index 2566fa17e..3695bdb79 100644 --- a/examples/sim/workspace/analyze_joint_workspace.py +++ b/examples/sim/workspace/analyze_joint_workspace.py @@ -92,7 +92,6 @@ def main() -> None: { "uid": "dexforce_w1", "version": "v021", - "arm_kind": "industrial", # Workspace analysis only needs the arms. Excluding the grippers # avoids loading unrelated joints and assets. "with_default_eef": False, diff --git a/examples/sim/workspace/analyze_plane_workspace.py b/examples/sim/workspace/analyze_plane_workspace.py index 96e5e31cb..95e381e1e 100644 --- a/examples/sim/workspace/analyze_plane_workspace.py +++ b/examples/sim/workspace/analyze_plane_workspace.py @@ -97,7 +97,6 @@ def main() -> None: { "uid": "dexforce_w1", "version": "v021", - "arm_kind": "industrial", "with_default_eef": False, } ) diff --git a/tests/sim/objects/test_robot_cfg.py b/tests/sim/objects/test_robot_cfg.py index b613f27e1..750588300 100644 --- a/tests/sim/objects/test_robot_cfg.py +++ b/tests/sim/objects/test_robot_cfg.py @@ -26,18 +26,38 @@ ) from embodichain.lab.sim.workspace import RobotWorkspaceCfg from embodichain.lab.sim.robots.dexforce_w1 import DexforceW1Cfg +from embodichain.lab.sim.robots.dexforce_w1.params import W1ArmKineParams from embodichain.lab.sim.robots.dexforce_w1.types import ( DexforceW1ArmSide, DexforceW1HandBrand, + DexforceW1HandVersion, DexforceW1Type, DexforceW1Version, ) +from embodichain.lab.sim.robots.dexforce_w1.hand_specs import ( + get_default_w1_hand_version, + get_w1_hand_spec, +) from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec from embodichain.lab.sim.solvers import SRSSolverCfg from embodichain.utils import configclass from embodichain.lab.sim.utility.cfg_utils import merge_robot_cfg +def _mock_w1_asset_paths(monkeypatch, tmp_path): + import embodichain.lab.sim.cfg as sim_cfg + from embodichain.lab.sim.robots.dexforce_w1 import utils as w1_utils + + def resolve(path): + resolved = tmp_path / path + resolved.parent.mkdir(parents=True, exist_ok=True) + resolved.write_text("") + return str(resolved) + + monkeypatch.setattr(w1_utils, "get_data_path", resolve) + monkeypatch.setattr(sim_cfg, "get_data_path", resolve) + + def test_dexforce_w1_roundtrip(): cfg = DexforceW1Cfg.from_dict({"uid": "dexforce_w1", "version": "v021"}) d = cfg.to_dict() @@ -58,11 +78,31 @@ def test_dexforce_w1_rejects_unknown_fields(): DexforceW1Cfg.from_dict({"unsupported_variant": "value"}) +@pytest.mark.parametrize( + "removed_field", + [ + "arm_sides", + "include_chassis", + "include_torso", + "include_head", + "include_eyes", + "include_wrist_cameras", + "component_versions", + ], +) +def test_dexforce_w1_rejects_removed_builder_fields(removed_field): + with pytest.raises(ValueError, match="Unknown DexforceW1 configuration fields"): + DexforceW1Cfg.from_dict({removed_field: None}) + + def test_w1_v025_eef_offset_applies_to_attach_and_tcp(): v021 = get_w1_version_spec(DexforceW1Version.V021) v025 = get_w1_version_spec(DexforceW1Version.V025) expected_offset = np.eye(4) expected_offset[2, 3] = 0.012 + hand_spec = get_w1_hand_spec( + DexforceW1HandBrand.BRAINCO_HAND, DexforceW1HandVersion.V021 + ) for arm_side in DexforceW1ArmSide: np.testing.assert_allclose(v021.eef_attach_xpos(arm_side), np.eye(4)) @@ -72,9 +112,11 @@ def test_w1_v025_eef_offset_applies_to_attach_and_tcp(): expected_offset @ v021.tcp(arm_side), ) np.testing.assert_allclose( - v025.hand_attach_xpos(DexforceW1HandBrand.BRAINCO_HAND, arm_side), - expected_offset - @ v021.hand_attach_xpos(DexforceW1HandBrand.BRAINCO_HAND, arm_side), + v025.compose_eef_attach_xpos( + arm_side, + hand_spec.for_side(arm_side).attach_xpos, + ), + expected_offset @ np.asarray(hand_spec.for_side(arm_side).attach_xpos), ) @@ -112,10 +154,6 @@ def test_w1_v022_provisional_eef_baseline_is_composed_consistently(): for arm_side in DexforceW1ArmSide: np.testing.assert_allclose(v022.eef_attach_xpos(arm_side), np.eye(4)) np.testing.assert_allclose(v022.tcp(arm_side), v021.tcp(arm_side)) - np.testing.assert_allclose( - v022.hand_attach_xpos(DexforceW1HandBrand.BRAINCO_HAND, arm_side), - v021.hand_attach_xpos(DexforceW1HandBrand.BRAINCO_HAND, arm_side), - ) def test_w1_v022_cfg_uses_registered_asset_paths(tmp_path, monkeypatch): @@ -148,6 +186,145 @@ def resolve_registered_path(path): assert "DexforceW1V022/w1/right_arm.urdf" in registered_paths +def test_w1_cfg_builds_complete_dual_arm_robot(monkeypatch, tmp_path): + _mock_w1_asset_paths(monkeypatch, tmp_path) + cfg = DexforceW1Cfg.from_dict({"version": "v021", "with_default_eef": False}) + + assert set(cfg.urdf_cfg.components) == { + "chassis", + "torso", + "head", + "left_arm", + "right_arm", + } + assert set(cfg.control_parts) == { + "torso", + "head", + "left_arm", + "right_arm", + "dual_arm", + "full_body", + } + assert set(cfg.solver_cfg) == {"left_arm", "right_arm"} + + +def test_w1_hand_version_is_independent_of_robot_version(monkeypatch, tmp_path): + _mock_w1_asset_paths(monkeypatch, tmp_path) + from embodichain.lab.sim.robots.dexforce_w1 import utils as w1_utils + + selected_versions = [] + original_get_urdf = w1_utils.hand_manager.get_urdf + + def capture_version(brand, side, version): + selected_versions.append((side, version)) + return original_get_urdf(brand, side, version) + + monkeypatch.setattr(w1_utils.hand_manager, "get_urdf", capture_version) + DexforceW1Cfg.from_dict( + { + "version": "v025", + } + ) + + assert selected_versions + assert all( + version == DexforceW1HandVersion.V021 for _, version in selected_versions + ) + + +@pytest.mark.parametrize("brand", list(DexforceW1HandBrand)) +def test_w1_hand_brand_defaults_are_explicitly_registered(brand): + version = get_default_w1_hand_version(brand) + + assert version == DexforceW1HandVersion.V021 + assert get_w1_hand_spec(brand, version).brand == brand + + +def test_w1_hand_version_roundtrip(monkeypatch, tmp_path): + _mock_w1_asset_paths(monkeypatch, tmp_path) + cfg = DexforceW1Cfg.from_dict( + {"version": "v025", "hand_versions": {"left": "v021"}} + ) + + data = cfg.to_dict() + restored = DexforceW1Cfg.from_dict(data) + + assert data["hand_versions"] == {"left": "v021", "right": "v021"} + assert restored.hand_versions == { + DexforceW1ArmSide.LEFT: DexforceW1HandVersion.V021, + DexforceW1ArmSide.RIGHT: DexforceW1HandVersion.V021, + } + + +def test_w1_rejects_unregistered_hand_version(): + with pytest.raises(ValueError, match="Invalid Dexforce W1 hand version"): + DexforceW1Cfg.from_dict({"hand_versions": {"left": "v025"}}) + + +def test_w1_rejects_robot_version_as_hand_version(): + with pytest.raises(ValueError, match="Invalid Dexforce W1 hand version"): + DexforceW1Cfg.from_dict({"hand_versions": {"left": DexforceW1Version.V021}}) + + +@pytest.mark.parametrize("version", ["v025", "V025", DexforceW1Version.V025]) +def test_w1_kine_params_accept_consistent_version_forms(version): + params = W1ArmKineParams.from_dict({"arm_side": "left", "version": version}) + + assert params.arm_side == DexforceW1ArmSide.LEFT + assert params.version == DexforceW1Version.V025 + + +def test_w1_version_spec_mappings_are_immutable(): + spec = get_w1_version_spec("v025") + + with pytest.raises(TypeError): + spec.solver_tcp[DexforceW1ArmSide.LEFT] = np.eye(4) + with pytest.raises(TypeError): + spec.component_urdfs[DexforceW1Type.LEFT_ARM] = "other.urdf" + + +def test_w1_v025_custom_eef_and_tcp_roundtrip(monkeypatch, tmp_path): + _mock_w1_asset_paths(monkeypatch, tmp_path) + baseline = DexforceW1Cfg.from_dict({"version": "v025"}) + raw_attach = np.eye(4) + raw_attach[:3, 3] = [0.01, -0.02, 0.03] + raw_tcp = np.eye(4) + raw_tcp[:3, 3] = [0.04, 0.05, 0.06] + cfg = DexforceW1Cfg.from_dict( + { + "version": "v025", + "urdf_cfg": { + "components": { + "left_hand": { + "urdf_path": baseline.urdf_cfg.components["left_hand"][ + "urdf_path" + ], + "transform": raw_attach.tolist(), + } + } + }, + "solver_cfg": {"left_arm": {"tcp": raw_tcp.tolist()}}, + } + ) + + expected_attach = get_w1_version_spec("v025").compose_eef_attach_xpos( + DexforceW1ArmSide.LEFT, raw_attach + ) + expected_tcp = get_w1_version_spec("v025").compose_eef_attach_xpos( + DexforceW1ArmSide.LEFT, raw_tcp + ) + restored = DexforceW1Cfg.from_dict(cfg.to_dict()) + + np.testing.assert_allclose( + cfg.urdf_cfg.components["left_hand"]["transform"], expected_attach + ) + np.testing.assert_allclose(cfg.solver_cfg["left_arm"].tcp, expected_tcp) + np.testing.assert_allclose( + restored.urdf_cfg.components["left_hand"]["transform"], expected_attach + ) + np.testing.assert_allclose(restored.solver_cfg["left_arm"].tcp, expected_tcp) + + class _RoundTripVariant(enum.Enum): A = "a" B = "b" From 29f1aafda46b98488bd6c7f43d8d7769490352bb Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Mon, 3 Aug 2026 17:24:50 +0800 Subject: [PATCH 8/9] remove redundant --- embodichain/lab/sim/robots/dexforce_w1/cfg.py | 12 ++-- .../lab/sim/robots/dexforce_w1/hand_specs.py | 11 ++- .../lab/sim/robots/dexforce_w1/params.py | 6 +- .../lab/sim/robots/dexforce_w1/specs.py | 3 +- .../lab/sim/robots/dexforce_w1/types.py | 69 ++++++++----------- .../lab/sim/robots/dexforce_w1/utils.py | 11 ++- 6 files changed, 44 insertions(+), 68 deletions(-) diff --git a/embodichain/lab/sim/robots/dexforce_w1/cfg.py b/embodichain/lab/sim/robots/dexforce_w1/cfg.py index 823d164f4..85ace00f9 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/cfg.py +++ b/embodichain/lab/sim/robots/dexforce_w1/cfg.py @@ -28,10 +28,6 @@ DexforceW1HandBrand, DexforceW1HandVersion, DexforceW1Version, - parse_w1_arm_side, - parse_w1_hand_brand, - parse_w1_hand_version, - parse_w1_version, ) from embodichain.lab.sim.robots.dexforce_w1.utils import ( build_dexforce_w1_assembly_urdf_cfg, @@ -170,17 +166,17 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: ``solver_cfg``, ``drive_pros`` and ``attrs``. """ init_dict = init_dict or {} - self.version = parse_w1_version( + self.version = DexforceW1Version.parse( init_dict.get("version", DexforceW1Version.V021) ) self.with_default_eef = bool(init_dict.get("with_default_eef", True)) self.hand_types = { - parse_w1_arm_side(side): parse_w1_hand_brand(brand) + DexforceW1ArmSide.parse(side): DexforceW1HandBrand.parse(brand) for side, brand in init_dict.get("hand_types", {}).items() } configured_hand_versions = { - parse_w1_arm_side(side): parse_w1_hand_version(version) + DexforceW1ArmSide.parse(side): DexforceW1HandVersion.parse(version) for side, version in init_dict.get("hand_versions", {}).items() } self.hand_versions = { @@ -193,7 +189,7 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: for side in DexforceW1ArmSide } self.hand_attach_xposes = { - parse_w1_arm_side(side): np.asarray(transform, dtype=float) + DexforceW1ArmSide.parse(side): np.asarray(transform, dtype=float) for side, transform in init_dict.get("hand_attach_xposes", {}).items() } diff --git a/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py b/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py index 92b88d1ec..7df0d66a2 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py +++ b/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py @@ -29,9 +29,6 @@ DexforceW1ArmSide, DexforceW1HandBrand, DexforceW1HandVersion, - parse_w1_arm_side, - parse_w1_hand_brand, - parse_w1_hand_version, ) __all__ = [ @@ -77,7 +74,7 @@ def __post_init__(self) -> None: object.__setattr__(self, "sides", MappingProxyType(dict(self.sides))) def for_side(self, side: DexforceW1ArmSide | str) -> W1HandSideSpec: - side = parse_w1_arm_side(side) + side = DexforceW1ArmSide.parse(side) try: return self.sides[side] except KeyError as exc: @@ -177,7 +174,7 @@ def get_default_w1_hand_version( brand: DexforceW1HandBrand | str, ) -> DexforceW1HandVersion: """Return the explicitly selected default release for a hand brand.""" - brand = parse_w1_hand_brand(brand) + brand = DexforceW1HandBrand.parse(brand) try: return _DEFAULT_W1_HAND_VERSIONS[brand] except KeyError as exc: @@ -191,8 +188,8 @@ def get_w1_hand_spec( version: DexforceW1HandVersion | str, ) -> W1HandSpec: """Return an explicitly registered hand release.""" - brand = parse_w1_hand_brand(brand) - version = parse_w1_hand_version(version) + brand = DexforceW1HandBrand.parse(brand) + version = DexforceW1HandVersion.parse(version) try: return _W1_HAND_SPECS[(brand, version)] except KeyError as exc: diff --git a/embodichain/lab/sim/robots/dexforce_w1/params.py b/embodichain/lab/sim/robots/dexforce_w1/params.py index 4831a4985..da759c2d2 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/params.py +++ b/embodichain/lab/sim/robots/dexforce_w1/params.py @@ -21,8 +21,6 @@ from embodichain.lab.sim.robots.dexforce_w1.types import ( DexforceW1ArmSide, DexforceW1Version, - parse_w1_arm_side, - parse_w1_version, ) from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec @@ -148,8 +146,8 @@ def as_dict(self) -> dict: @classmethod def from_dict(cls, data: dict) -> "W1ArmKineParams": - arm_side = parse_w1_arm_side(data["arm_side"]) - version = parse_w1_version(data.get("version", DexforceW1Version.V021)) + arm_side = DexforceW1ArmSide.parse(data["arm_side"]) + version = DexforceW1Version.parse(data.get("version", DexforceW1Version.V021)) inst = cls(arm_side=arm_side, version=version) # allow overriding computed arrays if provided diff --git a/embodichain/lab/sim/robots/dexforce_w1/specs.py b/embodichain/lab/sim/robots/dexforce_w1/specs.py index 739578fba..986bb7819 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/specs.py +++ b/embodichain/lab/sim/robots/dexforce_w1/specs.py @@ -29,7 +29,6 @@ DexforceW1ArmSide, DexforceW1Type, DexforceW1Version, - parse_w1_version, ) __all__ = [ @@ -243,4 +242,4 @@ def wrist_camera_xpos(self, arm_side: DexforceW1ArmSide) -> np.ndarray: def get_w1_version_spec(version: DexforceW1Version | str) -> W1VersionSpec: - return _W1_VERSION_SPECS[parse_w1_version(version)] + return _W1_VERSION_SPECS[DexforceW1Version.parse(version)] diff --git a/embodichain/lab/sim/robots/dexforce_w1/types.py b/embodichain/lab/sim/robots/dexforce_w1/types.py index dca8ceeda..27bcf756e 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/types.py +++ b/embodichain/lab/sim/robots/dexforce_w1/types.py @@ -15,6 +15,8 @@ # ---------------------------------------------------------------------------- import enum +import re +from typing import TypeVar __all__ = [ "DexforceW1Version", @@ -22,14 +24,32 @@ "DexforceW1ArmSide", "DexforceW1Type", "DexforceW1HandBrand", - "parse_w1_version", - "parse_w1_hand_version", - "parse_w1_arm_side", - "parse_w1_hand_brand", ] +_W1EnumT = TypeVar("_W1EnumT", bound="_W1Enum") -class DexforceW1Version(enum.Enum): + +class _W1Enum(enum.Enum): + @classmethod + def _parse_label(cls) -> str: + name = cls.__name__.removeprefix("DexforceW1") + words = re.sub(r"(? _W1EnumT: + """Parse an enum instance, member name, or serialized value.""" + if isinstance(value, cls): + return value + if isinstance(value, str): + normalized = value.lower() + for member in cls: + if normalized in (member.name.lower(), str(member.value).lower()): + return member + raise ValueError(f"Invalid {cls._parse_label()}: {value!r}") + + +class DexforceW1Version(_W1Enum): """Released version of the W1 robot body and arms.""" V021 = "v021" @@ -37,20 +57,20 @@ class DexforceW1Version(enum.Enum): V025 = "v025" -class DexforceW1HandVersion(enum.Enum): +class DexforceW1HandVersion(_W1Enum): """Released version of an external W1 hand or gripper asset.""" V021 = "v021" -class DexforceW1ArmSide(enum.Enum): +class DexforceW1ArmSide(_W1Enum): """Arm side for DexforceW1: left or right.""" LEFT = "left" RIGHT = "right" -class DexforceW1Type(enum.Enum): +class DexforceW1Type(_W1Enum): """Component type for DexforceW1.""" CHASSIS = "chassis" @@ -64,38 +84,7 @@ class DexforceW1Type(enum.Enum): FULL_BODY = "full_body" # Full robot -class DexforceW1HandBrand(enum.Enum): +class DexforceW1HandBrand(_W1Enum): BRAINCO_HAND = "BRAINCO_HAND" DH_PGC_GRIPPER = "DH_PGC_GRIPPER" DH_PGC_GRIPPER_M = "DH_PGC_GRIPPER_M" - - -def _parse_enum(value, enum_type, label): - if isinstance(value, enum_type): - return value - if isinstance(value, str): - normalized = value.lower() - for member in enum_type: - if normalized in (member.name.lower(), str(member.value).lower()): - return member - raise ValueError(f"Invalid {label}: {value!r}") - - -def parse_w1_version(value) -> DexforceW1Version: - """Parse a W1 robot version from an enum, member name, or value.""" - return _parse_enum(value, DexforceW1Version, "Dexforce W1 version") - - -def parse_w1_hand_version(value) -> DexforceW1HandVersion: - """Parse a W1 hand version from an enum, member name, or value.""" - return _parse_enum(value, DexforceW1HandVersion, "Dexforce W1 hand version") - - -def parse_w1_arm_side(value) -> DexforceW1ArmSide: - """Parse a W1 arm side from an enum, member name, or serialized value.""" - return _parse_enum(value, DexforceW1ArmSide, "Dexforce W1 arm side") - - -def parse_w1_hand_brand(value) -> DexforceW1HandBrand: - """Parse a W1 hand brand from an enum, member name, or serialized value.""" - return _parse_enum(value, DexforceW1HandBrand, "Dexforce W1 hand brand") diff --git a/embodichain/lab/sim/robots/dexforce_w1/utils.py b/embodichain/lab/sim/robots/dexforce_w1/utils.py index 6246302d2..1a6d73c1b 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/utils.py +++ b/embodichain/lab/sim/robots/dexforce_w1/utils.py @@ -23,9 +23,6 @@ DexforceW1Version, DexforceW1HandBrand, DexforceW1HandVersion, - parse_w1_arm_side, - parse_w1_hand_version, - parse_w1_version, ) from embodichain.lab.sim.robots.dexforce_w1.hand_specs import ( get_default_w1_hand_version, @@ -206,9 +203,9 @@ def build_dexforce_w1_assembly_urdf_cfg( URDFCfg: Assembled URDF configuration. """ - version = parse_w1_version(version) + version = DexforceW1Version.parse(version) hand_versions = { - parse_w1_arm_side(side): parse_w1_hand_version(hand_version) + DexforceW1ArmSide.parse(side): DexforceW1HandVersion.parse(hand_version) for side, hand_version in (hand_versions or {}).items() } @@ -362,9 +359,9 @@ def build_dexforce_w1_control_parts( include_hand: bool, ) -> dict[str, list[str]]: """Build control-part joint lists for a complete dual-arm W1.""" - version = parse_w1_version(version) + version = DexforceW1Version.parse(version) hand_versions = { - parse_w1_arm_side(side): parse_w1_hand_version(hand_version) + DexforceW1ArmSide.parse(side): DexforceW1HandVersion.parse(hand_version) for side, hand_version in (hand_versions or {}).items() } From 3731d0e98e9d7a1169c5b1d931a4cbefbec04dab Mon Sep 17 00:00:00 2001 From: yuanhaonan Date: Tue, 4 Aug 2026 09:53:38 +0800 Subject: [PATCH 9/9] fix mapping none --- embodichain/lab/sim/robots/dexforce_w1/cfg.py | 22 +++---- .../lab/sim/robots/dexforce_w1/hand_specs.py | 31 ++++++++++ .../lab/sim/robots/dexforce_w1/utils.py | 18 +++--- tests/sim/objects/test_robot_cfg.py | 62 +++++++++++++++++++ 4 files changed, 113 insertions(+), 20 deletions(-) diff --git a/embodichain/lab/sim/robots/dexforce_w1/cfg.py b/embodichain/lab/sim/robots/dexforce_w1/cfg.py index 85ace00f9..2cea0df17 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/cfg.py +++ b/embodichain/lab/sim/robots/dexforce_w1/cfg.py @@ -35,6 +35,7 @@ ) from embodichain.lab.sim.robots.dexforce_w1.hand_specs import ( get_default_w1_hand_version, + normalize_w1_hand_mappings, ) from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec from embodichain.lab.sim.cfg import ( @@ -171,14 +172,15 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: ) self.with_default_eef = bool(init_dict.get("with_default_eef", True)) - self.hand_types = { - DexforceW1ArmSide.parse(side): DexforceW1HandBrand.parse(brand) - for side, brand in init_dict.get("hand_types", {}).items() - } - configured_hand_versions = { - DexforceW1ArmSide.parse(side): DexforceW1HandVersion.parse(version) - for side, version in init_dict.get("hand_versions", {}).items() - } + ( + self.hand_types, + configured_hand_versions, + self.hand_attach_xposes, + ) = normalize_w1_hand_mappings( + hand_types=init_dict.get("hand_types"), + hand_versions=init_dict.get("hand_versions"), + hand_attach_xposes=init_dict.get("hand_attach_xposes"), + ) self.hand_versions = { side: configured_hand_versions.get( side, @@ -188,10 +190,6 @@ def _build_defaults(self, init_dict: dict | None = None) -> None: ) for side in DexforceW1ArmSide } - self.hand_attach_xposes = { - DexforceW1ArmSide.parse(side): np.asarray(transform, dtype=float) - for side, transform in init_dict.get("hand_attach_xposes", {}).items() - } self.urdf_cfg = build_dexforce_w1_assembly_urdf_cfg( version=self.version, diff --git a/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py b/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py index 7df0d66a2..1e94f1bba 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py +++ b/embodichain/lab/sim/robots/dexforce_w1/hand_specs.py @@ -36,6 +36,7 @@ "W1HandSpec", "get_default_w1_hand_version", "get_w1_hand_spec", + "normalize_w1_hand_mappings", ] @@ -84,6 +85,36 @@ def for_side(self, side: DexforceW1ArmSide | str) -> W1HandSideSpec: ) from exc +def normalize_w1_hand_mappings( + hand_types: Mapping | None = None, + hand_versions: Mapping | None = None, + hand_attach_xposes: Mapping | None = None, +) -> tuple[dict, dict, dict]: + """Normalize optional side-keyed hand configuration mappings.""" + fields = { + "hand_types": hand_types, + "hand_versions": hand_versions, + "hand_attach_xposes": hand_attach_xposes, + } + for field_name, value in fields.items(): + if value is not None and not isinstance(value, Mapping): + raise TypeError(f"{field_name} must be a mapping or None") + + normalized_types = { + DexforceW1ArmSide.parse(side): DexforceW1HandBrand.parse(brand) + for side, brand in (hand_types or {}).items() + } + normalized_versions = { + DexforceW1ArmSide.parse(side): DexforceW1HandVersion.parse(version) + for side, version in (hand_versions or {}).items() + } + normalized_attach_xposes = { + DexforceW1ArmSide.parse(side): np.asarray(transform, dtype=float) + for side, transform in (hand_attach_xposes or {}).items() + } + return normalized_types, normalized_versions, normalized_attach_xposes + + def _brainco_side(side: DexforceW1ArmSide) -> W1HandSideSpec: prefix = "LEFT" if side == DexforceW1ArmSide.LEFT else "RIGHT" side_name = "Left" if side == DexforceW1ArmSide.LEFT else "Right" diff --git a/embodichain/lab/sim/robots/dexforce_w1/utils.py b/embodichain/lab/sim/robots/dexforce_w1/utils.py index 1a6d73c1b..2ac4fd048 100644 --- a/embodichain/lab/sim/robots/dexforce_w1/utils.py +++ b/embodichain/lab/sim/robots/dexforce_w1/utils.py @@ -27,6 +27,7 @@ from embodichain.lab.sim.robots.dexforce_w1.hand_specs import ( get_default_w1_hand_version, get_w1_hand_spec, + normalize_w1_hand_mappings, ) from embodichain.data import get_data_path from embodichain.lab.sim.cfg import URDFCfg @@ -204,10 +205,11 @@ def build_dexforce_w1_assembly_urdf_cfg( """ version = DexforceW1Version.parse(version) - hand_versions = { - DexforceW1ArmSide.parse(side): DexforceW1HandVersion.parse(hand_version) - for side, hand_version in (hand_versions or {}).items() - } + hand_types, hand_versions, hand_attach_xposes = normalize_w1_hand_mappings( + hand_types=hand_types, + hand_versions=hand_versions, + hand_attach_xposes=hand_attach_xposes, + ) if fname is None: fname = get_w1_version_spec(version).assembly_name @@ -360,10 +362,10 @@ def build_dexforce_w1_control_parts( ) -> dict[str, list[str]]: """Build control-part joint lists for a complete dual-arm W1.""" version = DexforceW1Version.parse(version) - hand_versions = { - DexforceW1ArmSide.parse(side): DexforceW1HandVersion.parse(hand_version) - for side, hand_version in (hand_versions or {}).items() - } + hand_types, hand_versions, _ = normalize_w1_hand_mappings( + hand_types=hand_types, + hand_versions=hand_versions, + ) arm_joints = {} for arm_side in DexforceW1ArmSide: diff --git a/tests/sim/objects/test_robot_cfg.py b/tests/sim/objects/test_robot_cfg.py index 750588300..ca025a119 100644 --- a/tests/sim/objects/test_robot_cfg.py +++ b/tests/sim/objects/test_robot_cfg.py @@ -39,6 +39,10 @@ get_w1_hand_spec, ) from embodichain.lab.sim.robots.dexforce_w1.specs import get_w1_version_spec +from embodichain.lab.sim.robots.dexforce_w1.utils import ( + build_dexforce_w1_assembly_urdf_cfg, + build_dexforce_w1_control_parts, +) from embodichain.lab.sim.solvers import SRSSolverCfg from embodichain.utils import configclass from embodichain.lab.sim.utility.cfg_utils import merge_robot_cfg @@ -78,6 +82,64 @@ def test_dexforce_w1_rejects_unknown_fields(): DexforceW1Cfg.from_dict({"unsupported_variant": "value"}) +@pytest.mark.parametrize( + "field_name", + ["hand_types", "hand_versions", "hand_attach_xposes"], +) +def test_w1_optional_hand_mapping_accepts_none(field_name): + cfg = DexforceW1Cfg.from_dict({field_name: None}) + + assert cfg.hand_types == {} + assert cfg.hand_versions == { + DexforceW1ArmSide.LEFT: DexforceW1HandVersion.V021, + DexforceW1ArmSide.RIGHT: DexforceW1HandVersion.V021, + } + assert cfg.hand_attach_xposes == {} + + +@pytest.mark.parametrize( + "field_name", + ["hand_types", "hand_versions", "hand_attach_xposes"], +) +def test_w1_optional_hand_mapping_rejects_non_mapping(field_name): + with pytest.raises(TypeError, match=f"{field_name} must be a mapping or None"): + DexforceW1Cfg.from_dict({field_name: []}) + + +def test_w1_builders_normalize_string_hand_mappings(monkeypatch, tmp_path): + _mock_w1_asset_paths(monkeypatch, tmp_path) + attach_xpos = np.eye(4) + attach_xpos[0, 3] = 0.123 + hand_types = {"left": "DH_PGC_GRIPPER"} + hand_versions = {"left": "v021"} + + urdf_cfg = build_dexforce_w1_assembly_urdf_cfg( + version="v025", + hand_types=hand_types, + hand_versions=hand_versions, + hand_attach_xposes={"left": attach_xpos}, + ) + control_parts = build_dexforce_w1_control_parts( + version="v025", + hand_types=hand_types, + hand_versions=hand_versions, + include_hand=True, + ) + + left_hand = urdf_cfg.components["left_hand"] + assert "DH_PGC_140_50" in left_hand["urdf_path"] + np.testing.assert_allclose( + left_hand["transform"], + get_w1_version_spec("v025").compose_eef_attach_xpos( + DexforceW1ArmSide.LEFT, attach_xpos + ), + ) + assert control_parts["left_eef"] == [ + "LEFT_FINGER1_JOINT", + "LEFT_FINGER2_JOINT", + ] + + @pytest.mark.parametrize( "removed_field", [