From 92633e9f8defb8458e9ad4ec08691a0a5d102ed2 Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Tue, 10 Feb 2026 00:57:05 +0800 Subject: [PATCH 01/10] fixed 2026 migration and repository link --- .gitignore | 187 ++++++ .vscode/launch.json | 21 + .vscode/settings.json | 61 ++ .wpilib/wpilib_preferences.json | 6 + WPILib-License.md | 24 + build.gradle | 107 ++++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 252 ++++++++ gradlew.bat | 94 +++ settings.gradle | 30 + .../deploy/SWERVE/controllerproperties.json | 8 + src/main/deploy/SWERVE/modules/Backleft.json | 27 + src/main/deploy/SWERVE/modules/Backright.json | 27 + src/main/deploy/SWERVE/modules/Frontleft.json | 27 + .../deploy/SWERVE/modules/Frontright.json | 27 + .../SWERVE/modules/physicalproperties.json | 24 + .../deploy/SWERVE/modules/pidfproperties.json | 16 + src/main/deploy/SWERVE/swerve.json | 9 + src/main/deploy/SWERVE/swervedrive.json | 15 + src/main/deploy/pathplanner/2026-rebuilt.json | 19 + src/main/deploy/pathplanner/image.png | Bin 0 -> 1191688 bytes src/main/java/frc/robot/Constants.java | 77 +++ src/main/java/frc/robot/Input.java | 28 + src/main/java/frc/robot/Main.java | 25 + src/main/java/frc/robot/Robot.java | 204 +++++++ src/main/java/frc/robot/RobotContainer.java | 281 +++++++++ src/main/java/frc/robot/commands/Autos.java | 64 ++ .../robot/commands/auto/AutoAlgaeAuto.java | 56 ++ .../commands/auto/AutoAvoidCollision.java | 65 ++ .../frc/robot/commands/auto/AutoBalance.java | 65 ++ .../robot/commands/auto/AutoComplexPath.java | 115 ++++ .../robot/commands/auto/AutoDriveCommand.java | 138 +++++ .../frc/robot/commands/auto/AutoFigure8.java | 169 ++++++ .../robot/commands/auto/AutoPickupAuto.java | 80 +++ .../commands/auto/AutoProcessorAuto.java | 53 ++ .../robot/commands/auto/AutoSafeScore.java | 53 ++ .../robot/commands/auto/AutoTripleScore.java | 60 ++ .../robot/commands/auto/SequentialAuto.java | 100 ++++ .../frc/robot/commands/auto/SimpleAuto.java | 94 +++ .../subsystems/2026ChassisBot.code-workspace | 7 + .../frc/robot/subsystems/DriveSubsystem.java | 560 ++++++++++++++++++ .../frc/robot/subsystems/LimelightVision.java | 406 +++++++++++++ .../frc/robot/subsystems/SwerveModule.java | 80 +++ vendordeps/WPILibNewCommands.json | 39 ++ 45 files changed, 3807 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .wpilib/wpilib_preferences.json create mode 100644 WPILib-License.md create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/deploy/SWERVE/controllerproperties.json create mode 100644 src/main/deploy/SWERVE/modules/Backleft.json create mode 100644 src/main/deploy/SWERVE/modules/Backright.json create mode 100644 src/main/deploy/SWERVE/modules/Frontleft.json create mode 100644 src/main/deploy/SWERVE/modules/Frontright.json create mode 100644 src/main/deploy/SWERVE/modules/physicalproperties.json create mode 100644 src/main/deploy/SWERVE/modules/pidfproperties.json create mode 100644 src/main/deploy/SWERVE/swerve.json create mode 100644 src/main/deploy/SWERVE/swervedrive.json create mode 100644 src/main/deploy/pathplanner/2026-rebuilt.json create mode 100644 src/main/deploy/pathplanner/image.png create mode 100644 src/main/java/frc/robot/Constants.java create mode 100644 src/main/java/frc/robot/Input.java create mode 100644 src/main/java/frc/robot/Main.java create mode 100644 src/main/java/frc/robot/Robot.java create mode 100644 src/main/java/frc/robot/RobotContainer.java create mode 100644 src/main/java/frc/robot/commands/Autos.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoAlgaeAuto.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoAvoidCollision.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoBalance.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoComplexPath.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoDriveCommand.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoFigure8.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoPickupAuto.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoProcessorAuto.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoSafeScore.java create mode 100644 src/main/java/frc/robot/commands/auto/AutoTripleScore.java create mode 100644 src/main/java/frc/robot/commands/auto/SequentialAuto.java create mode 100644 src/main/java/frc/robot/commands/auto/SimpleAuto.java create mode 100644 src/main/java/frc/robot/subsystems/2026ChassisBot.code-workspace create mode 100644 src/main/java/frc/robot/subsystems/DriveSubsystem.java create mode 100644 src/main/java/frc/robot/subsystems/LimelightVision.java create mode 100644 src/main/java/frc/robot/subsystems/SwerveModule.java create mode 100644 vendordeps/WPILibNewCommands.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..34cbaac --- /dev/null +++ b/.gitignore @@ -0,0 +1,187 @@ +# This gitignore has been specially created by the WPILib team. +# If you remove items from this file, intellisense might break. + +### C++ ### +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +### Gradle ### +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +# # VS Code Specific Java Settings +# DO NOT REMOVE .classpath and .project +.classpath +.project +.settings/ +bin/ + +# IntelliJ +*.iml +*.ipr +*.iws +.idea/ +out/ + +# Fleet +.fleet + +# Simulation GUI and other tools window save file +networktables.json +simgui.json +*-window.json + +# Simulation data log directory +logs/ + +# Folder that has CTRE Phoenix Sim device config storage +ctre_sim/ + +# clangd +/.cache +compile_commands.json + +# Eclipse generated file for annotation processors +.factorypath diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..c9c9713 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "type": "wpilib", + "name": "WPILib Desktop Debug", + "request": "launch", + "desktop": true, + }, + { + "type": "wpilib", + "name": "WPILib roboRIO Debug", + "request": "launch", + "desktop": false, + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..5e6ede8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,61 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic", + "java.server.launchMode": "Standard", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "bin/": true, + "**/.classpath": true, + "**/.project": true, + "**/.settings": true, + "**/.factorypath": true, + "**/*~": true + }, + "java.test.config": [ + { + "name": "WPIlibUnitTests", + "workingDirectory": "${workspaceFolder}/build/jni/release", + "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], + "env": { + "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , + "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" + } + }, + ], + "java.test.defaultConfig": "WPIlibUnitTests", + "java.import.gradle.annotationProcessing.enabled": false, + "java.completion.favoriteStaticMembers": [ + "org.junit.Assert.*", + "org.junit.Assume.*", + "org.junit.jupiter.api.Assertions.*", + "org.junit.jupiter.api.Assumptions.*", + "org.junit.jupiter.api.DynamicContainer.*", + "org.junit.jupiter.api.DynamicTest.*", + "org.mockito.Mockito.*", + "org.mockito.ArgumentMatchers.*", + "org.mockito.Answers.*", + "edu.wpi.first.units.Units.*" + ], + "java.completion.filteredTypes": [ + "java.awt.*", + "com.sun.*", + "sun.*", + "jdk.*", + "org.graalvm.*", + "io.micrometer.shaded.*", + "java.beans.*", + "java.util.Base64.*", + "java.util.Timer", + "java.sql.*", + "javax.swing.*", + "javax.management.*", + "javax.smartcardio.*", + "edu.wpi.first.math.proto.*", + "edu.wpi.first.math.**.proto.*", + "edu.wpi.first.math.**.struct.*", + ], + "java.dependency.enableDependencyCheckup": false +} diff --git a/.wpilib/wpilib_preferences.json b/.wpilib/wpilib_preferences.json new file mode 100644 index 0000000..c4bad9a --- /dev/null +++ b/.wpilib/wpilib_preferences.json @@ -0,0 +1,6 @@ +{ + "enableCppIntellisense": false, + "currentLanguage": "java", + "projectYear": "2026", + "teamNumber": 1334 +} \ No newline at end of file diff --git a/WPILib-License.md b/WPILib-License.md new file mode 100644 index 0000000..eb3061b --- /dev/null +++ b/WPILib-License.md @@ -0,0 +1,24 @@ +Copyright (c) 2009-2026 FIRST and other WPILib contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of FIRST, WPILib, nor the names of other WPILib + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..21805c5 --- /dev/null +++ b/build.gradle @@ -0,0 +1,107 @@ +plugins { + id "java" + id "edu.wpi.first.GradleRIO" version "2026.2.1" +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +def ROBOT_MAIN_CLASS = "frc.robot.Main" + +// Define my targets (RoboRIO) and artifacts (deployable files) +// This is added by GradleRIO's backing project DeployUtils. +deploy { + targets { + roborio(getTargetTypeClass('RoboRIO')) { + // Team number is loaded either from the .wpilib/wpilib_preferences.json + // or from command line. If not found an exception will be thrown. + // You can use getTeamOrDefault(team) instead of getTeamNumber if you + // want to store a team number in this file. + team = project.frc.getTeamNumber() + debug = project.frc.getDebugOrDefault(false) + + artifacts { + // First part is artifact name, 2nd is artifact type + // getTargetTypeClass is a shortcut to get the class type using a string + + frcJava(getArtifactTypeClass('FRCJavaArtifact')) { + } + + // Static files artifact + frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { + files = project.fileTree('src/main/deploy') + directory = '/home/lvuser/deploy' + deleteOldFiles = false // Change to true to delete files on roboRIO that no + // longer exist in deploy directory of this project + } + } + } + } +} + +def deployArtifact = deploy.targets.roborio.artifacts.frcJava + +// Set to true to use debug for all targets including JNI, which will drastically impact +// performance. +wpi.java.debugJni = false + +// Set this to true to enable desktop support. +def includeDesktopSupport = false + +// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. +// Also defines JUnit 5. +dependencies { + annotationProcessor wpi.java.deps.wpilibAnnotations() + implementation wpi.java.deps.wpilib() + implementation wpi.java.vendor.java() + + roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) + roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) + + roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) + roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) + + nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) + nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) + simulationDebug wpi.sim.enableDebug() + + nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) + nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) + simulationRelease wpi.sim.enableRelease() + + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +test { + useJUnitPlatform() + systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' +} + +// Simulation configuration (e.g. environment variables). +wpi.sim.addGui().defaultEnabled = true +wpi.sim.addDriverstation() + +// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') +// in order to make them all available at runtime. Also adding the manifest so WPILib +// knows where to look for our Robot Class. +jar { + from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } + from('src') { into 'backup/src' } + from('vendordeps') { into 'backup/vendordeps' } + from('build.gradle') { into 'backup' } + manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) + duplicatesStrategy = DuplicatesStrategy.INCLUDE +} + +// Configure jar and deploy tasks +deployArtifact.jarTask = jar +wpi.java.configureExecutableTasks(jar) +wpi.java.configureTestTasks(test) + +// Configure string concat to always inline compile +tasks.withType(JavaCompile) { + options.compilerArgs.add '-XDstringConcat=inline' +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..34bd9ce --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=permwrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=permwrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..f5feea6 --- /dev/null +++ b/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# 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 +# +# https://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. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..25f6f6e --- /dev/null +++ b/settings.gradle @@ -0,0 +1,30 @@ +import org.gradle.internal.os.OperatingSystem + +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + String frcYear = '2026' + File frcHome + if (OperatingSystem.current().isWindows()) { + String publicFolder = System.getenv('PUBLIC') + if (publicFolder == null) { + publicFolder = "C:\\Users\\Public" + } + def homeRoot = new File(publicFolder, "wpilib") + frcHome = new File(homeRoot, frcYear) + } else { + def userFolder = System.getProperty("user.home") + def homeRoot = new File(userFolder, "wpilib") + frcHome = new File(homeRoot, frcYear) + } + def frcHomeMaven = new File(frcHome, 'maven') + maven { + name = 'frcHome' + url = frcHomeMaven + } + } +} + +Properties props = System.getProperties(); +props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/src/main/deploy/SWERVE/controllerproperties.json b/src/main/deploy/SWERVE/controllerproperties.json new file mode 100644 index 0000000..6b8b234 --- /dev/null +++ b/src/main/deploy/SWERVE/controllerproperties.json @@ -0,0 +1,8 @@ +{ + "angleJoystickRadiusDeadband": 0.05, + "heading": { + "p": 0.0, + "i": 0.0, + "d": 0.0 + } +} diff --git a/src/main/deploy/SWERVE/modules/Backleft.json b/src/main/deploy/SWERVE/modules/Backleft.json new file mode 100644 index 0000000..63f462f --- /dev/null +++ b/src/main/deploy/SWERVE/modules/Backleft.json @@ -0,0 +1,27 @@ +{ + "location": { + "front": -11.125, + "left": 11.125 + }, + "absoluteEncoderOffset": 0, + "drive": { + "type": "talonfx", + "id": 43, + "canbus": null + }, + "angle": { + "type": "talonfx", + "id": 42, + "canbus": null + }, + "encoder": { + "type": "cancoder", + "id": 41, + "canbus": null + }, + "inverted": { + "drive": false, + "angle": false + }, + "absoluteEncoderInverted": false +} \ No newline at end of file diff --git a/src/main/deploy/SWERVE/modules/Backright.json b/src/main/deploy/SWERVE/modules/Backright.json new file mode 100644 index 0000000..865e5ba --- /dev/null +++ b/src/main/deploy/SWERVE/modules/Backright.json @@ -0,0 +1,27 @@ +{ + "location": { + "front": -11.125, + "left": -11.125 + }, + "absoluteEncoderOffset": 36.13, + "drive": { + "type": "talonfx", + "id": 33, + "canbus": null + }, + "angle": { + "type": "talonfx", + "id": 32, + "canbus": null + }, + "encoder": { + "type": "cancoder", + "id": 31, + "canbus": null + }, + "inverted": { + "drive": false, + "angle": false + }, + "absoluteEncoderInverted": false +} \ No newline at end of file diff --git a/src/main/deploy/SWERVE/modules/Frontleft.json b/src/main/deploy/SWERVE/modules/Frontleft.json new file mode 100644 index 0000000..d723112 --- /dev/null +++ b/src/main/deploy/SWERVE/modules/Frontleft.json @@ -0,0 +1,27 @@ +{ + "location": { + "front": 11.125, + "left": 11.125 + }, + "absoluteEncoderOffset": 0, + "drive": { + "type": "talonfx", + "id": 13, + "canbus": null + }, + "angle": { + "type": "talonfx", + "id": 12, + "canbus": null + }, + "encoder": { + "type": "cancoder", + "id": 11, + "canbus": null + }, + "inverted": { + "drive": false, + "angle": false + }, + "absoluteEncoderInverted": false +} \ No newline at end of file diff --git a/src/main/deploy/SWERVE/modules/Frontright.json b/src/main/deploy/SWERVE/modules/Frontright.json new file mode 100644 index 0000000..42f017a --- /dev/null +++ b/src/main/deploy/SWERVE/modules/Frontright.json @@ -0,0 +1,27 @@ +{ + "location": { + "front": 11.125, + "left": -11.125 + }, + "absoluteEncoderOffset": 0, + "drive": { + "type": "talonfx", + "id": 23, + "canbus": null + }, + "angle": { + "type": "talonfx", + "id": 22, + "canbus": null + }, + "encoder": { + "type": "cancoder", + "id": 21, + "canbus": null + }, + "inverted": { + "drive": false, + "angle": false + }, + "absoluteEncoderInverted": false +} \ No newline at end of file diff --git a/src/main/deploy/SWERVE/modules/physicalproperties.json b/src/main/deploy/SWERVE/modules/physicalproperties.json new file mode 100644 index 0000000..41df2be --- /dev/null +++ b/src/main/deploy/SWERVE/modules/physicalproperties.json @@ -0,0 +1,24 @@ +{ + "optimalVoltage": 12, + "robotMass": 110.2311, + "wheelGripCoefficientOfFriction": 1.19, + "currentLimit": { + "drive": 40, + "angle": 20 + }, + "conversionFactors": { + "angle": { + "gearRatio": 21.428571429, + "factor": 0 + }, + "drive": { + "diameter": 4, + "gearRatio": 6.75, + "factor": 0 + } + }, + "rampRate": { + "drive": 0.25, + "angle": 0.0 + } +} \ No newline at end of file diff --git a/src/main/deploy/SWERVE/modules/pidfproperties.json b/src/main/deploy/SWERVE/modules/pidfproperties.json new file mode 100644 index 0000000..0622922 --- /dev/null +++ b/src/main/deploy/SWERVE/modules/pidfproperties.json @@ -0,0 +1,16 @@ +{ + "drive": { + "p": 0.0020645, + "i": 0, + "d": 0, + "f": 0, + "iz": 0 + }, + "angle": { + "p": 0.080645, + "i": 0, + "d": 0.001, + "f": 0, + "iz": 0 + } +} diff --git a/src/main/deploy/SWERVE/swerve.json b/src/main/deploy/SWERVE/swerve.json new file mode 100644 index 0000000..4d6a677 --- /dev/null +++ b/src/main/deploy/SWERVE/swerve.json @@ -0,0 +1,9 @@ +{ + "gyro": { + "type": "pigeon2", + "id": 1, + "canbus": null + }, + "invertedDrive": false, + "maxSpeed": 4.5 +} diff --git a/src/main/deploy/SWERVE/swervedrive.json b/src/main/deploy/SWERVE/swervedrive.json new file mode 100644 index 0000000..5c4ddd2 --- /dev/null +++ b/src/main/deploy/SWERVE/swervedrive.json @@ -0,0 +1,15 @@ +{ + "imu": { + "type": "pigeon2", + "id": 50, + "canbus": null + }, + "invertedIMU": true, + "modules": [ + "Frontleft.json", + "Frontright.json", + "Backleft.json", + "Backright.json" + ], + "note": "Check IMU inversion." +} diff --git a/src/main/deploy/pathplanner/2026-rebuilt.json b/src/main/deploy/pathplanner/2026-rebuilt.json new file mode 100644 index 0000000..fa81b88 --- /dev/null +++ b/src/main/deploy/pathplanner/2026-rebuilt.json @@ -0,0 +1,19 @@ +{ + "game": "Rebuilt", + "field-image": "image.png", + "field-corners": { + "top-left": [ + 245, + 118 + ], + "bottom-right": [ + 3942, + 1914 + ] + }, + "field-size": [ + 54.269, + 26.474 + ], + "field-unit": "foot" +} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/image.png b/src/main/deploy/pathplanner/image.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c3bf8b7039b667f6789d1c7bdc9278306c7aa5 GIT binary patch literal 1191688 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 z z;>IJ#!T?c`oHrc}&!wdJA|ZJTALgNeMlDDtO!^#5#w)ekk{N*|)ejCNOHP70{M#!^~xA(g%Z6^U@ zhN$HLB$jt6s<~UvkYhGp+yY7l4K${~VDkx(gvLz%3X8*Fhbu*)~!It?Ufydr;YJ zmS`ai5jn{AD=jd!^q$LL3Q0YHy(28VGJO!+2T8bCi-N+dv;>5qQ6m~SBj8WVy*3-D zKR<=HNvYhvE8W8b!Oxj3=^A;DcN8!8ZD~`0Jh#Qz38ZjS*|GjK$-l1uceeRQ^eNd* z4(i?Ra4&AENT`U-SUCXsToCtrHXFtgohV>M#k{OUPzFFiQ@$}0E16e8j0_U|3&4;g zmi*4le4Id-N{I0X_VHEVCXJEH0Er^f(WVX-Gkw=D4Xo0W0>_4W0UUYe;b zEQ_aWC*r4|K2LN!jYLfMbM7EGW`X1mK78w2H?N!5QeRpOV-*^<2ns3VEpY*0VSz;l z2w6}sgIL3EdiP)j4n08=*&n%E>MxyfT!#RHqQzd5t51M`+C*OlkcC&@)c~*{36Nh= zvkDuT%)rkg*+p20L5W1b?@Fni2}$2z3CmXY*i_cfX@!j196OZ725e$GbQ`l*-t1P< z{0XB%C2GJ!5}!QGWJ8vB)4)AuOg{*6?LP;wKGKp5Z3nnIlz)pE1K3FIC0JEc;W1Et zX5>Za{bvr<0BM$B?1^HhqjYn1b%#g6u>sDe8GFkK=!7^|H`zKiAHBRhQ zX!v5hVT8VB@okYQW~J^O=gmqEz;8UjTV4fy>Bo%ZmnP7=t;h@v)##{fbmZE{16HpA$GD>hB8X0M>|#4qu&P8&UUY+ z9en_BjZ()8l|Xn|r`Q+)tZdQ5XM2&>Gl1~^7Qt0?*o-aizc-KN^Cebc&CV+7f&kvR zJ8jxt(LkO=3y}0irVb-#(N%yF;ot zwm|<5DD6!EeHs*2&s%n4wrbLqhEvjN)aD)XV?twaucN*eBK#;yW+;W_UZM{E&!5Gr*)tL!K@H4IvZutQlul*JEEU zWauTAQi$yWlR5Ce=PMnGRX!9oJ?Lk9_m2!QlmLR&a^dLfT@r3B<$qJH4+v0_T>X`C z{^i_(3n(Mxp)W@COb8*((8fc+Po1BAS*yQs??cd~p<fW-YTIjVnsmLFLI$yHJg z3jNcEfmGARt0}P!6Y3WFyvpm(X6qk>bzwpr<|}8ejL23v36vHn{nnaqHf2xWi)<Mf1lF%k%~akeglk2wtVb1)-0!-=w0Kqw{x0;CHZ0s5+V$}R zbS~g>&dknU%{BIHDLuJ;9u5~3w*62d(QwvgfiIZ6OD(ujiciE#75R)^6_CA_W-Xl_ z7`wKVCYX4y#TUo8Iv}z;r|n0#1&w@LdvxXN4#~G_7Tc;!hJ%*-!Z~dj?Cb zXKX{7F%td)BErH%AZLg=3{kA=g*e61eBjA8oYkMJj7bJ5mfOif4nRdYv<*Nyze{-C zSYNDe5U@pwTMC`TUD8CA$glQ^UL9qbFDwKJ$_l&buamPy7;mC0yZGrbAKJ1y>-Us5 zUo96=W={Y7{Zxu1n;AT%noO?zqmctxc6(%MjX&dYNqn-BP5(Phm{qSY z|608OEyaxrM9~7yJY4LTTb?bZIV>NU(_UD45o&C|2-{&1`*M1fImz#sX(`S3UH!-u zV#)ljb_vMz*aCTwUMcKb_4^-doF1sAc}=wBrV7oMlba{sa9bSB{UCY}C(|oN=xQNK zB9L`Vo$NAlWKQSVawjy^Z-|LH)n)mSIlUtjyD+&X!3gC&(SQ9W^SN10O%& z9&YisyV$)HS*l){?;z-8D)=hM3dBq>6$tEP1gz2V{m-?_r|+nUeEBL!8w8T>Zvh$6}H`p|`EtJ)Ki;V=u70PihO;Xv!&eJ1ieSjvonMQK%=DWpU~eJNXyfw2#CS!A9->UPP!;f zOd)<%eJc^3YfNtPp#%V8X=6l@ z&b?q~pwET%D25M8G0H{~4N#`DZ)Ik8SUsMRCGzwn>yHVtpw3(N0Q+t&iT80)f@HXK z##R$uiED9ZHqsU)Dw$`F(Ws+n2tl&j1=PPI5Et{Yj%P z_pwbjbAjF#>`|cZm#SW$n9De=O4h*OeE4)T3o43u1t&_qPTIKX<%^Dl=UKRy&SaUE zs&P;@R6d>7*;Q(nHZaJ@YEa{BIn{Wt@M^}Zar3TFf#E(UWw9YqSNzOd{OD9ZTS#EZ zvJ&oTcp>}e9kR}D>%7}Lq7qRC*<@JgIXKhyQ>1t0UECeu6pBFxTL`oIZHsNWg8op= zh!hQU?^AdD_UL^xul#-;PE%eR^-Z9!m`x#;k`U1%zl+uym9z!5+ zyb=KV3IW#}RV?y54E1y01c?}Szi;d)q4hv$pj_)rv*;k60~bg_(fA1r@Jpd4?S~qlsitB zY*QDBLj8Kmf?10KXq?DS>n!QakM&XXLyVeON7sO%G0x)%xKv92czMND$*QH4MlbvU z{{3i)YhPH{>7jiLp4l4X!QlO@S=f0f-}gnQR@Z73L&k_&zz2AZIs~+cs6fCgabe?0m{Fr=WaE-qdoRh}ZQTAcA{oiJ!HJ#DpEG<9anbZvvx;Byrbra4#~ z?Gm<{o?dt|31urI0S2*L)#k*CM^Xcw2p6TSsbb`1`WRY@09ZuNxG+C{j*vYPR}C7- zx7*rhCsl1lB?P;s3k|^uNv*Qn>9y~33{#+z#g&4ZiN*Uz1Ta15G-g&ZsC1v|=q=i) z7Mx<^WDhY4CB5_oc^V)gzSHUAT9Ks?18U4~mOi|=8}uzn8O0$abxfDmZV2 zH%Dd1|MctAR5yU_L>YaPa*F{#nG+E?aObXk?>k{F`^)3`(+D&(GNs@Dv+DZSx|ZxF z3zO*DuMu0l`q6DH&1qrc(Z^pQ<&TS(D*k<^8QSsN%=gBJE^{St8zUy3_NI)FD;XQS zk0~hZH~x0CLy9@gJA-T-p3?E|iBr$x^BI$ckOXH)w;bT9N9%I9w`0h+>u=#>9yT&y z(F_+))_)0i;ce2pwqsPz%$BHa;c?7+H2E&K^ZG57ULJS# zd*%V~$ht-@pF!pz>ZT=dY(^-m9y>%%-UgugU7s}E@MEt^X(g@>!W!*!&t!zJ2gD{{ z@Nw}PMou!VIm{b!vppIxCnACY&>39c!u=K21{cQ5Djp2?8NE8!^-%HM48YtXq8ZxZ zl5o*hd;4#km$h>kFaP(vQjedRxW(inEZz5|W@F z8uGDKhtw@Jx1^UkPRhXBL8Y^vaXo&x_=&(V0?@DivDOJVFc8SK$zBTt`lI`%Jo0b; zZ8(oQLt$y8{UYiV#Nh5V3JaVk4xSNH9ZVm~>+NtLo5s z&U^@j;i`L`L0tVwUS%kg`1SdWuuweA>0A%!+TOKl%;~I_&M}$hW{rl)9>Xls5GmlU z4h7DA@DB<=4|!yqO?I~EXMFZS@T>$jsIo7O|EP6sw5(5PJ_-oJp8}C1WN|g(TSC(W zsAA#gAoy)@#6c%7lQZxmpspeTn$814Y-7wf4)PZaRquA{M+%uzE!VCGh#Br{94y-t zwdQ?3lpr4suxagDxDpi3oQQ&@dE^UOKW`UwFN?^J#vu^JsP3bPY!9g7Dg2JZ`)xha z@8ejo{AGTB+2QXO{~;$EkRihu*0f-f@4lb}g}`oX1uE$UU~b#VLexnd^me)MGHP6# z`J`hx(6d^X6KK1n`~%+=LmV!(&89OZzw4*L+ICjQm|G)kMbq&L5i2(3(;RkIXTeeL ziNwQV(!pR)#cwGwC+~eHlwm&1k4_LQrz_Pqj>`qZ$)yc`7lq$Z&?>})!*Hi$Z4il& zSQXsZ&LWW_0qNc|RB%&_JT68_RL6)PF9TV}lowge+X_+9XTX?0rU52Ckv-GMza z7!)$Fhs$*B+dRBqMi&}vVL#V2&?h(}hr`V?b7X;8Jfk3SWsJgl>RrNueQbGTNh&lI@)6@Qg!iaJ~S zU$U%N6zG@b|4r)kH-7Thc>laWt@Jem3>XygT)Ku#zA2l;lEesCEj&>DB2ET6h0b6}-k0f%tOOIY2wppU2*YWZ$ zwm?lJT0{I+xVetc*CyYlhwB?$tYhPNWyCSQmon8jK*h(bGkST6&Dd}871yHb3zx$@ zvw`XRQ#_r#l!&X*3O1EY3vY$IYjVR9j@Gh3FU1K-< zAi=~aRER*c*|WCvRa>{S>t(i={Id9Jmn!>d#9n7M z>_nOPizzOxhrm!AZu(ePF3Al)69xDNV$m&0$M@)gR}ugt-~I(bydtzJplMus;xw*f zuhRfGwpHfmQv1y&k{raH(MBs+xv%|qje`s9>9POg0SBlV{?i#Y8-cBijRcH1T=66M zyN2u}M*1YdQp=c3FR38|#axh#=~3-j^MeD4UG7?zojDWhFoCe*Ys);Llany#_mE^G zDkCqFBdKiK5}^kKfhA1ih zUEzVZ4eFYZ-R2vo?^|=z3?2tIZl;KPtsM?zPxDSh!7VjKdPOW-X?l}I&GcYjN|?*D z8u|y+!^#W$bpnsFGfg;;Y;1hJ4A6ZIE;$O1%_Z-*f`m^~lZUX<`bgKexk|$HqQTrpYh{lZ05lL z%e7M%L$W)*gbeurgVt(tp`?y1u6tHN!fpC>g+VLdvE%8vCa?Xe(C2HMWhcDCvEj3m zbv#%7O**!eMjp?pUn;H(ya|)qO(J$6kr_Ebm~iV?!DzZCk?+cs6AH6T(n5d_ro-94 zjQ2!oG;;NBEn2VN>C(BR%C&nf$g^I!^XqFk^^UBvj`vE*pW%{3b?-YD>X+H<)fT=V z0b;!7bk~ntIt6W}??`P$&38~n`rgBw-XYy`=a&x~n(siT4WX}YKVOH*g4c-b^Sd%{ zBuE>)96`zDdpwwi3KO^P3*auBg}>C(zX+YYJ>m7Wc5nOGG4&jgI%XLX+AJQ#+VBNueCT^YBp!hgZl9U?W<<_DvKO< z=gEvF!M+z+j_?gdzaP~5j<~jVF3n<@Nc~1-I<3)d(uuvuM-pdyW?HGB%Y^Z(=A+F` z(WuMvR7N`fk~Wb=Q+#4VQEn}76IoqLUOBoC_fd662V6wBB+ zV!v`Zltrn1S>a+PK6`}k#FMw_t(USY?3m?}A)_)J@6A|1TU&x*e`oU`Z0SoL1|GQb~8{IeZ7G z0oby>hi`IA<23S}$1HP!4hXjRTGNI*j{abm)Gj{R_7>lfwuW3-oV-@zad<2EDQ_v8kqd z56Dr|IjikP5*~;dp0Hn06Rlm&oQrqczLaIEb$xlmp_P@lfDq#z(=ZnmB50pxe-~d& zBGTcg{(U{9mD4eZ@1fL;oZp=CmAPQPXcin9Vu~Tn(Sy@Xzf++P0nykD-dnSwR>%uj zWFgfnX5m8;==Kc$6&>O}xs-Dq_TAQH0=5NbV~-a9JkS7(cZ(BkNCM}uHpmHxjQ%jx zl4)dW4*zn>1^BY1yEPx5ug;0YSw{Y8JP1jbBh5GCyNXPdm+^$}jt`u--XusD5#~yn zl-iZSGivErM!xg(>vxl_Cp1ohpGDr|SvID#nr)Dj@ zhpC%8x$0&2Pw!j+MN6pObx{KC=VF<5a56WrooN z>!!r@UxP54rG%3Uqk%C!(u1m^0K+5?s zsI>GO5&1gznHgVl0PVul+@?GLh%Jf#E><$gD|&iaNkKEE-OfM!+IhdOE^GB#dI`hX z*A;5xXr2xspn=p2#tIY|TW$dS1%OiW!+nS^2P{_g@6>W`%kyDYo?9idJ5h4Z4&FQg zl9}IDa?^}CC>DEDP;`Cfz^;R{>sCPF()U%S;eJVMQQm{{1j;v6wj680lOS*dM~Leg-!6L+2*smCFHuK4GP|_v{iRLUijiHGmnZ|a+)gDu z?J_Ur=Q0_P*94H(0Ca~IT@V4hjXaD@cq4OvT&?ef9;d6%vDU;2Y&ZMYVE%Q{?*`fW zcy7pTPx}r8iy!^+_xAC>gX$m1j`Tj9>a?f1w<$g8qZ;f{9cQM_0!O`RTj#<6r}|Iy zhp8mVJLCl>ubK@_L^_$PE2fBWkWEUwjYyD<2xrNx1F&&WRA zfZ@1ERz9_O9UffW39ybkDNd!rrBBJp*;Aa!<_;uI*SNX`n*(OGi2(p7?4mfWwUfCy z$tKq^6aL}*b|?V)3FXWXD{Zl}0ihizLCrx1tI6?@U7DYRjq{}94Sf%{0-<0Se#)fY zL*nFh5l+e7(~klvMgyNop+w`=*&u64!IVPRFK0R&?bke${f8@xpBQ#I2!=10S-fmXbvlvfxtj9YH<6B@5_B| zi8FZe2;uyr0~{8u#cKt?Ie|H+E?E}*J!1LcZTu^(>gP24d+@*v8BUhnk}l@}Cb7{1 z@W2j7eV*1--1(Uch=iG(?aREo9Is@a?9hQ~_L?>{G=$R0+HS>?-S9gcCH7tmJ$P^i zk)81XZjNrIGAW;&x!d8OSK3)8@pR86Agkgr<*`HuG-C7QX@Kq`z@~}-C@X*+J9qZl zV(nNgdn`DPOwyU*Sc+!fTfnFrtxrE-SrdGA<#GmX7~?z0X``1D=~O6#JFZ|TbF_i zu@|Jg;j#7Ngu#OZ(!7|V{0OYV8LSrig*n^;O5zM&O7@FoY-RbMz z7o_}DV{&pp4*!$mjazG}*l8Zqg%Z`sS#y3o&`gWJ9hGdZu~&q11AV3@0QCb{u^yaj z9u4OtK1=iB)SDn(-(w@^Lnkn;&0=8BOM%r68oM?g(5Eb*D7(1e zq-&kn=V-ji$9LuBhGV}GF3ix??M4)LwDsgbg=5cyFYJK*L3BKrLj+E3jHVif!ixm0 zPpBp0xR?mUDTYQz*9#5jJ^H*vhFx9aNiSimKlrlNCF|%sDYv{`8)Y!%jP~G8sTq(F zbiRq@tq%%nJ=%;)QSly%X(oFGx1)JZilRpDbpIefHf1lsq+&IAY=OM!_gSQqKbjG&L-VZJrnR7GlNP6`_A4XG=;*qoAmD2C#eLKtpFjxN);DMdV;H$*ys`g9gCZ z+P>(rHM*LYV-^e+F`RXG4`r-15c3#U!MJGkOZAe)eS{IRb=@%M3^~@QqKfoyj--dB zK#XzcD3_|p?@$D&!6FtfkAoBfStpki^gKez`3OQB)Vzbp^9E{-HHOimh-nnv9INAr z8@!tE7QyyM&x>I+#AbrglLAb0)hlmZ^)~lK!2)He2k1G0qcs~_DFoa zb#b|W`1+`mA{~Zt;X7LF5@hQEMN|qnO$OuaLNSeZlgKFhg7}{nT7IVZ2Vl;EGk}d6 zjt@yR0E&5=y>)b#VqY`Emc{lzDNi3x!OMyLzADsfU}S-GG=QF?`T{jBT(+wLSn6j1 zjh2c*Ky(H4Ej?==n>!L+ zJM{xu3aAOoNwSq*yvd$&?cpbmHU{@EcSeRcyrEp74%FZ+vmp2L86>uMxfB%%XjUfn zG>IPthJJ1>`NRk?kKyS$W)dIM4T7rp;t| zTAYz{`=I~foVsaqktY5xf(%Ijlf2~k-*B@(chUb`<_{$Zkj^LpNFdrndE@yy25dlemcGc9i6R-0hhlZ~E90Q#&2?UTI1Oi89Ch6!iX<3E;s$OZKEpTsQyRHln%A^jo&H`#eLBmwGM9l9gKm(9I zaL^jLO}cc_xp5oULqnHsp2H9vpGQZJ0E8|>{DH^pBWkE@eGbe`ZwDpT3h+HhRDle6 z+J`JKs49BE78u%>47p8kPQA&H=jz)NIc+GG)QEO;K^?8^u!L5tgY`77C$50(YrF4gjjJ!}9VSt&_03>CB zROP49(ePyCrfT2Ow?bXSu%97fPt|azN7cybB)7O>=jyQUrqi(B^5&A?GBU~U!>pL@ z{Q{Gw)Vobvk9c3*CJmVd;$9gXNrP2%||zJKjb*>H<(wY953ej;~{A&@s z9&*|u)f|&lHzZ_;*x?7Lc$vit&;b=_KhXK?4s1E;_dLAO$$9&`pKsbs-jDHPiR%Xg z%C{|>>m;&~j`_5BQT<%so40S5TA=rcKnHf0s;>gAwp4#ei=gzyuKeB|rfTGh9!*xf zUad3+e2wFn*d6Hhrcs*D4q6kR-Cg9er}moR{fzG!#_ znb*xDdR)ztOSH)m4b_2)7x0&kH_Ka1;RoF4TrIQFOi#@;(kM<0~8!@&DtYS z%gGP0)c^w~L`Glq6IVj_NP9x#ZZ@h>0wDHt){->s24*#$gK&;VTL~&lR$DK)a0ten~Zw&U^fI6kZ?;MMl(vm;*Bz^`KKLWjfA71>q+fb#%B?w;Q zQWm9X)67ZiCMEvac#-hNl--o`U{bW$^~NbvFsP`KFbMvvbx**eN2R#{o_%#=L;ke2 zEXEz-p#Z?d0|_SX*S=C@YKXsX-Q)*7JV1Wfe%DI;h?n}T6WM6GAFFBJaJ}}`EUGI7 zXldTZ#Zzyz4%}OBK$H^}7Iww_hS+Ne4862}a_GfVy_d#2LnYeh1;iT|!0E(CFgrMd zMA6WW`utK)-P>1t#lA^MI4&$u(*?+!6wJ)LIrlOurmd| zbV6~sufaJLGcjFp*c`Z(({J!w;~X08jfRzp+=J%u8v3~04y%D2|CPObTnHM-hSQoc3$pVX8Ty-=b_d{D{8WF#sIyL+iO(k|MlE*W zRUp^pcWO+sKLO5PDL#hqXqDacQ�@+8Y|i##2>p;a5GSg-9<83bmOTbAN5e{~$*t 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 z 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%0A7^&%)*Rt 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

EPn|MW5^Ny&MBe3<-dzs`BzM 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ⅅl~+*s9aa+J$wR~UetvLa4hNb8N!Cjh?Gz%+r44b%%Sd)uwus7%J=6FR*qBYuU~KoBw)Cb=Kno#LXF zAnwYMBN99@d%0zl1-mHg!~5A9vmtn32%7*eQ9Uz7wz--%7_BGl#b9>_=FR8E>ow+) zRS!dGE;g|s^aedaY8)QBeb1XytjZGaUaY`JGEZ|Dat)=e$K5~Nu}OokV{ge{yk5Y3 z!_6;b^YU9}NzrO{BWWXPk=uSrQAxP}o86KU&g{JhH8?Rqgb+s35W&KF`xeG;p=ZJM zlJ_y=yZ&Vgr`O;YN2g}cXI!V^-`eb7)F>loqGH)j&GKoL}jF7j1tqcgzeQbZvpK0DDH#PgXo`)0qUk_?q?+^YgHh%J+HCd>$2TO=|6(-0U4wd54xXt=T zz$mZv;k@*5#A+tPKVjyFyBed^XZ1Po1%Qp0SiX__NEE-Oq65 z-!Hs4<2LXoM>>Cze?K~fUMbh*!hda4wa;P^6{KsoLV(v}`a*a7_h6I}ng|DOFjRo< zjm9+zyhw`i5*p1_lcOTvgAc=Ii@)N==Qd))TU}!fw zR5s3hzcS|vI%u`{Z92KNe&Jba8UwA`Ra>#NuM zZ}+!Uc>0&&R3(V7LMwjucKeH^CsKBh@6~y{q=*vwljh68M#QMR>vjd{Fyiy{fN9Ka z8;V!dpLgnP`s_9I);7pLPKyK%#Q?SE|?k(D{m=WJd^yN173!L zCJL?XTt!1p4?ACLD+ooh31|CAQTliry*+wCoOtYBdB6Ii)$OE@nl%Z{Z$PgE{weTS z13;@Y<;Hnp%5?h#x!3Qd!tBA?6ZRua9t=Li%8WPZCdy0-CHg6{L1!(vy8hlMZ7oV| z9_9b}ibl;hXly;*rdvdwCZ1(`K1se{-jPV7T^}I8ucG-JeidtZu@|$m;NYJnDrNuH z+4=LQq@-jCJiy-Vx`Tfn>5Mswon6F72CuAF72S5tZT7<3b>zKER+$G(jRO<zKu#}jZgYl?^nxg2^q(lFni>m4?0pEC zlZt|$??xac$t*%Bk=KpoF-uIj&92F5ogryys%A`hfof!5O&@B9&ok3D^fSA%#D$a~ zPs`uCJkDrr*b%Z+rdd_?W(_MM&ravtXSKHN%tn41R9wD>*Exb>cw^F>&ry_LNGz8Z zeKksc$Nc05n$(|U=iRyXm6)JazZX4j{a7C;C6;6Iz6`WCj8u-)~$J) zs^ls$ZW9W_O!202-HknBPf7CDRcE}tC&-dej~Nd`;+Y1T#w};ObCxI>4aIrK6r;2K z+m+Wot6gFEcz<7%WkqG*ydaRJ^>UR)l80vBm=Ym=yG>)J$^G`pQ{xu-*?d#m&*i~hMu0t#tJ#l)`T)%#y9nc zA*^Yws0{R*ohADo5`d_eu5l@ujNN15E3K>;A6cv(q1_!3taef>qc4UilyQtJl|t=t zJ-?7-%9_0hG2fd2wF*BCWkyf?-_^??8W(@Nc7|(j!ML?%1rtZ;Ba@pro~tGXCHxrT zCq834MsdsD!{hS%=ehWCb&f0^Ag6%z=!pQ>ahT@O+V;};Lc2@#Co=o=zW7|` zREUgh`Es{k4`nayW}wATb|c~SpyDcuE{&4~b?&JB7p24k5`z1WcsTTg5o?(U&#Gf1 zvBO6qvGHFGp2ZuO8~1UIi%ru;23a7OxG>lHts!tH_|_x|WC)W+tnJbe?>3_GGnI2a z%zaus<_`Api$ui{s&#N6afC6H`tYjPc&stCjajEj)}b_!JQ}{+pB!#hbC9g(nG+<5 zJoX$jrn@z#nc|B?!eslesc*>REN|e;@$v2l5!du+PkX}3O^8$9YgoK^k`5~uSUUH*sh7jx5J zQ~0^mV6WDF5!N+BplPa}y0c=KSBie4R^Nk*+u5^*FMR^@89VJSWfM=cU3~MBluN(%j>RIBRH++y6BV|X9q>T$luKj zVZ9ydNEpe0+0Ht66x0hEgU-7_;LQ|il1d+n!Rw`eEkn^(_Rmkx(Ss&>>e=kBXxpwa z@VRUXg_1+QO{K(ngea3K?#f6n7EeycH%JxQ(y|L`1O$JLF(StAoh2#kUZVNT2}mK< zKnT#2@o+|6uLfAV5T3;*Os!*$56^#H3BeFW(X)M-xR;N;hiTA`xUgk)~3nPXEd4Y|>8U zx%MZD^u$Fr>|ntX@|xn^y}Wx{e=Uz706irn*?h4fR&$nAa>s3=w=R##Ouu$oyoUAU2teUc+V?2|kz>Cqo{3KtH(C|1lD~Jdi*R`iq|-^Mf;oaYgQAAD6Hmgwc9O zt2)aBLO?y(wz{jz>jazaxG>sB2#tU%OK9dKCj3+NO{A%Y<8O=<@rE!X0_sVop=x?g zVqb9$yN<|0NV#1QgfJ0WOV(CS^q`BOeHD(NXVU3J%Z)m3E7DsDZ;f?ceSWnI7w=%S z-34~1K1ZwKfmNcsLvxuf5Zm3Zdc;cOct3ETWmF>AGLB0)cydM=tGw4$AuR8+Ki1vX z8%2CubcxTj{i_I632pYBk)mn7PBRcTxDxwp6*NCX*8sGjD5>(a&sIN?Lxxt(n#T-1 zK8$8`BhLnzn@4NPY7+-H)DwMnX3H7oF{%C`+RMe`oT^APgW$@)5V}9OUZ_%lr`K$j z_^&=`3MG<=Gis!%Neg3R;tyDlylw}PMgOk!fDCx#=864~QF*c-UP^e)t#<$bew1c5$YQoK`a6ap zsI{s8bL7V%!DoYfZ0TCE3*_=+Td!QdtntkO5$t7-4l%lh;zDCOlsMWr!wX-FAo?54-Z{cB*} zwIiK}N~&HemD)Kjqth_CLz<9RScFe853Pw-DU($ehg<>Ie%QO~-rjv&;a#r&s3 z4XxG|bASrZMJHik_)JVIGC7&BS#)p)>N1B>}Q8Fqjx~||Y`+FK+GP=+9M+;l5Mms}S zGdyyL&E#u6T0D*STL!aPT6NNJs7~ZaaeF}o8a|DLC{XaelxfTg;dYKnCS5*Is1%sV z!J_2kL^9^JmkSM65PQ7ei9&BhX`pa~G%J>f*Jf!Dg8UT7;UV4$lrK=H$C2QyKFDIf z{ip+4!~|J&Ha_fRJZVSacX8d31HmQlbygu!1tFv_VW1VE44H?|*_eVedawo%B6)L4 zjr+>&3f+cNx#3_!;qj&?MwpIa?^B^^KnTM9!B?TF`E7ud;k z_k( zc|mLf$ZY^sYb`MP;_|o8Bd8kWLtel2E6wC=tc^2UPn6Oz_I(wO16HLfk9SCMN(7I- z2>L_B#kA0p#WFj|`_Tt5my|8m=}KWpppHAfnVF1I`XYU!=ixIElQ?uacbJ&bUq)nVuEjD?Mc0~1cD?W%7lkqibE*xyA^#te_;`{kO zxXsj7!2D~z@>N@gqHXKLlGV}eSRUj?f{{;pyMgve7iMV!ddq?~4^H__p>euMTOXHo z{X;0($f@1i1V@L$SG1m&Sf=%#CfuMQ&vQ-cEGGF_5H2v)=C^*fHRWCWvFEhoaz8PV zkd~m9*4EaxZN0w$t+xq(G;m742-W?*6ha{$eVJvR zr~l8e@So51ghZ90MC!nUBCfd&`6a0JihpT=_KRZp$l~){k2sRaw=`aBl7&vAo42_z z`*gO(?L{~zmYWq^VLY)6^c#kC8>=PEwLgHT_ZR@FfY6H6ZP_nT-`oA>YzJH;n*i71 zvlxGkN15j^7B?kJ`@76A03WvC%yAjTrBuye8wE_veqZvTrbE_c+(t?c8WSOz9L2D8AOC6JL&+H{y4D7Pp2RrQ zu%dy?rt@A+lM;*W*3GI-g73z%F^p7MG_-YJ_(J*rlac5q;uyLQc{Y?){P{bDb zgyeJ&i}#(ISw&ZchiD(SL`Fne9af^4p>n9f7_C!#fWl=;Uk6K@>@Udb1TqVkJ#2{P z+iL4O-dP6{)F6{IZwNNEJWfKpan=tat`e6$1Fjja>DkDD=i6*7Mx`%s*3@VrMF{GH z&yI`l>!4RKBjj~MjUf9DBK>*EgUs?7fqCD*hmVnImPZnqBj0MKD&D@H!hv>~J7y)Y zUbugMQI4gOFT0}r2IpVXX_?wGu44h*N{Aso9JB;2C{ZIRoQKt=UI(-08FE9o^y+{M zj{Pxzv$Hz0T!~CKk6ZGjIixNot{cYB1a$&>`-CncV=Nv^L@y*-Y4?2|;fxXtL?V91 zI6^WErY7Zo+Sy1Zc%5l$3k#_{~UYblj3hL!qZTbF>dx`VA;xz)zP1K&wm5 zM2#Q{1&D5cdqmuw%#AkBCEx1$RaCI3KaW^qR64uH($KLNU%AJUO~KOmbm{rX;0HQr zCNcOJ(PDFeSzdgCx$QySqBl77T7%nfCfjTOzm<8p49JDkDA~)lQYrIh=Si}ZpCep$ zuWHo0*TD^>shJgVq%apnCduUnnpSXa4yS4Fzu?NJW0yN$TsZ>92H2hR@g7CWk64}N z@!^=Iv@TUe-zc0fByVW*+Rml@_TuPN%B?#Bk!{@vv`d)hr_4NyW@(zhfbxY#T|>6y z#Am#&W1cz}={TBu^Xr7;Jb{_#r`ciRVVB}rGax4iP4wK{yBSk)ZB5NdZ*bt$OLVj} zG!Uo2Nz>8SXKX}}pT;;?!Gh&Aw0+MJ*@?yR9vpiE6WX>NNzxdzSP^40>>FJb6;}II zF|?y~$Ad+Ffl)ys+m@(Qdzc#8)dz%Iv02@oa_@E7=w+`BF5z1{-;{a7Fb8q*&(SvV$9r0?u zVW9@SG;c8|@5h9vbE9{0;1zWcDoPn~f?jI@=dBYA4IAJ6tNUgP5~RikPiJy1l(4+{ z9_q};cO`nC{*Xpn&P8>P z7igx;e>WZjMm;{`Gzrj}pP$#pxNLP~iQ&A$Bro5#o6|-37H0&i+dhkKye2U<6qZbM zSRRgyWG&*2QCK+}8yhj0Y(js|a|XZ|WO)i{u7)F{Hf~GQhUFFYa5ClCrcoxiXq zz(urv7BEJES$5Jr4zb|Baq_i$jc0t7_Kv<)*T}*#WsVre&-7fz3vv}5?TsU2D;mnkd6S54bnyp6_LU4x;(m zm#cX8)xI4nO{@D%MIiasXvdfW#VD*Y^XrvDiv14fP1)rx`Z58JvT#D4jG&L`$U3^K zYeZw?lvYjtS{}pAc?UOzMjdk2(G^t)H*JCczXk^-6tw$ov7u~!PBNj&KCti9sgiH{ z96cgQ;yii1l`&#|tlQ|a2-pH2eig4cvN=D^;mOFhm=Ku3ugn3-5qJzd;G!5IJfR}{ zV^8Xbu}RJ|qLYh5kG^~u$Aj?;<|yoUG0!?RM5HWSh+2w1Y>5T1MBJK5T2K-0gi%RG`TH#be zEy@49wyC5SY5M3hFVbKRfvqKRJ4|PuQwOVwTpNvr~9PC@&95`*G5Bf49}o z1hYHX?{Fk;y-KyNsT}6{FqSR8u>rxkRO4t3xnj>NQJ%wHV!|Pc2m}0H9>DQ<@zvU} z-Q{ewhIN>0?P*;D{^UM8d5LfIny#MY4BOce!ys)dCyFOrd`mTa4(N1bfr!F7kTCbXbRv2Wk2f^pe@zEJB=BK9(MeQ@lo@%n#EOY&A&3!Y= zbYLPwsy{|YTDMD3u9}olt}nr};CIKoo-CQDNvf zQZim%C*T0j<#d#jWqt6AS)vQf_?(eO!Ze2Mm zqX_{7k4DH>;Td%s1&xVT1q<(u#YN#Y`g7YYUpNY5ClPD zkPvABX$BM+i9tdbN(7`4q*1!1I|rmoN-0U{5S5Z{kp>BY@51MK&w0=9`+s0&?zyfV zYp=ETBbd#@|68g0d!uCq=4-wmQ>)F86;7I~Vg_~LYn%9;a|B&_g@U5MJyR4bZ+htt zIN84(4W>tU1je8$iR&?Zb%YTv5V;x>bW#DT)tsvgNsc35Wc~C1seh3WIB%P)vF0n^ zxlGNCLblI44U;bGgdqXBnG-5&0#V%KBJIFQoOmu5lz^+2`Eu3+ z+(y*$?zf4F2Ft-zi~hvX-fJ*)f4LW$C?JlAsjd7-nIydD7aboVj4)lRLYkYI9iNJ@VyeO-bz+yI&3~s*uRC7iQr# zHL7Mm%LfuOQp!Gl@pXUixIx4$*6AxRkL}%dw+v=+K%F}FhTbVJ-L%Ltcaj{b_@jT1cN4#fja_O}#>>3m>dFkSD zR=+uIbnx+{ymHHSh{k%!@UyN-RzvdGRew3zT72^d@wGvJ z0c$ZF=)B40h&&lJS!aA=Qqpz&NZ0xUwnlgZVdiPRx*(qVkU3B>=L6~GGSI$AfvNq8 z@Sr5t4$-(3zjA*Lh90YN+?J+h$#{Igt6e9PwF4gGzqF*y7mmOIXsWluRQ0%qJm8+|ah& z75`DeOk53fyGP%?-%5CU5!>xqBlBmcdANDQw27}mlboOXz2dKSCxd^W$$!R8vs`WZ z&uq>2)Ndy&!Tj^(+h|zCcFELg>A(2A!IZa56!d&b*E%WAGg56QRc>oVWwk@?-aiMHrZa`5pALxlo#@J!krZ z@67Ma{()8gzWaajKNBV41Zyc)ac(XOp!?Tg%C&F?Oc+4Wh=M4)=z}l;Lcs(C!A(=o zUGpD6)e9nKIg}-H6~Z1hPf2lpL;u?cr;N)0F*hw7f2WyBQL4}N?>vPbNSL)SWFCL? zyeQPIx=5GPO|~F2Z47E31jF)llW}vL zq_7BHxk4Ld#~!?#>ck4C_x^L@*MkHAh40Fo=|eG3evG^MwMDVQ4b)8GF@&WDP1 zeB)Uw_a7`E6h+aMi^R1uHJp(hE)n*}u=|~CO$_3bh)h;^px!H}+Kql=o?|QM-6c6# zAaE0POYpft)WIOxP97M=k+E94bN8@wKUkSzMMvD{&q*K=t&%bw!;|Yw6#N=Xq+1Fy z@R-B6mp7uiiQ-y=*|Jk%^ih|PmzURSC|z{{on-vs*=R0^X0zYTll~d2{O3gc{U1$O zhH8tqJWzjoOL-Yl%ZSqD7Y zFd7YeTgU0?;2U+=-}e%*G7)V$geDk-51Pu36V6%q=R6IXNVk+Xp#@{`zOEZ^o>mgk z_|(Nl{)cEpsYfhU1b(R=*6G51Zm47?0`u^+@5w%q&|Ay!cs54=;d$1+ZT}q9v_o1? zs^!DIn8ElH`3xUVB!d!7J6Y7YBN(CD49*&++#Q&dc(! z_NbadKMJhiD=kncGYMJ^F*UMPI~lD}4cFeQZOlghfH41%Ufytp8nL# zs>nrUz&BFbELr5O1f*M?m}F{*oQx(GWZT{0_h!;rSAZxN4y9W9%Es4U_>ifAFT@gq zar7Tvc|{s$Ij~xMe*wMQ+SzJhW!d#%Nb<%+V9?1enjnne%6TSDl`s^PCLFCHm~KO- z#PwvV79}Yh9%|vemO-{1g$#@8e{cPT73}w9`~a?VkfEOg#u>)L(Gr%C(a8?;T{>DS zHA_bM*1H!o;YRgTYTIhNhR-^0=M7t9v(n54MoVmR*<#^D%*U1NE3wr3=xKanviY`D zZTHghXE`yu)Ay$gj0Vh1xpY+{c1?q;XO1KX z7nNXQotDoriBbNL5L9P7lg)+$<{9=atVyI(-dy3t3zVwN72)h~e*y*!+Aq;|+Z;OVCmQ&gvRwEMGGP}^6#yseLr(tK30&l8v6 zikH~tHvz?RyrIE8An#Q%;X(ZweyWM!QI0v&qLGK+vS`E!87#*~$T1{@e3}+c6+rs^ z)+DD5Hllc!f~SDJcssL?iz!*#ov6{g=@#FNq=PDV)}AgxdCdKE#BL)kzvD=r*BZft zW~?Rxu=wNus>n$ru+pW0M!Mz&eU5bf*RNj{z2`e&XsFc-3wQ#rA|Y2O4-mAiPFY+j zkqS=qTQlA^qro%6q!-#y%6Uk@-X+AjHa+3EtGanSZQlyYTSL8yAA3bO4wHNT^u=#> z&K(mQO57Xc)p{=<1@gjk!fkB;OA`Lch=!8PpI=g5zixfJ6~fP(3A3|}W$+(txX7y3`t zQVLZ;BS50dl6-kb&l}(Cq5zN}kA^qR$Ut2@^dnkCq`vVaMZ$FxM2AnVpW1`AR?fa` zP1acO!}yz|q!MM8k$@~pbK1+^XEs^sF;OMe{ABKw)h7g9P{0`-U^{D!3}OtwY;pI@ zLdl!cZ-a6aSJxH{D93`6>JG~%Cmu$~cW&#hh3eQ1{(7OE^?UJi6!9Gu_9yW_u)7wQ zD33&(xNyIVrT8oGRJB!Girw`X?A~rb0k|1!UD^&iNGW>7>&DUfcBzR^c;+8{4y4O+S6awpr45a-|#XJ4R0(8d* ztAlZ7_#8Cs+L+UP;J2Um ztXS@UDI5P!zVIw-d-t*}jOOQ8#hoOsGq2FDa9Y|~eqaaWHhiGeOe2C((snZ+Fdi1k z83rhGZVl+7)^6%B1u6PGHw7$J(1Et^^|1I(S|r^gU0a}Z#}1B{6`}j@GZ}-G*v-RA z=-@`kW)Oji;34yqu2*qcK7BXo-ZW zcjL|lW(Ybo_Q$Z|75XtaVO40ZQBhLD6Y9KdFANm}RrHgY8?t}4?i?&|-=wdKgBbML z!s7OlBoK|hQ#s?W@~%X_99&AeJ~}HXTlkZtOF7C5Z_XYULc8&BtORDlL4JuyQsG^t z>=WgwRV~Uqd10G7^ccd86aUyW3xlT8s{9!e>RwV-c7Lbo;JW+PU%X!9d`-B8Q71aErz%y;TneE4Pg9tk`DV&e{o*)>6SOHAfv>j)w>|s%GruF3k6$8KhFArDG zodV{K_f&_L0eUa_H;eF{k4XuOm!(W8L&zDQt)tTpHhi@S4keEL=JYr}<8#p=()X;0A?zr0_$N-B6t zoYSl%VSiZvvGFp>kXTJaB#~o~tQ*v5+!2sbjQo5qTq0)-V8*_mWA!A4*<5+9Qns^! zJe)p>^w5h{^lZ-=`)q&6@5%Z}kpEHzW-B{NC*ef!wA5%TjMC@~+Y? zwa@ZJ7U5;~MMRo@6LQeF@Re!Tm_$fpJFjz`kyzZ{oDE&SWi}%BR@|w0MYAB~7;zakw<> zLzT47$wN|<6(ndkI8a4NknO|gY%)hy<`_z1RyQfM09i@GlR|Ah^(%MpDs59Y8)tb~5^z}=2OLgP1!p1l1CqF*m=5o*Y9Cm{Pn|0PrQ}XQ-VqCchF6vw^ z8PXofE6|?vSr&s;w{v+MCG1Ej&F-?jNE_Yod?TQ{uV>%8e_+3F*VJIt5rMUubC zAm0P+^)@Bpd^(%;@aFf!W)oSYT9=M!pB(5}snGY3uPw9WSJUtdg(8Favyw(cQw9Av zJDdW4qxxd$DRXJ$(I8-5Wq2P??hm#C={10U2Gc|-H zoum0Kpo}#A11Wc}^FM?4x2W4wtGNGBJpLF!rr~|MrcLD6H0PJ;&U&VRCK8t4+c!w zITN=^D6?35s;OSvrU#~o<0Q6dvC&`!cXbNkt349bLz0_@EMXBPs8z-@(WX-ok$8xc zSs0$>R{ulMqZ=gblnHYp9w1s-2xb}Lz1c76q@zQf1g{d;e^P1kiE(x}D3t2<+xzh& zx#N`RZOzTm3#zaE@E?WH5)+u#g<+A*FT6w}%SO90#8uAt)8p4y7n@Fj2;V&D!459E zviU+b=!AIN8g8e(8F*1MbDWL1DjH{uKTFr&CO(#jenbDg?$?J?DITlt?sdKZ?fFKi zVqyErAg~xX_X@>ysrd*9mAaUoHJu^M4AWI?gbu2lWQK%Thy){4=NBM&;`iALH?)@g zSy~e%wit3!?r)ds=l^q}`QMZ-FhyN?@elR<{3+(05`Q15u1AJ>EUbA>INb526K~x5?g51s5#HH_W>#L%dAcv!H!}iQ9%j_nK{=>FXcOJA|kO ztow!yJXi`Lz_wTgZL75`l~m|f)q`#MvgdMl)D{_XPbZMXVh2!(hrn(!z*y1re+xDY z-|);UbY1-q7O+(n__Sua(iHngzT6F=lz}m{+Aoq*kLrn1@B;{ZfX-v!=MOXe^qY8F zO%%ds?cw2JXUF&TZSPG!?l0+mekJgHj~&{01@f!6E1FW^Ms4NPjHI7Y5V_rWhmlW? z4G#b8?Cj0z5uEuPV6ELyN%TNGB&h=dhPEy=sq&aH3^H{26ca?bFkI?32mNRG&*-W? zk7!~|P-A|;uOwCzWLQ*2MBr;G#I!d_sQYDRX68f_4O+K1%##e~Q+z&_-!6TP1RN59 zQpZoXjRFFpO4W*=?y!D*V=;`PPgeY+2H)z4ggo43iEKH^nU=Lx?Zv7plCm5~Uf@xh zW9xFzfi6A;Wg{$plrpKpnV>aSqVFN}?s;QX>O&u_eXDpPgcG=rGu^Ch@fvvX#bhTiuB=Ceceve z8iQErU@Am(ANsAA*YxI2H2l7Kt_gJzrl-b?+7PFgu;W0G7Bm+*Y6M-pxduB=S~r23 z&<1YtCHN>8y+Al#j>O8C2H$xq>j`%sk?c3! zibtsmN5vypWA*IYO4EC$4o$c<#l*&_xM>X#+&3*g6^~y~*3bEzgNa&4sQA}>>hLu* zm>qIUe8mksp?^P>P2H&>#r(dPoOgE&L%!7ZT85R1#nhqvB+1qnkb)8ZplEV^`SNP} zWvkh}nEt!xW3@*X|M0WkVbvM@dygH&cq@&I%2vk&l=3@h*=?TE88WPn@zL6Wa8uN< z{OUcOXO@!|xTlv4&ZI;W!BEe+Uc?Q<16hK}aLxXNSKWWAO=EX>RnQBC{qbjb=*)ZB z_qwqzlNs+0%z4Mm$7L!--0tw~+Ts=z!N-8*?XVls^3-*f`=~pytqZ*mh z?McV3#VWutCD9T@irCK@hH)@loYoYtsecb!s4FS4S?Z2FB=5c%pxe~p^htIoNGN+ZWrl zS?Zjjf#MxM14nQbJHg@!T5h-P+_Ueg?8Lc(XIVnZ$tUa1Q@BK7B(WAFFD3~8o*0v5 zUd_jkI~et?tZoM%w$Dl*PndZG0$>ExrA~zkuC7P=z;_Y2$2i9imAE}K7wu|CTD?dK zq29u-8H3gTc!6-NCrg@^LW}TrIZZ!tEE^B+Mw*RLWWsbd@fz<`KMOp~M`Xb5dZu2w zXCW31$Le_#WPbdP`spcnrRfLQ_I)$3s+UoAHh)h?Wi+(%1?cbnvCA=dwafc;TCpG5 z5-2BQVbAaj9ANuf8@qu!YgapVf{vqaSI-v++u3m(6^uPn%Q?s_-7gYR4RL_zI<{ z+h6e+RrdODM@_%yJ6>tMv1dCLubPxLm-F+ptMM84{pdo(4UHwwuEge1$TMvr;xM9y z-)VUInm3K(Y;m}ggn2q+C@F$V=dl+>6A`mXOG|V%omh#-7(ctPwpw0!>!w4>TbPmV z*mURQUKkPNFBz#(Djtf8UE*u$cb!+&tHI7D@OuH4*QYyy?@EB5EHDjGFe)wpJmza$ zm;EVbly!Dx7F228kHDQ}rrM%^C__?w==My(aMQ~nk}H>G(aY0!FO7wcjFL1we^Y;% zt#O|czx_4itfkr;7IX%dx=uU#JPBdxW|g8? zJ2i&FQ_Y^D_JVzOXUm?JzNZ}r_Gc4XI}PrebH*Y^8A%Uc|17229Fi`&^wt}6pG&jy zI%QeAS`1ohy|V8y^f68hT#by3d_X>8mA>XLH}d66jqA^EfPzBMUs#@Tk>Hztbrj8V zBnnn(zkm6(+>C-IG*HF&w07wLwZMm=XLy?(qJ>Xqju|#ee>y7@<}Fb;A$ccrzdnib z^Z0K=!C$3RuCN{7gNRn&pAn3g)&R&K)QTX_g=lQylVc*ub&;B|Fi6*IC@N@ufT}0M z6_H`-(XXzx6`b|65bTZ&bG!+8hxaA~7UTE;sTJXPIu^V(cOs}|Tg>Hltm?X!Zb(M7 zbo4cvsdxQqnW*QEPuUIHAB2C`Fw6dt$N8L^G5LlP)p$8Id3ao~)nKlVk3-WPxJTLL z^XJseA_~Z-a*$9WY5z(UIL+tvaMYe-?5I_MUPxq-XdI*PE&!6HnhFX z=uLX${oUeB$Kx03evb>xKJ!zgH~8(C6*Ykn&xd-B=_qovUY3unSTd8=5hQwIjIUuM~yPs$729& zmk={dix1T(eL2+%Wn(7ItDwGH<@J@xlrHHze_yrjY!f~AF8!cj2nGiz5A?|`%Kjx9 z2VyZb__=_2{}Bk^E9y#cv9_>J#?o0Yrl74)WgXuD_-^}p3TB|M?{Ph=1;nlizYhBw zToL4R)YPQURZ1R|tmv3TvdYcgsmA%-h||yShr#ZEfQwTT#zs(I=yE#_X8yy5drQ(~Ipsf4KlZEX+!$e$6@?$zV4`g=t!E01zQ zdf42GoF*C3ViD&((uzfR14bZ$x76GNyAORuq=fgsHaqqZbLg!|=PtF*MB(BN2?0H_Q*CO1 z2;&I@D2zqtS$jJ)W=+iy`1yhHNbK``FCWvRw{ae}ZB1Bo7}zEl#D1}O>11I|oF4kt znR?G^K&*U-38aDspG9Un9$}LH4mKJPnb*qo`&IBi@$)(^dlzGT9~a@FHd5hWY@E}R zQS8CWrV`gV%XNm;+YiJe9K#wOmp|yKVV}7ZeH2|XTQy^x((hc>c+8;X@WYJ-u}pV3 zN0`AhcGchCuL0Hzg2`9zOr@zjFbL8~xZJR)4p^Ot<3Q3UwQKX-`)2#Lw&?HM(<%6C zeN3~t3*sE$P{i}I@k@L-{*|Q8$E%i);7L)ZduPs;Ltzma3oowLUL3Sf{*z;KNMcQY zU_y8Y-}GGo3C$fCAf|`P-#HE?dS2e>KsfjqxUd%?x=n?0WZ8R9M00e%)szUcO%0(6MRo4`m(+w&^kFQ?K_iH`!!q2pUl@)kr_09) zgvD~|AmqOg^c&ns-e0J2OwTuI>`) zZpt(>)xZt~Ie&9G4l06b+}t#+tpI77bidrZiY?23$Vz;WGI%%UT=bzv{M|7lV{4I z(vBeycnkx%Ga`2J&}~29{!voVU_C3y?nWGSLzHRSJAgjDv9Tc&(qP4;3NeJzyly8% z-*Qm+{F?avR^)ZbVNr2%Yh|-i3aHu92)HXRbp_Mp7*8KcB{bjM--Vm!lLt=ucV)M4 zCaz*}z2wre@-ahp@m9P?7dO2y6#`nkV*}rUX|24xG(k5rJTxC+tf%*K%DS*uqaEB2 z4^XadB^Y^d`@=(b&Id4MfkdzhP)DIbfjaXJkK4K>8K~z?7$2OmSg_0Ysfy2Em#Uyb z{`KpZ`LKAS&)!eY!Bm86=Xh~ST!}!z!_su=BB#ZZeN_hPxE{Sqo8$4~)4RoMgG@Ch z#}j#LQO%3BaV=-D?9mb^V&x%F7T8Tz2fn@?JQ)(T-`%a$=dl#HGC;L?NAl%jDR(;} zRL~9qfyLd{_T%Qfk9u;nwV`uh6(#OO12dx;qW^eOOJ#r3b4t~&de=Q0do8)kjY&U=ctXM|fbBIw}+3NZ+yU`-@#!N&0#%pdp+yE|=~L2Fj5rjmra)UUOjS%z;7$-kW&nwb{cU4=#IOYrmPIj z-RB3EQ7JMtuRc+5Cenp-bz76&RB@qD%R*U#N$5A|eWtsddUAr^Z+)88nV!Zndv~ zt-zK3Iwa63#gmifeos`g?mg$?%;69vO$AKONdD+3fdk7;@j8d0WN>aymp@whE@jog z8eReUO()|erUJ$oJ`}4Lh5U!~Fq$h1e8#GJHg`6iJ73t?>9UhH>3nIfzc*$QpEsa%hff4VKqho#JQj#T-}?&+S9rW8-x>= z*A_tDgj*oIbp(+ZGUTt1n>~N}a`U8G8|xNjG1*p}p&WOc?-))R{FX36wRU}dN~87V zaloWmyTCHf5*So3Y0zbxgW;^x#$IRM^C2T`GDV&QmG#w7oFccpYDWERXy|N$rfQ6K zuleF~o=ruoNPoNHAZU(A+MJA8)YweDHnfi#yM)BwDzKR%DG6RF!mjpP8j04{kznk1n~;YAUjB%IPbK{7k$sMY9b?TGU2ivSXlqI`h1_V(a!19Z*M-lpZrB>)p<*nK{1+1&S{7@V>xgv!_jSWgpWbRX# zO9K~C7(qXQCFfmJS+<+7&^HL4oGVjIJBuscYOr=|eTv0rI~k&EzJ`>daZfR!AgZ9X z6oRtGs<1+=<+u|@t|;>f?0C`d%UmFv7-bWqwK8YF&CCxO85sfj?o>q(Y3zOUH3U>g zwH5a&E_`6!&R9KXGB{zaXEMH&mWFS65)g$u*HsiMHF=w^+cSv;{nB!y)8KoQ*EZt*#;Ml(cI-feR}X4 zEU(Sw20dNf%|ed-*Xo>cKomH?J47m7p6NDaEpM+Drxp1uXH)T@_S~B?9HzbTQRnQV zq*76P`=w4$s*NVkSue?y0f}IGvvIPMHj<-nS9hXCZ%lmqqUZSN$`^}XW&+Lf%pvJ2N zUDjfyx%C|L-(ThV_POn5|4V7{x){TTC~E2O*onqL^W3yoxfsiE=pp~L(Oc=3b3=kqK*>ynxtw(jolVjL;{q0c%7}%@5 z>;57b|Dv0~U~8Oup6BK|?Fulq`^{KmH`5?kzw{g4tX9;jv-wM~>2Z;i=7UO+?+)+( zpgSnD4`txo@pOVX-&5DLcJ=S&KsC>;i8?AvN=llqzCEd|?W%J(3X_zOK#DMzdcN7! zyWU{yfxE^9F$TRBJj2eR0HNp@ged$y$8qFaFb+@n;Si;1e)VoVEur1+W|+h$2}8XHT$m=SwU zDcMHnSjk-d_mOl#=VKD^X1}vJsLXwE<<(Ek^hW$Zuc^oPK-GoGVv~_i1*=+`9%$-` zVCI#3p^Q$=4}R`^;nY=6Lwa;-U(5vk&99}#VxC*kmlw&P>ZiAFiUwxp1g;Vpv(29M zmFYe+4Wcat{y`@DZ^F2#csS|rn5H0~N?Us=${TqA(%yc@a!}Yt9M30;FU6J`C7Cj6 zGARqm;;AcqwCYhv0a?ztjUFe)kb#B0D(umMupY1X)V?@5(4RhQ0b{+ZJUJ0uS$potl?UR;+f zJZnSmQ5{_U)90lo0E}he-04mKe$a7X04wgF1EGlRv zyoXTD7#7jO#R(INi$qbA98IQ3RYf6_jToq0{nS?pO;f}hi$QzkFeJN%nKzeZ0X}mA z_;rM8G2#fbxDtDE)i!z6eR*nNcT>#1avi@OW_CU_EK9B&@oj53T+XyDFf-+}N!)5s zFRd6cJQ^@wL>=ZKxrVy~4BMKFi=#92I@Vcix)qW5IOJ-b`>UerExQ8*13-_$y+5pe zLr)rW+?p_y^!cp}p`5o5(#0WN#jB4hEDtNZe%wMv^>(#0v6GWqHExo`%_WBiCUq#o~^k`W4_h` zIf;0iQo@S!RfW${$@BoHx7p4Qc(X>)&-hmrpX{oXdAVw;T-u(?-xLd<|Iw$tp*EEe zrYjhafF;eJ-iQ0Y}!G*r45PdPpSdmr#nR<@8zDOyt z&V}sHYs5>g+DAvHdK@A{c=%68bSrD?XkfNog!yNeEhPe`uYmgM$a3=M*31-5xFPJx z3ZIJVaYsS#I$T;CMIS{MdMJ#>fn8O7J3ceCRkzkBIsawv%b3+s%1q1l{qyBNW3#{U z>soHUiTP98aFepdTxfD+M3zTC?Z#U|sLw374rM|T@JRabbn##MoY;yyuO;bx&BP6< zr))b1&{;w?E?C&REXChbawTo1B9nJ)Fz6rsYS<-%GhWx zw8~Oaw-g%g|Ges3UR!<#8g=tI`5a>s%D1b#cH!gpho84)PJ8(*&mC>gV<%A%nM+mM zyI<{d{QCclrdn?pQ@R_wD8O$DqKGk`Xq7#KxDni>u7oJsY&+h}%n2zpubBX#FB@H~ z&l}SDLd%YZUv<;3Jc)cA@nrmb;J(#9?gYDX?!!qY;rpkO-j^`=?&k1o%Pl?c8+gI-mLh|*~S?+czCT42?)&yf>) zv{J|-`iNtKyRG@S;~Y53v^G~H-^8n4tA1_{_8 z4rWvh#|Kv0_^|8$r!Rd)b`Xzf+Gzzctq95El8Tn8@$pU%MV9ce)TN1use8n!kJ5y( zKgjNML2tz;@}{WZ6P*)0fWB74eHYDKFGCF72xk@-Jl#ysz%5AuguR*AP&v&>p8VM^^$j?4_ru zQSpo}bk2UZhQM$t|+JB4NYQ4Re5W9 zl?`QTs2~^tQ}aHJ=uIFWJ*Yr^bUWRl{k`?s zF4sp=-Ayr4mQ!&B>{-&>7nSO5av0n_?hoFpMF2hf%&VVeGFKjR$E}v^S72s&Z`oUA za|MxZ0uM7trZ^zi4SWzeO!AMf8 zs3lfRLIqadiHvjC-TNUp_Weoxpe$aaPsR6~59S=jQzEYR$R=00se}Uuv?M?r6+6Wu zw8_}Y6=>%!Os{s|TYTC4)98B73h-0R@%_`|8{w89w2J}%RlD-fZI}(cH{z41e?lX>hlo)J^@l zZLN}pM|Clqew3(Yl*U6XQ^FD+M8XQe2f+dfRo`cj@IRlMPx*X1oKh@-ed6}|x`R=D zS=mG6qbOvtFj4usm0~E8r;qg)Es_5?c*}Rbvn@>Bt%FtbG8vEJ2>WyMdg!|lW+X&L zWyLDb?Ynbw)ZXe+LMRe$7s-mYHB?#Dnmx`QG6buclpH~q?@5a(q@qKnxSWq9{= z%asdDVftF5wBb=z6YKJroZpgK`?qR@C*45**Sy_|BdDTRyoz$<0Ku z{@lPNI`6ih7V55qiN$?T?>qec-B@}a;?T2%+{uTcZy*^FVdx5NrXcQnh~*qB^h zPLAoP00^CMgseyaR7szhJ2rmHIKUzyj6F`jm;VUbEi9E#GAR+EoX z3=9f{>X~ZMgmBT)*u8;2CXaS_w;sIPQCBB2+x6k&#{@(t);kOGW2>7b8|!qWB<*Z4 zI2D*M5>iqTKYXJIO%rZG?Vk{KDOJQDTQ`ML(C{Q$qCR_3#B8vNjiFav8 zqXX+Oo-!C#kNd7OhEb?_86JYgv-DvC`EdoqQ}`V*pK|Ljh#n@%Wwf^$|B^VC!N&rb z(aJEncdL+7U}ym=XTp>YcPba>%@lO)=A<-DgF|lDB3UyDmZei?J5Jh+W@aQue!@v8 z;&HB#P1cC@W4*kYcoSYb#yM|Q&49omalK!w1 zOA%`FRy{=sT`g4ao>|f^F}twq6>8XU46J@YT(M82dze>San@%bIiWXuT+fnt;8*ET zbJF(42i3V)h zw;NV&%V5e}jz+irZvEX%=Dqv6NSi0OgAS;hl`l84Ui{hAv;VNyjsLWDqaZhg$7JTD zw!+%$sN`xtWmr93j6%=R(D~@=)xnRQ%UwJf3}W7FM!)Ury%gpPu;PK9^pf%>Ax3+{ zDoR0`B6|B;QMZU#A1oXknUl-k4`v6n;mqQ`mwGLKR<8bZi~4;Igkk7QyIueq>d`oN zm}6}%%lW$UC{EM4(GJ6j8lzVy_97m3$o-l4A_(pa#Xx*O;0IVUry3O}f%TjF+w#kw z82)BUlQ&##n0x^)y|BvO-*NIij&8rE6bU{KNmP|r8(uZ|=qOf$M34x-r5*5)W1>jq zlvgt>9mSpo=Kzz|zJ5fJc5b^A14>=zxq7Y7NGD!-rpL<9+gfEGKYna%)JHxtMjB|9 z>#JB}y;X%!5`7cu2va_^ys|<-~SEW>>yv?u$-<1h3ExNj;T`i;b z6qW#9Zbq~gp#=v+fG)El*mqdIlAssV%3qE>N55}S$s3h~e2+@tE})0?**bzf?MLe6 zT;GSCximHiqE0NF{=!@_(5LdXsVb#9RMR`0DN-Vn?6D*W&ijNa;aI0uz&?;E$ltC^?jff*`XF@4qXXhf(vythGH zkF$jLz-%Ga(U$W-?wj*K<^1hf^=I{ehA+CbCp0mTJiH-jSc3YkxZ(g)zAt1crU83X zSBGN zW{gBq&PhTINNePa8t32Ty|@G}+2y8#3+Xk(H?n)XXpIhQ8PDvWp7xQ<2Qkj>9oOIX zxE*qjb9vZz+Zl#gwTgiZ!-T!SpplSu19MAUp$K%mdx_k~_`HBr9BJ3h@ps=p`^l5fVQ`im-KE^6wa~<~;b2|pteVs>8` z>+f>7PwMcX3Ak#%Cq{dLn}S=pTzIRQf7G6zBH`EYn%X=I)MtnXmXmrdDG-1Hcd8=u z|GzN>PzQg&5@~sz-S*+==hYm)uekm846tE&9iCkRWWs@KS+p|;Ju=2ly&Q#EZd0Fo ztRd5yX9JKOJQjC96JNKVWy2LuYR?+i8Zs|Zzc&@MP3{ssx_|WkvGX)2zF+lm7s8$h z1F@n)?i_=zK9B2itnv-u(RZ8pWnS;zD}x3H(*?u^VC&QJJ;AyC*;Vd}BjR_<+I`+k z??kmBmdlag289pLSNbZvPW$6uH=xY%WSdr7s>4Ug});+)Ly##XS|F^S*c_%m3rIBQd(7^Mf`bkX{`?GNQeWBjI( z6;Cfs%)v4Ru!s^;v*uBxP57^K50fq-Fa!IDMhC_eJ}gZZN5iiWQdc^3II@tN+?o3Ftm+ZW1_sVE1hvkq1&Eag*~INJi8+l~(C>dpyC zZ=0Ifxq{E7T$&6qGUB@=swoZ>Vq|B({@Pi;yP3BkYs4Yu4i( zzgR6J4`&7NC*QN9>si-_bD_-H?d1BDq01-Sk8K`_yMi#!6Z=LKUydC2q%BF})i&L; zfNYJbq6mQPJP(2Oniu;_5f2JEzJ=ckU=>yfi=U+opXqL^T{}K@TUQWVpCsBxdi`h$ zK}EP1YQ0T^Zvpp3JWZJgPZvMnm7fImZ ztw_6Du{!>^=W8UH4pfbc5#}^a1{3PJMUzXe0&{q3 zT^Dr~Ipnf#N(efq+%THRUsI7=CcHVWIf7A+Tp0_N3FMh6@0mmAl2a z$R%XqSJsO7Cq10^>h@TY$1AmUqUm4$A-H#&ueiKCC)IzJF_lEmqe>y{|KsYdqpI%q z?rpkDx&#F2Eg>ll(nxowbSjOcG)OnnCDPp?El9UCNOw29i`)C0=louWL;sL)Z1#7p zPs};5iXwK@`)N6LDu|)cubGtJu>_M}?Uml26VlOPc3}Ctk2f|y4vr^leeK?#Z&21t zGI@o9SN`PbZqNGO{^w_`3%COvi{(_*)s4f2ikHfLC(GXe$c4krHh@b!)>v#ntH5xfG32~<$CAX0%E`+mv|6h>gkKsd#!;T+r!6D=McfT_!V z=7gu)boQv^g`)kP{qxWN%mQ@4Dh+edTX5H)7&W?*_@d>|OT8>G*@L4v>N1dp%QrtcS)Mw5YC zXvulbMy_JAy!lzh|7FHM?M-jrLGPLiGP1PaV+Zw|Qa|NDn#~O}Xk7wn?LUT0C}d9s zbL@)!Oh*Iqm>v-+|GYZSK6BmwftlFT(HR(*qmX`r7s(U)=>^fP-5bxiw>DEJn06G_ zWZ>8lsyk&V#v0-|{nfm2`%+s|5t`uxiIwW7{9w$t4DrNVAj$hdyJfcC`fHGD2{Jmm zPfX*@jme`vYnPy?YJ5BlvcD}d7mOAA<{;=rpEf{4dxu#E4I&#F27HAz( z*~p_>r7`$vK;!<4o0uZu&eX_DoShU@newd&$#n$~4e5P@*`aVdjUehDBl#{Vv!_{e zP)|o$U0wjKs=^>Dep6kvf|S<|;+u=qRlc=I7vQ~wDOHtTbIM{BgmNAy{aq?nb#l`3 zpxfBW@>eND=5=9w0}pe8oAGTAb+Rsfcbh5lts7@)CX^w}c7dFF{GozGx<0>Y_$(d` z?j!bDMw?wjW`;U8DTVlra#gTE#~{Z`DiHZ!jRw16bh7kh$NYTF;gN3oW`hF{FTU|Z)EDX>2`cLP z++xYE{I$2=1R9lh8I86~qIU`m8xqdG*ay;q$#D4Zs|!0#>XIt3+K=FQy zU1wDLbOBDcoSdA>Y#5dD_(THdoW{nK$-qEloc69j1Qv@`QK8!W{QRiAVja8prsHal zkNFzkO50!Lco7{b z>Uq_<;IedfUN#_G>vkiPpq$Sq+3>%yCUhzWCJAWA?_5os7cUr;C=6@q!VFO=3)YQf z`kA1~+4J8eD`_6l#enGvND;VC_c(AM4N3t)!NMEBFVej8z33_9Ez75dQLQ4|1KWg2 ziUDucxe%LvY16{R4MQt(UbLjdB=OE;^QZ4YwLN9^5YBp84E+$ z|1Oo=(-{oro({bnEodgojq^v4l6~DpD@ZT6^0jWj^fDgiDQKT}@i+o_HA6aMbf&QmsHxPi(flMnYT9D?xqrG&3 z&y*p<$(+XRusT=TU^@DfR_2;M3}4rIJI^fLDZxa_`!scF-gR8o%|*J40Iu-k$Pb3i zyX#ZU`CMA65hSe1JI^t*l2{wCsgP9h0WBgq+jh=lKWR_(8(RrSUf@dR80eoaxTPm1Lnqul+3=bMcg`1M-rL zq%~j`ymd2D1e9(A115wtG6%Tz%H6`0Gh8*XS!_&|j1ek+o2ZfV>(_l%;3mg}4c`i-hf zGvd>A`bl?do)KPWZNe|`6P@p94UR2X7$G~AIp(^KWOmvyu*S~9qh@+E#>-8h*)Q`Uc}L0$UobZx|3{<|a#*;`H?F|I6yM=@ z2V6{nltpBVe9Yz+HtK2b*4DpsQBA~I@rZLyh}OG5rkWkaI1UCH{#C?dki%aQ&VekB zW?=4kia+b=gDx`sG!=2V39@?cyUwS%I5?yXfe~>RxggE?_fOh1QRJ{!cCPok`j?H< zh6M18n44)XWRoU`pfNb9t!uHlskVsWXIGj^d&0JVb>At3SU!99L(l#P{N`6r&I_{7 ziuHGu16UXSYmo%BfTMK7yL2r_6KP`8D2Q8s3eaOG>a8&@1^&7YzsZ%fGyYB|*clCO zpRx$Ujo`V{Hk36+Z>hy^PpN^6638ogd3hy{k7i1>;Xgc4jy_0}?s#k7LLu@?GkIFi zR=#)oK{M?C+~^Vsu8VO^4U4(@KNh=i26$_;zp0X0xk8z^!H=XG`i{VyB=OwMM1N7^ zNkL94cwWeP%638Dgsu;bpC$A<9;UFe5((Gu)d^LoLYX{)1ml_N z|1ecauroo6{sEy@{H)~tFe(pkQ&Wc9n8!h6$(&20Z97w^Q7gi80|vR6BjyoY2<|q^l!)fAwSuP`HS&;QC zh}SNzTj@zx?_a-qWz#b75Tp5E@KKr3Gso>4m(eJsCyv`OMfy8jv^^yuAuV=T#`+kB z=U_SqjBbSNCP`|__^?2f*9CKl&3+0G(qMku_5MetLeI;43D&`wsFoKkK<-Ft6boYm z_k!MD$9uZ8=d9}ToXMlPB_|d;gc>OX-oFnI=bgomcaSUS#?}lcyxF+h)@w=++r%|@ z-rB=okhZ$p*=aySXdC9nti0 zVCvV2M`Hrh;lcJf-wvWzCWizQn$9!zu9$xK9DcY_xExhU*aagp{L65-D|_xHYZEmseP;&YrYCZNM9(kJ zbMQAf8Y|2N6>*KWG|D>^miCu-HFPkCp%?wB6EBRnw+Govbrbcx)HbtnMq zKz(?QKE$gFCK}^K&tzm?Q&XMAIqJ6A<3#1LYVSEA5=Ceh9>N-ync-P%v{9?`!Mc)r zuq?4}v2c5{rQWs9VWnW5_2LeebY{@o^?nqY6e0$kKc(SQ|HASVzY9?s zMr3un565%@Kov+^av<`CF|COHv;>FxDJU2At`=gE8bv>??mOs{3w zy>%6QJE3$mmXm1{4S(n{`E9l|M9>Ztw=@GhTg%h%b|8UCEY@z`aU4)7kTWEq@t_bg zS^SD8C3$M|5t69CTA!q_4P8wQa)JMg;QKVQ^-#Rx)2|?1ZPK_$lKf?!%(Em#e2-!w z%H+HKL$Awt65GBeWxpTpk51Fw`WRo&VdeUK<0Jx2{^dl9=fTvD|2@VW8QN(Hunu`O zDX0mb<@(2+ZYo{M0OmFI5%OwA$tq`)kRfsaY-U}Zi%(0QGtjLp02x}|h4i((2W1JU z;kesTwgO^c-&t&9aKVG_B@#@hz}}h_MJFQinEkg{O-`hMR>D!X2nap`118_m?>_r= z{~f%e;4bT2f?!tWX8l!=`+e6%D`1$xtVogcidz)-NmgNd^?Mq)4f)8JHoeaSNg@Of z>RneP%QeTpayw93r8$Z#q5Zo=pJ6a){Zi7#V$)hYZ`L>c<9_}!^*ysi&vA;jmdk2v&-*n5pxssl~(G?c06m{ z8ktydVw!vloC8LC*4pw_u3ntoSh;Mr#>%G$Jsa$bc!r9GoJn3)pKBetBLg~+_P$sT zqmEf1hW6x7y%YDo)xMC%&2{7Q5`E_ym6A^GnjRrT(n`oPxIbCD3E$F^yzoUTOHKoU!&Z0u$tObjVqeUS|*`K=aCJSQ(vaQ>cs--nYI(_O{LR(1SFN}479(M5g zIB>;XSY93>Vd?^7`kdYu=FE)#^_|jqEZw`E8{yg!32GY&O^wDTC&>QuG=IwV4iO5! z@+1?b*op2cV-{n<`*BjxNIdokhS?Dv#SllG@a? zj)C7PC;N6KwK~awVRMQ548bUirmC(br>LT^p@4S(Ty?6>=F0v$g&pn2|KHdN?qXaz zW-t|C8jwrl!7~dfiDCggw_^rJbo#)0GGR zUe|57`n9aVsP9$Q?2Y76#ydJ8h~g<7{@1l+6`!<{wV(-Ma65*{wO+`|7UGZC#V=rk z+ncyUM7xkGJ_i@JkLg7=4ZjQjtBANiRcCE&xjtfCjxAUjp7d#nF*?I*kO+dtz@h0t z+pSA-Pub`ZZAik4N;tO)EX8o@y-TNS{{+UYN;b{Qk+V=CpVVCvvY9-Y8zcH5C8M+W z2+`p`3QeyouY|ve^;|?#cD-q0r^xHVYVdNv|89{@fp!xqzz)@2ZT8hwix7m9z{Da!==5p+}{NC*x!N-4SUBOi*6S7Z?Jzd|5yoDpBO{FpW&yJ zoOw0%{xwWG!eg6;T~-zp1nv1F<7niw@V=Q)vKKPMC>68S%*81V)OEOC2N7jgf6k`| zPN_A-fpAvp=Y}se0mUx1`*BvbUpFFpcqoc9bO?X+gw^XKKNCu57IDZHS(HFkCLD#InIOn%&O+gt8oNW`yFuCdR_DP!6E9ZC`DQFk_;69$)Otn!sOVbI zHEmnJviET)ON5V9k5fqciAL+_Gp*j70_r)BTpt^gf9!BzRwoX9>(yfCNJ^ylCswSP z`53!mjh^F85HpZZ+k>YwLnhCf&=(lGaPi^E;X)HI75XHewA4Bd-FU0sJ}J(Ls=&qn zw1&MlcHBBEudQ{y^O++fjSkAjK-|qzsdB=wgSS5W@1y@@b;I}uqjRSFsT=Qfb9mU; z6F?jVj(^I7GI%3?u2|LJjKO}+rq1)chlCA&IPU5OtXn<~y`kbPWi{@}RibaCr3W4_ zaHN>i8RX2c!GkAcWJwZ(MW<4L+V`RIbs+f`HcE>ENuz&D)}j^4muG!0O;VpTU76q2 zw5n;UFH%5mZpR(;Ix%E4&Pc?iiSXBATdx&^WJ7GV`S1;2I4|g^kKdCb$ka-O2VnD1 z@b|K4iXfB|HojoU_uNtI^20&bHM$`p6wGo)g4fxj<`@a!NiE@v)9~+h#o(ub4X@`w zSoA6N`M5uY6js8h@CH=_fz)$>Xdez!QT6CUT*}32nov2l5!Lx^>=)ditovV6epM zuJz{yx%Qz4foH`z#9PX+*T9aGLpBr2e*Z20+h@4%i41gf#tjqGQzHyrH`@JHHk?Qoaqx*d!K9nJN*yGS=5IF*sSQVhTG`VI9zJ1a1_wSV$B8nFxLXM-^o z5R`**1yM&*#vE_v@~I8GXvwDRJXaU#eYdtmV&4ShhCy?k{<8??lcS>*pfv-w zx?Tr_Z_efim5To}8h&y>{xcVbn=RdXM~EQYj9hNtqXt(_fDxRjrO}UwtA1M zqot`q!n&p=86Dh7lV_)_1=0y=OrApLooQCST=)nx9h#UHJ1k_!_hd#KAD1B?mJ5C4 z#ch%Q&p&ovr>US*0$F%%=Yw|rY1l8c9~Tv%ZW7lwu}ueVL!zDlJ8g#M-Ejp+}oyoD9?i9pEWPNs=Q zA-;99VKu&iI+9L)BiuLDi*2u$`{NC^Kp_?)HTdw9H1@Mk4kQ~Du017(LFvaEi2cXx zisWG!FDFtXsB>F)ErN1cc{iKkP~&w4vGBE^mp}vw_wHNv&wGbkyEK7)j@$!u0eZM` zrBEE1BFptzYw%6WA0D2(ET-@Ze^&gjvGBsdMzap1=lm%IBE0^6 zD(wgpquUe^(3?rDQw4KPI&*$7elby`{IycJSM$648Kk1q)Si`DUWIn|L8i+s%1d z*dqP$V5*(K<^0E-Of79K%DL0#K7o3K0dJ58a^|}(s1)`&($~4=St?^>ANiVv|uW{$lPW}r3Rq~_-_lIg#lh+ z+2*=T2&1LD*RtD~j?%ubEOo>D`Kbt8Q=sT=Ov~cAxS@#zZ()wo z9W@bWVvH=qm|x_U67bFG?VX3-6sJI;Py-Z+fdswy7RFF^Zp1O^>J$lG0?Z?g2G8~= zt00;*Tn-)^KkI``Rs9u#0^(OBx#+PxKQ9 zeSry5$@ISJByUwXdKUsz>8ZAj+g}KDumXtn(Ld%W{p|+-@+1E_Td`5l?AyB1038B& zr+V7Dc|c4T$X3+{c@Bh%XRU{JbG7@K`kZ+(K-#nu4>ZDHd<~-CBnew#r-MeU5hLvM zS>R3Co)6Om=xN^K;2!L3ZPnjj%&C`XorB3$Y;}1@J9XYX#(e+5|M(N0`U37|Jfy)g zA1Puw_!}lnFkA!>IB_`}MS736u4cEHXERMEKV!Tfx@fhuv~xP18370=f77Syt&ULG z*5?MEVA?l5KmV)xO;oI?*I_wJyuiztpZfPV)A~)vJ@06!sAB*T())BHRUhcP*yCbY zkPg}&y(**-gZ*@Uc!29`Pq6%=cL3+Hw28S)b8Y1B+#5viXXCL%cg7~s2P6y~+tBtdV@`x3ONya27_3Wsc(~0S^mP|Yw?!TS+Eh2RNyT5d= zy7QD~S6~q!`ISd?V{L2L2LuV24{NawPgCY7sj)5$Qv`RfUW;Zy!y6FDe(*XXHNxy) zb%%aV=o8@E{sw6fAFffov>>fXFQI!<(|W&urczxZOQIirn~>iZzCJumJu`{Czg`H= zj{;mLD>&*gMo@b%Dn@i-Zw#@Ne_@JzpkOD-+IBepXv>fGLkQBS?jD{*=5qthx|(c@ zTAl@!HMC(ZD)*gf09Le4>Y`3jCh?_nunW+EmJ4`GKaBY~^RO0QlArmEZ(l)4 zi%0>+p766(esz&dCYI~bO*pFU^-)aT4;#X{I|aQ5=tejD>))N_8YXAR3=i(375<^i zfV9$w&ANg1JYcH-yjqlq*50QmlFc5Tn2v>*0ysWPu;+q zXFk4)p`P~MQKtHHjV+Aj=u0+B++lVO0wKd+H1s~@@m6-*d)~*} znhk4;1nZQM5B!F~j~p^bS$K;$M}@^A37P1s+7*FDa-M<6$+7Af?oQ-jLI;LH>vT+~ zqoX!a?DQ&$vRbU~^k0qIS5*X;DC?RLLIOg!50YEo#H@}m4z603wx*Ouz+fI2tgX7w z(jf`X+1P178XI;40NXj$*oq7P7i*+1Cx>oHEtZA&Pw7p5hAldspZ!d_l8`;h{ocxa z_OQ_xGJjSjU@?C;ykZuNSy9zH13}44#&!@J_~VB*deedDA!BHCC85*84?V)T z$#UBCks?Fgn-cGg@GCu@hTBMQhPp5wW=4ni4j-K{T<%i&M<9@CNHAQI7Z^8T#>-zz5Wx0clu*(^^IN8;8F&j;D zAURocTbmuQ!*K9~$9-QB@ZYcc_x&GK0`oNq=LBXC_P zf4?Om*m(GG>)~~ZPQw;f z!6xc_6-li17oJRt3;*XEbzyOH$g6FT(8;ouv>9~r-U^LE9;&ZixMx%{HO_h}syH`4 zA}$OuB}&%J&#^}zP`4Q8ZWc?9_S|0_-2-_B5-DwFYc=KbII(F5zeTj8Zm$X-cuI=4 ze&&k$vvKr7W}VMf3f>0z%>FP~NPWh>lAVKr`8E=a$qpjl*yKv*Cj&ey>VGtbg(nWrLU{-us47;#`It~9P~WA+7Nr}aHq zWM6O%=b1PesuptC;cn)QkwZuI1-a$0ToUSwKB8Id-a$FVUUd7Ry|KczGPefCQbLHZ z5QWe)jE^KNz4m%3)W5j1M)Fv{LIF2L+8*hEv7wGV#!D1Bp>XOxNzqb5Uk5T%ds}JJ zI_8A%9NNzj)HuZpGu~&O{DwcB_7k7Ac>3s zDsJmZj#*Mt6zO!ii4i2?fEMG+N4}t*OcBYfwVhypG4Zye8s@bKb0NW3)DyCfkk92w zmbOsvqN2ZJF&aHSm+Fy2wC7%Md4!V-dI7{G=^)&PVq*oLI7#WLr~8?E505(+?i-6X z?$`tGRDfw%Fv~mPHvP^^H)cZ#jDR9TP>QPScwKkEqi&g%COkAXKb}%Mj{dkJhx08C zEU7Irq_U5Hr`B28rdJjS`Yl)4VcBNV zeT$Suh8GstlwbZ&T)@(gxBLq~{Di{#Qih>@+3(8sZ;8(TuLcT27doB58jFb4J|!|Ey(lBxjkL2GrM*<_$x zIA0PkkvW;EIrmF^2E=5Dy1+o-ApdX)^Pou47{q_MzL6xNlnpB^B9A@nAoT)^=Lt=3 zjl~@ywIG78dqR*yXeR}*9eb7sE>xwGw4p=^Ba+XB{0+a7Jc18lSxeH57%~lBm~8x6 zkCp}~*A0~T`?9?3j;n(9q%77cU<1g(EKX9{ zXotHdvc)d~KTSS>j3eVc<&Ke#)pFH#1h0Aq1vNFApxI~&A@HtlCJ|HbyqfoP+rFiC z=Hl$(CpGX8v*pQQTTSddKHcVJuiklZJ)ZG!f0{Aeq@10fzX9lcI{@&c zLO23sAb9w{vHxEiukTwWfWED~zy1{RR*4Omgbdo~z<_Utxl*g(R>8O3dNqm~(*Om4 zc1HDBSGR!_a_Kbv66j`c{ZN^fi9`0Xvj{t-E#LzuyVU-xb@^M305Nm;r^~Es-EuE3 znU^25n=j+OJZIbJ&%Tra6t8LW=1mz;)IHpJKVJGGk^^FaO>^fISu%>f(?xQg%%#-Q z)d=1XE)s(Du#UZnpUe-3kFCyYUy|R^Ec${xSUb_N8oAw`x#c)Jw z@zO4sp4yHnb*-QZ6|-gb?Zyn((c5ypuGrcnlZ0T{)(D6*k)KybW4MnSA;vlGF7;hD zx;Jl5x!5d@77*eZXdC}NhAHp?k~1RxKm@^n3WW|mXWgjom6bPd{p{R}f|$No_i%0C@c#%Qh6-&HJ&~3uHvBU~y#pZy_Sf*IMid z@P7h3rytPMFa}38rO)=HQDxNXB5ccY=Ijp7)JhqNWa#m;p*rXwCLFJ|q+qtC5Z!g$ zJ)cV^PL;sP6buZsZEfvhIc|Qm{bEE!lO+86aC>rvLOs#YVt1^pzaZl{;}HX@_=HZZRs$z#9pxj_g0B^@e{L+TBp~=X~x`Sc}v`}4~H3t z^>*cZ#Be4#T!bI|-gm}@ywprBSF6ot(*CBmx0h{gTb3F?RC4>@Naw%3OQ)jmC_Y=p zd!I96*gvx%dA7oAIFW@mo*Kun?x~xIDiC_jYzHC}-@b!hw64GCq1Fq33t=aT0RQ&X zy+3`Gpkf%#^0!*hrO<5~;cU_Y-1&_+{ah^;U<`YV0&(I4!O31XY#A1Ugu{uhe?}!9 zfwlSgLG+?41m~#)!`XLk$Kzh{$H|vVBSsgUH@C97ogMa?8XbMcJTG&5y_vCeG$w;7 zaAkl6*Lt|=X6&W3)p+pqFxoZ)SCfnMS1_)3D_NZd3jG)9HUH7mkUGNC$fxUQYs+w@ z>nfk1cRQUQ*7M3mIh-eMvtfV(I_s?)9138v2c|oG+L?b;LA4bIs4-gX6TC(OPG@B$ z+|mMXwnbLCYBL-EAt8t()f0{VSWRCabAa%4_hh(jf;u3;BB2|7%g_OTkR+h6Nb&SX zK~+VUrk-nq2_&LR=_|FUIC`)TW2i;;Z3g5CWaF-*^K#4v)o6QowM*jzz^uj6$YOUR z7>t6?(&-w_O&R5Y$YpjqNZnSxX3~ND(YZ`Aj<7H{H-I3RI)J<8n+=~aNkX5SiD<4I z7CC`Y^qbnovn?DM2YjwRQQMm5BVQo%M?VT~d-5XRKf&1_Pc=z#!dz*bMD|Hxu?XmX z`~zlZV%RPX-l z_XS8ey++hP9|sh{y~==qOPOMg`K94Xi}%CnroiL% z!GTu>Oi#pfk4|(hoe#&|uvoK`<Ja3c3FGaqzsxTiaY z5c+fZQX^K1OC8ORG%G&HeydWkt&njNUZ)Hs0uk9g$o$f~>-WhM|L zh{{9DX$pJIgP>mz`eWN4frnug;V4>O%kvu^97l;R$?tBk$dK-VPW+O%=yxz>*Iv zWX){R{9wKXlx6#e)pNdz%XSYNY2M>?uk@O^lOYcwUO#c<=O5c)J8x9QXp#L?R zElLk-YwEywY9G`XfOrD{)j(>}cK>s?>~X7C@Sz0=!x07VR^;tk&f6Yt+w87()CF&u zA5Wqqz0Mjh+aA+^ic>66M+r1yOE*(Mu9zy%s)JhbaZ$h}cD@OTU1SQ#4## z_f(W+eTUj46w2-lZf}wzn^D!)9v})+@mg)DJs=|o^J1;iaoYdP0*1GGU)SqhBqPK* z7Tl9vzxfpFe7@5w;dp+Pwr~Q6P?pzeV=--R`%#;><%zdm3y!?fQaPnc0|0M3&?8^Q z;g*Bakr%Y_u?`n|r1Sckmos;`b)m((p!RlRzVr+D9RAQOKy+wrB||CyWP^xHvA=Z- zr^7W8tnm)felcwdqS8qd6>(qVND9eh)O88 z8{wY*8gaEr15EQnE+%H@RcNHJ1k_PJex_CZv4h2jinA`fkHp&0YpWqfPw`cvb-*g+yvg>W)IN=Pyk^%_L?SE(LNk{g3aqL&G@@#y@0z;F_!34xmBWLVDY1?KsW(6#t44v|1K7+wTDaPb9=pM zKsty3?^*u$hM>}c#xOS+=8<|^Zf0|7!#MOx6Fqi(NMx9_^bKr7bJsogla6?DS_c$% zt(UOmHzTyAZ4apWcdOHF$6pTbmk}Rt!}LF0dMw>u4tu9hh6pZr999h^*vypsI)yJZ zxzvF@u(R{U#RX5q+N~EB+F|dF%l;yNyCtEWiJiwBNIwq@ND&}Sn#}4vJ zxu|{R8&rlqW!GAw2z|($k_ZoIy8?z24SaVQsw&dOwV^X?f#!X~E#2h09x>2J8C`PF zFb^B4u(|`vXl{amWd~O>qLFM4Q2K4I)zd#iYYvi=n7KfMBq=#u<=x;`IQ!$JIusQFKfY%;5^sD-vI6 zUrhIsH66Cz+P1AlXnS8&Z3PB--}Fg5fMFXrb`G0&UfDGm9k0qTHSK{v8n$9&m|FH; zSE}oO9E_n&*Qm37j%xpS+H&Z**|c%zHBVBh8LtL>-qq>t@CShPw zpJ=)khp#nT_A5xz=@fyCsH&?g*Lx`s4?$~In}LC?Oi+z5QvG0p@)q1o9N)E$0IDNs zV9K!u+95=LU{?FlGdm5%(UiDGG$jfm*Kt!>3`KCmz&}HUHVAY^i}kz@2U|Ov9%_>O zG$`28U@?D@3c7?BRfOtHwy>lyDwIr0*63UsG0N6}UJJ%$UwI9M{Ef=dGBqFxLN4{> zGUgiDP@S^8=bo>x!a?{=_f+dxOI6{Ycg`(Qi#%G4&Avh|bF76$Yaix?5?Od`72@(L zE3p@aHEw#Sqcp1JX( zBMAjAGmbd0Wn+27)RW?BoBU)LZ!{*<78dymG(A3{ZZ zA70L_RTM6Dj7Ak@Ce4yT?nUF_pZxlLC~50zX|c_}1s#acU-SuGWL{}JKxJ+&2Uv@z z+f3g3X56OjdhnlX223j2ZfeTzhac~TL7j`dKc#Kga&Uj>J+7**dz{ZzkqOPzdNww| z)b=%|Xz8NXMc-pz@Y6DE#?>EM!N&mRyG@{IJdzN+0h3*~%LNxffRvQyzd!p}q*mg2 z-2J7jxzcHlvtbnEO#pWRMjgx|d3TiKT&+zir_HKK&ngt7&jVQGlOt-O-*z+C+AYb| zzHiwcsDKP?l24Zz`|76#gVBWK% zsbYk8X9hD^8Jq7c9VQrVb9EE-i?;Pg$4gsTS<%X;LnH@zdbqm!Xq*gH`&`m500kfmbnJL|ELB26Ubu^yEV8w7Q zO>2tKnq)J0$MYK~6e#$uh%aGXlxrQCJ|#`(nbu2b*Y`R18o|N#2HPN2^ye2;Unn{# zT&SF!Ijda|8E97ZmK%Ej@DH2FZFEd~)>EuXHS6tPY{p{Arm$}}pAPW?bcqwB+jZq>Fcb<_WM19^HK}6w=+fvO1p#guae~?O*%vQ{c)x(y9mxtnGi4i&Sp#ZaRHwQqM*$HMw0!I!{TtK#rOc7sp^z zxW5o>mGeKjTEX=8N(GLC+fNX2q5s<Pqv9nR&AW?kyJF53ts5aG(4RN(qbcjlnsW zy_toXnX$1kK*w5GkVPczHGCCdd4>X54rB8la2O@oiEveRJ1I&r(-wyLPSLE?j$QE~ z8VVM+8u1+fYIz4FcM9^Ax6J4rM~i}w4O?u~ttacu`amoj@~6Dbzw?B3#@n+t{eN^E z+$<>e3@{jIiSLO(=oURfmxl;g2a3Z1PLqWrSiKydYM?-87_AN`Mg;;Gg?jQAcb$NezKo8qp|>3Guk*^4f6JD3I@NaP|0|7hty^L>5<89tRpK77S=O;d1$G zgJ&q}NL!7zJZT5fBxJvTk640?t`qKv^WEu>HD23ec~8>kT{4+quX4rN{dPAc{v6y!rudt@wev@-7cxFp5_n z8=o6^xqYzx)8zG;|HBC5j*n~Sy`j2_$|v9@67)bCj+-IhoBB^o%pMMWJs}%l8V|h% zBUp#4#Jmzly@@(R0|GHDhF)|JHek$3WdD+O+~mQLt~J>@Kd;+9nPxGbFP7+R@B+17 z)PIil3IFaz@dTAmG?u#MPZ43eXpgzb(3#BFjAJlK7VvcMI=Kq1-9#{138w&bUA_8? z3{G+R--mLymx8l*cQU$Xz~+dMajbC>MZHf&ToG)8@39W^Frf)mx&lZTDRnC=ZLqpSBV~jj%fm7$>NX>x&jJo_LG5w{$Gv$L zQ-y2I5)OtA*-4^s@b!lw`IDwPgr2xXoWs~ZN`A3QXHwnHjEL*^h}^N=gh$}N+LwT2 zYmlLy3Tr4>FDK7)^^SQ(qM^qU@eY!r9t_gcKvXwEs2v58--)mSe~%$iwo!w|ogUq5 zVR>Tn1aln(Q#T`|oWpuw=k!1rbCLwxx47ziAclhu5Ad2^_xfEuqZt^p`m;)L`UIPY z;s9kOm#{IdhhP2raZ_Y03B){ywC)g5C(_Q3d6x^`k8O9mZI$>01dDfNjcFuu39KB1s04y#G; z(>0`_s01;1kaIH#-J(wTWxDZpAqK;IGit#2UgY!sZ$jolAuR^g z74|Z{Y8q9`DsbN zyR-A5J9LQeW-A8-gcB;RcyV>#%r^aJ7SQ2&?T_d_q%rTZeSgTd{-?>VA8z-8DN4}%b(fXfNp0!FbH%Rh)dT% zymM~zvEmMdAPuLU+hBs(Mcp5xH;H3*4eR)pN*QXHd`IoZk^Hqlyg6BZ27V} z5IYbAWo5Ni$w=_IfkB>Y3++DF*oTZvr937|>AOxLL!M>acXi7crSUjvx+;(qzW)^{ znBmH}4JgY){uyf$I-u;$VK~&2Ks{4`oeU`U7hqNUhh&9u+DYJ8M_VQc^*0ay$cy2W zt@EZ2V4|SK)2#byD8f|2tHldcD$g+w^lGwDdq7b%3|<3Z;#II0MiLV4C+P*)&vosI ziBIlM9x_d+TD)hcDE@g>y@>hEpuTH6o2r!pbn}k|^We8e z&$?YNX;J+#^rGI+jszGD+Au|FWI|yhA($UdxUVWlhLsoZHs1T{Hl;lO#K{h#JEGyA zp}scN3^#&<`MsKBC+?pGjm64TzGvNUJr}=diQBZx{N+mt1_pE@)HWvqE)?u0kTe=# z7<}F|(0u--b&5O#DvL7Ms9`j+YRf^GH3a?41U9!pHUapvoRA!_YH74jD||ZyKL-E;!Z5)<8lO zitF_=`o$VZR_)~Klm5AsjGX1n$C@*Nbl?=cx@Rt$-ATsf?^3#ma$Z=14&8v zTo@(j!uI%LD1i;rp(MjImJnv1mss6cV%Tqjt-J6k{H(AXXE{l;R^CdesydVf^sa61 z?RA|fDl034Oj*!AyScr=PXVK?Crlam-2x6z;O|`0b6p7l&ETWQ&31wJahU$yo|&LA zmli0R9#7xaI{Tjmfphh#bnq!Wxgmr+ixw1T#!!yO zxA)*!(Qxb#!Lg3>Hx6dBwnsJKC?{DVlXw}K37WO%=2jQ220#3+uC5wBZW3d5bpk6z zuUSU7H1S@vPyVi5%l$=S+ueI}+l#{w4G+L(-fT5n8RnYrKO0${_w)kzs0cAo;1R~b zRK}<*qbNfS$oe!W_rYYt1wt$O;WB1x40O1V&zJ(_!`j&~iCy!H2n(^!q%ikZIE)48 zs?(Jkv8BN2f-@RCLPdB8)s8MtBFeun?Z02y3qDr@e3#`NWs1}6Cerl}3**!G*kA;6 zkl1?n{_9Dz`7kVd7qZ~j`tA?miUlUWl1S_tk!NR;l7h%SVGWR%!`stbfsrl0oOpzS z8Qg$at_D@ zu&~Fjj3WwLSETgn2lCpLaE{8=-19Q;Qxehp`H#abK>EHK81!`V{jS+v{_z>C;=XKT z9lXVvy)KHw?ZGpOE=o>)!GPS+F8Kkp}t!N2U&G@xcdLddh4*L+pcSPh@m@%lu~+VDWw@g8WbE# zhM^T{0SW1vp+UN&ln@wD0YS+jq{IRwBqS6>q(S04x$f(J-sgQk5C7soocS^5KKEX0 z?X}o)psU5h@VIwVOEky692PWLmq@1(@U4u(Lg1Zz$%52!mmqj&dmB+6@AM2lz29{2 z+k#H7G=vgOAKc}0_~|`*s zFyZ56PW|U2bvu&q&!0amv(zDxtoMt**U;Jt9-qg*HQ0rg8Z(9#tcjQ2dYcuIr-hJb z7+Jjs`xxKwETSSwiLbW5V(VLAr?)k6TH%16Bd^(-j|b8m(x4XY#0R&w9~5eF|NO;y z#?|}hr>e_3$s4n6EH&oHSHLs4`62`20*9pqz>4P)quAL2;Kln@kI1vCCo#GXB4En`XW8qGaJZ*360Bi7A_w|`_50ET zfjT+_wIqo&X^yS#6ha{~A9o^$+9(`1N9i`sg2dm6WnqiQx``~pAmhBO;SEkA|32@s zlJN5XJo$+N!fW(&JYO|Gg&whEV*P&7>r{`Ak00#%cJ#8m-L3cn_UE%bM!vqxm-CdH zLFcY)w*5BJGhhOmMfl*aqXz8HpLYuy@wv8~8noe?#f2YvqrChhnC85;Sy%6!K2kji z*e+gUlvlb{tZMggA0FJ@GhVhxP7AW$dKHHz?gam;0K+6W!^IC*a_!EKCsfam#_)p< z1u}iD4&{B+v>nHv>rGYxEgA-XXPuGWz&-^eFi#SkMaO~7d!9O=OaM_e-aSzh>ss0e8;q<=P7HnN_p(1(xq`NHEr=8yjGnOT0;DJYD``0 z4ZWp8kfzu}JJZN-=FD%YaeH*tz6a`cyjPdZ$Ft5KC;U@*TaKAJue0(TQ#(N7uPt7d z5EmC$RaF%hCf^(TVm;x0-|9^jfspF-gX4m>(yzb%R6`PFK5t$kwGQBN4-VE}YP+5{ zcU}U0#7U#0txaNdGQUK@T_z+2i3>l}1zDN^Y%tQ*Rl8vx#XR!u>kL^mQi-d6W&f^A zwKC7FcgchPu2-M)IVLn7pa(0VBD2VuALe9NDuex44Ung`6yyqLG2z$bct+2-R zQMXyb4^8CJ1e76!JcPt)LRXu-@SWXsj`X;|m+y9La8dWK)4tmF{?QeQthEqLeyK)4 zcFv~-O9UrfQBe_X69`w5@o8sgv)`5L139jKuBcIb1(n zb4cf03An5Vv=LO)+8xcBEjqm25om3=IW>$*l$gM%aJ^dLcVCIa+7zcl*|(QFbk08O z)A<~xzXsg=U1Cr-3=L(Q;)T=*!U?NPsD%BcvMzx&u6H%BM{flbD*h&b#;e7Rf8)v< zTtN<((Z)e+*d&pX{hg6-%&9Hf>3CS^%o5++*-GzfDX8-Qtu$~)!t=g!y`H9218UdX z47S)w&Lf0^kYG)y_|Z0VGoK(^$Vd!%mWo3{e0*oi#j9R=DS(T-O@86?8uE7jV@2$D?qV9M zN;x-hA63$gTzN&}Ei+z-5RF$+&(!{;do^LrAtZN6G~|@9hV^_fTjnkPW^GW(cMgQz z(mKz%-mc}NdVB_gmT^}9MP|JR{E7&lbg^5Xpq8Jbqx-E)N^UutxLM~iQIx~t+BKE8 zf2J^+3h^61ju2RI_hx027Q1?H&8x#5pG+V(tlIp4UC=bZu2sI{WLW}GB$Pkd?-}>3&c%6;`@ZB&b zCNd5;>)^lVrwg=eTpRY$mFvH2ZKuB#GKg-zd z#2E)7N=Fr}U~ymi?y#;fObW4yAe!U8>V3(ku!*3U&!1qP6rJM#_ZOE+VZ%W&AoNck zdeJOFpl|hFP=<*^O-)S?b{}*QkNQ12618*l^z2|-wZA`Bta|=b^_2XnRnm4Yu(QpR z9U544{O*vVg1H&4O`iDmt5rcPF)EHgR6@ZPU*ZoA*US<_LW98Sc_Dd*_of~~2Lc*gb<`%b~f)q`@^(Jf?i zWTz8UIFzDa^$vpH!Odf*%o8;@IM|iIACgBC3w=D!-xXO$n7{wReR5U@&YKmEqMz;Q z_xH?dVE828w9Bkd%|ul7gjFM!Fy1K#IoZ;_Wiirr@;2u3)9c1X4=$T^-InS!{4W*| z=|D67M!hd`JS8P%6@z=Cqk!I>aK9I_pTxD~lb-TOhWoU=U5PG6SVj$|qs5wCTMMTW z6@qjTJ^`NPtgN9z&R}>W!kaK-vDhAiSSC8+N!Pr=vHH4)0l^<*XT?y89BwrD1fI36%^}2?f2NkBd(~daW&PN>6Wbt>J*A6pCox zvc7DwJ$)?n9TUY+2 zZ<`>z_ds<~-U^i@zM+i;1K$1F*UWX1@>aKQ6;LXV6RyXBb{hDe+YkBKS0A1}@*~$d zM4Ddx-Tm|&=(v&?IO(z;KUQ}ybL<~21Ui(gv`a9DUv0l1ftJzzcPq*I;#el~ZOBoB ziLT(qAZlI~zVYmzvUAaN#TpZEZlc|WLavI2$ji$Qt?H8rJBl!~ibJ=ahqc(;P&JDf zDuI0QqY`?Dua_nl%;tsM5N2*+XHE_MwCl?;Qann_E^vLy2tq&LdWGE~CmjD-XVHH3a@C<4h5|b23?~l_G9) z=w&$-njtVd`RSGz30_x5M&HL*aCzBqbd;+&O-exaWl6cC(Ve*~WrS(PYs{tB(Am_; z_}JYF^2gLA_ld{#O5y0bT7)w)9uiYGK`p^KACz>bPYm?WHnSA-zbMxPV^LD)IX5@_ zgAEL*MB*+H5sU8aknWAsUAO1?#n|038S_qIB|=#j_Cm`^q2EQ42Itj6$f5Rx;1hY& z=etQ5O!xS>iRG45ia@NqI&Wh)O!yjv>M`{G0tGcMA(bO3$xjGbh%T;E(2AGhDlrQ} z^DZR#FERRtfdOYb+KUkOLW5!&vIe~+bpkLGO64u z3SPNFr2;eQl(|L%UdAiqW}#kj2npn2+`CANEm~L)x!$mvJj9fc2r`t~rxmCT&vDoy zqSd8FNrbCFB&ou|%;KiIL|9Bh>ApZg@_rh|zsBG!?cPxK6&jJZ#(*rDgo<)7)A_I_ z+J5+VkgFmLRBhJ_eiY%c-q&r_zz4eo!7VtAT_K- z$d&FPmOs70>*%Nk4vA%8F#;^GQP%7Jo8>pKm4?<=A5@QEe$IZrWw^c-2s6&x?Tm!d zN?7e~p`vI~@mKYbrjaYBM4D zd=bld+b(qPdGnkV04oZ>+<5@hAX^`wD>PG3Qd(PC4a-|4vdQ#?{3U*U@N~7PrndI` z=QhS&&aLARNHR&p%8GOOrAw^ZwEi&!T@YB`- z-_p`DaVP9_9n=gvU}$r;3>b)E7uCO2#$oJrCyzRwIg~4O9D<;%bAaH4p6*R}GmHmz z_arb1iin7e7OP5l1gfcevop+wlNNXrvjmZ`J`%5g0*c3H=Vl#+LesP~-1s;-4kt`b z{$p@Z(ajB-o6E1L$hf_ukHxyo+Z^>KP*xhWK0MyN?mXIlZ?u5fcXiI%!v7oiT#4Jn z`z|WToPqj5rJ(=Tb-YJNLbQ$hfeGW@IK_QI10+OMOG{>+u}DUyzr1oqkl(4l|7m}p zfQ}YkN4rmv*y{q5zEwYs;$r<0SDv8b-D8$m&@yBbkeC#7uU0h#=>imI)o`p&elc*$~PH!>18 zZ2b0~dg}74)`aF#djG|c z%OEOWwV%o)AUgSd3any)&7a-MhOuOUsPy?Mi0YD7%dF+~FUrfZ=PWpP%?;oM#^NP>Ze%cZqyB-C0$A zf$Gvk$`Lj^dJ!mPk=bhtI~XbMXsq4XRP;4D+Gmq_PdBpQXmMlkQ+Id5!-rlp6m$_Z z<5)ugdBWq20 zD{$A>TwLeYp~^gHfI?j$E*Ap>mfQXzfVDwH>cd)pK99@qm-t%-Qp_hQ+0?A&Tk`&$z zNfjELo*exD+%DZrsq*^KzO;c(+?;%`mB!j?POFapeJ91S-JLty%12{z2Sjp*3->LEmY3w{ls@4lS= zW%TqTGaDNtGcz}11}ArMQD$agUfxB2ay>ZY(OG6`DVsz8D4@i;GKJ;A0vxpug_ zOc9u}dA5c(n3Cn(cO(d@B=l(J=qCajK^r#Mjs;O};lq6wOxV^@dfcXN*!R)I{>^uR zA(nkJgWfxOOR9~0J7uCxZ})yIu6D@$_)%}%a?f5m1PER&Zr=v7@Ccf@c{!@XVZzSH z9xCtWN=F=Lzce47?^Tul4)dTwa=npR8m~wsgZt_)sRkK;>E9gD;J$M*_gxak*+&N3 zB6Q|6fuO3YtGm0XM!6!E?YPJOrWnIQ4~p4_E(cVqzRJW)d+N=!SN$=5J{)w{e7{-M znkwtt+23dhRlFO(Sh>soBWo596S^Zg+no?cc7)X)wwUJi-4k(zh&c$Kjbs zd5s(v7%NXl&_M8>V1UpWwmlK{XRrt!;1ohurplk3M9I{~QfBAK63^*#gygJM2;Q zT5vJP&K84#B+t^EwV9N7jzj!%@VOF6nX`pK1Ip(8Lxt!aNiy-?$W*C*6GJf4{^dTa zjz$NX*S(fa!e#bdrW?lme)Q^a?3;_P`=6_VO3}CyVoAmb_D<{ppxRIi7;t~MwDJ!` zx&aA;8M^&WH*%hhh&m494)KFDhIe&4*vlMssMsc|sJ^&znpP3`>uG%?I>crev#`g9 z+`^XwWocxO7;@f1&2jz#izCx-+|oK2j=BSQZmmWJrfDawtAZrK8@ z`WEH|DrSV{&sPK&QvA>{;p>&_-)+AyT=* za@CZLQquy9_jq~j*S_x4dm+l*|HT4iuJQ4Si->?OQ&vSqMp#%v_NBsQ2OIzW@9phB zw6x?iGlz>M?f-lqY&Ob&<+w8JBtPRdHq%5t8Gii$D{3es|N7+A7dFI`&q(b7U7 zz#Nr7;{38Sj@87EnXB$<;F~!Ry~Qc9&_aIVdbSoW$jDfNE*c^_f8>vlWmE%b#!Ke?JG#CB@esRF{^P9-kZmC=y6e0J@&izjW}IC<4-^@&of8 zb`Jr=;_tpB@eGWQk59&6un9LXDaQJG@AM2u^o=FnjdEpY%eOvr4Z1P7LC&~hTokhO z!mW9v;NdE@JRCrWPL{c#k=4Y)aDqzkJBc^@QpBx@l^VSkG!^odJm)|l){M-(FWYP~ zS(#aLRwj}U-eu-TfJug1#@XNE%jE8EHvr)P6bAsgwKYVxs2t!m7RcHbcw4GvKQxAJ zbxm^_KTXgY9Oa@FK6zAM^Vkd^v=+jY#bSv-m`-Ry#v zJfWBmxuL143D_(eUX(F6_YSbA&Ns(dF=1oieCAA)f7b-CLZ&EGedJwHPovZCp;L(O zdqFkT)qwgUC7P1#l%cr=+)(lO%?kc;+L^4_6^o1XB6uPJV&)Z+>{7!v(`Sph%;N+) zN}+H9q!-f_WMwAe8!e0@MT>lYs<-=@B6MjH?iS@3ajt?iz#-Kb6QOYRyI$m3#>#ZJ zHb7Y*>P0)}UXxpim_BMjE|`R?p-q_}=VI!!lj03Cz7EZ3b9163Kxjn0LFR;wqH%O6 zCxkl8!A9uCLb!~h|2cjwpH_VYhs-q&yxc(CrKc8cN|`h?;ucllumXVo$u;Z8^PG&l z#5WH~nWBl1V(tPQn1zPc>bngXaxgn5Xz^l8ch!Volq}Rsgm{&QsvMzRX12Do-wa^5 zd2>yKi9sTz5|XNzVhw`tF0@9rMtYQtzRQo2VT0$OP*Qdlx=*N=K1@yqt_98uc_&hAwKXT1M%q-FIG z8ZGVO-9=Vap0B98ZcSFdb7TZX`SG`4S3@727cKSU$d)l=D!PUnlR>*eUnZiJKL~$$ zvL)>H61gFl|Is5ru}~^4?T@MHAP(pD=g-uQ8%I?q+SuCK;FS@MjK`0Qvq<1Y(#v1m zK5ha9(9y=!!Emmxo#hk}B~0ms*Fq0=Dhi}p3nY@Vh$D`wk9NlWj|vp^T}EC%INr_I z(`Nw@Yrz|nYsY9((JS zRo~^I12eAz%GJ}eA7^MAs(f7qq^tpuO^84irhk6i+@ZYl_uKg{m=VX$kLxAEmPJ9^ z=AwFLe7^ex7-x0Sh6(*F$y0N5{0_wAFM(CCj$<7E11c=b55zxrz<=66{hJUMeri$$ zOe&Ttmi+^(>_yk9p<;*rq^-_i+e1OMV}5<2!R#`7o}bDUXv13=$vCHuNOueBT25Z% zVq~2o^#3h0YQ|8nFCT2^viLb&tl$dI6FL^!hDS&m#-#-WDi3z}-y@bdXaWcvB}CsF z;?Z3n_+b8k$#X;?UJT(q0^_mzh6ck1HwFzs>3GMUpMSlo!Ru>|lzbw$ot)c;#j2a0 zg;EZKpmgNRtQIv&7Zl?yt^9j>`1YgY`e71}nEvVcY!0_T&zJRhR^Daw9ft=}#i6h8 z=F_>@6)!V0A0o~bfOfrO&n~)Cke*KZ`ta}t!1JFyQ}81y#7#{ya=lmHO^>HWSXuEl zR#Y_m`CU~kOuPDmnv06+`7-LRJcx}C4JvMRwy}9PoU8xTpmos0rGwgijvqMEM0+o- zSUs0ZTNXAt^<3%m;uoQxzf9PU2#5JSUsqo$JwxrYw+N9&-Mu12V*cR$f%|O8{2wzLx#er^98eS)*Cul$%jjrMBah>oPYB z2Fdp`iG!_5FUyXnWz(l+vso5gvMg9)&tGNF=6)IC{Vw4Ap}~zJee=&?bq=sq{(gR) z9IDRaY7yJV$3dA`Z0d?ZLYwa+AAc)^krl#U#7qz=ZB|f~;7_AtRVpK|Oei#v2p_<3 zW~{U4bHDUc-)>g1bqCo-<`Gcda9xO>JzRfPFp5t;$+XkjS%gyLF;2mZfwPJ{dE=@J z_<{DXYJ{$*`;dZLKOww7~spQ*tt1Rd=`Z(SD@FIz6l?Q zw1o&!G}-dE*5Quo!29huXqA#Ip+bV1D%c*O0a<+<2fzz*MIpn!m7C~RAmHpnl5a~!{4p@Z zo{8i1Ndr$-1*KOz2f-gLL~fOPaspC8-%EfJf5_>uv|UI?c_)-Ll%DbhAp#yx?_1xL zF{?dE=oDZjBxw97DbKfs?jol19cIlYU?QTt^EeWUSuh`bq37HE z(Bf_fTuV{BeIGics#<_m6zIcqQkFtYlH-Tr@ym74KywY4iv{}%L;he%52vO=Ec)RO zdUgD^?GlB}`L^rafvP;o937=&m*2%W#z_PP`wFoHpNJ7K64a}-$N!?3C4_<2MB;T0 zu4Fbg(?in~zsIym8+yZ+NyXI(7!=^^6OZrr zhr3^gzWvM{^4?a$m3kos_sox8yZEYH{>ZOAx#s3?kudX|N2-qT1-1)-pk;A2`|OvuX3m=9=%y{g0JTenpZq&bw%vj%S{n0Mgw- zT4v|w&8GD94~t6~4h~CYrD(p(wqOSJ(5bJ5Q3jFGBjO}(SMN~k&?_WTt!rNCxViY& zyypE_gRQhEKnedv2s>p+prjR=N?I%i;(YMGsoZg+PxzN zAd77tT4s2Zy2$hD^=o$D9PZEix(&BAM7)$mC4J=eZN{qKP1Y+wxB9~HdpG=b|4+UC zk9N(AoFaZzAK0bZMy628Ri?@DcsyyxeWqXP+Kc+)f51nWzndQ#0FC@HlA#Kp z?M_|0T26$7Vs{$fI4B11yQfxM3F`8b6HnA4E)}AfkrJY4M!stt?kMGqUXEiv8he2%)jj9>sh%=reqoMBshSzx_p6Im(9L#KuVfF)&nmzyM>8#*_|eIn>w zmRB0@eMHU8a>#_6Cl>ib&F?Z=@WX=2ces2Kic}-r#e)Gn#rsD}#fvM>3sf-5J7<_u zV&|$w|p_8&f{^y?!)7hi>w^MW7=DfdeOx=9>@{m=Q<<1=r zT;kY>VFH#&{EZ+clGZgQ#cG6r3u-7_(Tia;2H=}^k)s|%^9aAmv2(O z0_=S{d&oTvpf1kN%L8PKE+#=eCTBo5deGwqkVC>Klc~j(KM*J(5Qvap_w3q$nv?X| z<$!;r8vj;+J&}38YqsJn$r5yg$?ITr#ic^6HAE!eQB1nOI@`=%`+dZ43cT*$DQEjl zWD!oFu4dhn6kz+XR}T524561YiknAiO=@EpB}r*GFV=~Rl!Lt*%LAZg&c!4acfwTy z1~vYFot+)US|~G37#qz^2Q+%qw)Mk8%Y4~aWwing^LOB~U1xRDI78fwtn5>FIUUn+DjwC2tAZ|QXXhJMR`zCQ{u&xV?(QiZT<&sh zcr;%4HeZbRgD6rWmZhPE`0$4Iuk38IsxvpPve9D$twybVwb1V z(l&-yI;e|_2aC>4(mD2aJB*PJeMQo*xD zn=Yj2Gfc*47A`02I7IS=jDN$ zaG)u)5mHxVYI`i2RW$sake=|y4U}m(ztkv6tJz{(Kfg?jGK@zMG?2s2#<{Hd+SCJ$@>`vQ&pn{SLKAXrs~p_bjxO5Lx8dW-5wWfX&|s9iQaYy#`)S~Hq3}c|(pZ7~CMHLmS08hOH=7-6 zVntOIITHj4>GC;P%(QkEl)jWMB|gj?t(V*%Kbe94Mb64jAlDx$!}jq`1Cw*pxDHd` z8=e>!vKWBgL9|l9key!e;|9vRVTyT`%z?fq+LjDfZ}({<3eQAYDTQ+GnrV4pB$P$0 z(~R~GeB-eDE0NG&iINc$(}z#UwMk{O%vrX=DJ-X)%T~RJ4lPuNFTx>cdNp#MjXB}& z?0?&m2vI|Vf@!=|%DAW?y$U6sJ=#VvlH|6zE%|A*m$iyL7Qs-D$*E+4pa%$ckXT6;Wn9WRZGz+C_zwvT30~zfRWZCT=y=WJA?#kk z+X;f3cCuz;nVos;k~|$V!vCuy8xTR^kiF?KC0%BN*MGN1@k7%dSKXQ~W$tVz93Dx7 zBFL%KCbjRbpFbk6t$z#buos&(B;6u%a&iFEl6ZE?fG!+a+xcuiaOci9iuvhpdt#k? zm);ybhph^OjIVlSWiJm;U|m=LX8-F#Ph7z7xumA{i93nXeE)axj99lIfQJD^R(^N? z!#CcD0Qy<|UCHsd1Qqq&F~qs{E$vz^Bk=&b(3rK3gtNG{ID{(CF&F(PYvZ>hXY+Wp zLx#ok<6%SjSv!kY?q6!HpBmX-b^9=bb8umT8ND01l%Hmrnx0;mlLO<(XJux#Hj{QZ zIh-neqI>j@Iv9g@9ph9mX%#bx=VkZc2Bl!${LR`o@aOkWNhv2 zgOVC#bZ-p&u4P{8>*%;l7)gWkpPBg(`QSV1&RN>Os_Pn)3){0VUo8BTln15iuX2&l zNT;SJheeMGT+$|kkNwVdm^eUj*G!ypQ!~fFDH8P06P~rUPW|%lfoQRGP>3kbsoX=u z|AuIqFK8)HnTC6yV0>DpTg4W$dD}anHbEvWdw7k< zkD@{FJ>*%L#9WlsPxyVYM!r}M?WI^9 z&;wkg1JrTNETRS(0a(In-_>D)lLXgdMO97^yCyI$oKXYRkZteYar(Da)!O-@ADz|y zSsH1}zkZFz+=5S*MKAang%HN))!Q@22eQe=iLYq#?@w(^i9fxd1c2lOPy%8qDx&{T z0z&^cC6H;D(|{f=aEsYc(7W1iPn6YD#CL35dd`#e=rPc#7hl%n@4hBXb5lio_lliX zXy%%FX>fcNgV+^J`R0go)9jLqV1_p-oj0`PD1@^9O=odDG1<-w% zT0r`Xffj`L+KNwWmYB8N@qvE06`0AGg?T))S}-K*>8~-5p+w#Eje%voZPf#O_@^o= zKkRK5)C8&L0bkSjCU|aUrv2{c>L^lL^u&h>ed7X!@zq?01%d}x{ui+S54$T4t$RDS ztvP1DAxE=hI9H1}U<^%K!y^u~oc)Zj(BD|}qM^c&r2mZ}a~$&|npMn6jah3<`3 z^vB*|#<#-51rL4w_gS;pX3nqw4*B2_khlH?tQ&jORn@87h|Wk~QU1V{NvKl1I*>Nv zG8%11WnyB&&XF%I!~y{O2OE=$Ko3%R{1_pz5umyLP;w8(xao%FV7%&9v+Rf4yhHBO*^#;(WpIL;Qz5jety`n z_4iavOf0g(&)pz#2*%-*glUk3wLuXySt2}HI9z ztl%{5I-9NE(1E5*u z3jJmJG9@|j6)ae0xG6mx075X*V|T{0@rNW`kt!vGLJ&W4-NYurzNy|8N&I0;IMg&y ziK`rKQ^Fdp!J`iIQ((gO)G2Hv5>|ao9(N&NhvO=}Zy5VP61=;{>%kuoSK{fZ>bsKI zMTmbdDuboRQmZSf5mS_qQXYdRN`_BF_Ht^%OC(cNR#?G5`qwP3 z#X&C-EtcN*mXb@3h+l`ob8G>@jomMS zRQkZ$Pi*O9(IyF9&OPrN=mX-BExu2C80>@MB5V@8_x;-UGcGj`-#9rG32C!GV6xBa zY7NAG48A|f@BLDQ=kGuILQ;zP`+qHiQJnVG}tThlC3 zGhCtLr-&4Ku!1EMV#@r3_2-m$S?x*?J!@-gz@;e|*gc{N%M`=S}ANpZpw@w)EE6)M|RxyEbL zCZj;z)oX?88}2y##!cC+?(k{+#wuKWH7^;?`}x78B1IJBN35g)R|)~$OD5D=|JK}Qss%qHy$Qz)~rBXD=pwq!ak1%sZ5V@@)P`QUL5 znk{e-X_R|)vu$O2VKzZ{a(@bU|5Z({2#6%)lgsJE1A4;d@%!H&97Y)5DeX~%Nm2>L zu5c<)*@umHDjf@xC%-`WJ4RaY!gkqEb1l}9F>kg8n+E6`A$qB$k9Bhceu6@gm|Kw7 zTbIKmORX9kamQW{W!CkyDwY08^h@;Bg04*0yx0kSu(-<-Mx~#E^rI&Xx(Au_OM2KZ zuI5sitP#sYNy5ahjzPimD%EjY$UxaSsfB*s1;c(xsKYpFU48YME*nzlwVR_tVHY2| z>-|%HMMMQE^wJ|%ze~by!!mn=-N9N)THSA&q7APaegxwIwvR`rf+7J{_#g52BT3xPfxEKNBtq~7HaLE z_>qf6JK!PkH$57$L;BV1Q64Au;jA^smJQ z28EdL3~>cZ{_u@>!VRKMgXcSjnelHEZe?y2A{W;ta=n{~?-~>-9c?Z2xbk)DBoJgm zv@QO(*o&%z@I%?H`D^ApCn)BJoM{w^iB}G@NaxFo2nuG2QZH%lnxnHX^I{pp2(1&o z+;nZ4+VEW!H#9JyWv2S+>FfLJg&VfJT2A)!VF(vrL+VUyb$AcG_u6{_bLt$9YlU@n zb^Zoiz6;P_-Q7QK+}P0Z*ObjqC=&ch2tIuXrC@i@)oQYO;QAf%gDn@H71_`Y$;`)2g%Cp$CghpMGs@xO;fO;5YmG z6fVKyY`rJN0GNw}6BD0`T>Jq3pGME+L@(o{U{7r$NLj)}vWj88e)MuxZSSJ6bGDZ||*TRWga;VAI#pAw^1>c}c#!5_?mKCSMC+ zjs%lXUFRG21U~q_ z4(~18^e;F}bUo*zcpv^JMbg=1NM9tm#hp9iOfu*NI5Ci0eR6QvH0?YSnuW`a0{bEy zqOF$O?y(q>j&dc(#QiI>lJ)MjjWt#W+?FBmf_yKJCFHY6IdTk( zI=8go)#9!B%s@}S;1!RQRAl!1z}%(%jgzvkA~-q8sh-6k@DqXuWtz!DNiY2AO_v1| zp}U2s3(opE2Cr9}A&13^g68gTH)EIRJ$0a$3?Cwx*5SAXN6DiwM2ct zPDf3OzO$!XTKoVqt(}}3;_fA^$d&$PI1Se&j}U)2t^Q)_d#^{6SmAYfF{$xe{`Mb# z?THs$ldYXQsuZaImQok{cxVH~)S1>>*%L>k%x(VD=h}4J>xPnRthA*xyTumBoX3;O zB}mHP+yQ+@{%%58IGbGVnl~S3kv1a%4PWQG_4r%#n;KQnem-97v&aAEW>*vP`c;7` zy|O)W_vP!LIkwDcc!t-9J=*C#1PB#aCf19dhY)ey71$Ba_`h(~p6%v$Kp{SSr)<@IzAqszX3cdVVVH#c(ppWW%(*@VEs-_S77 z;c23yj=xp3(Z*f*a`y9t0K*CUXYA+r0Q1|j;i;vmQCDrjJ{C4lPWg2UG54K3qjsB# zakJkl;_n~Wo@@r26(}nYK3OlZm-pK~c15dA+%kcv!$xEB^lWT2J|*T#Y2htu3Y$O3 zei79s;Cj+p>2{}{#UEWzcp9$kza85CR-J(8zB<7!igz|WHIq|zJvQfr5R30SZOXfb zg(}B7kO1Kf0TC_f%lRoP+mCAW(G3e30}RFKE3fU142y7e@}VMCVlLYr15$c>pLjP5E_SfT7B(2 zhP^SygGcYijZ5lWl}o|RpV-{HC%VY6)V;q3|DfK8tle*k)M)6fEdN=)+yCJ@OtMsP z79P_5%*qolNj=~k&CRzS8-Sv1wH>|h1~{4R&38gBAcqz z-Tj%#7UDvrVG>S~s4-k?X1~l$*|~8th6%TXe|C3kIIr`4PEsv_#b#oBVy+VZ-F?n> zxv87%$a(nPLQfQZ^Qmi|0Qv^Tp`PWC3xzm8{S zjykrIq$~6!hS5`McX+}IAN(MMzh+>*#HhR;`|O9z<;!L7r9Mp{H3=_YqsmID9q3hy zT0S}2S>%tZjsCX@wRu2M{`6`7-wjC@@hK01poC{b-(Ae?7iMl~K8n-|GW!s>*)DTk z_Vf3Ilj_%-odhAZ`IHsPx=@kz^|3#meA=OLBl{KRHGR%5({RnUT7GenyK^nx{?-TV zU;Rs;$J%AkKN`<<%f9-r$H#n-xmsW78&MRl;ailhp`2Iz(dx4-MR%^?#^$}YSlI6Bb0iI=}xu+UeLS1Z!F+Tt))ecEJjsi$mXfB zbwm7%F^Wc$e@?7T8^yrDzlZ<|$<)~_hCDo#DVXX0! zsD)AFd{d;hHvbHm(sI`aJ>?2*Ny@8TcY)T6m{#KIBh$vpdo%OG&04VJtu8ud!_jN?TtO3~;rOk}Ud!5l+-QQ|}ext6KL#g&dR=Vcl5$Res{`f9Nf5u;TOo- z2r&6NTi1)Y1)&t=-M#t5D=R_E^c5Wz-(5GY9ln)fp*yZbW;@}hu9H`{zQvlYmgSWB z(B+m5r~i|;ks2|cZybaj;U}cqgJ{!vNO;%_4fb-B#vY1S>q)tznT5&d^YQTw5#LXw z&7*Azg$Hx#v2%o5u}qk$!xkjd7eEr9)QHRwGF|zgDaZHWffmk0+a^+dQfxH8r(wEX@x;qjlYSLMzEa98uqc-?r zUyPy5_&ZK)9S8h%UB>6TWuG+qq#sp}IO`Z*Ri~8_XN8)%I_XMf@l)J1VCtqVK#RM* z$B2?l@Nx)r$?(tf{36Jcq)&{DdCBnW@m8)AE_G;Ya4OB2z z|F)=7!Bihr<`iD6c>@_f-t!>#&SNDVM#*CfsE?)O^{whFLSK}{hg>Z5%gszQD{}pcRsKe5FXZsg|3c<|9@nibyU<}+x2G#29VC7TS6EKrKB4bDJ2H!knU~<5Trp- zK#&dz>Fy4d5a})jBm@NMc#prhpZj@U|6&P?HOzO;IoG+ay+0d#_z?R;Ou)jfEwCAcCO zhvTA7gt`?g8#Rs9am(3+^ZG_II)z7)Q#)G1?7@5>VqrKbJTmer;EaLRo4|6EY?d2unzlxXDZEl<>bz@t+V*ax|}QcTUU9jEM$BFNT1=%0QB zX4*)DXbPJ`>&;RF$AbK*D>>h9i$UZf{yu7EtM^=E-o4ug?#|>ii6NVwX}yDVnQ4zE z*Nct&*!$VPYz8p)tS0mujqB^I0e~ zw4aV0agox8d zFj8oWKD;&6Z54rQ;N0vxK!p?Ih!StV>4mL3|CkGjC5Ffck?)x2Zjuc?p>acWWluQm)G+hP>tn>Zymzf)jzI@HBhk7*e9B3DG( zILS}(P{>$2)Fs8zKSTcXDQ6;v_=4PXw8Cfw$>tsk6ORt-doXu5OzJ*=j98PnW&nCa z!p7b_lqMe%rSMEm15Gxu%#g!aO66J13@3qvIERA1LVckNk;!3d3I>iYUS(#2bXx`S zl)EI4sYl0M&b?qWWF~|dzE%5a%+_`{cQZ|XtFS@qbt*Y4zri_`zf3ln4~%a_Q)X=A#uugqcF?(=q zB;pk@pTHi3&yul$BO&}EKuVRMJ^nu;CbVwQ!|XOP_p(ruH!A7k4fRv{mhrXo7O8ig zS1dsZYW6uv%x?a(U`l>Vh3oss)%P-@ug2?P=c;K%KTlB+Kus0Ju4WPUrrdDA0AIDq zA9%ZfiegSexg2pscrI3O9b#lm|5{A<0XPbQ#yywk_eS%-y#Ss6Sqf6PQ)g{P*~9C~ z$nUAA0XO`#8Unt(difCU!wuT;8zmp_zbSV=`*Qtqr9R$h)!}ZA>7z%FOifMgH|ezL{NvYmWtl4c9-wOSgi2cX}<%l8g!G zn%i0m3%yTI^W-~>SePG27&42>P_`}03!-_Tsw_;^otacf%2oObBjV1o0(Lvs8KZ`V zp^YirMa37&m4Didll8DJa>HHE`x?PrHy}4rhE-ua3YAYO@XmkxD2z|Rr=eOzm~OdT z(T37#OQql)@cbRWTUbbrKSjq<@s|=WkFBnjjaknwb3KY5BhA**~R-|~-tjzc&6gtRgj1j5r z6g3u3t}C+b;%gh122p-;dMkbpS5!!-&kaFRAB=esH{O}g|LCr=^!Ld9bUY#nlx9iJ zsDbB+RbQ+p4L6s+q+q*QM-*KCi|+VdU7szZBX1;(^bvl3gcOsh%qPEg{@Xc@{?q&3bq7x16!`4jk*0Fn@1n#S{Z> z>=5+8%0z6oyOhTk_3pw1B&EWVG<;~G@Lc8pY)5~K52oXD^cN zFu4$)s(f!5^p|&}nWVTC`E26D?43KfK9jUIAJaS~Nhm06ZSojJ%1c{XG)6U_WC@(B zONS`h81F6!rls9pn+FcYh*(vDB>m?x%sjUmn1zHsj@3qP@KUC54?Sx* z+j)Gn-92tq6;*A$!9a#Gf6_AKw9_uwlnl&l$SY~h8rj*$8vEit+@XB!t}@zHI)D(x ze9o9yX>EOq4!*rC9-(Jw=|gGh1HQzyiCT{~ zBL#THWF{38LX!~Fjr}PjGG(u8Gm|5{XQwB#y2kSag9}%Syy%PxRWEs2)lR|Ge2Vc@ zCkY$5vtt16T2pM{Cv;sEb;)h>)=cfXnha4z*qVc7m82txX$Uv|Ced)3fkQbsWEJEz zG1QgD-Jm5zq@-^!WVzD`yH|9?#7LC!zDi4n1hzlQvJtKQNhOQm%6W=DC(3U=_z+Kx z+myiq`` ztMk$Z8JcCA1^F+h?V;up(+G{(?dbk&&bon=HyJNSswR5ANmiRbi2nSndd%JbG6+Lu zXNM~`Ao{WOA?SH8j~W>?c{_a=X>Z&qc>wMY2r z2uq8<7U?CU2ARh3-CN;bhJ|&?B$;=EvZChA#s1Hyc3Itc>6~rBXX|#xu;m`8PkD4J zzkS_J;-h;g$K|BOP24PhRTR7Y@TYj9EdJro_Z7A%d_M)E5GQWj(A$qk$V^yob8;r% zb6v}QkRX40v@;6;4_RW=#rIV`!nOv?rF*XF~$^pg|BFs0-@!qeL(_1Jy=#9O|h zU|NjAclpV4C${`bwf|*r{xgnR)@CBcx!7?Gw6*E{DArZ;Fqh2Ns+}@ILcf!f=&sYz zzIXOd-`uK7T+4xaYm@_DY{Uap{T>5LsBCKA=>CFlU_s%n$#0jW%qnLWTfaSiP9K0G zd3Mk@CwqlM<*6M{gOwN$Pff0QZI7uTHcGB~E1N!6UCvLL{-!+kz#D~#`w9(z$bVD{ z@SATmmm;5J9-n7%{zwaRpATlm2qg~{h%ty7D7{a(5#S+H)ytD=5k?sD21jpPmp=DH z%G$B59c3kZc}BKn($%UHTYvsmE^$bHg;5ew!9au2cX=ng%zLf{AyH6WsP+_g)NonI z)18knT-lqEfII1f$A>E;$`n;l_#>AUg6n{Q-^3Lv$BbUH;X{mI7D8A_-Q%&`j36!* zQy~NzR5k@RjTWXF1=x7iq@_!Uu$P?>byJTGvyiWY!MKmO-`pyziiy6BL=0tjP^7fK z|MTr&16TpIxrXji0D_X1M4O|XCuNr;iZmL&&-}S7_S&8)82iXhLjms zKNg(#(`d~~4)38fzPwRDr7ZzT#ZZ(Ue;a5{kO7L$WRyC#%ncTmzA#9zu`}_l=Q?b( zf@6o+DC9uZEzH+`sF*e79-8ZrofMv;(sFBHsMWd` zU!kM#Wg)eT;Ce&~VZ~c1U{ULcgwa(7k+MaEc{lCXif3<+x*|;+I z2DhJ6Vz%iXS`#_7bptYaUEP9@vc4SmOrw6O*eO=m0E<0n5Er0NSt7Rh{HX6dffQqa z;Z>me93Oke9~YiQSs160g*Zb?aNv!C!oW2QG7 zCDQ)>J+buHA};0$MIP79^obSusx5;KM1d(byK5oHkHfqwszZWWy|)(DBW514frAX} zY{&#~=PdPwPkry-mNmak3^`m<7$~34`{*N0U`WD%L)E0-KVpzw*nH>f6%Q3&Cd_PP z8M~ejZxb&Wl}z@=z)4CJxu!fYIQraOZljA8xA&{Rj2|zs_|;^*4>u5aq0JX>7_V?* zIk=o9g;*dHu^czXC>pYxz>EwvGIe+!B8lmRysT`;XpYc8cT|0-!lY~ctln` zGd9R5(pKg2@Ylbezu78if2f{OCo3W?l|{TOo&YaN#;$H8j*@CWZ%?aQvm<`{0$pTn z;;Br9!AkJYj$YqNF(qq$<&OJezSV7^`P<3K^5bXI7pK%8KUz2v*xUQ6rpZ2#o7Jk` z3%-hF0BuvF#Rk{UFIk~&@$Aufmp>JO71B{`+#6^r5}|Sh*R%*#p`ZnfTLrmz_kSWv#(;m4km9 zBsB?<#Mhm#{_SBoQyA5<_G&?>)ys&OYw@gjV%Bo^RdjSTU|gC0kZ~(4DX|BiR)9Y= z1)wV+-_a=>92DLkz;0cul^5$8Q`eMaE+~5xy72+8^hjg08tfL9@%dZ8QaKu z;QGz}sfUb=das(yH>@rJzpKTFm<#Uiavtz=1S9gQYlIS7sP=e>m631{^X? zBBsv}4Bf#pn*i;hujnGU@rzPxLMu_B5WL#_s?UcS0~r+PHM$~%dT7w=)1WSh>u0;Q z_!0iuVSM@~R92B$NEc)-Ym1rYc{{6#!WH_bj(egDE0bL!uH(R)sn2wG*0bN`LAA_6 znGss!g7Lq*NSBzg4fwBvU!TgDNE1+RC_;qLxZBt#EkR7mXzwpy^ai_OPrw;+9HPB( z7u&U`l9LkWu&eW^X#0plYjl~;TG~uiE~}ix#QTCnwjWwEd%N<3ce{Re1ZgXt5W0ot zX~$hnSuT`u7r=)yh%OSpUK~zgLQzR3xGqy$GcnC=LTf37+EbZ|Z8)Ek9=`my7XZ9M z*gDdq71T(lSY*g8gl5=qE7ROjM`x#o`*XBI2vqk(02O@?OY}Lq1su4$cM*Z@1Ei6` zl-bN@SU~MX{AHl-5=|oy3qm_+hV2lwt5Kaj+b^bp1qG^%zU+)6oXj%DCzE%IN-1b> zzvbiXj2O>cn}(>#A&V5F70eQD%LnV^5|)T0KkRI~FC$8YFnmD!8H)?ZDso%q<0|^NFYP$gjHL0J0dz-k(u9RE65|1oFIO-j6V!^hLjwFbOVPdaME# zu4xDGEO}J#9{#vKJIKJu7lRJ?mbuO{;uzn?#~Ed2Wj1jM2tY08nVYe&uE#L$mQUkz zG({{3-)V_Xkas;Mzg^*YwsOw_< zABi*50K-W@MESb%-_@UaXL$ey=_ODH0s6Ud=Fk3AHmt|%jWbEFUcE|5iHuhOtg1$f z!4#>h{Wx&Mbjd(Im6-$UGrOeZf}ircky+rV%D4h37!b|?aHmpqqHg``2h>fu|5~#D zbLP~~P$Y|4ssgIgE!@z8msVJSg8B0aIvN5n=SL5cLMH;RhM(gmP=IShDrQ6ccH)P#2V@Bsv4w(z#e>H!zLc zBbJ{`^~1`cUFdmw@auH=%W<^415pQAm6^=MIOXTm0`*-~hp@;?D7}2Mg|ITZu)8s` zCBVXrlIh`d=Ew8|LDJG71FnaWN<3=MPL=u(5+(PkR7W`K3w0R8mI0^SSqArrSlvPT z_`v20f*%IK=Rcc~UWHwMuz;v6MdtNmiRkoGu;2E$QI4DCGUbDQ&>@vq&V{a5QLit{nZSs_aKjdiT@zTGdwnhrdv_rwqAKV z1&Ik4E!JJBoH(sAS`IZ;wfj_9yOZzmng;(IH4*&$CNJM0$g7*00>81@?e;uVK55cUb)T;s5~ftsMIr<@ff9rk=Ii z&iLgI7C__#LQJGzhii&Ilby;A{+Oo&zJ9&xPe&|-1LC3Dn3^mGX-0O+t4m5$UV}`N zgR#OVZ{ECN@zdaZ^8fuYPTZOJbzMOhw<5nDd?YOpk1?{LQW&#TQzc!t%Y2w+zc~g! zJ?(0~6U@tLZ?6J0J_Ii@uM?AYk4^{LRw$8e?HOBU$F2UhGqbdV6^iomlN0H^`uw>J;#CiNvxQr5J; z{>@j@$$^OkK;(x_ASfzK^q;iTq~8C)fJ#hBXH3;%*cSpEu#{shENf%DxmTG72@=r=+HE17=m{@ z8ZLqD$KGR{a~&=#J?^H$3h9Iz<6G@vT-)hiK@0`n@3pJ1YzM=7Co3!>3sM&%(7ol%5 zR>HinXkHr7yGC#-(I~>+bCToC3gS*bk-uib1uWiHIEYZ| zA6{Q8XZw;>QL;1C;MyhrlZW@XfAJR{8QbeWO$k@uIHMa8vEd>HdRusyvRYy5WnC5^ z2~Yo#dG0bHcdjF8lin;RKR%wuoe>p9NpoWY4=*EU=DuxS-lhIL`JF>ul(v=EG_x3(7x=^X3>*(1 zu&w5Cse{^asP0Kub=tC?zrR0_YTDV^MgQQS146{T*3-{`SqA9%i}lW{K^WKo#X?I< ztI^;+R)-j!_$2JM8bT!L1*mS=IfcXPvlV7a#`Q@$SaP?w{-fXh6A|*K?j695&b4QQ zotd{s^d^N5(VV|}bqCP7M{Ra?smT?4vZw+6=6j^IO;JRQia?#6qoYWGUvY!{j4U)` z*ud~As60l1oxP&m$wps4Qsa(3(BP<=EW3@mB=?9p`?g=qOptO=dBO?x@IG)@Z5*qAFhUR$1i|SyKDu+&z(qo!Da!TG2VUW$T&XhEeJ)P*t@WPSm)l|Ye}gLvks7g zA?Lc&9zob#yo3_IcaJ*kx#rR@ZYJM9&r)9-4rWj`!|T?7pSvjOTRVPdAn5^!Yo$sm z&adF-7n-1RmeZS!CF2-i`-;G=_irUqP5Y|A{+hkF`!#|*_i&7_`ry^o+D#6%+el4W zN$|_qNA}gV|CcuGZ-GZ8EUB*pT$TW6xOey1C_Vjwc40dO;4hWI^i4)$JUrc6-|BkH z?1{COgHy_v?^YQ@`Zl0~=2*`PgxlX;tlhKcUaUQ^R~jZrp9R&J@6~gRv*|BiAlSUk zd!698I{1@c2BHXih6Ar$bFt##SCiGuwo6HVWN#F*$`w9&UOk>_IlhW?Y!k9qJJ>n) z^WE>E^v^e1ZNEiab=4_^OGGC^j7TZ?Vi~C|ozY~T^g^`!uc|Hl!nQZnkssyj19h*(`CI z-Z0a6tDoZaDaRnp{pU;pIZ zcws-_ISIoec11O(w3Fh#5IoGjx7#o|nHs8t^YfVpWnc>(*DelVfItS2kD!c=x%_pK zxjvkjF|>`7?_Dw6-FUg25LwB__gsn&I+0czA=okAd(7j@Pr@;}@Nm(-N9}t6&AUdmZsv!{ly|+#+~ZfkPZ=K% zsq>P%i$)ron=o-ZJLC3igJ;^VRfHa@>+nq1=}Wm`%U^!`C{nX4Rm^r|Rm$UcKas8C zccNGvVrT#h1PlF3LVovc{RhNn`YKC+zkd5EZ19~XO2qQlw>MFgef9bl?`etXH}|{- z*jR1M+OgWh9}|5%ooVqEo10hKw({Mows!4{p-p`Q_pLX+FB5skbs+h5y-1fU{m9~m z%ZE^EiTJSpUIjtiM$qXl4IK!cHu~*90FP}bh~w^)x?PYfN=&%%e@&Gi<3RLMDabm~C^Ww0stkEP{5 zhs_cUw|^eYo|S?Kv)99)a#nx;My{6XVa6$Z5okHo%*J84eY;NFPV(WgPm{;4p~QuG z*D{zX9eBQ2cDl#Oc>8wE_wP-ET4tuNdgC&T)YWb3#0I~2S%sKxPcml5AW64P*K3#lkA+WiRK7Tuny=9C!s#`}xwW^3@OaHvjelGP{^n`~oJ_GK`2i`VMN- z=~@|P^n!k}seU^t1x2Waq<5_?A9AB)c=*C;ooO?qr;i#A%wAmnhFJyb>*%O~ z1h1yTX(-e2znZ)@+@d-H9>qQo~29r9) z=tvSchIcls*5cksXTW)eTo+5odq_!^QzXuhs;m860XjZ}fIw^Q)o0770)?V9$(Hve zB?~wEHx88-YqnyfGtW)sH-!Ap=!ItQr%?%IfBKyII_0Ucd4yWm#j()UKn?`eLsR$%IHl z@ze8Kly^38t3CLtt4{}!;cypd(I-*bYa&mBOQpY-v$a} z<>~Qv|B|uN2hF5k2M0a%nv>psk_15z983uOOGpnMg2ENQf@*}ByLxkJ_3H$+@rL@b zbj6nq+Eo`qo!dLo^;c z6$BCJ>YG{7)8=lpwI9hdumEz+UcV-%f>_Kzq~U)@5`j5tX560p-ky<`R%q2Ii25u2 z5#{yeo6#4wrE}5f8rw;bFMSSj`hX*{L{V3(qHV}`oj+u4qy*=B2m)x~fs8FLhrw zr?SOB`K%r57@NxE?EFv9;~iz-##7!27~`7gG-TOa#o8y?eBt&VP*o6#rgY<<6;^r+ z-tCfj@22a64A4L5>TDgQzEbuBMqGe1plPivPotl* zc<#H^`o5RVDSJPN5?h$(fyFXAFm-;4Jyp?mTf%*G?iZ3S;=BUp#ekhU0us^M>tRi| zn{NJd;&o-A5C82HVsJX8Z+Hh(il8j#>ZuD08$i!-T{TS)fb14 zpB%WlupeppCx3o7RItDLnJyM5VG-02d)wH+D%J>c%;fvLKU#5sa}OjK*eWUYtqrDP zuW4(!15F6fg`qI%>htIRecM7bA?uo^CxYfpgmu3syBU{`HTFKw{W$>fUvC&r!8mV( z7#TI)_KHA(wF<pp_P?3 zlfY$^R~_2Qqt`rWXVe5@7+7a&*v4LMS{MOeb!a}~?e3h*zIXiL)UR>){f*Rn$FA3s ziIHNQ>IaOpn^{z*9jPetK%X0xr2o|KP7!}R0ITNJlUwvtakD$X&9zYHxCpY>ofUnT zKCxEUC7!FWiMGdxX6r;W2BrmD_0~I&_QmA9T-+9#O;ApHTB04om01+H*gC&+(7}hR zH1s86rm=BoY+T}CNX+PZG($0VgGJoaOB|bAukycie=I_20z4B|7cU3#yeAaX?!fi;o*oGcd+^$cWI zKclP}T-V#pKX^3zE}fPu#~6gJulB}ZII60uPEeGyv9rr!7w|(s3Wj6-a#(Y7^9?{| zNf*B-D*AL(0RMi5iW5VRbOr^us4Z1;qo?uoj~x05qtjup{^%(GRFb9l;N&cHu3rlr zM2JpkG>(5MJ$mG)J8iHvc}>y6$t&e_xWUtQ4O?&4ILOw}6acTudTmWbWnIYeN?9RP z#M^$sRo8AKXLq*lD9tkfJd-BJw#(F!dvh*Lv)tT7_S3&AOFb70O>1T>2ODk2Ebc2R zIy;n}_To#87=?311U#sYBEmWfyN2B0Wt{#7tRJAjbZ?pmmLTJ&mF6E`NL?(){n|0} z^ZoUa!*U?mq;(szm;_L-r(x_l_^MG60-vg1ss8o1;LAY$>Yqc4ZO{$Gx)9Y0bRrl^ z7?ca|+LE*_?yj||?H*M9Y3?5-9B}?PENAqzq!8y)p0}|~ni=ST z<>q0>OJkr^L^0v?h4#TM$y}Yk12!M+JRLPDY3Y0r?o(M{vifz|qU`c$NLr7BF)3DB z4uCALQm~Bda~#*RY7;D{&DemB_wnP$0xDgpROmWEjD8woIrhrV#J}C_^$g@x1Lx@{ zVcd_czRu10tqo99!Fqan{se=k3)>Ix@1*4S*r{f6G&^@%bml!gfp9W$`O@RS|T zxA+e4`I4%RPsnDItkC4@xk0R4{{YXg+&?1*57o)RxC7uPli!87xs!||wYTPOkWK8& z9-n(I+?)Nv$HUR*6kJo@Mv`{-*FRxEtYv8Pzm}{M+zAEKUru{H-=s?3u8BF&@t3d> zJ*_z5P(wm09*y@O}I1t4pv=i3MDEfh_0W6y+w~ zgrfN3&qXeUJb%uC=y$J`?g$ZryH3v;QhHQj3kShE>Y zmTZ>*kx2u4{fYnqgl|JM-~V~{9|uLLLo(*U#dgJWn&{m|LFw*s{wH*i?`0zqXm$7n zV3nyIoCzjYY960VT@o3#wOXr1Z9MYxYewaVkbGq1an7zRuC3^^%r3a~6^f$D;l00k z5Tv=-T!)QkN-c`#+An^-tbTCjJ<<0VlMPk7?MUGt;@S;MeE$4-IL=XXzD!>yT^NWV z59q~tY<$pajCA5bNec@gq-dGySLQ9!sdM5q?(#4`Y^1o0GR8?ov@LZr!p4kc zaFU;z>UXOZ5+wGNb=)O3-?wH8jUm6HzVLa*i3ou!f03;K4KZ7qGyj%7)DrRXp~XlS zipypyO+kIYIEdL4`uP;Ed_yuis!ccw(ObDAef)^<$@WI5*^iFS?&X~J0)Lvv+AA-z z?D1L*iDjwqOdH}&*%2ANe!s}Cn#}fXy)ty`im6>pzU&`S(9;tDOyS=rR+s|RPlA$B zx|4QDTk3euRpbe>Qqc!wid>9JU6NHcmIC%X?yc>S=dvP>6rTU~0uC!9h>B@X7LUIRTO%OL_)ff}!LX zxqmXyYsI=9Ri?q+fuS``#JO|#I91Q21BWjOhc@)D%wj6_Ad`jZ#n0Mb4(oJYM~VJN z<@VPrX{XpDxqQ1JUZ)FgViJ}^^Z-C!w{W%x8c8Snae<$|M-nzA1dY>9T;I51t)P%+ z!jqb6yWn@QzT0wqPC%RPe|@UK49g!pT9 zb#Qg{MR)h3YL^Dn_@mHr93DwMBcqDI>n6#J+3ijTPt|n4ga&i+?cCe}K`r-yy{EW5BeqR18>a;>_I>H0$i_7Of9ceIRe<=wt-W= zx)5m4XW82i{!GP2be3q0yY;lGPW0^fNSd;9asV1bp}eeZ(dpNRrkKkVF<(WQ_j)_O z_`I5FmW~Rh#^=_sY4k1$ZU-FEUaPduC>q&^?CPhj+m)>ArycKZZFw-*gvfmXDb_*o zTJUDZ#l3(wSCv#Wf0~~|KxUdWGo=#qwWY!_l~qD^{c?`&V&1PbuaDh3mJ%A<6`dP| z@ese&ov^bN*ZS_TW31M);Z!W0^j-(KgG`h}*|fY7OuxG>QD$GTI8Ui8D+_}`<&nYg zAc#dGPhF%zJRTovGu2-(Ml#%^wpY(PJrpC+fW613j|DX&3WLC)XJ$eAz4h;2m=aua zVKscY2FdO}QME#e8SYW*8pfH>yLjvvQF)9#T(-?rNq5HqdmlXYSn9i26=?Wq=7$e< zKv7t(fOLXO^JGdPSQF3KjZ{J?+cAqj1er$X4d0uv1ZBaQv9(zaFKRPo%8dWHDb?${ z;|$%My=($!z}~$f9&5{U$5 z*U?OYOk{Ay2Tp6b5FIuqVZ^f8P#!scq0M>H z=hS|in3~$U``1Kb@9JgWS6=0iW519%f`Y zZ+kwV>~re!M?7m0a=Z8Zhb}+)x?7&^u!X~S4VYw*<>#13umYyP@1{W1wpRf^B%}+K z-gSAMo0msHPTtPv1jZa7=5>ftOAS5Y{& zY6%e#r2SZGv*r8z1pqYMC@-|@9<0vIeW0LVB5*q`ZFgsO@>3u)i{0c>6{_h*h~oAT zvFptD1Ff+MN#|L6VkJ$XUHa&fO&{q=|Dw$sm`f$|tJXg@ZMHWG?Cm8c$23R2s2l3} z9?ms{ym{lRnz7*h>)Tq6k}#cUwZ~#>oyTr~{rZqjoxLwLw|}Zo3z&qu(h7;!1zaxH zI{2Hdt2z$59s+~bi2RW+PYBU9i;Yc@D32H|!NKTPz_cBF_%Ov#)0~b-I-@Qk*0}Du zCetG*2pRdO5!g;l(GJDp`^zv1y4S{!p=%HSP>ryd>|U}&-F+`IXw$lDu>A^XjC{1) zT_mujQYv<*tKJt!Nnp_Add@lbt%HEA#p|nMqtj11+9gka4>|@Mbbxu@M%D`k?{6>r z7<{*#Tm3iW7=6HvfkUm=l<+BEG^5lNE8}Uu(hIYY49R_yQ7jJ(wZp2cgf19^b6od! zZC|V*H7Az%Ct)kAcZSbi?O%WY{{62YuU`on7x9kQU3DP*wBq0^BCCFPi|HlvzoeRf zsvP~_xZ6xV!#JHbHG^qQH$gxio1h>C8OKm;l(I*I=}USIV-1Ue3eXmYy6%^Hccw!t6-(x|LY;RpyUx2U`vx zU%kj7jw_m{Y~qJ@P|3NTq)2Ba$T+-T-w~UTp zdnHAU(V~EqGyOq=N2YRs?$2Q%ets~q)_chjT+v>l%WqB+HU7!r*>lr#ENZ+Qz8JjD zAB9wNDP~ak7YQDWN~@<^h2k72x<}SlgM?|ke`+}!? zdV7jZ)cN{AZh8GRs7r)|gpde2O-Pt&h>3|A6v3OVK5tm_`7=8zNy*>WHiyc;gC(7v zS&`8tNT=LxX0*~VzQRkB6YClY%&EO}TM2Oa;AgAYw|(OX1QL4cG0pbNIWa+NQGSaT z5e*{UF+V4^+?M-OZdv&q4pw|yTce2#g1b;7Q;!YbnQrgESAU(I6UatBe~w8Lz6}ingI^TLBP5fS4iH}&2 zl?~b$-0^g<7$$ynuJoyUf4Q393@|O&t+qB(-eoY-iZTf8(in;fv#|*a*5o&M14<8M zOC<>1x4Zkx2Xq%f7I|2$&~}lHmBm(U8)Y8)fnx*uKnxDsou=k_!LrJ4tY&^9+!!1}m4OoBfQ%Mnq=JX3etX z8_tEFD89ZgE~OP!%_Nxm0dOloQx?ueBzdv~6pz4N_Eb;L)y3s!{c3Dyr!10g9u#cH z^PY@HlE3;{Bwc^%52~15r3=yNf)C~02D9s1|}>>b#!9n&%b5R$5dxl=;*|;&E1R9mAF1w zF-}YOHCN^0dxyJp8(vQyXGN$Vi9N0TPYM0UM)UHCGzU$O+NL&`95(W1e;Q^qdfFI| z^P=XVjg8^cr-mR40Hil_W|7P`8@?-7oSXSVjpA16dK|sDd+gKV5cfW(s;Z`?r6Mn{ zwqhSZ=XwBIqPQqlTa%8H_j>7Me+SfhqE5#1=@Pr!Gr!k>^na@Hw_~dC>R5?L-e-pj zRNYTC&}6a(8ya|`4C~&)4u004Xmpr8ic8?|+@1M7(dxg;AYOm9F`~kuYA5Bs8S?29 z#`+L_Vd1^$FX|&>ZlyIfwK+Kz#h>d(I*W?}40PP-v!Hff{GF8YDuWSsEssJAUnXj2 zT04^%r@Dx5$wbiAeC{Lc=7TS+4Q zXToH`U6W3b&C=V!cSgj4eo3FpjKb2@)ov0ck8k5mz5SfTJ3k4$jZukc+?upXhV>h(pkpSf!Su~(2!7x&)Fpj zJzq!iXrv#w`f?_Us%e#A`};mK@b`BW#`DV_7AMCGKQp(s`Hc~ehgQoRErH=+N+Xc& z>K{g;q>DD2v57zXx&s-JhyZsO62kNDJB-(qgrkx8b1g>6pHWdY+{}da>q5_pjXjY- z4VGD9=|Ot&Z#waj5-L>rBZ7?Z9<;Gc7QoLffq4$GxpQ&2EQAf2Xc1_i!z;q`JsMtt zQ+ML`LQdXfoz}Et45WMF*UQ5}6av1)mpKatN`$f!rShyOs=@m(Ys%5+9yY?OcZCm7 zE%|~%)pGaZNHZ-#!|Ke;ngXfPnxe=^OUda`d2k$9=CG7Qgy0NwjWLGaf?$BD&zuBL zpIGe<(GWjA!IzmV7z^&pS`W;WnP?CWQhdOaxY+X4z|mBuZkh2ZR1t~wxpkFZujA{c zqun!J#OiOBizsp=PL*mj;9|8Irr+oZ9_iZxA`e{Yawdd2ZDeTA*NKRvEUt?vf$mPj zH#oVtWl0J2CKb8AUW}t*d{rWJgy#HbddGFf8&FJGwR`0>w?)!@jm~u{v%;d^=_S7z z#79mK7l)Q9FyAb-WoANFj76kLurwjkH~%Rxo#1;GaQxN;xgv3|IupT!gapgM6pEuL zci>+?0s1wt`2n0fP+a2oBcBS@-2G6(5VC25@85Gdr{Koa8^P)ku*RR00!Z10%PT_Orsb@Ls;btO zOF!k$)4jc;?(Q7m{`Od_W_N&EWHDfSiv2?@y{OwSkfEgdZp!&^W3kTuoZE>0{NQ|7 z3dG2}qDb`G7<%z&g^XLahiQddo2^H=^=dO`XvI8BPnSZD!Lsw(_)?pr&+XEqT=DP32i}vF#%!W>Y5rix9X;O1H-bu-Q#8R<{}mzKTKK^!iDzD+#>6E7?oeK zp&+k1I^=h9e}5qy-k2XT4S<{ymfI+vN!GA`djY9$=7W$lj_fl$A6`D%mxcJ;4LAJF zlf?GVrvG=F;g8EI3qr^WHHjkE&8)lqFdj%*Coa2587nEFb+h&kp=JT?`hN^oTDk27 zhKEiRKkhUeNVsjpf7-1iXg*fm#`8)00OdgblkMBGC~(I>bqSCT3MEw$XlO!w=D3~HG!QvZ#@R_9bCAF z-`ztQwyvM-r-52?x-IZBUBcF5$H(^kXtLJc7aX}sU>p8%d2H1E;2XHi>oNLe_f&~A zG&`^2fg&_?(Q5zGP+D0ah{roWYVqCpa;_BTAOXrifL8^;a4j9ivJ#2;FHW@$r+#{R za!N{7v-4~FZXmE*TMJ{Yl;dWulDs^tAZ2VyTEbm^)|`I%NrgkpY(yiS-qWWuAm4i? zwV|@o1+*MbO6|5g=@v z7FvR8Oz^yR+e}BQOHENx(ZRt1upM^8rc#0LAR&Q_o<61pXhjG!Oyh9={H*YKEu*m~ zUOSPbJie5PeFY^_k&!3t`%+Ii9T($M;Wu?zJo@$J2*`7C>RU2*w{uf?!P$uEzeM5XTrm=s`vawL5xUPUHi-l9f;gNDRp`t%bT94!RZV=Ndb z%sKd?beypn6Fc)~KT7zcdS5*UGw#r=#}Ujhf%cK2D&%}Mn{m3*TvX6d+U`(AOHGZ6 zTip5IRT=wFj1_VZ;38F7SsC=Iq#nfP?v(r7f<5KM*tbQO8a(r<(3~qXUd!t_&!gjyrPp_iL%Wch7T|tx9BicHW@%uLtq-eTS z@@g#z+h?f)QBeop=KgjtaRyA7PFvr28ePf(pJ<}}y|TFK^xZ9+X+3Hnd_JI&c~YlXLEm z?v@YsG@^a`l*Q@G6AUaPAT1<(D!&adTRmu!U7HO%=~Gb@Wq;x}OwtRK`Ig4nH4Aox z3r0GYZVf+zhjym0H|-#^V{r_lX`kEY5b_KM0>Zoj1ht|H3yYY?0I_pJ`RX4-{6C2- zD@>YMVJ{E%`P@Yu)_%suz7Yy{>NQ^JrcHh=rDtk-`hXLw*osVcry;NCf^+NqS{TG7 zoJB=#*474XZl(qW70u62Oij^$%Mb?Zj26%}Q3}?cj%J^qANZWV$DL*TX|oXVe3q@{ z{_dF6-$l2gSGVNl{r6O!*3xoOt9?65%O#M5oS(OuhABJoj-RF{GVQ>*LFw~#=n}U% z=<J+K=k_%FFeWp9=n+q8vk0vr)X^R%|coy-hJ6U(S5cqIhCN1Xjh06Cw`k z3I@VQK+T6gUYh^zYum{pAx4FOWhTyI;$|m1aZOoaRfVr8BZHPmfFGXs#{Pkr7&4W_ zL&CxSehw4e#%6sEIh3s|-`CMNFd3NDwFVaK_rnJm{OHlr0tlGjF(6-cip|!?YmV`r zW38J+foKqTfQkKsWZf+4khQfncGiavAI=W;<_bc3Xk?a)L*Z1k2*S&YV^7N5gC+U# zeI@x3)gBnNL+~1h7+<|HXs$=(cdHGrOh0GuR&v7nbU(c*^MDzIpoE})!VOL~r9u)j zL(o+V=tgQ6M~rt$1gKv$rc^XeXMkA5n5bjwB0U0xq(1&j{e^ibp zXDHwG*XKt^ML?eWh^~)1*tqZ>!~m4&yqD$=Q03?IMNr3q3~`tmOxwO<12` zRAe9~V6~~Hz8#tr67ql{Xp9&}gW-gM@q6twHX$J}1?{W|4f8235+WKj2|#ztJl+1{ zfPc_#zh3ZIr2_#Yo(fVy6^IRSex%|XCj?PqX@Vm_ld)X2_8&B#b#K!`E@#WX8sqT)!GDsWc!0ZiL^)mpDRoyjT~Y!| z^#Zv}|2Ao9=}dQd^=kZ=GApLWF{D>ThstHu#l@wcKGoOMv=r`mN_NgACJK0C@be?_ zrkQ?A_i%Kg@9xb<4QK7m1eiSt2YG6dux+06JTG>P{g50R^PRC$O-&8B;jP}h;Yixr z+5+Wepxn_y`5$Vlj0zZ*w!eQjXp-Io9^MqMtxu7I2LxvhEDal*59|3xM9(dT=YJ{p zQHV^rft6a}6xfoBF*hz|fc7de(V|79q}5wSTH4&)JU1`TGBs!uETTU?f+=SqxL0Qp z!KFIIt3p^$jaDm5fV|}==@ue11a-0(bpU%;`|RVbb-C7 zp9xq8>tL-vA|~!Nedvqinpxe{*t~N&#bXSc4S$H+-R2*(y|mJc8g}ULu<8$BWXuPM zY8F*)Q7_2C@iEQNmzF#KKCfyZLcAPG+~xm<>jIAF%AR=UXMzs`cT+Ec!~W|BiR}ik z@Hzhhe^g)sRT0x$#e0E6kZPJQz;QJjF7Gdnjw$04eZYR(eB9^w*ILNFAHzTv=l45d z(;lqji5z>2Gmx<4eLT!piR3sJ*rqqTCzY>!D;E{6FJPC^X~C5cS?jj&bB>vqC6&t| zCuMf;yqc8aG3lP3-s5g;T-&b;d(!oQ^hQ>=!rt+H<#EjiO`w-9sEcSP`kb#iG{`03 z3zpvmFTUZByomXK_|<>juSOSy6?4{=!kI37o-O5Us+{x1dWde-UB7WDRdx|9T3M46 zQ(1ZV@_4KGGDxCR6`Y}jH-db-X`xM)ll>lejyCR3 zwl1~x^~33&Npe8JS4YAv)`}zy;{(Ja6ye!Jz*y)dViOAj@^OwtCRC}|Z?CWUe`W@Q za11gU_u)Dk%HC!WQW&40XV3VPGE-7g+I`Rkzl$DqF>b&u+=HlAg+*C>99rpAJaw~sr#Yz(4pAdD6*4a{a)= zZjUR?Q#|#UhzOO`E*W`-*h89Uve!dU!6@19(Vu)uHA=CK?d{iQEQ#%`2A_y-RwT)k zfu0BfS?rlFj0$3Ej1YpFc?TGb%F)eKD;RHAFct}TtBl(W#RxkP?4|rbTkY?iW9$QC zKt~CeQ-4NHjaZ!ZJ_5CL1rZ~FG3barD;2Swa}wT$gd3zk%Ye9oEf$PuTFzeKB3GG3 zl-@>~-U;!=KB<*{$h59z{~LU+$*)@tOBZ<-6RHdC13<>QBR;H$tdkIFWdP*f_jMqQ z76Sq8v#Y1@QGKoo%s;EqFzit94biun*W~nK;7OwoQFj&A@CGu#L6@S!`37c>i_DvRV&)&a7Zcj2a;Z@$fR_g9ll& z(dUXEfw;P4{p+KIipCBO4i{#s3JMC~PE}S`R#olI(bd-0R#Cx89IHqUqT^Zd54V#n zLg=Z;8kJXfY^a4`s+ydt#Yb3J*1$I-$kU(%rqSB?%?bgmV|~`H&q$$6@1YynwXvuF zazqvb>t(@=VJ53W+`AHqi$5Om0m_HEc5gmNVhaO z6~9=jwMk>Y0@2&2m!9x#J1eVWS0Ndmc#zmT-50s6nCKqYOZ1jTS5J|lmUtdP%u0;2%v2qs!iP!o} z>sNd#@_P2Us&L@RC(7Gx@Hyk3?k8ii>I9|QC2+*x?c+$kC4Qf~8&cak zak92XO4to&Xe->ElJa1c)RBk>lv*$vl@}Ld5>>R0dd`1&!#_O2`JW^*A`Ho}{QNuc zHC4@w`ta%lFcwi%(VDSl28nOp4qW6Kh;YR z>&(l;Lml4XM-Bg${_On+P2~xx4b+Ks;$gYEPq3X9{fWDcF(I&OR@1Op(_mVf`*5OCBx`wX*-R?srbGrAPm0$nnswG zq-p;!EL%~n#06$zkTttSIoSACg+^*{B*NDKfv~fRtH=Cz<%904hz&o`h>EjDL(JZO z@CLQ8hcMzjNeawGCgblPgF{lS^V&+}`Ja=I3FgUOQVJy3gE+3#epDxvZ)f7qE zC^OvFG4K*()Ouc$knoM9hvK9Su%_wi>WA~>i0q6>B4myg0C#Ds5|A+w5#d~K04hG* zR$&w1B6{B5-s^ekN#{u zD;olNSWBD{*@3I>bR&h&jRVXrdmg;aFWQiCzk?WIIJcxe%%}Y!WMY3!eo((x{C_9Z@)16E_(UU8Ns{fYv%DU zV$bWTa&MwDt4|UQh#C>NGU(ec&>MZ1HmamRG%d!8GFltsQ0x8e0o%#^pI{rlWlsVk ztO##hx=;V^Yk`am=Y<8Ty&iU5#K&2MFYQ^qZ>H;=4iuD>xD;dteINMBd@j{J&Y_A7 z5ARITNq?&>FON@0BkXx$4}uyR z{HA9h?fI5URGR+d`!SCyk#}~}UqzpvbhyyppDokF^y9HcKqJ2O?PGCy`3yI9v3*BA zFmVoD_$9;RP};O+cd-_C33ApCaYbGp{U+b}z%q=m-%M9i!fksudGVoi$lX#adLzY7 z3EmPyuK6G_CXE3ihL%&jcU#VKKqsfaT3`8;yydNi%#@J{#JA zy@k+)jz>-f63^9!pv3J*43tT3xej=dk%I#zc3uq^mj_DjS9=8edQdWAXN@j@2SjP8 zdo>>A?MfYNb=^^?r$~Q%Gm*1 zA^8)BiO-JKao;QiAKe{4mtMa94$Ye#cg}{&_^`_Om`^`Hx5!3@-m*g^IqXUB42)qb z-DJp$_E9W|sBMO9G!S0abCajU>!&6Wm?q-%?MPcPFne=^4PSiBf%c<7+znGtpWkez z6iu`s7tJri!&arcE`bQ2BJJ!(u=9;)_WMJx0nTOJL__aN-Fy3eM2 zfYPR90fQz1x?3lZ z-mVDQsLV|%ju^vj>16NzjbqxSp{pCZxd}HSW#7KymZ}kPc_AEFl@EIBHlExzwdEu= zpMW*ugK>*3nTHVoOzDrKU$Ex=gd~z?=)RK+5P{XmMc^c}@yWuPp7Y*1W6`3qxCF++ z;V>z{j-ak6+k5SC?(Wg=KhnE1kGWpyi99k5x-8iq2}o`OU{a*T1(C zq^SYwn!0ztUariWRK_PHtbS){At^Pef22!@vGRSFxxA^$>-x;*)~;Bm+_3Q-%h>_w zO8{qBHi~TS%Nv5KBur52bion`Fm-%0)|(DMaCG$kV&nNr`+FdiV_{<}FDVi7xf8-! z?J`A9yL`IFlW%DEXRYvk|DDt7M%9b5S)j$S<_#`HUI>|AxEUD=k1+8Rhi`oK#MBs}}#z=6AzVO!0lU2IaxppB_mIsZmI z*|-u9y}A@4QR88!a{c4>CxsB34|_MbVJqsyn|WP(f}e=+rClI1Ap?xap)P z(}0F2{E|TDA7m-abf@a`$Hl4eEhByySgAxp;I&-(X8UtUcL&)cBx9)|Z5RY8JR!fJ zwn_(fTS*lb7KZWJ2*whM!_?zR0}-oa=xS4lUxH=Uu|Y8bde(pB`^Eq^x|S&v^NJ#s8zDzggB7Y4h$BkSGTR!e)BV}Ar2)L6i4xH_6Zcs@NSDry_H1&Z>Xpm z;ZS!qcF77X$0#0NUXznf-4c7$oQ#SJ3Fo$f?O7#5x97X`m)kF;VA`aly5V$k*$fZD z-amUKHEUjTk`09rU6bBc!1r4tn+>fakTS4oY~g(!S@4RP4tK|q$U@b{K?_ck_AKAr z*0Ek@)N(H}#7Fps3B|U?Fz~A|E(12F5b4ih_E8KafYqY&bMuSfW~F{iWgqUGpNJ`S z{XaRJZ4VfXYV`i_(2YA#!n;lC?Ck7(Hd9`S0J|w4z|+D)L6W&-fDTKsJ^xU=Ku=6G z4Af+V1?ZBMdwnst^eQK1g+)wJUn-vh(uCi7@cg_U*+{yG*A?iif^o>_TYW?!A1kg- z_8SjOepzjOV>aip?hL}-hC*yAaB6`n1@NsX7xxH2M=pC`DP<8Q48S5lcVwtv4I(v> zYz?fus}eDw`L>bDXPdt0d_01a^J_cj-w=~OgAHw&@00&qMldjrHhXg@1kBJx<}kc} z$Sf@Eb-31jag-SogHJ#JwpAdOHyLcMEao-Pzek)RjT--Y_$#dZ09yeley9=T134}T z^DXTqa88LPf~=uk-zp>k%?>LZDcMiVPKSYe)Z?IyE+@NQ<>1k=;a{l%Nm_{Vtbd7q zf?oI`OI>5<$Ha^sZ?U=5n?%H_b9a?@6k1I;QOW(yTfuQ~{)6>+rr~eUfSm9}&XspR z`eOdrAI)tYXYYewL$o1Ynyf{qyj6M+B*|>m9&_%apbL)J+m$xN;~L*l@h<-_d3jAm zyY}0}Cu;W3ViI_GxvIM+k#X^5Dta_I)ARE7k{Nz}VBvdW<;s_3Dlzsi>}dm_lCff7#36H{rV z^G;97Aqo@PsXNNSH3&L7RLpeb6(m7;#L-;b`hI#QmS}x8TnzCE{p|BcWMY>7$c+dn z8u8?z@Se^3eZAzP#SsW;W!8vMJ30mfLc2c{8$yBk97{^K@Y_#Kh@wRp?K3~%Mj3El zs!B}DdO{-m*vO%AZe+fr6=7f)=9Jg9ST9z=9+uAil-NXG`A>4_cpRA<3BDUiO!qTi zOuvZ151hukQA9of(AE(g(tT0%hZj9-X z0o|pw0qDC-xPvK&X4$*daA+b#1_TA?I;&6=-xU$)8NU{bPYDZ2_ow6U9iKB}9ePJ( zj;#i$#biptSiP*+N8m!N1T$>FQT{YmtklD+PO&o*Ob^#>O|#QV{_h_ZYPSja3i_6A2U-P$ zro%PC<_k0Ncas%~+gYJ70Zzxun@c%m^Q7UDHM)FW|^6r52tW#MG5Z1 z0ovkqzWCMi@(6^eJIR-06J2$Ec{35QA9hald4{E;!haT9+(-#DRE3Bor4i(UkW>(U z%mGTF$TFDB)l4P<_PbJ~wgTMSEdtd_lG?d#$9c^vYLKW&4<~pJSLio_N|edWX(;fB z3#Pq52o`H|xjMN!JIiAh$7o!9=IyB~CH19{OE$!C>)bJUKxQT)G&DuT%iYp)cY9oc z_pfhh|AN^bxOV&@{#k9miuj<*P1|m%Wvwl(9wMo3#2z^N@`gU}RW!q_oI1GTUUPaG z3?+%Ai-Loe+tkz319YL6o{KZ&JbZjQ+S*~vyLl0zhWx^aguGugA5i#HS+natWUSEj zZ)MPcT@agHg1O1`7z&~}Cl1$pZ@oo}2ktQ;4(c;M*0wJv*2Xw|-PAw;(Pwsc#Z}12 zp+umXKSlQ4qyq<9cu4mUl3^EU+Xs;-!iiYw(fJWqv{&y_u)_)OK18Fc5ufHqhF=0S zhfWAmK_=qqN|pHLPz}q=RH7{5w+jh*sH;!n$IsD7GSTA@04f2x2}pv@2${(0dFuJLn1jSzSd10;}{S7g)WUL;#I z5tKe(xeDmI|C>C9*D7*En^A-sglCjxp*9tvS``c-fn7>>zh)YBaVUgdYh%GS;lGPe z0$qRU6G~HWlKT*z5#Pt;XJNe&GEEp2sny}3Tj%u1x0qw4_1#^A>h31BQM*Ek^%EIXT7AT$@oP_z( z@$oQEWj@30xvc-#@V-NZ>3AUMSl<)1gzh_3%hC*Z>jcx!k4*O6lz(A#fXN;s*T)Jlf}H#wbTB>3m>r(v`T zR0>ZNXcRW>vGX!rmoM(;t_k>`MePj{N0yYHd!dfby5KR(!%$o_45ZX!ZPXLZ#|I7O zVuiz5JbKpoO!dz`jzxUE_I6r6Xjx9%IvgVJpO#>$g+JV4*H_a)UB3K1 zgXe4%&1fWsB)RR%NE(I>&To>fWqZLqhcmQ~{-~p!n;WLr;2fv1YCNRrEn9d#1+xLg z7MOA~hxNA;B$7!}m6!~TBe0bI^(vA*FbE?;P!XwYBZMkC5`){@+vDg}*FFz^Q`Y*h zsI_eHlDk}FO0AeudsHpXvOs=Xi&T@&lA|d0RBN*mtLDlN`FJ;6FZJZ>4qM7ga7p(U zNt^rJ2ENU7RrA@59Ay9av3?@KSzwrs1Pys`TAxYuOLJKvNKt-!qv^%NPB_)?j$oQ# z@uq0XCUuXRiF5h;OQ8XctL2u8{a2K)pFD;Uvl>uwt{|!QIbJsmpnskDR;)T~$6#5a zj9-+|H}x!WzDVkY)}v@eQ{}44rwOJU^{|gGo2_ovERM~}<5bsw#yIGBdlMYXqd1_ZVFsxSUmOI9ozFPZd_GYj7rd_k@ql4My-oBXfK#InYv=tp>H8 z8`@1}SvDbs`8X_Th}lq})ode21D?SiCVYD`0d)3KG^0~fr|&6me4Q)4mX>?ImVM#W z{0()E)G7{pN*<^B>T#^XRH}iQA^+}fe*x>10sTlFgNa7s*Z8uaKsSzFXnjC0Gz>8% zDYL$HRdQW7dHc%p6FiqS8-X8FSBk@N6&goN0?`1^4QhHw^4>ti`(x>qI7Cu^RCABf7zGZOUzmm@PM<#VXVyRcel} z5v|1~u^YKlX~I}|WRHrvbIDAp6{E9xZ?^cNV_KS86h)c{rc+i8ztrH}VNqyO}N=wFF7~PmYTBv-fk4nI^?%IWW`> z44RBPgSM}NxW6&$K3SV_%s4L66wYlao-C9r$xBVeU3QSAq4;oNF)TE;bT{7OrOS6- z^At#Hz-~rIT|EXXBoK$gHlqr(@a}|kk3xae*nuzIU0kD}x#fbOf_F+J5! z8G{ta$jG4TcFZ=q9NgVr`+(ICU0nagcQ|=C&eXh4UYqjNwMeeFZsD@VE^fjVSMHst z!mUp3U77}EeW7MWzuupR_2)IUF|pSp87Tc&OI9aj4QXqy zcHB4{7`W;)O3t!l;yEK)jCnCL`eWoPaHqXKX!U9LN1ci8399{5;|NeeYNm!?R8-W` zk|8v0PeYJT%k+mWDF$KwW4|R$UmM@tkDFXR7P!N`VzRyJ9J0cPYPRx#;9=$J3TK>} znBX$Y;8J_}@w>ZXZVscN7@R!b=q5yrfnoL2=M9E!49w`XBL^237u7xq#auEpRfLWo z2&Ophs@s~}YxhvH-m!X5NA9G4IAI#Cp86vKIhxq`!qk;{PBdYeRsJZXSWI#w5)u+) zyB3o=BjX=k({u)KYUiK*jt=p8_GGe~bRVQY4-SWGSdxW5EM6af$oiaz@%12-={s42 zM2`2JvGBF?1z6w71>XV;X(N@4c)@6{wgm&13dt>*GbtQzRGnZPNsVM=jbVd-g{FSU zj^SPWl9DI6w8?If@stcy_h80!lzhnN>T%-tm?7_|ANGb4-4JfbvxshIY9{I)_yZNb zUvw;I+vD63kSNnDpVjKY-{WNUbxfhdiW>0UqPU6z4#?UgYzp#dO7RBQsM0S0>P)m2bIV`qDoV$W?I(U6f`HbgGJ&HxYmh7416VJ?sXF8p( z`B4gAUytR0$a29b5#r>44wFQzkM=HhdsriZ%n*C?XwWv*v0iR zb}AijyyeRmkUroB)`Z5~Rv}2oL)zMTtu~56@dd#i_ukt51%*6T)87Fc%TUOSdVh%Q zV2V)rs`N`2UnCNlHB~BW(uvq4K_zK|UeTmw?lg0aZs9`weBR`{Tu6a`Bvn?M4f#Kh z=+FKB9ftAc3k<-x=ttkU%e;>K>Lq?LZq(HLva=FIpdDlYTAXEIHbSBl0$`o{VZLRv z1Lg3$yE||Jm%%G(G_#8Lh7Q-S-y@txb2yJgscTJDxS!(O6@`t8ewyUT2{O_Y(J0r%J*>#e?RbUVO!v_0vbS5J&Vz zL}CqAdVtm?9do=jGJ$p-r98Efdl*(F^+vv_Ov^2&h-M6)hV)jepPtg{>C?mOtE;LxYgN?`71nw$)YVf9VBtv+tJjH>{E$vM zLJsTMTx>}ume4?$a!ujY?qnP#Meq2+f?$tEVgXDwKB<0|ptd%%>Gv|eTM zndxVf?m{Rbl^I9<6FOqJ8Z55AjjrBWrjoN19z|D3%WfU5AW&$gq!usr1s)$roed4u z)OoslYKk7a+SDd-^P06n%860sO}F!xfNyl-8vSslLR6SS&lgI8xbO=0Qzd1|KmCQ) z^Ayj4A(5nMkecFW08qd!Ktfp(Zz;tJ+2-_xcwL zXn54kG`Joz)UL$ZE&cTIRa@++aW=DpWuh8Kog7NvPrj5b=^w-46~B)V({ywqs=ACB z6?TvlUiYI&JcCM)u5!a>yJT4rP(!LFb+$GG4f^~QKgX;2vIr#c%R0UZwP3Wc2wxM> z8z1sE*h+Ym7+)K%aTUl0J9z|A|GCdHbu=GLr-_A8;r4dF=4Fp!-V+LQdAg698nP;p zRchV3C@+}K-3v<5qE8+*4D{F#^*&$P~I9@Sb*a3>O0QJs>P`UytOoaFDB38Md4SK1{+R>kshRKLd7f z)zN!I?*_Zfaze2hyo*<8*jic(+91ijY>I{Zx!EcMYWy6#FNcls|6bmIn)2jCq}92% zhI^wU4KJ6WBjfh9v_C{3%5|FIsPs?qg?U&gRGeY4`uTk?r3zMk_%U-L`s*ia)8MCGQZr z{JP3hV}03j17yU6`UBb7*_k&#=s^#l5t(@CDwLvhM6VjMOR`)iMw$~X^quH&pv~|2 zq$EW{m_(>LoZ^||XJ87FlOypCRowpOLXe!CK38CGBbJVo^f5#>Xe@tHCt-Y=?5pTfFl@aKlk$e@T#URFb47sF#%M)w;LOjHdmy+J@W zdcDo-hvAvPRe`Dx!tGflk$j z`k{(pSPsQlJt*j%nZs%as_~nGG0NFC`7|+9>Tr(uii#OE255H>=E~#-pgi zeYw@u&sD6Snmi7D3=dn#8D&fs0s80+jX{Pr2MQBQiChwJ#FNA5$zTotk;6##;-Y1Fdio4N>luPB zQL}2?Q$h9H$pUrq;-q-!;=V)`n6J5%s9z<|(Q6WlG)kpKMQ)l$#R*%k9@JFeb z({%5~a*x8?+v>+G%MkRxo)>PvNQw?WxaMR_mmn~pH05E$>XevmQ&QljqPY0&i_np- z7Nm0?#*lZ+-rweLGSpJR&KCLO(RQbl3-uCz#AXhUW=rNs4hi;Pfk}i;=lQKr;?pRz zHxG5P_(Vs?{C&rz&WKty9&BIx1=;2eMR&xe;@IBp1$ZuRZ8tPwwml7D`R5I_;z+nM zatXY=z-bBLn`HF{aFWA!4s(a^8JB z{WspCL;8YUtJnGdqNAh#E6%JZRtiXo5u5x2gXW(v&E@4E?s=HKNPb#uOs^WHf1Ps- zXitf9PhQ`cSnVBOpBWE9cv)UF6nOIzYrbN37_|C-Pn5kWv;7?3@VG;l(8)#5bgzXA z7lV-~%ptH^sB|BO;`{n}5tRjR1m5`5lAxeB{MvtF2oC*!(W2^$$2mm#Z?2QAr=||n zEmrHf!Kyf-1^4Tavw_~r=j^90zM4X!=3`RQOwS|vB2r%Kf|8P(b4&)#7cKSqssXGn3Y~FtgGKHC&LBAKZ%~hxJ{=cvai?k(^OnD8vrlmUwtcBed|%} z)oz_W{$4cH`u;k8!H0dpC&Kz=g!O&DHGVH~lf=^?UFq*LmOLz&;{zk@89+w9)h+< z&8DVWF?WzlI1`Ct*GE@_)|Y$Bm7nPOZwN=>Vmuik#6-lov7xTt<#!H(T*AUl=(?|r zaas@i6F)4^hz$ZzpsbA5c&@3z|Dq5j($rzt1o{Bw^)7?#Mpis;{J1$y30Lpd={N76o^d~tT*^oI8$J(tSZ#-?~E8uj8QuA-9Ap5m41GRgqXUq z4;i2utVwXC?k5Er1FM-D0}k;^pCclxo*0Kd>ko)i>N#m5B26GT{F1Y)_bz3W#p?I*iqY;EH{m#a?t!M?F zmhw10742h!NM_Q&A05Jl5=|L5pv=5s!ecZrx8qoaAB2is5od|=bS&@KgOXA z6$gXt6PUF8vslw7NPW^N*oo{(EXB-nyykjO*Kv$o4?`Wt2o;`1h4q>OQZ7MNUlT)h z`y=5VjsE16R5(r98b`2!iIip-5<~M&=1nltleH#R1=nBnYdF82Uj?qjKkhzqBr(<1 zicty(djsk9lMCJyjbTKcjrv5^EB|Ee#;YAstT!MpB-^dtdzHRufS~n$BvHlM#to>;E%Xie)3+w4ko_KEUTn(~L}E?uyeFetnN=Z^>q`(Hl!(GZ==*N#{eovNPVjvEEUm$B8qxj#? z@qbtxtGplRMieb6c~zdqxh;o5_p5@mR<1Otc-!qu2bqAkFECIs_U4gA|AzX3KGQQ6 z(=PM+`<89<=`@@7Vfa|H$%G8nzmMnt{##op>c9ZgLBrm9clQ-*rLKHY>901fk?mdu zd+Y7vM~ z8_-Mj;D(C5G6bt2B4XQP0l;O-Z#S)uh`d6}m98tWJaI9y0=nbBL}<-SCs;RDdrqZF z(GYp>H5vP%p<%Xo|J;^c5zDnobpD~mSW=oa=FUpBxX;p@gAt&2B`E){bK3xPGRv7d%LmvWRi0mX!1 zBDA|$4+6gHSCds5YoVV=sR0arvHJI3%O5slO{qD5E8nDZa45nu3Jj{gm@Rk_9TPLq z^A6+)a_Z$N!-Yoneoc)O6%{M+a$WnW#Gy?L(PhYKmB0&iQ#ToV58n=`p|m_9V7QbE z5)~o-m`nZGl!L_0d*!-bK6I8TMJb{D1-hcSq-jc{t0@$snWynhXteU zP*a%ZFs5v7SlA$+wV5H4)gIEYglUgt=u<46{$6iSpYKgsM9ARLbx~LCuSJdoGIYLg(&^e5ma zAH`-{{@e8`6q2e2P%@v|J}Dlks`{|xo5Wd>}1lXPD0ma53 zab2W8$e!%g_1Uk_%o)TMr>l>OH%DFyU(FGb;L^P!jsF)=_!|xXs}0peykn}5h;hmR zR>jcfXfG0R>!cLzwj<>nvHiSA`7^!qT*fxLV7x%#&KKF#HXTf8gOo`q4FL>4q5G+$ z4AzvVgzrN4KMK}H#4*=NN=i1q`}IgZ*Nk}m<_5U-RDSUKxemDB{-~G*17#J?FV5#) zW#*c1R|aVrMKQGHkR~q~-85M^qqwQ)*Zh5Y{$OZEXhin$NH;a8lQm16n~=8Xz_^9s zv;*BLvlrVbjI?S@!7my!Ame#?dA*cA>C}O3_eXJA7Px>ksCpm885k-jM-CSF z?saALS!*I{8IjfdTZ&-pI-{(8d&_)bT=oN^NXoc_)Rm|qusZbqXTms^XnQ8bXEJ5H zw3^SSdox>?!Xtv9{}@PM-jN_>=bi*!Zc9oQv)iGjyfJc5X3CnYKY!-r453x%b1S@~w)r7Ive}BXzLo2(A(seE) zsuc?oH!B&Crl%QC>-1bz<>lYROIJSI4Gr!Y9yEjDQ6nw#gsZ<9>TxtF^5ds`uK13S zh-f0&0Ln8i-hqd)C9Uf9eH9_xLBeQ$=S<{1x+xRBVDC0_a31z?!d0D~x0O&#tjBri z0Y4MO=>e1}Z|G^geR6k%NssIg-_=X}1b?arx==|NL}v;!;fkcj68V+XPmGg1=%-G| zppNz85vN;om#Mq&fOTpIJ=-WWiWvLF$i(}0RbuQl4qB05lm{d=?H5{>f$G-MCDGj^g0Z1!wjAZe zaUtKjvG_*`pAx%5TPe)&l3)BFQd55Vd_ecpq^xOp;;8Z_s%Sk`GC^7h-D=xf7F4#% zTfXR_?gOMxxbj(|hB=cg3SM0)U#Zk^8WBvb}0w+LlNbY zl@qfgQkZ9nBn*s+B!$K_Xb2O>pY9T?etBXPQXp!ni1OyCccr`;uonfizxD^!ohu`e zKwEisaY~I!PYqsp z2t4CNuz%}j!~Iux{eQ)ZR3A}=O58Zg;B>R}B`=8BYF2O`H_` z`q4TA8(Qw}wwI2Mc7H8UhIg;2Zz;{&*c^PRArFWN{{$%YMlW8Fzk9%n)q1fOo*o=b z5#cK24Wi_ExVep%XMz2X;1LS-GWa!F^DazI2C(pZUEOlM>hWsNxOkOYQf#H$a-&_Z zZG+a9yL-Txn?I}hA27lfkMyQmUg4NDjNM;s=Q^A5wvF$%=dC>23-=@Q_=-aXhilomT=`96f7k`~o6D z7X9wcuSOW}NphFeQ%bT&Be50nlCQf(-z`HGy=sirF)+}K{LwS=Ju?lB;>S9l^+>Gv z#l4Cjf2se|+~7lVgV)NQfg_AEGo21=|GEo&SjV9h%$~$e5Wre@g~&kJR~{0@8T3@L zORPu|Z}S_jn0U-n$iL!}osYlrb6lt@+ggS7nG3)gXphSp_bT!p8R+y%}hy|3|aHUv+^$=i64LfjhTf0q2}w> z+mwDw#TSb~xr(16uukPj^C#3ZYfAs!U;TUFbaL9P&q_;6Z-9?o`{X0xYvYR9^9KzDDmEoab!OWwdJI6HCV{U2$ zlGvC79=_DGsFlzc(nx)}j&UeE_^6u59sZ1lR6hDU2gCXy|NB3TZ;syqVkw}3asl$O zP$`M@os-eAPuD@gyacIH=7M^a%B3Hm^m@ zuf;q7*Su5q6LEH88I#_>pPdwW<{Tz`O9Xj*fU=@!QH^`S2&Yu1@FMQ=93s ztwuvURN8C>#hKIVD>M&753iL|u&&?E2_rxfHF^?evCbc_(4_^-Ba>Y|8#eThK*C@r z37?r*n7JM(zAbN_oLZDj5`rvyGSU7BBgH6c8DU47!QPH#rVYhIX~jYoOgj~5Y`8Y` zDm<8)ard}>G15zdqQ^lXn@@luHB3$6M0U(FVqu3Dd2lHpK4XuMBB>BzJ$+C&I(NPs z-fZ`Ce~;3c7KU<;T+b#V+l~u2iE`v`K1LSS?C+L(C!9k5Lcx>q@Ku%Jb^WndxybVI z^iq4aF5guns9?Mpuzvl11js6a?U7<}< zX@Bi6-pBD|?TTGH$`lRHOc9&=@Qj?Co?nWAAZ<} zezjtTdcL-nE5em@V&*XEo0F2u>1gIuXQ0F!DB~UN?eR+kK7MpHUKh*Wrq^cERAb^G z*^{Rl#C=`L01N(pz$TIt$}Zo<(;foS;|rbljPAK{EgZNNxpB>^F{panmZ01CQ_Irl9U=aVts)uootqcu}uuU6q$dkN3XIk%BTP0ZR;C7MMmrt zwd@Mt3N%Ge7H1lnb#LDW?O3Bx+PPfOs^(~l%qv96=c{aC zT3RpE0oWZaD^TRxfp>2xLqz1Pw${^T_eW;=i$*{kSlpcyFsN`cf{ZYqzt4I9>YppE zF8b+ct-9-Gjiu7EYZ`a1y!nSOmuy}Y-zLyGw90C&zZ5l^(xiQyHKx4$zIRh~N13<{ z%`ea0+i|VTZ(qH*cw&EfmN%i*(8s2Ce7B&zNvIzUFW-;4=!M$W9pQ!H;&S8aa>GG1 zeePxs7fK^eq#(JLj7o=`7Fs~uS+4w<4}zfC;Ck)qdc&!uc_#ZSkR|oyD@g-#>J?;u z0u80`Jt6{YE+2YD#=B_yn#TOHGHc3|bC`8?c)dotWS&W8v;41PmePFc$bs&minB{B z#XbZTHWdzBxh)Rq=z;G2?~K;_ZJ+LbMk_cv>fX00PYrR$>N|N*j$V!sHZjOFl8p5P z`J`qbWfPglbFujPcCw9|#ECCoVhyZ^BvIA>W*J{38|kj*nLdlD9Aq^)_|cFr}kcYXb}=NG+d@rq3y z(-V@ee_BK)V%{FPExE6C{hZHNyB)2UNIwqdIhPjgWn3JRkvHcGCnlP3woDJn@ za6$h)ckp!i>m;ZUWi*;;Ua5CJOdEncZ+9qJ<$TvTd)fF#+@gpN{>hS48#IAK@-SePtHrLA3unBppj>Ltl1K( zNWMW?6SrZ4C-9co(fNm(nLHPxaoNm?wxcS6RLyE1-2uA%4y|#H^KhJA4xY|0Y511} zh>SDe411p>2XnHFq=ciaeq0;`arF8|AiQQZWytn;74y}rv8~c4Oy}IW4W)~TQ5NF( z9CB6S_X;k9{Q_k^N$b_Hzdj4lT!~uNP}QmS98`$_U9M{fBi_+V2{jktfB@dzv0>5L zcEknBz3bWHj8Et8<1J;@d#0>!u#whUu5{HHHW;KhBU|X42s$yjkaH_`z81|;J!3(N z>^P0v>g2dcnbi-iOf1(zdC6tD!ft{&WKdY|6rFd7gQ=`Q97v0TJzimwY|y~+{i9bowyyZg!SXJ+ zO6J}yyR#~eNDKu|6jF?aaFQzz>^BPe9iE&w_Vll(&c*0RMujcxv+-9lUj-HKxk{cQ z3X<|`@nVl+c*aR@;TRtyOrP&axlW&b|C}E2#flhW#7KlyuLl|RhcTFMK5|jZPU-wi zFcg(}P|xyHFe6n-J0oTj-4}b%D@)Y}xu&G2l(EG+F)ITQ z-jQV2UkS5%O3CAMk`C!vuQjn zU#t8pKuy;oG&eU}A1)n4cq$SnJT+x6(r#>_+6RMe07H;ClfKpb=Xww9C9;|;(#~u&WZU8gFO-4!If%?9Vb_aUSz!&l5?2(H2axoF0@`J8blAIJPZfnU8 zB@-*r_?dt2ICbxZgTC~mhL)C_*@d{U1D8z?VOxX+eS3a6*TL_;k6j3*0f)^J$~!EzN`Yogvu}MEMp|I*^=YJ z8U*(C`Mu(9)94KOM*Xzn1I4mKT+SwK8Yxn%d+#Pcxpi7#9C*JS?`i`%OTjM6>t^!} zTXUAKz|ipt#_Xprlq2qC1JLpVnoE;h^vB*Ts%#kuwvaQ8(a_PlGKTl&o*@upXGFwJ z=w}LrW7^vc8K8X04ws&?3bVS{m8^dB9;^F@5lch(V<}cEP9C9-&??bagaI_ovR$Wi z#$!WtM*WzY@-m`d3|G$(Dsl@O*N$b8V8{eMh(fl%wbzlAAz0L7^^NIAN_1LIq?(=o zd}yWbkmo*MyXM-CP_k()w3rN)6lsvyU4-Ht9IzhECy;3ug9{c+lG*=!ule$2|MmHv zsb?LhfDc$<#-iII7#Tasc4ls61+t9o{r$LRVEQBB{Se1|#adk>+-jY1W!e(P|2sns zkf$!OJgz#ED1wdul?r#5^yanxXD0-WQ%U$6{ot2=Nn*8zwTw?0Qqjzz9t3h;GsjM; z+6KDsi4v_UbxgKqE^A*+4PKWZ*vY}WE({m!B-XcU()|-~KsLnp8;MhvFXFwf#U7Y- z?5Q`&?0CuX>+{L{+}ruNC4JO_*Sljf6kse{_WUh}N#V>_Rp z;H0x!{*h~MWUYf^t^B8{fz8d0Py(s4jYc_l`GSfv`PUle5*327 zD_=QxapvRyJwas1Xr2jjtjAj=G*_EA*xrns*X%eRQw)_py{s?r(5IrpwnoV+s5 z-I9ZQhi1LEn3u7B8KSZpdvT(=`4*dGHo`XxvNPNj%fHmc@DiI0?7njUj*2b`F9|OZ z*ajD?MgSkqS$Y`LkCFs~icO(c_9RV`U-+oRr!G4|K8Hzu7`s5s7!B}whWeGszO%sY zILKU&7_Z(->PRZ8IB)bg9LKM|t|42AHRB65L=VMfqDxEYEg2HxX!>{?Z|;-NoUr7d zNCw;50dEI3e#7Ix$jba8$}C0pEZ2-6m{j?5qW(?;uDXN1FDbgOBT-J#T4%?PlqfdT zl~D=|e?{KYZCWu~V_EN?iv0$MS6Gnzz2AeykqRAO@Ow2W-_a0GPs03$eD}VuAZqZo zp;U9_Cb{2&GBf?+YE27&R+I}fz8EB&;T&34@{@7tto2tOUIwLv<>7e-kUrUuiR?@P z`f@_At&C1F@kTKrc2nIbTobhVAK!1o5DM2cS4f6v!x`6 zpTpI|jD6S4R1-HYXDL^pvlxRHK*4Y>Mq~EMcw^0R@lBk9v|E*lOUwQEpF0`FG&C8o zz@2O^)0=M~{y88Fn0`Vnck>HuE=E;BC}g3is6@(QR(uWLD6X7FM>A{`Zfsp0R)g=E zY5Kl(|Fi0K%nD%4GD}ksiRDp^{#@^mW!Z>s)B`UCT#4f={!{ABCtq#p!%0y@LA{?e zWYT&vSw=48V7XcFJo};M;$+sds|B~Wi6%ThRg%7{yy??A4CFzdDJ0WgmDU+m9Ta5N zz=3V!M&N?TL%8U~wX@UN|N4)#sHXsL@t?CCmESgdaRH{LD@vocGP-wl?Mj_0Xr~2^>eik(p2?s8@>?m~lE4zeSGQ)$2HQnJ!3Coq9v~h8jTCWHjp?Md-sQ&# zP_)1nEzZ^BuH8w;xX)5$XB6DJJACv3ycP|b27jG5MH2zX;SD(WEib4ST{`)Dm=-3r@QgFZ_OM)sbIPYme= zzCN-Tk4A3N417J@G^U_+Aq>J}1rs6{N1i1mlt#TpIMySP;6zFGv0rFANASe$@1xyA zQ6ZTAOsR^pKlC2!4YoSFTP#?qY_r&Q>ibgmY|&baR}V5f27{4t_HD{xh`Pb^wDD}1 zLA7EB&NLB%m3A8Ff}reh`p7eIDJQs_wE2mIiO1WArA1hf@B6uxSFy|lNRpf(;RD9R zEQY76@4vAMv(g}FObsF*YxDLdemaL#&M74$2txFUwp)HSDg1UBd;X~n=BS@J_}(_uMg68Ef{v2B^>&3_`slE&^MIe%-qh&4f*y^)Kd)B$2syRS zc%g_>XZn-l(bD4dwBx4^Z58}dWyGVhKf72o3IL|oD}2Gu&!3ME+{No@j%O0|IpJ}^ zlBZxb7;ew?~WHlp;G31J! zW}=)%nhSx@orHv>v)O>HzWOo6i}s|Sz=SLCLXp88F_SB4sItakDdg$9q^U76q)lo6 zsj=NRSKyS=qOmw*-@~9utZWG~X1yjLM;i=5unXZj(y-9^oO$x$>C)wz%QcUCz1lJs zen8Pt6i+SP)}eL}!8S=;RZkK-tpgo1Z^DfehZcoVvsWU~^d+CW*C3pd9=VSG`|p>C z$?$cRr3<>`Mt1C<7%DjVm7;>n`=AIeEp*R{yK>GDdEyP=q-|(fh+;#@(|g<8D9kC@ zC|PB_3&J-HPzZ*Q>!C67ec~_dBP;bJ^s&p^S*^_CKcQ=m_8O;(DOT+Bb^Fl{RJ#Z# zhE zgw3jTVaH6z3JnVFq+;j}LM8Oz(=|=Zr&CRYXNU}NJ!Y<}qoEvnPFi^S90V7{nC2OV znY(xcG~!|k@8QtAyaRQ#g!Ej@<5dJ4?OF?nJslRBf-*Exw;mw{SL&q{1S+q^Xh9Uz zIZa?DuO#RX%_Egq$W-qG6NpgNpssiiW3 z!a0HK3?@j)Y{uUOV2_HI?gu@S6K@7Ik6K;rr7+cHm0dTQ?T)-WEUS4G^DbTslb%ny z@2!ORuQ4>Gzqy>hC+Ips!4K^Q8nN2jw;}Dv7;fwN3LQaPo^UoA zk_mGT*WrSe-H*egBMJzl&qB#paK!jE|9-o%eYJKm0%zI7SjwQq2ci-L-cke}&i@?5 zhu-{Sd>gu7+TMErB?N?T9f;l(A?4iM6S$sEf8bneuFcIw7LWwq8Gt#{^m!~~!1AtU zAJ{DkZZ=s$Lqlt==6j?zn$7@%Fg)OA^~Je1pMzz_)`qZn6o>>x!zUZHQ$GeHe>pr< zTmUGg+s4(CE_*27A>n13Y*MiQcZA2*dV* z!1ZxlPqv8M0|OSn?=d*;tQ|2Q?dr{5@LsL_D91=SSq$A&?epoKBr=Be?5mknn!xcB zIPC03#~QNuhZqY9?JKDBPT`<_Cd)u4PiTH2+&N`Mr$>}O16B-Feh@|vn=N)Q$!@Pw ztGXiWH?}3_4Hn~)b09KQjeoq^ zJ-IrnQ6#B}Xr&v5oW-)1=^p>X#|#=X$H5fN)?KWcZ_OSnqI_*&Xc*AOI~t>Z zmBH#cEFJKOivt!N=B@mT^uhd#u^5XI_S6tCd3FEp`0UOn<^y}#Um!Kpyw>5*3i>t} zSdnR2fsN3SAYGl>q+R0&>+#=1N`E&h00_HI!SiQ_KV_eL&}zeQ_md?i8(Op(EO}V4 zOU=CYFL}f7X`RouRjW+ocvQbZNT)TqRfX-=dM`{bITdw%}1s;>B zln2nO+u#i5|6{@SwkY$;{!u5=$X62HZ4kG@F%uXNpyRm~zU|8~FfhPMJ^a-1v6A>L zuyn+mf$GT_Y;`JsiK*uWY~4qTjfB)8z$b>~dDU6)S}uLP&0jSt#PZ~u-3i$z13RMg ztf-4IlhxpO;0IG8)4i4(*ohlY=Wt7uW8H z;y=Fu9#l?pB}wU%7*)#EIs`l|Wek{D*uXv-W8L6z9?7CNyVXZ`CcVr=*%$w60Wwxk z>-zCmG}KXFY8N)~>aVctVw4?OU);jkup=8)deCLJHoE(9?B&Bt_e@U?YI3KIk*78^ zoBImIT(o;*q0A{pE^5SmLIjOmIJBr-d38^Ep=K`R$uOls(yYmaSL4Exo#sI7bBuf< zt<~4ftt9S+APV18fh|(h%d+?>i94*GgR;d7e;s|F{RtVFAaQ^9IS{MYTsFPoyiX86 z;Se~9!J{LN)>kpF#SS_=*w6o1_Ng!I1m71`6#ffbGHo_qelrTZ zxAJ-zWiq-|&`8dfiOAZkp)9@*guBPy_HN>;%K;@juVZiLZ5b0r%v-NMV4RdJ)oD!Hxt?j5t~k6ZB+ z>{}HSGxL9?Q4MYQ-`%cHJ3(*6DmRP5quF@2GL3`>CKbZ`n46E|WVOYeY;h6S?{oN5 zW_8jR_OgZg{aK?RC!ZN0!ES>q#-Sp#%E6bo-Oth@pFuuJ)&Hzb)kUP9&z56cotnko zm_v)A7e)2eXZr;SV<5H&Cbs@qmXr}OGJ3iz=tr4UZDVH@7QP1=ynW^ddP&L1!F;c6 z4vgY6?)}DU%ndseQSg~t`hh=TS4&t-?oZ8}lsm9d7{lT}1BDM~RUubYuf`00t?%h- zLdeX?%f}gSR0?zr`k&sKVGW0fJt)goQF%Ez;O6e!9VBUVaL+C|plk|TujnNoc*nl8w|CR8TX&tL?Itj)QqtH1!4NHU;$uMaS|nzq2|Y!;iG$Bx8Ed9V_;6Msi*_Utg| z&Hp_^D*whyEwr$Z$>qSk?Ed_&8RFcRIA6v&OPO{&kwhuMy_bS35NMC06g9SCmJ*gR z{QlP7@sOwTHIvjjHGSaQ<)hv{iTEBOGCyVWP6LJ@Y@hVUS@WX`!0@~zBK%`12?sMfH=VEp_x<~L%cx<>;*4QY zA$4Jq!bG=)1laJaKq+zK$Ff|AD0+qFv!4x*Un1c%IYh%M?Mcbl^gnTFx^2=*aHq_F z?!S6HLDU>t8AZ$V+ANaE)d=Sju^PP`^jZ+msmcTIU-%;5)k4n~3l zE9H-RDlqD-$#zAAsY3Tm7vN-}%3c`lob>`F!6K>h^f3cLWvvw+GkEb!@PucWbvH{C zd}F0{U^^hNt4TvwZp5a}t7hSx(w+Hy*JJc=b#$Pp#(ECnra0Z#C{4A?dxYJ3V(biF zM@1~bM!lQHYY_A;WP()* zBs#t5ml+HRKXFtB*E#lqCU6Ep*WzoUb<&JMje^+*PVo_}BP{X7Q@MMYXSIJUO8~_? z9WpAq8sbSr1t?|G{h0vcXH7Fe$S%y-_4;gopy`XIQ`kq@C}ey%M5h*y4uu!lx>x0J zr!L2dbe1~%q7*3EA;%p^{P7-X120cqyrqOAq`(}bjdD~d5vN+L+8_zfZ2MN10H5fZJjnn9OEmaU!jr{KV>O#Iz-h;9sS;-R@Z zXJJXSS%Z+iB_!bCnx{9VNitm0iYiv4U0R$e!JvCHEW6AE*+OQ&Zsn@`Z_E2yt41#dWXr zi_6M9fjOZ2$pFB@+@9r&Y`6)W>Dh#z0>aTsC3}rOgAEY0cU|{$INqjNGKm?=qe{%3;d9mOQhZVR@NjzL!uvFT;{KrM|cybfSNeW+x!qs{*iYf^uZ3_wupApu7 z+*P%!XBgnj4tWXfI2n%i{wk*;ke^6YLtak)o~;DNRetX+;QPbX?-~eVb3V=x^!i=XJahq;^zK5lvGAyD*LzhU9Sm&SE{7G z{`dPkCJ%`MJe(oo!Xk?Kdd|rip<|FhSrF^n!Rd$xP18lZWbyieFjQhTVo1`Bq|ed~>o5vsIpYh@oTUn&iU zANVbPFhI@|MyZ4=!nlj(wQqayY#2MKrN7M6TzV3 zYIky;nQ8Z#FMmN?i@@{MioAdBi9r=)Cu=ku<{5}RV1pltRkwS5(jAHVQ|RPLlO5f^ zOOjBf11CLxU9=o1-IS@Xl-|r1#J-P-;e6-2DRA{@v9!ffqilXGjej|9XLpEPfb)VO z0MJ{1p%m0EA57y&+m0{;Ed!Icuc6)M#iib(jwcv+3zIAokmTI_u2PPm^zT&7=o^>{{dvmv8Q3&`pIy z30d=C)n?HgBvm6+NO>kiq{o?XRPsk&9;m)ags<9v__6rcH+}k=(efqAnBkyv7)s_m zBTg(V~9Wnh^lok<2`Z(Pvf!XzScfKY%&qAJVa!?J} zBqO%@A}F+Rbio(vvLbfQp=wnd=tBb^t;@#47^r(S71=k5jVj@TD$PEBfk?9}&36VE z_mQX-%Z#9B9f)v5^>##?(CMpwT@ z$d9taCkJoL`yZJPbeZ{L;inIN9kgv#BaptOd?8sVD)=xx0zeOZ1sCY)jAIK6gR|eN z>wU%@zM;X&(7H;ez2`r^`@28fX3S`Fu@72G7yC1h*r3cI2S)!MeeV5cy?tw$a zRA>txHwVQ^!DR8kv>+uV1q2wu(iDD|>Tj*Op0rg?Cbh+-AKup6rmRV7Jhjzb6KX`P z+W$vive`hh@fn+$VbDccaB*5ukU6|4>*y;b$r*b7BS|5u|JuhM-1OhVy)!sorG(v| zERhF;E}u3~Z^KnoRee5Qb&b{!WAymhG_&!c^dTz+vSmWsZp~)I!^u^hn8=n zzL1UZu^(Kqvu{8%L@8bQ?B2}rTGb1=o6T<{tA1Ux@|iZ&=|xevf^@=+xlkB;w=9(r zBXlZ~rO^x;HYJ(j<)6cm_DeqN}$Wpo?6>^@$rj)I| zPM%)>clP*WP7|H+HBE$7)5?z3DrTdCl9Hzc+kP9PW9=8{u`N0nq4DxE)GK@h8BNt9 zh*Dn9GoYdrKDy-cEj|y==?W)GOgBIUE+hXm*W2rYm%Kko7Lp(O{yaJ5j_QgnQcq&G<6KmgU3Y=1ukX4VhF z@2}vuuxb|_-gO8nuKQ0-ZCxIOIwZYJ*=RhNueD<$iTML2!q-w79RuH3{8L;0JDCZT zhXqmJ!>zZrrlvpXX|Ia>IDe5asHB8EK%9b>rfmAttR5A$g)z1@;9|c3Bi6a`_DBhH z12wg1gS5zkxn6>5KDc#qzb8n40{&mCb0Zol9)-gUzur%ylLaba^w)M{VL0oV zbs++65ChY7fA?_2;nKL#r7Ep?HsV8+`O#qN-e9UAuWgq5`c=};qvp}$O?dYYaEx1Q zaY(GspO+LAcq81dPY&0pb-E)$A&?6=d_9^2-%K1`k*Arg^Alx^(6jZHwbnZX$sN3d zoi$ULh;Y+_q9R|PK4%t+RN}(}N3r{;M_=GNsmc2`#`Eo{qN6q}Wj6QyNzoN?S$F38w<>l+#y zTYy$pa?WcG){SNWavGG9ca>B?oDy>A&grSqMKYx4570PR^)+{j`qvf9_PU9JI7% zvm=GSe^a##6-Q2-04nhMZy9N6%@HPc-TEQu@?`{t^}%5}bB4=v#sXNQgXyzq*9&Co z>c7qF4?h%sX(Ivb9CA7~sCV4~7x0n??|o01S*6&Q$`4;e1lU(G^P7L-+&vEbiDL~k z7}5)mD_he&{X4H>0EY*=$r6%#sejuga22Sfbe%GhE?!%0Y$R)M0z5kZ*-Lj0rO92AMCb7-i zzVrJ1?J6bKQq4Z`XOst_W_U~l>B1kw+Q%0bNF#fxCPQ91hrKG%Tx#-TS?|dCl2{Jo zN?<3zg^wAKRji20Ei4R4?B3LRhLH}_gP$-u4mY4S_dBs=C9t|tK+C$jnnb@DYUUeu!A_)*AYYfA)!qbfm){eSU7PqYwfz7r-l7 zIe1f8GpI&+jT2-;SfmfM`AiHUNGfUts+RC|-JF(N9nzNK!ywT6vzO&z2e}ElOXq`} zkpGTM!(5SBe8B_AR)BC9E26dvRz@*2eGxIIZ0uyR@nw22aQiCmW2O-lQGH?S_9{~F z*V(H;TTn*3+N{7WRn_thQ-zyv%wf@rH+H{>X_$F1h_$a?t!Pig zN0rf-%i?ZOduTVjK12ob&VA91%Zs5Z>IN6>QQmDIZ~Z&`pg&Z1LU*rSuNP0XXD@~a zcTRWIwkB>OG2FK5PstXEAYex}$Vs_?xJ+3Y^hn;$?iARY)^!ftkFc6*T5F4V(NU3u z9-{;-V7nuJaHL=%(j2xAOBEK$((;&NCqlO`w_C!ktR^Qn+&LWZX%WNn!-uF4Fes*> zYgI~8CjcD@SIuV)zNtG_yN}}z2Kik-e3le(W}ZDG62_#iq45YEKIzFSBE~T3ihmFu zQ{fF3R+DfcB+I)+7V7Tn65(=l?v{2m+=kFyVCSMEPS8*L9YKX7DXcQc0MvzESEA1b z_T?Ev()PZm9t@`PX9&B0SWlxyyuWlDvA3_X?UsFGXh_Xok!bG)1MVJJE;V)Pm(R1- z2mT0AsN13IF@{9;jr=_gRa<&HvawI9?nPSc8ahc0vmmS3m}qSJPzDraykm6xlW z=c2Ya-9|cnwBI|TSsp4vkZmo5LqOoJH&{hx0h ztMvI8(BS$c>gk#7zj^tsXk@4&m4v^0Z{rsq0Y3E?W#t(B(}+M)fB)%$qLOApmr5^0 zj5Ew+nDhoQWL0YSL_iEAzq9v$+H~*l%$N4)OM4)@VO z^Y6wGe->P8SKA~pMrPY&2+ti~6j}%LHR~sCmVIVvDf1nfqlTj59Ld5eofglNb>??E@Rt{znqYSceFfD{Utizy?ZI-okSoub zLhrBr_cQiJl~#Xs%-ddNdA*wWD^J5`Xj@jM+|5Jl@`ca3z#oab0y-mOewltkc{W5X z!S=22Cz8f#CL8U)20FAAV##v;idl8v(aH&&KU2@ysCzT3v|aq&2;q%INYmB^^;fz_ z4+wrvdnL758gan8QDZWcydzWB@O&OPJ`Ct$`vWOF>Iw_d1VS`)oHw?|vO(aovO1uS z6!g(&_eTI=!R2y&M0v$A9@q;qQc?^N$##yZV7w!H`_!PCBq@Pt*%B=~(~lpW?J+!SU8H5|ivoROFdn^4iY!aMRq}{A>!X zA~>X3QlZ~vTG4rky_>_s!@(U;`t@tu{hwoblW2kZU^^9p9!i!#B^b^CxPj>hatjJ} zlNC44A!3+^4Z#M>&;V+zruSok8+|3YJ9YtEc$vs76$3w4wG2tCpDNH ztYgiaYP>3eHT=1LvhOzUb1Q8`W6-r#ECHm2fkz9<(4(WW&!Nc|BSFBG6y?v(W-;jD zw-Ezue~^!P!~V`h83VKx+p}19RKtGtY>Zin``jVgxC1MDM`zMnXx2V)%_`ka2Naf# ze#>lJ9=YEF`ADUJ4gWR|cjNf)rxRSxFtrs`jn3;wC(Ag8b9Eo@Dvj-E%Km0~oh5IEQDxSTu?d84O^Rewo_vjr81jjG6Q%OYUiSf)=&RTU>I7c((|x_6R>S7?ND;3`*P z`*tiX$7T{PwH&-gf&9&TeH}7i-)jW=0S7(erkef@2ECjARcs8DN=Xm_WHMsn-8!50 z{RXG@#*25>&D~Eo%FQJtI>A=CL|Gc~kuXTA<@zrT&vRsbkdlDaO6zY;@adJ(-GEw1 zR8t+zK@hqKmh}Lit!>X6Bc6&_leH!WNv>r3R((0uSS}nSwqQ{~)m0#xMXp3qZw+264D!kL`jZ#8kFGE@I&rSZGCRb`FJkL))9;`!9|#fE<$bH^wC`pGoD zSIBd!Aq(D>DgQji51LReT2}j4MbzJK2Ioh|bLIDTcg^f7say8Gl~T00!8f(E)*k%$ zbT`DL#_EF6vVR0%a|& zdYhl(OOKAXG<6z&btXXD#AiUMB+Vh*#^+!H3E{;$yW9ReY`VPdq957v?yV-@GT`Yw zK}G%2RtnCpmZEl$$f?V8q|PA{63u=^6*Va5^pv}Q_Xs3!fV5G^%>sd-!v|vhvjT#` zV8riC)v|XE#f7)tKT2aG)bzOGsJCw^r_YDjMx*DWrElTjVGE-1B_&9O5`ZGd2Okvy z!s9E$u#P}K9HH!f3U@kA&+=%9o>>_q1hgCaL6IR193VnB(py+V`&+jBoE<-W7xr5x zZZ-v)MLcrxx}T6u$}5G%@*z}WBhpjyp<+Frl`^;8p}}E;CRF#f2YB(dN9we+u@h`| zu!Ejs7s%p}u&5MG9{9uD+}u}oEUYQB3C__l4&ib0?xnGiyX_6dCoxg}he32KNd1WQ zqDbf=j|ciA64MFwo#{O2^O+w%QXZOf1l<}3zWdMki$y5$O!m^y!j6fbl$C|Z8TytSzt2N1UGw5SO2wHKsLd!3~@?O2j*Ce_h4U zf~1s}Lpa|~zVo$diLe;}y z5c2x%~Tr8 zFE#RSsXX|WTwPstE`j}`M6*IXb)>c?g#DB@d$GdsQN9(`dBH^f{ROjbebZz)TM&0K zLRGex@qcV8D-Cb-DwX6w$Ka0|z)&W0TVy3Y{WFWZXaOu&n16YAF-5wk-F;a6y+ZTE zQhxr_FP)WqSBa4Toe>-ft;sY5BXm5oP|KD;v+6Q=#O5Ldl%$ab!nZ#AKHIRBwd>?hJ zAp5M5p&kNz_imt_pN~(|vIaD_K;>sFFSwr@F7_p^O#{t_tx-;8^~a6#;~&%0cI$Q( zO*uJ!hre(gz=a*x&@Fjyjz~9W=>8v1C@dHuLKVPVFD*_d@IwipTq3NhHgq>VB-R+1 znEnS3Q;2}2Q~tsig`Pz0-TWWZ^f8L~726dMmYYEzkqB;!$>(y(H4;9QlSQrI2gpxV zb##X7UsdX@h1jA#er7y#hr-q;TiGW1f|3!?zH@WX>I4V-Q|uqh4?pH_G%Rxp_{Uck zCJV;HzJCvRQ{?cq0#WDAXu4EG7a&ax=TGC8vM~9%0ZZgtc_y3&Ge;~sTDBNG+TE1l zgEJ-uAzuA>04)d`Le<5o)nCTZ_Kv>@6Y}$B%;+H7V{QTmD*%o}(uxR0vCZ|F{Ig=~ zl^hq9Q3dgj@!mpGt``A%vg;jMQ)htNB3V9)oPw+87o<9YI|}NK7z;H>p9yrf5BL>$NR<^an~EWu7{(E4_+zr4I`1q=pKS$zif z8tY}9H*aXeJ>Qc<+n=g6I~3SXD;rOLgC<>*2{^D_MQzIfh@?eXD>*Pu0x>bq%+gUi z9ib-SpQH_pS4qJ)p0F`jF1O{3Q5TMG`qfue#eO>zM4l?sy+?2Th3=dY$LDgk4Y<>% zZ|4dD>q_-O6wFILB;lV07U?ZuQsdxQ56@|AObN9S5)x|iRKOeew@p4Ump0U7sE|kn zv+sArmSAx<9h0@K+S*_eCzs)4Yw>c6VR00}(@tN)u?XGV60rAL&_HWP0E~9NNHa-_ zY|`WZxQc}GnuRi8D2`a=y=(z|?lp!>9Kxa;X3^LINM3<%DH%%%s;Xkfwe??XW)xP& zp8prHfm+mw7AO6i0QwfcMA3u-kfRT_XC@F;3x0q`Iyk%nS~nI4%is1=#47-wADGG{ z_siFf)*hIfD=T{2IKCF055}~an$!pc*z*~_-ExvcI5`L&l>oj2#YH{ae-^9tDryNy9>yuoM9rU?J80&Oq|p|~mS#izoO zl5pPaU%LZ~?+TBaOE$*@_B{Ul%=5e(2)#cjWAQLDCDY_+l|<{U zmay_KAAvan+`8=X@3;p7kBVD(APutww46S704v9u*ksZn!<$9W3!9ZYK@A|r8M5G?|c2D>1?P$bY;E`yB!6vOy z{SW6PwuIip!u!R1f`NSreS8wbpI-WJ(8kSuD$+ze)8ABzcYACVNOg4l;Cv-dxE{f- z5(d+>&%Kcfrc+Ze5iz2|3G(wVry4lhGWMBmE!q4tZy{OXdHUCH2Mu^ONNe=d-=Uyh z!HH%M=3#z(bXV!|Mx3UM@Jv4!2M79w-K4d$k|QGhX7%~n>wun8EZfZIAMA#bM+ zL;$dpNt!v+clWbQ^;Q69;($c^k6d#2#8{IG0E~D75D}murisI=cLMz)SuXcvuKdM! zBJuQC5rPLdZW7!d!nc1hR(gu{fUOu5;7b;{shew*8oZP_t`9T$VKalprcyO!m#Bg{rI+Z9B1Wv%^Y549rLMc3!w(qNs ztic~EF_YYstlk4qPLzTUl8-HrTwEtD%<^yB}L z^_EdpcJ10QEwDi8?v6!wNGJ_TcXuiw(p^e-cT1-d(%q$$N_QyT^-g^5``LScAAfK# z2Dk>SYtHjLvWnphBIm7EQY=l(;9*{;%_eu zYT6tc=y&c?hQ1HP_HBb--M5z-9oGPw*|n=cc-(4tU#V~S*y6yr_Hg(?R8L1|H{vaS zCqQbRO15b}d-mzmr^^9p5v=I`(a&o%$-@3~{IJO{K!&c{X|pmVib@=GIgPaghCsPo zyUwCF4A))I!A06|9m`knx$`OT`mKnRjCpA5=^5yx-Drpsj_ldD9OaYW$?TU5mkte8 z!`cLW;dyI;X!qw4utj6&sO`Y{_|(Y3;SltQ{{H>j;|-;!ix{lWvsPQC5?xg?*Aa9TckEfE;5&wh%1`3{IVb?zyW3=Cn zZXWCgeXo<5?~h%bSrwo29wbvig`5vf5@o`LJB;qeW;lt4zWipvL{(`Jy8C(18QlGfknW>bz zye*|lHhd7+G)Fwa8kNMMw);fjg3REzP8DcuaO~v1OFb&YtMQ_)BC#HV>jF6oKNld+yHEj zVPgAzDB}Kx%;uTX65id82KWUbBf7)Zf)*A26OZv8Ol~_&jJPV@NX>X)8rgHyuBXAFg`X4`5Gz zIHKR{(gWCKCj|-w5)VhiNv32K-v6&F-k}1QfsO4Mqt>gm85=D_@;!OIDO4eoa&2K3 zF2U*fUJ&SbPAWnY1*sd1|C?Ww@Hd-lYHRZW45jgVPE)|}O_o&vPAppZ7@58`{&V{b z7+J4ElmLtQ(8RVCr z|4n_`lVVD|iLxX_nXP-=8o+Q6q*lxzdb^#!V(>J5qHP5&J?8IF(|C`w%&8zPEv>6d zd~i0WJEL~nMLinYh#f6dqxJN5H%h>y3KemO+v|S(6nEtM;08f z=Y`2xz2BeXklVj?=XkLr!9Eh5GR9C`U_qD-5st5Mc5#u~EL>H+s;hDe6UTYCiWDNh zb^Pub?_dkN5$p$lg2^~sCJc{ylQdeqXdx^nJXMZWh{O^cS*!w;*t7KItEO#s0X?2(ZJ!^(<-dxdiejWL@ z&d_HhPkzD_hk(T7ZkVL(*7l?9^x3v*g-nQaEyEYYBy+^S!iiv=2$i5R%i6Tj+Pj=)-^r4TswfS${4(@TU!U#If>6e0 zX$IK~Wo1lxV=+ys2cf7s5UU!3bmu;%oP8&tkEkUBjrQu3YIdYL0Aw#W2!L1hQd#|$eSaF1od8wkF z{(`jVwQ?V|I-1`d0B^Dx8tL0=YK~&1$yQcrKl*6ueUD0wr10bC6PCeFDKH&?%j2cD zhM~85`!=bHGQy^da;2FSF6`TTF6rnm=NGPW?_GwF%huMb*g;|2&C>OG1EEX7G=ha> zXa9?1BF8k;;|$GKRK&(z<2Pb|e;e$@ILr8?AD@QqnjH!sfbkuOd&CX1ePSj-c_O$x za|=tXj8&E8O*uAhL-G(KB_lt}2CAvPnatZXsWvel3=1wS!%wc%RyhY3od`ZS@)-6djWO86<`2)VQNd<}9vHi3##F=_P$m zfZ8)A>d8EaK9pscM5OA4eE1M5zLQkWe*Gq;A-@;|f z>M!uqWA!kQ!i{$)BqS8)$ju2te7JNkv7CxEuhpYb&FsyanwFQFg)-jFwMK#fv&6Xw za%X4f)6-Lj<3K%_Bs*RZcg^wIeh%WYZb9Db)K3uV7ornYqo!6<2$4%-VbHGm1X>oS z`VXupps}V3PLvd&Ek-F$59!I1BkjhJ%9tNZ8uj z(-YMxI$*&PTuO2n&)4`<6ZW1moA`$+Qk@W=#_AbjZ+3a%ve{17wFl_o?dgGu=5(!> z<_9NBGY%Ujk>T9nB&T65dvMDP7JB!ff= zY`my-P@u^nofHjUChS6*gbX!fLV3 z6$#erW!UPV98{2xuKuV_eN?G5;viOj`dzQlJ(g+8V>fmmW?@uC%I~l}SEKY1c+G*A zDoCA!iHQj;xZ~-V%k`Eos+m!D++HTd6&28_RIlSw8GlKbk4Uw$v1#5&(%q)jFIdm; zhtL1|mDm>te79b!2M<|Vs}UJ1rikH-8SbNT7_FkOdzD`SaQcE(qr2^@!rrk9+k=jq zUoFo^nlWepF(u)j^`L`9$q!qU{RxuE2Zwm3j+G}g?w}${8~e}xK2-Q;f~8!!Zo})b zn4K5tpq;~OPj{(yJV6XSTwY~a>P?0(b9ZD~@#vm~k{^U}l3V+o@$(J;CuDBywa*Vb z;6WfOYWif6MO-9qr7gOKgVysV9j#h3U`jByApp>RLn@10r>^Pgu$A`L`Fd;BdjHS# zYJS}avi1ZHCOtpa(Bq?C{hQAR5bYE=J-Ax`7{PazQH zXk-kN@tTWZpCO7|^nNv*Ergk;HoOm{h>=@0VQH!7ZwW|neIGIp_LtgyGiLv7t63IQ&S`DUEMs)4I)7u!{HL{oj?5LN3>CC@ zv@%L>t?~~!k`%%`ypqN3A)&`}1*K${zIXQW>rw8k>n#BNN>z}GdJmsNe~0G!A8ywjWZC$|v57dk|ynzg2yzI}$3;d{<%1biZJk)YbKMJP4Xm0}3Fv zbnJB0eWI%;;$`wF%1!TuqTo_c1IZJj@>rVe4C03+wVsmj$0S3b*c+?-g2;%J{%hN% zT~iM=SK^FKJvd=^KMnP3Z5&IgK^-`I`e^ASIw}Pe)Rz5vm(EZ`Q`8-@vpw^)@MZ6u zoN?c&Zzkj(`)foMvR584SdIlu^Mt@AY~dFyi@I4>mk{c>^y$b{>6C| z>n@WN03I3JA@Yr8{gb_tLTH5v7V|2j9e#hjLZK`BhK&xn?D$a}sf?pkb>yydCi&2z zh{aszgt;O$HXCdvewwZ_H2FXxCv8{w zM&U`I1w)Y`o9~^pEii?Ij)_1)5gaHd{;tJp8peoJk}nXX8s$WCCu+%Tr|_Xh}WV=DvY@3f)P?*%yH@!vLB$;3$&xF)HYP%0G^(EQL*3iEN)`yEZ9ESlcD*=V?TT5C2p?^$n{v8`&QyJq^tX-> zBJ#_E9GALa0j|7T{|vBM6?)&)Rx%4UA`9{J4}6VQD_n0r0if|5t-7uOh}3I%3m~T9 zy@6~r5UuQP^DU%r1@RY9A4$l|L-5xH1dL_;PIOy|&c}r2{zlCz#|=?d#1T zF1F2o=4Z!+<{J8}$()Lc-?~fJGXNf|VM(YZ(n3@lu>rS#9cuMDY!R1mnm_-nJ5>dC zXpgkWaqJRlyZ8M`_9J}PtpU}%+sVG)F}&X}yeGG~5gk4EP5u2~`{f~f{=RJf{z3CS z^*Vn0W$#j`UBvI&8Zh2~JF_N^py&%&3dViT>wp4N2gqi}GKG9k_r8#5f!P4j0KVNqD#VMzONypvd4<)#4a$RnW5b9D9x*|CHE(y1+{ zkp`4nqP=uD6e3VfM2R&D`~sDdu7MT@v4n7@j~@S%(+5`ZM8;)i#6A-Qxudtt1SeAE zYal>c(3!#cFytO^L?e%Bt$In0gqZ|i0HdTRzXj57AN#s8l!H3PcQ&}jg}Zs=_Zj%T zP3AJz2eh$@sl@C!;r8JOD9}D)qC4IFpn)qQ6Wsy8r#NoVG=SY6)6kL#BD-V3?X3nl z%h&&C14Wpp1yndES7a`QHimsqkfvZa{>1|LoZi`Nw;Z8uBK~r7pN{~uoIkNTtdIGI z{~ohnVj)J$0_c>%qNm#brFORRbvJ!CENyR;Z*_LJHkVFYvqIT0v%J4jZbp;Vk$0wG zldk}e8;6Bk(L(D>j+wUn4!F4<)}m)0aR7FiHLi&F6eF;hU z{kb<>QBYweld^7RdD)azxop>z#Bj5keExmW743<95-WrD=SJ>m$te;tvdueWVizs4 zAIkLJ#N3jlZA3J-Wny`cwauwG$dJHPO~da~YQLt`>YaT!c4Sx;BY={1vhxx)EEuY5 zU*cuusjph$Q~L5Hj}z@)8IJ;M$&XTm&}HjSbeJ)5M-)E-`lwDa{IRs|g~FcC4Wyt% znM9DsKqLq*jolq|SyZ@Ziik>83slK#)vTL6GT=DP+0U$WzfXMvdgBci+A=)CUXY3q zTn&SVQR{`=tKd2+$zU?GT~bvxRYzT*@H_`Z>qtFkliy0;60J|TzYsNG4)b0kURst& zj)0+$5xt&_mO<|WC0mEf=Rb;?sh;{FVH?U-XsN&EV9`n3q^&9vtY^`gP^!=BF%XKF7eVLI?Wd_(q;)uo&ONr zsS3wH5%AjSYU2FIW;0b334(R`wDDfq=)il{=2GnuvlYIk6zZlXw-ORl`QiI($leU= zbT&IBe-j4Yp@+YW7N~bd+AM4$!*k-ON?`J)*&E1*(tX7tGU1*rCK$g(!WrJEZ7JlA z4j%B6=+Xt%Z2nSr9vq26ES5GN^NU<#4%h$7O8gW9BcbLRxR$@^@+3yb#+ zmw=fBfjr$|O26z-Ky44Q%Z9k%;+(m`kXj@=HqL;Cva%zPJDEuEtjIhzy#ZPO4s%Q^ zAd0|2w*^bloexqroSu*ns0Sn>nqOk*i9Os{&9J;F(5IXAXBJP^x=^)FM)e!o4Z1n ziI9G-u0mnIU?!-n-4b&%02!{eZBI-{IHYslxV*n;f2gqc4wpAK9s)K%-_uFyCTP#s zO>o?nm6igC=5e{3++P?_F$D=(Rd+wC0M)oU)bG$OZA8kI;Cgp`_OQ8hn?CNf$puEY zmII*qX@9tXY_fW|UwXKCu;Sgv=;Nrod=~p#apW&e|1SIH7hu&ErlyW}6n)cD;=N$& z^3_b_db%+~kTjo!@`6Z~+@*gBY%p$$<1}J^TW0zJ5L8)0x(26>Au#p?O%w9E{Jstm z)(F7fjP_cm&N$mZU+(aSe+;L1hX=a$1a;>4t5Pcr)ciq}fOK{Q{ci!`u<&=}Ngdz* z)rD>t*}Q`zVR6dUkviFbH-7g`o-Oph@%@bkINRIXG4|(gD&+yRnPyzao;$)KEdD1j z8`MVcWO9R|M;lc{=kE>~iXz`7aGl@3AAF&qs5m|`fsu8+yZ%MDlwB&f8zYpQlHwZ~ zHVHjTi3%!ruuA#atN7qHgj5FnUxN77IcTIC3?#4C`2h~XnhY8}P@J?43!Q~Ru`!gT zsnwzsi{nlR=sQbPqPiSOaNm8$mg2bX?n3cXLG2BC%}fWCfRUhMLh2ZUwIB>Uk1AG* zz`*NwMAc5Yb};y|s8TXVLYj%()FGI4|I9yx7afzO+M2veIZEm^htm~sLJkDnJ$4i9 z?+g3h3pYWnpiT~{ZD|1yY3vt=gCHUaH99 zrdKDZy;A4~hATAfb%K0%XV5s!9gaoDJ&CC-*`0DawbPMTwkB&;Fh|m_yc{i3*4`X^ zP6?3;DxAw@VRv*=XsS*Vf8bM3i^%7Io(2b)Le0cE++&dIsKcgbX;SeE)3K0|7~lJ1 z3tM6=srARE%oLS%#|pbd1Ve$!v?N3_d%i25JFsUEaqG!dWVm84H~2YIkRs40WJ#X= z0lOF6-1IM$KR5d0RF^ys8m6fHum4;urR)hdxT(5<(%1D?U6qyQB!YJZ!d`!cn4T*Y zveBPForhGaIW>J{qAI9-LQ>DL+-k36O`Mu=YD8h&Yfe~` zBImF;qPffP@Kst#4x;3w9vdd?>BP|MG&Rr#T|{-Y{vkb7_I7b`QGxE;w{O%?fTt!U z_Aw7(oiZ^;;TJmxsc~u~I3a(Gec2^T%S}C&r&i9-11tZ={CKdx547VsClt1*)g^!~ zMhW&DFo~B} z=0uvHPn~#d*GwFyO$r!WheP~SAvdEzn>HGcy<66=^^sg13iw8fCLCHGd8VE1OIa#a za|4rJ*@OrVMi^8j_1I5LHWVA62%57q+)8QSF0GUg$9Y!aBl-kPaZH)R#uF&r2t zS(s7UsQ1T}A z;@YhY*s5a?i+@pqAL}NWDiR?-(t>j&C(BOSQB5QJ1U0ARi~tSN3WLKiqm)nny<;B| zJ|Y4J#D>a}0*)Q_vwWz>2uXJw#GG>w(*LQrSaw`QFD|@VhSk-+#Am35$r#0uZ2-}k zm9~Xxt&rC7V_2LH`b$iC%BR!oR;+Z0tN8dkfvGkAKbQ>I2HnpjN6$(=xO~6squ2c? ziwdN68T%Y(Vm@`UvOEYZmgFu7f7LC^M9dv*FC8LfD_^)(){+YO2&46scKu}-%ZUkR zy&ad@;{?wW z?kg%EsOgyyTg$s2xq0oZu;#q17wNb%taY``xW5BNaj$^VlhN_=aHTlg=enX{F;5)% zbxL}g)6zY*pn%?^g3Ui&9QOXWnQ*FJU=atk+Sy5Uoly4pk>_o@KdX9I0zIv9J6(@g z1k#;TfSU5p0=((Q(A0D-x$U&DOHu9@2otQY0hzY^5CF$ulllTyCbkv?1igPAF$@## z{kYx%ogK)l*#SA&X-RnA>d!odQziiM>nV5l5@AUl_2ZU6p_E#u24HfR>z@7xtvx~2 zk^=uS3K-|c3!D1(tUUg-^z48pI&0x@uq$m1xw)*;-l|*P}*L}XlqE6l1$aT@(a&Ws}fB;F} z>EZJ3!1TYm?e{<%2q(Z|{0TH^!5}SDMUo@5kza~;_=+mERaK+2bHio$qn;*}tt!K| zO0QT2-T~<`0MwS7sn7a;sF}XOf*1Y$ew~8CZTUpe_)?800qm;@FwbZ|))HVnN7HJI zz%e(5!lt9rV3PiNhMb3f>t6%^5zb__7(w7Aqg@{gS}>~>JruB$m&7&$w87XyN}UAq z7?&LkcnEV!etse^@gpm`b9cY6HQy%l;hr>$!rJ@6%vmiA#cHBt(QL zW*_#eUvAb%z_c210}jR5x?FZLgc3G10;i9HE+75U*yUC4i(7^O3Na3?kP&zlDQyRA zrBx+3Qer`uOC=;XvF(Ju=8;JD{!YfkFWZQa6DsIR3%iaB<~RirJE-Ii$a{?~I*>R5 z(GzSQs<~`?CZ7U`qNtCV9Dx-ql=!q|8kjnfV`Z^nF1G zx}e%?0Z^(6ft09~9-h?jSxxa)2vmsq`ijcCh}fE~eHbLCP{b2fT?KM@x9go^NH$}q zz{%y}7Yp1*LR^r<+em16=P}(J)c!9PFqkTd&VDy3H9JYSr{3uIksjfI*_~n&t(#?z z{~3f*$Xw=;2nF0I!VVx{_aA)%-i|;Q46v%PmF^FYsG!eRJOfByXY zuV%v%hx~ftgN?1NfWQ+s7^Iip=ku0>!8XXZpu}f6%mRvMx=x7&IZTI9}6}=*voxT0AEm!z7fO1ayW%yyD;;X!W+mhGo zdj;M8emOidGgE!Q!|4VaVC9e+`^ob9Jn=MBB>W#iTqP*x+Ii)_O@yckJDw@@;Yl;l z9pKWMmY79wrhcSdJ%)@cKNaG+WSqb~$+i*BVqj%uWR#og^}6s<@Wu9WY^kR?pI5B+ z+FwK>I+nsSSObhJRboUT*7ePfDF-5nH0;KNlJc=?jucVbL)hiVCL_N+y%G31b7e@F4%EzO7gE#c;dqWma6Mb4ZuanF#v z<;&8-s0Aw%C0nL5YqK^qF(T5`nA{=ZWl3LhRJ>fF7Lgn+PdJ&eim#&&ibUbj(ybY5 zGKhqUG5=PInnsKD)Ev4A)2}Qx7*Y|L(LMPkOyIS0DRNSt8kMmiUA#c=ko;OUvAHp@ zw`Iz6A|W=>tUh(fVALiVRng<-2p<{V?Y*Y%Au-Zxh&M$`GNbCpiY{>*am<6t@mlVG z$Tz9c0-}N@8cb-BBt^1{x8IKGJ|AcS_XxFM90`^PQvts18iIUvyQT>(Cd=bMjviBv zvCk>q-EpRq(oV`PE!?xn(L&Vz0I0}*K8UZXM5 zI)znDaNaI^$2jv$7g;;yjsfyUrO2G~4-9uW=IcnhoVmwd?KRb=fB{^3LbjC{HH%F*O~Za`lH|zGg(tIW6)%&Q9@z4-bANA>Z?!HMH^1m{PcE z%~agwR@Q*G5E?kIRCG9iq^+9&byV=7L=ldW5P+HKsFXoofQkxm!kRcH%JjrJ78fu) zO-Ww5nWmj0Lrr=KniJWjDGMV11tpf#m<}HS(I-#0%?rb8_ZJ!tyriY)6g0Y5kKDFX z^-ZnJ)_Yq$g_^&b6Vzx$Tu^HW6fn_d0Tc4~>1pE$3IuJK$39ugf`d_|5XLRSkMI(N z5g4oUpwtAwELkF;j60F-NkmBAD3}d?OyrC|)MS%;HzLSqP#%uM0HtNy^;uN|>2nX| z-3S$O<=uAu`ph?vPxIrRH){Yp>=4hq>~0_}{o$7ZkFc;;e3|jLc0AO9V>NCk(ERg` zJEUxT(%`YX;wzp2N0I?FfKR9@LHMVFnmL`ZTIo(zc&{8n;S1o=W>X!h_ zLrb@teA(b&0dZX|x5vYPn^=0dzesH;$)BWnHbQY(I?w;}&)%LVm@*8#&(z19jGCB? zn!Z>%ul@LK-Xc{w#BLX}Cl4#6^Y5m`g4p=uQ4Ml`5$HLgUs$S=;Pl>Z<*_A)<-=;9nBcwGnov5ZG45hQ6DyZ-uwqw zHHJ7@_~1v3n$jW=gGmn6ZRI6Xl#-G(L)U@fmzFx!b$FxBdCYUwi2wzm33{wutNb-X zS1ghZzMs5$LHDGw7MyBa2S2deXkq+Nl1DA_2A|fKiKX%cYTSCkTGt?|_r+Ozgaazl z3Rh=Ml?S_YL5sf`taoT75NHHVX4E!0GP^oXOfz4h>JRPSi>^V4a8JDQgWZBJ55yEs zh6oXK)oWvgnqBRFu2vf{%*oIiSlz3!>760K^W_G4EW)CPcNuz^x{jww6-!#qH`KV1 zqyA1WlEmym6Sy>|muT@^5Ogy!518M_U#Pp_;wC1%ZTh@@{()(isA&8}o|V*K3kH2e z$jXgrlahJWfe>w>IjwF3{=$9kP}&c%oudgf1dnfFgVHHpqREiDaZun4rk^25!WOpn z1#MAHNmQ4r&vHVtCeD(N<4cWT%b~2=x8<`E!Hz<@CQ%(VOLPmSb7q z{l0P07%}0P@%5n16CesInUIae?hmf*0FI3Vv2p^DD9;H%1{D~5AYhDE^P8>)+kObd z5GxfMa2S%oI)6r#_99p4_#cQzQAJg-M!t ze-5*?-@1OAyBDbq9=!lLWy{@AZFl$MLHcA?eIgGnt=nSX>tf%_55AYXn(ah_92mQi ze2d6yBaUl7VfaW4bY6g;5MZ#8#n6Pwg?<>`ma*PNCO8s0j`a)AF0Eg2=XR@ z;?&9JV)M@e)IBH*h~ggiC$3AfQ6<>?Y0xgXcdUg{2`dURWq{HrR-zN-gt@8(>y>|O zozM8mBs{e zKZ+bn4*LMt(lF_;GFxjgPiX>*kTpc=dwpLXHBR%VwQo|W8i zLbLR=u$GRt<=I(@HwAeL`gEHADOp>=8cno3~5mSt$N&=-V zFG_CIyPunzZ|vti&ksQq!>L7ZOKdhzwUDKmP>mKRBpO{sOmLpv!Kr50_%y^+NT&A6 z6$dwY0txR)@mkMW3xBqUnI0=c5=D4QSU)%9yWb@lRGggyVh~a$%5+t&bfUz&C*vp)gn}gLprxuR&r9F+KhwikLqs0Tv-CPD$kkR^SmUx8S=!Vv&jGr z=VE7)vv+{uw%hBg%Q3+~Nb7p$6)`y=E~ei9A)NOq)ZFU$qfQNLtPB-CMsJQ$z32nG zC%Ql5O!_=M>0mIjIEKO?mKf+SP;+Wii7rhnTRlR+p%}s%YXhNf&m@KW_Tf2a7Q<^0 zYP9r9@BnfkpDa+rk0YkF3cBOn)ps4_a66pdzz*p7r>WmD zLz_fBp&2OK!BlgD^rSachK4g0?SM)pkrQM~>3{vw*vOAJ?*P|tx5`U*5YtRYYCop3 zC3bAWN`Lo&s11cHNL@iFdY?=4cGYH|V zxlA{1uTDTy+~VR_K6{vq-|St&#rK!*vxYUm^61ZqQ~e(aYR9yO-*h05^c3=;jGzpL z;W9H6+5nxYIdg|024$Xj4|KD=Q21fm2-H1`$)1S#MQ?lF$}Kxrz4x*%iHAdA8)X zhHe*5tm@A^z?42(o8pEDYp40oi19drvC8^)g&STi{EQ;=ez?1M$tG|AxI^vX=UUQ5 ze)$3q(D7FUO-um&8|y08t=4F?on?L9WsQv(9^$(2Uh})@@3KM|`~`vETLF#+Vq<%a zdC)OukL~Tr*6!{*mCUoa!iL9&i$Yr0cA_<7<%40v`(r@6oPQ@EX~i_&wfM*T-zb2S zG6{80e)2+~Jr|i8If3mEeyQW+taS$_$0WSUDS9TX!Sl*~nHQW(t3=it>zYjIM? zmhSKOV~%%x@-vF@;49O~Yr*(l0Umkp*BljQ7&$hq$t2-?9K$k#LdW;UxVNoD9(V%jJJ#vpoj&wSZA;|59i3%)OvEK;XN zY(<^tJ;#K}U8h7+^1HT4^&XT=#p$XB1S}_}l=f|IZhb?$dYvAB+I!<%`AQBPgh?QN zv!eo3tvy(%C*8H6PPJiiJD}gR3 zVGl4G(k!gLyeA098=8Gm%`1ibGOzNF!TVc*!uw>wrJd&bt&YcJ#?GK73IZXx1tU(p zSL;u*@H?g)b5%31YfycFj}25iTf@XkP-I+3xHksvHJ2m+1N#*8AH}xOCN8oYq=~>* zSNA7?9lAAYiFk|KE}SoNU*1qrLs?kR?Xw^sM*YAbPN-4gh>L5)vw!~6eyd|3{0g8d zS%UAG#%15%od3qf#U)q{*7j%&Di2}Ns`leRX4PvvECgsvX7bZ7Els%9^Z(`;LYX>n z`6vuk`aA`b8@|}hbB3?geCMlsqCW91V0?^|D+K%T6kx+rWHTsN zEy9r^`kDmZVD=+(iBo!NKj<_&TW5iS*`iM}OM^`J=jUJI>7Ru@#~%X5DxrgxcvBGV z3}I`#{H5qiq(RT6)s=2H`|I?b4f^Kh++)GmJ2hCLa%~kqLk;&B|Bu)|PlOl4*u|*+ z^qgJ{31wYH1nnVK5-WKW^*DIzPlw=7^!=)h=m$kKe>^-5m&zWTSG+7|&Yp`BEF_SB zN)bV!@OtXVK+-yw`}M|ONl7JfU@}fg?TmF6l-KP4xYJlFV{>(RzjwZ-ouPO6E4s%m zNe}gH&P#U@j{J|cr|0Lc?MD^|WmRXVr?KI~ZDRILnit=p5lnkg7VC(A7|=>I(4M*Q z?!CV_b$NNTnYGvkJ9{E6J3^1`Rd~h!YPc|Om1BdzB<-p#pqDf|`xJ)?Tpiw4OPbH}kp_l%9h$<##wTo9Lna|nUe@$PH z#oT|27-!|W_bchAaKZ^~4C{3ktY$}AhwH(dzz@XwD2~FZ-OzgHH9pMtp3KYDihtBV z%yp=I&r-jeE7qhko0y43pN;RJZ^ma_wUUqb73d=0boP7(Js>B{4S=f@8Mr*a?$@-y z>Z=Xy&rHe37(Ky7M>eNY>@c|%$OARxBcbsNZ0*juzpVs+dt{NxVo+#`VZ7jAGbNGh zgbQ{`xTgrik0}=b;KeDffm3c+#mY4`^$yTQySAUI^dG6FM)b2{Ao!D4GZxXw`ICkV zMCC_+h>^s0$2TSCTwN~zeTcE9WyQhF2kpA(w znvOa@nJ)(qwp#*O`4tUpnkp;tFF*^jewArt8MqVqwJTR{=N&Ur=BxcV`f<5oxCHK-`XsL@C5VFH zfDd-#9%EG-5CtF~=Ge)Y3LvZTuZz3=2F_up43YE3^*UMy^aT4bc=L!b=~oWovnU7SIOwp=Wct${uz!_ zn_*Bw4_D#683Qd2W#-VEXAEa$a(7WGz6Ia28P9x~&I}W;v*o-MBHtSKS68_)NT<*J zr^@P41q=+y)o}Pt!Xv3a2jl6xITDkSL_no0z+WHlcmOC&&bVMmv0i`@P;yohDSP_^ zMW18rO6e&&)UiH5)sUZQ-IOv{zuS8KG`gjF1aYfo)p=p0#K78}=eo*SQTFdY ze`b#v?S4(wXFK$I_p>z`6K63a(z$-HbNa%pn@0zoU04yMuPNXqbuKRYEA+j8zQl!I zG-wiFi#K~ZRamwrkD*U`);%>VIycLgGT4>(v-+Y|3oWzEo}B&#*%Vh~H zVELb(a#u&D@?CGL%%he{sA`2 z{!L+vMhfR2@IH@gAUX%N#aFji;lhG>ZbK<9#eezse*irl*w^QcA+*pMEvT1C;$sqc z3LzrhU$@nHDi#+PeA0%L#-ndqDr>725=z;_obSk={R%BX?w6k$_cNS4~X<0o;x@Q7)^H zYX3PE6~zDBG{vk$(Q-GeiK<7VqNzFi=eeiwIOOMJTb7RfPXd*;UM)-ojh#v`b zxErT1AD_UtTvXiJbMQAnJV(iuRw#5X4jw)n`0$m# z?x!$+Jh4W3lsZBlD}F0I5w#d#;tM-jDLk*tAw5OTQlbYtH=Cg6oS-$@{Z{{n>3zo; z+AoT--1ap?;pQ|Rb-u$uifdk6Q*R=={v+?ggZI1_ZQl&u1;^@>DtQV61>@RCGhO+S z*-=Do$DZ^-3SBZo_!c(HUSvq{M`Y)I3?*Cw%NbHr%Gy7+Y3@E^B36mr+*-AN+@=_{ zIp-@vW$oOJtzxv@x@px($El8$TR>PFF^-5j+7qj= z7GArJl$9zX_mp0X{Y7Kb%9a0O3Wk4vpVq0HaN1P_f>cOP2Mm%r=@PoLwTX?X6CTy& zi2u+V4oi~os7;$*XERcol&6sH{Cp&Ry@lSBK#Jq7Som<2C=~{}$hx;tk`YkS(Pi3? zuRGN~uOKxS$PpW%jSGJZR3d>Hdi&2M#NL1l3Y>xeAbQ-hW1C+)P^TdZVvv6}fA4<$ zt10>X_i%G1T2PtYO6I%OT(gS6;co=cAM2f=cHA(l9Vx>p{xzXbgA1VnH66GwX0R}m z!s~$Lt4QA2t#a>C8wDCPF7tC{fj%dN&H7gL#3A$$A*h#=;%lX~K&OqC?OtJJi2gUs zAItx}69Erb0Yguak*%=M_Xi|`tNC}>OxExkzTmRW&Qy_hO=@{r~JCo3~kx1QNLyueaKl=S&l>btBh;r4eHo4>fYgz}{#1w%3T4~BIS z3beK<8H62IC8o%diV1?>l~tR4i|6Iz=C1$zSyH~%$_;dEyv`C9C>^^E+xRn8mebuHWo2bwkNSvHf9bsPMP0fYd%$z0mWpTuqWDxb znVBL`KWEtFWNv5BnXop*Tt!msD>FXzJ-KTm*$_}5hbd3!d`2iGcWzQacm^*IX^fq3 z(UWI?M)snzS%59S?kj<)==D*w;e7M7jhYgY$Ecr%5>kS{k7Wmh{FMt=+g7k*p=I{# z^VSIA-)|DgP7MKe1UAZO*aN_nYK?}(!s2nrz*FP2f=da10 zgN7iEp^Lsow~5a8i(RSAxXJ9Y?csaTtDlD6(|=5UGj}JBY?6MEtOM4u*_j!^<}()f zzH883;#4By3~uIjGJfl+0zxi}3GwfGJPzc^19e2_`Q&e=r`bIubN}Zp1Kv3?(f%*& z8b+Ve%s2>{W{tI`b2Z=PM`pXot=|L;uABwAxK$Ynq#N#7pLh(g*jRor?B>Ri8Rl@_ zs2*4eg>bN8FgU$_SV}Ms_HH1F$Sl9lw2g@P0)S>5AMZC7t#(A>`y*20W_c@G_iKkQ z)lDvd`s3pM=HNo`K`eh7A1lCtx&C7PGzR5$<=b2xz*FR){ucE&aAkgc%qOJL9Gc;k z*UbE_FrX5qsyBz+#b4^TJdutuT$ar-M&1opZha-=6oWzTaOFyPh8W$oISqI6sh-^I z7Dgymlxja^4>t?$UO-!wkO`?T0FxcJQNTcWEkWPCWrCNjyRsu%nBz_P3EQ$^F}^9~ z_Gtiy7F$vC*4O%92}iF8F%{%)7_H$b@d7yUgc!LvAIg&>7(+?aj z8=+{}WV}!>8%bTIihPzgco5uYdF$5)Zw9}l^x^I`f^kC%Bbx=I-z$VEJvRd%wj!E4 zb4%?ga9rc9$M*DR^~M4ymlu zo`nRX5y3;389JP|gW`#?l~pj9Mgl7als_7%nu`%CA&qGu@zVx$;$>>1dmc&tWPd#j zeVGZIs)5CsKhJ-A+EDK?=@lvDhoBM0-DrnmQcLMMPfBu=IW)o6rUb^|_r=^5zZih| z4x7t7lr=D!FkLOr+7uLL+-lc_0fIcK8zwnSC~rVbn90NUf&5JJhILm;j8_;|l=oOAvo6A0XT+j1n8sUsnJ0h9q#xa6>;!)d;CuwIF~I( z>IUY&L&%lJM1)D>yUXQQlyV|s;h8*EOeYH3vb~R?d@AQ2o9@mf%+|{$J>i4KGg?m( zQ3(V(ARRC0uyI^goiDH&_4{7hnhY_#;l+sv>GF4+jMox&@A-96i`y#`^Img8etC!$ z`B^JYC?c8ukx7;}{!QE}Z4gJW6h%_({D!MLCd7xM@AYyo1U-$tx6$m?kC{LA3*XN7 z`k(neBv;*?czd>AoZRghy!~=_e|nuCUGdh#>8|E;din*~Hvi13J9iNm-Z%lb)Zrq^ zK4b#kOeK^V`3CVzph91Zno+AnFw|80?W^}KZu93)BwN?nlTdEq0?T9Y$GOPDJ$Ax^ zO|qn+;;{6a3(r*PNN5tcYc0F}A6IV`Rt48}fzqIC1nH0#0qJfD=@2Dk(_PZtElPKT zA}!M0-6h=((j}6TXKnTUzjMxok8vSeTx-oa#~g9teiTUE&axtD;HOEEAR`o6wipU6 zRg4cK7uRJ8K0`;g6~!$!W%SUAhRVZFXSHN2Kh2TJ=w{fa*?nXD_dnHd{JRJyM(+5| zmRgB5DJQ6UL$5rRa7eft-M6Fm4U)eP*ZBg~3NWOuXl&H#H=DzR45sqf0KXeZZ>k@DuHa=jW-9|PR=mT!U!F|G4ss9cT>?+3jwGE17@X%}y zCIfE+c5ioak`}P%fN|lu3x2#3iXAp%i;wqvVYCv)RRqdnnYK#=S6U7og(x*#be4HB zHbziA2-=(&7qen8N`6Ev?Coh>i}x)x zOOf}LOb|Qmwbz3L136OKWaaWCglV8T<}8F#F6RBOrh5&xeh0fKt7Yp?tZjdqz!r6d zWpqD7vhsf3SHL5Pyx){2DRlv?uwQF1dl-jg+f&V9oJRR1iq3v#L{FP zhg*n2k{5(S_>v?s_&qu9V7*#QO$W_M6sz?IkOL60mVGDLzWKQm4EKn8F6Hnpk>yg0Vb9IY}Bq{GnaRvucD zbN{*(!Ain}@OpO(hVHw~_C#w_Q=sox48(Am&&BsN-&PW2YYQW}3vZwhrOO0Wwjba4 zK0#BwkvwPjBe`lvK76jTM=C762k_95Rq$Yx|4*ufL_8o8Qbf(Z%r~^2?NDuqn?G##`Se?Hu zHow~SIlS8EsqxtncD}VY?$}LCxggy)JKDY~XdWtB+WV+He_k!rT)b1GNOpJjtwYg9 zu)c+IgV-WhrWUUF;~>^Utt`w;op!Ys@<}_kVaDtx;&q>o#tkTgmW~_=KVXB;^bDm; z{@vHy1V4*%>+Rm`;$UPJoo8@s$X;`Mv(o3C&DjP-eAl+Z&gI*uYwp_MgGXOE7B4d; zv|f;cBF$=Z_qzM+25ZfqbFd!maqTRWF1g#amr&G=Xq^-11e=#GQ>QTseweqM8{PHz z*OPdCYQ*%i`AL?f#I`WKSLmM!Tr<36v=yIhT&&fLWf2jQ?#N5^A4!vBkG<%r;x!Mw zc}&H(82qo|xexl{3*JJ&MK$y=;tI>jPPMKF;hBf09{lQ|sV;|}hdGIs2SA1D$Zu6a z6$Z3jyA%0ZTECcApft#g*_pZRz9ZQ2ft(4A1}j?+^jIw7-PAh3U|H=_^4o#ZU_93W zTwq?i%vxxb9rcN5Ya|x>?Buk$C08ME=)MO`60pH-J})?rhyU;Lf4L`OEg*?@ioCP& zb${{{@+0E?*Jo;*Z+D`pr97vu>rp9|uN@9dF5q>fa z9ddg3d(Oe{arhe|!lw|BtxV@G@bPUKiX&{WOW}MlYXFcKAk^25=Ap5a!9yWIEWB|0 z+#{Y{ULI4)>ppWyMjUM*RGHres>+|22;TS$3!#~nm3D)3(Vnx=zzd71Lg4d%9$11i z2O82GDYD;eT}e+zK7eYE#P{KBZ@T4jEtJjJ$>}V0>GYX3wEHyWzygK2emgT?Ij_5s zwdTiNnd;$u&F@yfPuv14?SN`l-1w{iS8uwu=Xu>0nb&?9yiF4Kzb{VF4`+eP-Efst z%mNoQcIJ6fT1y+Lb-mirZ`NM8Z$D%>q@VnnwZC=Z7eD!DX9ef$W@k3(dSlaRwd!63 z9zzH*H8a9_cvfY!!eS-KyD($ngR_}|Vlf?Ccrj(>h$xQ@8alGjtx*k2=Ug&oxD*^$ zKhBpWrqAnjN~zmt2KdU-W|`Ll7UM+cr&Lha-BcRI$cmaUs?cGT(|U#xkCs~+-N72JM~vlu zTqAWwGc0{BFJ(x%Xu&eOPIEfer2DJWp8(3P8pfirea4Ef+$Fw+t>MB_CzTW2<+>A+ z6O?Gn`g)A;qFkpPTF;R{n=le6C4Tyd^;S+oK6#|GP>Lu^QF*X;M(QP=lJF-}Dh=@HRa&iN^Towie`an%ZSc~5!RO93**zE1qF`88# zKvQC7A))@}4V%ZgWi;1;B8myi?awzeUd>_Rq}6C$t>L%Of-SHQvu3vOR!}oIgq$kOqI~+-W<8(H$`%v8^0LAk!7y zJF0S8XCtfSzLNu@aXxWdX_#M%!i6AMisOUZ*RXQ8V=I^6cZ3QNV+#v&l>aj zuM=%m?`jo6#yRag-el6$@ws)8V4{g7DLMrL_=g`lfmV&Pmig4NEc}-Zx4r~*4iW^qECUxHDnBD&-i6PERH*r zg7_+s91Sd0*_4yzKOkgUS_lA6#FblD6`4C5Hy7UU zhvVBw;l#b+ESGv4#T4Z{dY$ih&eBY6IXhbqyxRwGbdZ{l;C>67SYJXMzxC+Q9o55k z3yjrf!QU}7Xew^g93+1jZO3K8WXRR}hVFm*z<}-0K!?4V@?kw15|UqVx6>`|IgNs$ zpfuhYRas@8r--=T-sdUp>juJswD$xAuaIWDvADLSS7`#!ON~tj9uVz?(2%l1#;h-( z3vfesA5ML4-`%U-TMXNz3ogtooEemc731U*3A>)@_1p_O{h(!dWbK+m6W_1Tc*~_w^*cj4^*us+q^XW;do^#Eq>fiZ6ZZHMm8$te^|ixN1IGS zM13lX7jvPfp}{oqvyE9a_@PIrl9(2u0WVy40go(~2NwTHvs;u0VSGs$DsBJa=+#uP^4= zZ<~otga~k_Z04&sHxdu5-`0Rkl%Wt?VESL-`|Mb@|HrHt=cvj%^OOPK(x(#=#-pWQ z2@$Ubm>U>femjErC6J`o=D$~;E#e7Ci4n$heZ>p4c3W)$H)-(YHOph6?L+k(1^U95 z@D@dHv;6R1=(+1&u!!7h}Vbfy!^NjvxuV`{+S5z3yw2k$m zSfjj}oueuxQ(=$}YwMLXW($3p=kH%)%W-;vkCj8(hT%?P!0o##K!e`x=~EPvbninB z7QkdV_L5pd{@+aVn&V5j00SZK*i0=*OzG*^wsquG%$H%S93%^muM$_NaXG0^iWbjZ+&Dgd09u-BFJ94mA`hI4~hs!rz- znGB9LB(PC0#Cx`}VnaaK%jvfbX5&&+i0Z!T)BqC8f!XihSs%?NkGY2lKh`_)Vvl`z zl0}IwkzH(ajVx3iRz_z?8zcd>FOx^zaNQ}lan@gUwYwc(>2mGNPd~($n2^(J0x@!J zlue2$=;PUyHudab$dm`p-D_9oe*3ag`*~jN8KqBH64)f|i_tk}WZuv`6@OnjzbH3H zix0^iTWrkMCf_hzePiBqN|!LAJ=YbQ?ko^}9-dg4j!+y)wl4XKWC$^mEHnQmM87)i znw6&EJDr)~p9YDyfY6NB^Aa3@pVS5ViQ3MyVMH7#icwOU8f3aH&2?PY670q5g<)MO zJwmlG*U`9?10ED0s1>}-v&balNFD@>TOIG;8^B)a3BQpEg7XoW7Svng_CLd4S&-f+ z)$V>P0A6sMXKl-OZ`C@obvadG!}Z@zq{lAqy+hQW`jpJE1(P!2+s4I$mT&<`=)epY z{v2T2>V1*#RNjK|Z4Fkpx_*x~nPMZB#YgLKeX1AvMv>+$&J?OeH{_+fHYUfi@tp8B z7s-jodSND(hvq3(e}I-cXUZcKl10yhv)t&L=X*> zO8x%Uy6)Coh18Uka?GEPuR%CX31G}`a~#rL6E=G)x7)G9;08~HPyA;o7R92~9H5E) z6Jt{cLJ*ofT=rQcpT@!tygg`sIa58nzc4PyQj-|NA^Xn6;Sz-4uv2KsJPgNIiavxZ zOdOTUEX&_=d;2P9&iP<&Wa;zP0~O8O^uS;oT4q2ps_iT}x^B4}ve8+rQ7lh+{ulT^ zB}Gj05S@52+X&*+e=wsr(53Yu(N8OS!1rE0LVJRm{U&$Fp>JQIFJQp>NA$*PYsKUe z{7NUI*5m5IW9}nY3zLqigeFw}QY}?gE`v_AcQ=es@&6*QO~-!TSjUL@q8 zt^p(jVOuyy_^|A;W+;cbKFgwk`B0(HhASt&7TjPx5#fpUuoOxy92-l%r%tx6hJbv_ zNS1Fln?g_(!HaX@?5wrg{*sKey(=pJRXI9K_3yPD2qZUOFQJW7OHmXmFCtd z^$}c_{(jcphF}XHX7>n(N1(ej?JVXzI$U=;(%szpOw8!ZM7KfD40_3v;Y&Z?L)2f! z9}aa87`NPa&{`Ttr}PcXt%o>2M(iKAlfIq5-qU$;X#Auedj%maEpdHzJ!fyGq`0{H z7Q1_Fhi1!_k}4{Ohi0W8V+Xr!qm{?Z;(}=K$r&Uji)qOrHKH$-47`0ey=xFeBdTz$ zfYX$}hmZ~tG#7abN$Si&d($P6#UI#K_b(<(p;>FQT%g#@R5N|UsJ)XoiRd_(OGzOv zh%JDi>xvi|M7H6-rR)}oqtjPZ>P3pC=^nEkErZa2oqY7CGH3v#X!-Wg1<+0hjo3l- zEn`JuIya!sXXF3+7EVIGSn5afMluWe${VggABLo;t__%S?N7HXO8W>)5VDvRl0=04Q(ZUA}0K;BlO zUeS&JQjat;T}A#8yt=QRC^yP1p7Q4e#&D#(E?`BDa+Ttjou~N-ag^gRDhKVSG%B4! zd29Gd2pXc7SLPt^`{JL-1X`_3AW?G1m$elhmh`dZtWd~?`e=WqX4uhA zUih^-$_#veFwg_FH?wggzZ z&Xnq>-A-9rKN|}DNogW%MW*#g$(k;^Ln>K2);TCml03U`{|ZysLA-EsYHAG@M7SS1 zuPJ?!S)2H3K$QQ}@&GvKAPVR?0|T4Rf*k*R?-vIAX~jCxJapms2)74h-uxu!I+EeU zT^P?BEuRyIy2^}e5SWzi8wSL4l8WO9jLksZ%P>`^BNmHL4N}_f(_tBFK#;5$VCEhS7LPcQlpvG zuwZrl@#t1+M2(v(+kuN=S?5{^$5iYRkI8s*XNy z7GCJ^9?B~#@S3MjnYwPy()1*yS_+7E?`<`&P z62Def=J2`mbi1dVdp_+1*0lWwCiU0s&$PR>v}HlF_vXF#E25wBUdidu7Su;ipz#gF zQ(mI8H90Ta$h7|3M?szDZF>}E;58Otmk)=~p zQ^{Rd{GM=pM@It_WToZp$w3vSXT$ZJN)+V~n01XPW|mQ8qO#CZw|)_XB9r zy26X4H~m$X%-#1-Bq02;XU(oN=rK4p1nNqMjO^%()m9|=W|kVjLTOxqNA>O7gg{NV z+CT&D)lIe)Ns1`9h$4>&G+F|u%7k7lH1P7Qo_P0{LR~CvN%R&QvakcZzY7W{-P&6eqIcH}3C-3CNzI$h;Ya*+E;lzcoOC9p3rA#_LBJ8CAGTx~ zrp~h0;E|yW=jd0tH~yGD_NrPJ3yrlWw1@I!EyB9Y@uZzlE;(y(#?ea)P75weCKWnn zek?YP%EmHOyiA}aZsZQ&zGFCxe; zBAz(4)iVvvpQnfhB{q3n6l+wyGp;Rr`0$Q)!5hcg{!!dX#^5qx$iqJkFUkW%d!2p- za^P;`xD_YKY~`lRypgu?1J`t1%Oa1=aw6C1y{}7alhd;4PJTf+uxhf21b)hUvGIPz zi-=6fqCfZLSgdB7=DFV&1jiS(Dxs+P^eMH9amFaY^)io|&EcTDXZwoC_#9ydWj3e# zr*OG%Orn;3pWD`_L<{cNJ^;2RnDZHD1{J%#!1vbjAEiHWka1A>c3$(&=)*+2uAp~aLine z`vS4}E_9!ZBrI$(k0X`!j2e9gA(K4&2rxGaP8f_Lg4_^ax8o*>^tx zPjo3yM$R!H@ztGt7XWfHMs*p*%iQ<4<0?dS-{JCjUpXQ=#66NNnWOs;LR-Nl+V*a! zAGITMO1rmvVr}lXEM;w(EXT=HGw8D_?6#)|-ZTB;mRLLnZv$<~`|4yma}u7P(2`Zj zEHg`f096BIYOe6%?XZZH6e>dYM`=w<0WUeXi4Izh#EM}3Nn!uGD z?N#f0=t`17-N+hl$xVxwzYeFSF)!ND zO_Y-qP}SSGFcm)%-yb_kp}X&75KJrPAR6=$N4nXCmrwzV%*hJq!U#G&9ibds_oLJI zY=(kHeQ4c=+;r38ehbm(R*Z%AdE-roiJSN~8*{ls0vdtmP=33$PDRf(oO_tl)R2w$ z$t_SN;;Ct|8TaFwdmp>D__P{e_RufrTy@w)T>Ix*4OaKtJ(Y zY+O!2b9{_|*>B{I73Abahd+xy-%xn)t(VYnZIP=x1gBtO3&7~obj0=Wx#s$^IwvT||+EIMfojGOhF>)3!`7E<*N ztT+3N&P%=*&D9>4VUQRgU(tHBPnLQ`oHSrDG6ZaEkRiszwwm)vPX@8uerNsS_ve(n z4uj9d=%R(w@>EyWv)61)I#fk*?}DQa5jZN;>UviuSq~PVhb>ZPz`CLqxRwJiEfQ4_ zB^*h_@$4H|n78^E;tRwK=Xl)^S9uN1nooXH1$PeiZgqUboM#6t9Iec}yfPCXe2o;q z2?MV|CMI@QyQx|URsq=ndm=)n_#eiQKESf(!a050L2z{~@CxL%Sz@fRluf?6x&i|X zJ^htf`F^}gzZriiL|Ru|*<4X&Tzj+8D%y7NW_3Pxt1|Ckpfdk7;^#NF; z3#?gCUK&G4M^dM_h4( z-^LGhHRlRjMUZA>m1Ha--SsWo(zRsno>7)MZ(JJPL6&Mxd>}F*Cl`^p)GgMszqCB6 zkyJ*Y!`FPbu`b&D0Zc*i$G=g4FE`j4q2%+>(p zFlQaym1OjJ{R+&z#USmW4ttF5%ZAc=htfT>x~0R&-R*t-BYLsKrPAfn_Z7UG6#Keh zPbh)=&L|-c3&b#r{Yc^xVn}h@&Kk8Y(YO*+jH)nXJ2vUtkVAlZ6NL_Nf-X2 z%kow$=6b#nC~scEC|w40r@5UVcIyBzZUS}b7P5rF+9k+E0l;#g#`ZO8sDi63(!yr@ zr3ZN1Jcs^J2==!4DZ;O`Olv^#=~c_!)gCbWlgkNNR1}IPS}ge=Dd4uP6)bD4n}2VD z#mwo)iYMfN6uSIlyPlqyn3&A#^v$$Wmc}7FNS!ts%a(bQ(|lIP=T#;>zY z3JN8F!bXo)``FS6kx?Gx?f?x8;sTlz>}v!h!duOLFp9#1YU8ya08_p;S z;2fWV4;z{LY;Jx+=6X7kGSu}=uC>Ldxy-dp5J0gPoEmc+n1aq`2MOy2-=wc*c5|yF zNMd{Bq-vlcY6R0QKE-9UVO1mp-L52IIr5B5R-3Bfy2X~z=>RC%0g>SWy%rolGGW`f zoT5RST!sO-FeEiqj@j!DkZ0jGKG*a2F!yI*ZfY@{*T7*ic)76k;^OzPkN3^xv6vy} z;_Ds$h`f!tGpP&O8*^{($``OL>fOS#dy`|$Q zB*&CG*_*HJcn#Hjnl|A^hfGN2t7aCU?0pqp@Q$nc$Y*gi{u1ORzq%%r0pQSIrN zoW;9$239jIKKH;n;E8gKv9s*+8Hb-M-{7xmk;WGR_$tG}Sq1qDqyPT*AhxOx|D&`x zfc-P(cN^KXvrn1up93II_Z$cGVciLs$k>T5HwK6I)2N(Ag#){8KQADBBf>(-o_+p zK5V%`zJVsq+0oHRmG53Z>TDYxRG|L@ifrG4mJh|FiHU(>9kr|XJI3r`$V06NV2JPw zSZzzhdoem>5hM-Eg0)_UmM&+Xf0Lr%ac8sFHC84e*SiVegU|~}6zK8QW4gpZeystu zKzl>|{Ng>lbVV-{;LdF=+x3vL32kH%*Z1Agi~nfy(6uz1Az@-IWzX8cuyO4G_{a%& zfbPPlo~YkGU%r#P{P<{SzA-6g>X8ciY>eRBBzv)Iy)=52^%0YdH)iukUtbHz zLr!I5jW5@kS~Kn#>i3#3BdAVV1}b}%=%8J*|p6CVnu&a=~4rAu5N{9K;QGX zm+9z1SPn>EnC-DfMoMXCx4(F&m^{szqS=`B=@!B8{wlzWc0ZAsg)b~Pk-(+8(V2A^ zVd9`>`3|_5^T4pZWe;Sr>lIYt%S4~wiBFizLOv5TR%UHfy`-PNcJz8_c-3`K)JYY_ z#uXmU26<@7X!6v?D2%9hPJms+AUL-jT740ji%HI9xW6Ynqt+{z;cdRBM~Jx2@J{!~ zR{|~0_tbULjBZVWO{-=Wn%xwF+(g|X`+4n08jjgF)#vh+7ktl;shThi!4g(1dL|J! z+*rPw@M8cnv&i!UP23QgT?t01@vj6|8}tSbvaqCT;jlxq!))iTN1TE{>AGSWxB%$c z%_L!PAP&LGQxx6|^)4HGZS(xD4XZ!FFIo>M>Km&1HA^=XJOQSVxxCPA(9al+-40o>Jsv-dX z**yg@It)-nAH{W7HaJ|UyI63D95l~)STWmnuJGVdLdDLEu!A8Hw`G!0%}<7492G|V z?`k&-QIt~s^%jM`Ci)_}3BK=np*A6pNE43MX?E+I7~8A@77(_ob8WJ=W|)y4opGRD zDFkzTt@s|7>rTet0WxI;rn|sp1~}2C6<^};LV?LLS;5A;9nYl_*bD$?+Zd;0Gqz`hYT8b! z89|ves)rURm-NRSA>Q;fy9mjxSvrKp5`=~Xl&=eFZv7L@T24no zcM{1wl>*Muw!I|T%THhE@QxWeM&os7mW>F$JHx__=vMLs*vPYlr6<>}ZkNfHN8@^Y z>W?3_KGS1`GpPJRgP#`tx9@@2qwLe8`;BWTdZ*h5q_(?_60~hPJ?(Ey41?Fg7?>xE z`^U?|Lee5PEYLTDHiL`t@ewJ=QDtba3u+_a7?6eRLmP-mfP>Zo;a(4vs2uUk?!gC~ zq3<5NJyVI7d?EtK_GUPRV*eeR*C?;h5z8m&r)L{eH3Ikl!vg3DEYx*+8`R?aMTUuB z9Z(vd18^_pzHFhV#Ch{OoRpeu3@Oel<*ECeJfFzE>0Oj zN}yjhR`yOX(Fk_G$Qu->1N|RTvQhXFGNP%=Z-Y#X@V`k1veD^gM(lu{Kpq?&1`h&!1~dfjGTvI0ZA4x3Uf2!g z%c$6PQDNcxgQTuT>X4A?nP#t4OtJ;@3Pk1+Zfndft8gSeX$fk$aE4~hz5pF)J3 zqm_v82fyfp9~#v3>a9+B)zt~OZlGam@hn`W#Uw{6nBufvT&%aU(FDu69H9y)8xr-n z$Pz1qBNj5D(>+xT*VPnN9P2@%Qi=oz<$V{o*#-GCa$!%bLXG)KE5-RKAuA>;B3}{w z4X{}AE?-+=dCPsX8Qjs;Gy>;q!D`eS1uIPVYh@@}a1et8EVTEwXzu{Egf$@xdtmM- zk+m2hu{9cWAY6=-8=tt^#Nh-nlC&MUl>#@I;0dMW{5Xm>H~x0c!=kPS7s8o3uMx^v z=*wQC=&A&J%#MfHX%TjBC$c7}T11Ya1RdxzBB5pKnCVnrOk0`1AoLyzK!MtlY&IQv z9jU5m8*{zM$jVv=DDoW)Kmap{@UYOuLdMJ4mbE8L0fVk?%hyXTXOn8wQqji&Ljs!Q zUd?RXgyL<4B438uBeSDW#6K|Xcv%v6lZBrSka5J!^AFNeY$ zp!;H-P@U5hefw6f^W};llGFeVe*8Lv0EJNdB`O=?Yj(I9^fIASe+v=D(-%!IJHGb% zwXVXMaR-E)ujf=PF4yOgN-<1xf6_YYX%d|BMITv|Lvhi(=sg~rD1g2%OCtE%itL+g zRSZ7GH<`kMql6yiS^%Pa@z-|_G7Q4#rriALgoK)z}gWBg5*C; za`YLG18qPU3C}C`_pE>g1{A1$F-kNnGdbIMh+>?3*w3yF*!!K`!?uW^kUXsC+k?DFGm_qk6`OzT) zw~bM*Ht?ysmimJ6->U!bBcX)&f%Z`wFw+p%yt+ctL4hQib|ymR`|yv$5=8$ILS(<_ zG;K%1o;$q{mUcx~U|qm|5$bMQ#>kHsr_ESwd_8A3Hy3fR)I|B|@cbev2UH$dG*k!4 zQq=su-@C}GfBXcxP7yaZH!CZq3lloqQZ}!Zptd=t9-ouWRWOuX`Utz7&4V9ms~+fd zJeF1&a9y=1b}@NW1yDxQH#NKlFxp6fQ%0h0(YwoYMO|bxUWqz83v>@muH3ExFrK+@ z=M)x(wGUdEK_=M{ScBBXD6rZozb*@U^M=6|=FiVZLOYez)q@H44UzOl+}j=>_GX54 zAsD_^(3)V1@Yf*|4*Pqb5Xw#$(EUsegHP|S)FMpnn;Gm5s;2K&$?x>7E0SYxV3`jy zJul89TpD3k&w7-&tDij%e_u_*M#z$_gmgB;Zf%!Epj^hAM^1*65*l(I85!^ye6Xw5 zCF7y~ttsq{H*(#gGg<2FaPpxj_k!r@DKhnMM>l=nQ7*@*(-*5FC?1WcQ*uku@@THV zry?(I?Kd*a7^mb)x(OAYuOUmd>=PR>fthcsS*Ll`B;F}$bq!$TZV60Ed^(lu?YGdq?f13>bZ-Wi%!4P{}j}gF} zM86zID6%`@G)y!S(_{b|r)@lK4Jc7>hX|JSC}{>2mO^pbbuLn90E`BS@2%WEHD)7= zhL>_40)I$9H9bAx&U{f?hsk7L5@x3VA6^Xll5ofmozS`tcL4Z-%Cpbu&KFI;Z0Ebh zyF?v%Bmc06Sn}-%$in#9fmu`2lb#17_5yb|g~b?K28^0=Tk1?gx+!7ay(Z~Aapeqm zpoW9tFkqXDXZWSDQ7|{ySl8nq{`R`2I}S1R6Q6_0;c~nYnLufg($U{wE9ZM()fQRcf$YDv5#^^KnIj6Lr|0m94yC45~5< zQNS8+b---W`}81j zi55TNbsYW#0yhcHS9HU*oUI;oou7mp68KX1MogUpVDq6@__1u{dMz-@18pGqA^0xZ zZnAx0deK3&@_sn}6T|3A@Vc4Y0Fb6|)>O;J*2euPmiQ9p4ev`=t0!@EGglvnt3Ix* z4@bBXOU{CgCGWNfvZo*{2x4mI;= z&k+R6)D`F_r(vd^I&n<=|1?^dL{Yl%F`I9LcO{trVns)Q%6%AaATIlhBU^1bF6wtt zHX&bl)OjbQzBpA)u}sX}`4e$vHT#Gfj4I{TRX8W4Ot`W(nyvuoQDQChqv<#4=*>_I zlcEIa4WgdSO%oGZBfS5>1VECcfRy@UooFg6Q`?Y2g+eJ56cjLkRO;f;$|kZUM})1e z&>=R`z$la&t+pXCuh$Rpy7}Z&OEf8fg==__B@D-bgv@$x>ayb$xE(cs_r;0`4+Rl1 zEM(!;;N-{z1=@beXO(YO)5RDE2SeLTbR!F%m%Y(yLM)&9e%u#$Ffl1iSectYt-{Mf zaGIZwl;UEm0|6A1YPu4$V`F0P-l(hdnSOtgibwfr^KDhof2=47GYmTiRIy~aFbEG4 zKGl!M2OvBUgcCmgL~?@q>Q^@HV_(;NpG>olnv7wlJS=G*D|JnS)oBr7rp8X)btS|4q_@FTELwZ`|}CIC|S z;zznh=E4r#9*rxcO<`rR=VGZ3;FaOp+=F)&N747fld1+g8=<%P9vMSZ8agbsB8onv z*R*X=YsGv?B0>?Ai7Iy6YWAoG;%+wq7p|~Cf2soggtYEW>rleCN9EY7_4DTk7S>kA zRztg4?MsNLPv_$djfN7KNUE)3n}p=+bOOlmrwnepTRVes@)T0>9eOCVYOJ*_G5Qnq zncGyt_hU(T*rOH@Z0K>vl;5;oO@d-i*q3aJW6UYkZm$`s)?wyQS^OW+_3!wY(jmGn z#i3EJdT*B-4*<0CwSEj>@|E(}1DlE1otvJknItwteh0+g!Y2y=k-@uaYEll*@5R{7&!KXPsEB0srLpuMMCA%0c>##sm1?J3l=>u2a?5fN?_Ojco-Hz&ZY55^2sT zwJC6Hp|)bZ61x4dF~&oF@gG6YG&MPiLH;7`gwMq;X^>T+mDm_4!%C6W(F-d5_cJr$ zn$Fr)6&r0IKVdhLE+)ulpvPl+Xf7T}ExYMXj~hCX86p9sqMThX(Ar%HLOp_~%DaoO z78%O-v55#Mc99d_mjN|_45R!S9Zn!LN@ZXAd5YO{cbVgMW~29Cxqg5QEs*X`L>U5# z!~J~AZE7P2(WEAkfG|2w!DDy=z+N-*mElg2Ma(3As98!NjZcX(I$uA6y_eV+CR6k^ zUrXU|=_`RG<2wHO7|Xe927EPi0>K??GKkUJK{@QTh(VbS7I+|joIxIfGxb}tT`fI=tdu`gttLA_Z$&Ad( z0|gf+W3u%8yjb{IxnE8QlV+w<^my_0U?|Ir(?O0s9k-2C;cKGotT6qPV(k{!8@sV# z@K53*6((D}zKW)fZ22kX@mxYe=g^h27#c z(1-MX;w&fZT6A{DmzGJ5AY}8OEjRM{{Ug?*+DhQFtg%1brJp+ciRZnUg@x2b%f@3Q zQAgam;sK@I^+;hdq&7^S%Z_PXpHB(m=p()#$-Qg03iJslKom4CZ0GP#8nhCoxAMgN zX{=Bb38O6fEQ9*tJ~^NLd-DuBtNukd;9v1Z$pkFd7WlL)Ov25c8h^3^{lzE|OwTx~ zaxOW(z4UePJx9tA1CE5sFm7VdWiWy2w?ar-2EKPDRQ{Pc4WT?U`C+4$|KNAK( z{rtvzeN&WBUiJEJxz&X}8hmj7OF8{2)b{!Zt?=(HpSvw!SnhM34!8mgZwptvXHZ}K zgpYgUxvQM+z5;Sy-M1+Zi-oTDD?r|4O{PaaxK=Fl38mi0t%%E4V~I<*@g*pT%Qci)_xq~G5x-!3lO#VUr(R+g9l0@PqYj}PJa zS)h9x(vV%~kH_MyasEqlvwVQr@VG#2N|2?=WGF!RdRC3hb%h)WuqVhpE}Bn4R>(mD zlVY*@NviJcu0>|e&Pz-$i=K$8kB<&!>(A=)z;*-t$%!9o^OcC{+3U+)K+M-2`K=lY zim%TZ_-e97*B4-yu8_(tbUtGU9)~eN7aM?m8%(x@-_Hx*tqb3Q=PWp|b&TYrqI~{8 zp^%^G031OUz@EomSWym;?&hdL#$mo**-hUjJKD7h9pql6a)SZ+d9H5NyUE?j0>gf2 z0!<+*xo2rc24yac>IJCMhO&p${z<H61ppb%Wyi28~&Xu_dz(}E%lWUJR2)3 zW17KYv$C`<;tAN=f2;Vz8%XJZhO5bVuFc(P9{J6#TGnMO%oh3fII`t_B|sQR*9ctp zUGEc{aTh~xTAF{wvv}TLM;2>ex3pX|h0oXc>}oEHnI97XujX7*fx=LV-aAUcf-jM#fgR%_;FF9>ksCuLT@Gf-0@&zN z4zACI8cl|3z_--LZ3X_PBBmhR-ER;aTC;pxeC#^Sqmq25^C~AF zYQsY<_55x6*0@^Ev9=qQyFhH=lGj13Ki18uMM zJN~D3&}RlZH~EI)lP!odnGr$S$(j+O$gyH z&M$eV`O$jNSXo<}tPZY$GRfHbz;<+O%)kXW|Hl$;4SDEoZf{@2~XMd?Zx`C`E z_Tzptk6!<;xwP!6Ar#YMm8JVblR+<1BnN`zul;&sBnLvZq***@;@RuyyP1q^DjR!) z#oHe$J>#iDE{xLb<`)Y(tWw1ikAxHdt}tu-crkRA(5M7AqQ8qvN$Fpw0)t%`xGMaU zsPRjTDCLxO%R*1=u- z-ZGy;%~>XkEm%@%w1Y5-%i^t@Tb&tD;TVnPH#J#kt2n>;tW5=416bVxTd=0xLzZ6;9_=gz(bRSg-}LMuTEjFIJThsPN+~-U41q-Mg#P` zKVb7rKx06qn~?Dem|Y8bPb(eo69)cHH7!D4mOzWQl4dIM;LkEh&zErJmF=N_FI?5e z)5Y?3cHnaqTj+VHstNLa)nHGE*N$8)t)dBEVfq6-W2OsyZ{eC%$2#hSu`#6&%RB5} zo&QgxV*I6qh>o5fNSGts^zH4zK%T^I^LD8+?BLtiuY{oekyqy|5cppO)$=6+LCWN3 zhzmjETg~~)_wS#FQVxCr8jmV~mw~5U4LlkBJE5DF)hcRgJ&vbg5mAW1r!EZMR#GY> zTn(m<`Lay-TIx?<4SA08u!){c8Z^RMWmC_^O2$Cr6i&?bO-;43l%16q);gn@wwM*T z_rO`8GWt|jR-P88tRpSnQ-~{mQ$`k-`ztWxy8wm+HnOjc!CaQNmx^7O0hN~H6dEV` z@^bhTtMb;X&38`auP}%31`?N;n7*KEMtGB9jvmT7GCF#kMSlBLad~5t04bbtzu9;48mg#8lais}>BQ3liy3 zX^pQ{N>A%~)NmH(9n|;5#~14N&jeX=P1y&zgmMQ{jh}V=;Hw_E@WS^t>~B>6fYaN6 zPGc1czwzL4k$rnRZZ8x0q`2|JEs10HavqK7C{dMIP04e~vp4GJo4HBIbyr_=Yd@`d zWI2l`{EGQsqredd&%C`*DfE&geSROzg-J1TPopgG9q=g1v&-6P6E`;5U7GR~(_fu| zfglQ2DWDNq=&zubtOVdcvtvs>(twqt&`KHQI}%D|_`iuKz#l%>h++=6T!a&i;yD3W z+5H6K2aWmIIC6ne1Nqm0v+K=$+ZigE_p7ekx0%td`0R3)$OiN{hK5R9M zpGm^vjo3n~CE^2{{|NeE@uhN94m@Se&CR*FD4_XCBY~L3{Wqlp!7SW(9k5G+e@MT| z`-YdcrfjOh`}Qifz~j-B1~3NoSUUM!;&ZzrNE{sGQax?hD!QU8gcwSCXj`c=B( z*}sj)hzsQF2FE8q@baM-)%mz5&zl2)ZAYeby`AZ83`sa}*GTxis^R*Acie(`j@(; z)%E#7zRGUcqt|L3-?tCPy9o?MF8(oOz-E*Skx`F~&%X2G78)0@n~Gf-KAXE&kJcn+ zZoZ@La8ak`XR%rl1FMpS`)@J6DH5W!Gri+iLCWllcUX?2J5>l?vym;uM(spL=#57= z7cbd?oULIILUY>OeF?f5zQ{eT<>lmdMtP+EDP)Y`2B+n8>k zsc*hLuz^h;ny2{Wm#wJ9%~!j?$G{vo$l@0q?hA!9<%@p7{1?3nD29oITTOIq%< zd6q7%LnT6&kiHdsO!v7Pv?$SjcSZ$dGV@WCs$f-syp=9&@jcDLx;CSL*%+7skm_xZ zM6V^9H12)&Si1gvA#Qh~z*Cl(@dC)Ib6gg?id_cIdwe{HCeEpTc`{#anojBbhvL1)fK%Zyf$J?DlxxH*zR2-9U>WlF++X3YHeH!fNpObo^=OC&Z(HZ8l~228)l!ArvXhVm@CGYqJ+rSUiy z?i)wlgTU7A^Zs{Gu)830;(}y;e`dz`-|GRu&A03n6+>obZxo8PfCOcmhb9|8cCtvb zhWW4I)0=BR&oJx`)31I28WsBuG2+p5RshQJ0g+R*0WWeHf>{z?Z1<_roBxNYvkZuG z|GG9Ur4mXANSDOWAPv%`NOuefNQ1PbGy~Gzjf9kR$IwVf2}(E8o$n9NIsfPVdOmnW zX6}3Mwb!~95=sDvUH)H$9HUU)A7*$Pcr$C6_UgGasngGCXlp;a^}dV&XP@CpptpPV z|H%HouOaxxlOfLqL6e_hg`q}~*wp!^wD{ep`!g;E&HjEL!HuFGFiq=)t|x0-)SP86 zf1kCSLCLSCrG*cpz=_bq`&iohc-W;y<(NkZAj?a_B&ggjR%>;gCQ@?h){=R>_dj{x zXn3DIe#@MuROKKxOT)zIvIF7>$@kh0NRy?RTm1yDHn7zFJ`yZe&O%2%-rJd}VtVl+ zGuazUY2r$>~-Sg1Qd%@@)^)N*)4Qy3U=Ebf%(2S-r(kB z=scXl>;1b4fIe3IWMiz3Bo-31)zsp8@3qY~1kTLeINxmS^On5^)-!(~B*)9;)vb2s zm79mh%vdzr2|R!($PYh*+;nOhxEgT~ry0t$+Wc;+&&m=rNpbjf*C}%S%I1rfVi}v` znnHei{a$hlFq*j;#535iOxaVEto7F2auI}$MUHOI=H27m*4y)4Kv_=f-LHAi zb+8w2(F-4hxHMbNSl7jo~7c>$8KnGY0DAwUENP-!?(i1(o`lF6lY&8 z%l8r82SwZc27N`de(fMt5+beutm2Gm0*hY52Y|sT$sM5)1vYOUW`ma0l;F2h`LRV` zzkV$$$|AxM`uDx|KbPHKA7EP>hhf5m6=&VkTC?xZQzQ+SdP*w+3-TJ6AsNraMkUxy zdU5ij05VNXM~9?#ZYPyZ8{R)i0|05(H7X26C8W-yl2{2WSHb3h1CXaMOnzfZ*s=>6 z0Kn;oTDk%}l*}?b38s8zXMMI1DAC^410=9+Ox8xVKa32ATXNDb0?h_pUtw)uC{P^q8 zqIDv8mb4)h2>T%5Ft04xRMjIn`T$1vl0E&dAUvNV~+@ckpH?8@?EOvb?ofkdfcc{>gk=64~%6kJT(r?(^v?rI7)ZK6Ohe*zix!ZnDN zQj}cX(2wH&_s+c`faajl37o;Fz>IZ5r1!9KzXL0$F;Yv4;wg+oh`#|wAvdN>Ej4F1 zV_K{4G%=*1tDLm=SzT2_eYkalinYtOaWU}ac!5fHc6QTsjb&L9h|p#)Mk|{?MVb-~ zje0KV%0__RuWN|2vZXfeh?ZT28kNO`Rv|_B)u1(Ma-7KtqIy~#O9xJ zmGAGRV$60NR`V}4@E_<7q7elMjSo2j+8Xj>!N|tv?OQroS4PIUU%trs+pM|AXw~fG z48(gzKAV#mT=CHI19Iw610eQ7BN(o`@L!V(IKz-a+dC0zeKXwFh}CDTVm7pxbSU}D zwzlaNk~l=ZL>Y%jRF;&SPq7g_2^kx6VD!dgJjsiHN^=EVdDb&cS|%y+r!%|=rD0Xd zBZ+^v*$qcDu=;@CG_Y}{bhyyenf8)Nlu0|V8@n$z*c`_p*bpj5he&+Yp0w3}L@umw z)CQgbM{sfZI9%IN`CdX2hfc)TF>UuBD~|*xsDzmA zyW+x?JeWV!n!@ULi#$Re(hvQOzhq(`qaxQQII+5k++BRHzwVxUs`apn*0FR(4}Bso zE?4r+OA{H6r1g;Cdd_!q?k5wpeLJi_p#)?T z6jKuuEV^}Uwo_FJh_aYv26d6gs%_={nGWY!9lFs(x5-qhFVR zNEo(wt8ZSf*HK;s02lU&o}S$;Sm|b|7wHrC4v5Oi%Ie?rF>2ja_I@*Tq3qR1iM-11 zGF{}Q1)7f3k>&%$C$pLJu{e|eKW)QwVbIJ6L*Mq3D`>Xkwf^~IR-0Z;c#+R%-ZS%u zy&QN6sL;>VJs`a$e_a=H4yLZSO-rl$ye-HK01@u(3na)K4s+rvQXiFO*N%CO1~yxR zk7|}Bf|d_La&j`5i;-sJ`?IZg`3VCypPc%cRGMu4xNvfs*%QemwquKU?!6SU%))}I zlP&PCx^n4*Sg#Of6cttwn~OmBY!}y|RJLF|X}FdZlCCS{D0f1}`?-Ew5xTDQHHou1 zP_^GNx`6GB5G0>*B|^v$6X>xN-7W&fY9S^!=^MhJ^RD%#%uwtF8EoSudn%{`QB{69 zLBNKrGQpv-G>7s6)gSk*q<72E2l|VK$QyD zaKyk#m4jCAz8r274Vcepy+V5-byAF-s)SY-?b}2EM1pbT*&lW$YARl>a}w8TgDEvauN!xCz-}V=*Y8&(6+z=&y3c>(=aa29)4p zC9)ZHkh#p^>adI50qiV@nWqJahkdA%oy6iL@I(j@qlA1Bd5K0rAj&MdaJmnsX3qHO zl5bP`9^raCOybAVUDFjRbg$F56VJ?2#VVV@RGZ>{QHa9sCpP9~9r$-wG9yM#H9Yd$ ze&phlEHLj@XVcgFdd{)kpxJEf`>p-1hKMjQAS`v;-E4IJZ3a&nOC(f7y3#_&!K*Y_I0#+r28cGtW@E@IU5ai0ud z_;?s&{$j3s{^I@*x=5NoFAi%<5aID0<^p!dZ{O(k>wMtGxDb)M0{Pp;@A=+CT^zTs z_EOJ(eIL56{r;VX0O?}VjPTm zJJI>@`e9G>RM@xAVMI_{UBM;%0oL;$ja9(?{McU~TQABh1TKzsfcGtAhRC12&a_`z zw&~i92n*(Un2sg&8RqTu9z2`x>v8K76c&l_1GHj zcb{x|sfpn&H#1=#6Oc(GOs(wp_`Tyc0DP%bp;Wx8X5eLFhLNx`^#q>Jr5V-lOK`$2b0)z|p{le8CBhzui? zb#w;&Qqn3pLn`=EXNgC!(HiB+H?>mEM0Zfh%kcz?Uuv=srK@1uyW14_vf6O0dPpG42u1!eYOEtbEg zr_Iko+aS0NuU0B6LoLP$9+B|KRequbm9~2I@8k47MDT=EsBTQh`f8Z(ZB8sR{rn>C z5C!rJr-j^qpLdsjzN&RkD+iMz@tr^+<2ZtnODcwl!+Mv1&2z^K+HVO498ET^#D(Pg zXi^U$4^BD|U(*fyl26CZnY(m?H%H5jct-ZUkotUG;MFF}w`|(8H!BWpo zT35zyd4kSW_n#I(%#jo6<R#W z^1K5l>`%_{V;&uKb#<^6DiB=1QUXmRx4_NX0-Vk|lK$*YtF{eIw@sIrm#dRZ+cwSF zw=Ix&!~@|0Xg=o59f@7ydz^3@f(DW@smWxoqGE2{@aOGBOrKA~j=gM~Kdua8>^1el zDh7z5opRv+kGRZw+<|~xW3X`p{=r6vbH-p5+K#GtN}qI97`t(O*KrF5;uR(M#gTAlD}b_z+Q6QHMuDEhk%;y}&nV?k!u)^$@SmMJ6C}H7xw}3y_X_FOH?%++Ln-fMupTBDa3XdG^{cix?9!~QBPoG|(IMTu@{!ektj*7K-0fo(zfjf%mipuL8YhfqLh-Eh1 zA)%#nPfUlCFPj2r*{zQ@R&{SjGi%d^(RUi*srB(Oa}IC1i1_Rl5QJX53S#g2)24}7 zIVTy3lzW{onX|!*rVnWvB|}DnD*%Dw$G4k&3Dx^r)T`abueJA#-#1$K*oWoFW$HaV zooXtTBv35pCGc({>OYy%E}vth%GvQi$o-f>gmmToKzK0-N@YJ`Q-0#fyy`x5*$ZN` z(97FCR-MzVr3hdyNB~im4;v$z?D>`V9ny^40uOZ zc$~QwaI)=aYa#D(9>*g6#^z_$a-~b2LvwK81cHaTeCJ{Qv0v=x{ANqvcmTfxH$iU@ zc>0=HtVxQ=tB#FO^+XH`r9L7U4#MwwbaDM4Ustfcp@b$%fkrO+5#xe>glvowQn(mZ zl8J40HI1@*^0|R6`CWQ#^7>)Dl07Ger9!H)Xdk0SlL8UvO4VK(EMaU6!r5XT+?BnQn-zBBZ=c-jPKjASGe-iCzHXa^55&xLLn-+~P~pOa z98ylOpb8osJb#~@62hL17`U=Uh|2G@3hX*FU)BYH)xj}4`Ze;-1dg#GZ@6~;%} zm}q|4QTjZCX!4I&{%6jo^7at2MS3whSkd{h2b~@lF{F=%=auC|94)V|I`4al>t#G$ z;#Sa}`PAE>gR#kax_l8ZdY15C3r6XzBnMCv3_VX)c-9b27taTkgcHG>;2hv*OCg1e z6VgY^_R6Abgh(VR@?qqBm{yDSXJ5`+Z-(d-LA`IhniAOqaTRD6S$uC$bnvdy^gEiH zPpO)}6D=3Qx{P;Rx})u))AaX)bH<`kpgYJ>Ih8@pcf^jWlW)kVWsxwV*pzATWRa+x zqGe|xq*r=S7>Se60TMLB)4)|VUZ#~MI*afvDNUy)sA+}lCGP(g;W8s?0*`KmVeQ=1 zE>TxGpzGM9k5(DnrMpbbE|`hx6k=mbp=Fz~3|q|2*eg|6ym(srH13M3qwpqiaEHCN zLbnyoj+?nw$ea#Fd=zi_wY0260u8iq=H{YMV&?0Q?f{E*FLt>6YtU`$MjHq34PYd*FPG^)h2>h+5&a3q-= zq7-&`wtxfR8|+|06bc8Me%8ohjiH$y1hR+j&j|~thYfS-OT;Vwzm#&D4`=4X4J@?t zK0`>0!gbxSl#xrf|GjtWeBl$j>AVSk1afo)vK(2#hndRH5S>$Hdb6AZ0^sRvSqvmG zmOKw{z7K*~<5!}JMEID{+P$L|-3k>0m}VB_j`ZA$hPfs)H5=d@W^W#P+jiO!NjWi| z&r-l*1kx!z8x_E{dco8p4$|R$b+lM%=WWU*wCK$-1tA%>G zDsJv)(s4%VmjHL6NWXz1*tp?B^n;I|X4#HMtBQ zdWR;_K$mjoL%q&}w~AF+13stA5y3LAAhgthZ%eAZ{4XB0O<#t7Z}#q=5}DwHul?{k zPs5i22jZdjIYq3*>ZVA2r}Dki=9jCUF&HY&0ving(K@QBBcjb zT5Je=Sjt*d+Q*@84jUz;s5KCF=t1cqC+3hs&lezSRtw~+JeGHQO5N@s61MoNNMOJP=txDPaQ}iKN^QP!R2Sl-*>iF=*|p7?b*`cW z=q5iiP{%KF!&b(!CTRT;_Gyd4OFQ}r;7q9 zXEeKdKT)UEq&)4bpRT0ZYJTrDiE`NJda!65n~r~AL3biBTrqkydo>k_LgoGr-_0&P=&D@pz4pD;iwceJvwgMzC7;J*tC4Dz zH-$xD<-GZb$hbv0|vq+ykGbD$PjDtzno+i9EqwUPOMZ90gQh1T5}I~rm(Z$ll(?* zAP~K?FY>B0qTEA33{5TK#damKqaIKVS^J(JKiABU|s@rx_M;D z&3&^C;20{?I&dW2XNKbgO8&p4A;wg6n-STJ2Dv2e`nW*k7x0AnR15D7;El%Hji0gD zx?#mk6ymu7LdIv2TRuPIHsU&P&DY`|n8iLGMU6W8p7GLtNzzUJQE;?mYC(ouAh`!eqQJn6{gp573XKSLN~g{A1W;Xz(JCNsn4%T;vly`y{eyk~Fy-r>AZYJHqHR z)>#<(X{&kQ^N4;MeNw9xb+!sk7TRcx@hhPNab^u%dD-k-n)Y4=8a`y2OjN$LjPY+y zaH{v1wD`>j#!?QIxhRlFP7ep~7Deb=WS>h@Bz-Vk0AIlC-F1lb2bF(JPki`9krUEc|OVrYG8wl3KO3GIu z62^xseanZQ9DZ>OI)|45SPxdJ@TwQVk!Ny(Z5H=G5+nmMy`iC~3w=xM-SG&tLd zMgj|u#Mcq~a@d$#-*EfeEKDi-Ug|{+h{l@43)bCsgZC{iON^x$H*$w)wTe>M zU?nP!%6%$RYnTrRz6@?1ytMvIa(?0*jiMhQS^*q5P*Ev#3x$l7JlMT*fF^+a^RM+Y zhbUOrx;}${(Eh!EFX_xC-zZ5LFy&nJz4pRute7f2-uzBO_F$xUY~u>=P})0bR~z)2 z0Y(YP6`97Id~U5kqJs6vC*%~s?MYdR-4+vATHN4L@lDyiqgtMolCTR{~k}# zM$S!n@&|SXkF}ATTb#**R}CKD)7LY+f7e7pg=*Cp9w0lA#1|7||M|i5kL;*T)GO4T zMJ&>=v^KCEsFv^uRgL!53m-SkrfQnLeg}@tUQ1N5a|0@|hetaO7P8sdf*6773E0J~ z#9BJeoq5#j28ruY?ker}@E>sowI(KtaTmzfuZrb^V(Eia7ihKA{kkQnqUPmgWh*QF zqG?r$)%9NJuj#2$^Ej$BHQ67?9D#4k(M)J4$9TtBbh^i8=<2WzeB~$MLw%a~tuJ_Q zh~aOe6?~YXk*4}a6b$r93J4pO6^UzVro=jz`4z^TyxjvN2{2M^+KL2!K_WPtX){Wi zKE;S^q8B6MANcgXk?9l*v2xeIbi?8H0iG9^q2{*(znscw6AKHoR+RRgB5v>NczftJ zlLN`j&!3looMr$*&sTSckh{Yy@Kw4wnMz`l3S%cWx3HK2@zHyd?HNc)-`gd4tbaaX zFpit-~BW%W1We;qajy*}#Xg4iEg$JV}&YBzo&PTx!XDl3z0Kd3<`Gdjyb|HQ;A z8vu18XBEeukFNKFGtj+x4J@U$pl!`qaSXg3*`b)Mbn;2!Mb!oL7WP;Hr>7F%eKU!$ zv8RXS=wd*2itM*%acSx5gD4hGqGy8Wvyn}z0DlM$mnt2`ANib#Ub*~sTc2OI0v15U zx_O$oxHvGk4zuTk-WnRp*0r~`0qe{SFwgqcuxZn+0~dL5rk6@~Ys0GU8Rz>S3=sjK zL4knYPlc4e;g(NgB8Vfh)91xM|K?1@L_+Q#R+c<`m#_1duS=Id3U?KdI&PO*ieOP) z`^5>$lROqW9syK%n%VE0m8Rrr0=ypdi6j%HrKO{2BfY1mr%m2ldqCa?A*;RYfP3(r zrg7c*(zW-ige=n(E{n0$qv4cyRRCo(-`Y$MAKyIw630~UWQ_$<=)e1^Qo+v_))C%U ziYihkYLM~D&WPRf@`Fq~-BVe>!(vjqY_NWB03Lg>zA9z_v_ZtgLJ{mrP9HY<# zaHt{)jW{ueCXs{$=p$q?UK73gRb^he&{`Pdzf6M{Vrnb=9fP;&$JCU|cEa$P4qL>K zl1XzWHtwABN#R+uldiR*g?T>b=CwCS=zzEI)Nb?H?|Y~sFz;^M*Q)P*To(Z6sIxa- zYn&MuKuUuWsEQnfycWFP?^F;LU~;;;>%ZunznZkqk%|r4MHg>CLrW`T5o3<$jNJnh$kU_5|?6cQ3a>F`g)-Nfu6J41ovn*rKN zbs-6j)Xn6d1H9N-;+&shSgs+kD<@i+&!BI-dO1MEDhdp5ZbskOc1_`LRESdY1KFRkFoyAHp2&Dp956y zDw!@aTJzBJvWd(Q1g4}SuYPphT37q_*CQi($7a_@n*b^n?Bkgp<=fp8SEYZ7Sa;&K zeMJ@7z{gviI+;;}pwx*Uv4ZTuV%kxj7-TJ4OiZ0}689_oO~T}Q_%rykO=ekx|? z)H|}JJ<Kwr7t#NrQQ%uD z)yKg31w3oyUAtFR2wotEE)o7XR`BDw-9=WVc$jWJ_?{|M%|wGh&=a5 zzX1oyuLX+R?$3QV%;Yx;I3s9+%BbK7%Yku^i1pEd`~6YENFyysV8v_NCRZHwsUq*1w+ph&A zZu8Atq~qJD#l?*#Fhu~!Hmo8qk9KaxR(6cNc2;hE*z;3eE+WX?em2>q1hiRT7FlGy z0{xGSrdD!@1n$neb4eJykU56O;*vZE)Ff&?-!jGZ(K69{%h27lqVz;L(0%67OB!V_ z#5eaBq4`RBZ?xT)=wD!JZPa_s)s@jEQhftl%BIb3LTg`8Tw+P>4HG?fa&jtRL!zr~ zdv3|T_~W&Z@+Uqd<%d|WBbgOnM2~4($X1v2W>5XY{cLaZNloAzMN}$ZSh7pOwNdE^ zS9>D{?l%DWTF`Qk!<4U3$PAHx#P~Wsz*|{3Nd}=uknm4$%y`QlO3QLePyuqxIi0Bn z)utT*3satP<$H97qB7wi%)ywN5R0v6r%~p!vdXFhCs7a;#dTGNsJxa)1QNws!xIm zRp5Q_x60`#ulnV8G3HIm^{trk_unQLGRVgVRxBV9VbLEiB`Ok;fVl#REmzR(yY+h3 zQwYeB@x+Hf17lM(H@Z+NVrj?>oA~HZ=INhN$I_*l)~22L)`ov&*>6FC12?pKsrCuj zQ?JIsCLbhny(n@KBXZFNY=rmVb2AW`1AeeUu4oQ7`_0s!B5vzlU_)9~*br}X!r`+^ zkr`o2mM-v#{z9n-yJ#^`SEqxGLhy}Bn6;Fp+>kdgi%Bw$!{&*x;8ps52(Cw_EQE@5v${X?oQDuU?f|BCq?M(BT93lh6AQ5q#83yAwZ^xd7{YlV;;7dKe zAIaj9I#gw8QYFUhQzbg=8{9CK^hs;{U(F(%BHn;g%-|KC>w%~DQdfwBIP~cgT_T%B zi#=l{ADWGQKP`R#tFVQ>4KY8-`Cj zkeHya&PO$*=qDnyzi)M5<#!)^ig=84Dh%R6ZVw(qtpF_&%pTd;ZG48Caoh?hY^HN{ zo6B(aDFo~{K9$~W@2A5c%_g4g-x^PUT3W07yZ0E0%@}8!cgA+!WrwjwQ}6!xZ1DG) zEMzQ-1-$=lT0?CZ8DB8Jw*A7Jw-@Z`<9oCXYkPWrP0!Cd9q;ytf?XyB<<0FSN->c0E!KRJ&pxG ze}lN4dvt7I(qSkWrfWZv@udGK&cBa~?T2lF<1a^FydrGqccEm_A^W!bY)Btvfp56E zHYw;3w~mU7i)#VvB6^3syvNtx)VtFECnj5!J`AXq`Am8KSlf&CGFl_4hDJS)wO-j3v+9GyDOZAkIV!t z2?~5u%%lfV0`$Wv%FAY-Iv~sJ%5UE$)5KF;rDngz`jicmWgbCAf}*VBq8RCl@j}G1 zbE}zqH1aE)Y7Bm9w|eCwNj~#C{e+~Nw$%GaPqBzExi5jhDXvk|y z4|(-F;Gu)RmH|uV7Kr~Np-RpzJFh#fF`Q4B5u-_tr}I5c!5S8B|JPF#8U{6H3rF*wWHa*mD59B6)v4d?mbw{83XxSp4ZoAmHiYl z*kt@A?@#BpuvkHQ@FCMnTG}<+i-ZKafq@uryHYpz5TN#%TU>91Mw|Ez$?~oBtyAg;)eAe9xhKK?^mupDPMna*!gFw3rfuUg(^wr4PBIi4D)nIo8VozJ-$4B z_>-?>Liz7+JCfPgUxt(rnnRcrV-u2WrJI1#2cwnWM@aPirE!3F^_JdH(<0= zSkH-}lk(k>Uy`*Pzpy45XsP{q03!|xkLXq!3=0R15#@RnZBO@+MSSu^BN7r5zI@r* zl3!CBst4t+{Xp%2NlJ56bTz+0dtDt8wF4F0|74@zMYcHdi~CiO8bni-+k@xFVz+8` zl^mWaZHU~_ug}qEH;a6+*B$(>`xN-^Oho4VkVsJf!N8@CV%xb3sQmmM{-Y>L1U@=C z+Wwx%Meo7utM%bT`)%O!p@|uzSt|xp71eC)_Q3CEkC-&m1@h@;bQ7p(5io|v7VbOz z2}4^$oH`(y9+2>xU>i$p2dm0CAb(}H0&RhTE^`p@MYP%^5O|q&`B<(?P^u_=^5@IJ z_aH55q8vDc1pqF3tE1S+xAWt-d2JU0zA>D?yZ`-8tLD?nQUUi+GEVBfwt`RYA%={Ip)P;NDo5!zUg;dKcdVWqvf%*T-+hJRZI zR^p4bl&Bn;f^h&}kg;+nWyy5N;3x-wPtXk6qsvxZ7scHFpL=y()|oB$I^7)@hpe$I z#)f!*RU5V=`Ex#U_>gKpG>Mk6iEVxrcOToH=}i~%cw6+OWf)5Yx9#THuGhKm@`JU5 zRoLsT55kS4!dmI}9ETjQ65m#un3t;Dyfd4d4TKd^r?7kD3Gd%f%%#@0*mJ>sKR@j$ zBDcA1V`DXe@b?Gl7vlXq>#S}}ppfC~l;)4Kb)sv@t8{iPBXrXhUJFQxR}wX5mVZhb z@Ek+#_Xs+a5=Zn?n!k$1o@&!j{eq&}#H-HeE~OKnEuw@6Gq^PIU}mNcs_1IMLFzqN zB2iqRNgIWx9SWo}PNftKddm5=6(IUr?CEq&$(QepBlXmqM;{oIqF7b;_=t)phDv4L zbP)M{ChU==NwZ&0t87fQ&`8k0ZpRb6YH`IdcPuerjn_2y@nw|ijpc>k`00b&((di} zcI!o{_ie9qS?s~`u@@7g>|nb35g7fw&&X4GZ9W7L>qTjryH)0P5%d0H)LGMQD$mVT zNS2sIh(b}qfijbX)pMJh=MYJuKS0Cw&&FnVJ{7Ju8Dt_J-Uv&r^hnim1b3;WfY`0( zePc9{4*~I;=m&V1iAZ^QtHZr7l`bl~U|9GecwAfLR}VXO-%aR4s(jj=Ji9#ov|#+az{9WMkPYcEY)ko^VD*g99_COtE4FBZwxh@QlX zW#ahzDrmU^0~~)H%mz08ixMGs1JvLJ=uIpx?o3jc4h9L}#|!T@r~PeYWjWlo)ij2Z z*gN0jhxo@y8Y+ILkWM^rnoHE?E7%wb1 z!GKOez*5#xWr|L#%|gHrK-WTt<-dQ{jja$Z)D z(Ro<)0B}+6_xrbbkDb{)QTt2>ZmqybZJaS1bYHR!Y%dN^=4?J*&CUyhs*ysxB+1sE z=N_=DE}yF|1T3GFs5UHKapWfm9AERZsX#9t@kT!udNrT(4pD6oBf+=M*LXXcL;rej z`L4HKYpx<-R-g72q#IXE*BF7Tqswo5X{{tTsmT}L-yp8F6aPH-wW+xT$4p;DLmw3a zoE~&#yV6DV$eo4{&epPHvUK>mGUw}8zM|>jJl`3DK0`>_A2+?Bb7~$u2<(hFYFgfL zN%h|oh<%LI^OzLoGZx*YGjA^3yWl@tQp62TfTBv}FE!gTi&j$}R7MrqjIl9!$d23O z|2g>-aa6KQYBz{H4#(mVrCRi<95Zo&OfU>RlH*%+T$!<}bSNX_vY3)@mU{A?PwCYL zttjy`ws$H^D=Z*(Ax+g!*CXu?s*17MEO(>f%&MIAdAE~q@^{ItuyvmVDdK`J|yA< zYM(M3oLZJsnvs&VSs#^0?z}gXxYx`>S$@ zlv1L4EWMfT8_Ckg&5j*T@>0=%)|igPIe-3C86IW{toU&dSyA@eC6gwKfk{?^I7O(G zu6>O!#J`gcW)zf}eHtDZ%->vH&P!Yo@f1pkaV56;M=dqq+IFi4}6i$S%T1R@WMe21=0vMws8;F zcfzaaz#eM-4!b6pcS(J>#X{uAVT--ChIQ2Rb$OL;c`b`{O}ln|`gUc7h5Q3}+Gne# z5d{c7Le3yc**Y(o&>HEgq1JMBfq0$~Occ9(HIbd*b2lH`N8k*Os(>uN{G33os5F2d zapV^xM-t5$``8ZAqfde==|jJK%-$9CQHz9!hsOp12cu|}Cl9r(uGKekJR8+>ns~vw)3Y}fX zTXJ0U#PMYcuk)gu`Je<(Jb@VhoP;M>l|f{|H(FWXxUZ5twU^M{+3WF&LoltiCH|R+o_od@Y%o$0#@<$*gxu60}P2k2qI%_LuM_E!-^fE_w1pYtd`rqXyl@+Zn#-(qr9>{u= z3%55{0EI>F@L&WKe3z3a+%p>QDM@P$>EM($`}?#e8qbE=`HxA_2B?PtTCZV(T%MQF z0!Vx;KC&NtdZwk7h;OQ;)m?3Y75K0?0g&ZE9ZkLS(6dHoxTgEn>~9|G!?R}(UQxf+ zA^Gu-T42VEJXcZm*gt&0ON(ls<5%Q?BG0EW-tRpml+bjI{KTl{%nMEV?W5QA+vM;0 zU3*WivAeI^c#GUB=O0fupg-fzPQ`w)rR|@e%JxuD1gE+0GOcVVW@gB`SR>CsbJX=b zc>RKSzIxGLABL+BNQn5+&Y@2qQfsN!3p$s#Mxm+MC zY*nFVNa_@MjQL|uLGJduM`ZkSEo+OX-1qr2QpF!w5o|=B4FYT3v5)nFBm4Mx2uLY& z9$4@mU2Z=Rn7n;GyJeQ5qdlq#A#OEnJr}Fh&m?GL*6-jVi8zUt^LU`|SqlC0sy&RP zEM4Rni#+`@ytQF}S^m5C@)GW{lm>Q@3>}`hnntn$-3z8@>>AoC%e^MI!NxnoIhKSe zT&VfHpfx!rTsa{j*2C`Xcf_~H&%KRa>39S&E|_`DkE}l666jCldu8!#&qeA<^t-Kh zhaQ_7GURg=SdbxzjTAwHg4+&>O9Xj&$e*%Uw8ZE%_yM{?DGZ|>lPA9B^hcIPjZ?|Z zpNfQ9=iIUUGV+?9$KopVrvL{1?Nn0KVga?(`p?6Z+Ulf-M&yZ{4m6RD-b>KM2$4#Z7m-%L43d`>uBTSB&(*b~`)nSoqKK7)h~nDXS~-mFrl-yEyHG;oGae8m z1I=^n&o7f>0mIjdgt#`Y42Qss|x&|p|=fz z1LsPo?`8y#Ko9k1L0&JF3;Di;&dTc8Q{o;cMU@dKh>2SV5r0=(!UDpEc>3ZB=Y0G=B^502KJXTNIQj^2$<$4XWM zf;DRpGZNA$wU2Inq||Y8x&SuYep@~MSE;{`zI%BfRT7&fb!VP&d5XXe(;C34bn6Te z9VK-ZqNJZ|HM@TsI&C&g35|?Bqt!%k-^dD@EY;~zMTta3UzpUfO%rO|wyEIy%$)-y zINl@$Ix?FgyJb3FQH(+xN;NiAiODA~jBy$=S z^Cn$&QPoeW3j9xy_2GiSJ8m-tNsa*ubfOk-{b3mn&2V_m8miAJmt5OJy2yi1ussxC z#8Xt+e99~dc2dMCB8(>3UVwQ1_}3?qKL*Y>t6g#{in11Eq=Ujh+wjVX_>*(QceZqP zLScUTY{3bt{Q?fTMT>S&=`SgS^AbjP4!T4>_+yeU49a@9X<@zF3ieTbiR-QGUgt8) zQScn_IqoB>!9WoueE5hs>{1Q~-HFKj+oXoWT5Pb8aZ0ntWuq1p=by*zwnf#V_CvBvJJf98| z*A9_kWHS9d-^UfrBl`rKzC;3XLLB%y-^9akvW%4fd;to~#`Teet)->N zkf9zOUC6S#uv$5(JI1v_wKNQQoN3LQpDUBNj4*vAx;bWJ)`sR*-^%^yvH) z)HOjm_QF}{hOvvtXg6jZ(6ndD(v*h~LSP*aRk+v<-ufn!Q1 zr$=XY)ba2Hhyn&~t508OQ=5uStj?5?Glv26kssxG$s{QiXO}RU9(e)M|zV-%;%{6349a0g><-u|T z`Xx>{u%3qhFg}$b&q^p!1n>sS`B+290&fSn?WA5Qh5#-nsD~>YS_0K@KN?=)C;~HY z*j#gV1!~C~8C$F;gvX{KOV_Cv9^XsRqu15zo|STpc%V6eKV)VVbdsbBx;gxqhKG~X zW3K(BgW=N3{qz0&-%mBrHkiaouas(DRnl<}nsgH}vluu|19Cx6*Exth{|%W0Jn#D% zYw>3+Pu_742PD@Vdjj*4~k z{{*LZ0RZY38x#CD%GWPykJhBH;O3ixp$lP3WOgW&<}rk5AqEJE{JBW?TtsZPO>Y=B zQFxXZl)Nn5tbnkOr+uUtilvbCIG`lZ3Y~Yk(PppNQ0@x}We-;42(mxUQa1}u*xvfX zZg$1EEqLs~5|yhK62|xwQE30U$?Kp5gp?)J_BJA3xg8H9X^AG3^qrx^-AEd0dcsa?Z1lPO?;h`uU%T8W?rAhyJKNBmlS7)9Rq2iYs)^|!p>Gon1b;?gCUda(X z(OOPC{J7i=`X6h)>FHAp9edSacXQC;eCI8~pn(ea8a8WETGHb?OP~$lLQGI4n+*}K z)>iRF_QPD+kG%_xwy2}HahL}!KR?C>Z~N#l^}mnBPP4+mFZ4$lx zF||0lk>F)|7g8RpL&5JI4i5b$7_MJxf;Yd#_#KF{Eu_8^{RE6T<nOg6GoI*vCpq2d0&$51xmI!_*WLPc07n2J&5w%#glq2eU}Odp zw&Yza+V1MTS$q`F0?oqIbhUZUeF_)^qyF3I!PLoCjxDk03r;-hs;VQ;ZS*F7{J;h{ zU!FOMkd~l-fO2JDzGU+_f9VWwm~KZ!GPkugvkA#0vck6eEWDS3_pkhZfq`$me}Df6 zBWnvlGbq!N4W}I!O06P7Mah_uQHcO!1QRD`%Q4WGVlI0zFm$I`Y_i^%338|y0(?(& zF?vC-qj+hzPEzoc9n^N&kr&DTA5~u&Rpr*TO>HD4Bvm>jHZ9#qN{2{ycQ;5&w}fa4yV?_ayOM^uk34t7cwk4fic z%dbX{^Icqe)ifpMmeSz_c;*IKAZ{sC@?30meiYM-QP;4o(|4iE;>aX_0MWk{<;ep^ z6TgDdItA}G$zTK*XkbceieeoVMmNYPX;b@k285ntKDv4=)L6ccCD@+#Z!l%x zrhjX}K#47f7qw;#=WaL4H)usHJ1S7TZvqDn$v$KoA}-~g+1dW%U_lzsh&-BAf@GYN zszS&aqsnjEobaaf6YV(ibaJF;1%`|S!+aKIk=TpoW*xrFmRW7F76s~C%WJs@5I7tH zSMDW6>e~yp6R8)^{9&Jq#4uxtWL=8N<6WS6;n#MR=#nOn3oK&QXV^jmz5VojsY~|4 zu#6Cf!!n?ieoS|(9zN8oR7iqwLZpEKNw1xYMHb7$q!TaT5zbVRs@z`TVet1Om|HXy z#DW;1+kOJJi^xLX?(^GfFS3rk2#6)2$dG>{<8!NE;OyZEOQuKSmyp2+Y-Erq%z@Ak;Pnm4nJcttaPaNn+$7+~DGin@`~h-n16cRLdizPR z@!*P5zocA_)?>EEMHRZ)2l%?dihbs7h95WlL5G2WqW9AFM<=@@CS893~vpIrGKC5b1%w_Rke(* zF$;N3P9-onRMMGPr7|u{h$zTOQaO99a56S@8;<9SkqNP{zZ``Ee=X!c1>L|?ijd6U z$<2J7?L!BK4?x;AfDht3V*qEfwgn3TbLoP587u|@XJ2R=6SRL5E)vHKgR|0|%s7X( z$4;0^OZtV!Cxb9|UcbvPiFm4rh_B#pnO~-%PpZ9kb^4nq z|C)?^>7>e1{CDKGi;d?%Fe|EXMhg#>1o1nLXL7@UMT?C3E~liJP{4Z5|Mc|jz|-Kf zKR>@-9xhsHcD_AnI%-LJXYy6?Uq=+ZW40CJPSf<3c6R?v?=x<%lG!&q&KAQ|r!mYzarE$Y&^nhmXCs>9 zekoJatORQ#W-y5t$@R!xA*st2XhOw9sb37yy4&|izWP{8XhTq$%7oW;Ea}4Lx0RyS zxm$3TF|)(QM10uUs~L?%mapF1kD|~x5fKrM*2!W*Le?L}_$RuhlqEGX|CLU&RUR{D zeZjld7Z%L80=0C(?EGwmeT^V!|EeBa29>9qH@Me(0Ko|zgBR8JnUJxe&pRNMtoYbciTi7^O|;~ z0PM}LtEq1OzxJlrVW7G>eEYa-Mef=8-m!%PJiV8 z5#f8dM}5)y;z|9&WH#~*jE$+Du?8m^{b$TVV1#Dom;l=aGh`Hw&tL!L zn%E|qXNUXYfdh0ab!0Tasb{SFi8Rfl(?E(wH#2~GG;LehIXd*rj~<<)36Wr#UsTvp zXi_iaAoff*q@lcU;zZgRh%ZNN$FB2K=N1bw0CRG&%Af_c>}SU%_er9U0?vqCyh5Qj|bqhW>o&7Bqf=FI2XD~k?{4_;k|F)|h-7v4-k&0nKMc+I}h!UfI=GM-4 zy+6b@m?xAW_jGbUe$a+G#7ImE7eR3C31UjtP1Q1&JzO75%bp_Z_G|2VVkCB*l@x7t z!j|b8=>%|xTOq_k1iB%#uC07B#{ThVaUCGCYZ;?F?Ogw!ja$oiRYz-#;6z5jFIDzC zsi`v4DukrBv?BBFqjy02@s2*-Gf8L$zTSw~B$W{AkI;-Ca~OOUL8Y>VSJZoxu<984 zADjj&)J{F@tBCDk8{Jth*b0hS!*X`etRJ!Sn5n=MZbiD)msp$OgE>_ z3Om{0^}%#PrDDzTeH9f%EgUPw=7;)`nD&^0Ro%CMo?Xj0 zPd6*S3IAFUsZOq!fT6clZB&hd{L1F4;_3SflNY3|aLahWA&O)W}qtO_NjS(!F zufi{iZqljOxEg^}QtEODv0|c0(5!Xfo(^bk26>SLEC#?N^$ZD;qsQ+!Ss-gh^I@$s z=u|!QUYCLmtZD>h&0fQgkIvgRF*H68u0%3g)yVTbRQgA(^4PLX_QSBnfKymkS4UA@ zQ^O9vI5>#Gkwo{{+x{5!J2UDxQ&hmQeAI9CzCYz_&3*Q@JhPFVSq%+@6brTSDQL9i zRd8YCbs4RZ1^!))=NWz!v5}0qmN_dnS0KOR(W+2%bhplS*$221m8nxG5Xu zN&c8oskr?`RtA`VR{r?()vn0Df8o1%z!6cSnz_uXUQZf%Qiu zccwcT?&k7Hx55D8pA$`>XM6yJu6mXDHS(@8`Bjn~|1m-}g82wy28=S?PNk+EtPH_P zb(&6hO-x8olhyGHT5a}tOk;k;q|iv=Gq##i+W897Smg7YjQA^CEtL@Th?QNmUvHim zPopa1d*kyl9kcq8c*nJPN}lrZ_Y^S}TkadONxpzpR%bG2s%A3pmR6%b!*=2%8u$*F zG}CNH*fEX0^OzF&i(#Q1%~Ma=lyO%7y-;r{dtuR8(J{j>(wGkp=#l&gF3!k>%O6LTTK26Uz zZ|=){&cA}8EM65{E{>ZEUOl*~j$j=J9It0fkbo6Ek&1PqYPzgBFwCf1BP9NwrG~Cq zuGg_W`d)pXF{~nv*79w9Uu2X0ck-sMf&g->+CAw5x{#9G3nTV@y$`iY-v9F(ZqXMS z>TLJv1Dmj>ms|RM?!ER?T%*!aRp0G3W(&ER2v%GNfi)LD7{bidK;s6s6YikV`p#;a zpY}E%0Oi$8rz6!>tTO1kFCSA^xg>b5p&0SFoOTYvN?4NG|M+nwY4^Uf8%&^uww7Bx zp&6Tq@KJ^%#tDe@bKaY(sji+;t#G2Jn6glLJkaraLSO$8L!qFhT}3C^S7f*jQ00n8 zR_drZ>2(DCeDZb2)6d1E0>Bhoqb)emGIXurZ3pL{O)6^jF|ZvN*eYrO-$_&yJ`idF z)G!-SqzrZc$hC}en}gULqL4W35DwSiB&$eK1L+i%(CnHxFX4-UJ_Oj^cfNo(A54%I zk8TwLP9}>W^9Oig>uGi-t9xvv1D6XOn2tO*Vt&Acoy@ZNUdlY`i4V7 z#AWfy*CFGM#=j<_VJ?Wb`;FjMo;($b_l}!C&mE)sSedzqD^P5e@!n;G#6!aTqR}Ue zuGE{MW4X1A$kIPRVnUcSvwS6i5bXPk5C7;;GduI52Rqm^`MF8GnD*fzvRa;}W|Z_6 z+}`Z5KgOPm@ML+*sb`D70Qx^}FOkLSSG!be(xiFysK?=0hU4+I#v?hfFOUv7j#Zr~ya0(9!sz<%xTiG6ha!6v_M5ock}-p;};LT%xCXLoz^Lity3aXI^>=W<~VI3+y` zC>ncKv8AU8etVZp(!!9 zSQ_l?KcAT==GI{qAj3ow;Ov&Mx6l|G@yz73Md50{;mFXT2?Aj$y#Q$BMeQQ~k?`2kT* z1r!^ud3TZXmD0JVC6sG)OkC%%vq3PAH}&J&R}~5?XOs1TymHHNfh->H33~XqU?M)Z zW5CHX6)tw`@tN1uQFWPTpO$GOZ5kF)Xg#W`#IlAN1OYuDGlIMv->4J4!(W?4lp&4R zAp#*49eF4o$q&l0SsDy-9&NztV9FnfxdHf;1M3kAU*HBN^RJ%D9xOEJ87iI=SGEDFKoVNff#YY`M4_>rEA}fmwBZc?RQFAgDaW{+u)>L&1$FfC`BDO? zeScm8Gc7}a>8a7!(ZB^=e9<8!P(eFJwO6Q-c#(^S#tdK5y>VC2od;}18F>F!dV1R} z0qX(8zEt_r5Ucw>6IM1RC4v9)uO<{Yh{)YmSpvs@&>@E1H{1c4EC1cu0@Qqb{zP?6Q zE*OrN(EjEC1MyLN)U1Cu{joWc>N;;-cb+E&oCo=73ylA5{p5JzwIue*XYSt=CwrHQ z79W#s9xIv%9$a7C1qNRY^&ii^jTSF6+g#JCsP9e#5THNy0QOzmpUV78ljb z<=_qlHZ{F6;DTgOuQURQCM@27?F_m&wiL8$+O=NT!22g_zbZb_OMSCcRj@spwU{B$ zlz@QF1>_%phW#5Z%x_5Q%J{v?qlNyRuC5@@LT>~i+XYVTZywGHvWD&Ega%h_?ey)j z@z>8azVc8$GwD7Nte8Vxh^ef0A{&qn1 zw+g()f#2{BAfeZnuD~hSflLUH2~KXbTMBFB8>Hc`CkGPZ*ew!};AisgUB2D_`#vW4 z3HJ%zMkn1p?B6}{(wcVPjLu9Ee)SyLm$YN)hgj&lk;;6vxD9g9=BX!=%}b?K4m9rf zO6^nb-5uOdr;ha658A}Z3M3xXYt|a5*S;&#nW2osZkpjm#%>uKwthI`K3Z8dK!kw} zLl8RE65w+?@*MNd{4KCGyuh|4r~j64lp!|~q#8+Yoq4Mh-5(y>Y^DLjs~JNi4b;{1 z^M~Trd&gsk@RO51lI1#E5)L+fU)cK05kBrqq65w0-av%BkV=QW6%=rMxO)At6uR90Q+&pyl60!3?yt$Zd8k#PU$Ja^Tr27kPfUQJl@u+gaMr zU@bmm3j}mB3RSy(h84p2)NXmcC4(;0bb7euC~A<=95}ua|N7Z=aa3x=y5st8p=x~z ziMgN4JBJ>yNW({hb`5U}&Ry#YuLl#{10245n8vWSxG3-%pWJf}$YXRR8orf;(<*Ov z%$j$GU%5d+z$CC^j8W(vw+-M3j*1pUkfV7Wr-Ol$HSKAmZGue&<;8H~E%jNh-8z3z zMI_9>`7Db`%JSxoOMZ7Ttx~I89#axDkvWMbym?6LiG8(A_jebPvKjpWMSZNEMvs zqGC=%vLdTD!=4w%Q04PRz41NV-nC~7i`0vdVjOS^rusA*h^^#OrRIbpb;pd{wE2fq z0}DkGm~|OZ#v{du(jb3&$s*0VLH1d}=@q+nsX^yzN}u$mqPYN5?5;G~>o{)_;|(}5 z+qW1i0zKEBx(>)UR9yzW$ux;B{`Y3)i|he3iBkq5uvj?hi#DD~z4EH*qKxgz>gMLO z@|KD#b>%1##c+wkbaos#dYy=);*>-I3PPIC)*b+Vjl=X}znq~Y_-^HipqcfE*1gDs z8)2y1?HkTzuXCy-NqDt7efxr&HoZLC$wV{#rCJf@V`* zlzEKhg>(pvBOtmA7_my{LqMvVMz!RsBrUFLnGR8D?ox%7x(IC|*PEh>xh0>QgY74L zXBIPsg4){J{HnK!egD2=C2*>KiuCPgTv|Ns#OHtBqzM%PEH5|n`bQzKT$lISk=DHi z%BlFjkzbXw_t46_KS&&39G6ILJ4l$_ThFI7k)?|O&n~OHT%rH>@85#IQ^phytn?8g zpXUuW=_lDyL}PvjV>9szG|+`_0X1Pe0Ue3YL?qVDbqGBpp!lK@LwyLXal37iXd@X`(higu{+9F7ufyUkn&fPR_zt$P{# z`T^)=EM{0__ffz}E|mk=^jjvhVwF&LPAyD4deDnXz~yeVfOlZ7_M~$cK&d8lo^zjT z{ol3!{okZfK&0iEze~Pb(WBBAQV?;y7+Riy39@cJmtQsU@wYy@S=mMc;B`t zKJ4%Be@wr?adg-nA1RcN^l2)4f*|T?T)_{dGcxNdT4j@4b3r5Sg{);&h%`uO5?x{? z2=__i?wCAEG``YWVi*eD*Ft;;4HvUCIAz67SFIpbu?lR!yqyRji-duz4Li#jn42;5pJ5`u#^`%nY#G!IVkUh@`TA`J5k|cYD|19hZKIWo0 zbIKheF-#C%iN@YL5x6Sqm?*%Bo^IQTNc)uAU{8s}IBC#a`PD&mRL^%|rBNCOsg8}S zY=d8`7YYrMcL~(2(5Or~Q%U8W_N&>S;;)kuiYcHn2J-VvKjck&CzzoEKb3ZT5h*8y zvBRn#E)GZeKc4qhfDydgD=su24MsCV8)EhPt1tMqGGjv?*Hm(}AB)ETGv2U)C(wE6 z# zP^{)_55R#{7q0Kt1<-`dY1J)23ot&!p4S38$d8}K?+8*C!K(1Rt|!1@F7B7FB2y*G zpC>Bp>gOj$$RrjlPPO2Hm0`d}AY941Mtc1Z8 zp)tcCw!;vR%|L#YvX{WAqcHOcB|5G*Eub2OrW9ZF%U7^}gHweCkAhSaw#gQkixRp4nL*RP+(^0{+}K_ocYZj_bTMA%-AR$CvRh z@4hC?CgY;2eewjf9pIZ6+0@2mx6%$M05U{#f;9E+XkJx{=x3Q;*=h~x^eM4ccoAqR zaOxrx7m>~CaroqkR9-8KgyGk=DhcX?Mr?asMWxaVr9YK z#qun|==^U8`FOy4lXi|yMLwrcsMhxHQ;SfAEmam8?d*q4ySh*K7-~weZWI!s_o4c3 z(W5hM%l>JRS{dMMx}>}#J~;7+*THa^*gHIL@@yWpS*dky{FW}~nEHE)H)TxBE<8xn zL*|uPZz8|8`LrvV786VciJ7Q+9C3u`Xbkm71A9&0g^?y!=!O>2*Du%VlHKSNrT6y8 zV{AB>k#Rv+3`BCT@zp>~_nSlVdk2sznodGKI z)0`i2(XXf~<8^ztw;kr2v~l1gt#@R3*`mE0Go023B6p}Tc{Nxi$;%7=KJMgt6a3i=bf>2RwvUd$)hF0QV&3-z&!Am*#}+QKA` ztBaH%Y7GphJmx+D20q%0L_mT2363TIJ@-#F>uMvgQ13%54ffuRl~@n@dHhZ9&lR{+ z&~*ohYd{wXD*WRyTd|^HHj8ju?hT}@>lDcsc#R-XgtJ0E`jc-@bQ2M%U1mXO!PxMH z?!(@PbOCP<68Q^VJjP(y8h|pFHtv3Tj5dCF-17mCpEzUkG%|`IqW!1O^s7IHxF8ZR z47vUM00P$^!>;P;EkeJuo9Fo2u13?IK)x4`4X8|R;EdN_ ziS49xqdiE4ni*SaLVCquO$>l`5nPsOJkDPh=3XY5s40OT7<`7_ya{NeBjVv?DSjFE z82za<28&z$4dA?48Qja?InI_S?tO>9yZ1m5(bCfL=x0$+7(oOHmjD+yJ}RT)D^6B* z69X~Y-DaeN$ML?zXvBL;xsdgU0Tmw5FwF9kQyx>nn&$+|>tfzN=Q zLyh;cx)EWFwEG`!gA(p+f*~ zCn;v*^U2A7ruRiDL(RMp%T2a6g(2WE?HKVyr;G?q_7g{Z|nP|Yl!+XnU8rgGV9GCjl7D?6bw*>6`<0%1+P%Q2WJATMHCkx&h2eY#5_|bk9 zsH0^qo1g7i2hPrm3p3`L-K(BYMoz(fCem%bLeyWXG93ef9NKfwARhs*DI*9K-$2wJ zqz-Lmct+*(w8NqFYu~S7Vt!B^HY-9Mjxu?Bt&YhagBs#}x-O+E$W8wRp5h~!D8wEQ zS5~9mPF+eWNa^hJXCzHmS69ogK1p9*n|$vKBKdGE{F$K%-$;tYZ{dd%qH<3=AT4&FRV)IW$c;rg zDZp$S{WP%0J|H8H+Mhl(f5>{zX%0eWlU)IJPRgAZSDjT zQCdn|_f?{B{O3XF_oai)O%a|{S5pBDin~t9r;gtZhs$H&B)MVjt{ryduC@8Sp`Ab1 zoX_g@86(!2lNdZJ)d>c2W-jg)(U@a+dtY)gL#bm0!b*wD97&}eQysskU-~3aebw!U zpfKa0euU|Or1KNs!66FhDACj!yKWW|C`7RIR&{{QU6FoprbR%m=CM_(>2U{(KnWHV(XSs>K6XoNAQiZLTD!Eak{{Y32^PHwc2nT`7A5iwN@H{~=?rh{y?L%b!+G$MIhf1S)Yv0gDWUAY8yw@8rJX_p{0Mb4{kY>9!)WgVV17tn zb(cSTUpQ;$|6t#E@Mz@Lb`ohT1u zk$QfKymXKrM7$G4@+cB}wg&}ww8|@YN<{9Rh4;}%wP#S?E zvz~akU0&pc=;Iju9VbM-8gcdl%*INvr6~OT{EEH6_T$6t8p)Q9_78V(#fZ{t&eJhR zp_FeU_Ex|qUR%-W8LI!&Y_#`$X$KNSaN*#YEH5nFK9Wu>r=An@Pxr3&O#htzK#XTH z+IIc3tbQk)s0Uz}AU{1D%&bN6>`CW)(?`o~g1glhgf!)VKsY)&%sbOL36k`3MrW(a zlG*nvkGDmc{-TrnQB*Fx+kM6FuWR;goqGs7&;5-C zCnawNFlkBT%VrOx9DaQGGm>bky2s=l-D3bw$*F+34c_22y%Qh9(R5I=Ril;aZeoj1`@@HpJCuET>fF zNiv;AOB(vUccuvUGz=|#z(4WTMpGGv1W`j;E%3;~;+ zxLVHzMestIsPx&w^1VDVwe^d?eQP;ty(z6eS*fkuhpKI2gnpSbxP^qsyXe(=y+k_tbkLrGg(HkALf&yJ_rSq0`ZBL^vT zg^2#{trL+@e&3Di=%j?q0SLJjywhYq&8B6~aBkcc80iWE^P8LbyqePrbhXmM51nWt z3@G6cH&uxjge|k;*I(xNp8^=O8|h zc>UI);=j`TThh-G^rp^EMgnl0!b-pvq4{P?lQy3pxU$bDSf;qqsH5}Rtq2_+k=gYd zsGyV=&EWpwf5+_##*6nl-2G)=T7d%$(3C1|xgIr2M^rGmw*DRkK#qt`Z!d)lJ2au| zIXLw~qOf2@ErENc;J382lnY=p4$ZOlOU%}xsl%m~o2!$xh3~vT;tANVz@h23H^nBE z!+O<+<$!DsB+nq%0H^!qF)wlWfGgWMYc)tRr@);Nw3hlmEZ}VN*AJ}6&b|rAPXSsy zx>f*gAKYA+bWph&_*5`K3$x_)dt{-h&t3Jn%dz3E-%5~UUVh}FsvqwzSYXr2h1vM_SJ5{yweyAszQ+M1@H8M(FkR17$M+zaOO9CV zm>!{tWwlnX1_149gKOt{I%6xJ;>DJUut<=p_6*{{TYmx=``{;Ei-hEmhy4BFMp1P8 z6B1P!wd$+0vbai^u_DUdUz==%;gU4}mP14R?_eUKFgwFSEnp+`V%x04ix+d?fr40T)YD0yi0se)=gsr^ zGv1}s-@h9wx;>uj!;XNw03e*9x)|6zQ!e8?5SW=<+Hr9~1*3IY?hxca`*UN%BKK^X zh1mp7^{%MlwOc$j|3VDkLd*nI^PD$dF9nP{{UVG&(Fd>g^c*v${JDaY=e`9vGx5^F z`7GZ;KTqVjoEe?=7ytNDbJx(W1pJ^_<4~bsnBYlDJY)Ns>OwRT=A3->Jq|(GQS-AF zlIN|;uA3o=Tz=GR%IGv1F?A$qMi4n|532HALy66tcmMjtfs2!6Xn&6E!(8xv2m1Bb zVs=?_#l&Z_JfJa;Z1o|-S2F`d64bjK#~tdD#ILC2WfUqU((!T9ZyXDBuN}>0IvncB zq`=3vh*JlHTTCVprs_GKp?vy;t)1X(n$NW}PI#qIUO+sSgWu-VzE&V=VuS&_r{EX0 z0^QG(5f$1`WZPmw%=u2{BMcOLK~J-LRh-bB6es$WGp|z%czA#HC z3Mz%WuR&SYDyu=Rp^TfofA3Va4`rORa@fi?HCG7SS?wtQ@8+p0g-N<$Hp#+ig5txVVG?5pSR#Z=Ympkc!X?r|2pO zn~N__>P|obRH9KpRqAf_o@G_lGnQ56GgNhPc5b;n9r|AORK3ArBi)7FYM7@TJF*R~ z7V^*8Y<@39O^~oQ-xz9PwTYYU;SM_DD ze?sDAcd){ zU7>@~ep}h$bkFm%9aM=IUcu3Ds(|MeMK?gXg zp`tkz>@617j&B@2+_3lrC7XQc4lWDMYz3SyJ@}=LMy!dzHp`K`?wtu>3^1IcYH$JA zc565V9{;Pgto7&@=aEvH5Ln_axTR3a$j%G6TQ`jx1&UPk|iT%T|!hJd?7B=}f z9q>MC`IVe)ljGqWb#30JFRYri)FZha3uzlbcIe zjezE75K+OLgmvDE|8BVO(sP6W759Y&WtBmR=LZ!-89@*);q$&MsYm2!E6T_LSv^Bn z(7!KyfGXue5t=g5AlcTxW(C(*7$!G^Lk3UP| z*W@$Q2D{8p5*wEvyjRbn?~qXCS;0S*%+Iwt+u}oq`S77?z5+A&EJK!+` z0)1y~b9LVOp{7lWx+Xot8DCjp;m5Dh`@tK)*8zi=kKjX}YqqfaXAqd1CL ztlSizLEKN?zMA_2+L*vFj}mKKt`E57B#B%fZboZwt?0_V{+xnkl^zgTFN~~Sppjlr zeKS4aqzZA#=-~Ko@A_XI9mb8ZWeHEbtI*KYsJ9)2L)gB2T8)B=`o2^R_<>+SA zeAT_9TOfLt+jjTQ+88y)0si#SaBv|0RRt_966jQ103+j9sDFMuAbnJHc6L5PmGYg0 zl~#l?MMB2rzx1!Bl6@ z(E^(Y_`G2^DFFp7h1=0Y7&hrejfM5^&m-2GdrRl8?WV0Jt@G9x`mJBuzA2Mf+qi1* zq;b|7FZF5Z=*Xo38J#G(u-CS4^^-(GlcBM(zA6jt-@A458oUd&jFD*4NiUukz^3TR znb|mM%%z`e&et7&KS~UKM2O3Ugl}kJSzu{pI8)2{>KKQE6y&Jgk|jB5&D!j0s++(^ zG6d)6EH*4gnFm+{yj*he63HG#GX2@$%|b2 ziR}6I_Tj@PWbD^=#c$etO;tIEnr5ihISLXXmIC+(u+r zFcew3T!97)qJf`TOs>U-f>`?@PIlXY^pm=caG}-CXH_bys-SYD#zH${k%V9=LBaoX z9uR3ng9x{%AhR`b$X7)@$#f=w4sJkJeRF22c9?R>BWXsa5?l3Ll27os&rsq~i(&Q6 zEgTj0XMc{&51SI`345`|tr#Jc!-m<1#6qDowOi%)&RFYk2rqFu$s732H6{}muPfy7 zfL+_#iHMpYGUX;F{Np?b2pZJDqFwZd&6q+D$>nh&j((h_i55g=oc5#4JQoX3X@% zbyHB)ZOW%{#Zo~W`+*XSSu>^ziAt@`M!Q~=R*)X+{o5GaUulOKJkGo4)4GLsWJ5$G zSM7u)!973JN)Bn8{v9VDK`K2QJsth~xlXVR<%)z`m|X@&3(TL490X(_p8a&p_Bbn$ zwQlnW>(F;A3v|pXPJi+cE;Dm*)uR6V!uVkJL7DtZXwAQ<-9H;uz^+j7i#qNuJv@Ye z@-(pN4dG*K?rIo)XYPW7=j}<~<^Jq5kKUOW3~3<`FmMAa(Rl*J^{p*I5b6TzkK(Hf zplHzbIuSz)SEL>P`Ljm93z3K4Llug*c46mQcRy-%yFZ%wK~{F;<$fs4RHui>TrNX# zs=!^Wyia9$IrHwzA39Yo*4tx)JZG9+bj&;uE9=L{uut3m&Ig=RP7Mpfijax z1chlfy3pL@!eLDKBd~=rN0&Ci#AY&#nV9~hdJcgMODISy1}Ww<1JNu=-tf2RkLu{g zNZd)J3clkc>|7|6Nr_ln{s#JONJBIZgjC_p-yJET)v%(DDc~WeaXSVd;SY$Zt!w#{ z;)kH%&h9Nk5u{qrfqSj)#%RJ)RY>0v}~Tc|O6z4QF>FK6J9O@W-% z?vQVzvU~UTF0sQj!9%TBB4P0MaOSEe=1*Kt5e|WrE>?_1f+q>EMf_VI2;NKB5Tm)mEcK zh{E=g5lG2u{$Dc3Z(%=`>e!FbFMo+(zAo~G`(4zS-lJ^?3O=Zyj z=&FXh9ug3_BMrI9ggBCXs&rWZN2Rb9y4hb%1?)_+n#xL(v)LS0`-fW8bWUC244~ zVajn5e%QSQsf!6>y`U6%M8$U|EH%rrlje(mYJg}Bev{Y12{DVuu~1CDe%nH z@^wP!A|Th#6Q$3($ya-5mB2%7Cd-1ML?Xq;TZcP!^Mh*_QKKR4#2crDA-@jtEzg39 zPBOazP4Jb!uzH?u$S@2%0UQlX!}w08KWum)cBvVy&s#M!j8K>zd~9TONdzPa6%Gtu zrEgFy8kovsA%V1dNcblZ#YAD;H?Q*o;DliH$RNSkTGcVJh>)0m1tZ~G@b*5odCzoV z-LH9E57vvZ)0(cZ2~pa~WA@*=UmfeG3AsFBXz+qITxe`6e$O2%)9jm5{J|D=u`12@ zXMBY7)haY$N42`PR`v4kY4Q^1Lqp@iQcDw91W*J*??J;O2|G;4-Sg*&v<8#%g@{wu zn<^m)-iz;S^yfgz%&1-&*eCWw-Y9WYK`o6$t(7nPY>c%$q`21wkPKG9@FL|ImD3+8?9EfEoyzi7S+y8JU)WA)o3O-+Ig2 z#eyIFZx>5`d>na2T8*c( zkmeNQQMB1z4g2u$jjJh&e|x_<7&fgEcJ4!&P6y@}Ca& zfFZJJ-@ohAe|z2kilTT{yRWSlm&e&QlAK}*psF?|s28bh_Ra&I1&7T7O_QPS;76*J zgY9iMAjORzpmaf+5*9d(jb2}RYGq^NvzcPrX)(q14Gv7PGk}e~Nc3&M1H@}8+S-90 z373n!09 z*Bf>5DGRkJ#U{(YywbnVyj_j1eNN2PmGd_z<00VSqbX@=X=!NeHZrYDkjRQ8@eU6UZxl?CDupwHs<7;eRA4SkF5)+wXMYY+ zbArj`rch2IM4pCsNnSt#YtRdjHDQ)4|5gZr3!(>u<_pU#QjXfG4fuNh-#e?-jglbd z*me^9BALd&$Wh_u3w>Fd;(L5zu*19oAV#~t_FvABaqDMv3Ps%qh%v|ETafN1_=&bU zp}o8x5d8`n<9Kuj>=b6afK8y`(Sg!-1)~8ZP8!?A&z#(RQT3% zszhI%gI*kX@;f>@Zl`fr-#5EY)AZ0^t8KrOSUdhjL}~?NcoUBy$Y&^i<<0Xe78dbm zJ4}*N1FjXllevT^3l7Pd78ZCwlg!fRWi@w!Qr z^kebk%3ph-Y)bS^7T5yAkkG zp$65kOTE3~YL(ZUVIc%B&6p#@U3v{V?z`PpNQddRr)(^nI<}Fnwf4Eb>rsRd>H+?evf@Q^?Z4cs4PJ>y|Z^7SL$(dGRL}2G&m|^5#IiTyExzHr4 z+?oA2t)7>CSa=%rF@V<8jfe7U=t19%3e4PeI6?++|XuJMZ|Gkd8@tHSYIzRui&uZxCp^d)`f)=aksKnCElK-uj zxeUl=m}V-#t9+681cP{8ssB8LmT`p~l^JFfQ~wUN7fHE`)EK;a^p$8Q1QlU&cm-oKx|KHuX`NBON;7YT(9#KQn&S(dNJ{mN*Vv@28Yn$@P=cfy!K7&&NXIccq8JJ@VLhJ7y z1KfCznx8ovu#tQzEoEdEEbl1|`rFa{i^@JuntBN+I3LebG^tNdI~RYU7i0nYf{`~v z37}Ip;_G^`ED*813EACiQ`3Fmwwgl!a6Op`gy%@SVVX7#L1LeZo}`{90cK|6hM-mW zFWi-$e&Fj+wOg(g^eSCW+5h$ykQ|c|liusgBb=Q%SuI|Nt>tz0CL|;*_{>}XIy~+L zMm&V;`b5N}+1CGUXOl@$xT3mkJu2N76Vg zpRHEHcg9iW<4kD;){dpJgEUiP4k^Tjgoz(b#MO-`r5W2Ed=I_V2r_dGesR1CjYl<% zkl4`muCR@0iI&(PR^7;jI7VL~I`_6N|$BN=HBlW~BMwd0U%SPreo< zjS6DK{>J~r;DgFneL$s;d6w_xJz4P1aypD3YY=0>X)^3|B;} z$*u38?qgHe3lDayp0HngGr51^mw$QQybw@waS%V6z=j_wbS?*AWGXB}1r*0p`QRisN&`p_-i zNSA~hx?38gm2QwO>26Rd0qI5>1f)y48@`Rt%=^6WcU|+(Tr=ar@$9|UUhBSpcT(>; zzV8vf{`FYWfsC0x;(ZqPqR4rfRo?ZneUvQfWV6=vY{y-v@oO zufM;pYDd9eKzhTA!R`mVRr9u7_VUeG4_?B1!N z&iwxE171Cb6p%JTF|C{iFIAjzNP-1dd80CzW)7AyfhZ*Rn^m0b}$mX9n3y*wN|iEHz)Or;@pBJTyjZx$GBg!@P$YSJ=W0aSAvWS_Bwagzzyq zy#oW{Y-_JPj`L0jXoYz9_AkH$sm5#l4el2;H2GE>`AYhqjgvTG4s&N}1TbSP?Ub?f zmfY7cyO>v3SFAxz1mGT+W*J^%{|L2mVJ=W(WxqTAkyiR}9({9z*!5ON$1wZIugcF4 zhW1<0Hol`FTu|_DTKq<#4plWRO*LiY*dK$x?tQL$JxjOo3HwfkAYk>}Nh^cm>JRQK z@H7jMlwx-j%_C!Z6R46%m|EIPry+Uput28I@O^P=s+(Z-2&=nr$A1@1&W@Q;;XtW$ zg+jZRps18S{!-Ov3H(9KYn?4${E3C!#igM;`a=>$9UH=WgdmNJ3Ws9-DbKrvoSh~Y zZ&fx_P#^1mZ-|+k34JX3Ql35_x|5!xfA^jCw5~JKG=1M%Q9!<%MEI8N&Yj`~&dr=~ zqXcQf=?zUV|M!1q0ig3CA||Hhr49`+m~Lmtim#!3Y)_3VMZl8>fO)tYC#%3XB5>0v zZ*1Ea5J93ozX}w5&RYBR9BfhO_inZ^Xa?mI85kLBe|4X|Uu^Mqd>vMS;-HPZQW#$= zChp1-5tj$k2WKWtk!%7t8qf!09fXpca16lRLiWD}6rYJAR$KxBQ^!Z|xf)aSoj)tG z5Bm(%nbn;^Pl%s_jSTzP&10@(e}BK&h-DcsMsH)KPB+{r?G_IgtTmiW$wv5k_HcTUAtptOyb4wDR7QO*)K*&WRW)ciu> zyKVk+9%>rB=^4ELHL-mhXzrm_!h8z@XF%ZCY-4k?QmZn$$FCb$c#nC_ ztIfRcHbbT0^*q)SlJtED`NOE?66ZZOGql5L=8qp)X*Df1lm+M7PHlcj8<+*2To4^NTqg2l9-vl%IMnOU1ihA3DcWOkJ259nOpcP07ln>LG4LO# z>LhK>1&K%d592ieC5V-1`3AA|rW!>KB6a81!~5OLAAsac-;Zoz+PZ|}4WfPDV$ z*4<3l6^h^xU#A^B38{9E7<$*0KUn2;3;*Sq*~u_F-03C|+U|pjI}SNYuIhA&HlZ^L zVy1zlK#eHE*@4Yf4Lr`-ZqVPqOy9&X2rVW_)Dl2a?+N@DAK@9Vos@4;gNB&rJRftg#SDABEhE&E&UGBd{8XV3T48O2R4d|1Zj{lY-OG zrFeB!bGLg{R%`1nI)#k}aykH-oE+(6Kd6zz0t*8YeF(Pxb24**3fuvu(+hNn07I~m z;bmaM?fLiXqZ}s+1AzjN0?mo;8$vP;z2rh{SljF(t^ckelmLsKjbv)cL56Ne~J(@Y=G4!jD%_>3Qchy9@S;aO3cj)Ku;62l+BI6vg|yXCGvjAhXI0WH~# z91F|M?stw2d0KT)DBHKICQN*A4ZGFvJmK2Kh})nYHSb*ea%QQMhEq-x7KhC!$U|Ya z9_vF5q&4T(O_dLzwA3Pi?_Yhc! zW_<3hA*3_#?V+BOWbD6p2j-~G1X zy)tYW5V#Ju7Hc0Op)kfU1Gww(*QQpZgT;YWFpd<*^5Q(^@7eC)2AW^JZw+wnMeHJN ztWET*>dnO>M)UjOzNHxf-5>wlog%ofrkYD{HubmnLNzXTZRav?B!%xq%+d-l5@7JP z-tQ6qIZ^{efTR)5XnuiE8P;(Yih;Tu?Js6f1*Wpn(eAQeEsCED=*cPZt1MiPs8jRT zMuhnvVx#404Hyz$foKar^6DZm#*a}1oy@M0*54_WKWb@P;I(`gJFF&bW)3V8fi3>K ztIO@$k^Pxg-#XgN+-s0k3B>=5`JJ0_{dIh9ToIF`X8g{K<6W3*a3=U4bFtRESYE$G z@GuoU<_iCChnVyI?tE?{Vq^GFtH$It*j5lIL;xxVyJT#t8$_qusFYN*MmUJN+U zz(6NZLi{X*!9Eajs&8c{PI9b&f1dotpq&x(^C45+lRC6?9Ym0o$u~#~0wm=|n7&8a z{qrm0SHf{S{T)uQsv>HYXgThE0jry3R4~ALWCV6b&iv%)1|nd_K!@oH-A4{u*V6$& zC&DKcPF z!1krq3X<`zwugF7qpFzj#*H!dD-t<8^zURfkVpnRHDwswaR-I$$oU77ur7nq?;d-m zrVl$O;YA!Ett~MT4-bF@+}tie{@=P_;HjK1v-cfVIQ?C8$w!KU40V-Tp0I>bmP<#c z>MO!A%y4QbV0#%Rjl0>ab}_00NbAvn@ln! zDPJtqmV@iLMm636t~M%_6sB-V91cjemOQGwr0!3jJ8621ETi2nBR0g|j19r#Y2{Pg!gLnX_80B*yLow&E5q3@HhT{n!9(u z8Qz_)^&JRZnf!8~kwN;8%5U(RK*7j}1LU%nO;(Yk0D)VFO#m8R16rAWtB~fScU;$L zh)X*mh0g|{A;sBZXumj6lHL$VCW z_4j5nI|=@>e$aWGX8VULz@}CHZ3OBsaSTX#ZN{26;5sx2fBXQ_6NvuTh&g-11uz?n zB@SEOPbQG}<0z_pFan)3g{jnCxc==*hTCsLG14w%;maRg;rMD4VZfnap6MY~;y}6e zz`!?cihpU=0i&wcZ;>8q|Lm7pIt||<7cnZ_(PO&_L`3Q#1&M&CsIA>MwDgnDZGUpS zaOWW9so<(b-gsZRj=myIZY!fId(>X_#J`=iBjVbh4j1H*A!^hRCWm?$7dJQK=}8=) zrS6hHVYdvCAHv3(`^Ro;UWXpP_Q>xFeN7#@k|XijusKf#Udi&co}}dmD>di4+hR4e z0tI^TBtHF-R+6ZvAtfRMkd*ZV?4clIEbhWYZSQVcp}1tQa*D19GLQz%M3w~V4mLx2 z|57>%h$*#)>8BtQ?YNGy*;&Gxc_j2FrGvrYQex`duQ%C?-G4%{t}QHcN+_e93ly2N zGQb1e=TLBRS}!#N9db;F^rzXEx&cT1&6aaOe%(udc4|pfEZ9%15k`lOGK?Ap^d$_( zRy3R9po)%W@Ms9S2j6Sl7a1*^%UKoTw274}mld$*64b;i$zo!6g@x)9^f1$hq#=_eBqxe~6@^|Yn%seCe{ zpdTz8FtA{~zkk+LDL_Wu6J@3xWW76X+xue3jA7ZWRj0q@ZCFg&t19M(W3ELGm!suT zY?jTQtnr5Tdt*%OZT5w_FoB`r%MO(Amy-Qe>Y5-SfjW}2VavG=>fP`tPjc)K>k#X5 zX68AoJv6{cth(sKPh=QpiC2b!gOkGl`CZ>cO03!kVY`C9kC8<|UaGFfi|BQ0FOV-< z+uP&gImZ4DUgxOa_K6(L zBv8Aq!yy!51JS2}rj;Wnr zehU2z?+oeM*q_HhD_ZZbA63ABtslD(8!s<=5`Rx03YU+Ta36|_As{a&<=9wmjLW-- zyR-~Hd;zh!VR1xU!S}f5z6*!?t22B7Tp`Hwl_PhskD3Aw=07u!yMd(~)i#>{+4cE{ zX0<&I46HW>tEj;;@v-cJ6DBr7Kzw$lkJ$}+Kxs1X___2NMpKaT3(P@K)wsL;E8uVf zJ7a}EGwkXH05dXg`^2p)8OR64#o>8^OuyAQ{%H@C1NKu>xA_6_;IA(PuNCtMC1p*2 zlVLi%9sg&hI4p-q(!&P^;nd~&K9UV+m%+u0N@NDe{`UPM_PhzRlR+d;;)|7Dcw=!t z#SJfxUR3eyx_y0_+}+DxtMm5l+MS^$3nZU3xTqx8(N1J0rWc_Q<&wp(KixlgoRg~1 ztk&7txxQjM!7aQtFIAiI{T9@{ zSwgEF8X)PI-BLkHCyYHCkdKlDqt!UuDA+xLM0;9o01jA}OkQcJwFvWZQGgV3JTjFb zpfaG^8X2X8Axt&jF01!L@cO9L%Y^ZrYPN~8voN%)LSG{h#4A_J?P5q&kNoBrKSw3K zR}ONwvHYjg1I`sEs`7)a{rhulr8-w<39nVlistJ-{C3T3Ha~zKxSE1kg)BK?rJbZRtVjGkg87HuslzWu3rjx9Cym%N5abKUgR% z=<-M1vXBWVy!=mOVdu2|HkMhqAsKe#2~y_|&at}=rEQmttToj(*4l{7T8|HC=9!8w zp-)O+k}`_)?U^PJkwqpF6)GF*zrWr;sHG@4s;0}S zX3rWhzs6JO za9cQ}aOM&2CM$i`F}||#JzGwTRHl-MH+p$~Xef;(`Ue9yc*BXVj0$PC!K?#C^b3>D zR}ukt=&FNK8f4efpkkrNkkJvWz51rau&v< zfIezrX2_LUk`>}rbzD1dBqS}5zUHw{=I7@RG}W+Gsjhg-faw_Jcr47ajV^YPya(0SnXX z_=K&+49rAz1{bi%0Z1O8rjW-;)76pSTG_cqOs_D!rp}Ck(nU%r6a3clp;WYLfM5#V zik1^NF~82!ua2!=qgL0WG}BtSYL8R$G-|XBOaYU%=ZO{vBcoK>4^y%#hH&I?A2v5f zf4P5vtW*oguAm>!>>2lkt2G25zf}nWJ;wMA5Jgii6Xafm59P)!iMYwO6!_6SkA~H{ zes0<~-GCx@_3|!_VcpwUUMp+s&sZyQ_o`$q4*P}+r6eM1Dl&czx}2|9pJWoeBmEQ= zA2U3pU#vCesl=&}vCZ&li+M67DOhw9bQ9#Y#dM!wza-|+?g>L*rIrj0t7-19Y3^J1 zcvyzLn>}`Z^=QW?u`)42DRgURkC zOgwvS$PVWAfn8sMl7gZ^WRt#2(O=bXfQLFWnU5sA%dTNPvE@X_t{sDp^5qnG%Q_+E zd}JX>%)O?^<*1NW@15|Lcw*ph`{}t*NOww-}!+qRalPVCMRt zCip*>2eSp@#z>l5Uyh_<*nGMtFz>wg^c4SFUOywpICdO^wp`T7iNiHyWyJ`OFvTF4 zlLkgL=mc?!<)AB>-ugt zaeL`si7wrUSQ39+XqzE;ui0f3Dxv2CA?4A>BHN17f{mS^BFl_I1ru%H8d_>^*@$C* zYGuK^ZoYzW2XW_&H|sovH|pk+^9M3~1DKM}`L(sR)z#IX11}F%WHDDRwfvtldTa}J ztgM3ZaTm6S2O=A8p~tSO71BM1$@Yk8>^(h_t~oids{E8lr6iC4`a}-1)96S*OC1s< zjB+|ku8j4vM2i#u>CP+l@w1ODmqv7Cg=Cma{aA%M$7u0j_x6eG&q0z;qTGOmIFdh+ zNcJkDev*H|7C%u@GL66K3>3&7u0diCtG~LeZmmr1X+HL87Y1iWRHe4SXI+f^3?Yx6 zEnFP*c*-7f6#3T}E5#N-RIL5&jALMKql}Jh1i{s26*w2_&kk^uc{~gWHrB zA%$SmFQE0I4Y`H>OSU#=E(Z5)ole*BF*=sVRUEoeTqe?Ki7>v_wUd8fF6`Vph+aH3 z-T(_L*)GA<| zNU$4@VLKikn*pUxBEF3*f|`_tjuQfVh6r0|y`FIWF?xiZkABU{((*YdVgHfqtG5YU z=*FZxiNirRtG^)McD42KkYDB zaTExhU-REAiD|TLnBfvIBD#MVg41LsSF9KXef(HrT1EMwTqozT5j4}5(&a9Y7{Z86p{JGQYqbPcxODmTPXRW_*bkih;+T-06?x{FXX=># zaXg}{(d5sgl`2Y@b*pQyc9>T76J zI9DF}l80~O7c7rLw|GBA#YN(Xh0wn3Hma@xHn#*uIZ;bXNCBs`yzu$3$u;+gr2l*Zm(Yx%O$a-sjGf~K@GBiAW8c8l-0egEPHu0>zTsA*iE1& z+s&b5Eiea@xdPLqt?c@rwHCI#fATDiR&I9#AEKqv|b|80g_b7w{T2* z%{LWIiBM0bb3((m*YeN5F>t8}!Ek0-y8hR&fS(En?G&}s;Pt;`^P4fG=fISWQAP`S zj&4ox5!;_lo9Ks$A=7X{dF)*wJAwAX$rn7-56e1AftVfB&8$&DeMafpQiU&ERDXcZ zK3p3%^Bc>?sqOx1ep|rmx~!V5ubNT2OSo;!|J9(0e1&rvFVqKPzp}VqSUWP{vr^qX zVgP0cWG)_bkn(P6=V}yekm~&?o(A^T(+~#$j|ZAFjot8uN15|Z`L`Hm2DluctiIVA zyb;4vO>M|lY&BUkk+u;*ge8jFNz4=;^i5}ZBLNbDDCfQ zYDU=d*@48D{3oQ*P#a=F-C!ZEW}R3iRKbwSuYSE10L0fmD13!s=zM7lCy06vkk1Eki-C?+J=}$tn9#%@!7}(puHp+SuZa z07EuRipF*o4NZ{QkKwAK=3B8h?g?QFWNG}-Lj9(I49g0vh@YT1M~LsXxzoladGc*L z+7IdI=u|_k->kHBMraRWJV!e{6Y?ev2)n9NDo*W(+mn=q*N?u!h<&`=yf%D5Le0RA@K519X&OoAav|zl<&31rr^Hv6J4{Be;EdM60SZbnSIu0!{h* z!ym{eH+BSa=zNVpVGh>%v{b~jK`|_!skq3`5A)M%C3iMSoYyTXg#R23;+WnYATL@Cv*jQVY!U*4k3+p=-U*QhQG7h z7;H)u6gIl_FI^ljlj}KqrO3r_R-)<|kAK;6+)SRUDc@yO{h@hA(ED>zoA3IE*VP2R z2|{>k0qZzfks?<=mLQfrJ3^yb69cj@l$F!IH89Q^y;9XPf|1*czfC6L%740#d_8m& z-%*vf@Vi4g;k{^aM@!{mV@86UkKS$WxAWHAQde0~fdZqT4{!=Fki6ArKg8P9f4Mv* zWry?#=#O%zr&l~ztJZ>qo4!pjTc!(+SBX&L42*`7FF6aq5oNgv3a2>UE_f!q&HsS? zOZ=4{CIT8*mqjrTk`-ya5yglSdKdN-5fPXTEFT%V` zOBmukDYkHPX}sGRe?T0Y4bvWXM9{jwq_%sv&68oz{FIntu6I7W`D zj*+DA(mI95eu9Q+=nz;Mo!?Zdxy?6%UXnlgGDkZk>p4}D)_ohB>-vYWWT9?~{Gj2$ z^Br#VaAId?*HWq-T;sBGs&Hz%>wE))R_OOCPP}n}#w}woeDUJ&@hXoCEkORbb7i}i z@#oSiUr+UgZg-`VD6yknD!f?IO@)}yH_mQ(sv+~jw zK5uG#5`Hd+fDqbcq#Z4bqgFi##49akM;}EtR~QYm)u1DoSFebaSeO)sO4dE{HA?sO z%3t~jlVfOi8na0-_J;eO3*C8y0y>Qr1P{TVZ1zL1l-2*7Xgu5yfv)4`3V1SMALs)g z@k4`wmvZq{tTJs{TI$$`{p z{MmYW6*6*i>b96bD%s+Y=VAg>^r0k_Z-t%B2uEM3@aH{!!bh}kMyNQP$epH6)dW1W zuFlRemN>xQS%3Yfln+hp;Zg9hH%Hsl>N&0Z9#@rq0?BIdn?(m0^9o%ZcAPi~Jv(70 zcDdBev{(Aa(en2-5`klI2Gd(iKt4U}9-kT3oBlEzC!`owXR2Y>Ow`Jp4@3sY$TCD@ zj#^L&tk+HEumyk1%?_&cFq6(b>LL}2njkD06m%;}T^T9=yc3%`%KmLwMqm`B!Ie|& zwCK`FaOE3lmvi3u(H<^4e(M2Gg^zFmc>*v@_~HfJ(*J9a_qa`SP|bR%eR9wO3p(b3 zB&IZFeO(Rx2ai5bwSQk<_&&H*cN_zXM`=aHQ@1XVmFWvyOPwve1HcHp+kb^6vHw*u zQ-JT<=K~=J7Ry)!tir$ zP6rBw&`wTn=_ej~-zl0-H|uN5j?Ad8JkM?AJb2jGYGQ6!zDiV!jN0*R@zLjUU`J7p z@j%YlC{BSaGLr>7zs5*F9p2VkRMF>=(tLOK^=s6yOQ|PM^TgQvpZ7jbgdd!HTY;S|2TxC_D)M&LkaF+l#qP74|w&Ajh&{ilNzTh zEf2OPxb8-4G3P%m^{<~slmkLv-nd>zUw6eBi*to8lEt%d6#L-w6Mu1<9uwI_OJI-9 z6|?5$xMIh$aaEoD?9^P^nDkI+mB_LvPL(7|#5S@wgoXx3D!B4x%?N|S%b=#u<#f% zhgGNWp)C0YTLXwWJ|>QU(U-Z_r|a1`CA{dkr2J|ROTS~h13pKni}IOV2SS6olb}L& z*OBu(*J|;q(q$ywh3|!54|d-^h@He5=jDu?DNOmmpp!p0FuK5Bqs(@Wk@0fvV#(ia zwEHiPOJ$3Uz=Z)aOK-pY>v1rlXO(JN{x*?;+p;aY zP^!N1jaa@Df2zXUwgbsH%9ri0?$e%$i9WXA^z?KW7#2$yZqitiZ2;ow%^zs`I#}BS zT4pic0U(2A*}`N_2bUS{5u=2xnRx{i~pLs{#xb1 z-$LinW_EMYI&=A_zM??`z}uE#r^JCL5PGjV#e` zy=H(pjo*#A+nuTaCuDm1p%4IF==19XuReXgT>}J{nRy9>%*}=heqW!{od@2cAA8H- zMeLrL)IS?%hVAyM<~f-JiKVN*J2{-usxyhS?2*Jk_N{6#xpvI8s@V%PxAmfU-aa{6 z!YdZ5C46IG9yTH5t5DFhdpDOneio%FDftPH8LFY$zM$%ix9FaDb73#!Bk*3%Gfwrh zI>XKHhbDU?pp<4XU0w)|loGMRJky%{+nhi#&`bos)DRD)(n?{zUvU5eMZX=yO#FH~ zzgWb*i^0*BF_4J5`t^$&_m?`FPfv0E4j4hX^(P8Y-@Zba1pjUnt%T55DY8nTKW6pN z5hXr5YaMAPIUV+O-iiaWr}QJpqEmq!g99fn?|PmT9avE=#`_0LA0VZ64a74;EWee1 z$;~gPN^pHKy$Mkhr8RP-c!6tIEu=B>j0z?8;63c&wN@2uwx6}uTb((bIsQ}PSwZiL zMD$TO1)Oets_rl$`RW-=NK0t(HdHBT7Y;u$9$wDV)BKl%pi=FYTMsdsBO67aXp(oa z1zYj%`&T&IO_^)#2;n>9+e}P*FJ9Pbe9o?BQfhabH?m>A`&#<-pN9pjS#hSahms5=T}pc=Yl_E4HnW3sK_B?~CJ~oWHj~Kloi%A>2+^-#qlp#P8!zqsvUWa1d6fp}!6obGY5N8v+O1 zQE=fSuXl$SrVZD-@Nw$y)$4+b@8ebVnfLExejPP6dd~fN71vj1t+;$DPw6bvR&Z$z zcXDXL^D$dMrFG`7nRr+ek$K*A0DHExkL4F>b$-NGWdZYx4y?{r?PBWNZE;QegIpzn z(fO&VO@htV)@sLf1-WbDOE5JI;K|Bm;s=&jpyu{kyci6kkQRqO8+@)?AFFWSsn_X1 zG(Ir97C>?l^R&mtF)?11YnmH3qi(h{ag3K8(cBQ^y4d}ktkSCu#i4_ls?hZWn&6}P zzwrwjPemdxxGl%>M!c@a8$JhkTF+MD%4B5s&pQQ|(BIErH;@(+ zGCA!;bYe%wSW8n$M289g@wnhtb0&9S^_x+xLGKj0$TzJ*OV5ToIOe;>(B8BB{}2Cv z?t*txXj`8En^L1fOSIUHru*Trhx)N0D7W`!v;j=^WMN+)PfyP+)JS!PvqxEIF6Sv! zpc_0fqDlDT(pbKAH#IhjJ?zeE4yL+z)bqDUNlSy2>q?JIV#{vNghq-QYlVL zci-Dw;Cs+XWXYR0?#3@Umgsz7gQ1HK-uML3)0#%^*Bmg*X(=~Awu}`pE;!7U_iHLB z95(MmsF^@eVE@X|sZIqKVz)BHTa?7sL<>dIHU91p&N6z(5>1+RrOA63Bd~D$L$Bsw zP~R4BX4Dc!e>=r3Oh;Q^)s|WSA{vIQ=y204*Bj>W0;)2<-faIpL_$1cY!XbUECwrF zBFvZ#9-NqjP_y&Jn z=cTS17THHEy#60IfvL=e$SGAbujqwq2S&%MP3Q#52_WE;i&n8_cZ{>YfP{vso|Y&= zf(n_GWp-e#Y6%~Q>4LsBUFzGm6Tw@-a1=_+C1VBl@1%|*Qfyb_C?`zuPNv4B+knR5|A&>Hgd_RS5@S(gHXfw~`(mf-Y zIwVvLeku)zeo}oK2HP2x$SXQw{OG*;-=(KE*DsR&J>nzwYAy16A}hxTm`iV!l>-F#$-{Mp6L0 zOx(&>l0oq6Kv_HLeabiX8y|z;XPhXtQN=qq>83_e5rJw5dP{$JRMi-WI41aiLQ7N@ z(Z%pOaFt(qH@pi$fs>w|R*2K}eltE@V2*HDeW-5lN@PKaV;vTW9A)Z)no<(@-|34|2{j z2pI80n@Sp;`<%?1?z<2kcCdK5 z94hokIXE>aR{VqLO<=G|5JPZa0hY2XsvOB4o8cEjE#ACkL{6cc8O%E)ts*6@=`-E8 zr5_Q@cz!n7#TY(sopn)A(6qVDRC;k8$o}i*+6Da%r;0xKG=p5h3%OjRZM&nEw==jm zmkmppyrqrSMvCT+HpJ$=Z`A`^?Gx9|>)}8+?njzGYdYL<9v3w7h#${Zr-CW7?6{1_ zwOI9A(f!a_^8tWg-XPs@huzB>o3aTud2EmAXjWjLYOAGk+rHhm(gJ`oV0c|UvkmE{ zR}K3S_Z;2y0INm}SGPRQZ-uNSzSeOk+_%Un_?7G{zsV|~sEOs|lloyb^Mq#}GrA`h z{kh-4O=au-s{w!YG<{9Cp5t|gd=YumjW(+?Zb4nb-ZwfrH^tJVp*|JHOAbxu|LyeJ zuFCziNe#x1>}q*+9DdvKci(so_=0JoIuz5^6&PVE(L2c!RYhI95>*Ah3UDAwi0fpk zA-d~&D6Y;e{r}g$f4Dkq+SfP02-H^IX*!Syf@-C->(jPw^d>kGT>&E>k7WvMU>h4- zfK31x%G-yBh942ccL%-?;86uq9o=feIS{_d=mYRDkRJYYVj}=7e0v+4!T!3sI_K-t zZOT-VRQ`)U+vE6Qg8Qb%tIObA)z*(sW8sA#sQ&41(Y^V1oy7bO5z6uo3P0ioUF_Sv zuJCDP_gRe1^``a_h_9$n3cSBy^VDNK%ow~IOSvwnAvTah=ovCRa(+Sk7CE}Gbd+_a z>H2OKR>yZMMAAezTexgvY`DcwV(Jhs$MBtu?69Mw*6mhPYc8bV$$m&FN~*WWN*B)8A;R+=)E2r)9k$CJW^@Eb8Cmn5{EwU}~08ZN!} z#%;d;eG%-_ETIjZrj4>*;T5kseG!PLOlE*^_!J;rEco#gBmWiV80UzzsFJ<0O8v8V zP9}JrTlo2$rn}bH@^#2cEIi zw6t1wCPv1lb28bgjb(jni7S~`!}0Yi2fu>V z_u~RDd7c0meDvxpM!f+I@h(X<}x>5g0v+bW%=7qY;0aAoRNEG@CiT#gMRKwhGR%mxhB*>Qd(Mi ztFkP;@!fJ`kh$8EjtD zxf8gzC{G}r_$Jl$DSj!n^76Lfi}CNLFHv`zn422)F)<6tz>UZ5h^HwhJqYtrIm!<8 z$I&Ii^dbCJb|^~dK7MxAsaV%(1D5n>JF!p-*lNU@ox%+AJqafjXNCAcMT(ZC2yJUklMyK84*WB3wrlb905L>9lO(k4JH$F7tYlsWy)CO*~dCk)OXKS37k`I zph-KUXS=@t^c4he{o8CBdLljBYV9g$FUs7uwTmXCDR-W;3LUM46MwV!O)?yr+Md?+ zK6}CQn?TCAIC$sjfKj$|#PIMi5IuTi_Q=M%%e>@-PIo<9`$ohnQoq6}CO-V4B%a(+ zU863?bb`gTE@BEtXXKghhHAYO}CWfwFU z5`?b6BL=)A;eYild=+!Q7hbHV3woY^d?wIFsWLxRN6cKZb5bXKsm z&7)G}a(PX~w0-CZs0+EdxY$yVeN2oma=MB*NetJElBoo`G>FULjz%*LcK#~L|9#un z|HP@f`g=D0Pc-~XD_a@?L+jVALYm&r-d@=I?y-u>2LZp>v{d1TtC5SnxnQQEq9QE- zKNEi@sIII`PD<~w-s-U04UgP?&q3NQJhlGoi**B4W>^1$#y**ou+}Z49Z>FU0p)J? z#l`W~sM}N0c_K?Ga0O{vnROcfPrHAJ`%YK*gfM83IMuu72}ycmCyYD0jCEn99I`J` zg)348naOu1{*nyocS?V53WQ)mWFWkOdDd#vEF{Wfx@9LLQ*uSFPdiF(rmd3`5_Q0f zfczfc_tz*cNs{gp#Q^G^p~X=sZ^_QqwfLr(JTjVyyqXlw$8d6sm1jq3&wi>9zC~_ zAu@CzKMsKj!Am57Q9}8i=6WWL&r2QfbOliyz2HWYL2aA>VIn&s6812_fR!NHr`d$G z#GA|8J~?4N zT-3ph{r9sezz4sdpR5AWHXHY2?U$U_^R;#}RoSJCo(+zG!zq`<9N1h}7q9xr)CWq} zYJ1}8&j~Y5x9)E2^h~kGAbXb87VjTz322IraI2X9wKNpLb#--(F2v3OZ30X4VSDe+ zTq?lamHL51l7Ky;xhfULC0@l-lElxCX(?Rh);2Z~8sWd#Y9$5#DGZyHa9`K|={Z>0 za6sJ1lHxv}rJ{$nHVDn&JoSe^DAO12M#nQjmQl-Xxep)91b8N&leEQC0TvWEnoV+) z4*>pQy566lN&#umz22=IIX^!yP^G`x3$f@M#mq4Kv|y0|)%kOp%=CVO_kAbT*NJ%5 z+lKs!!82*W(N`cMF+(vJ)hLEv6-Z8LuVJxn{chI7@t9UHzh*VQ-?+V+?p{UZ5?ahC z%+ay8-<&FE;a5C8KV;9hi=N`c=MH;yi>JS=P;&JlSP zK%o8TrXEg!YZ#GS>0`14YkvA^35<7n6n&;7m;P|>BzG+)ccfc&I~U(s_Zfz!&d*R8scPKY-Cm1TE<}rUeDw~ zo)Uk7{Ea6iq~)c^sSs~PCx(SiBTJbf2|K=b80s+nOjN10l+)2i7*fn+g)XD0G?2~1 z5!r*pnVEa{4pZa7B8YEI+~268ROv_5hFEm+Vaf+E*3hkv@%c6SLE7oaYeo9nGz3aA z>ex&w0MZu?jkg!7dA5!pT8!{e~ztl5HVLjtEazpNA*{bEPvmL6aBTj(mihH);| z6ZGkET|m3!)cP{Ns_GCdC>ZJKW7(+Ifmgw8e?Bx4=NpR--hCNDlW|1F@84he-LB14 zX(#0A?3$O6ssYgZ@jKY91UvB9L`7u44R++3P&JQtXp_Is0qj$N?2#Y!_yNZXBLyfN z%gji)Fx`ZH*gpuWmd{>od4Qx*BY0>{X8{9k{fk<_h71K1?# zv{Xfj3}c(=X-^IGa#g-bb`NOkD@B`GUdz zeGo7#`2LjcBCd-pnidaI|Fy)baW~4d!G3Y>$rEJCAv(1Zz2aTc2=#xW*}#;m2dxUN z6+~vdUYaS6Cot?ARsYp2%C}cY5+R@BdX|K=EtD?=*6fGwqb5R`Ydix`$Px5K3T)e3?vm7QyH&&i>_gK<^pAR83K5eef zTjE?ZLc>;z(d*9F+Y;nN>ZL-3`xjX(N&7`cAJ>d|k(y7bmR>xUJp}z@@BJy8Q zX}%gC&el@(?o$;$c1Lx6vHRP%?%^nI?#3r;Fc&MaNMeRuyu?^)HC!;l=;Jy&8Xmr$ zVRY0QOc&DWK$8jE_n4@7a8P7#(%f9aWWk*a7T}}O-@(`7@2$Kfrn*FvpF<|Jr9jgP z{A8S*JW2s1*hiPab}d(b~RqS(rluK($IoFyTHTvFt6>lY?W3{+;nteuE? zQH?>y!UOA0Mh^E$^i-(j-QS8pPxGmAWiClGw!Sq+Y~kAmaLa?-p{;t?fGUsJa0&#c?(tQX|qaEXolMp`lbt7I*I%eTm})!(hWgB4@Te2N0) z%*H{G8yEqwHfII4R|%Up*Lj(lev4Tb+jz^K4HxoKlsIa4ciCQne#E{yhhdTGS`A)J zrQ}l)obI1|j<2COs0u^M`Pb5D@L@Qtg~aArwnV1JY+PN70@IOtlq`fpzp_XdHX_o7 zJ_Y;O6IoUpDzPnA*&+!Wxa|!K8*JfWpQGW#TC1+8e~3qsD>Rszy5^1%dO3k!io=z4t=CY*Cs1scDN@!!>1U%w(R{u&^*#kV~9x@hyri7urvb=?kqR)Po@l?SRk4(Om8^JmQ$_<&720CFNQ ziJSNFIxlKk zRaC#989-6)Wc+d>6T;4JSYd)lXhn=0&mXe|27do+wwi+O<>^5U* z@6({J)?+Eq(_-s8^M5}pzhhC~L&N@JCb5gWTz}{>y1~$qMAHjANc|euy3j{}&17ARB z0`S~30JFGXSh`#IhlAN}r}_nuHg4RjDh#+8eV)yb3n|X2QqR4lqIvB@?V9V!^9bqq zJOL#2KdtQT&3h&7n6zp2n>>!wUwEkj$gTV4CTKC&RW~&$Fh@8NBis+A+0M>p8|L!q z7e=$>EiLdj+gI&9W+w=0t-R|W)F0WA`S~(qIxXMzBdmxK#QRXxtVQ=>?2QV_$9+&+ zkbLYYTAJ*i!M_w;zx+rNE5*Xdh4~1HP@MOt{xSw_lzij$*l__SQ#1`I~$Bfr0UQT z5h&d)fAQRa;e%Ck)ZUgFMW>&{NTQ;(we{ua2g?{b6tuT0l=V(nWyQrxUB8YXJp3Tc z4k>4dBz}_a(uy}9i6KQ`j^xU>C$jD?uyhU0x}#A;PdGXTZk5|_#n#%Ozdz-l2%vK9 z@yL%%v6lyiVI(Q~ekJX^#k!U{hSrdRmn`zqz#QGxRV&uGW>u=6gDY(_&zgOg+#?BZJt)H)i)LIz{ z^kQ3tCDQ12J^x8jC>PMSYoTjj19asFQ!V#rVBLFY-^)PclO{6T$dn#bnV$sD7YaQA zFM6Hr@WE|^pdTmOQGn6@P+H`EKojP(#B(JMwK>xNZzzJM;2#wg1-3I=?&ez3p4$?z zE8VXf-qW%C0KyZnE5iBlaDRVYr8cwEft6Kd=;LBlZdK#cmya&uDAPW-Rk4isr|H9|h1f`-RjqkGwWzW1Wtya8g-z6=&OYHKiTH^VBdPhsInOee}@JWYXH5CF4YG9+bOtrEL<4y%2>8+togDMp5 zHEhBZlJvZt3o;bA+k-+iq})eWcB~0e;PW{dASajk9X{!ezxNMX%w<^GTTD6iQfpoW zp=etEt^;l1hknq4h*B&&5W_c`$9rZ!^i;B(pLS(y7^_aELR?GD zXGxAIFfT{(qB(!dNoV#(8?~9f8B%#o*HNikC58}!o@>Y<)3Ji8SZ!z)VXoCf zr#zLyxq*mqXeoc4%(#9={~{tiekojbj$B4{jB!$N3Vx6p>wzP&uTSARFQb!et>SR( z<|nO7*q23Y2zJ(&Ib-sho?jCQi`CpG(`AK)#xQ}y*1{zyfH2W9{P$$15wg;X}Qf4Iu#ty zcI@DQwVa$>gzlE)(b1_rF*kU(o#%B>&*1)Ci8*&rmcAUUFD`+JqpSBE*kipJxNotA z*4&%YRMCn#ES%-cTiJwQSj?H#EHt`P2zz`Ix-^SNeA7`{zwrzyLM-YZhMjkY>Lr%@ zLMQ6PbV;~8+I62KgQ~-P)yJAMfjz_jI{R#Dh`~B9j2h5gq+_ntHpst|7q!-_`_;3A zbXgKgy^x#%wl83Hu>mOdY8@67(pXCCK7fq>SnD;-Gw$~XmsmlD20U|d-oV-GX=Maz z^GtR@$ixbckPha0^kl_3pgw=z__{OKN0P^)z<0w)O-T;PvKgjcPtyk`xU9d)3*@uXqr}u3c#c z)W*N{Z?m)I(FoaCnV2$=Kk%#A0R7y%cU+GA+{(Zos`2wZYl1hq|9#WJwuveS%3TAFO44k0>9R$(%|_?V&MU#8xT# z-KsXxr6+#?FWD*F{Lfl%@rL+Mw&|MMa4tgsdu1f=6>BY}TakoiAhBHmY$<@tkXys4 z%q0^|o6M~?BneoTNDJsbn_7!QgMbN+-4fr9-nAAw(}cI*x}Pxx_@90R|H(q?QwSA>aRr3GgU-LpK?T*W6Z3kFJg$C}yFmcJ|8zm>AK z-UgJiM+TMGxt-g0KHk^==>@b|<0;-)b9aqJiBi%xN+sY*E?<`Y$kUej9FCbn9%zo; zNxB43<#d8w!NWm*)-KM=f1VeH26NMe+QE*L;@ME4t_IYi-^3j0#oN}&p2!L&*z#Y_WA4J z(gd#EZi5s|kiQT63llbixU6jV&aWbn6?z&BiQ3ixZDi^$5|G-H=iz$uD82N(+bP-| zXncSDe)Z~N@-vI04#29mfi?la9dubdhtQ^3Ar%<|WVg{Ij{P)XEM6Qeu%v_CvZtnc zeetVJm9DlxkyBT$`xip|H#P$?d9zxpI&)wV-j^Qx8v82L)HnWJU0q=G)XPBkwaK(Q zN?i14fU0#@B>W{TLIwXJULA)h1h|<6*dH}&Waj3Y^~TZxL#r17{G3(2PiKfz9aR67 zXa1)n4hBrLh$hCSfVuLIS_snelWeUw>t zj*g;$B*0SE)ILkvNHw78_{Fho4=QhKrfSCo^sK|IgNl+ejt4Q^7ZIs<0|I+Vf8Tf> zRH=;JpHV5wc1)fJ?V9T9G>O}hLPCvRXMAiq}$qaqp~@4nG;$74*P|J0yD8ly62}=@c?W*0h3@5jU)-12@?#L z?L#1sfI70cA6#EuodW#NHeTqWXBeIf0>Z#JrvgFK4W}HbmHfUNwDw*re+VBY`+|rVvkt#c;!*cm6 zl;?ce)lr?fA$Dwb=Bgy)p(%%jn~vx- zBFn~+z*?dA&nx_QgcXQ-t5Zn9a#p6`Em>H`bVm5NI4b(u##f8Rq-TO}1+?poNb!tz zkOPU}L&y@EYIMOA_mP`cbX^0K1x;W~RZNNGZk+*wFxXbq)qhIehzc>eu%3{9dsJj(xtKlKoY-r-{wbGmz%U z)1GR=0Jiueo4Ca$O(cwyQBNxq#>qea-p(&;q|JC+*`_OT$jX(3&P|g@@QPyF0a zy&jD=aPGwaQyAOO(13_W;KUHsQ=mEU_J@UkkC>&uiHU8(9%t7IN6agwt#VnOuCZnd z0evZVddP5;QG_+>xXbq4yb)IMw{3`)jFMkqBqMm%2;D+yFCdVhCV5ahwZai9R>GeDE`F`uico_oL; zH3ux&{~_=`zGg3XSo0>C&$89#-Ml3VGm?f?ZnX*r`1rI!!G}nJn|ECoIRn~C4<`4! zvq$80hV>O##d#$2d=cCcVm{%ajwT@8~xX2V~5C zsrf~kis?rqJlL5|7+hIl6UC%m9N%hE`7|r<2bim>(mRQ4d|39CJOqT2gTbx(@A z!l>=T&W??Wz-autmAo!@%yUqpTsPh}&PO?5g)B_|hPgYzQ7#OAqy*!gsq*AUliVDI z(rSILxr(&Eo+<^a`~|8R25;WvC)FYRTm@O~*W%*9bu;L7;V)$`%(J&|x7iC0Ck$&3 zT_q;gS8z%{bt0&eWKSG-P5cgC`yD({Wt%)DtEDhFtRN;O1FvP^IO|&8STarp@q?4Q zb;I3z3uuH<8PC3i8*AemCjm8B9VH4{VNkvBk7o%~c;hYgzj?mrktBaNsWx;ft`H@} z(`|X(a-s{Eyc55EffUrLQ)g_LC}9#a@c@~szS?!m$A8^SJ$PLz=gpo+j)g!rRK6Ye z9L@MuM7iH$h5$5wZEPg<{>)an5$oK_xq%BF1{Gm~12R}*Z7j|+&SX6<&eU)}61w)y zm9@QnpxZeWuu2(W3QM#qBo3<6>{LXRTS&)1jCr;|`%CqSX^#XdgAyA<@)$>Ke@t8< zMsGc zyt${k?gTX2z%oIe%yI1PN7d6Y_Tkb&Vdf4!k8+q^z#mT)8M~`Y)@zt+Bn_R%G2b2| zo0va%i4md~FPI|-ER667u2^xXJKBlRwA0`HKsj!sguLoZc5NXQ{Vc&Ih)n$|qOIy3 zl*AZhq97mTGw;K*69XL=7>-IYM9RNB>SYMCkz`~ZoZew@)+!@WzJy1JjhGv!*n|b2 z)I_xR%Fj?>s`^zEC3xZczYi<%q@AroFxOl?wrCnMk$v89Bu zoyqa6OHNp$ik}-%V5yraE=H9;%Fe8DlY@H8Iw6!2bm@ z1}w_Ly>^NPBjJDK{go~d=E12KxOnRD0}o^=>e1eelM zdA^%jjZ?ewo{n~h)1G22zNK|_9-tD{%g?cV^AD$!q|`%raekv%XX^c*Q%Ik4KsRYLopTG{@>x8v*+kGnUD?)5ZA&V6nZGsFxrB-H>bHiL5rP#Lu}{nqNGQ z+V-ZUe%6ZoN=wV**K1AA)+3%cv^%Z_J>eH!vG>>ZNx)wJnvR8VJ2Aq)M zY#sOwf`xv3f|BXknA3YFNF2R#c1{&JJHT(Wx38LO)YINjeD;}Um#h%e*VixU{_@5S zA)1igDHS%lZ;L1(h?CcfjjA6jUC{YjHZSp2gq}w%=a0jZrP*e4RYFN{m)e0I=~jTf zF+Tqj)ag&)U1+65O$81kz#Ra1%mt8=NNUEYU9fz<`kMNCp~Ck;HN%@18LoVZe^|A2rZx>=01GAxuGlBMfXC{=AZ8F-vXAH=~G6A@Ba5GHvNWp zlsOLAujOXFxRZ3jg{D|(vZ#8k%I5n#15q>lwcor36L?4(TQ73>LSBO|(JKFMZD7;! z{tAqrL+pkP%}BO$EC?3g1Q9%c2%$u?L6;UILNFwk^j>RkSvU5 z{Cu_Y^bOCOlI!jC7rMW`IF!R1INAh?vbF7>IC}5u7T0q8xVmY1@H&VNj$9GhwG=r? za(ur^;>&${UO()8@aO^xfQ4Gn+dVK;0Y+qJWe?Y70_IIe1-{n>ptqa2&Z_-rRCfMw zzw~h9NTWMlUgmqZ`_OOqYvZQAqqvju;_9TVq%f)IZCO^zv+lu*A7nxXj*gCD)y4^G zSd51a<{Nkm9R21CkweBfK#)M;`wWK1CV-W2e4=Y z&An>TW*hVIbc@-4~~4o9)YdD4?F60?weD3WwGfgaeP=G-NmLXXgH^ zVdJ@D?RHrgUksf^K2Q3mXYgT@ZkBhG=Or5pW90+M&sofxOmr4U z*WqwsX|s(ht#+OK*Z!RDSQr<6{py$Z?He;-jl4yOeT5l5B>m7MDOIh+rq71NWQ7j8 zpw!27WB?2-$Hv|?`oTmSGKSW`BSn?Scs`K4QIc=iBYhoosn^fwUyesWz;&2y87O_B zn17+)j*D%T)$n%8mPWS1Qj<^dP*LoFIEUz1n$y`OoGnH!MEUB&LE`!Sr3_yPPlNt~ zP*;xh?gV`C_YTi@uH$dUZ$|Zy5ph~!)+DI2Ou+wO=+uWkx%aF3!$tu8j!RzduK%e| zf(g(~(W9*ZpUrYgiym;$&*tn)-Z}sh_~5}#99oY0Ni3wtq_DV{77y~1f$NbhJiV82@d{GN3_GOU3DbnjUeaMwt&8O_-o zYL)p{`m4$-EYgT~Fllx~~p!`q?5+uDcorLV-L{EX&-v}42`qzc1ZSC-j9z&ZC;+PRt{bPoDs2np$qp6;u2wLOh z`HnHVaMKBHZg{dRp^Qg#yKJhi!-h6D!vNvC5 z1HYI2LwGFVm-_mH7!z6LCY@mb@(q~crT{woh+<@`UyB9x5ytDQ;+w3};$jF33kw92 zJ6Nb;1HhGJWMtKrzuSZO=AAm4y>A}T9Sj-oV-Z@wa=`5g7?3VK+$}*nE?XWh9_}A+ zBKG?g_PUHg?bMW@ot-3rSNe_Qnc%DEM)K_ZaPHzwpkUTScf1bKaYT@|zP@)SzUIHX zJ)fJz)wT4e%-gIE7k{|P%OOU~0!Q#LlH z4>0Kf=O?zm2lTrrZSl~wgEi3;8X5$3a9>B{f52HE8+|A-mE**#bQlfAk--^9Pbau*&`}|XPlfh zmABw~Hc~{P3-^Z`v;rN$Q@KZKHZkzCc7gSP!Xi@cb{ku}H7o7H&6-y7_ux4)V=}i0swfG;E8sqZ5@JCbh>)V z_wvU0Q_-aFxQMXWBWP!_IzpClK@>BG0twe%}5bgGOilfx$mY9pC%@-Lwb2Jt=@iQV%XMCXOwM$%cRw#q=k_0rN^bDJmc*F-y zCqvoU)Z0V`nG5bq-Whj$mcE~r!_p74! z?S#!oPkfJ_KrG9r+g75r5#OziXWXBH;A;|ei&lr2Y&tbV;=J8!St3pu#AQv9A0C_b0$m2SISvla%e^!WbYEff6pnf#yGkg5I{C-z~r-e27hE z3`a?2TCs?W2t*^uXNe65WN~a}8MYAm(3cXhM!oE%GMs?z2N0E&RK!P(6r|bmpp$_N z^@l_5HyuuUe;=7ZsKh4flMm~J+^Y7H>+{nr7(_(G*x+(GVhdPAH(=-d2~wmob_P>| zKnsViI5^O}M2mweAy1$;<3Ihf=as^=qJqM*4e8s6lKz7`vYW<}aN7_`>Qwx55$8&n za6g|c3k}Y-cb<|(4o$C=T(Z=GVX=#GD>9l)0(`v$766C(sgui!4IXdTOCuJpjE3I6`((+=B*}si&twFugnmvibuc z%>`!cB)oS2Q~*FN^_Wu^YkMDhEtwAP^fF|a3G4bH|7C!@I>p?*nLt>Gz#}@EbH+u75ooi{5wtla(JnfE(m02?DM zkrp0_&C#Ow{G;IhECiZaoKN^A0F#wOR~!?t!3m?4V61Wm#PF3zuCq{LT=ZxTTXcdx zEBQ;~l(|IKa2EUzsHUN2f_Fey^`h|JF{xgnaIU)&F`@roF-$QW4q~yuIVy)UVto_8 z8b2Mhp4!dzoiJEg&FtT8GqoETZ;tR_AOQsXDRM~Q@FeVGz(yU&j}g& z4%f6JJcai!BmQqc_lU2+5OJL9mrI$9*(dc@40}x7V0@enVN^0T5r}$=Qtw1 z?;*q6^Q`yXzPH`JcT>LWr6*WENAS;%9xE;|j@Wo}Y+LrD#^>%DT*+WfV}HI##Az9Z z1rNCQgN+HEblvu1ZQ8hA4d!)zOuicLB?d%)GoEjMeujD@5dUJ@{Q9RYKsTCf4j;v! zc%nn$mz1!ny^EwbD6bRs-L$D=kn6{{d452*MzTgsG5#$fK?2k_*cAt`F66cH*%7S! zm?7`VJux@orho&@>(`$%mL7;zFfrgI)kGK-p^fmBLqVMvcj@Wrqm}WWKVv)|rFr=e zc?}KkH0mP~@^W%k(eX&af~0g@eCA*~XJ=<+Qh*o*QJ?#(Nix7~6Ve)qSMUE zF-+FKj`4B{h^i3xq99=0B2?joRWa1~GJG4sOSm%5+c*C7%QMSXiNmM9)ey@OcFTM% zuB2Q~?Pza7#4iyyXxn#HJzN7sIr6~2C;skq^50&PKeSj3KyZOX>JhWF{(HuwGYlX2 z_q^Jio@>dPSV6Y6bib(0@W}q2L$gA{2fb5*q$Xq>iGl5l?*KWET7>9x5z3Pfb_(Cy`JzYf*b$J@6mZ*-$bZ?|)1Pm5>p&o+ik9R6mE9 z`rMynShf$B+eKadrx#Fi@>te`eoYwpI>G+Uz&Uxq7#K$mSRc0WxDKTQ;sav{_D zr_c0ju+~-aa(HYiz^$B3r}`@p$r3tHd5{qXP1TMP{#nIEZU$sV;t{5hm-NJhtFQ6M&4qh(MSq-*8=0X_>-?KEIaM%Wt6vl1Pt-Ypn4hbbXG~IK zulul5)Pm~XJ%aswMLhGME}$_ofPZl*@>t2y3*qC$r^6@-kfhu{KdI)8;gO zc;|}qUE0X2^z(D|6uy=(Dg|{*WM|P83%`CfxbE7{yG0*0%Q9g*M|_r74bljeT8UL; zGqy(AmaybXny_%-DgM|N4ji zQjK&?O<`Y|V=_JsZ@_{Ks#0hL6fc*MU3NYc;A;Umo*s)E)_M}X|6sJ&7}J5c00`{t z5{Nqi1W?j>GxGIM!XE8*z(N;h44)hhEf1 z!b=W9{LWy@n9>;JR|H%VMT}^iRjsdtJF3tHyLy5yjoGrlREsN6e_Uo%!848EoqHiUt8YpqP5hjTg72O)6V@}s)6QS@;B_V zaUiZ~J6FqNoXk&;kDq|V4jLNWmC9w_=Q^dY`8sdOfNfJ@W_C7=>N$K~-E;-oPbga- z>WO60Xzh9NQo~u{RM&mMo13_kfaS|VbzQgp>#mkN-8Tm)Z2Fu8gV!w4Nz#hhnYI!f zktl6>hOJVJ2!u=AFa=o23&1j5x2&E%3r_;(`G&5o<)*D}tzbGKmtoli#_u5k4igKZ zC;s+wk8k$?etFmex5uU-mEfFdTRBeDLS+?`$v*ed9fflWF=(*)D=-BQS8uR}F3 z>b>q&_4yP1a2fsQbwF{IbTp9s-#b^`&D*tb%#{tC+g81JZd_CFaUoscNeVVK4ttCg zj{%qCbUADx4yiF; zad@hU1y5}uAIlwUjFJLPPQrXB`j)h~IMZ6W$A+eH^7XEvVaMz2$G4>I!ku&iWkOVB z#6UO+;6C(HjFA!#8+9V9)ks3-*-Y4qZru?D(6Bsr(U}2L_uct=%lGeHSWb9_$WrFx zSqX{;E!+hc9Ne`$JOFD$;{AIC1%;0h5v7lko>5byrDjP`1>PEWbVZYT9#2TI_~x5cOTe4mAxMKSVr^7-kKuVGR~hBb90)oBIp zJ(_{?6+>&aPRRne8m22~e)4T`#spsFcRcqU7~^L~&uV4*=7+4v=wyO-boJh&yS8Zp&xwvA2ffd@-QVa%e-jTG~Ii;3|FXN?3rt zX8{Chy?}ySva+%gtcyiZJPA+?<&~AVdhiV&4Mjw@cY1qOmu9ZcldRnh7BTS%(+S-V zU&pWb+j1Q=bKMtqp@1k&C`llKlLx;Hza) z$XCSGFIv~`SdDgiE3e~j?_A~vs^vRYVan%ymAfb`Ea%LIiDmJMBhD^u56ITLh*}c%tRK-j z0s;cv6YPM^MwFD=DH_Xu7H!tY#d6nN#Qm*%dSc?sh)w6q(fN&8UWs6nk-p)v$a6F; zk3-FF32jE4!@FH}l~55kf>Sih;|s+>&GjI=i07HpuS~_=DHCQP!UWgfg!vA#PgV-` zs<_Eh$3?yxa_mOMyf22_`=CUal@b};Z#my%cHncrqkw?;+)-Y*Ku9h7&ufW{n5+pK z-CYHCj(>RB4nU-(q|nKQ`9(xTLeMr{fo&;DpIy*`e_*O<_AyhRC;{8N?@B&qA2V}8 zvEJ3Ct|M7*Klk@=bPA4T|Cy@8hCh9}z}wKRFP?>7CDpABF>dIE`>D3&?~zZ7KW?l(l~-l$jl+_`8*NXC*}|ul zHr-K@S64`0JXDF;D?I0_U#WV6{`+7(p0mNcR*-fOvKuskDsUDPU%Cx_5oq9iEmQKX zWr$NtO{Fu%>@b-9dR37-r32n+N%ag5%VOlh5XgRd*2?CmpWeQVzwg%gJ8(0knhp<} zPq8}iTe~GU<47`Fd2Zly{9;pQwWc!|3z9~d;onSdunyrGj3cT!|etCp76&H z!deD1IqR3ODS#S~_K7%<_E{b#>2$r-Xp8HQcTpYu6R}8>4zO3tZFk@T815CAkJam5 z){Qj_?=-2JA;V0ZBYQ?pj!#BLL6{huni`Y7_+7og;Ke)iz46UG@cVwWmJ{UWg zj^*0sD>qti3{S=uj+;&yJ|xamJ$S5tzEH{Vxrt|*QvJeVJMmSqJL<e-=OOAb+OL!rhi&289`Uj8Qf*~iH?&W2h$v_Zu+qUBoEOM5$Myx zPr-h|Hc&G{U0eo|dK|qeQ8UjxRdHl+g27ic5{9}wh`Joe@xhPJ0N%qE(M%h3JcWPq zinzMX)cus-?7}!87OB&eGKrw!oQ%PFeKsrunMFibY z4C$eqvJ=nkVQulR&=WFd-43 zGV7$0x#ZEmOc=G4jea3y(S9`Tc`+G+Xv>_reE+(}nIz0ugjoe3D7%8C};KVU_~xH|2QsVzg3e#=JbpEMZT(5R?w6|dMT7Z zY>G>t-eJH_)XN$5ljwzOUNUd<41CXW*>z0WKy3bK;f~{ldokOA0ka3yO#g7j_CA&<9q!0cY z)dWg_4$;5y)=3Fwe(95;5?GgCniY zn8pm1>U5Q=wE_BYkJWOoQ}p})hUCUDH6w@SqzSi`_@XV3$9aD&`r4Ec~?TWjE2=H28SQ`h~y0i z4NrhPy%e<5Jg-j$)bsU3d~PRR<bSX}n6I+T029<&$0bf+8BImS$;&H9 zO)bnbvHwb@1gobkLd)T4T16sb7-Zz2=IbTEWot`z9(`0N`>*>6H?Rv}MK90A5J7YE*xez2SA-sfL%Xy~KK zy|;gcR^_Yw@Yxuc1Hfd!X?+42-JK1z-rXLE?DZ4{lE~mQk(fX7F#| zi58|fo-ZA7*iQc7wp{c9mT0P}9>2Cm$7Lhxwu-B|(1|$U?%T#HOjSAP>GHZe>2ff# zvT&@hbb@NKf~+iGE?cGxFbmE$xv5U)h#Ej3!nhih_@GfZ({zU6N!qjDrS|_ zye1vwW-Y)Bg;Jzo8~{RwCnhwYBJ|sDN_0MJo;-Orh^P|J>hVwLYc0$Y1GtZag+|W9 z=3#164lh7FZ87*<+psASS7P}a+Pwi(g`E!in0uUiXKRenAq4r zkHxQzYco4u43a7l+a|GHu1M8}6hqs~WeoWf!HII)XII{eKgn&=4VN%5pfnUqWZL4x zY+j-D6?z%-`zaQ7kLiGudE#ccEk{= zgu5`}iulCDsqPP0Gr)CxDuk|6+BAkP$;&j%UojgmcF!_Pc9f_{I$ea`n7Oedup9$T z`cqWWuTW=Jk;=?zjOTc!BEQqFx($<_1y)S8eb5?VKVu4(wDR+e7}cWnh%?JQQb`*Z zt&E7L>@?KgFr#qq{!cI9j#^((@VAMZCX!YrkpZ6Tc{BKNt3zn#GDS93&}xGgC7}^{ zuaQ4XxsiY5#QX?5f1s8V=CC3Az5p7d8BYqFu$8d#HpQCUrR~oTiy3_foQy0i0YzQq z1NDqaQJiR>^^szv%sedN#ey*me3^SI4LJi4E5ta9$tH=>Fpsq|rz44a3*SfJ5JR}s z;K;RO8ILk5Uy``MzO>t@lWOY4mH+_YV~Zdsn+vq4|5O;Q&dh!nM?iT690kcTa)ViF z=U!NiWM;B&-);fJ>LZ-t{YfQPnc%miR9sat%TG_n4_lUwZVto5~66iJC}9%arT?U@jb9!IHAaNhInITCY*c{;kRWt3-23X7NLWQ>sOReY(nkSWZ5Q z+B%>A?c4iQBMaQVy}4RP_Bk-d3?NoaKlt|j(f#UC{apr@b-Oq2zI85y@yNlNW>Ye@ zj5cOxzRbj6^z&p}<|k2m{W>T~sL9e<)XAzfwZlIB58OOK;eX|e{{*Z|HpHVev`;&N z6R4icX-aa00fm{An^nV$h2OGwKg7h0rtq>34-d=azsd|km#-|=K2c0F{1d~}U-`?X zYL1LeQ_jjt%FIm3&d$Wdq_MhMg-q~tYxcWinSmq{I{!s+l?)bzh$l$!=#}bR`r>!< zRa^G^SPqk3+_deMJ)9`>y>Oee_ibFoEJhRsHsr&DXQFGrXM_%Kg(gEB>(@g`96Zd1 zQa_e8?A#}DAEpYP<;%xeL=!`2JU5j|1mCV?isyicRv;TKes!fy5YEcZE+i<($;>Pw zEZnt^>CP`<$II}Cu2%uMp;DU?AJ6P#VBnKNeZ5rM<~_(7c(<#qe%%{N@394p8_+E zKgORBwu4pcx6`MxPR2pS{pn{I27k9ih z7>^j|m5PXo0|^41ycO?3R?u$#ASh=s?e1-t6RXw-0wid-hnuJZ2g z@>rfuDmM&{y9ghR#QOoV+Z_Q86(*^tO#(SOs8TONOV0@|_otBBYFa8CYgE76Ah#ULso4a+UY1W-7dECgR@e??&>WvMu~@cM{x8iqvGiAv^(RXcVStb3wu!LIKfcJmlVy zi?UU}GvF&UswfF2Z>&S#etAAHCKA+aCiorduHt^_tqAPYq zN!2Znp`Iu_t^gThVnb^z4ja$gc&t<&D$3t@XTFO2dt~=4dp$Mi$p@vQWbNr)L_8J# z+&kRE<*>Z29Ct=^!BVXPo+h)c-Sueb>@exBrFj2fnRgQkWkGVD?B$udx+i;wF6wR~ z-eq(F95n&V9t5?(kh5#-`HQuz-8sYOOellr9>N|;W%`W-hHT|%M1K17iuDXBtQD=V-}1HI4!q=N@~wVl)taSYLvRT zmU?O3h3a{0IMs8P!Jne&4+XBS4t>tG^9sKEVoAiVXK0osD6#sZ zAd1{x?^gbCS>q$#=w%A0)i$4TsHodJ$1dQe=HX%E;u7HH9oRqklJG|Rb)N0)a{7yp z7l)$ndOpc_d^8lanfScgZ3xu7CF2E4KqG=Rlzw;QI`zV3HBxo{-LCoLJBgg$ zNUD*+^SuYl<)A!W3j@>ZA3)orDtdRibbnq81Vbyw-4woHB@=j-w%iBVJ2qc!fUN+_ z+(&ybnrPuaKjLt19+R@YPDu={8GqV?bGi+={#7 zQ9Uqd>AsWjSgoCI*XlzDDS)~pE5+g6+N5sAV`dA&@1gs`+1`9T9!I&?&AxBrdO|md z&M~{CH{-uFmwac;-Su612MG=Mz4oU2Wulrqrpu23&)jFJx#Qg_(L_D;Fe1W%iD`dz zRXr!?X?sV`!U0FYxP8^kD3W}8pWUE9pO`JV_h|#G?i=uxC<3rUPoK@P5CStxKNi_+ z06pU6w&Clu&+%*OMfeYzuRlA^o(6QUX8bfB@J5lRUDJ^;pjop{7@rM=jQ57^gK)dh z@H|9_ho@RKLj(l{W#e{lZ|`h(s>pw7pMwIo=HCd)qYPU%m6DM$oB_|V6>(&IM_oeD z%dE(C1NnU9jEa5D*V95i-R(@8U{0+ow^V8zy);{>o~$^|Q%t(HvGGSuB%`dZj)>c3 zS~{ui1x>3-grrUv_>2Z1Z(aWx%)bhA7TQWz4%{zfoP`cboh<~2r)Chw^fQe5+ zQ!96Tok?n*Z=@EjJT>kD^1YhnW&iz`r=cTyp<>2ExaVv3X*S&-7WuB%tsuGQ^fAvM zFM+Fy#LDU_8Y*gy{fVgXH(-kiqL4!^$;X!#a;`0Mu~M`RI4Ipau$Y_^A&BOlEkt2d z1jVn8W6(jzaIKRgj*j}39IhHrF{ZV`qK5WxwGr*keU37dkn4biEDAB}kVj?B!GY-QV|*9~=V*tovTqb*4^APRi>S)cC)s z2uf#Bx45La6D>P*J>LyMu3hLN3(Ct62jd=}l=D_Y{yhA)`bd+V&zY3q@K5hHB>^yV z)ef-f_zpzx+~NNk1F*eF`@My*@bGRa;YbY>Apl^%4U2UN6zpU5s`?0_*=kK>_SJ50 znI-KBD~ApTKYbZFZSs+SyY1XO^4XCy-;EulAiVUx(fyn(%gb>yFXr?8>A+=;G=Tz^ zY5HvVRp2LG{G6PcxHy@b8UUXZC@8oDvRDk7?8H5;h2D1}CM_~~ZdaVxfZFY$u*X%c zHyb)YSc&I$qHoHpyBuJS`ab&N&c6QBcUF&xzLn;bc~77r^UwM}0PK*HI(F_iKfhCC zaP9smt0eUu<2QUXa&*clYc%|DAGB&M9~rJ)?{Qh#6XJJPTAIac%lS=sIz9G$Wc0sh z{lEKRZALv?vr7L30ObKOmtK%%LlgjaYt*hNlAN&R3I|Y*Tq9{D5^?~8LqWre<+vNU zmRO1hPkhJKp6WPZA+&sj>d)G4jrDHA8LQNAm9WkY{yxwa^bzSZ5NgV+SOam;$rtl$ z%m$(HPC&J(m;R6!|NQVyOyz7SBlHf9EHyEa2$u^hJ}U6$jH#KbbPX7=baKE6rq7c82>$0N)UD4 z(RVT$g8Fsd#`=i^o41kH6Cpeq#|)E^MGlVj#uRDKH~B2oGo(+fA&{Ej5V%-I?Xnpr zQU=ULOKdf%8c)tNg@KRvA_d&h4!Mu2Y}CIZ9Pn2{BMaa<+14SX^R z?Hf1lMTXKOfg)Z-Ged*X#Gf$F4%wE(&@rum5p;gFd;=e!PB*<}pn6o3{n8C~Q_WSE z?S<7HX84=HJm_8oAt4Eyan%~Bp^QzzV0Mm<*{JEgf-smz2QddHP56XW_s#TdxPHk% zwz5qUfvMF1KmssDSLil70?N{r+x4E1rfL?UB^>A+yN(Sd6pQwvmh9DrzwurIX?qO5 zzmJi6`SYX&IacYl@Kd;9`kfi!QxjJ#cF-(GASE%PKV-rODT2ZeUd|9~6o%9@Ktk~) zISsC+-Y3lqpCB1RZl*peCL%Hyr|?4tp(^RroG1Sr(FL_pPkb8*n z2%(FIeZT6{=LSnsBK9`Q>oV;A7YmTAO-do!WV5A#RvXHa2aF2#Pq6L9!P}Vfj+EC! zgFat%`HO&FeD{9g-F`Db5<~ag|Fb@O=Y&F=em_nW4?NO`qt2nvn0k*r0;@-E8Lb(l zM7a&CkJ06U=km+dKZTW?jsYn3u5Q8`jP@8hdV2JlPDwsA|F3)1!?-yq2&J_x4Uzi$ zdNt6o;V3~FX&{uZgMPU5KptC~bEgfW^)W1cu(77zIF_jFRyPWVG$YXDVLJ z&v|rVKL2mp%eVlq>Gp}3_;Y}JEZ?{*OEOH*qLQj(euMhuK@-gu$9U0~0bwzKoCVoC zNmab9TgY9} zQXVD%f!$k0X+?A)(^wMoBg-p+34`G5Mu!e|R|3RMr zy)5Y!kh;7C!GZXWPpI&NBaW8m0qG;)-py?H#1$=E{qaUxI%rZ10Ec`YeiK)F+1&t? zuhWj8^VQ-eFk&qazP}Uxy?^v$72W5g3r(xhd4Foa(t7wwO^uAnfc{+GfC!g_vhrA= zyl|?M_6#fIm*uuwVtFn$=@`l_nAikUG>=UU+Cng3hvb-5M)r$lFjS~ZC(%Sj$$=neA0NND>y}&)b$EXk%7?!q| zrU0_O#U{rEnN1>R&gM2ozmlPzmZHDd!$Sr@hx+{dNB0m2L|t7%p-LgAjXT^is|DvF zp>JV!{o{`{T*PKMnxpc!UdR2tUK2AvwgZw%=h*IMByuC(JQ4pLe19eDUKMR^ZABQ* z@;Kib{=|e~rh6eHXR&a)4%r+-Z=8X%7RF z&)%Z{y5P7#L)pqx1zq?64!7gvubB>{VKnvCC9TcAAG_(X08Szxh+y(Ttp*?_N@&DR zsC;ftfc$`=)z7v$L}cObP3rqyI*W zp`XMn7e~7nzJ`p@p$RfV3!lzw1IsBVUdd&Kzf1aI%t!L41BcUf? zfD#Z)HQ5_@$%L$?b!zPp1qw<@+lzfR5=Q2TDv%_bvs=FEpz!5()mdU-W%k_f!9D$A zhS!`qCamXqv`{y$5ET;=FXU*A92<-2)h znvU895N*1XVcz6vZtB%)KDvj5BJiAkK;reU7PE-b^@NpiCmgDPUxha`|99&6vo!;x zAx7!r3K2kHE8FM|Si%4rdy^{zn;ZOiCPj=J#Q;Tz!V*n-66+1;=1a}juOEFb-jK7* zls45NSWc1gMc{gVkzZQtGW)3q@_NV|X@o4gDhDhlFslA>UdXYvI|J?mK)FiB?`R4{ z{b>JeH9~23Cw)fnLM|gX(?>fb@>D7*gffvd93(ay+7ABfzK6lXE|wMj7! zB{U`bc$(=um0vb4=%gko8I`D<*NMpiY+ih}OQYFiBP%6V7p3wGEa1J^jFtQ7mmkAI zLpdJXuH1N=nT7Ee1=)DDE`IiwFj~j|@Zct9POxFfZ^5~VCT1uNE4m~on_U8O_AV}* zN32DQS5{Uk{6>A7dXrcHM6HkbMV|ai*F$z2HKfQ@N|X>p_6T$-Xix;gPi*%W*C6tk zurpmHvy%y<6L(#{7GZmmMR2^Aa^T3%VpnwN49~z>wEJ+#yJ((xr18Z(u^hT+4Fp!C zS>@ddqW6*WE^dqH$+?Bn3C@s0jgRJ|^u4M|t>3-lnBxLf)AlYb)A8#mEFM*VBCiLG zIeDxumWeRv7wS8tal!=6T8^(vF#Md$+I%`v7-cO9%u>+8&uM{>ck#d?t_A{am3Le+ zqwJ*%`NXmV2jpgW7<1-sFdt}9pB1{PMslfX!ypt2F{@#p^oN(%_DC{jJGo)JuA@#G z9+>vT!s^3xd&HESHh7|Bfrbwj3mdq3rUOMZy^jtKWRRQ)oSO9?YPdIXd>P zro`id7>jbeN1(dk6m^2Pl#lbnAM~i*Jzm%I=wWz5VF980MZkrxJfoa=vOv1 z4rb@tW%%3t+NfJ8lS5uiqE&^Tdy&<6KjWMC!atAuEQnsJCisA71xGI59C8!P+ubE~&158&34_HVAEN=h;Hd=8F+)R3H?JJvH`+ z-|9JrdqQk&r`_8J7lBN`eg1MYlI!R7F@WA5xxVxyuz4z@rZ!V;)T5%JqTL$iulUzf zk&z2FETMV%a{2ou^=B?m$-Ukit@nEK&hmM}zboIN@M5LOm!7-$E2^ZAQhnjP>+;Mj zI6?N^Iy=1>;)lbP2Zx7Ih!2JIy7!KIzX!g<$Hw8AnJUwY6&D?W#oIJIjVh?G2aH$A zbr(OdpqT_YEG?Btr1Ga(EfTQ7977mi{(cMV7ih%jk62o*c}(0#Xb5uy{w|7$)B;5d zj~5tV_RglUTy_<{$#s%Sl9K2=0kax^)NU$@a#(>iqOUv!A41q;q$f2G5^yQrcOU|p zh(;@vYK5BCEHOmTay$sgt)tQQhNAvf8J*&Zyu#Q*c21Z_xp%>C)#Z>cB22(Q)27w3 zlKWI5B#?tfcPQTgYLK;H2y$P%5wb4Fn3&0=RgBW= zT9UZQ>+0{OakQ;HqFNY7#KMq_PM#7CESMxL0aZ#lSZsdn$plt_rC0LgDG8m7D_^Fe zXitg;L!|3Z&klvYPXF$NqG!;=nqqV46BujRXmq$CW_X`qf2m1MmFyB$sBAiR79x0u z!!pn%yfO_AD4X^jwJKaSP`i)?Yz~5A(^)TlzadHZ?f+DJME&oyEU(dN-2iL~c;6IRt88M4dEmuEPyCy!BQQ?0YHCK>LvY$3wv&Ga zqyw8u?c0a@n2z6bhp$*TPQy<(>0~%98jGLelcvQba2v06GSW!J^EOHZ2aPtLh{=>{ z>q1{YCtmV z*;-dXe=`U540~RP@bf{=&sM2dK~I#j0k9H)VuW@xoRFVv9Lr=QNJi;J>BF8k79*#0 zw66I>{zP1L{wBCl1G#Y-f*Ou~I=X$9{zuKWMyn~pZSePrKn6QM-!c{h!~z-9tU6bt zIpTLWc5?ad?oyp+2W7sMrKRk@hHHW5&>zlxx{?aZ9Msgtzz8?dtzkDc7^kYL`Z7)C z{jq*>x@UH7?(4TT7P<`K@6UI#hKD2M+cGhlWARLqK&{Gwfob6SP(~R7BsN zj~_n<0~IFE&y%2jl|y`Uk#G^5 z8u-@Wmg#lsZm{c~Weq1Lt$(4|<03sthXySb0!tW!NzF~eRH{x7eMy5>MbcnB_jM{w z_w+OiG-4n-G5KFC05%O@>oPCsNV5kZ4%G0jj-bS?`-#Vtr2&24z{YjjG@P6(79WYf zR%Z4Y$7$(ZKzdPvhK-sX9vu;L$yvAcgd0QarQ&I+m7^@@XS%w{L_=5YaF1tFYia3q zOjGCLe}#*(hVq78`T(qeogHgcppR%Zh&sL+6~3qZTH;~m7n=-D2u-=?`yqlX1nFAM zAP@XGP7GZjWl}arzuX2Ms2R&}9&5qjyCZ*($E73gGyG>{5#jN#LG{ztiJ3SN!&FXv zUP4(M0EAH+G-MV>$A|Qb5TmpbK%v3!TE)?^9B_qRz?fu_QGVO^QY-f%*Q98{pqL^i zYohU%MK@u{Fux8Mw5PZSb%>O7uE zlaF68H#dE9|L8U@F0LKuS^?Td?!ZE07X@B6Yw15z07>F|L$a?~%0ZgJlS9>b{*PZ} zpi^#l+6=!=`l5qu`*6J(Q`Tg&-pUg9?8`99Film5zLkf9zeJLK7XS3VL;WKYZy`D{ zT^y<1`ue?U_5~4dIz{RGne*{urE?3mIUoeZ{oCjGaB#yMk@o16SXrNOllJ_NC3W%} ze^3(%)h4FZ+YP)L%)fVQk?#zY@V`{yo%HN9z|9}ylC3%R@*Z)X-6<(q~$NTx%^S(MF;v68bGQ-26?#_sLod)B+ z_@b=OCaWz5zr79>=PQ4s;n+9{TMneTb`zwJ`t%W9!(keEsHLSaeZbD&Q59%WW<$B{AF`wYOAs^94p!_z1+xC}AK0$QwS%T70Zf2MtQ+HrgmJ$>5B2(!s7W{x-(=Xc z-l+<2X*>wniQ3xI@HK!%h05y4VY^M!5kN%;;qeZinQ0>%7IT+yVb=MH1)>orp+MY1rqKaFXB{MOj_AxZ$R|?{34DSPgawW6R~eG9 z3@8!B)vDmjI+PrIBJX|(2T`Sb) zJ;BuDDp`IZ(P=u;hMlT16Pm5Gh`mt)B_Ib6m`{7yAN}K<$krmP)~+aI+lXuUTqu<- zQisRW`hg>G?fi>_j*{-LF^jB3O$}21QA;)Vb~%mmPq#G#NtHSluFF+AP53D2X-NvMP=4pq*mMSzZhyWD@X7k!jdF{;tM#LX%WoR>G{*aJ#>#is%#!Ep zQisVT)~o@fpa(D(u^WoW%7%{yt9tsSD$Q`IrXZb6S`||heJbCfc*RHb}y(JNf=&7@uYgW*WgS2tR0^4 z;CZvHg8OIwZK+ZI(YHc@WIk>6F? z-yZIF85x;y4l<*@yq(!NB;U|`Gbp*CzSnS8S~(4A4TGV?uQENE-wxP|jLvbu36Ne0 zmDSoqot~KpE1dp5Y~;j%1g%nJdF7m98G*5wdqu}fL;Te>jG(Q10p;g*;xqyBYN9Tsyw z2U64Su+mb`Hlgv4?Fkagd8MSUNDcjrq5N=;F=Vhze5f!qQ^hhCGBGOvuODKnI=fR4 zgA$AjW#uxGvh?4fD$vS^8KmD8SQIHy%NXWN{BGB!fS5fhDb-Z-xE$4Clv@;)m{sfV zZXc{QjSH(VKMs({CCf<(Q@hNvQ^hqYj4Yqx6x4?e2^A}_UGsBh3BSf9r8Y) zyeZZZ^KivVk>Mcf4 zZD(R34VWRA&@g9zh6v|YtG+vzz;Vq&3>w!>tsT5A=ODT#N8tD965_31o0otQzAx|? zTRbf&uPb{}8M*@wH&WUrCX5&V24qPlBv4xiT|!9FI%8;ML}B#?w4^kXr!imIa=y1n zifTE4b)Q1u+)He36}!7zafelyx6ug+e#yx>QHdB|%h@BJ^19=+8sq{Nq5Qzk^kDfa z3vna_MIhDR`+@=o>WKmdxuQ}rPRc7o;x&GDtic9e@{K+>()wYpbml}14ulqc=Ry>{ zDH9crO8f6N^U-)B=F;o*@zUb*5f+9Ut4nLI+$Z{(u6ONq=3fZ3O}84#kqXf!YF7p} zyxG%nxaJvP%r8@tlhxs&G3HJ_bqfWFiNdx^Tc@{J_P;Ut=NGK>P&SeB>RtFz)0Nip zHAJ}e|9RB{_m zioeWizO2?LZ$idZ#5tX%>sUYPR`@7^pXp|Pd#TSYVDxr}+%BU22@&46?lk2$>jzt^ zor1H*P0OdxzMlLhpf?E2?JEjJrv6{`Od#?l6Qb&8L-bSH*HwvMxW=eV8Jc1}1l55+ zY6Uwxu7|DCLaXm{zt4Jbv)l!Fe2R|&>2qM9+PEs<*wjUO?a;F`F}DF;t`3|J`+Z863K`fRGzKR$_Ze**28m%EuA~^ZH~Z zL$2=OZ|qX0r>4$w)!zDKO*?}#JLv_TdT)L8J|=OraRi(J%?!$} z*2S~)7CpA_WV9yF63v)>Sr`~p)UfZ74mw1ks0zr2t~?M1P?{AxleUr3yVKh30_G%Q zqQnz%hMus!Bj{zXm|PmX8Uk!e`_f1)Ws{!_Z@jeieMC=d4dgT`nHX85aDL@ssrd3m zndda9ts3UE&cdu+74*NHWkt-FGc#AMg}7$mgehG7@zDg7g)lqVMaj9IYyJ;YYzhsZn7&YKNDl{ zT_uHe(f6b&prWH{%c;(G3?KW8;GjqQKP^7Hi6$R}Y2BN2MQ5r%8xxbtHei(x;cGAv zt^5`vD~_N*Y~S#h@*dG_p{T2WEN{Q-itq5O8rU?cnFt@DOn~^$=86ijWd8)dQ$$@$ zLKPrgwD!L&HMF`dD&F34O-j|X9;?32p<>A0UvRTmD>5{)+kYGQ#HWRlS~wy%Ia$-} z;d7naBAa_i^o^G_9;A&5Cp!(HHCRNaey}pqZL5BX9;DYERM-8phu7;NyvK~&v z={#lA*WVpZM<2siI#2SG}6DGBknF zH3yj9x6j=(6kgbH;ZS^K9ClV1$Z*eaRaU-AVv*yK=ed0%F-ST6BkYBlRzFrU(ji(G zAED_<;rW|C-Ze@>OB8VE^9)n)nqEQ^JSns{yLvc|sLz*&%N4trX>`kqQuUn4TE@!V zNI7gE?}iYY=+C?^R%JQw&t_Ca7%1KA%jn*Txnk|3lanmkQwT%SQRb;qM3TdYw+RVH zNOmHlA!b(aAmiBz@N{oj5JeCfn1s<1sc*cvIBlSaFgbyUIN2X31oRBT;H(!ix_U-f z;~+j;%pBxdSRxEnKi%!YjXqODib$>nB!W+1YR@wn3we79PO_Q9afHF!Q|i_x^SB8} zgn!Oh?ndp@lw+2n1P(@P`W;GO{q2 zoiLUvPAW-EyHqM)O8j9*EIYF1$(sKH~ zr2mTr;55an$%`v8cLs43?lY7)c)Q7lal5gjn1LiFOG_Dm90wwsXOL0N@85}q^N^v~ z>w7c1lkm01+Mx)alJX0N(qKJ_Nq1OFrTB|pDjA>gKoO3PiedqQv7$XtsbP~sb{9f% zl8L#UDF$1ZBjTZ?WH&co`ln zZ1jY0`}%n9He`M~#LfNV8Tq-g-FX7VHsjDhUtgxv7(Y-JG@38-Va3i1H6MH2Y#HE1 z4Wp-Z6jRitJfJCH02t>IpC2VY}D~Of3azWGeN``g}I3O^i4U zK)j?=zt{81v$3|_Tn;$mSmWmJ+dZ>>fA#EWcst*h!Dv&7Sp5Nb|IS#N1g#q8;I1sN zku#5)*TZr=;-%l0<|>B6!yVszj>l|Hz)NS8O8LY40tBiAfDwE^4liX6|Do#Q!^4Hu zGF+7*87?lZ+z)ak!VV$|(od2vE1T6+D=UqzX!L0#d0$!FCSazfHdM&~Q+Lq@@q}yrL|AfjQPD0$eIP3_*7!3^Eb_`TJG!@0tYb(_L>{_ zcL@RR;+_oIDOSW|abaq+7r|OeBZfJ_-K0S5OE4iu;AS4nq}SjJKb2wuxZ&RA0D)nS zfCIF{nQ1hK7Yoe*1;%ugr>(g&EyO9Pw99lUgU$UBg&$;-e^Ny)d7;-{L$1ytoSEA| z2(d2}HiKF6e+xpov5f*pgia8crXhZ0Ph5DIh#CcH;P&QD!;6`p3jHoN7nPA$=BBVt z6=76cx{EURdwjFYhz0J4h^uzua1Z9b;Oi&M>zbKBZgm*T3&?o_3lG-=Cqn1kjh-oI znnXr(o&F8Z0=K*gss}!2_@kZfJ(h%}4q}$2Mhjf4xuf*$VV>#jn-g!>oT@%;gz4DTXjSZpOM$_qZTe1Q@0RuwwwD{Xp+rx7;xSTH9&}S8Vxt4S zIt#V5h|(Cs&!&difc}@DAE6KbA90D8pQ;!VKvGZ|Z3M*@CCf9&&An&b*E?IZu z{I9nJ`r!M}5b`BP7&>mfZ3NP> z*GA()4jlOUqn~=7_7O+y0@MC$k10k(7gmPzC=?s|p8}Av0`V{wxDz$`{gPF$5$mnX z^Cl)LVZ7Sl*vmkM{2$l`C`I`3cH|>NLqKsAMfe7nWAyYwyXWw@FdO&FI9m6UwaGy% zNvPY)K8KUF%B?Ldu~MlB0EqIswaCA1EH7_wbv1G$A&xO-H+1>L^0lkmS2OSPxAnF7 z6HY;%U58d4)eIk$iZ2Udy4@APIdd3dM!aA~k-~=BSGQparS7?W=_mTaextrr`Xg^* zPg%W)n0Z=Uz%{O__;Bb@1jm&qK^b#uO)ix#48-?d6e&SUBCR{-8&}(HY*-!$=be(Z zc7M@9sVv2tb#?Bn+!7{E7xn3weqh;r>O!P$!r0)A^pX$ihW6Ag)k#gcxXXC*lQj42 zqW#jQD)hwDu)(X|;VH}#(LrL52{%-$n-C!kEZjeNgK7Oc#Ny!fY+Sbn@=?f9z>6U{ z+*$L}pWIn7ce~Ve@CiFER5;Qco6sCn);Id7AQdHjYv!5a=iOAObjm>iyyAf6Ha@M{ zeK+=V&i@K0iRfNovZVS1YJ`M!Nz$-t_`E&R}>+dX>3C4>d5f-s7#P0$9^*sW!Wv?S`KDQdK(T7ef-X-)pxLI_26 z_9j9cjka-?59azeENWE+@_d`0m7$c|sQ2xK^T%;j{fHt5V~|3e)nVgjBdRSiF%|jV zR4uKCpBs=Ym2ZcsC6=2bEUm8Ix98(KwG*Z@Yh8amUvHn)KVfU-UVqUGLG8#$zF%^|jGUB6(R+2skr*zDnP#`RVnH3I*dG9)bA~E+-d8s-*Pgc;oM%-;;q*%5l#8 z%C~@znK-8CXEU_crukwj{qE|ihL)CHLpVLjqf3d)AGf=TtsCK<(^CQ(7WlQk4~6CB zt2-IbmxZz{rVF!xd=dF)Esr_l@UX}n5A3M_wf9=0q23gH5t6tr0md+|(jNg8)x&A2 zU9RrW<%!ZtrU~iPHQvnLZl6i>oNu2M&gBTw`x`k*m(`JvCTImnh?c1dXCjLi=w9lv zVQbc7y%n^%F|}fW)~|$$<%|(kv!krjfDf5Uqelrv8^Xj1d9*}&kyM1$NHJ`-&ee=y zGv>;Mn#z|RM5-?2>ZCp0p@cNlhjV+x*ggj)qHTPoGd;QNS(fbK$_xVIqT$+~K@b~I z%j_~6c0aOx0M-<<+O}frheY)8}|F={x3i(4Y(!*gjMVrwgM=Ku5GT@M#TSxz4k zl(S|02IWiXm@rWl7*Uy+m_7r2WmO&bq`@_YJ;%u@0xqR)pL-c+7pY19!!iGSWbno2It*ul*u>Kz>f)n+Nn-f3MKdO#gjx zz+-y0^)@eeL$?yo>2q}ep+jqr$CaSd)uC{zJ)^R^%l_2EGzlwMLA z5Sz-Q=_8M>SkE|Hcj{^sM!F{97QM*3J2SQ`CBgL9x~4#Z%D#v?LtJ(1P0+{ZW~AQp zY|;g+K1(E0^4VWY*%_gqRz3kq_72}UC)?4Jm*7a$r^Uuit9+YQxe>GfI;>LD0VhLv zzqd#Ue118R(N~nR>PW^&Uw|uf!br-%Ad+)n$@0mKQks#<#4m>fNai?U!gp^iPPB|#L7l!PK*tk@A{=si-$uMS7zTaS?!Nq?&(!i*+Q zQ%}nPItYAx`)XQz26udhNE<<6Og*iaru71Hj@t~VCwI_=nwjlLcwP3+Km6pfDk>K6 zctjLuU1+$byGur8JqlM^kkZ+EzoBY4VSetFL>*Fhr)p{~&`&aXf?kRJWsmawSZyFT zJ1Lq;$l5`3&`){PSRl}goF`_>5V~}XGzrK6#=e^yjRA+i;X$w<)so~pu|Vt_f1|<4 zswWsYmYfg|B#=EKNT@p(4KkB^y4F!*5D8bSpRi=Y0`a5WuqwLXO(JD;>~k-@JQ)>j z=Yq@#LJ1{5xb-Z2?>_D=>I7kdNfuB)<#>9Nr_G1FN5P)r7~o#FeGBV3QYw zvCjY6=C8Ao&BEk>ykzR5xy7sKuKFpeNfoiYLzs$)>nW?xbS7*?{%WcC&T4--%ST&R z!+eW-5q>eu_O>atNOw@H-9wMd-4RG%3>}^|Z7LG)V{h_w82{*-!8PC|7nWO^#imoZ zF>~~ZZUMLruSVYVVDEGn;uBaL&f8zm(5^TWqTFpnutkT5b8hpj&N#1LAX*CV@Ol1! z*YrRY;@QH1vzb}?Z3)hb`Jx7}pzNloLY7DP+h`R>Z&%Fweq)YXX_G#E`s(dmIbaHW zrYt5VW^Qf{q_Th8E;((#S7R>~tqYm&G8L{9HNVDG{g!fJ06UdWNnh{ zua8x6kfzU8FjQH3JsEzH=0YKzdX&d_xt7PDfZYGC_JqOhAn$%XNtH6_2t7h9j}aNk zQigCs8GoIe2TFL(*j1xsKZDy|y}XjmekDW%BzqtcS*UQD z6K8|LGj=wA_b(O@E@5`GTOv$-Gt(aakmhOKDeOwruFyx?lM6ik>Lhtn4AA0=6Zk<< z4k{jJ=kN0iOW5ZYLhsl=H)4M7fsKHvSW=Rg*1=jzRpkc6cL$#O_Dd29Gar7EU zV%!#aLG?Hv{4|0o*T(iQyRj;QP$i>w0 zn-LKyvcR*`Di7bk%zSU)UXX(QwyoN`)%Df;PLR`WfV+E{>kpeX!am(kLam?LekIGN zdxaYl@_mS{i^}|oof!KgFva&G=(=#$x}qbV?_ZqmzYT=%mXN_j$JMoQ{vx|=2eKLH zJ~TK;0*pVac2W>LJwU&ppnzlJH?4(q>x`q{>jUf%Rv6hqX?n`aH4f|Df6~y~+H@f! z768k2x;dbj&MPlykQ-!5Z1-IiH0>+mEhX{!fA(kkFl5U@NeocltfBt7ZOR2qY>Y?t z#_MYk_>3s#yrjkkIuV05zWSTJe$xIv#`pC9aWC{?TWH*L?rA+i`BfM2ytUJ<} zk43lr=XdWrUNdvM7o0J(K%a@aLUi+6YRu;Ho!aA?mfmiTHM&P9c*u`}J$@&5@q9!9 z0-6Iy8ka&yk5iMko_!is-TNb~{_8KXHlvY!<(Z9d51{f;shb~uX`&Rd>2 zebOq8p_gjap1s0Anpi}$Cd?KhdTN^|k6O~L{au{TM(VsGV*P)P403eZI)8~l=&`yrqd#_MEBx{XA157On>`Osi+ z`r;WsVtn@-DqGO_xPKBe_!kX#)PR4yIn z66&KswQbw52j+N|-bw36#zrB(Y8dKe9Xck$^r2Y6Pn4cQ1R2!6A{1S_+Q$_S#xG`- zM#v%HnNW#5fp^cWWe7+E8r|1(CSfQ01)K6F;ZzLOZ(BLbJPj&Fb5;7XZ zC^GV17HfbhzKEJcwlm$v1{jAA{bGg{=&~aW``W;yk@IXQ4U7^lu&<;wmZbV;7wr-j z>0KLUw&%0P92w|9(!s#kUBOV9hI>6zRpYy&2lVcB68rauTQ&V+B%IhcCWO8~Qdkb+ zgo==_kC6QQBjqsFuN*0hx3|o^c3uaW?{VfX*a3gx)Q9-!t~dtS!4>983>VFZQb>R2hI$z< z5Vh}V{&<&(>fj*rC6|+vk%J+tjrQhFH>}P7U(wgU7jYnR0}&sllY^^X>+B$q12lfN zJq#r60ahQ^IhQKVhg?mIq1}}cMqk=M{-S1^uZVuPy4t8@z$;?`=+)iUFkFGY&y^iU z$3F`PzlmIaL-T8eGDann=ufk7)HtQ=Cn&63YQxExOQd?8>Q`{hR6 zd6XAi6Qr9M`-%^|%f1DRf|yeO&b1qa6E5vQ%va>)pKo3^O<3IQ1}lUP3cfl_U=qBd*YGa1Vc)EVdM7gc#~hD?D@BzE#Tmkqbv8Cr!RTEaT{J{Bdd^V6e&-Z2TOGTL8jun?)Cv%Qj#l{Xv}J zMg^VAw+@LiS>LuYIq_IrHavbSaO7RhKHf&1FRs_w5s}w0p#;-;8)Z7Qk;fL*U+ree z=3rg@2rH{`Q>0JXq^pcT{&M2;8c`fI9!L_;tuXH38C$mPO?yI7?B;l*k1v4d zpjSddPnd{SGMJsTK*adXNaSSRs6@oju&`dsg|v}T5dBR=STo%FYW>$QqUA=bmJTQO zVOJrl_V3IrXaCQTlkpWCx~C|P3Y6R(p5GEYetZn5TLHd>n3xz?8qyS>(k(UF$LzTY z0yb}qiRpZM=t_XJA|SUMB`6Z1566oZMUnygC=SHSO#CK*ECLl#g;puTU0W%3P0KMJ z9gkRuQ*2Adcd&UVw)v@vz}(5mH%e?QESDd(ar>=V-vv_q^-NDxBX1NdWd{+Runjk` z%ROGn5*?%^_{3l^-_RHF(CV}+=@^;bXRKGdwQ0LN=g~eJksMDepXrgetoJ)G(B#5H zn>dT_wDji2wC>UNwgk{EeBx0yk{VURBfnZ}W+fx@vBcq}SRuY+hVX|X0^}PEBzE&g z5@8YD?bAI!HmT=RE%I9N2N@}yH&!5XgG(Z=WUI*0-`s`y41XJ4fI)2J*uKH`W55>< zP$O&@&WnMGDH>VUl;lSAbNIBh5D3acXV=o$o)yFrMf-*=%lt|^QL3z1ZPc^?F{>Oa|9uU8IQmt%5xtN~r2eaj`juMkd z>J>g3Xx*o7#fnvm0grc7ElO(SV$Q^+M`7FQE`UQR@y?>g@-U1%19f&iwdh%|v319Q zX&wj;sw9b!xOJ643Pk>7YzQQ8Y#~z;qqZ79n_b6dTr+}=WGlNxcjwNTixz=6Y+0Y8+6m=dPI4fSGLfwIXbD^d*q0u&-Rqpl1mVU9n^!sKGDmM zg{+0&-kC|Pnv9GCKFeniGLQpuC%qv_H8$mALXd^gZvw&o#(8p+U}FdWWRRdzkK8sV zSv7Vx7GiaXslwksx`vMV?FEqEREcg~3!vJH>jUhDWFpUzkw^hCwm%YD3ehz8>SmW* zo)0w3+#Cttbsy59Qc;{+0cTmxZvv!Ar zkl_WPf%4@2cs^tsfk=71ZXAlH!$uAdZ6uTdmyIEfD@Za^L?U}koci2UGkfeUfx=bx z>$@Q2fo#OAHFk>uFyUpq(%%>cPro6DoB>H_dY0u%IXq7A?Ah4r+?U+xBKThM_GK3t&#y*e1!r70@4=9Y zNw2CMKc{>`zS2`TIgV6M4Rf=idyQPZ{1FCjs-_m2>6|O!{_fm4lMEd%C3#(_cD**lB_oP&F zbF-uZSs5p0gmkS4#O%r)kvJ;I*5Zn~e?3 ze7UpsomA?4(P>#0kvh6sl+du)HcVaHj41Dl1f;PVs9O4Jfb56mS6>;j%A=!jWO&r6|v#_2f#-WopHmq9~`w-Ic{E!^}Lu z;Z#vOK$*AjgI8k(bC}mn*6CjSAFkdyF6yr99v%h;kO3tJ1ZnA^K|s0`1d$LKMCnpG zr5ou|x+Nq;UH`;T!8#-+INhDbkfzRU;!TS?B7(Ol34n<(i|NUek(BSPD z`Y6}`Nu1_OroYT z*CRQFpXwV&-E@YKRpG8nxS=@iUFnN{7PV337tH6qQLO^(TCfGspykDHmo<|6C2S;H=859I&+z!gl%xn~M)A>Q* zw~ZnrT>2mMJD`kb9$?96%tXJDgbpJtx-=pB@JxZ1-eMF_-%RF+$n6~KmgNe`FG>B6 zp`m5ZBt2`YC^W-svnjv{SJ%}wfA8BM9EhNjh zl#W>f4sdR6j;@)j)K%;5uW@rM_<{0W%txH@!NIuOV^yzGb|~3U=H;H0VeV=m3?jfK+l ztk6*4cU-%2nlvG~Ncr3CNn2~dZVF5e&xQsI+Ar}(kVn|#j2k1Kt~D~L^~-QOv{e{x zdfI5XefgfuUzS@pPNH|?Hz6!gOV%_Eof+O_uN>O+>AMOdV|njwYAj`GU2Gb#JQBf1 zycq0 z!#Ke0!u4fu7--%$-t9;s}P z12&EMUv1!OKgHz>8T}9Vllo0Y_`kgKfHPU+yLjL->;dNdAn;}kWPuKXmBSzglC}b@ zB02qs$&X{x(q5~oHd@7`r{DPZs`Pu2tKo3?9J|$u7{(R*t|;kqVK+XRIN4ih1^Xss zq~}($K#maF6#i}ZoJrv6L86xs?DQ+V>EA6>fI1RrT> zTA4p+`{iZq8EfAsAS`R(x1J<>kTUhEBA?Z4<4^8#D)#2DUw%OFuC94t!+o34*c?+c za*6PfpwIH_#~lQga$_!khlYl(uT~_jzo+bk-U#S!&eHg2XrdHk@g>#Euv2tZm2glC zhI{X~U;B7u`TOQRBY7AS@FheN#s_QPeZ*vBt=bQE*cXt#s8zCQUD}b}9117~g&La?8gyQ{*aHo4CmQ;pO`eH-Ma^AvdaFWATcxme z`L1GtJJ7s(AV+-KPA`{_;Z@i)*!u+r6ujHOuqaiW+Y!zcbq%e5A&*< z9fe#ygoJjJg`<;^6~|y<&9X5VR<{#n@-DlLB8!zHukH>eCO*>fJ{6i2+zdk7hmzG; zGJ)^kGawF?2;mQ5yQLfFu5=2$XxsQQyvp109+dD$d^d#%Y~nAYREcoId8Zb>c-6&f zp|wn4p5pfLnJD|PUAH|0U?Ox-bUj52M-7})7`1o#nc5;KR*8TlzD`e71_z>>C<2?d z85PIB@eg`OA&Y)llCTcsjs)3IYkyUB6?u-V5>HysI?~g!{W{#0^2Tf>04WJ!tAr|; zQW!quKL6_1Nno~bu_{zbU81ZgW9AQXb3ao$*;Vh7%bXFuC3$!`;=> zql{~h(<(b*9iA04a(Z_DP=gT= z>vW4GG7|TVG3ZOmMT$ypxduji6ZwUxDSx^OiIybZr=#bgx$&I5Qt6N$z{)IqtI{ng zE7-_bhRp2X&nhwL zZ#GL|WI9igr2E?-bW29evHR8s?Txf3@=~DtYlzZdE!F`aDC&2iXTwjKZ<@g?N&<9~ zZ=CY2a8lCKBbTJ6+rX$9_>S-0?H?xmU!{hMCJYDzH8xlXcLN&|qdjEGa69iCle_=? z=_V6S`+P#N!*E`Y)*~XCd~|=NJ>a>XdP!jy$ZT(uz4Q8@gHcHAXf)!Pglo6Pv#G1i z@^}3i*NxrWk{3r4&n^x!`az^32WUlSH%cU3)(a-=9qy!%#`j6M17pht;NI>#78Dw) z9+mfN7#~h7bJZG(Y)XAWTS%rLHgv^_60>{h1qZa<%=5?zcj8*?}8h!W~xsU zb>bk~P*9lf7WX)J_pRpUd%T=DfyZCuBDKC0WhIPXS5@l|s;6cU7Nz}cZ#RmA_O&!O zpAcY|l9yyYHW<3q+TYAN`$z8it%)z1&(-2-Uyyr|>4$`c@uPUw+NZoGSP|EM&v1W2 zO!j!<*$L1d)cOUY@r}82sRFE;>mjgLv8_5^M}@lcnN^EA(F0uio){~d%0i9=CUa<) ziZfFFGm}m=vTW-l!&O|L?YE`~(6S!d$jCH;>e zhU&9fTBFp!?xm&;q7n^90#c1PNSeQSf`K04O$|g!E-oj$Xeq9T6(}T+x$taOPI&H< zO9Rch>aD~0a5{tpJ|Wcm9#;6nPx%#1u`me{IMpv~B0~%wRV~Zr1Uf%0&nHjtem$%U zQT}f;^p@4f!C!+h`YfwaR3zRaBHJ!t);}i!J>$_PCDX_2dcf9ouIGX7Ka_+1Zqj$S z!lAv_`Ni&om{CvSo0W_iHqPE&YaD`NTfZa0-&^-s@^29g8YaUz1NLc3zSowORb(-g zl5n$p zZ|?&p4j>RWAXP&dM{e=KWi_qyGc-hAxIM?GN_#$WkvQ-fknJ+#?l$V{$6!0yE)T~7 zL$3ZC`u4pmp>jI}#YrRSbpcxN-K3@sO0fD(#{6W|W;-jh@1TIJYP-vFM4}7Cj*vN8 zsbYjbnnh8)uk3N?7bkB?)N*{723$cX>^-#pJB<793?=mm-Ylcn-(*3h`g0Y{;e{}G zUJ)fd9=+fNYv?fui4%3U9IZY5E@4+46uFD)dvZ`!`VkpYkgGCq9)js~PyDPK5WBYci3C^H}Ef0k{>SiWZfhpCi8 z{jMssAU02YEXPZASda*i@YMBchq4t%*}sh~VzOw&K4GXpNNz+y)9ov4dBt&j9>{ ziEGAAr%U3Ow?_3aY@AAC*;{j;=*9?f%zTW)xsKgXpjqhp>$9Z)4F|~~MAkxv0x3Ws z|7XwzGMB7ff4ej`{)-efn)JNv;4=NrimSPtt0TFuPjDHQA%>EI0xksxA$`R<%1a)( z)M_HJ-H`JNgD@Gx0SPLL4=&QQbv1?1scY>c))S74%Vw{4dYv4H)SU-1 zta5h3?fxpC>OO8@z=G?w(`{bhqv`Mxv5OFd}GpmO5>8KdEek?aJ)@ zBU9&L=|9|J@fQ~!sa5+EN&|nn5;l7H`zO1+?hA{~oC`+eW|cl?+l%7O4Up=f68@J9 z2z|5wB~n$*S|oLOGqQ-D?*D5a?=Pa68rbglMn`}q6y&-R8jR2?)gN<|md4-*Nh!Kk zdRvpnp7?1?C2Y(gXNo)YIssr=^)$*QKvEbDBb6}g`i%_OuuFX}WVk)+7Ts>I=!?0R zqiE?b-sYR?IT!bFW@zqP$9SDIQYK&e0*fM^;=0{z6!z_j$jWYfCf)VSsokM?6TY zpJBn}_zDrdfKRy(F8FxdVrYEbEbsfTe$m^Hx6Ul_1d>Q#&cC~Bi*E!$V__s=5B#&L z5BOa*m|r~|ElI*2eb~!_fYk2KG(6{YBv86?ZAcL4V}wq}U1uACj`~;Oin?;U@^ZRt zki^A0hX%G{WLVAG2c>Z)rX>DnvAry<>|Y8WY>(1+?oYP_xvI3h`KS{X*#@o7Dx~4| ztd+IX*7mZqbN2Ewbv`Qg$N3HdGQ8R&<5GmKYptigb7*<(b#v2lYwura>D671nQ;TF z;@aaGZ~G>{$6%Z}r={n)o13tmA$dJbuIsW|Iih=U++g=j-&#F)B<#)4Yn^Jxx&5WE z7hlh;FV6rG@e*w{k(?$fv^`e7)#&>g5YF9w60r$dy7C!4rbF^W5)amHVe;&!=v$7J zE&Z9W>6du3onS5#oE7@djNo6oui!I8WyBXdtNA|X3k-;I;Ru&$PmY~GInRXH%Hk7x zTzzYPXAFnP(r1dWWIKtu*rCT*PW$Wwhw(;Zx8O3%Y>E5(_D3!ufn@Wi#7{>whb)<3 z&ET%jVmo2y;6O95O7zhO{;zOPMI830SO-KH%&>*pLuG$EA>aS0YK2CqX$o>|G+tdc z0E^DMO7T=eTsn1UK_=aZ%aaAOF!F2nx#oA0r;C5@NP5iG9ba7?O+?jQon`2Gokkt3 zNbWYnk3kH?6fkA=-2PDmp#T+A2%)Iwy3_<*!MpunQP&3<-q*(sdM6Fn?w4WQ)92s? zyw2A6iz14(4;I=Yx`6{7aQO%6A!(pw_IHb_KL<{gFJ5VDZ|^;43%&DnDC%2BgefKy zQy>{xEb-#T=Dt2<0mu>LLz>>&%51&skIvbMH1+l>DR@O~3yr(=(e z)CA`>9HX9<7)$Ew>E^z8{)R({+-6Fn7ck)F)^ClCjcc5@@Z*^{s9Lhz$taa_gCy!9 zNFJ{Vb;fvL=YfhZLYiA5bqV^2R9u-1)p|oeja6z#uSMmK9#f<6B0uQ~!&l9b7_GBB z`Fd4`7jH06BaGB4lS2nl<_){kkKf(Df4`9)9~010X8q|D`WUqkCX@y!uaap$MqSx`7uakURt*dzrPY1;eX+V1s`EaUh(sf z{?-F?dv$rexVM3ibt-d>Mcp<1V4=ezZKZNg$V5M*E-tee00nEc#C-jQ80nHER5XgN zJt}w=N7JRQmRmgfy!MUO-8Ot?dEhgb7!!k`^RMUuEb_jz{`HBUo)qt8a;ugp{vhp_jIM3gCm0PXW16lloDts%hlwWyBV z*Uc!&DlDwX%F4{SUz0hjs?rAv$hVz|??f7EI^Qm;y)NH@xRGISZ_j|!UTQul3btBr zaQ_7kt=Qk~ny9+d<(87VqxJ;dvz9RKeUbVaumMP;KP|R7E$MwltLL%TUs4}x$SSsT zd8~KZ@2z@y3G~v7z}D+zDZvJy1(T`jnFlu0rAF;Xb?)zI#Za#vNzU~4K4Nsb5HhQ* zu5;cRpV+BlWchB@d+%E{zTbZ*5&zG0?mvB#2VTYGWOHX;tKxv+;7>PF^NY*3f8!QU z#bAnQ$4VZ353W3J#bT7E3mG(H?Rnf%pa(7}xOeUdjW6uE;OqPwes%Lw74cBwPYv_^ z8qMD<<7sUCVA8k2;12RjRt1dF~FjQD*=A`AcbJ1I(3@oWIN=E z(`yaQ;gth7u{dzdz+r>IfKfdTuyL>PzTT;EwwkPV`g``bq4?$BDPaE$3`|+V5T3gY z*L4Sb?Ij*3bG7egE+=$s#Lvbp?lfHRz0lt=dZ#_0gG_hd?sGlZZr+A-PoDo$x>I{J zE(=Wa6JYT4laYq>)75Np;7t+%o-Dwx*O#X&*I!Y4z2lXV*3-3y?U7Dkv$(fs@)W=> z@uShdfG?d0qODie)Lj1i0tBVJNuI8v;#B5a4-mj$#;H`UnX(%*aX57fxS$*VX3%mB z%G7$jXNvxTvV+^|KxCb}P_n%x@I+G()#%$xLC9nv4Op;jf&9yq;{KX&T}BQIns}lI zZFB)yPJJ{1LS1gYwdSUKluSzz;@RZh~ z{*aev6ql%U$IaX4=7&RJcuKJshI-N=JKuY+HWFJ}T7X59k)fd!u9h?s3<^3sJ5!fH z_2_;;N*2d1zgYki3v>wOgN2I)<-uC(n+<11lnx$jzuJ(nhYJA+TJRv6#DC zfYIZ@5Iv5ZX{6Yn`Y9zXtS)>g!^b5^+*d2|oqm z3k!8=RfM~5FD>gHuV(AY|CmF!-&CBLqth^?R<2Phow}&GX4`(}}n3&erS;p5$4Wf7KV^m;gX)-5<+y0`#N$Ehbqs@WF;%cd zm_pSTl8CtyEI|B-)+?{mCBT3W7ipK5{8%0raVV}i8s8`dmbS5BT%qCNo6~jfZf<9; zjE|I)_)MBl_OkmVy+=z8{QJeqZ89WoQggu<;{^tqAz0*gc4ev61FAo8JGbya*-dEM zAc ze}1x2GIM=#@E!D(TGQU%(=|I1r^_i(pi;JQ*U4p=^V-n7@Io)U9|IUl)E7xjHEYo1 zm!~@0D|CGZvPo*Mugb44ce=s#_6MYV!i&K>gjWSRsBVs;X#%D3-U>i^rHlsdgUqbo zPDQFlbyT`37?)>hzq8wuOdsdw!uIyoRLt^Q4Fy+PK=V0MvBpyJ{Y>cgt+mG;=Jy^p znG0Mhx|PdiFOb0gGv#XR%z^Y_@yLTru=9Zd)e85G^nF?_a_ebL?4e^qAHZMxSh;t5 zYwJ{Te3Urkd+^}f>l$YwBBEVY7TeD;v9SRfG11Y4q>%1s7Lm<<*bvs!gYjlRLt2&R zASxJe#I}5xcbxpnGkefwmJ=G*rE~}v^TeC8ZXyhKlzNQ|T^u^V#l?bRwL)7XyP&Nn ze|1t}Dn4hZ0Z8LLIH^S*T7CN4(`2co1M| zPfW{PH+W8w8)48yPEf^n242?wEv5k!_{Idokgw3#s9kyg_GWF>goYz&jG@m`x1kuS z#K=|h(pjnc-%3xAV??J509@5PRo+S*#Mf>6d+f%8>nVnF6H(OWm??$2BHzP}Y9 z^9vr3ytC3?m~EHbGvZ&rYaF*HznJx7T%O-prUG7&Le#WpQSl?QN}?^IrWK~=5Y6w< zhOe9p3{ol+pQiD<9|?kvZHY{)CspKNImLQ?yzL0zH4FOf!(D8p) zSO2#G3V^aCKv~o*T6>9E)XYLYe+z~t3SsmVqv3QoD*0!iQed_`b15C8z3IU{%6v6GYC?~I}{jeH!0R>sP7YH;;PQGMc)0F3)pSG zy*06*?88lHC_evGMo0W?VuX89DjN%94qR znOS@+>Hd4G>00}PWipNzNMHbY&8fXV1F+Z%@Q2$Qe9V2dq1O*2_9rPeS4)*6SBJlp zP_OEbPgi!*g?5Tp(rXTWtZXN@rdE8y=toO*YCG#7Lradi?0N>iGA zn8eA|`7>~1*$)>oZH!!lDq8ru=E3&N_4y}RcL)312+~ELx~#0Bg@VJ=TK3DVPkU_? zY&j`{8}*sz4EFX%)M8arEBum*$}Dm-W)Ybt!Pk4_pVc1= z)dl1~<{rMs#N(CR(u+QA+=WDbRml{1h>N=!((s>gMdnuypYO;_XO5URKD4bX%s%~} z^Yin8l|3NXYvorEZbIcLO!e1aXJ^97B+i)KJ45|!v`8CI`sXe6H`49(&!_F9)_=Mx zfPEZ$d%ixrs{U~{R!C{1)RKlg@oxCst_JwTinra-)o=PWij+g0p80G z-7Q z$Zz+>h6J~^p$KsuZ6Bsh=7}u5$^=Gi9VU^1<(Z72cRaB+Y4UE!P4k=Lbnn6_-9JVQDMUQQt zb|xmOr%&1pa)m+o=~xYx1_cvJI?>&Qb(uq`j~9l1B1kgMYJ9`54na}+hsPBL%EG=#I zca6s-{eY1O0mjx4EXe*TIyF7rzXkx%8>GtKP$qxCu>#p){a~;ZRZc}i!TeI@UMh{530t4l9bAjX_jwWhkB|D?pYT-SOhwj1!*2eyc z)Vm+AK>sJa7ire-+<1Cl;tx?E2C4N-{Uu0X`usHI0T|tBmz#n>F~J*GDxeau>tKCf zUeNiGMbC3sli#!ltZ}l(?{fotoVk@$e&gL)00fR!2XCkckV8~|obGO_oROX$%(7c8V>q4KTmVhE2(dFJC5J|N`4a({@?lfKjPKQ zB+^C^PFu0Q-7W0KHC~98)4a>YchlEchMCg3cDqB*GmpNPYVfNN#i?e#!P95Q`pB4= z$y=BJYz!z~;{Mmu?|*vjOeeC;cTYUdt+vdbyb^Zhi@y~$jz}G2W?~xF!q=cmT(GT~ z^2a7zJ66c$0*^izk3*6cWW3`E$d!(q?xdrg`(S%I{$>_A( z#@CyNl$)TNEMznN`_GcdJRpOKKwA>bsH61Z4eBM_nU2QGym zAg#L#sA|D<1XyjCN%A|aY)|QY15B9R!af*QysGyY1g-AX*7yGmD=ucP>-KiM`>$6d zGqg)*Ljbk5!BKLtmYYE1G8gE+(%V9L{Cbls>_@+(_c7?R`Mo9T2Iv2d(0ZM3Jq8WI z8X)hkK0edcsj_XFZ>7CDS;(95zU~BIkwZcvP^ni#;BzJ&ykJD9fK^vhvy@oxd2EeI zcS*8o{TBl)dVklr1toIgeMWkw|5@p?eaTMP_aLg>f2}O@x6e(Ni{@4!OV!FRe5tK{ zmxRQqe9SNM&v*ET(o&w15uFqmsg$aG>Fh#DRu%&QgxaX}Fc|HH{+nV@sfHqRK^_~j zof0nhMGO7m;aTo2w49urK%=@Ia&T}kVu!RCyHGf-Z@ex;Z}CeMjC7U!`5aATGDGxP z8wCglxkF*3ijQ1PFfznYtGiSm*?`sExo-bSOhjZ?gcgW^p`UANesYxtS&sL8$3q2u znZV2fJxiVa0RAxd2g)y*-T4OA$^;Wiv)b;nXA+jBN2dj#I`^zU1t^21&PCJ9qb=Y{ zhR##0;TRyOWRPg)e*uipM#{Z?4!H3jecYXB{ju1OrPPx-?w(bv-Ca%F4 zN$mP!5>O$o+af(UQ~Wm5b^VgpL8k}Thx^^$u3MGufQ{Y(?LadQZSC32H5bUtxkJv` zEHI$eaCJ6i({KqWt-`N5Lg2J}&eQ`NZ0fGgPA*nfRyMX)HY3eAyB2@1tR2_JyHJ&+ z()7rFyPBy;*Vci70dT#!^cd&nIBpKih0}=hl(_VXtc2g?Uk1CX_4{2MHq~pN-M8z{ zfh61u#2aP+WC57)xi~Fd*M$h7liGPd7@Vgd_ySY_qrPZ7>XWFC*MLyu?-wI+h!YOD zI|!`SqYaPLHNTj(R6DOhbt~|!;LpGAk)N8g^z99F%SsCB~Fopr23cxmhz^vOB)Dv2Xdlp$5pOu@ES0jX` zh2L$zs%Ad>Ndnk%chH4`HCrbm>BF>l)8OANO6uNUtbiVF4Sb~*V;*1a21!nW^9!nR z60ijXenmHi|Hd7JE^Tj3QW^$j{KF+OMizh)fR%%jlO5U9+biy|*inCZ{%#XYASb>J z|Ch=?H|f5~yn6;#xxgkSEW=}ez2W+@*?mX+@@V2vgiP}4MEk`b3|U+2dty~qd-LDp zk*Dp)GuH=s84`eXxCTt0BpzPmZZ@*@r8gyg178udF(bVwE=ZT^S|n0eRuG}r3^>6Z z#PyuSDln6sa+GoYQ|kgT>1}Akr4ng}g=-e68;zY;)dqL{qZS!3huKDA?9TJx@7`l< z#ix*{24!&fv~Q*AiMJY_#WMYmLbOk%Qn3VHesWJm!Zw`HnUzPF7}z z)nNPq!Al@AOAMh3xnR8$Fwub}716^C8qDt#RzIPVkXIPym=H`UW}HnoZFTd8Op5`w zN~66~k4MN!G8@TzP_Swj$$(QA5g7AV7(X*7SeWK9DLo-3AWMaaUYHOQe%8>3) zIyl_@LFODLmo`2)0^j?jH0;7~ud=mAQ!iH)*`x zdok(Qc)^6A==nbQB=vjRWe@wd0JG0m%gF5T=()cMZDKHHQBs-Ofak=1&4B@n#P*5N zmjM?l9n3O+2+P6=7vBk-sy+Xkdq=YNpdjz+W&|X5zDfN|+-Za4+2myp|5BW-#%q=M z9DflJ8}FmBY=Bn2znk&g1~mFrzjx_57{qz*PrcIv-Vk6scU5LRWdmZ&L8|uobY0CI znx3A%zP^5LRxU0!?h<_=F&`y=l-17rpwiOPbt;;N&SD^5qDM%qCs}agbBc8}h-U=> zsgmG(ya3XoV&*VO?Vd znx_O^x3z!}lC_fjRHqjWUYE1A4l8|$Gc8z*^>F=4>P?<+HZ#EC{`ptoavr6SRyWgM zSo2>&#IG6BG3c_r=l(Li9W)9Z@R1O*q9QHD>;uI{4L>9%1vnj`oko1)fjP}DFQ&X! z(nOwm)(6ZzWym3?S8S{2`JWY?|AHRMJRjC!JiJ*C3LcUVu}IjUcW!yztxYN+-9f~dwlR=V|c z2|P={U)g;XWhzw_a{ZNaoBE+Z$?e1`ih%~n7qSH3lai9I!FXe+vA=w4tQ=>hxlN5C z-%qnAgoMR;(_B}(EhZcDH%ES?hILTOoO2C2^)5AaTJ&tgU=|240WuXzVcS_C40!}9 zrAb#TM{(8sdn)ThV9Y3cNBmH(mx>dC^$qld8-GXiyg}ott1t9Y?5u;)8@H%c1puV2 zdmyJ8L@S&|Ab_troPc17pp}okZ#~8kgY2e%^;!+cL2VB^xn&1txd=WTw%|;)NRE%I z6ykT-n69G&HMQLHe1CGXC;2HS<07@pm2!t{fS6RrWx!;Mtq}b&u{|xlw|>yola7x8 zVoDuK0kw)9lDAG1qXPqw%!@2CFUn*`(4t%jq7U*467;PBu_W{Ka`bYHawVM;KgGiX z0Q?g)pc9OF_MGIumzD1$R*;njicRVy}> zU#y&Zvog(sP_{Pc1Vs+ox?)TAydcIWFJ7De$k>7KV@ip@=UkDguZb8!hJa zcxA#A%TOe$&CnEN@eC#MaGOa_=wk^=n3JQi&^`AOge@2h*Is=cb=`~J@EyB*r|(Ua z)OJ#w*8x)j+CVoTIwb`Rdb}v4t^J)vlqwCUTDWL49RDunUX7Ex4LCLr;1?ZKE|cOVlQWQr;cf#C9HJ z2bxK-Owov?hzm7x!O>S?lbypGn|&osPXgX=(Pe|oJ$!! z?(%#G+bMAl>NyIab2x-2kNBtxV}05!EHYiAd88Nj@uE(zM$ZN55x$2?Zf+(^S)}b0 zG%E1YobJ%&PKAXEG9$uyY2b@Xb>27ceJ6);>>hj(C_Fy{+3U2>uA8)chkdAQ0Ly=r zz)-wd@dx_pT;9A3nZ)yqIibCBq(mQjt-)jL;0SP}Uu>{ko;Q<;C)|h8XAtg7q!75? zs1U=kKa0^YE%pb9DR*R0TydP$h%A^|zsU*TU**MPU!QBhCbaQ6FC=Ad;KVYzB zXsO`qV}mYiGqF%Vwq%lN!Nk^PM+9>vPmSL#F6-p|$ zfy~vTjvS+W`q2N!X~-6jgHGn(!-i0knnVsVl;P#E#6S~yF?tBvxCmoGfAMyPdrxGd zYxIE0#Z~z@oK{j-OwaEN{l8LtLOcOQ3^hgI702om_sS>8A^Q4_OlWRBSVHzLcd;8t z`;N-0vE5%pRDTu&FhZ}v3-w`<;1Lyq^Cg&9P;MHo9T()KHy7Twyj}Ee+WY$Qj^qVT z{A;`M9)2B`R##EV5SYGKwmb@ja&!dA4ITjdfpoeWklFZg%AD76v~8N_FWNDr`A5SUX_QyLHA&NXD9o+!}Miv;Kk08PCpJr(Y0M6}*$ zC6*rXK5tF@td(tvPw#b zQc4zM*zQRu@^^o9zfG9fXsgpMa?#~6p6pA%^4D1he&vQ-!W?cFrK38gIj_a|XeysP zc`|!{B`jL>JG;8((LN@>e%Jwvdi*tl)=gD>h0yXm)oYc$K&eL=Wc=Hyqpru!X%9o& z)L*?yO-j0j2*wP7lpChPNFN~+B9u~%D7GPgyJvN8BIl~m}Q(qL2r$hSf@G=9a{rk#eQhd8hp+o$9u zl%w7s;?YiuLero=eoZmND?8+Ue0IVc?+`EmwZJ3h}P;XhCt?w;DiH+_-cF4DZQ)I2t z(5!g?zcp&J*1dW+rpJhlo!w8?kpP0{Q?5^*H@`}b58-0mNstz295@$4P|ByK*`Ja* zL{btvG(}TLwDlkZ0|P0Hc5nGWXOWq07PLrdw2xoiQNfEL$t_3kyc{~jQQ=PuTC}o3 ziRVwhn4Wf!VXO+l2D4XCRJjQN)u)Snj7R&6gZOm@#fE|@{rz_Odyn5jXKVEp1kM86 z`6B9c30r+JadyWagIRMm4MYudmgyfit^g=!9z+6`JbRB80g1Vvy*+ZXEpiYb_O!z& z;36+M_-{4brq^H>RSm zxz&V)bIle^EW?gFCkc}tZ)8>^mKfaC4nO5860Lbv3|eNu1uOqCD5#bVx-IT@IQz_n z0?1fe$@Ro65T4B~;>VK*yDfJl_kNP}iyz-Jtv(^R;|($$A4kzdtd#*kddJ~aM=B7J zfEL-mlj|xV$fEei`|Cnn?`GMIdQZ?CMs~IVbqEl&8pPw*>c4xKCTu4Aao|B_oV-jT zF5XkV18b1FJHs8l@YhYN_?7m{P;Kr_H6ZdiT$@UH*?UIoo6XIvk_zl>fVI1MBlWxK zq?CjaW0^DgFP(An^8YiVNF~J!esoh=S-wJrNp3?kY(?K-7Ji=->v6jihRMuWA#Ifv&~U=p2wDM*^9pI`@}GWco%H@-tRB$^XD9p6pE@cXrI7c;!n?)T@j zbT;4CZsr>Cx2@^o?#wJqcUu9W1q!8Sk;C4YpPBiESsFfK zS+w*h{G&(F-N%m~>p2d}qeQM|{qJDkp-GL2k+!K=9dnp%^aT&SwVLlwdP(j6lZ6mO zTLc2ksoDVH25x>o&`6N8SuWNB*SiA%88<@^-+=@=Rm9w#)lvk%j7gdKFfV54ZD_$ zXG*t;VM>v&c2sVD?#wA_+JBoy%w=_e-V2VwYXv@M0I~rutFIW0?*GA>D~o3o6RaHa z7Cqph7=Is5r}QFB%t#s9U`mO!)ntLI7}@4yE4|G|4PgKD%kM=uYI-8Ue5j+dQyLk< zd$hr=vKGBwh8lRu(ETAiUP(cOkQ_5Y?So0PHYkX-i+)%#xXd(j>-k94&4;BqRjO%c zdC1*o7vc;=+F3Qb+%54;q+h7J=Nfx?epX2H3N)(r^c(WJe#AA4VItn`UxlJ6E@ejJ zf$h6?XFuzxgigM|bj8@~2>bMIwMurcY$J~s1M;xYLQ|PcehVk*+DBhob zvgQz=!Mil2?b z70hcvJfGYn%>1pL%cO;il7wHs)N8eybgWu~|GPN{;@+^>Y{hmuYu;_~y}T5s&wyFG zoFqMcr2hm;LZWT?&97gAu60qKj9xHk^- z_xhrcnAj;`dqxTF02SJqj!oTPKz!-{x;1;Ca`8UsrWpkQpyLwA(=J+bt3=I+TYRivRo-52d$?EI0Tfj@$sgUyS6fwBBu6vzX8?i&`$kM zN;#XaPZvO!0LPKy*Eh+o`)Z~GjlQ5ce57(fY2K3)aue}Jy6D{671w^?aZ9-cCPMnJ z2;-*Dq-6W&qyv(sQSm=|{`>35!6C$RpI&W6Q)qgNM*1D9a)rvB1pTOllY1Myg`uZH zFA=|Wf%^10?tfg8g@?%q_x=sN$|lRVD;(>1SzT;1S+xfM=dG8oKX==IWOmw~yvve* zFT&A9xwTnF7X2ZVL_hn_uUsY2whynQyY~t2w9*H)*qv{E&%RswOjn;t5IEbgvlqtD z)9Gr*tHI}LrmS^^BqV6`5PW=m1A=C|RGgzEoWOP8zLiW%zZcZs9iV8rR<@~dxjIb% zW0zi`nML^YPTeuhpIQS(9K8MvNm`5Ps4|w9QWGM8U<020^FKpS2cLyr9&Qs{b0u)( z7nna&?YlL}iDY+MoeNS*achvC))v|f?3>yV{(~I++h8B92myo_P5M3}oZ)kk9L*u*^ z8+*joSAi9pjjrPR@J5(!U7Z8b2hD&;6gFCv;%^dpO$|M-;NgrZyWjfo0|o*vBWwB= z+MMI#mtSK(;hfZ(yYK6B#5MTj{uTg93h$!(@vvdjj2xslcL? zVONKchNuW&&!QclWMA%|e62X1;|DAs3kweRLl}f83sVpqlMl!7PK`A?l~KqLizc!! zhIB;=2ZL>og7|so5Y}4&P|&srqwr5l!LTWeYls+Qo?Ez6UR{QCJ4LP9ifVXy4ot>8 z0hgBzz6hlVOF z%1`B|oI_U0&D2w=OA=yTaH1)rws(VCj5;&3q&c)!oDcu*=WUGZ35HBBZ0)%W3<4^q zb%NXjO7RlAl;hty8cP@y$d1SR`j*BO{P#NjqIevPN>h@PyE1lp@IOjsKR(bKYh3KF zJDxrVaK>nVZ`PF8qA!9Ja(u#~UL%V2MIN z=md~GH>~?!JFVSkgGD3VVlWzOvo5DnonEqknl4ZfdCmkvy&SeDYcDR|E6!nujS^S5+i!h5;io8XXB8FZ0Pu@-@JUA?P z`0Z0g#U`=XPx3!p>H|In0`4u(56bYrQjQ8T*aNHaiu`&}rni?q+DZbH-Coq9zrymX z95VWW+93m|ilcV+9S>Irw z8Jgb9gX)$DNlG^Oi7Pt|+?|s>fAo^`gJ!(3_J{lPI1ACJm!i@Vp`U778UAij9xYm> zJ*;#v8qO&z;{y@73GHL@ii#oa3r$>I`0ICln-Qf7j*LUF$k{u;s(p=EyR^@o;O7%t zX`&;opf$2A#oxZ`i$dODAh`_^2DEq1_EQF7yn)d{u?iCOP^UUzOEop+ac{^OTkbX) zBYJ&|;Gb7>wy&ejnK_x1eln2!+&@f9tH~Mp1Xz_W{JERg!ev)-WF(%`ndP1_Vk@I4 zG;+Q8qmuUP0_p1NT0|M}}X7$|9WH7I}1YxT%XyzlZ-)pEMVfn##^qgE+o)j%%;+;cwdxPV<^CAlmrb%swb z(=u^(_2#ed!XscNB5+;CQVdpXM7Y)HW%YYsSRikYaY$yFoDh`c@rJ*gIYxt_<$V$v zVGyv5yJ}`&RD=zu{~)(2sou^^bZP9k@BtM(YScF zC)%0Vy4(Ti*~=UWM7S|cn4FMHBkl7-Dh$M}_ee#Ab}~QH(y9BJNlank{KY{B(e*;# zdNH^Ce^hrMP{N9%)M2Ffn)6jhzie`D?uUS9Om{VCJ=ojkY-bNK%Xz_C!k(QS(9b4D zto{1o(9hr3DAzS+mL_hOV>q<1J$tVu3N#O&f^4~{^(04sn9y_%}6Zxi5b3madI z%L_fA`be1=!JCc@jn5P}PaMlDrFsFep8`|vRncsUhbDXTtrxnl(nFGp`EdyBAEtSH zUs6|921hpg&7W8YPQChz;vWvDQ_EtHZ(B^Ea@89mt=d ziAoD0*L`FDwEh+T9YEe3T*NR25m1LZPL86cRLJr=%?m0R+y>x6a|*u5{&+$?S{6j z6Qvj7a|Y!v_bL_QO)5gkdDO$_09Uu{i$jZK;}qoc#~*_F@u9<%A@BcHw%x0N{{7P^ z%HMdW#T-(r3~JF`_eZMssYZv|Kr{I*QNdj~hm&E5^6p!>la9>Pi|@bZoz(&wZM&@V z?#+V$d(IexKlwZsmN}dcex(yyJqt$XF$uS2kW4h_P^9`-=jY@8Hgx&k9{ZB4riM;p z-0Lc7FrS$GO;}i&+MT&SrGyqP!A!BISTRk+%b$bHlXxryC=murNVdI5yB5PU7>W>j z?IA}ujP%bYf(08gZVANms6r3|G^AX4ty`JC`U&N70WTSvFOcRakJvQyPk>YIg*ExP zJWjvcONk9jG&HDa3Wixz>4$`5%Gs$MotV3;7kT!K@p{(0DA(^&i#O>Jf6?BIB2>7y zlfc8VLH^SaBW!}{_qLB4my#zMFg5K2U%|O-)+P)KnriZk52w6G@WYV75=|s%_^EG- zt}um(eG(6g)FDzH`C6vDyj<(+%Syn73qM9`Yik23$V9ah2RPB0kVaw}L-~( z1)Dm^$rOSH_%S3NyIz)4CoFC-V?^ofT^Z3@-e5#X&jHAL8)CV;)@&i6%uh;-b-R2N zVIYVpGL56VrsHo91>mAnc`F`1_5q`a0dkx82DsAvQ=nq`edII92Yt$^lXv=s#R!9d zQL*GY&E2sZHq60IP<*U~L))_NCOlY2WbI1`Y{DM?O9kx1QD4P1JiWX+OnKr&c?tJX zFp=A_|IOpIB@q=`sp91sK<1lTi1_g}<*hgwxABnl@fhgjDcfi`6|J*yNFVa{6Z17I z5KEnRenHkuo8cz_=&|Ito&n+ofb_eOEOr6AvCn6~0qWf6kfM;YlXGoP*N!p%bB=(d zo)5s4c@G=qrQioV=QU!mf!_A8eu5S-9}W-(zn9F#$ph$#V%M!j_KeE711wcx(^wiH)Dp1Uf=mjGYl3+>cd(T%K^rim^Ir(#*0Q&(^ zC!w!0b!D`@B0|W@TwtKrUw|QPEE>H0Ni*5hRD)2_4FJ#KH{#tvh}+M3LFzn1KzQa`o0zs?h|vt$>Okf2ru5Ci||WRWQ+EZ5J7dp_Sy z?3U~S-~RIJYkvV6)^VV!N| z8uxM`AcrBYiRy_)h8C7`;A|5Dal(UN2;fcxxMZa_Ys|(WQi;# z1#J2s5B$N{9X$wAlROCb@_d@pY18%kY0t#A8P?rOjtwb9&K9Odume1zw?L!X9s;$`CayM_aJ(k5b(K#0;UEDB?#2KlWRn* zdfmL(`Hj)9YHdprRHIfi5T%RP>Ymkm+a|1&Q+}fA)7a^RP@dqqKq#_{<#0$*tbSpc z0`yVIJ@PUsT^y+@l{u@FlV&A*bHp@t2X;_33Id_$GQ28?j7KSK5%5a=ixU?vTq7tt=aO%FO(0Ln2II2^91tZe1UB*@&q#)$Yxm_L3si%X9i^6 z7=J%!0fMoFuYR_9Xno^t%f+ctrc3`niF*ICd0r?0{k}rt5Jy2FV7(%zdQPBTksP>1 z5#v%%vvosgj~BMrgh9lr;dFS;va5&Z=s`-3&>WCp0=y%VjU>FO&HCbc1aJRCLDUif zK?#AvFI+H#*l4A^U2*#}D_5`zm{UYm-<#BIdCGkMKO)Mlr&%cP^-LK=ZTu7TCZFSw=I+f!fgoFXS4SBinOkKoD z+mdb!T?DsEgvyw|@rTL#`+KBItM|aY3(!xRGar9-PFr}0S+{Az7OiU(k-((Gi~eWTzO zIW)qeB`eiN);b8VZyZKF$5&@ege#Uci5`V%7#*UctQVhV6oHPK)r9k%ZR?Ee zDJo4+<>o%^F=dYqKI!GMWalXT(@WEEhXQ*4dCOmkU?VQVchKH6moe$vICdo~47|Fi zdiQ-R)mTg16`qE6cGCG?BZ#9*8q1gqhSy6bxsN%?Wp(}%g}}oGpeZy`LF6SRW(zE0 zCFFqE1KD|VXr@xJiTAf42oxrRfPw^Jp~b3}!L(P5m-_&uDiIHX+)4X4ddarv%Wd>l{bEqZDm?_b(O@=b{Am@3%o)04Ei=&XbtQjtDB94U%rM zdU~<_g~RoDNvV#=YUTakgFcN6=^T8?nYv?XH+A#%6*d*RmrSla)Ep1xK}ACGm-^=> z2Uf0MeOC^6shWHig&$pwU%EHckK3t1KF;!$DO=?UadF`g(EtN(Zd|uFO4m9f5iumn zWwle1mD8BpFm7-7eIt8>XZef#F=2J{gVio+TZstAQxiTaU&e}_`-1bGiBBIsY|>b0 zO$G+vUG!nUep>&|1)H&X(PZa=5I9vI0du_{ z_FjPn{B4ohS${gx2}zu|c?C85)-~lJvxha!3r|)PmHzP|i5d!dlU~@mZkfT&!U8(C zRf^l%+QOQ*?R3Sc_W{t#7=?c=@%{un0cm1yIE$;R2Y*y)M{&Ju0>5Y&I=Fa)WxnS( z)gN#2;wq0&2^ny7y2h*jR;bzCfc_@I9p!}?;uyq2Ze*9WPeo1RaK0v|ZqYdAi)|m0 zd*2G+Zc%9(#MjA~mspa%3O2n5HXOnyK^WR!5Z!7+EM1Bw{4A;531Nw>f2;}tB;q;_ z*iN3oM0NxMm3AMC{Ga^#RN+MV@H`}$O7NQy4gF(~?I>wt-#To_z#!)&>ycq|Bwp3H z3=k9mW=QT9&DuG&rB3EWRUR4t&E2vh|_c}g$&e=Co z@%!GSn33ZzEX%F0s@*NLyy!NQ-U3)}unD2~q=~ilWn!p!DQTmFcXwL=7_`{zHn>OR zdFPEgeTrtorelhC{axtUPJ)9Nj>40BdXqnDM+AQAh>Q~BWJ>w&Yf%{c2f%6ITv@OwXagt+p?QSqDsU~F92dPTv zg<))u7^sxsO&No7^N>NacouB;gPD%$;6MyJL$ikV4{-6CU(l(^KPjBk%HhIyLZn5n zS8nb4_5&;W0ZbZTP)y5QSyW>>H8L>#vLL`AcIsu|ql(dQjPa05*~rQdK0)(y03?Q= z3MC`GUfQhw4W9vpPS$x8@R7SK3x}7ek}^HH9GwGviav?^Cu`& zr!Qy;!y$^E1hXOG&ti~u1YG^r9mGq5)SxB6`yJJtn>@^7aX++E0ibwG$$eGnUU%2P zpU7FOj&Jb5G@nCA=HyiS-x>UpMAY7O1GY7KDvOsZP}df4zWwQ-Ro@c8+5ttN(74=} z#utM>0lg&#FE_vnMc!O;0Qm7u+jKY52nJ%-jB9Z=s?62Skv{h9Or z_=eC8kVGsrI(?b3jorSVZLV`oCS!F#;Y&bFW@AhEr@tvdSb<@ipN$|)^p~oHgh;vB zE5W91Ujx^mV@a1w_4yL2zEL)l)sKQmrO$yEFmY-a7*ROix_Ov8_Rw=ge>^b~h*C~2 zqEyv%cPC8*Deo#y9Ns$n<_Wzk|2-eRuh0ZxBq9X@8JV}CfX=98okDrJ7@7(GY-7!`t-NBQhO;mwR&U+n zL!G%~72u!^tNQV-%ktC@8+C#+68{9bc2ROM9oZdT7c$j)d zoI+qkf`J=2W7AtqF7VPDmzt|*4lOaW7N@hq#X1h|*IVZKaD@yU)NIO*iABA) zY8jipEpoRPez=r0q(xySsz|A3e9ij4;#@?rgQZBoh%BpJ%Y}=WmKZTR$z1X5w zwv4f~)LM0et3NKrQVT8Ef->Q>$T20kVf}eL;N|C^#=O9eO5mk2h%Aye;=it}B!*Ua zAm#-q3{XbCn_DpDrSdUle`b5>*xqLzP9$UHr{K8g2im84xMT3`qnF$BcdyshoLyZz_eVHWX>I~A#zklY59_4w_6^0`TBnZS zkEg${eoKmb3TfQGs6na@<0!^_|L>PrNI1aW1p;gzca^0_Z0kQ1zJ_|W=3lyJV@(w@ z^|7+MTW^*cC6$JSKrD$pya6-DnU|$9E-pum55e(-y59OEI-qBW&t?ApVjhL$d0^H9 ze>WTP`t}?M;x>3J@3+Z$``Oc`dfkE-u-1~goJ<9FhEFSNO*<^%34Ods@0N0qI01K# zlUOP5StC0Su23@lAo6{h}9~kgW)rAiwA0|om+Kj1=Qe<4<)%PnYB$hH_ z3Gg$L!7j&s& zXE84ib=sUSSp(Z)T6r3|>!m6OjP{2|xNW+PQOJj!DvM{u?{jf{6m{!zi&eSnm=bh{ zQwDwG3ycYc8$xo@-;A7~dxU>-_51qYM(yaFBAbs8lmW*_)w{@o`j=tWF zP-?rez>cS0WpniotpmE$gO^=54|pY&C5Ovxet1#P|1h?|RgJLLyT-!J zPRRLNbzi=WzW(%cLsKJ|Bjw;}S*ny{s99;{&Izve{PX{ug};tOcmn3h<0-I_`rRCQ z*ZgO<4akA3=ak-7cN3H$IGrkMaHD0!UA{fUguX$jPR=kXURa4g3#?TUv?HCph92zi zk4W=))NnpLTwbx18}`Xw2V)ST5t=#ud*c57F2f}VPZBWvCqPO;5X-#`mI8Ss3a&~o zC&1SU7Y&NtE*3MB#Nyy}y;Sq;R$EvhKS0O|5otzQQ~8yy$h+RP+z0BLb^?sdd= zOZ{FxE|jzz$9PhpV`dggo=Tcx-F^BLShyv0@pu4R`NvAPpt9yqslphYC(%6aIxP9I z-S3rp)?{Dt9B)tMACi>6b^NQ&@HP^s?bMx#ab(k@XB55m->DKfY;OAQPch+t8MyUB zG@(qz)y%h3%scyT-T*ZMU%HH;ZV*@`33y`LNqMXEQ(5 zJz>oi$0Ge<@$~arlVq9a`>~8sw1@oW+X z@-B-{d{973@gkC2*SSr+@;Tl|XqDH~P(T-?d4eU-Fm9Ls;m8ixS!MWLiK_zl`NBRw zcc+U5wxkR(r9#aBVa%kCa8cle5Ye*zt?=dpuX~F>cNBEyTax+Ht9P@9Pii~m%Ec(8sLNb7vDB(y;n1x zLeuHV;mhpSh2DvBe3B1Rwb91rJt@iYmKgTV%6Vjiz1LiAnVjgQwY9Y8+sLe)^M?+0 zKUs1_n=q}He!O!w9fC(9edX}vdzu^m91M#UJmpF(lMzH+U72(cUbX67)C|m7w2>xd z1Y^&gOVHl!4Pp)Eo)VJknd@0nNe?uIA$`^{;D(&Ze)jWgn}5}IddzRqVL?8L&@DHp zF)(Va5$v*k{_~vhjFZCSot)`ENBkM+?B;%Ljb1xs4`m+3VWOu=(vV+*r!sfMuus@| z&i#(YFDpn7_?dqq!&kG?R1|3r2s{DH*h^YH++8I-XD6uZ`jt_HjNT`ax+onvz_OVYKP7H z;=ecJ-{%xrM`ndISrXwW;J43yRppcouvces+i*u3_dy&WKp;fSKyN{=Yb?CQOk$55 z%YEU%1f27^9HhqEJHopRm8<`~z1@j9b@De?W@et9nY;ol032_guou5U#;bFA95&HZo>wyMJ5jG1A{pQY#z4t{t$A@TkEI`gfG zWRtA*U5suxTf$NDT0a@F5vI``IyV-dGuJYlV%~O^LSb35!$ezhx_*1FaODvxu?!k- z-cM`+ZG_6W+{L&`ltjVkgrVbXTS?Z2hiJOWc7ES8wSAw@>(;H4_lt|*+a<7UFcrq>x>Iy zBrYdmww>L$Ulm@~4i@eP*(|T=r0mJCIfSiy#^*U<6wUx8VbQjPhLE`1#lSk=^TvE< zeAy&bYNaKlPe=F|;;f9VP5{@C1-8=|`7@SL>*%Csy?CAhp@Ww+Q1A8@c22t2@i9iu zVtg#BrREAA3}lQ^C5`Z~=r1T3>cTmzr?bM4h359x6KLh;1Pk#@IgFzxKNRhkxW#kB zve!F}Vqh(A^P72j0-IeX?n>UpIs0MDAp!(qiK_HTI1g<{2@9tDcfRLjo){ZFJ%{5W zB0iFJw#T*0)NUxv#Wuw94DZJ+BjulvM@N_WeUA|lD+;O(o-mb;!{kcbD~6E6iHA!! zf4=l^{P?F&?0#lw{_8Z>LX?-6_f@`p6A%g-l_)Tl@s0N`pYXL5y9cnBE(-Y^s?SIv zjB2Fe=JM?uG_oBgRCsdy>U;T194A*t#!QmY9Is90wJ|^_Nqe)<_}w@4J~&>0b;}XL z?=19xPe}?Y2zZP`Z$`~VVp+1mMudu!lW7-O!@6iM zb%NsE!iAiK{ds+>XF8|ngg25x?-vMv9+ z`E~!r4i!@k0M^5!IXv3q%z*WfpW(cl8kE=L#wG{YC??pd4h~!KR?COSuZhl;dK6|C z7dSEUlRG7OUPd0N5^7^xWN8{qzsb*+_P+R*NXkXnHFMYj=z(h=Zodb<3WUoC&n~WN zajluWCf{4|VmW#`C;a1Au$e2gPioGa((F&i93EMXFkwZ)P!3DnaiK3PAGg*R2+?mN z`@HxzviO&)?SWkmvM-V}`W;%#tH3+2%TDJ&Cm-U)F~2 z4kZAFX~LcUg(Yd@E5%-Z7X!fnefg(oGhR%vg>D~ysCijSHWWqY*A?E2jIX!K!|-!V ziKHH%W`(4u=$v(*?PXQ+*>+xLhliI$u_Rd4hVt>u@Sl~_8h~LxJP0<3)vfiR7FP3c zR`lLD)h9VUJr>2#JYLw3(@3OrI)x-&^cpCNF1H;CRRp||0rsVv#@vJ0F5`1bisr=YuXViT z^hsDkO62pJPW_hnI4FoG@h30wdKN1}SFRo4$nJr^(!r|X}0E;Jr7vNr7%jd9I= zXP=HvfXNq0&;!&JEozrAy163Nbqdy;9el53CZff74HwlWE`CNSa@KEtXzzU>N6eAT>86^4w;lFyjTnIc z6;tpfq9I2!?J{Y3HoLkT=<9n=gUOZ4W~#eClgt6$5h*m{1IxjsVzc|l>Ka*Dl*<1z z1BNrHg_90fl$$oYF2D6#em$`R1fJjCj&iphmS<|IiGMQyRg@x4S7_E;2E@Aso#&Id zt&!U_{>0}@^8)Fa9Lu9b1LG<67UtaD>&Q7gt0KxM51FH%4g;BUO%!biZ4oNI@dEu6 z3yW{(`?JOK)t}jrg++(SLUvsvqq1@BdTjM|-hwdk4NEbMSEHh##rX56-o_TrRG+gC zajG|wKyjQfd=78f4+NkYT;UG_ACxJn$+3{>E2u(ANOz+mDD#c`i+$-M6s_%^)D~j3 zvVdpPki)`IN>EEib2RC}8S#7e zP~NXd_EtDAM87m>b6*!UP%7i4KmEjoxBW%=4EtB3T8z<@{|gjo$bu>^ z)2OJZ$hcm30|lSQ_%n1PmIar$BXq?u58Lma);wh)xSFl_xV>UTV^8#|q&o(OYJY$K za?(E3H?T@?McX&Q%(?3H*?oJ|V<*Z8+kcDx8v1jYX-X5s3F6M&Zz^?*g@Z5pZgHrp zgY`Bxhi~%IXv`Eyj0DOflK+2 z+f}fIv;PC^bwd|Wh&wNeetU(6b_G9qy<(Si;V+@1p?Ye}?vY}puhce?A}=qmaV(Yp zjw(x;`>K4g=I`6CS>%CQ&R&E(KrtUf5Bi;EvOY zl1g|Fqj{t7`I5u;j-h1SRmd2Gt=V(%pr+4w1$l=gp!kBY~$+#k1l^sTb3^rTktyed^tmz*s zb91olFVfSy35zq>SGu^T?e=m#F!F0lB9Tz~_*|@a!Ev?$R+M3w;Ph#Mq|&&uQCPW` zDpAXI6YwIg!$;wIQ7EbRGQJjrEMOR?dtY4XB*cFWCA~z_B9a~^1lA&TrkluxU?wn- zZItV?&D90BUvoRNV`-r&IZ?^%Ahfwqd=7};_;tu+_$Hbd6Fl%$owljzlcqF`Po6Vf zDB?4vdN;SuVJ~Z{j!NcG+5%l<9Q%MDtXok)I_dr^+^_NCvuKF1v1ug^p*4Xcm8OTH%2`ShnoyaFvvKfeuVJ;S$W6-Pxyg@QKNKPj)iTnP!HojA`( zffRE7(V@6BuX0Oo<{oZg9>d8@8g8@nOW8KwilXa->=eI#K$!w#&ec<=u4B<^G~Hh{1Bp%n2o}J4skRx-es@=T{zowV#Vxp| zxj9Ezf^8~rUL)=D@5ksLjIDcJSH>vS9wbVmxsx+&{kbszvfPC-vcazF@a5(6g~i1y z&b4sC?E-3Q6_g|KcO+l&)HU|@rhCYUcMlJ(kB$wyZl7BOj)g*yDZLgS>>k$2j z^SHd$rW~?G>jwTd6Bhk!@du=;9Sp|J=%nZhAv14IL~hP@>)xv?YS_e z|2+$6Fo5pAu2eX?8Q?Mjy<+|>Y3L-;kS(=nq*!tC0o7b!h1EW9(zJ+1r6OAco+Wk> zdTkko##g77C6eNUMSmGFFqS*QG+LqLQX!T zs;sX;I93mx*zK(vJx%bx4sUEEJ{hPm>g{D^Cze%$+gccN<@83@_tNqS7WCK^MSd^8fD!{I>ck*IuFZtLJSS*j=`Bm~QOWo|ALYKBBZ{7-q0)kS<~0Cb|N zrGF~+&-U~245z-!%myGG@vQneHoq2$Fv;D!u(&5C{o4(6QMD+wqV;l$^(Z91IW0kk zF)*VwBs5h&Yzq0-?9;68d%~GL*#v5>8HOt)Ikh~G-kLBOi7D2Dgt=>g$6njI&#}Vz zu0C=r-0b)5V(5ioq`bUC=t8z1#36O=+da%L)JX}coGiv1P{ojM%)I!kM`r&hbNjS@ ziB!8)DO{=F0)t!HA21%LGRywO0&tZnG1Q6S z3Ysd=Nj05x_yvg=DuSg5)~x>0bA}v3(p~dLb5lkll=Rn}S@e3!A?7%3i5=slsb+IY zXVJ!ozZB~_q9r%*spgXf@BYo(J*Dq9K&SU zhUFY3HkyUf5yg11le{_DSmSl@b~a$eb#6EqBzK6Y^yWzO;F)kI`WD`qxUU&ud>+;t za&;}dsFa`A_+KEY;qwvZYtrZI)jPDIV_ggxgIVGcagyP}!)XFvJsPb0Vn2 zLHk4*szSgjCYCNA$(>>0>WAm|Ji{c-zy4J0_elEB5d(zFvbhPt2T}nGMPHMzPvE zIRKtkKm_ox@V&EXV&M1V@o%kqKp_=S#C6q-C=asQ6H;0pAXHn_um%0(&; zZVrg~U0hrwT#_5*>r7a^@ad2M6h|@d;_tTt?KvV&?O*dXv3?k*h2L_p-cb6Z;=fDNTeKZ*+FrqK!R9vv+M{3c&R;I}5L9j#hBZT9Dvk`V5K%mt#_;>B5) z#VP3=!nH)8oVDR~HwxlK$%HYrCXFSknx8*(b+D`5bj`vk4c0wt39F7;;-UVZ~cu4%I>^YmSTe%ij zejVmO=jeqy&y@kJq#-G(hY{V1cZBF#6rzH1z15ACX4^n^yLn+ zgm9-*dnmXTi>b10hP=)VnJ{w=A+;v&mHA+#9TJ4xw@@J{0@<=vOmQ6z2um4cNam6Q zo^;EzuWJakS?U=o=`6KUe8cT1C5d1m4wA?u$(+x(>0|Oz^km|N59W20q_I7GR!mWs z0^}@c?yx*4q-7T(Nw&(8Td5fq6K9k**-YC;F|TdG9RBUEHP;%OUYH-uI)7qE#AP9h zud3T|4j6Kt!zc|54gG+&_>!$?;;cz9O430as}SqR$aET;Hp zIjG?R@-G63Dr)c+Xan-!o5poK;F!igDIEGX(oKTh&0>M?L=lOE{u~JfWut#>|M(C8 zaQWi9^kYBKckv&9*Utt_%!^@lA{Mbf`;BH=)4WDmTie}Fvxj{$k!9~hPLapnY+&fX zX^kRlqjt?eK2;y(EBB9kQ$EOa`9{d;>rwoZA{3D&ecG)v!1V{HcdB_of36omf4stoBTbvsVfPade`^G8YC!fIes{YN@X=H*F$Dr2 z8gmhbgS|bzc5Ce{=dzN^UuzWBN~E(xj>aS%U_Q|R+_Ss7=#bkRIjLg!;u!Ca&ipq` zt^M#C+U&&Q&PhEhJ;8yAjcxJsl}1^3r3G|bXLAj80|#z6gqqMANisMpaiNLigwlzN zmDmgMVlsskn@ya95FK-j-Z{KF7x&es)U%u2i{_Zn7JFjSfoz_b#-xxe=T@CMGwU9N zh9_j!;l%BoKB76i392alwd6U8$rPVY(V}2b+9K}{M`)@?{=qF+(uAZ+8I?BpUFmvY zSWf^VXqvp4Drn9NAL z19^!y30c%yWM4AhA11gNy!cZyW!1GjPaaQr^3{> zRIq(8D_k9Mn$iF3;dPHk8TOOF8NRM zgbu&yn+CidM?W@C<+j$;aAM0NWrqodi}JBzO#QH!!|0!|H4FW1;Ny>EJQuP50%GQ5z(*;u72rr1l-LU*#k3 zF*VwefY<%X&+n>#P;xD&^#7!F=VlCKv3-Ao{0y7Q%q$(oofqe-8H>nE(1=3IZvg@8U6j00-_&XL+OH(AqQ4e}<&^06 zI=?6{5Z?hV>5 zUUXe-2EE*IN!I<`64003qq!KHk$bfK&di#MD)amZXBGo1|He|oj(H{u&OM9hyV;g) zWmA{T6wl+ck}^9m+-6eCJz)3j&_~2^hwtA0VLLo|F~%#v=Z8#24!Lkndm;~T$w`l( zd8Bi%6Oy*&G5Lo_f5|l#t{{GCI8HbS`gj(7{j?~Bo||$mf&gs4MG4u7`4YKjJnOhNPEMzoua>J(SKP$eI&Q(2~@vx0{imzpv`c#{t=BHxnJ0&Dqpbt&`)H z3eFT2mJ7iK*W$EbS9n#4-fe-OhSGrpD2Z*0vI**oLfW6@=iJ9Bs3dgKtA1Q!V^dOw zhKzQjXY<2L=hCpamanlU3ryl!(h$F5lR73AXmc|`OgZy|M>iJx*kjS*@$SAX*>Y6# ziZnZC^shXEi^f2PFO9NuluKv-niznM&jfr;hJnCslNn`oT=aTuxQsEmNVcplUNU{O8`Ds=D&ncx`P4 z2Iaf9pOmpkKwOWZsRulRMSUvx`FR7SqqYsm`|y8ps6%bEUfc2akZNR2T*UgvT=c|v46Csc1JB6WzSf$3~+uo;fC}e&`K*UmP=sDHN zG0-y306tEXVj9n2Dro3z^v*XZTb@r9XtBt-RGPFmz!{YGe^a-`UsxIpju;>vE_eBpd3Q#uNW{Z#mN8Ebvgi)lIz{F)LNtZ z3P252SF#S+d6+f0Gn8;d3=*fAkjoq*S5csK`{lgaX(E*{0e8mD@TNMzqBKnCy(8a+;Y#WzEBYk{e_2$ zfVm$GEjDoeV0rUkOYreFb`A5GeH4yoi63)W`6TyM_ZaUBRQ5&z%R@rZE}A5AYX)eG zgi-Fp?d>aXtIHCEEwFG!5lS7H@XPIa-~KxFn3DW_+8U`mxdjLwA&TzIXhEJCM_-gG zDvF_kABISXOf|&XI5xVLCYiB?z-GtbkMu+I{bdfQR8T#7P~F^%UBYzfu&-B#>)yg< z&U$VJ!#a}^lOFsKX|XEfZ{}edle#IWPP~Z5nyOX<^um^EZ-t?t@-ZvS1n2P)_@R}6 zGM>aYcsa5~fQ#399Z#uI0$WO{=wPN&$SN2c0eed>;tB^f7+F@k3x09+GY0A8*+2_5 zs?uowndSv93!zw-Tv+ zwQyzOb_zHjejQxE%ymViEpfW}MkvVvn701xPm;T?;S-nLp$IF}so49(nn) z`Rpo1{Fpkl6a6{LE7s3Fug#Xcr>#<@O<@t46TfsHhW^C@c3PCMs@5*Wf4)bb=k#es zEWD%hH#aZ-rJe)CIl%KnZq#AO-&fs{(|XL8UM;#9(}rveKWX6@Q~1+0`z`zA9KKc1 zKeW!$^+1ULj4(5;_>(U$FWW*dIIo-nn#<%P#E)AKdSYoe)Ph?1E&==RrsFx;k+EKv z=H(cEzm)(x=cFYT)ksxPHkNAM!BSFnZEebn5=`nzOnc9284&2tumD&v&ev^kO}(5w zIe(USe)Q#_rTwn=I;h~P4CrUiYcG$uPv=m_?PLWl^9$*rpY>1w)Rt zscE$!&t+#2S%FRfHqy4qT+p**mbaq@B6m7qaEP<#Z^*qGc$R_$a>$E0NZ!)W)Re-{ z^W3Wr(JDtPtJyb7Du9flkDYWYLD}=oR`dl)%I0Z3WWV>Y(ujlB3Ihvy^p3ifK>o`j zy6(6Z(cZIRcw>411(tfDy%uJYMDRHrdd*er#ddps)0=+3KY(cA;Owli{choKI`MQT zD8g_&+Jy9mEhp8hDJ7Teq&KGX`zodNAAlIBor6@|&VTk;Kv8{-1ZD#`B?0AQ;(lR# z^WB*OJSc$qLnD?jP_=6Ue_FJd0}QpKX`VZiIKbrgjdH2+>J-=bF8N zj5OFoaN==h{OvcvwDA&afsRpfFJ58b4j%gZ4z8`K5&zZ2(<2AizS#%=VoU3k<$8*q zTKG#y|F2Q(Pe}xBKYZnMFv~<}t(?Nb z?zSv8ZryCa321(|MmC#VXlSB&LbS+RB!JeW^BiFWaCnJ;@!TBz+?xknynZYh@W1Z} zypnr^jQ|XyFBdcl*|SeoxQwu~g6X5;e~8@za@d~n^l0iWD^zPk+^N-iKOT#`tTSYp z1v`FjM zAO1IzHC61P5bSOup7$Qnn%yfvexb0CkcC8JlSoeDS!XoefK2Cv6!wo2W9#&HxJNl{ zc4a-rf+}xu-s)Z}-ALVaT*w-leO=!1yFle>H}H4da_|KR3l~2PN^*pMjUJ89$dX6$ zCU8|lu`v>B(3V6Vu+;5%h(qk$+(#n=$t3_y!T{j3MF`O2wy28{EE1yAiG0~a3PyE= zQ6fnoNO59;_xW^7SRl4x8)8y*S;#1%1>W|1&U){Qo8@3xyXH_Qj+_QdE9<%+pZcf7 z@h>mYXe6cLbykh78FHGMnj$PeUG1D}1Q%Q#m7`d!=TOMy=$!*p)>#$6 z3~hdDD&iH->pF#>J0K1i{en)DMqN16jow;Mv|D8-+blIVINLg!#SZVsGw!N+?OrwR z;cfG5`B(kvhmd>1Y@iG*eN8n8!GGExvW9CFM+o=yJt>0@wKIcR>Welr@N&r#=^ONk zYfZ15l^}urqv?EILE$+PH8SqyMb#Z8{nMlUm zh{|URBA8dNM)SH$icj#7CC+>&}TqZ{dKQ$L)N#fvO0B@Xwi=NuGG)4|2mQyQ3Ja zJ{a^H!6KtbVHb#~##8hi!)=~Z^DRz>Pa(Rh&A?S2*L=R%A^|L=|a z7ZO@3bJGU(mR|`9Z?L1j3|A&c+v_=y6I)w@e;>*;MqIJeJR{gYQPP$1)8qsFx?-uA zi_-kEe%Z!o<>u(P@&3n>if|*aQ22)j8{Svht(;`!dp-BM1%_0>N<+^vD2dr#wk!Pe z5J+E`nF!hzpaWFRgEZ^i;xL)Z`|}CA`b($YKUT>x7Gk!*JX&kg_POa{_NAMPFH6Uj z`Qks+8TqPiU>3EVDCA0-s68MlD^Ib?ygIVOI}0fo9egV7DKe`ZP;fK!szAWbMVRJ( zx5Tb3PT$Z_1n`fVoi%V2?%{MJbuAyzDq~FCsvhq}5I%-ZY(lBM#`pkV7i~z!V&gRN z+&2il=Z{n`n-)m+(WO*9z+|Yap9_;BB;f5;;&V(4vSuHF%(1j|%aO7T%7eY@lMnJ|4!#T9g8WkwqP2XvaX9u%oLzDP<6i|CJuF57oPr0y?=>k?@Czx$O z^lUU18MjF*u^z84sggQ%q6A+$Uz0Ci=OPtW;%0>9E-FY=hjbLZDpGokvA&4y(({xF zk+-6U&o=f=>Y1zQS!aKIf1Z^df|d^R2$>NuAgMtv`R;Cr6OY;MhqQq7E^Vn1M7zz0 z-AS^;_U;G+wgE(Xrqx)>8@8g&4P^i+g}ZEkVNk)WU4L_Uc)QuxgcuXxOyCUXqu`le8t`q9#Yq=NnJ zUqAnEyY`<)s7xh%xY;y_IQ~-=Ed%Dzh`v}}LuLOq|52%8;*?nhKQFI)4QFt0um$-* zt^4vW3?Q3qzj4aobWsf=l{8wyj_4Ljf}4HeUgf0ynEDJP8udpWVa)vm!?OWczLxraBu}*+1Lf3OQBLyaSp!z)IjPIekkP z%1gk%m*@Trh#nc%4mrd7eS-J+4QX=oGZYO_Ka1v21O?0{$k3;@(aLShS(=1A1>zPe#)X@_NxIQA!&!koh9!N2teshz3onc?EQY9=O)zLg{C&J;Qq$KSG*USNhsF z{d_iuqldx*7|8fUQF%@0MY}hVHj$ndc^}R&y;y1PqWvmuZ?}r7y*0HcZF!kTT(SM` zJ62Jwg+o?ZVwu};28-rTG!4RR$As7QLx-d7-rkGGQCo1FXgX4JvD{z?FJ?=-QHJ`K z)dx>*xRtZE9qotU;9L-Vlbk5K(e0N&3w^#{^YL9Dm?hyNhZ8k%G+Gr=m7AaEuOiUf z`vdr+2IkN^$i4aXsT}tM@+AWX*&unERTA3hifgE!czsc(HW}}C&!pEJ!uDxz2!rSznau8KA!YveciR>H-h-!IgZ^SQLSo zO#IG-dKj?xdv|Tc19*0^N~touz$iv#(Gqs}@YgtGp27Kbb(QB>5&*Eh0sFxFMc`49 zewdaHJ`P;H`{~!!21Ho=T5D@eb@nO7@37a|ENJ^jo5;v*Bk1%?(DKK{wCH z)`zI1od&^-$k^_iEbl4)T5SJEKt!zu8d;sD8KPW=y za#c*zaOU`&Qg0Zb_;3AxWW9A*)Lqv$3`2)Xw}3P<#7L?rp@h<)GDE}AB`rvI4K2*j zsDvn;A}BpHC>=^Oh;)dAz_+=s`~IHiec!*vLvi$&`R%>dI@cMn)%bq8>o}GN=*muZ z{SWGV)%IiW#Z}U(m4&%ya(n>&`kBnc&FlTe*eqnfB=&E7dr=&I5tDnZcm+`|tdMY( zS-i3TQD$shx=jRyl*}Av&MQvNfie$4=E5g1mFn25`tG&ZTVU^)CO#fIbhm0`^W$2@-7W{5kcaT zah(wVid$z0t%v8-^G99U|K3A9f@1DC_3=WUw=;nwBFde2NS7Q%`f(d7f>p=1swkr< z*sFvRe%7m2ZzFTonoeP-1>0E{{psQ=&#+)D#44tTeZF|qsK2pyN1!5%kdTlOdqXAc z9;URn?UDZ8p2xN~+|g^yZJ|liEtt25w*mjNEVV3tLmuUusp&OqC5k@xhE>-Oj|?iQ zp~xXXzM!IqV~R@#VtpRLLCwuxP8RT*JFk{+Me)R#Q&5b6q$zz@2w$tun%vpZrk@*z-iqOxO~)B8oC#*)1+sum9d1*KU4&`(K3ckZGLpJ!MQ*cZ1P+_uloK6j z;_5cj6vN#@qQfl5@|2s3U$%x2LGM-&Ce1sQRW$e=@A07XWNrV81;iiNCd!pLi${dl z^~IT&3MQm;zhS0v3=OJ^p)SEwpiSex-&c&~YhjpW z^d@Rik%>e~%~+r%BTtZF@Ts?Vj`w1853{~&!udal`G2Ohe+3DT-UnS>@7CsYx6FTy zVB00Hm?u)!+OH5jOr=b~Cvde0>cG($_ef?2FK(+H{Q1M*mvQCF6|lzU${0sJ30m39 zw*oP(&dxZ2$FlbSSsQ|v7W1cON4~8e$NQ8Pf%%9>CwWBlu$tYx z9`+U9Dh=`@IVEXdfi$JUXBhq5${0q`*RC$`clVdCW8HZw<0~-cXdCjTSYw7|c>Hsw zeR|~fZ?v&KtN0IpP5H7iKAwlP5_HI|@>a8C+lc*r(4Jwj%9?}t*!!*N^m(v6QAvde zZU!hZqT+il3sO@OMPJbE1~-%-qpF@PkomAxmInv-Mei+wD~=AMn`^@#kcDDCfjtCxbG0{b%*i8 zw!shl{E7f!mvw@KR09`Pb+65>{)=CghrbQYb}5p`a#|`q4vre{#y~gI)R^X`Q-6FC z^4(5phl0k`(aDJy%6VIg0($+pk=DL$ZUV}g|RfNA)r}LBAPe5OhYgMu`+wpKawJ?KHtNVR}bM6s}5LL zilkXQAJpBb9SO7G%%%ukW#Wb=8ZGzPhFNh`Z^y&vLal6kooyPk{T&6gH*&h}j(@zn zr=t!}q}cIBGSoh_Dgz@&Qlr1)q zsy(0D@bFlDLF-qZ?dpq1cZEIm`DTA1{SuQ}wF?hFv|ml3vg#;&YP$+5Q1|wpipI&a z`p*rejS7cfB(t@eEjUhjV_>2c>bZk<&E_WFPYP{JZ~gL0cqKtWdxJ!54Q>ecvSMCd z5}nq1>=OTSqq1vna&?W!1(O=o^EfE~@|t^>7xd|BE=1NfIOcCt1V|xEL4S+!?aRJ* z?_N`7rlH%E=WqPrKZ1RGVXXyd895GNxbOkW#Kbok7!PpzyGdTG%4y0_9LBHX^Q(RUbQqH^zANsY~Vg~Zc|0u&Ak@o}R)Ro@Us({*hp}?V~ z>y3AYrC&eomPA>|MeQBl#ch@|P*N&|HvC-Ee`z{nX<7s?gg1HbHu>xi19@pygU6cg zM>y~L&s`4qNJFD|uCul?g_;P*m6f*FMiOEVuiyXuc>7Zv5d&l}S5EH7E(RHosB>f< zmGybyar&oyxRL`pxCvHyY_N-~d0C2-Gq{`k*nk4PW@L7w zb+FQM4Lwh#rU!4BAce`*3Z4`k}#L=!!z>r&9?<`QW)j)I!j<3;?{!b&PS+E? zD|(s>lrLdcVyyQY>Q+~zH+sClq8?oN^?t{0d%Eu+yyQO%Z;Fl4PXeJnFw%J2{Y84! zGsQ-;C+bC^#jA-+Am#4t?$y6vwwpm>jPIYV&ihrckplg7`{HLkxddgAC`2}SvdM=N zrQSeJYc#BX+yNWp!8YDDoJj)KLECby?wPPZGT)z5dVlp_>wJI>ij2cgV9|^3iu0Mq zi0e9-KNQFQ{Zg6BFc~H(m8C;DxW|Cs7aj5>>yAzCmN(+uw;w|m?C;Ug{X`um`Syex z8DL3i2Z6)q4fXPoqE7!MoBrn{q^RLvkNXE6AEQrvQ8M;to&D*&?Nd(8RDy3osgJc` zia^2g{nuktQ&Xmh;n)umAOL9t)^e3-oarM;3C9unx*cwxvkv*H~%pFjA4GkH? zy~zk%mO&zEChxHc|6PDAmmsQTTHq2kdjCBmOeJp$yPaV2MN1bm}v-*Si z9n3m64-w*l%yN9$Suv?JQX+nORqa&b;}^geIR=N?Lm4#WK%T6|XcSYyVbw!{Mh^ z@te#=lwf(AD7ALy2kJwOwWZG>JjPiiY3r%88ryEHa4ky3UbYZ!&7|k8uX`}roUUFt zdnTZQL~?WG2j|yyMqT7o(yB}nhW~hn&YO1&>{wGzsp}L!G#GqWp!w(K9}qzA02uGY z=b-TrF=@g`Bi0V>PQkHB(qK{1sd?#n5%YU)JII<1e`NuVnLSE4 zOm;yOxK)6;n#p_1r)lXMSLeHvyi@&59BnxttISx_tV)R z`^8q*9g~0`v%*&>-iC*F%j(l!F~bXKhlsh%Uh9kf0fdZX4*1kAMnnufE4x=4_*ofD zM7?!XtEp(IvLy7N*At51jxLPjEZUTLmeikv1=5ypfrh4ssFU*zu{NHG%WFJO&qL?R z(+QNBVE)K9u3+dUAHw4gah?&ZC%obvp$^0?IK)S=iVoL#^~+pDEmppzsT4^KO6egT3kqvIj@MiU@e5af}z9g?)~o_>dov#N>!BsveX ztO$=z8?AVSvsf*l(&Iu;NTI(#)LxnlL)FQtxZswDN|mQM8{UhZTRC6ao?Fo^-tD9s zXyZ+_790xi?rAa$1#K&__I=S?+e8eEQ@Zl2j^;@|4Xc%HO)fm*W*)Sis)X|R-9(+Z zpmr>UL zP%LGtc|GY6Ej8J7Kj8$KaIdbk^h$%wBW{C`u(CHv5}6?pR}lbri&rM{Ho!I9@p-c} zm7qb*b@nobAKkY*dkD~~j;-zOz>~G2$cTsvpBzG_OQHmd&@qj3>Z!#miJ3W#A-Zu2 zStOygRIO-yvFxRX8Iv}QavJ+hc7$l9T^6OhcxF`nK=EQ6$C-yt}#zT#-F5b#mMCQ_q#rm~kjIpYJ_TsbJ;;Dzx3gox;x-d3z+22L<@~GYr z6vqZ{n)X0q0%3&%Ow8@Ug#00KhG)(C{^);+zyE72x(ZP4-s|3p+)zkH5I0m%!^VT? z*4ypz&)~?oXw#deCr~J^Sry|02b9qFM>9iaj`h8h>wVbNWvLfstB}>ZUx5{e5bE}AdSww#%_n}4Au${(iB5)ywwnu|zX_-N zoJRb3y72{5%DHfSe(MoRl*Rp7rOmC*C@+I=K0$#)62z)h$I;g+6DD7RTvE~IzivP8 zmjI+@4`4v4`P1X$Y2Fzb-lUVl4T1|}`lhw4C;v)KxebCpefrcH%UBMtw3x23<2m_- z4F=GG!Kt#`q}~cYr-@HBN6C!DPPe)AtlNNKeLdR>lv*;12HC$GlWtQoE>Q@8(%gM1(ofNl_gwhod-FMECUg6T{_E(~I9qWq27~jx317=Y9mfNshu~Ib zbd9e((}fOH4f!BGy4>JqmZqTST!vhNjY}n@m$(Jdb(#C=bYdq>U-zu(+!G$Ni=y<{ zCy?gMu@;ngU-t@0Hk!Z@Me#D;?lV}8*YcT9$ce20V-AR1pNBeQDK(>o3g2k{vwDnY zBk~^Jmp%Qo=2M638QCvUh*;5DYnoZfSOU?ngR{W>6%-U~`5t$Sgp5Vvc|}J(pTLKg z$PNDem~WOhNcAiM;j&wjU`w@$31%Xr}yx~gZ}}+uRg@z`~X&opk&U<;@lc~B>6z; z6#E|~^cY=~UcvOFp2qu(v6I5H9HB+mLgUtDiyZ)t!{_MaBt_*e71614XsX_bh=@xe z=39=lp8zPbOTo$nm@0l!vn;(<4!Onnb^;|f7L?jT_!<^et74Yvl2suyJ2}~nZ(aYp z89dbLCPW^V|5S}v0xjt`wg<1Wb+PP=AT?c8^|I{ygGtI^hl;B=kzR!l?)uikikS8E z9!i$wD_E%ZS<=4k#B^dE+0r4*XH`sDQg->=QO2c*-?bw@fQJ&$bq4cjT-cvNG|S|t z1><(jUS)f@-Z&a*C&W<#!z|27A!j^F_};mj;dK7GN2c5@tax~vr(sETT*G(FGo;}A z-;Yl_HMM$SCx5&P%i(zh-zs{_If&(dM~AHf|(n%mQn1LJ-UB*ct0g>6M)*$%#oEsM$6TC1^escw-v`KcKXuEPlG0z1 zdX4xETw-WQEhI5^@Pt;M2|54iI#x*iOFXP zB~0m8M>L0tiPyr-bpMbC_+o@?W|=m>fA5ErgP@7`1H$#MD!7fwK# z7#>7GnUBCQ4*Kx0n5%IH*yDIR7ikH3RBpxKzs|E}q+-zgz=H-41(~K7Sx2Zv2v{|{ zrG0Z>(0Sws(cN!RccX6DA*k$8Y}r6pZ-_JUfugQb(81#k*(D_cW4N(Qi+rQ+hTMTV zxL7l(Aa5MP$Gr2VYd{C3Xqb<6$9obXIwXm|Lma|vqbimeao?V@&phmnhEj!) z!Y74AAoR|Lt$wT()0HXi4%y9lll_<1--Bvrj|BeuCcfwwUR7yMMH&sth*mCYJBVY8 zH6%-33PuwZd6JE-xKG40jlfov9iXvILzsNm=pr zy7a85A(xtl%Hl;NHKkW-X)A`_+WVaZE5%oy;F>?m%4HvwShZczcmAU~D?~x=X#aC7 z7Un^KPWE}j@a*iM;ou&n_dZdF=r%(qZj+tL(BY}sV}Tad8bO#QARoK%2(@?$mi^3U zEFuPb;rL}Txu}LUM7IK+{(}T1e5beI8oR8ZNA$K*I6@?@F*s{cgeBlRrr9-<_Nj(A zP8{nuNW>V^EJd6a9ix?Hg*7tYm}t*#i{L&96EA%D+YT8pbmf2&IVce!{bQBo^akx} zCgxWlz32luBqcgu&Kh9(qw4C8tSeCD7qkA=A4fwHg#n78h9NyWbAQfka{Z+m^eo5T zKRr7;12d8^^9;DqGctYP^xuJ)j?n>BGLDn4k%Ka!2!_aiSAuNEJQCc_k>#k^p;+AStC_q?3Lqktf`vjof zM7{38R)O@PL{IvO$i>Jh^bl3`(|mN?^sLULL`<_@4Eu^A;x>b9r=yJl5&E;2ji3}3 zSpp=bSWtiq(@0NCRC>UvdG(N!(cJv73&bvBQD;vn8O9^KT9XH?nc>kEJdpP*A%h-* zQ-)4@ZpGbgqoK+1U{a+GY<5fXxjhNxeK4l+@3)x+k*&=MJU{N@2=wb2`NGpC0!zL_ z8gdzR6(a;k!gT1IK>E`}^Z9SEbx$T%N&aTt{|M{XjR9Fwy%+~RiTdgviuCJup-=or zg`fD(Fr^{+5-pQpXeMqsn@0@%4NyL@bA>Cv`JG??iY>Fg;rIpAfp*9uVRArErv)Gw z_Q6W%H90#unD?(DNkur)z0s#q85D6hu6LEB{!5rDhh#MT^Q-qQNu`%YTfkrI1keI5 zHf-c#m)g*h98-c0UMi)Klk=^2*(ZXzGDCy%!!39g9I6^rE}Yc8r!-WrPDj{TTzDN9 z+QLVp1I^5W=+zU?{i6Xs4B+U442QA>mZ!tIlw~}ZEOt+=H=DG>O6xtvLF%Tdm9DxF zE~H=NS4<0&eb&>L?@oj0zvBH<_AZg_V8Iq&k@&gbBqh48IOz@eTWCIL;zIy3iS$_}K$c_@d z-)zw@xYdrgM!Zz5@u;}8v{Wd~Kwstt2{VuZh>J7HJ5E%jX=u}YbxOWIp?fim8TlbO zzRlu}s?4fT7>taJY^ zHp{GECGOY(X*=Kc>M2{l{Hxbkk>?hVyPosC?@q5C9kb{)DK5C;rKL3lk`kM|HVx)h zo2CI2^3vAU7LX%{IgQJW8g6|~pR{C&Fn>VMWxpsc)4Ee<@Xtr1exJzuD&Z{=6yajh z9XBP%Vjs7+E5IpqW@ZK~y@ft#RXKFNDMT_#8v8lVkPJH94Y1qaRm;$VPeU6?+xr}m z$R+T=xizqrXF^OwgKBQLu~c|`)D5<(v^t)DUQ2DtNllXm;HEuGP0QdgUNeZDmIfnD zaM7!9qxaP=kQPsFI6Nd&aZyd9pK$SY1S7e29B|ERt3r0gOQ_Mv!lJG*5$EXOR^GT< z!z9(oK^qv(j-6v~BE9XAG^biEw5x5t3M> zL^0`BH<9VD!Em^O3=6RP;!_xw+@9YpJK1fU53acZ z1;jKJ`z(3KOG*at7;z&9BBr<^$(HT{ELFwv`JZOfjeH#8+UrR6Pe4%dtkj^hnxkAB z5Z9lZ_-;z(s1{rqq=_>9m2B)7)7)gusCs&7oF(I!yqF5fKfQId*X`*{zi|bLW8U{c zHtDq9B6&BC{g^y!xD?Xdg;Bz0Esg)sl=Ld?5I^N)@g*31ttEv+V*iH29$XfsYw6@l zgbM`>JG!J`pJGHd+$eL8VB=#)w))%LcQ zsd^XLMMohnAaI8~FeOcbfzInE2lz;21judwEoYbfLRIacdL{W=t#}p*pRJuX%Nn=d zoDBt@yW5NS>!O1y$Sn1b$%MCW1#OHO&|_-Icj_F5<26VM$=Qs_D{`I!Q65OPJd3}( z#l*&@Uc=P4%A1S@yRWBo+V%flTbF1r+Z1`tM}W*T@6uw~P}iRBDJKghQ=pFXVYH`D z{d<~58?ULlr0@L=RZeoz_*gk={NxM;doHg0h4!nuNATh;;1}6ngi62vt(AAyH*Vpv z^ogkSAy@fri{9~4Lk{nGeEYOR)n6#_K_(WK=_Vg>FS2Q1Y{8c)DQTpxRX6${*1%1% z8|{1kfgtA?-0uuRPeyG@GtP_Ea2H#t6z5w)T^GAuXusonw2ABa#)sLvs}8vcuT7iQ zJ-O4-;ftfYeP4Exl%C5~7S`9-fBu|p^5e&kx7Uc%fEO?jp~e+itdCMd0EU1n-QB**yve}hyRHMs8hM3>A8rwNEck8G6BlRXs&>NCrw4uS5*N= z#1QeMjVmTDhXU%M-UY1}s-{b*lskLn-(>Xk(EB*_ny9_QZ(c^62dd%KO|Q<7i;Nt` zBKXPfo(hMt?96qf@8O2I3AU{b$&qFxqOufX!3*6^wZW{&9$JA7P~Gh`U}x#hRj<|A zEBPehpNCEF3DCnFzE}qACs4D?hwg4SJ^k?P+Y2+Zd5}+SQf+-jtI3faX6r%m=;9mZ z1(Wy%r)8(XQo+zUR0*)jp+pj8|MRfFgPaxzt@;4y@b*|LubRxn?9lnN5j{qi zeCJER<2Zei59FvPL27r+^0(#dNo9gn6O`Ku@9}#51M-qH#w<5Bk`90U>M~`8jypf4 zp-IQ8P{+S|Vzu>t6e<<5Rm1~9!bR!Lmdb}8{P=Gn27Tlt-TW^}ChmK}BlFoTs=kL4 zWw632rZPGt75OWb7P8(mm%%yw1K6tif-I}hczM3PAs2b z$vG*_HRTi3t@paaPCs?YDD!6FR$|HKst;u49g7QsCs#acKi6VS9u$dehw%SU+pw36 zQ{xnNrD+KXf7sQM1+XUMLki65jH-qkP zUcBc%7`#%$yg&2H93fML&tN!Y2baAjVdAk>5<8Ubxz;#yenhKwe*+G`2PoHu8A?^5 zkcy48q16{4N3+ds%T9c-c+hRP!D(JMvv2sCshK-&Y8j;M?{9tR3)+tbOOUMpOL>Q;SBxGaIvD``BC`T5n?VFlII;^s-nAY)E*1y~yIuHUcZWBt!IgLgG+ zq5CtKvxso_Urswd{iKOgxxZWYr$z1t9{y>r)5V3yL*RsK17Oh9rA-)Z+ta)&D$dxC z!*hVk6q$ef4q;%VZ#?>rAWBQxhlF=Lnz$u;>omEK|2B3ompf+Qd36_N>Ak583EjtJ zpX1rw1Z~t5zf3#v8zy3Tn5LAaNiPC7@IH4!dFLd&(}-cf32v0dXf09dGl)=F_oM{m=DcrF5a~TaHxARx4xnQ_4(_pbj+49c|~>e{9OMiTIi! zvcjR3S(BVo>XcdY0035(wF^zD1ctfipz3@CY0kU*cWML9PDnWX67|`9lJnV#JRWJ6 zB8JU2h$#pmYr5x794#p7>m8TZyz;kWy|&KM zK{81~N`tqe@GH(v@DIa1k>85EU)q#^U2_Y5^_DB)pssdVK$47)N-M6ixr|eDh*A_1 z!(WV0vKROIK|;V2Kq)#Vc)KQ<&JWpt8jzD z_2fh3oP+`PL(rk#|Ibgp?3kEhAx#{FNV|0B_Fvz@nrR<+J^1gXVG2NA~IbPu(EK*9Y5biGN#KTCSH-0z)*;t|ZdIoA6pT zBBa*KSK1pazHCm#|4zRD!S^>wpf!b{*3_%=xSDG^@*Bs)9%($)wZ5_m0KtZ^aXe%KUZdG$bJdDWGea{K3ud# zGG1@&uJqQX`aYgh3xk$qx2jh9ndN*>7lwjE{sCL{V%x<0n83V;ZqdfkZ>U-_iO2+7 zg;B@iboH0~7YX*42OZ6e)B3;+nYwI&V2~ag^=9U>G1}BYt>R1FE1$178ly`|cz}7b zwzZ`R2mZYm?Fl0Hy)d0{k)bpcN%*d;Y>th4WwcBhDx2{S8LgW_8R+!Ws>MVrqAb8& z)aa32t-&ly4V5_-{4oi%% z`?8C^GNsAw4Ltj8TsONWffYlqJ9TGw_-|NzbWpeSO> ziB>9}8e&4LWrV*f5nr0}AWvYF7EM;`^bs^aUQ~%#4gbn~aD$`>Q+r(yVaZ0c-f%)r2DHS7k`4gtALEeBHb3rhY2zGx-JvUSQ)`Z`=&rsMh~iX`oZk zayoZ$9&^0+#Am&<-uhO0x&Nkv#5{8jV@9O$0#VK1u@tFG;)je3x$P71`ae=SP*HRR z=6z-X-k~XXb^w4!zb*INr7KJMOlemYFaH8C*1Q^D#^NbK#OKE0;4?4JHGGzM`~Y4u#E;mFmmNEO(~h{kSv4Huk@Nj zj}u>nyVto@L~cEjuyLuwn%Xl{N}17`1$8sE@PSt#=&dx(Q&U3SQ|;V3bxD@Aca6`G zf0&|inD!gJ8^t%;e!3DYe{bWaK?i2UMLH2=@`7O#!TT_C@`jDa1JyYN#{A#snp z$lms|F*d%gd02&@2GtruKtTT|{+nPZ8*+)eDxI(35~$b1_wh;%-Hu0rR_cjGVX{@-LzJ@;Z)C86naAL*dBMz{(Kou!ygjV@8A z`{s!K=)R1L#XtIgH*?vvsB+Rkk!=7B49C~)mnMuLXbaBTdVhU+&Ge{yaV0i`lr&7~ zOGMzV(dp(9cu$ewZu8?dWdriQ-hzR-zi0Fpos~N;UsX`i?pO}eo&%8@1@wc##e92g znkZXqm2FO+RhdAkU7h(t?VZ_Ynv%{AN&yr>)?Vz5YCtpcQeNMFxL zBmyTnZG@9}RUKtff!D)Z$^=cO5bX9dZ^>NVJJc%-TxgFatFp|=&QNk^1yzbJjdy>e zse%G(I{DGUd?ZGRp)09-xR4fIn>RW4_nYfaZfL(`U4Vu)i^eM?nEbcI>##> zKLf(dF;)R?s41f`C7e<`%z z^$5=$ozdHM&U!Ch38A3yVC#W)(8D$Bs+%2y?_x3jRhW?q+bz{j+*`Q0iA+n_N?3ug z>BaZGZ9kBxh%$0h;L;uhq;Zv%;bX7Ekp^g;+;21fST=Nj{WYz0|Gui4Q2{(lNL7qTH_e(-^5m*e;hXYHhIMQ0IY|t`hiY;?~Vh# z${ts|?i=Bp30oV>_@|EFzEeZ{80g|*1~j=y6!)=cbHyTwso^6k&53kd&13Hq3)=1t zPGd+GZ=w{h=8q?r70>L~&6fRRB1R)^r@wBsNq@TMjt5@=JU~f2=gn@BkA$q$beAkb&bJzD+WjcW0OQOVei@H2H?Tibym-P zgq?cNNERP;(cLvxvrJ1I)^wynA9S`bATYgzGHRSo%S1_>r(vpHZmfyeMdnhe)6emC zy)hk(^^+vJYFQq_-#WMtf7aHhPXJ%}I_V@BS!er=O4v`;E5Nj)_PA$9+Q2ByQ1%4Bkkk>G9G7xkk}rTJ4K>Qrh&P%U(cL7HRLM_H_S z^;g8O^pxe42TGwP{eRCsU?LIoq@Q0-*P8>wD_Fw*@ZJ7=O?Ib+^?6h4jKE(W&-3He zz{BcXtL^6j`>ccQyH6hc&P{zc{^0DNVTMhIe0l#kKK^QsT+go!y~2y}8SC+J@7lx0 z**F{7p>t{W)0?4ZUZPiSF_#x&eP^OeFIKeT<;?BGDHs7XUxIif_e}VuuW$7fG}9() z^ki^M+^o3A`+zHK)kiAkR4X)QhqBSh7aq0q!W8IiDTe-*q%tFI!SHZhEpF3_c_T2S zqB`i~j`Z;Z3YN*kil)sDyTHs|tL@p(!&f^$H8#?wxzjKVeVwcB^d7F!9T15OvkJ4I zM+_Q`y#yVD=+KYnQN{g$X7cj2mmZl4#Vb54O5< zN1p{fk>lwz+K+rQxvQ25u)&$BsbkP@O`TyY`09YKBG@oXrK8QklwDDME9$v=2KdL; zjKGpG*~k3Q!T#RWYLw00k-0YS!pG*3p-)Q+-!VDqpt#e!NTsMccg)m8BqaqIkg`LQ zfra+FD5u1pNsbk7@S*LI(V7eP6l8T)cTV<-ALbTo%eIS<3_SrcF$zL-v}xj6_V>Wm zfW<9NDH5JzlG`3Ab3(D+<2#gGO`G}8*i*4gZVSge18qx6aP5ukB261z+wCa}*>;XQ zaY5RcN$t=e|>0N`5H!Yy9H@(!e-m0i(Je3&s7m~tI6;-f#3qtY*id?P)G8qr#s8iH?|s^%uCI5;I{uuEre*xE*?fl%fYa9f;eTv_fxdjc zk|n2C?H$eS`6qGvu)(zbGM7E0kP;#1)u`SECnaCa?h#nrnj{X87Ii{OV4+tDuy~rY zCvnsV%mhCnFH!hRc-#tT*xS4jjQ^V%4B;?bYQzg&303UH!y`}=vs7mASdx{xGW$O0 z{5&AbDx-#VKhC0;C!QtTr9&ZbP)&`~jeA=lQEF6d@7xxQyO)bz3el#Wqoss7;4HO; z#JvFK8N_mQJ0MeL<5Emc?@cy;4eRqw-SkO3bdYpk}^s6<4vGwRc=2N-y(tvN@Bh+RkPf;lbWTa{@ zUPx=5PXeIFt^VLU;x}Uxl419{&h;NQb>nps6E#xc?ccWsy(9XBRd+`!!);yE9X2=8 zJ>|g=ZFdAP^a6x;X^-VCo;D$A52dt|DRG5h5a?jX=dGuaR1l%zy;+u)u_i1jf;KQm z$d>O8zZkghKIS6QH13_FBGRTP?)I7j>TZ3tnkueB8_!KagtMU^^Gy70ZJLOaI5|`e zCuwxDW!{OoY7P$67{%O_l*3Eo8Ojeq0^`%VBh$JVG+)ilL5hbJMTkU;^AcjX$Z_eE zO%}Ynps0x7eBtTGyve&Z4Z&jrIXcN|5f3vmZxJ#^S+osHwHJyH4Fo7u(i-|02LRO$ zumI{8^48E8027djYq&Mz6RTo7=l7Kj65|pnIxD%anOUFp zkAFfI&a~5i+c?S$=M_&bkVLE1mp?DDL}2I* zu;;tqyKH@)uJD-W&ij1ik|7|JWt~xAYPY)ij15nSsGP}NPPDx0Eqnyyt~7f@@NR@N zpz`U0D1`{Lk;e=l!lTB@1oh%cq)$96P1!n?$Wv<(d(0X7s>2-{6-)}fk)&Sr=AZ_a zP;rl@$t0ywwQ?vr51%D1D4HFN1q^DeoSPQ3QT#}h1sl0HSMCP@8K{^3S0?&j!Exxj zpe&!q_ZTwlx9Q$1y~A-(Of1-QBhyY?;uf^`Zt6!vnlgoU0iPByS{R7z9URo|i?-V5 zeg6}hgwhQ(O+Pdc)q+ z7JiOKEkOJi&&#oX;|nk1@B?x8HFoWgG=5m7mNLR&lV3y3Df53&_&qqLE79Dw9>vzQ zvcWZfn_%;zaSPL*AN2yNRP)8z_C@`ZHDy7ldUN1TfiQL4DN3M@ZjpX<05|QJtZP3~>vRi|dLO zRsQ%RTey+ah2p->3%&a}_w|*R+nT=icB^-Vblco~~NM&Y>4hx(V5PA%pg>{`ll1YG|YHdU{cg*cBSQw`##r z4>czo3-M!rsQIoD$w|fdZ!8`&ae_^JAL8eRA{A{43y*TIbw-q=k)afvrV~(4>_l#{ zyzGqPGavDUeQ{`spS%N&i;ExW;N6E1t+gaCTdansl@UbKDRE=s!n<0XK3T)t7GE+M zb{*!Y+loa677l zU6}Q=8*#Tz!UK80+aDGUW8;9Q8#yntJBnLi&GX(!Fod$qy=gPmVIhKdb0C zsvXIR)Wv6LlFvxG3?&%iBYiiH{wFBwHwem7w|O~94>Gbcg@8e1&m;>gE1*Q~Ig~Y6 zV^PcpkGTQH4R-vg8m_}cfN@r+p!CEc_fUTWBQql0x0#Pn;{Nf)BGms5Z`;oS?65Ky zYF76!ZDLruIEA?18*u&|KAiE%S-XR1Pr$W8jXLrTpcXRnfPd_B%5GKyF&72{*Z!}r zfcW*$*1_S!hY!eV5ETFA3wxR(_t}34FPHsVq#^!oj>!uh+k{G?mNf~c($Cwc$B)DH zei9<|El1L)Zs^OfUS>$2o}TuR5~Fm7<bMON1Crycg=5&o+Th>f5}H-02kXFz?v;e%|}kt*#$&urXDgGSFK(c1bw|$uA&g zuU|*rI=jpanla<@cd-zseENYp?n-*ZiMoHbzA3u6bXQ&@PCunm*|@ZHcXWKx*i$n7 zlYxPO#JJ5*nbL;B+Rk&P@V^@mm?C6X_PM@JOpx?7)t&I}v)YYMYLAR+k4&1~9iRBb zS!)u93??Pu;+nW~_{p51y!gh*D26(1JZ)Nn;^F7dpWCWD0^T~1DP1ApP9lejyfqLo z()CnIi}*xo%#>+$BO8|?u35#weFF{FDZS9&X++=f+O2o;wNrKpYZc8Aw>%}KrXq;d zzJ1s3wlau4Qwm8oqUlTv3f6v4p~)bdv(edhB7n0YX1 z@tVo%;^;WMGs@J^GWcB?!)rEsafvjabn`%>w)6O|Z6oVdA_f|KZa7PNt2+0ao~44p ztEsk-#u*1x#X@iB@D@^LiYC_d=1MEm3eos^*Q$s$`(0l7YKa#|(P;&>Z)@HF} z$W_k3Q2(K9yg+YNVRUkyJ#|3#(18ZHtqc-a9im^u?=VhWPmLl_bK3JRxj_*Lq0oBB zNuc&1G;VHMSKQrTGw|rAMO$yrO=hKH-Sd1EweXu_J@j7}iXp(OlD{UVv16@)OG?sk zbgU(|@6wd3o#TAxa!8VXKKr+^`Lq!j#cqQ1I*-L@{xYKm-IuN1k05>gC1GE4CSqYB z=+v0`Xag>HuI{OzpiVm1LI+J&FMYv>n)My*63U7N>zi10&f%oK%`;wmY3uS+nTNwk z7#=RO8`huU-0MJ)o%1x_Esq{hAJkh8@TV-LR3b)&|98Frr^}EjAy=2U{hXjR>>+PF z=Tb}uUBV~MyJ1aTrn`0if=|E@isXho7U@pQU*)SJS>hz4gzM@L}l>*RC~hd~0R^#IdUKKtFm z#!G?2CwH$~&u3-J+(-PUCH`zi!~az?Um`nIf_Y0iM1=sGLyMMs#7K5w=&=W^`<}@2 zP}oqCk)h!XS+ScR;+3eCzV-xV@T{GGGm|M9=5I#&RDB3C739l=^g9ie>nhhl7GF zP$sm22gINBFOlb9!T0i1gpFRCy{r4Ei|Ze3I{emvRr!TO4lXwMR2*(+NfrV z(YMy~x5j{Q`t-EoNhP~m z9g&DP7*4WSn8^cViq)>YcBb(taQfvz1GCIB!+H^PwVbi%$>Y1HN?dO`pCT-{8&RtY z!=v99eV7G;3ZkN6AxdsZGx#b<1p#T%8x8QcEs8sZg=vL2Yf6FcN)`%0Zn)jbjzqQB zqPV$21?t-CBBB>RzT!=>bIutb9d(qwmL?N#Jg`9%I%R6Bck7UZIRZf*(^-S3qmKS4 zAMB(jVAV4^T2oVFz<@*~8$FJPr8R!2=%7b%Ub%jqc)nEzm`tQefvXMq5=L$ zbSz%a)hmVj5N$Gidtz#i_71-c3~eN&q`I)NOOrkHZ$ndmVB}7YXqFxWr)ba;iq~d1 zlK=F+d@><)iTgF*2#j4?i2(i~t0pBOfttni#RF9RujhpEpR?`2i}Ta%RbeT8*5-o( z(X*p2xi3J;)O=W5?hjJH00XU-aN+Yl;In({e=$u=#YgZa8py60{H@B-uIm?Ts~n|w zedJqjTdByEkJKy?-YsA^U8eb#_(XQO&C^8c0*h&u#05Z+gYKS>F0nYY_y3hz3pi6@ zB3n~TEKA}&^Mo4ZLA*h<6ELHeeSVbbiul;{8yFWgZq^;F^1`>8z_Eh2mK>eZ zbUb?Z@tFr5q?Sjj=h1($fYy(+MId?8SEk?VW7Q9OoA_!AWf@W;9XeQ_H+;!@`1aL$ zry1q%j#7O_zOy@{YQ9LW$i-*7<*Pm(Hz164%s0PvqX|NfIt1%j&il9_l+Qn0E+j7T zNmp`P9&nqB(?0%#b9zARnewsmw|-taFJVgmH}2T!gq#U$R|#~{k` zH>LD@?^XB3I85RoPu^Jqn%2_|*to}Q-r?86^K6(GURj!erjv59A9y|#__r(YFUQ4F z;9rnF6?pJXW$xv=uyvx;+fZ5@*fR7u#Xlr|TW=$}Ix{4@-+%I(zIiq2?B5%YuNVS_ zJRw{smM0$Aqjuo55H+2I8!my(<7f{57ynVo^nTQB_w}JqA6H7mGc#DknalZ*zkc2N z?U`Ok94j;@-o?~j?OgS)*4Bi8PLf$PrBYhGYd0zbyV5;sX$>`k2jU6_in2}g=UOJ^ zV+wHZ{}?csaMGj!YQ-=6*A*4`YKY0Yt%Hk<>5MhCw3b^=V?CY^hbUKvC$%5kS-Av5 z@>2Uc_hpyT6-BnvoEh(WdA@&NTIyt6`DUxX&rnmgvaoLaaE~(3!J*VhM#QTE5Gt$v}R>w!j2P8!%1UDNfkiH5lq+wShB77+P^ z!1zz-hKPCnjBuwGmGl8p$?5lUm8~nb&-*F7n^(uNvR_R@kYX)}hFI#}5U_W!zjNx? zcPlVhKf1v0kg-+QusfVIM<3%afM?z}4^Vptzf+&zHpWu^TSk0Dqn6~=bMWVZQVMix zZt3@`HUAABwJ`#2s;f*oJ~`6P24zJY=V(d^$yOh@=Ke1@RmsJn_O>s(aTd_N_k5W;q0~z9t zTPQV_*?`uX@ii=*+Fthf9@WtKi3)OHwX7~zY=H@h&+)?>yVN6$pGnqF$Z+MKqtWtO z7g#J_Hqe0KDx29VD2e^KBl{do4zl_Qv;QAgZygnNyS)#~&>a#3sD#oZEiFj5grqb> zcS%T>)Bw^TNQ1Ntji7XwU;vVmQc}|O-sAI}^F6`=H@e*T&`O9~2{gvxxoUyuUra8SsPw7MQEpHuCn%@p zUt=x@FGnyc`LM+Lrr+`mO>v^v4h-E<)(l!k+dClCyHW_MW&8z6|5a16`Tvea0FmK` z97Vbk-rg&oj^Oyr6VfM356pPF3+maqnaEk&kZ>ge1ME_~WcF&n+yJdW-dE9$M$mJ# zoM^u^%(EQ8C(uoCat~*!elUK1Ue?AnJ~`RQ#XcwT1~QCZ8}x%h7uxr8#m$JhOuVVB z=eGa+-kT^s$NdWz-zQ%rJBoB{8Mi48LhL{E?-myD~(!?r_Ft;D#%an zM7NDKF{+Hhw3ZYn$66ReRWF7darZs+eb}|X7Y-)DIY7~f@is9N22Sf+U4X-^va4(C zV+qKQS+en0U(*!-_~&>*CM*#W9Fp+FDZn!9Fa7>cjaS?X5o>b<9&DBvy!zbl_L#ce z=sd}(N#u}MsVDuBW?P@b7)G1a<$J$=rFQ>N>T5EGfaj;DdLRl|d*fmgXp5uhNJrC? zQX5S(_3$35LR)M!?#P;_yHU>6SIwvMseU;lto#zSEoa#>HU37=$%4hrBJ+(l2MoVO z#i4XBHl-+A_qcWh;hy=%z~Ox)DP9brC*V*@p-sRXYPjNTd;4QaWD{1FHWQ*rzw`4` zA3k*-o+gYPaY$WZ6s&2f{$>3%(U1U`?VE@83Di6ai=?LRFpn^ML-Ny*Zyj-d4)Qi+ zu#O^qi!QuzVWbx-k~{*_vLdHJZzFN!hAel&dT4|Q9aWUedD<)~tEwt1S;Qj^sX}u7 zJIP)#bTCm79Lw<}IAYKWcXHm-5NHzZoG#Ox28gfGpSUuR>md0>0rBdsFTQQ0Y=&tY?*4Q|6$mh z0>CCV(dzDTKdaZdfHts(+l@px%Hr6PZ>c20GLC0GBRs~OD`}Le7@AZqL+~SgIxgJl zS6_f1k!uLRx)SE4|2N ze`ma)%Rm({6Cp9GhJ0i*hu$A3Ywc8B=5-Eb1`QnMgBHNd?_?oRg34_Fa|Dmr`LBY> zv=mxRrjO5N1wS0bu=nh=CdiVx)N(Y&J)iwHK2tdGuu%OOhd?RcBFO5n=C{&E#RCuUl45m!|NdR`T}SijCu@#5Nyq=~OM3HyJpap}h$F(( z(-#*Z`v!Yg0f7w!|JegfZel9ePsze+pnEFeH*$NJvQGQ#J?i^7$5E5+V@I zR@ENF^SIZ8=8MztJ-E;sTH4ilvA3~^pY~!kd+y4=J5|0MqM`pY7K`LDH@npFhiA_5 zSTz}C&96sj9XHMB(mwhc0dCvI=H^R~gaSnRKt=MRnc_v$+vgF|Xv_)dlIb%)exN#< zmBBUEBY;7PiimvQ;!;NBC;SF>vcZZ4x70kIyb9HTWTOWQ*@liB(qeh9Z&Du=?Vm6X>Pf$=BIa64XO>9=Wq ziD>JW(?^`2R`Q6=A`@MG;48QC5S$@<|h7;K9PigqTTK20`DYnS>ou__8#UCoSZXF zC{CR|x?r=}!u`5^%Q-zbCo`MMRI)cLoVA-n!{NyFVRj5Ladkm70ZgEv45lHFN%#Ds zjQX;4!#lhc4|Wd?F|6#r6X}CW1|P<6al9?aMWT<_R8}2k#xImS^zk%t;QH(K{OglY z?z%7Xzulz8#?@huxmFlq+Yk+l_@Z$=!}j1{hrJ~}=8Ijc89C*U&imGFd7MevY2SwN z#~%{NM^!hexk7s>dpuuT=mr%mLbtZ)A}7V2`YjI)0!WJDEy~;0^JXFq^v zZ(Cr*3~?s^Kz=T6d_UHDUOixJ-LQib0*Oh93I2eV#@gE|gw+K_SU;d5FHmNnqFNZ` zdIe{2(AACC56q$d(6K!`QoJHX1!@^F_AR+lae3YV)*wqs#(bWm_R&v|8@l?%=Sv45 zrvYE*=WXYkh6v^@jy;4ZIUHQ;?%g&5>}=w2$D|c9+Dsf7jp!aGh_X1&$@aXxz`WhL z^P{^)lF(_i&uEom7aWxR+9qjdml50ROhOCCVzi=46g2GrRPqxj9fae2s}G7U$ExpL zdVrEbJRfvt@Eop{2qYrF(Aa(tiCTf-JqA}d3N`#a*E07!p|WXl=nj)3w>Kd=bXB2b z1JbFLU?g*W4u3G&FaYiR8mZqlqA(b@-w z-G9=1GLB39W!Q6fed7CVA8#f;2dZk|H3CqwxDUgzW@p>LGxihc6IKt&@}Gc|Y*{KJ zkC8`{z=;Hv8cSb!i-o)1(nKT4Dfjq)-VODp7h1U>C~7G6p%H`>Ayn z%Msrsh2Gxdz-imIG*}Mu!ND-|;*&}5g!Qm9LLa{E=obDK&<9+C0cinv(gA4V5Jda1 zZhw(TQVa&n!&q0L)+^xqWP~*DfzH_T{XKMwqam$UVDLO(Lp4%Aq-4l~Bju~>p&79; zQc{g?O*-Cg+Hke1`(aXSZhHD||J<bDB{V{9$& ze-*mJ_3`V`pIW2G{`~jFuOYJJ^4fYfxHgJ}ou8XtVw7&zzaTj}KK2s3F`qo-GM`FK zxXS|j&FrnWi6x`wtulCfXSAXa>? zi#%buCg(X)Qfe}{f9V316yC=-=Gj^khg(Ca&Q>A9)k)UJi8FF1k}KDjBxS9WbAfoL z4>#v!G5l&vdOAz>LG=A|%`f7-8Y&4>U5_}=f27wDJS=c{K9>&-L`&F?J~%Ty$^Lj3 zWR+j9^*RV}!Rn&&n}X7L@0e5w)y&yah6yk~GOY~@Z{5Q-OCG`$_59rc%WPa(Dd0`m zfl}zFzohR-dYRtyh^P}%YKiOU)n~J=;A!c89k(NDHr?_<)Q73r^oa#=ZF*uD7j!${ zm+Urem_We(yL%Onhk27ncBej6E^k<$Y)|#vA)O5o;G}XO`f*_B@}asYo>ZQk<%I^) z+lI9fewZ3(ojp@){hm(7tb2U5_n9fOR&7{{s7K?_1VovHn22a+s;T*Edi|uq zil@EAMssLY^Oo0hcYf!45#Bc-t=6lAIGt^hHYRJASVV0BLDI{`U~H!k z8_cO~V658;=&4%VkN%@UO@)X&|KF=lD|nwHmo63B=K14Lot@;JlI%QKr$xF6>BU6a|qbZS}_!Zf!Qzr85oD0>Vmw%jqc{fkH9Ozb^P9+r!2`S zQAH{d3k&@tBO_6W*w|R$t$ByEuy@MjGY?uVu1w zZiGTG;5)@7*aD&IuHU*SaYyL|w69>~pHCr+mKxR0N?5j2HUJfY_;z`aV@o15o|x{! zdx@m&)!{6Ap)M}0GYb;wC+Jz*vF5j1TH4IvyaL~Pgb>}|8>nGu%>;z2A@qMjBaKudqTZT2c|Q2`m0Bo^Le7;(N+m5f zT{+zfH%S09RdR@IoRm9&{QiB8jF=3qY~9?_PBJE#BosYAm>%Kglcp>XAB#<5qE|vn zKu~Kcx#FX(Z@8DMcbgC+wWl$9H9ZxF7?{dDB7_PdB!gxDAYYJA^$UdXIWR(H&?TR6 zrZR2mUDD%)=#j&@=o8X!WSK>|xD%9ZmQRBp_ZBi+sb{@y-zj2-;DoTI)xv&JhIu{^ zDiD(6;7#naO6a(*C+OuCw9h-CMBAhhx znj14R!{n%Ud4a90-Tu&KZY{ORsrhUzbNccK%mPv75U9MGwv&&$9eM;hr$frTtPV{Q z4$Lk@|IFHjZ18MM|8HXg@^HUFXW>1%C|I#Z{QC=w-?Eyfyz%ON0zdJ{xfWHtO$kfz z?mWkQDzZ@sV4WQs@|I=`my6VW{uXME3 z_;w_J;mH*pBY6zxiN3U;Jg^ZQW8xRvb6yJ{0sYI!PjQP+aT_=oMBo4Uu|2xRd;4GW5q382aDT~PPW`DOk^Wxgb-TZ98y?-W{!(#Epoe;jw!-yQl`;tp zf*UqFZJ3WU5`+Qv;$2}!>~M8gk{~I*&LuTF0+O^j0mAzuL6&(J3Y1jb4TiXwSR)~L zF!)ILZw3}xf_f-*JUwEEJNMT2XQpP}LHo*g@(vS>x zzAUS0hw57AUD&{6nDNm()$bs@rF@|z5{Tmjq7NK@6jpSlt$flaR^IX#!02G>v$+@5v%mz zc=Dc&l?JpqbNaI^W&G6Fg4!@184X~66_niGOANQ;Ajje(tESfPnIhMVcYn3gSrvI~ ztJiEpJv|-I!33wpZkQC(H#B*Lkw8e%yGnP%I-rbFPXRo40&h4+A`pya4X+ffI}E-q z+*~cF1@7q9oP^+WDmXl1j)%D3X*(F?0DhfW2AnU~!l{gZ?e40*>YE_jQnJjks=wHP zejt-24Vw~;{g12;5JpN;JjT7BL6)4e|)!p3qbB^a#VtI1NHbm!X#M5 zs(W87bu|y%mCGQ=6EH6HGT2!@xFvFw8@jG3j%M}SogJ(mmXUuKQLb*MaGls_T8_Io zpKJ>_p0;M$%G(%Iu3r2$HFXN;8-YLZO@dbIzC6tob}wd)fzb*$oK6N_>8>!2N_L)h zjy~jAj(Jw8E8B7c>9T6aVFd~HHj-&2 z6NFz7(MAG9cQ?$D~A*=cGt``iC1Rl;-f#_>~{E+l0ddzz%{9Vw5 zn2US%KVOWS|M)!A7~#4?AnI-3G)_sdO@G`aMB>@V2J?u(p?u{izk5wQv%j~EEdXiW z&BUCb&$U!>xy99fYuv@AZ>6lMLa0&a@5)hmjM-GO;&aR&l*h7b9ZJ9FPp5_}rrSOJ z`SYG{+llXjNYDXQRX-UXWNSiGjjlvZ7#2{#GNLy?I! zTdBiwua?{F@32HGP#o>h0f`NBwH)!cvdHM1v|k$=)755OC_{;~z_T<|RRH5>k;3;iEW&jg+YFE!^xdRcAFGS z|4?`g+(g#a)ndUs z#d_GsP8(9o^aym{cQ5X|a@E@LJfkPVvD}){#Ic2*g$E_PpxkcyRfx~JjVDDb;Uc3k zFt^ZC0a%@5iK)EBv3k84+##>#z|I4BwExV-~(lo*U z(yjIE@%8Dl8m+GIi?1~=k2bmdH!OA?L;aoox}4UTKhdct$gtjoZZj31e8y(WRbsp&c726Ax#RvFlW}DQhDw6 zZkU2Y#}L4?RN8ES%5e?4K;avem)mnKC&05QS#^{Q%{MqJ#;pqHpz8EfU@x^b$sHG| zI1~DZ<=?^}8y_d^55BIXv@<==Q=&3lMJXW%kmJ~xA*CDBMP8Za(R(U104 zXEMRe$RqNu9%1EED9$dBD?bV4e(EkMsZ#1M=)Ew}Q&k0GXSVa>aJM>V*aaA=1I_a^B1eXt;t00lXX~0z>mtS(5r&**D*UtyS1e7{)tJp(1%w;gq}_@aJH?i42fT%> zaRoR%k#_Lgln*Gee9`qfp*@%MoSm;a8(OAf7UB$#2dnxU@7ZH-zu;4ryYCi7xQ_|9 zbj@2l3Qzvf4$&Z&)!|tyN(O3vmj|@Rkbxc|L=c*PQUXiE+nNLz&)wC-dx-BLxKAoD z96I3@>1aG%-X5v#ntfH26Rg$E-2tX=UANbm5b`S!UEv{@JLgKQJlmvDg54A&#aNBg zVPZvDCjK}~6X^5;`hKX*AHz#tN^{0EwLbc2Mo}(r90e>~i_Ox9$|SB9YoQ?A_|Mf7 z&0MSmI$%!8PdRhGk$AWPUA^i*xldFZW=<}heM{apx8?6b0-j%mIiI}8Xb%yNDu7N7 z^kHAnQ>`>v0_GDh3Me6vd3AIzTzdshxBXAhNcs8XF9ZtQol+gzeBcCnW%xEZ9?fr- z;w-oy5GxgF)a6OJr1@c(<3Td1G>r5OU-?TSC-fpbGZAF3O(7YWR_wvsiK@NcAn)SZ z68YLxo)`_peQg0K37&iM-9?KUjdf?9%6^JJfKD zY@R0$1(qS?iw@QyjJDAK>%snR3ey`v05xidqBA+Wb59r%iMfgV$V2*^B-4+uj@HTV z+}A{#-@Iq*V=E5KlVJDmhBt$|>NW(!xZxh2zB^q!tzgcQn#n=v+@3Co@cBq407Vy|T~70` z7$F}E;($5AIsTvB9!*i=XIlfX&Sd8~z_MI^=^ka1Wt!$)=GahI=h92`=Y9nR6ToS} z{E)qk0?c%aXLKpV=6(e^Vs%Y>3j?LF{(TPIvGjLKjHZf|AN~rm+XL80Fpi5YBqBpy zPVZT^{rcmd#ZS`RGa^J6Ibw`|9#S&MrOchp?Xmw5Gw)Yo6%%v^Du`Nn9bKS1Ts9EYqBW;(TPWvsOdMeq`Sb%h4 zWaC$JH5J|>b`i`o8hwd;B|n(;6gv1mnxJlwgY(5B&Pir!SdTz&u zhD*MJk1)MH)r?P7c6f)?JZoWg!D+c^lWY-8 z#s~T|F31uu3H;q;d9;qik4#i~i%XUMkmC?;0!!|%Q-7E`r(D7s?H;BkiY1gV0(uO% zQdBK4hG8$HrP0d`4i3q`;_9VC9DdJ#%(VJ1rR{%e9k3Kkc{yD6dW(V3$@_=hN|aW+ zd(m^5#xHRFhjaAN`9QYQ3e@ym2pF(XQGA0`I9Uc4W<<|{TGeG+)un&gWqZo5nhnDW zYT)i`*nHAHn4~7|1JDIvcua8j!J|}qTs8?EbzR*?*JU{Yx|hEgQU`S28;?Y%^TW>w zF2?2QES(=Uq3KkX9f?d`qb{~q;2=jaUSf$0R%J^;0UR*yX^-Ev8tcrvgg+Xos^YYY zUi@Too`J2X2s6q$K<<+l%;6*G zf3u2MM!Fa8TmV0##n>nZyMOF0ziL0pW=Z-`U;oHw!uOykn>G6G_Q`%y0bMu!u6)3) zth-Y!NPm;xY+T-#x9$%PsScyHR2LX#{|Gn|?cH)FBvY*}e@xYb)qf~3DmLdI#r251 zJ;1DWu4mqCD!uxGjdJ04k?UozfwatRP|0B+jQWJuTj(38o{A7Te^4)K{+vzT&*>}* zZkvt%1RU0}aAO~gX*Ej0Td(*T)3~GaZXuBpL#AT!R%h*YOph|#e*}aZx}6E7aq*8{ z++VYlwgbNHhP?fHk<{Hq%};g;G-=`{Yvik3SD<%o#b3g=_F82$hRsvZv2ZiOdg3Hl zyFD7d1%K?S-p`QvF$E`J>@ye4n2v^7F!ax$&G?=eS$xnlMPK+`lZnZg6RM-P{WHM| zxAXLs z)1p8)AdBGBQ#3iqbb0+>EntL6u+sh4EaghR74I7xPe5eD%iqoG-qCPhpf>*+G=k!7 zy{d65;NZXIdgseWe}ZsJlJ-@t>KTf8E*6(KDW;KA02~0>HJ>{bTWBM?*>!9QjmIdO<6?Y73YS^K$c<1?D8BCeYP=(yQ z{{_&2^Rx}7cOUiyTMce^60}BN^AIb(k)hQLwqL6#Ki`6ez&O1fnS@2}`jia*=VUU% z^Yx$r8~LK+ZXq-RWnbWenaX97O+<##p(;4n9sT;^{95V=X!X~DpQqZJvrjib$S-!e z*G1fXkjv5bH06TWsu`e%*FGVGAb%|h@G_Zw%&J)%fa%?LS#Uz+Fh2mIiFj0Sj>D$G z^Bmyc6L|hEP>H5QLltf1o345s$NvOUl|Ys?O%FWHf4&kVI@7=>R3e+IHj{3yEsS;2 zd6rvRY8%Hf5yZxd&0$}oYd8O+T7l&_Y!YM)=7@T6nlU`2i}Ic_2nh~Gn>W}OK)bm- zI|Pu(zXQfQXn1=T-k1A*y2@c6oBfhc;G0>_&JCk87b%tRY-D~Dt%b0x_l>GOtiC2R zz!Gqx`*hawv1MEI{*utTd@3WISrd*221ee~u9t4uy;7H1&Tyr-Tr#!Ut%vJxS=Q~W zrSWV?oTqrxM=hOoQw$BW49h%SBVWIY%_tw{eQl-R=$dO0Vh*n`>>i^cA37tO?j5Gu zu9LrX6(?bN)J))@G@^`2xyB^H7|^N7A9;h%W>KF0c8hlSqK z&Q4B}^-7PgQ{(3kFU%!*B;@KKX|c|tALz}sDx$bdoiBf^1;@^S%uZd75oI!oN2d=U zlI-;IjNv{}?&8e^2=$6ACXHdWx=twmkW1!~!Epx}wKV6MS>ATPJHfZkA51M4Uj%T< zYPB-_&(}0%gq0;012L6auIFj)d)GfZks z9NJe55q<3?;nWGofII$wH^IL+1U;UIm)D`wzI)Dvp_*E}ckgq1QEk&QHZb{0x8o~b ze#E>SJ=@IrsLTb~;1?AU&d^p-Z7OpyaI1G1hlK<~WxdC$XVDhZrpv0wYEy+HNXZ6s z0#D5-GeTBZck=7qwm8H8G>7Trc)#eG-$SxXFCTgbnhmqWW;hZxS=3I0Y4lld!YY<- z)xwzDT=GNCIjIz#d=NMwgYbyRF@ zsLXkKEDejG>h!6VONcC)5`i6B2TzIQ8`&oI>M(#W03YSNVrK#Cs6=&;l~MOM1im_u zl|JUWquQCi=_HCs^Ohnfm`$E_omw?3q-lZjB4!i&4F zhB5rVpt+yv@vDd;sj*yOo^p}I=jCHD)$O+wSk_k#@Tp90ch?-5629gceCZMwA}_g37P!8hOheLxr;?_!2m8i+7j@Q_q6*O*YKJ*}r zb^^Jm4sxc6RD}ex(kF@!m^hS)@SfIO>CDgVe!R-^YCC$FvtZD6gthy!?S4pB0#C7A-37YLBwU+x>T=!_t`yJUN?`>^FowDAhN z@#@pewR_KT&g>e|^>rZ3Q4Iuf*{vUg;_$kI?lSncq2{G;V>4S;zRTSkf49Aw4sBsp zc=;U#e#M+44kkRdB=!kLoG{NCKU6>wR?>I<@* z5-&$BTH~}KN>6ZE(U@GaZ-3rP2_h4MLoQ{b_Y(!xI8j3>mxWLMtwCEC0U2=40!93{ z$iWYF4poUy%x4VwCa1F*(6Xnp^RVw$VF+LZPft$+k&C0WiY!YWh5$O6@!eU1FJFb( z(U{ajg9JFxm~t_a+c!u`1lP>roFZ@YMC5S4(gQ_RBLEriih6z(sv1Fkmf#WjTp*Y# zFIQf>I=yDkVb;F9hwgRTeg0EXM?j75DDmOh>$z6v-R!XohKJ353h>c-*osjM-CYr6 z5Gp~fp+SIs>I>J?XQ>8DS7hG}0(#h=+Jv(UP)b;2>t!f`|9_pR_X|#YsKJ)1t_7xX zc;;*$1`V2f^eUvaDs&X?;>yDc&9x60V)JWw&5_ZSi(x-U8KM&^3*v+uJ-v8R&5fT@ z$K0pOKmU9?gh<)(t^8TanY**cYWXBX$iVzk6To89sK%qusF*40BH#GtkV zyq`gNm|ZU4ZBuVh3z|u+!63pC{Ceg{`uSeYp|nzYV!Vy8$86Qgt5;Z^3Ex`s^}1<` z>RG+)%yq)`fT8-N3KQMhrBLc#v#zy8Y^4~b=&ZFyxJz|+S#Kh-W24{x2!&z_MXz~8 zj#9Yzuq5KE*wNA-<%qRg-)3iLzkIpf_C`78pY`|b_99gWpbGh%H;{l73nx5Ms>HSzS6FQ^E(gDd7@j?`P8IdS_QQCu*Vwcgp+Z@ZQ8ur&d=k z$z&rG{2vbjs2F&E9vvMKHaWUXSAy23wzhWOzx&9Jr4}qhkSz}^JRX+cExG#p<(+ZR z?gj89qz(ygr&8~LRS7s29=?~;rQwFGf{g3Tiy<^22w%8%_)&!rKFGq)C44 z*5E+kOl}OL>j~|9Ipz7hJ6gTPulM?xuWqhK@}pb#3rY@_ROS_PwY6}g7a+*j#Fd{R zmZss9oy~=VolCluDq~nri-HDC{O!{R;AAnE_k3t5o}4i}mrXH;k&^AP#e~l_hX;8o zxtJB{;VnNCpS@-$#qTz!$nT$2&oIGRr!u5(4iZ65&4n|u*SdEM8*={?k7|Q)0UdU} z`C%fl`?1q?iF!4qka==cLY=@PQ8NX+690|9x;MR#rt_dG)TIkFg+zTu6?VZBsH!L8v=k5*IP3JM}NFd^1 z+wd#pnWS-_>*cf39;)I8=~aR>e5TtgNpn>^%ndP!=1ypp;Iu^MFpcvG^pN?)Dyohr z-I~CPjJ8EDU$Wd@F6g$|h+pabzsKh*=G>%be~;{7!JsEA4JkN>Uw5qokF7VFofpKj zDK$&^uRUWc4@w$XgH>gM@NqJ28bq|2)RUe_OLx7PbiG?)6;X!m&APryr^0T?W0+U@ zjigHW`29?;z0}YQP?xK*jfRhxc@74z+eLs4e^NQ#i~oARW~KfE;P4g~GpABAajh{- z%*=35BU-3y`-~oaoKBxX_)m7X%*_SRfvvgG1+mg_ocr(sNJbwJu>cSNN8{jxaLe$6 ztq&z`NiymV{Cnk8kK=gI)b_xpy=Bv>N*BxsJX?66DP_m^duKQ2*Y`ZZj?SSu%mlez zJU1d{H}80mS8+U3y0K^O@PNs0(~pa;OnS2#t`>SLDzAv)^H#$>y_c_fyr{eAio9qJ zpIUoCZ)euI{F*eXUJzKz9Q|ZPfQ8nTI$+@h(9~`JsE^@@ zxa^cAH(ReTEWCs(K-mg@${@*&A4>y2Dc{&PEYLCsWL}$ zyTeK~XJrK~APby5QpQiYQa9Okcve13i9awN5J%?LMC)zqE$R_BnKyi|u%;={yh3PS zvO4S5JlmJvO06j&dv0XVm=bQ-{#%#suBGfF0Rgv%$wQT2|JjJ^1Zc(!(?Ik9^kv@c z?7g=&5mc3@De_FVmx-~os1Yg{)_?R`@E08O(KQ#73@D#j@evyHIqMnWbIK-q7XL5+ za!>b{nxIHGUmj+RsKTnFvoGzJq}Ex-;Wn>hy4a4U!UJc-87BPqqqT^vISZ8{Bg^5~ zUKhpup>%u1nK1l1gQv}6IL%1W(vh%n%gj*roXY8-&2m_x%<3kSXX?gmcnsRLN>Qaf zXR6{LD1u`+obQ&z^R7;i_Sxk&-m}>z%HlM>XxN{KzeQj@MqS&#J0aLT{E5g2A9`0$ z9riu%AnUiSFMX?Iid|WQ*-;m)cCO7AtOxB~Jj}NXG_C3mO-GcU)jcz5-j5t(65a-M zklZ_Z`*Q1#s3&G;hljd`Xy5N>*FTF}Vyat>oor8aWz4S^>DOShKPq)dyQXcf$f~XD zcE@`DgPXE7qqy-Nf_QzSp#s z;O@+On%lIoH?!%18|R-NHY{+jJ??G&2CZW4Vb_|99pO867N#j8ORIyyT?N^PJj!22 zGL-XXZ1PIi^nP+*9z&c3A{bTzmj@U4vEYINtY+KutMgkiGb?|hP3k(`1+%*WCG3T> z+su(uONXQ2haKj|k2{Xe?h;h^Ue$WAhIx-K4;yEt%IgeWdnhhPMi;tDA~P%n&-W(X zoSk<^oLZK_CjWS1Tqcn`_50JsZxrRk*?-HxcA11ZMXArbi+!eE7F8ne^^z^-;U)>Y zjNgJ&6@cRzO2umPb5jO@z*lW2mw$${t|&v!41-n=8P=$ztjA}ig!pvRGaB#C%I{)- zsqOgcVCGiL&9kGXGCg)dm$9c7w;IuVaAERB*st?bY+hw$tTLSqO2rdluSL|#D=O;T z#%d}~WiBky>Gv-2M4CvuOl6ExNlKRD!7I5#P(b*5+h|~}D{HNVObbJh>}MfYRRotY z+8P-KWJCRh5@J7dpaXPt1COslsWpBs(YARcvX6Zd3*|sO;f8cPplmaZa>dEaz>n@O zNjA^O;zX#P6(q@;kHM6O&2zYVLon8;>{c+Nn$2N_%sSLGBl_lCloE)XRt4D3&Q4Ej ztB5F{Zo9(c)I(_pCU(ndYqaga(vnU~Z5=9m2LM7C@}SQJ>smjI)-4!On(48`18n*_vvyLyc2=W#d==?SO-x>-e)hiN1T=!pMXwVjJk@-MHXw>EmRLxD7d#For6!Ci&oPR zq!;gcf#Z(ER+Z}IZMYLJmW10}2On0_c}B8ORAp*TQx|W_v$%&_^i_$mVc+ct(vadd z!)m%yX&lelFBFE!WcZ6&huq}#q<$JY2vrHo*nTa`EA zIkJEJ3y1w#*4wwSY36zA={Y$$Z{92w{VI@;Cn6@MbEoyUL9|pB^78TV@$!Zw-ItG3 zH%pVy!3&23{5d&Sx@AX)DvVII+CNpr-yek1aBUno?pMFq(y7u=SZF(oAT8B;h%Z_9 z8o#31cb1CPouTEh*+pEcs;~9!1~g;&GE`5Bfq6ZbVt0ltf+`d$LF*E13ztC z8vJkCQes?s!tZKG0=8PRy3N@zQ&TDzr)iM4VqMlK9SpUjn6z~yE1)>+9hxb7nG1Js zTF8(>lm}#e2cO~a;pWt7y`^m~4Tg*U=GK*H_9p+Ei-ka7GOs8C+FZa&_Xo~NKQ9^j zl9aT|^B_#`5{cK>91T}w`<0EGgb;#}QFo5M&|`7(^6pMp=++p()vnqa($fo~4}0>P$$c zx-+#5qhdvmDbDf*`=~IxTSzzAws|c+S}8+wyf_~&VLqTBrqw1IJ^J5A5`35*^s4HA zA5k?U1T+;n5u>Uw!Vot5}mN+&I$SzZ8q6xlo-c1EGe6eVqs$-w*ovL|GV&!nD z@!ZNy;pHGJo2uI~OyT(f$=GhSR!?dbavy`c!GbEQ;&bAr=KDwLaXP6JZ8b&)$?f{| zxnxSF;TS6kc1%pf?Ld+LdwaX^a6e%dbaAKH*z3&2JGyczqvXX_=m;f;f~4!uHov%&Sl5WPPyX${B&1MK%AkY}2)G^M~Vd}v11wVpa zyVwf%U5RYaRDYNneN!wPnUaLx?e^=mbMhYT)hJrI6s&|_P;i;y&8@*gaqsuqGIh@a8Ji6DvmbsD+C zCv&03h1evBNDF_yv1gLnBDWE*;4 zg@qq$A1rBs>>b?_;P$zyD==AH)pmUj^b1vmya!8LwMl%}e;k6M@bbU2Ys+o(ii$fZ zAGmqj{OsuK&32h);ZhN2mVQLNe%b%X4SGwRTN4c>%&#4E=s5Igv>k zziuBicV%}+S`S=z*BQYzkogLk=6+F?L?U)tV~^hUAz;3U27!PW$$E@NSGIhN+& zH;m>Q`l33842OhkMPf~fB;JkMRJx5?KObf|lP23TzM8A-kD_GZuM^QTnBL!NCZuaJ z@2ED|ToE$o9{hJ3{XKgZVPvnZeGUrMELJn#CQsB%D@VE3%I6(QFrj77XV=7gszYd_ zf<{3h70k!nzUzG*DGV3f{M!fqKgV}<0LIr^aF{!D2mk*4`=9&g@!O}w@#}Pc9v(LQ zZI@Xg+z0q(;&eZp;r&z+yEjqj&&EF5wHX29DqGNU0)t6K77*o;hkW-AJ7paACa+I7 z-~3W4`LMv}LK~}N+mE}EM0|gHBtzhlWuS6vPzKh_NF3zanw5F!gI9P+7sozQS_3mB^lWt%O0wqq;GnJ;#OJ(_ zs<1Owmw0S0n_}3ml=?_V8wEnG6e$c>tvtJ(^hget#g)&ShTrCHYPX8?+d-yeaUEC4 zSkC)nD}3A5WojtX6FNBzSJx8a8PWo(JiVuu_9~-kdY0kHZg$Vuk!h|a@9m7JcP4cU zo#TM%0)Q^y7=X+7X2o&K$k{@%tFv}k7-jW68a$EA@dP+zDT4ls{RIV-br zsP^=>BanfXZ;dl}b##@kxnoqH7b0kf*t1J{yPgR|k6Exu7s_s08^7sp(3#&$+IwEP zc`ftMGwFPA$nJVnE_2vLR_TW#swl5E!|8|X)~GNEWLN=+0}O4zGp+rN&kmN$pM-ZT z%*FTz`n&sm?P=PE*cT5;z!|#W@9S}+d@Q~OPM1rEnFd1AtY_x=oF*8+EkM`AWDLl< z==@JhqxRWME+Y@4G9UuN2Gs)3ay8bt1vb7M?%ul>rF}j(DY{6lt6-|do#njn>2c|j z`Mzs7MLl@8BS`WD<7$7Hgoys>;QfNJPlgE06hQEZ#2bZ6hfAlh^BS-vpuX^(Oc+9q z;`;Z@{V^f)Q#vR#D7{48obdsBm~?n5_zb=)rBP8u-8daI6*$o~7VxChsRd5$=?^c; zh29}zw{PQvpa`vd{x8jI{+QkLkQmA-#MawV%9;87`0=YyLO}a;u&dzWF3&4C;3RH% z(A*r1e=Wqax3kMnC@>dDeaF&n{Do#@=WS>YJ4!1T3E>ifr5V^mu{z1dXxOhu<$-``b!{uM@Cck0K0XD*44 zyQUV!5S#}YX6h!hSJA1!)RuE7Gle6kPmxz>av=%YRUe4W$i<7`AHFwcd`4rejBHH}tPQ z*r0#G#$izSSbqXLqVs|NL=%F^*UkvF^!~F&P;U{dLVpHx&^{#Ss#a%RaTDgm)gdBp z)E*if&1?*xLXLhS zn#wry>Nsh6nKKo1K4NtZ4LT{g8d^(wI{Dx)!6yjbDTyfpEH-UqMf6lo;8h`sbhrX9Kh^Sp5&60Wz=&&I z1ZvH_3XhL3%WDIFM&>~P4D3c>)#PRleyUVQxn6X0Aaf5YcjI;geXtC~x&9!cj{f|q zU{C#W{}tY$VKx+*yc&-A>Md`ogzv8h>-gP!C;~0)5J$TAAH+z>)DfqI>VKcozmH5v z7iV~EjF^z{>T2QU3K(sOJ$h8+3>DHPYhiZH3VjMNmvvLkv98zNvV;bTiymD%6VEQd zBUXAMj$b^VUcna7Ceu3=|4x70&nNr>7|(tLK%uv7pe%Y_(*Lv}VB$5F90->loN9Z+ z`uN$WamG{utRZMuj-L6Sc-7~>f|$0pd)KJTX^EpaCIZ%qgv8t>hJ3l53_gu*+3{mbcN2y9eS=EY7qZj(Dh91Ta3tXvnDXh08@W(xPV7R6u(Z~${XXq z9EFs)9*mMW+x#pYA8V%7P1Gt9^KtLTwiLt6{QUgPObaLyL1vJvo_)3?$!8ysE;&(p zs$jZsIV$9IGZQLJ{McAal6;xuc(%NRpF51>9+Z8_`O;+D5+e&o23*~@_qK~c7Yyz?1SJ6OdtLfQx>2aQA}^27RaiTbm1~z z7j;XdKKQ<{u<-qRFAZ&mUQMryJ>16u5e+5N)5K(8By+|w%a_7T@>Kf&==#dADAzXH zEus>NfHWu#GBhY10@6qhFqFX1(%mVY5<^JG&>%y1NH>Dg-QAt%#U0=NzH^S3f4r_? zoOyYkJJwqFy1PSipGM#-=NGa*0ic6)A6sZ7fJ=;o7b*G~h+*scp>gn~;6t@Nq1zFQ zWrqi>QKfDSGQ`rCM);Iytk9sKXL0vGU?l67rhr9>848hjg22RDXhY27Nq=g8;9zGb z!LSU^M-!$Hl2l}gO~_^8e~KHgBcYSA7)#*EH&W8JydFg}0}x*G*EA(`8F8IVbe!$J zs&BiOPaYA*o8=Wsr|PRsh^wm%i@S`1+C_>oO@9r1D=+}y)`<^H63Ug*(r!4k*wO~w zj@v7#Dx|F8vsUv78V##Q#c#PO56uIs1O`bD)xhE3JQP~ zQT8i&an5W70AEU@Qq%Ei1^DH&2a_)@#H^Ss`)z+yfj2a~Ojn=yMua{g_zZUdUxjAj z8z+KO1-?o7v<<~gc|vgIa0o+co`fPT{lCNcKe2sHzw4&i3X= zMX|PBQIRH+ZBW>!c+_`Ljjf}0Qll=~{F2^qHdnVUZ@ z!cVnrB{YMU#-8yvw+K8uvrkAo&eZZkUV>rJ=+7yLxl_!zZ0M3aA64;CAiRH(R3`=D zk@fi}eeX(y%Bi+_2siyyLf@wg#J(E#1J4+!^jBHaC$u@`SxfqB`mRMTrA!OX6Y`6eQJ-)M21;-zQ15BOuJnv$^{4OPMV}2B@z9$pSteo)rZ~!DU=#Zbax$ z`3=kWE8&Ser%yS8f=Giz@B6T^k5+!v6gWoH$TA>?ti?V7krm`VT26S6deCEo;!DpiQ9SCfyt_ z%S6?C&;Q7^?U8r@l`Uv&3Pe)oO%Acm5)&9g*3ymsHTF=YYqp! z7qDnrIc#ZQ{!meLKq^oT_HxAto=d{(@Dw*GuoaR~_+5cUj10mEGdT1?TSEs)R?UCk z50&J_1(S&}0E76-dU^TZFN9|m7O)=ELKl^!d|C2Lox?GQSb$q(g}jUcSMw$mSU5`&*0ZsJdQK(jn>h$OgR5cwN4_axz+z2 zf5u-UyUhu@9IpevIRLbI{jIKir`7S)L*jtL>~AdKdbe@zdZR(R-gDnbpmZsv%D&;O za##Dht@v&yx~}m$PfPo9eSq2BY%Ri5XTCo!3y5aoVqyeuSy>Toe7Pio9wg}(7Z-p! zLEBbx>t=8JX1wmo<0j|S?N;QW;LU<4%=0);tLb6b2X_!wQnPtSRyi zo0CI8f+q_v9h)kSQZ(w?E|@)_Yl9y8or5>)1Eh6TcOUR`6o5NqV1Zl_1qmnNra)-A zN*3f^cgXGCe0Tqh-Ro+xWq2#RjW5{vqG)iA)2h{gFzNa8=iibDK z=%iD0p!v(1h~4W0*C#ychg`Hpy;pLtRvv+t3G8PK%t>ns_M*?s?)p;^rVNsy2B#4M zH6icP&T5`x*j26)+8-`=-w*f2m_A+W41f6os;@LUE^ZJuqpGRbU5~=5ViTaG8`k3O z-Oa5!8V%&|zTO%45NBr%I_A`IQ3jjFl8(xXaYz?nu?*?fCxvY>nfr~??rvPINkXII ze5FW2a#>1jZoBcIkw?HrMl3G+iDFjA-MAwC?vOSL0A9)X-kdeq!vk72kYsSgBh_uR z@`N3U9)6dKt$+IL*-JjB{TKvz(;^8kIq1L7&EJr&)$WTS6j-wu#k}(?)#cN@xzr>u zfq%DF5xuu$P+a>30W*MS_6SU7AnPYnaqDAi zK=Y2$b_hihSRY3Za?7^U3WH$5oysRF7q5n#3RQk5xh>guk7AmgrO4PG^TzqCfh5hm zS%Fri{WK8Zrl!cb7R#$+lk^?bRhqF?$!|p?JhASlz6k zo6+8kY>&1tk_wE)f-sj}x zJSP?4npbW=_i9kGuF5A#SPK|UYCAuc*g4z z1pjQc>mt3jwnyr=XRcLEfv38;pdsd=nHAj zD(ca>nR(DN%O=EU2#{;m@OMew?jj&iAhu@scqZvcLJ??f@BQkhk1C6|mLNRIcdv+1 zupjb2`^-P#Sk3&k`iN1s9ZSToo(e$9ztCKDL!v+pFQf3KpQ0A#+Kg0ASx!2PF}`d% zIl@O}rO`H|dK4`N6#{Q6X4sr*@P2E`*y&d-KXG`+K;KsB_{(yy6pP&M>H{GDpPjsz zYH~VgpoX@wad3!zY^;PQPss$7`E1!f{PO!LZ zCrgJ1)hoJWdYH~i=yy!v6dr9kU(_V&GNbt6)M_^1=~!5~Ubh$_%uKCu0N!k1c7bpK z|I`0+JwY)>0ZN&AZ{+2P1Q{~5xY!lxOGigXZGe;oJeLCi*_ilRON$WGR|PtDB1CCN zf1NY~v^St6N}$(uD3kchA97Bd^M!U&{}ht|w?=|&7yGY&{}~9pZD9bIKi?SpEBlJa&e+L`0G1MdDcAJv4yak|CPj4{5@N(>zOI2@+0Z$d^MdS62J@@W2-0kp zCHf&BJ#S8^5#U_lZ5OmE4J6W<;LKHeIal(XUUGkB~k)1W@_Aep~r(@zDk@s{%9KzvJXNQ z3hgk@%*^bn*@TiicK3RSGQ6@-vbarQ)24d>w!$_=8OxyIB<;v?y?izpaoqPe{^XW zqGyo^xQPszY;0@*>R-P$$`pqmO@Vx1GUG}|xAQ!@bmt>TxzD4%!_dg6MbSPi(j6lR zt!>s_8h;I)yFDnNDh3f=ndT#Rs$_ zyHizrfaf>MSklPGam`C^eDL7TA8%_{?$ONHwM_9re58~qMGMf`KwG5BU@3kl~+&5Emy(DDmeaC5CiX+Yb4TN?BpO4w?9hiSr}Wg5!2= zr8kODa4f4ovtGBiNXK=!sEMYcp&MjJX}k8e?ia%VxVW2xge@)?%2*u>b3A zUm(>Jl!W>PJp<+$omYTSDI($}M?{UT_LZEQj*gM`l8)uW%7$JK&70F*hS525!Iz$C zot4i4xZJqDWNvb|rGuZB=xo>Q5-z8`Z>l~0xm7sb3dkCO9c*N$L&9Siz`Wl3SJz{U z1aNANp6Z=pXqGfs2b|~$&UmKPr8m*?j*qYmHRMu=JDOXLS2QSqnI?Z6OQ+V(s|qv` z)8+ytl~2NwCfNA>%6!XbAlCl`3ceHey{#r4*VgdH$C@WgHFZKrgxho;>Bs>Nr*C!e zG2W01;o$Fls&z7AM_g~>n*pV~Gy@k7?s62!vbJ!i>_NNZ>=aA)EN@*8p*=a#juuC5_WPf9`? z-yc3`1Zs{yzkMFRGG}$6ftaldBoYc#?nUd__)cf6F2a z3*AjWEE0=V9SU7u>71Q={)8s9^>%mrouh~#{Kd<(Z3NYm8MG{7nl}Bgo5M8+c4crp zN83I#pu{Mc<}IzUhXhim4wCZNtplrFJxI`{(M1aS)T5W&R#vvoFtc?JJwx?-BS#orZMBs)Mh>@I=X z{-%xW#NwLOua5OgF9mOx1P4wQ*eo@TUhs+(u~ixA#%&Fj0s78ftVauNb?V%6DErH2 zZs=-De~RF}kD|OD7yU(o%=1xvVPCb^3nwbG=l^WMvU;c2=Y0~>e8!;{exO&T7RNgG zW|efhcYTZXEGJZrWwow@gwr2Cb4&y&RgT~YP4F*rWuA}fOYh3!-UFwj6?0DQ2I}b3 zVH0Lp={K6{JNW~?V4G;(kZtnt;ba9>?di)c?ddW{@fY937#J9m_?#6VUo;AGb4#KF z+ao4jMqoS2%3SLG!PqIfDl{;TT;QUdZWEfJwPL2WwzjfKfdd0)Oqom?bhRb@B1g|H zw>>db*$1s~G{6@X%)1k1t@!}%*$KLEOM$#!nan~%;ai&McQQ-}`~2#ToT06-Crz0= zHZl^6FafNF-HVMoEpc`j^>APjqApL)jHy8rOZ<{mv2{A0LX7IwUGEJ38NXhHGmVM~ ztRCQiBO)RIL;Rx-b3mv8$nn$x8L(@c51O|Iu9*4}pVU^+l5$^}xgBd?u(#8BSn8z4 zTfFy6^)UqmpV0@MvO78+7_~!+YpYLy7~*=SlZh$43il7bU%HsMV5E#SXeH5?pS1+j zRM(S)1qGq98HDPFwIiH3u2fo&_Lr>7hmG4q(?f1jWnD3^`co_S;>coaYHA>lRHVVv zYLXubOu~Mo9LQXBm_+>eSjvT0*RdXk#=fTD#}f9Mu8b4Be#rla*za6r3D?5{4DYYs)Gc8gLI<*LU;>^3#@Vv5tx0HLKRTn6ux|LlJyVi zmW1jpLo+fq=GaXgXXoIM5|sMvZR{9X{2;Jj`_PZsZQ)+#o9ePj=kP1$k9%R@JNYSO zWG9@~QN4_msi+jK&v9mvwdLQm=|EcwG;5l@cb~2bD?J%!*iGaH$knui2KDb&wkqno zbJfM^r{JCjY7^`e6gSa~9VJ|>OB{nZj!Sr%iT~=rLKAFGLs_*s4DZw*28FhS*G5UD zgVV!{VCp)3LYxdG7&;YVMk)vW`8ve*{PHu2;a6|%_{2prgVy>~tQ~8q|0k;p5 z(i5qrOZ@byWb_ktyx3QZWR1;|*>E#$BZst{g@G!&n7ny60E*Pr^_DuTyd-V(AO=0% zm{uIL0;_*DW8etRwo~-O!>Fi&;QHH@8`W0*ICSxDq51}AKi~18P4LR> zRDRUW=+hUi1Ot~FTRn|0VA3I`W;QmZ@~^vyUO??AnKfD}+Vjc{sqp5fFuwwGCnnlN zy*hHIz<=BCh4YA zct^SvVp)jNuZn_sq)ZE|GG~)vFVE(Fv~I2x>Qjq^y0Bg4+PyO~bsrn8Eixbd()^|Q zeS60*W722F__&-18B1}Mfu1^x-RmJqV!L5eL$TfN6g!4$Jin6WDKYW1i>W4d zF9*J~r4b$_^I3h-*2vz>z_s%mUgtx7fz&vjx{A<0*+GCp_D4SV3#5KoN~}@pp1jF- zeD}hUeEa#Bke4Yx0lv#A(GhLO^&QOeNeoo zTkxu~=fQyzAEgMXqmfXe3$w^<|*YtU2|H#HYo|ybeN`1gZ5g+jmIKe$`8r6_=>YHyu>z;Vk{y8TUhMHUVOuG5(2EY?) zY%eE=XV&^+<1~^8dss>h^riELRPwtlF)(1DSD(Xb_D)lt*Scl{h(u0y_P!to2Ojci zaS8odC0mO2oxj59c-d?es92V=Lm_6v^w}KS7c}8qO$S}}lZ}mxp7ZnSTunrs=;I-6 z&3WojiZ$+x@ERU$YI?tBOgFZ-RQIjZ-b!5v$VS_Pq_?r*v;ccu#E2v~eGw#z>zE6! z5=(XAp(TzSEuFkU$A5fm#1Suqm<$oFT6|juggJfZLr8(O!PVe$(F8L zY+O!in(Z#gpaJL&ciDis-)&zIc0^@4Z;H{bE$7OJ0{}wtQ#u5$ zh*X^^wlw=;i6#W^IHKX!r-w6ULg#e6(DLwc52Hdw!30fIlnzg-5Lj6DE;VSoNfU@y zL-kK)YY5PVFWdwO(cKB@42=1gkZmy-nLq=f^daKwyBSMHzP<~dN$yBOa30nzd0DXo zF~U8bF==Ir=xK?N`|=hZg!#KA`Q0_GJ@?M+;F~Y@(^}|x`#edTpWCr$4O?$}?wcvo zyui~XQ@}jE)i2)Os%e+0X=}E1UqJ68L@p0Yk0>mGWvi5bp|O5ZK(FhNr-4*YYqfzc zX_M-27UNIur1|p2Jli7RopM(;S|z!k-+8~Y4;TqNNeu*5FZJS zE%ZOW*6n-I9T!^D8Q=6~wKEAh3~Ks_T(57A@Q7pWnxS6XCvf!Bs@1sYA{AMS?X*d%0Y{SeQq!E|jo3+XQk!J_4M3a1&t3RAlhGU>L zX`d_oYYa}bsq}0DEDdBR!rq@_&ehL+biSKMM@Mg;+WmZfs&6irH0Byw8fz`fHp-2i zP_7z>C4zLcIZT%=l+f+uV8-!lG|9rWJI%i0YTgsP&&+8Q(i7h3-{B8d8f}mIU=&$U zCM$&)$Asdp%6F0^NpU0!XXLeb)brnJByOu3Y1&E>TPTp@SbdO_E0bp6bs=7t`56o0 zFi_qsLQ5HmjgRw(^n5ZH{zxN2t-J=7_m$J*Xr~f|S8!8mUwKKXF??=diuHfbaFXXj zlOzdGmZI7DrAzp&n5p7Db#%`toTzLg`*9*xV8z=U&tt9AaA$C!sP7_#sEp2q<7W=> zrjmt!UX~P3IJHu6d%w3pZWq4sd{fbc$3~m@ZYiinbGKsbBd^{15P-%gZ0zLDNq#Kt z3s6&g0d>ml#W6~0aaLnU0Bdy&Amh?J-WgpD4WR~1>`oR`W+B2{41YL;fSzq+7sAM1 zKc?_~!9XMS$bxXWq#Tw@pZ8{xFzW0n!px*!f`Jv$zWpLZsfGJRK@l`qSXy~mgJ|+= zh%kWKA^R}qA9G;Z=v7wNQZdWmQu^BU=phW)Dj5vt7VdmXqZx>H#3=ZH|Bbo zcDTc3tf`H-w+iyA>qCN{QSFpQcp5E-H%GpE{juAcp|lwaOKy0E?DJM%P0!@955{0$ z?7NZ-PbwB-Fdegf-X%|jci6L}bBLj->CBqIn|HNG7uP{AXuB{X3<+>$UTuztg{Az~ zsQ_V|39Gs}zMS>iy+fJG%v|IsbfM=*dq*D+DpP=SN1NfOvFY1YG(896)@#9fF@eGG zM1uCIunmrEJ$G;o=BcROZPRW))v4+&PwxC(D)ETP(;8!K@4J!p#hN0UG?qfMF}y!P zgny8A2NWyklKd}M4@afziarHA`_>8)}5~y z(2tCagn(Q%OiJAg(Pk;OQoTiSY1=H`xBG(62Q4SeM)UPIx0}1fbm_U+3?Cu5f`(!v z89(sdwL^rj6U;u zSU&{9ET_#EGT*qnl;6O_tm4zWL7J=%EN3E?^e_b_cL<6(jar#22Rm~Euq9wPH;AtK zM%x~tWc?z2O%WC6Ll?LeMb(-iB@ST6O-xKqlB94ZGD8hwxvtlNBw5J%@e#J$5vlk!tr< z0B0lRj*fC~ zQcxrVO12#f_ECHkkWhOG*q8v~W8x*KuDd^0E4gLp#kKpjbDtbL4^O@}ldjOZ=kJ!` z;(gi-0h59?quI@@;n0G>uO*Q!$zQiEpZan}l@`H`a(Cx(7j@qOQ;S-;xlS9(8u|7W z4kll%8qII)Jg32|uAwzO4F=TiVkved|Kyn8^%wvH!3kMdekeykn?Y11Eo|63^A1t@XH@Z823^AX%e;M?Yi*>n-<$b{dCvh?Ba< zjE(0~1t3DGHF`Ef8BKp^{r9yixj@~2Z<)x-8(O0?1I=U4?j&GhBJ(CO9Caz+%pQzK z4?`WDJgU8nmh)M9BLhbB2VFY8g;3j3yTW+v6KYpyT!&Q~nl?&% z*%ElDN_cXF$;SCD%i5fNfmF!xkRq-0J5=b|sBuj+6i0uJz16ZYxy*OfU~0@|ik5`e z+x2`=%LiJG()hR(29U|vNOf2!C0L`q*RU+?>J)6FGV`bsmh|fg5BJ@RV{OkDs^W& zJ|)$-{BLD*t1UrvZEkaMu<42li!{4N%+i;O!X=3Jcv=Wik7_oUl=;r);pvQ);|{OJ z)Ra<6@<*N(gRO14iJ$Qn7BZfz?xzi;g$SSr82ux{5_*V9d!oNVVw(PE`>}@MJ)o z)DPHIg^~t0UWMJqKmUvPZH~#}lKLA9xRCK0L&6~8`faugFzK4_3f?bJS1$i}f7EgF z`3%7P0O72JY+`L+Qt)JrgicMoQ%CKzE`K&M$0Kh*5CG%>fc$o^C|j|Q{Dtx3_P<#r zooGynZ%2GJ`-oX=?3M`ytfIFJW3H3-zgBB2%_RyQaZGu2PkxVk0Wu3IFH-|e-QE=& zuFb7J#STuUfbNmZD4imWQ-itS5rKdEVKMci$PQ@)Gh+J#PE1FzQW&@6rb zXwVQ2$_r(UOYq++{m}0eHQvf1Oqq|1{-jV1*JZLh;AdP|d;T_ik?Joa;%Ly&=RW@3 z9clvvLG~ALP~jb9U=@nWnn)SF%6SDdoWiv~QA283kC0?QpoRayhN`sBGz}D%z!BA< z%nArb8YRm<Y zyG^RlWXS7*WRihs(DvehRfZPOM*Y4fvY30@CE76W7m(qM@{3@1Y;j4CbADF za3=0nNA|WlX&nH;1i*nP{x#KIfc&P|HvV1fYG{$kO^()Dib-Js1~y+mL>1Nkzs8yX zY9Hmn-2M3I-d)_?p*A2?xC1=9EWfC2yy-z*za_$&_bYgNm}L=*9r($t`{Uc%LTlUg zN~xUU8VLAR(JzXJQR4I(%f>|x+%7Z*aHEf>PJr!31gT(3TU}IbJ%hMh!gJiW)FnbF zP8Pfk-PP$Sp&v%!qSF7$ElGqAQbapC3IYJh!b+c;>PvSHqSgvb@@oS#Mw|hA(#!g7 z&B2n68~}L}qaqud$Xd3JH#N}H(_{Ow_03p1r`~Q-+PUNCsW^hg?u<2{W0v@(#7wLo z8ORsQVD`CK#7j=v+n;?NnJm2cwN(&;!J6aHHRptK{3dOm(Oq-<(WZu*ME)%m|9Qbs z83MJnpY8kF;BNem=Px;E@5W_rzFklAg$ZF24!Z2~eg0*jcyKdUeri^LkK3xCHzS6H zrGQ1RDuhv_Ih*RV@|OKlyZ<~B{fL`LL02WT!UF`Yfy#v#aUvH@+%ma=LeVleLFn9` zm+f(Vwvnn0QFIBuPW8AHliEd+Y{4AmPkP4PlZS^2vku*} zc?2|gV$xur=3P9rA8pHa)pr_(hfQC{p5tG?gX(g{N;z{}*(;Y>QZei52TeS}j0G3w zzEMZ@Mf0;VbNf!>G$eDK&h1i<>6`JrkjxA7F=F|`rhV5C>A288D74?h89=?gcN5r>GPPEwHr-+omXjO_feccDwMvM|wDh$-W%;m5cR} zJL&1VM~j}EnVzqnM&Jfg>r1>RI}U(=47z%armv{+@bEBKAnP0;o|d zt`z)zXtq!jB}16J)Ieu1EH;>N#n_nm^J2P{g@x|9AAV=!-Ouwj{g#=25}VhdRtAi0 z3cgDj_BC=n5gCCCk7^(N0%M2SwW0}evGa0XPao;Y?W86pVH5_VK6ITbZy4bT73QPS zk5xtWq0T5Z?G@(YXXmZIYhJ&7I5JY^*L;bOODqxC69u8lVqrUOD-39M!9bdVI<^L4 zmx+sTnHoTK3VVorj_e8+k-ctutY*9h%x|lllg{#K{=}nH&7tYU@ zyGE|WJ@$vEuaS1}a9Uf96CfGJxFD1Z4;CH{fy1Bdl*~;$OA3Qiyx1%d^7NZ`Q& zf{>uw*Z&A#xzTabe+pap9ALwp>R>8F_k{(Gl4GG95(^I2CiN!mtEJ}ERhZoM=U5iT zTs`u8A=0X{vX8Z?LZKPjJ{&TRcO(4)%%x7Y`A##)HagUg=OxQ3pgqC_(MBYb6{F$O zM?$(Npx@=)#GG^nVhC_mzS2vJi%fZopmX1?BbHj__-$>B<4Kfr<5@~Iez*gRD#-*na^?7Vj!518GSV>l|V>C=SM-a z!5+kcFge4i_0iMUB3Gl~xm0B(CGx>yo*-||7_Z>}@1%uyKfW%ot4#ZLMY|`F+M@Ad zl|?f;0)N_##I9ov^?`d?+a&E*(*p=&6G`xg%eFeOQ(H@}4p_xl2pUZuHdAntiA{*#_Dx*N># zDFoXo^FD;XuwQHDees+}5AkOye$Fp94{=3fS zc`;9pFCAP0^cA^NdodEuc`>Re8DtEz_8(@{TV{J?;7&Oi^)vU; zf(z$zbE9I?QiLCUN(l%)S>jtN!W<{W^Dz!WtMd-@cb?0G=(ORoy${4vVC8jUCZtfr z4e)4L^>Z;p1eeDc`bc?0@M3cbu2q#;sR@&i9~l}bC#gtClcPvmQ2PdIg`U>$fe#;T zdXUR>VEZXxiosnEsRN;Ee~6No!;9vXHq(!~Eq;u*qX|i1wng=-DkE%ZpNo!lcuWN9 z&K;qpC(|l{aFpAMj3sAcC3O6R1Me>UNDRnJ*wZ67G@$80X?W;3^eNX2$iQ3s3BQL! z9{)7WUp^85ISV#>0xx68f1gWW7mIlmYE(!r3e#nruUzF z7Vr=#OT96piO#z=M9o-(s+(=AynPH+es10@hHCUsRwk!>_MR@>`T)5}rAD%~wcT?W ztBZp26$29hB7EWZexVkhK3xK!&j=ui)qk>?xUTzkBL7c<{a#>f`Nsp;|7ecaIK72+ zETN}xhWFqsIAoaOOz{bvH*tb7p`nJm^Mn>qcP?}^&OfhwyFn>M~`prXLWzIVy(4#4D6OBwy zGg&{eBn@=a7kYtPX3Dus@=`=ve$|BtdX*o6cNt%lPzz>m@Lfwl=RwMCiKdYPvE+3G z0gF*mIwB?Nx;t-aM0|2(+Fh7lmY$G-N;u32VGfx-+mA(YOCuObrLE0clG%jx9aZ7j zVtzwC%F>O9BP`4ILmW_S;;}vr^~1QgfqqyT7YUZ3$z^u2h<3>Lc8BnubTWOZ72pF( z7=gKhMRV@3oM2@m|AWZ=JybTYNtt#4WJJst#>U3LSUoTcKXr9^c`Q3g5TY_5d5@=8 z$k2~nBBUbTbkK+!aM~sQgv-48FuG!_nZjkgSV1&ZU{PRQB6TEGrTogO{|Wt+>Qt$U z$ES_OyYqvkFExO7vWAAnqpvY@}*hCv1UJN zvB$ZP`KppX39LjcTYPcMS8&k;IH;qqUXKCCh-Nh^%!E&==J`$E2BB!+PcJYfQn0!& zY2s^T0j3Hd*HBTrC>inFN|uk|{1X)ROswN|Usenaq)glEqS1wx>!#w+E3FU2%mo91 zOK7r(&pZ^MG= zyLdzZ+N0GaFoB}t!NXOx;1CRG>&kb5&Kx7eDXU_;i`DR{%8 zv4s$mBBMhzg#bhSGio74P-mR5Jg?7)=hn% z0R&F^!30E{zAFa|KeFSQbYV{u&5c1ExquhYSobskd+5{QORvB2p##wo+Yh zZvT|@dj1KZKc`RhM<%z1y&RsgO?-F3Sh?mxl#wEwf<^^xbRVpW&TwG z{*85)Fd<(z&(iJUQwXBm2(R}R7l{jmS%(x!OCuO&FEvXX!T8(!L#K={;JgXFIqGS| z#b$(RLB9%EdS+rsGjM->L4Yh)!Q0E9yI|>zJJ%vfF`K(z%tO~Tbu4_FEp#$pBNr&> z##EG${aEPPWjct+u=-re@NshQ)l=*wEGzA zVf&}{DEXl6FHxSG1Q;QeNVwt*QvR4@1{jZsrEy`xq3F1M{SUOJEJPqC42a-oJr`{v z!}})BP|ehEp{Q~75#$){32VmQ75vfC^i)y@H{}dV;yjLQ@g-Gs|L+ zCJ=KBO8P8H~p@$1?ZX!^x&M;!5sMBZ;inkX{jhdM8 zMXO8Cm0v8XMB}FfOL=G-7bpUjj=e%$h+x&rhp|@jXXq=S_SlRsyy}JGHn}+Hbq-SR z$tSGy!tH}`3$XF_de880SSr_RbZF-{1;U^fW0k$d%BZb@^yrel+HB#&jOEox zy!rA!(L~GT(|jgGDkJzob*DE}3@o*{XbL3KhuPP!OG6%zLs0`CsR~ia5`2G`inqmL zgKI6Fd?DXsu^yM9Cqclbkw^rxW~hXY5mG$1&-T3-U=-05)eMrmx_w~c2q#g`C?yE7 zH<_usGp=S{W=WFDmPet+yv9$8mFtDVYthuc)UZ;8>PhB~gLts+RI?WGaZ#V4AGObX zIR%z}T^o~=t{%R}$BqfffH?J9w98(K{HxBfeEs0|&G*?My59puMiE}1zt1AX7D-dD zb#$5$!#YGEC`^lCc19isOffxon}2w>sC|u|pgh6HJ^AYwtXqFMH+GHqzMePiIUgDt zQk@YqVDEQLUPBA}R4}_?u>)xg$sg17z0h6oL`{sJL zUGZ~oS2@Ej=E5#S^#Dx=z#QY2<#8kz{x^T{Po$|q!9fESb2MRgKO6F}t{PvrILv0k z!*xWDY)G%MyQ|vkVB;%vCzU^VywyDW^n>S}4ER$ojxw4Gd|t{E5lYL9@a=8K7Bj0j zbV7sqD4&^osl2wNQ^*tA1|uYJ6fZ>w&+%K$f8^(X!4fPnDPn|LPUIw>$JtPW1b$3Z z>l3LU(e~zA;pnjmNE@)C(d?DrXpC3TAjTi56k{(g;;uKJ(Zwq{~EGMLni``Jt%rAHI;$v9v&=m1zAz2)TW zWK`$=hO!>Ev<0*HsMXxY3mcDORFsPa4CG)t07@)k5iPP|SG#*XOGfsZ1O`loIZwdY zp0?5#S1(S@-Eyql@2>@f;_kqPHuwFOC(mE;y?&X6{FdfKo%&^ox_E^aDi@Neij&0) z$71!%*Md`a*t!!BI)8ZG)hcewqESKV%b-_dt4@fW)OCp4;2U=n^#re*~k zY>89e9Y#z&6I4r1yFVytMBX1}RGf?6sb^7@$HvAcBoKne^#)}g3;Ft`-#m3y2TV#j zuZNhs7{@HCboRj6S{6-}FkyY(^Ie)%B>vWVOTh#FJ#pt$m*c~9?)so)f_}fqmg;l= zAIALW5)j%(`wB4p=OTuhW#dkLF2&B9MmMJe#f2ebf#6W~_uF%Z2&n-_Su|yE5%ZEgFO9|CK- z$1iBX+r@)?FIL$v4!2+6t5kNN#S*0JaKsw~Dl3tH0#j^pykn*E<+@(JP(-1W#WMm^ zeDA&rm&=P$kkDyNMaj~+8BrtR{_1E1-{U&>sJ08k@*9tW9C|49b|$`!qiL!|!)~;< zXgx4Dn%aT4sS*17mMl-_5NE37eou0z?ed?}O#MKG;PBYlu@iX~z!O+y_k2 z29SE31AAj<0Xq0@v8OU_+5yn)JJs@CYPxK|EsMr2)EuN8;=;RQ)$KRv;Kz}d32}=b zdVaaM_G--90H$H>dvRV*b?Efaedh1YO#%7E!Zom6%yKlbnbR{?{*hhDnoeo zqlXS@v;QCJJ19H7m0s;wSP|iySGS_*~r1jP6v8tyEE;{ z!K5VpYruiE6dSxspVpV729B+uog;UE0Iq2zHSG>yhgGJh?dE>^D>KBBg@Ev^*FNL* zT0l)bJ4hh2t?hHsw|54+6}~@`;w-fzWT%D)}!)DSxPpg{+Fy%WWAO0q2Ad#mj3Ty&wvxq)S>#K_0gC8_S5v zi)9o+(!=V5y`J*J@*|TMU28{x+59E2P&nj%gQGLBXXl=yI0v@70&~I< zG?ksPGX%H=0lH2A2W|;Ao74P%AE~R+s>YM;vcbnfnC#9w6=RFF;56SK;y^=>xnEjL z0yi@=)353?R#ieW3iGO8uyL*dEawEO7)SbF?wMLzYG)5hmB$hm2mCY6<2^z#PxzT| zhJ)jQ`=@&ELrS?Jjv-$=P-2|dzH@rV2WI2U=r63uEw^HzZxqwpR`I@H_~{rnvH(t;$#xNd+rJyM#1V`)BZW&T5F%FnMuQT{lm_djkP{GIE0i zG$6RX^H+npv7%WA7CdT-$JZES9-Y9&h3K-|wj7(?d$&bl$Q<6Ar}zo``t7=kere9n zd+*fx{*Bu3I#{?HeIe~+K2sDZZd}UcyYVR)^01@uv1|3eOM~}A+tqDXOc|VV#ZDhq zJw|C$*FU@vg$_*F02cuT*;t!diJMC!0bfO38JE_GU6?F>TQL|7OZN!9(0kuBf=R7A ziP?|ryDwy8id2(wuu0>*@O)32Q7SI| z(N|l`HCQt2*(uWJL8F;s-H) zgSz|IxPgyTpPS|_AB8yQfz?t7$d}!D8awS)Ma7kgfuz)y!36Qv(6vQ`;}P zfbHY@_4&d5jke(h^#wrMFF)6vtr~#ycUn;3sp&~Ve*xmrR^{2+o;tMI!%^H6O4q>u6scAu*qC0h59t#I)hEEkq#;8(Md~EmrB3y8{Lrc3HUkM+-6N=aA0(!t}Zbo7wN-4>}Fz=*F}cg{NGrBtor{W4~>R zkrCJH5x47|)29a!p4ZW-*UOFWSNbUTLw1*Wa_*ZWskg^Q9NisYJ&gjoPK>)~B z%a0#F79K0APgy7)nvng{(|+d(KicmHg*A5{#Q3_<)kkTIo`io?%{e(cqJnM5;XjlZ)@&{CtzBUOVlt|El; z7D{kQI}+kricrLBr#WjpS^m>^0Qdk+SjU}Q#GCzKi955tAbYaMd-j?qO$zOkk8N=G zv_M^RtU5gpo{v+@p$FD@UPNxNPQKMP)@E{|r2gj)M% z&e*B3Y5*L7R#M<=Gn&+Jq-O${_r3YUnkk(0kq~LmEJf7Ig6??7 zC;(=Jm{e>p14FX_#-Ej)9k3z12mBDQ3rvLV-L>p(;yKS&Nq1Khrel7a%txO0}zN8W6w0S{Z@3XXRUb(G+>dv_S9 zB@d19g0yr+_QZf%|J05v;drZyJ6;IB>-P~IH*?aT77bJ4e4(vVv76Ghd?Tb03A>u|rsg-e9P;Pf~$~hDP6WM?$&w^5V1v5HNv>-@_`qId97Y`@&loP|;eFdG^!?<4YASg&S#@mc%!h=uXmGRR9PTaHfC} z44^#S(%150JStSu5}_t-SVla(ahcnSDumt85OIuQS#BE%{j%%5kFBV{>aNy}&@RO9Ynaw2)5e_In^CfUUm&!o;0YFZxiUd%{Mjuq1kr7Z4}n_?AYkhoz_mF zFOf}g{1l8dNKgz@etzo|3%vYIaZ&<`nPJfG|21?uvd z-k}$a+tw__rJdHKoi2e}*5{bza_Ks@08Uj0-b-1%*=fFPjpT}dc8x=L?eHS^}42+EAmz;ox#xg({n1@`u6ucGNX}9f z4APn16xb}bdC{c=a&@8&uFE5VOdohOFR-_;Kabl62a3|M1b&CZ*AXrLk>kHG?&57M zu^rKBsI+}yb;86SuWcA>(xc9XFp;}(rNnZPm#@fuk8j8_ZpU{}v^GhQ5q`1Or}2yi z)Ao^f3fWn3Vo>OQe<s351Y@UUAqiJEtli1FfgOLfG|u)G}iG8qYAPj^|NfX@!I-Un$1>>b}Vo4w zmh0!Pv$ZP0@vGfMx|za$J5JBIH&9`Y!k#n87$EW#q$4Qz>eEj@Ft51sGCM7KeTCN%ROnXxa zAoI=CBb&Z-PjQnoE-Ix%q)lzpb9dj>G4baO4h~XO^?W-n$WB_#)718bM>ZwHD8R)$ zceZsjCunVVA(;()w-8UM-%vMj)~oo%O+qmdcgR~ul>#2{C@H~O7t|K&aYF0ge*li6 z)UCRbFlZ|R*JKZX(f8_%Aw3^|&Uzd##mn-6Q|54E!V#!-&5PvmoKW?mFgQJa87Ri5 zt72YUczjcAv}ha^12{;qMcdq?J}9gEwNpbwQSZ>6oNhfVh%N^qEg-BT-~A{L0im$_ z+N~is+4g8PUS~!;_vhOZGB^c~W#z0*QRCu{Wv%W;_j)t8c3UXLM(S}u>u<}Rgl9W+ zL#3nh&f!6a6zQBWCfn}p+#HKJb=@=AyResA{~PZAbkqE5@-2((d4GhA) z4h(z)Y|R!s@4pySF>`VQGGpUTxE)Y)%EW35(EEh0>0h)yTXpyzTX{DAOLF{Gy6Ag~ z_AnY;paqnri}GUy#Q7h8&skY>p&{c5R7NUi>Rer2Tn3Miq_;{MIL}&|Yl1CLk@sUb zWMQX|(S|O*`wKsb=4XrM=VFYjLdMjH(c)uaGkIg_^AS$4+8^I0@>%G0C<5%h`7hq17uH74xPrnZ<3AK0cYi7SP3t`F9c-b>Tv3X*Nt*=ErS&n2G#H1Co_&?Dg>VY6t z4r>}7qd!$t#D);2e_WNfyK^O1zAZZDudHt7DHmjLlX)g#Bl0qYnjD!#)$B)8Wt$<86#_n%MDw;EUt*o`Gd2L zYFh@;3XvU$CwH%R5L|4{4@jj}ZpVV=fa)JDcR(edciousDai1H!z~TVWKB7e`u>5` zj(Lr~vJ=n3S46BraR(j?-v#&_h(d>Ax3MLcM z*GirQ^%_SA(jdzQf1ZPBzTn{CsHi9a$iqT%J^YqB9068-@V!bT8Pf$A6=L=%7nid; zzTNmBZu_0o?{y2%sUjjP{|aP(>!x33W!Q~O3mee#pw0ri!tacv8l$U8R;>fm_`IQg0El4r4 z-o^9SV$tg|1xU3*R91I1viEInDVeTXl%tO=x!c)9m$^aZ9Ni!Qe4F>Df_WA7u%Vm( zTVnb1x-m3{e9`({OXHFKW#e~!pE_Rm>VklQo6O>YMEVp(6`%^upI)4uo$c@MgIP#C zA_-o8evd17uvOJ#8SB?GaTYua53xw|$Ms9bu~L!pCJgT#>3GeLM6fjqIOAXMiY7}J zT=5FcU%#xsv)B8fH6qr0OI{EhbfvcF!>HeR!d{3-Y*-wvZduY<0jE}cruLtwbJHXw zQfjiBeTmDGpbZ>8;4}q~9JuFclXz-sb`t;A0-W~eb7W~A_MJ&L`o znj>*<&jbFr0dSBhwOb$S(fBHL*w4;2=I(y^mKh-+=xfflqrn)}lpNAZ*V=IM<9oSm z@O-68fCzrDpwMB^=Q}7yNK!Jh;R3G~A5sDVx#KRAFD;HEc7u}c4UDm^tIm>T6w{=V z>ho>_6u9Pn3$AB<^zAlp>NhwX6RxTnQ?KQRH7?eQ0KrIvy2-W9VsR=c8yjNP)nLo_ zc5$>M27pD4ThQWHMU$J!d*b&@`03qb23sUc@vw1M`Z;xG3(?a z>k$!xC;P2bv^`;ZA7eOfP({xrlNE@n!Mkum`w7(G#a*@%f&h$2R#_S=xuE&P5edfRq~YfZ z!OG3R$sii_j)Fl;fL0w^6D~hlf3_(c24d;ESp0l^z~n%5*KaC;a1%8^lJum#PWzWT zB%LoOZIc*V<+ANaI%GTxJ$kHVe>+nCt$0f1)xt7#Mz5&)^^fZ~UuB3YD{&`ueLmY3 zPZZm{AJ$R7it_T|qt#JkgtqlN?Q%4)<~o2iaFx$#6&PH$yO>BjpJ;R-uKTb7$|cNV zt*P$Ii9Y8gm(E40IRh6ZxKo!}z>jX~q9kPVvUvRBv(}vVn9Zdk;#9Eeyw2z6HV78b zHFbAG`mWrme$KegeXIOgy&0!tJC97Lj`$Nc2r~pT_Wb|H9_69M7zXR}=g;lQ4+U*r z_`M)=xj6sXp62C#v*5sJ@0NaIGbnW&k~Rnfp~um(qM*PE6s`gG^FyTl{FPj3X!x$C zCQ&Ht++dEh15-mb0MoGdb*gcU1QGzFfklXb8mC&dnsgen!w)^MJ5A6@MGcr|C=!L{ zN;8J(@uC{f+Pe}6_kag*0mV(Zjblyo%Y}7W1b}&?JlE^Kof@Pz!`$g+sY_|(OXC)ZaLI8JSu)E7!|E$ydPE1DyD(e)fN{KaC}xn8K;l~3~hRF0ZQx% zC+B@SV@+bfkL)*917=Y81%(1}R|xX$xe6;rjVMRoJPqx{+s3?^GRzvGgsdpH@bs3N zegVzmvS<*x8un=M@~vi~Ig(_?x%=mZDd_wsnEvaiQ%A43@{<5La`Gp1fF^USndW`; zF7Q1%**m+qKUyYO^~K#!r{?qx3|J6~!sq)@lu}v6OQ7kk#&JaoxTs$ltfx6l(N4Rp zq_}c%aTOO7^J$`)OTQcoMh!W(h-~b)ujQIzd?)|+WAyz%{m$n@F_Yq-!$UmO*GSw@ zsxG1Yo$>QGp8{K=(f<#&dyoH{&+Z8MhSmSU>|U<~Z1+wZxj$rU!f(?!Sj_tXXgB%Q ztp>2&CtF889`+a>-*?!;V9ITu=iLhin{dQWrd?HeqA;owaAlO6e?;8B0|hYoyH8Es z>U00}7Xqo)-C#fp#|*syGQmHaw)YfouN@t})%k>KLP7HTa;r01*MP0O{fc0<~AIk_T=h zK+pCW{iwdYt{8ScpsB#>gBGWRO(sG zkg|3J;;_)k+;!J8@8O+yRQSsG?c_*sFO^!dQo6x$j;{`5;LSsO@+J5_jU-QoXcrvO zj7@V9L!I&0)b_8)#_c+$o87xg80a^*zm4_+{&$^2!O+%r>r1+r!Ev`Hm`JX!tb{yz zv1CIXThV`$3M@e$51D!AARW7p2hp<3^T;H?*8S0fUGfzx85~aqMD?Np-Fx|{0;qoW&L~$tc_9uI9Z||u}8&HWhm9pA& zILGC`cO?kZX!O`<@k8M1$bp9_Kt4pF;U0@vVp-t6;AwU z!0gskZ@$bAl3}dTed7z_799WleES2Br91*`99s*ETs2TZ5_(SG`n{K~yV~nGq*Vnu z&W_3&vMgRKLEaWMjfsUTX{qaX3RRYtHnnP`5~yiN+{GLvWGK&vjlg*fGzuu(wU7Y9 ztg4NNV&4E+)qj4{->KAZeN02{U0&YmRsRQp_a!j5X2tNsix_$X;FwpH_Cn1*x94cM z+iI=A62Z21_5GFqCpfQnr@lG(jma@K%^Uc?g{t*PYp!BV|F z^i~fci=i5)zgwHBnVA^^u~0pw09e}l?KZTs#CyC;#FJR0LT6(>=VLy*v_888K05?p ztoZhKjMq*|TC+dGnC7G+Y=HyBmkM}6j?oIvANT%U^ab&g5T_7-vih%gmR6zU%rkIx;wA+EZD%%(QK7gUgzOm7)cPy9n6WV>wAGJchn^aXEzeOp4F6?#SeTl64Pc6I)z{o+QwzF*fP_{<`T@n8 zc~iWb8H#MR)_=sNQht{$SfYNuzSsWE^H>+PpzNF++C+i^75-D;D)lAZQz#;4yi?P< z{xEP}KnNBf+h?J!e(hmi2i$BQ@Vi5{PjS8-2)ty~2@@ksWrL!g2jQQIF(!Rx&h$g4 zxvo6_mKO?Gx<$RA`^_Bf=&XFI1bAgyd7@$>(>FGdt=6{ac9V*(SGi$qK{jL zpxye5ew&%bA3G_HN5OiR-vO9=e;~!+WW0~`vZ*PFMaGdgD%9a_T0#O`h<)xSfXP2q zRHG}Y$vU{;e<5^I++c9JkP7J7KmH_Oj|o<}oS${LTr70B0^1wmC?z9X2JjG}7s~0v z&<}{?IiZ^Mp0vq;N6)>sUR@tEc$=D>{D_E%7vMvlsTY5&IJlySpKS?|A99e=Lnv=6 z9}jl8P(0}HyX`1u>y7{t`y!S%MH#AoXnASO=UM-X@M6%%qV=sRmy2mB*9XDsxvb9u zp!>RTIN9Mkv(;&*o>yAE`KjGS?<~u#0rjcy&rE)wE%0Y!_JUi_Iyh={DN~wc3BmG| zje3+2npT}7y^%vQ{*(+1&aV>)Y4my*4h}?{4_o3Go5J+FHOq24VJ@vg08-nhQNS)B zaQE8#_+&@Z6dbUpXx!5|ppYJ6*VcuN^5T$*%Uphgt;dmYjpCMLKNxd-IZAi%gsh8`VU0mOJ-As)^Wwg)ktLu-c5xJ}%VX!Xzpe`6b z(u##%u%$G529SWaKNb=HVxJpa?B8I#{{6WIOy6zEZ;VC3U4sVi!@m?s-|(j*=6}s~ z|2{HjrO}?^2!J_}(`haqo&<%Qxz35)N(kKi*8sw`jT#&32HlQ@6*Q`K2BN864 zmU0!c5&OUN2r5#c%AtK-(-~;Wo(Krl0LTPL{Bm0_F2S<`babz84Tr=f*4vx8+na@R zv&fm*l+CJ9)-N%SzgxO>$R9G0%{t4j5RejHL92PvQd5NhhW`6^I_Dk58)9f;5?gU3 z4;Nj2SM5}l&|X}!A}F_N{+tt?g$sLZOj9-z>V{4I0DbVv>X10RG6eAnrd_^YIC#q z(AgBzsFXlsF@QZuEjaj^iM4f@C8aO5x|jS-P#EzVY0xc z^w6%+QiuJN?a>*fKREGnm4Z)|j)N!zyYHP=?mLgxiL6z*nxCfJ+pmV(P6l@C*{z;k zdaY*soYvO8va|DJ2-CZZSC&R4$;fpYjNGVLlZ6&m1oGRiRbQR)p0X>ACjp^zmy|By z&-0E!7i}SGoFk?KaM}X0v7Tr+7?{VwXC1A69%xqR`AB#GYF_G_7Z1B+eOz4tLUvAa z`0MC+rRzsLWGK~XMzpT6^pzh9q+@VO>#`~3qibVPXx4Of$>ZSJK5G?IGCY|uYdpu&g zvu5u33KLG<(QMUJ{ntwn!U4#p9C6i^e@xWOc-HTE1Gq4nzyss;6$3##3pBo(+h`}$ zBzV#lPygMYV5o=jL;S8z&3a&9Ah!39SGt)Vpy8l;LyMQSAyq?5#$`E!;?Gf=msetp zRZ8r^e#a-(lBrSE#o-3`F5lPE`fY{$>%I#q zuF8NpPeoq;sV94(f%$Hh#-@^CdyX13)h85vvomT8ye&O5Iti z`ZOsgU-@4wHk<)+0_B!G!LjEo;|wSiE=iiJz2I9DKE1fOa|*aZXC8U6GVblXRduPf z*?_qbyF%{EmWDkuOZl@bv>WsmGN@k_qXBLZbS_FDuPL+9=lF^BTe_#x9>l83WQTyh zD7RG$qARP7jKL}8OXHvID8jQWftKcvJJtcUFH=eR}x?9*nVtCUB_uQoh&~f{7`{< zX+VK8ThHuIX7{w$aZheoL_~Qz0twC>Q*~?aBGUDt6K;||Ez33+wL*W&xDzG%)7(hJ zDBM(EXw$%oh!0IWm*O)!mC}-=?D7c+twe5k2Lf#5`V$2*vnmDN<`Lbz0gX_!jJW}~cU_Mq7H~{|A>-N*>xZ=Wtyt8BW3BOIvrcf+x&gy{2jvk?nO1-3{A{&8^4(p zs~~l?pX}e@e7(k1`NhU}Dl00~_X^At%F@6C5dKZv`V$wpq>liP+DOXolc8N@W1Z1E z+Nn9?o@Nql>r+5bOYsUPoN=+Sn-(0eHkbO=#-G#(Y(*M(k7s!3AKV6Kvm0oLwBO1? zs{nY+7eBr>=jGA!>3UeMo6pVl!_`WCNlvv6&Wj&qZG@}iJRAS;SS-VGyYGFd%ailL z9Ok1DmW^giXh#I8`SP$H{E*))<_cX64Awk|Z+bkebTvJ#1Am(XFzI!;Vj}EYu?izN z@%%v2qq?LY#5t-$^c^*QQ%_0S(8KkKenq(@3(B(=##q{d5po5ScP4kylPm03&_S$j zcVRI~8m&a^jZ*R5tB23bLZKcm zaNYQ=XBU7JPUcRIKT3!yZO1_W#L>FIDS7C#as7JTN$BiJ9r4Y`@0O8mTyPb7jg1$! zQg4ZG<&Tt=o-PD>WwN2vf&gw#C5^A#dk5+2`a}- z=a!d-2+mFjHer$hj8y6vA#q}_u>iu3(#H6?)!id92+}*Jg*kk@Zs+2ajO(rw!P9}DWE^8QgHk;bqqjV!7hUEoM@4CkL6$3f z?q5B(J?1i*Wyl}NtvzXvvz8hChV`cknM{g4$_Ddt(vzxQdl7^CrQA4%Rw?HnFKv)! zhl}u~%mQ=Y!_6t6W-eH{c9AWyz?sX8z{EmVs`gwdx)VYalpDz(acQ~ledeA^8K3>Q zu&HNT*JI;ayP0BJH)FHy*1-=%AmFYPVF3ml&;o9?f->No>zvn>$%4-Ut@nc9wmbH> zD=kw8G-}A>O(l(4;C3v?t&P=eYFFvSj2AbYJUe7|N|JL+1jC;tt@3($Gwfdbk$So5Fz4UJ#_oyq6cT1*BZrRZ55D-+5Ph36CA~#)Rafgp;J5J% z*rT4aGtWn|^2pc~_nRECXWS#){ajP}d9k;AdGPi9M5&2nK7B;R$ z7y|&C36MM^Te*R9;;3r+o|oCww+h|c&4icqoS(0kczXX#ZI&z(781HR+v}J82@D4S z{)>y7ySz@k&6wlt=Z_}T!(}4l&m0+OY+ZLyvG>KE^j(BUpFfz`pEeT^NO+rM9`U6O zhaac7p}MUY^;kY5no8rnsJU#fu~-YTowpn-{wxQNqdoHho(1p=+MLlz7kwbBR%}gx zC&{-bpqsGJ?k+74gFd1sLOE(o?%hBzNL?=WtDRmH%`5S$uNNE z2_P~Gx30vXK2@}bztr*H#J+!8hDu>*t4=SFl(Rp!_&|N;8Csrt#FuLYv|nqOc>6ei zl!=GPuN5#65fVpepxVMsk+4hlG?P={H*&F7P_i51_b6jy9Vo+Z_#2MeSZ1Ba^u}}@ zKZEk}Lx#$mRq9W;YnQ15_Pc83v8tbGtf|1#XsTpnP3beU7MCiB?do?jLYXP_X>>=J zL8Nkv#LW=YmqFLgt5>hoPc8mof&RH9Nv|?%t#$eH-!&|7!5QMAQ&e^Rp&8!tFlj$A zAt50#F}>jbVfp#;U!TpI* z{jq^mfTY}B@5I`FGJPEP2Ef$Y$k%vS9^BUbEQVpKFYgkfoVxgbmr8L({Rg zHf2J2WW&=hVflIFBhv}*1F&>-IH-|;9$neUf7+K6pL^8M-_{TAO8C<2lDYOsz#>Y~ z34vbmnwKk%ti>s;sKv9hg8?-1iY`5CGtoR72rOOPH?u=g_MDt43bg9Bb>35>mAzb6 zoa%)L%4=rYNl)L}+I@Z*T617su)Uf~`n_xRAg+%c(OTvYr;jVnMzOlvQyW`aQW;n# z#gE>FU>vxZkelr}IChK>u(XTnD*;at$}zijdzo}=t9F^2j0q_|F($&M>*2D-6Dqgn z^~>fGX9lK37y)?REX*CSqpQ(VdX~ssK=E&7`X*d?RW~}`$;$D0I437QHO?~|7>+Ec z9CX!7GXlehXs@QS_DWRP)aLZ$TP7E@U`+>3q+D`*agpJ|f+~1m{YbZ|#gM zHH*<;_yefHYALgzFirgMA-F?#Q-9X4VROOoA~aoh>E~E(nDP+%acDaU zVoIPH?Er!^jV9&KP0Q!T*5u5sHZsy#ycBqv+Wm*Zvuyl>gvvD=qNk=eq~+x0nUp7{ z5aag7pLv7j2;1hz@pCK~Y|%ywc&f5h#n4Cr*W2TGO9F51CxP+PwuARUAxY}bu_mhe zQedb)?6IL|^ND<%%D!;+ICi{8wHNF@&qFyXa_es6zR3-p*g6yr?^80WUP%PW1#!V2 z_mDd~JFItkVfqOXgzpI7AfXz5dLFUQl!ICS$cdY`?4#B zb3}rpO|Id7SzV>@rDes*P4Hbe=rZn`X2s4!`bUXh9~sF$67AR;e;fXiO)VVND&S}k z3=&a+mR9!~2fG5|XXEy!63L`G;-OYaVo@_e0ePyKCgRrq2%)_T?+H@pq~Q-4%*^!FKB_o7r3l4Q2MoOP8 z(QVQ*qG@pcp8MnKH_}TUg#@2LK0ZF7onS@JHPy5idr5P0DPKxWZWaAYb_7o1xqEx5 zB8#@T&<>oMqI&h8VEw{jFLUh12f1ecVhaq>e!ciZOU2)oq58A>CeyC5t=RiUevf$( zW8+b8A+JiIfRQox1Lr)s_MWVdPvU^hQ&H(Uql8wx0^o@q9MH#FhH(GZ0$y~FS1vp0 z$lm;P-L?jUmyL~$mzP&i@UyL=)VZOZm>8GDO1pJFdD45G%0AvM_=+V}DWEYos~iwn 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%0D)D6)TQ1m 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%0DQV=jrGOn*XCxi0ROTvzkJ8`EvWQVp`8L&LW3oh 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 z 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%0A013j-4aoM; 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 literal 0 HcmV?d00001 diff --git a/src/main/java/frc/robot/Constants.java b/src/main/java/frc/robot/Constants.java new file mode 100644 index 0000000..a68d55a --- /dev/null +++ b/src/main/java/frc/robot/Constants.java @@ -0,0 +1,77 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package frc.robot; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; + +public final class Constants { + + public int getId() { return 0; } + + public static final class DriveConstants { + public static final double MAX_SPEED_MPS = 4.5; + public static final double MAX_ANGULAR_VELOCITY = Math.PI; + public static final double DEADBAND = 0.05; + public static final double ROTATION_SCALE = 0.5; + public static final double FULL_SPEED_ROTATION_SCALE = 1.0; + public static final double PRECISION_MULTIPLIER = 0.3; + public static final double PRECISION_ROTATION_SCALE = 0.3; + + // Auto constants + public static final double AUTO_MAX_SPEED_MPS = 4.0; + public static final double AUTO_POSITION_TOLERANCE_M = 0.20; + public static final double AUTO_ANGLE_TOLERANCE_DEG = 15.0; + } + + public static final class FieldConstants { + // Field dimensions (Rebuilt 2025) - converted from feet to meters + // 54.269 ft = 16.54 m, 26.474 ft = 8.07 m + public static final double FIELD_LENGTH = 16.54; + public static final double FIELD_WIDTH = 8.07; + // starting positions + public static final Pose2d BLUE_ALLIANCE_START = new Pose2d(1.0, 1.0, new Rotation2d(0)); + public static final Pose2d RED_ALLIANCE_START = new Pose2d(15.54, 1.0, new Rotation2d(Math.PI)); + public static final Pose2d CENTER_START = new Pose2d(8.27, 4.035, new Rotation2d(0)); // Updated to actual field center + + // Reef structure (center of field) + public static final double REEF_CENTER_X = 8.27; + public static final double REEF_CENTER_Y = 4.035; + public static final double REEF_RADIUS = 1.5; + public static final double REEF_SAFE_DISTANCE = 2.5; + + // Safe zones (away from obstacles) + public static final Pose2d BLUE_SAFE_ZONE = new Pose2d(2.0, 1.5, Rotation2d.kZero); + public static final Pose2d RED_SAFE_ZONE = new Pose2d(FIELD_LENGTH - 2.0, FIELD_WIDTH - 1.5, Rotation2d.fromDegrees(180)); + + // Coral stations (at field edges) + public static final Pose2d BLUE_CORAL_STATION = new Pose2d(1.2, 7.0, Rotation2d.kZero); + public static final Pose2d RED_CORAL_STATION = new Pose2d(FIELD_LENGTH - 1.2, 1.2, Rotation2d.fromDegrees(180)); + + // Reef branches (scoring positions) - adjusted for correct field center + public static final Pose2d REEF_FRONT = new Pose2d(8.27, 2.5, Rotation2d.fromDegrees(0)); + public static final Pose2d REEF_LEFT = new Pose2d(7.2, 5.0, Rotation2d.fromDegrees(120)); + public static final Pose2d REEF_RIGHT = new Pose2d(9.3, 5.0, Rotation2d.fromDegrees(60)); + + // Processor station + public static final Pose2d PROCESSOR = new Pose2d(13.5, 4.035, Rotation2d.fromDegrees(90)); + + // Convenient teleop rest position near the hub + public static final Pose2d HUB_REST_POSITION = new Pose2d(8.27, 4.5, Rotation2d.kZero); + + // Field boundaries (with safety margin) + public static final double FIELD_MARGIN = 0.5; // meters from edge + public static final double MIN_X = FIELD_MARGIN; + public static final double MAX_X = FIELD_LENGTH - FIELD_MARGIN; + public static final double MIN_Y = FIELD_MARGIN; + public static final double MAX_Y = FIELD_WIDTH - FIELD_MARGIN; + } + + public static final class ControllerConstants { + public static final int DRIVER_CONTROLLER_PORT = 0; + public static final int OPERATOR_CONTROLLER_PORT = 1; + public static final double TRIGGER_THRESHOLD = 0.5; + } +} diff --git a/src/main/java/frc/robot/Input.java b/src/main/java/frc/robot/Input.java new file mode 100644 index 0000000..b9639ad --- /dev/null +++ b/src/main/java/frc/robot/Input.java @@ -0,0 +1,28 @@ +package frc.robot; + +import edu.wpi.first.wpilibj.XboxController; + +public class Input { + public static final XboxController driveController = new XboxController(0); + + public static double getTranslationX() { + return driveController.getLeftX(); + } + + public static void testInput() { + // Example usage of getTranslationX and getTranslationY to remove the unused method warning + double translationX = getTranslationX(); + double translationY = getTranslationY(); + System.out.println("Translation X: " + translationX); + System.out.println("Translation Y: " + translationY); + } + // getting the information neccessary for driving the robot + public static double getTranslationY() { + double value = driveController.getLeftY(); + return value; + } + + public static double getRotation() { + return driveController.getRightX(); + } +} \ No newline at end of file diff --git a/src/main/java/frc/robot/Main.java b/src/main/java/frc/robot/Main.java new file mode 100644 index 0000000..3f8fc66 --- /dev/null +++ b/src/main/java/frc/robot/Main.java @@ -0,0 +1,25 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package frc.robot; + +import edu.wpi.first.wpilibj.RobotBase; + +/** + * Do NOT add any static variables to this class, or any initialization at all. Unless you know what + * you are doing, do not modify this file except to change the parameter class to the startRobot + * call. + */ +public final class Main { + private Main() {} + + /** + * Main initialization function. Do not perform any initialization here. + * + *

If you change your main robot class, change the parameter type. + */ + public static void main(String[] args) { + RobotBase.startRobot(() -> new Robot()); + } +} diff --git a/src/main/java/frc/robot/Robot.java b/src/main/java/frc/robot/Robot.java new file mode 100644 index 0000000..9b99129 --- /dev/null +++ b/src/main/java/frc/robot/Robot.java @@ -0,0 +1,204 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package frc.robot; + +import edu.wpi.first.wpilibj.DriverStation; +import edu.wpi.first.wpilibj.RobotBase; +import edu.wpi.first.wpilibj.TimedRobot; +import edu.wpi.first.wpilibj.Timer; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.CommandScheduler; +import edu.wpi.first.math.geometry.Pose2d; + +/** + * The methods in this class are called automatically corresponding to each mode, as described in + * the TimedRobot documentation. If you change the name of this class or the package after creating + * this project, you must also update the Main.java file in the project. + */ +public class Robot extends TimedRobot { + private Command m_autonomousCommand; + private RobotContainer m_robotContainer; + private boolean robotInitialized = false; + + @Override + public void robotInit() { + long startTime = System.currentTimeMillis(); + try { + m_robotContainer = new RobotContainer(); + robotInitialized = true; + SmartDashboard.putBoolean("Robot/Initialized", true); + SmartDashboard.putString("Robot/Mode", "Initialized"); + SmartDashboard.putNumber("Robot/Init Time (ms)", System.currentTimeMillis() - startTime); + + // Simulation info + if (RobotBase.isSimulation()) { + SmartDashboard.putBoolean("Simulation/Running", true); + SmartDashboard.putString("Simulation/Info", "Use Field2d widget to view robot"); + } + } catch (Exception e) { + DriverStation.reportError("Robot initialization failed: " + e.getMessage(), e.getStackTrace()); + SmartDashboard.putBoolean("Robot/Initialized", false); + SmartDashboard.putString("Robot/Error", e.getMessage()); + robotInitialized = false; + } + } + + /** + * This function is called every 20 ms, no matter the mode. Use this for items like diagnostics + * that you want ran during disabled, autonomous, teleoperated and test. + * + *

This runs after the mode specific periodic functions, but before LiveWindow and + * SmartDashboard integrated updating. + */ + @Override + public void robotPeriodic() { + try { + // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled + // commands, running already-scheduled commands, removing finished or interrupted commands, + // and running subsystem periodic() methods. This must be called from the robot's periodic + // block in order for anything in the Command-based framework to work. + CommandScheduler.getInstance().run(); + + // Update match time on dashboard + SmartDashboard.putNumber("Robot/Match Time", Timer.getMatchTime()); + SmartDashboard.putNumber("Robot/FPGA Time", Timer.getFPGATimestamp()); + } catch (Exception e) { + DriverStation.reportError("robotPeriodic error: " + e.getMessage(), false); + } + } + + /** This function is called once each time the robot enters Disabled mode. */ + @Override + public void disabledInit() { + SmartDashboard.putString("Robot/Mode", "DISABLED"); + SmartDashboard.putBoolean("Robot/Enabled", false); + } + + @Override + public void disabledPeriodic() {} + + /** This autonomous runs the autonomous command selected by your {@link RobotContainer} class. */ + @Override + public void autonomousInit() { + SmartDashboard.putString("Robot/Mode", "AUTONOMOUS"); + SmartDashboard.putBoolean("Robot/Enabled", true); + + if (!robotInitialized || m_robotContainer == null) { + DriverStation.reportError("Cannot run autonomous - robot not initialized", false); + return; + } + + try { + // Small delay to ensure systems are ready + Thread.sleep(100); + + // Log position BEFORE getting autonomous command + Pose2d prePose = m_robotContainer.m_DriveSubsystem.getPose(); + System.out.println("[Robot] Position BEFORE getAutonomousCommand: (" + + String.format("%.2f, %.2f", prePose.getX(), prePose.getY()) + ")"); + + // Get a fresh autonomous command each time + m_autonomousCommand = m_robotContainer.getAutonomousCommand(); + + // Log position AFTER getting autonomous command (but before scheduling) + Pose2d postPose = m_robotContainer.m_DriveSubsystem.getPose(); + System.out.println("[Robot] Position AFTER getAutonomousCommand: (" + + String.format("%.2f, %.2f", postPose.getX(), postPose.getY()) + ")"); + + // Verify robot is on field before starting autonomous + if (!isValidFieldPosition(postPose)) { + DriverStation.reportWarning("WARNING: Robot starting position outside field bounds! Pos: (" + + String.format("%.2f, %.2f", postPose.getX(), postPose.getY()) + ")", false); + } + + // Schedule the autonomous command + if (m_autonomousCommand != null) { + m_autonomousCommand.schedule(); + SmartDashboard.putString("Status/Auto Running", m_autonomousCommand.getName()); + System.out.println("[Robot] Autonomous scheduled: " + m_autonomousCommand.getName()); + } else { + SmartDashboard.putString("Status/Auto Running", "None (Error: null command)"); + } + } catch (Exception e) { + DriverStation.reportError("autonomousInit error: " + e.getMessage(), e.getStackTrace()); + SmartDashboard.putString("Status/Auto Running", "Error: " + e.getMessage()); + System.out.println("[Robot] Exception in autonomousInit: " + e.getMessage()); + e.printStackTrace(); + } + } + + /** + * Verify robot position is within valid FRC field bounds. + * FRC field: 16.46m × 8.23m with 0.5m buffer for bumpers + */ + private boolean isValidFieldPosition(Pose2d pose) { + final double FIELD_LENGTH = 16.46; + final double FIELD_WIDTH = 8.23; + final double BUFFER = 0.5; + + boolean xValid = pose.getX() >= -BUFFER && pose.getX() <= FIELD_LENGTH + BUFFER; + boolean yValid = pose.getY() >= -BUFFER && pose.getY() <= FIELD_WIDTH + BUFFER; + + System.out.println("[Robot] Field validation - X: " + String.format("%.2f", pose.getX()) + + " (valid: " + xValid + "), Y: " + String.format("%.2f", pose.getY()) + + " (valid: " + yValid + ")"); + + return xValid && yValid; + } + + /** This function is called periodically during autonomous. */ + @Override + public void autonomousPeriodic() {} + + @Override + public void teleopInit() { + SmartDashboard.putString("Robot/Mode", "TELEOP"); + SmartDashboard.putBoolean("Robot/Enabled", true); + SmartDashboard.putString("Status/Auto Running", "Cancelled"); + + // Cancel autonomous command when teleop starts + if (m_autonomousCommand != null) { + m_autonomousCommand.cancel(); + m_autonomousCommand = null; + } + + // Initialize teleop + if (robotInitialized && m_robotContainer != null) { + try { + m_robotContainer.teleopInit(); + } catch (Exception e) { + DriverStation.reportError("teleopInit error: " + e.getMessage(), false); + } + } + } + + /** This function is called periodically during operator control. */ + @Override + public void teleopPeriodic() {} + + @Override + public void testInit() { + SmartDashboard.putString("Robot/Mode", "TEST"); + SmartDashboard.putBoolean("Robot/Enabled", true); + // Cancels all running commands at the start of test mode. + CommandScheduler.getInstance().cancelAll(); + } + + /** This function is called periodically during test mode. */ + @Override + public void testPeriodic() {} + + /** This function is called once when the robot is first started up. */ + @Override + public void simulationInit() { + SmartDashboard.putBoolean("Robot/Simulation", true); + SmartDashboard.putString("Robot/Mode", "Simulation Init"); + } + + /** This function is called periodically whilst in simulation. */ + @Override + public void simulationPeriodic() {} +} diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java new file mode 100644 index 0000000..4556e1a --- /dev/null +++ b/src/main/java/frc/robot/RobotContainer.java @@ -0,0 +1,281 @@ +package frc.robot; + +import java.io.File; +import java.util.Set; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.wpilibj.DriverStation; +import edu.wpi.first.wpilibj.Filesystem; +import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.CommandScheduler; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.button.CommandXboxController; + +import frc.robot.Constants.ControllerConstants; +import frc.robot.Constants.DriveConstants; +import frc.robot.Constants.FieldConstants; +import frc.robot.commands.Autos; +import frc.robot.commands.auto.AutoAlgaeAuto; +import frc.robot.commands.auto.AutoAvoidCollision; +import frc.robot.commands.auto.AutoBalance; +import frc.robot.commands.auto.AutoComplexPath; +import frc.robot.commands.auto.AutoFigure8; +import frc.robot.commands.auto.AutoPickupAuto; +import frc.robot.commands.auto.AutoProcessorAuto; +import frc.robot.commands.auto.AutoSafeScore; +import frc.robot.commands.auto.AutoTripleScore; +import frc.robot.commands.auto.SequentialAuto; +import frc.robot.commands.auto.SimpleAuto; +import frc.robot.subsystems.DriveSubsystem; +import frc.robot.subsystems.LimelightVision; + +public class RobotContainer { + + public final DriveSubsystem m_DriveSubsystem; + private final CommandXboxController driverXbox; + private final CommandXboxController m_operatorController; + private LimelightVision limelightVision; + private SendableChooser autoChooser; + + public RobotContainer() { + // Initialize controller first + driverXbox = new CommandXboxController(ControllerConstants.DRIVER_CONTROLLER_PORT); + m_operatorController = new CommandXboxController(1); + + // Initialize drive subsystem + m_DriveSubsystem = new DriveSubsystem(new File(Filesystem.getDeployDirectory(), "SWERVE")); + + // Initialize vision (optional - won't crash if it fails) + try { + limelightVision = new LimelightVision(); + limelightVision.setDriveSubsystem(m_DriveSubsystem); + } catch (Exception e) { + DriverStation.reportWarning("LimelightVision initialization failed: " + e.getMessage(), false); + limelightVision = null; + } + + // Set initial robot position - START AT BLUE ALLIANCE + m_DriveSubsystem.resetOdometry(FieldConstants.BLUE_ALLIANCE_START); + System.out.println("[RobotContainer] Robot initialized at Blue Alliance start: (" + + String.format("%.2f, %.2f", FieldConstants.BLUE_ALLIANCE_START.getX(), + FieldConstants.BLUE_ALLIANCE_START.getY()) + ")"); + + // Configure commands and bindings + configureDefaultCommand(); + configureBindings(); + + // Setup dashboard + setupSmartDashboard(); + setupAutonomousChooser(); + + SmartDashboard.putBoolean("Robot/Container Initialized", true); + SmartDashboard.putStringArray("Auto/Choices", new String[]{"Simple", "Sequential", "Balance"}); + SmartDashboard.putString("Auto/Choice", "Simple"); + } + + private void setupSmartDashboard() { + SmartDashboard.putData("Commands", CommandScheduler.getInstance()); + + // Alliance color selector + SmartDashboard.putString("Alliance/Color", "Blue"); + + // Field constants for debugging + SmartDashboard.putNumber("Field/Length (m)", 17.54); + SmartDashboard.putNumber("Field/Width (m)", 8.21); + SmartDashboard.putNumber("Field/Blue Start X", FieldConstants.BLUE_ALLIANCE_START.getX()); + SmartDashboard.putNumber("Field/Blue Start Y", FieldConstants.BLUE_ALLIANCE_START.getY()); + SmartDashboard.putNumber("Field/Red Start X", FieldConstants.RED_ALLIANCE_START.getX()); + SmartDashboard.putNumber("Field/Red Start Y", FieldConstants.RED_ALLIANCE_START.getY()); + SmartDashboard.putNumber("Field/Hub Rest X", FieldConstants.HUB_REST_POSITION.getX()); + SmartDashboard.putNumber("Field/Hub Rest Y", FieldConstants.HUB_REST_POSITION.getY()); + + // Control instructions + SmartDashboard.putString("Controls/Left Stick", "Move Robot"); + SmartDashboard.putString("Controls/Right Stick X", "Rotate Robot"); + SmartDashboard.putString("Controls/Right Bumper (R1)", "Increase Speed (+10%)"); + SmartDashboard.putString("Controls/Left Bumper (L1)", "Decrease Speed (-10%)"); + SmartDashboard.putString("Controls/Right Trigger", "Full Speed Mode"); + SmartDashboard.putString("Controls/Left Trigger", "Precision Mode"); + SmartDashboard.putString("Controls/A Button", "Test Auto"); + SmartDashboard.putString("Controls/B Button", "Reset to Blue Start"); + SmartDashboard.putString("Controls/X Button", "Reset to Red Start"); + SmartDashboard.putString("Controls/Y Button", "Reset to Center"); + SmartDashboard.putString("Controls/POV Down", "Reset Heading"); + SmartDashboard.putString("Controls/POV Up", "Zero Gyro & Sync Modules"); + + // Computer key (dashboard) to lock and rest near hub + SmartDashboard.putData("Drive/Hub Rest", Commands.runOnce(() -> { + m_DriveSubsystem.resetOdometry(FieldConstants.HUB_REST_POSITION); + m_DriveSubsystem.lock(); + SmartDashboard.putString("Status/Last Action", "Hub Rest (Dashboard)"); + }, m_DriveSubsystem).withName("HubRest")); + } + + private void setupAutonomousChooser() { + autoChooser = new SendableChooser<>(); + autoChooser.setDefaultOption("Do Nothing", Autos.doNothingAuto()); + autoChooser.addOption("Drive Forward", Autos.driveForwardAuto(m_DriveSubsystem)); + + // Basic scoring autos + autoChooser.addOption("Simple (Reef)", new SimpleAuto(m_DriveSubsystem)); + autoChooser.addOption("Safe Score (1 piece)", new AutoSafeScore(m_DriveSubsystem)); + + // Multi-piece autos + autoChooser.addOption("Sequential (2 pieces)", new SequentialAuto(m_DriveSubsystem)); + autoChooser.addOption("Triple Score (3 pieces)", new AutoTripleScore(m_DriveSubsystem)); + + // Specialized autos + autoChooser.addOption("Avoid Collision", new AutoAvoidCollision(m_DriveSubsystem)); + autoChooser.addOption("Algae Removal", new AutoAlgaeAuto(m_DriveSubsystem)); + autoChooser.addOption("Processor Scoring", new AutoProcessorAuto(m_DriveSubsystem)); + autoChooser.addOption("Complex Path", new AutoComplexPath(m_DriveSubsystem)); + autoChooser.addOption("Balance", new AutoBalance(m_DriveSubsystem)); + autoChooser.addOption("Pickup Cycles", new AutoPickupAuto(m_DriveSubsystem)); + autoChooser.addOption("Figure 8 Pattern", new AutoFigure8(m_DriveSubsystem)); + + SmartDashboard.putData("Auto Chooser", autoChooser); + } + + private void configureDefaultCommand() { + m_DriveSubsystem.setDefaultCommand( + m_DriveSubsystem.driveCommand( + () -> -driverXbox.getLeftY(), + () -> -driverXbox.getLeftX(), + () -> -driverXbox.getRightX() * DriveConstants.ROTATION_SCALE + ).withName("DefaultDrive") + ); + } + + private void configureBindings() { + // Speed control with bumpers + driverXbox.rightBumper().onTrue(Commands.runOnce(() -> { + SmartDashboard.putString("Status/Last Action", "Speed increased"); + })); + driverXbox.leftBumper().onTrue(Commands.runOnce(() -> { + SmartDashboard.putString("Status/Last Action", "Speed decreased"); + })); + + // Heading reset (POV Down) + driverXbox.povDown().onTrue(Commands.runOnce(() -> { + m_DriveSubsystem.seedForwards(); + SmartDashboard.putString("Status/Last Action", "Heading Reset"); + })); + + // Zero gyro and sync modules (POV Up) + driverXbox.povUp().onTrue(Commands.runOnce(() -> { + m_DriveSubsystem.zeroGyro(); + m_DriveSubsystem.synchronizeModuleEncoders(); + SmartDashboard.putString("Status/Last Action", "Gyro & Modules Zeroed"); + })); + + // Print encoder offsets for calibration (POV Left) + driverXbox.povLeft().onTrue(Commands.runOnce(() -> { + m_DriveSubsystem.printEncoderOffsets(); + SmartDashboard.putString("Status/Last Action", "Printed Encoder Offsets - Check Console"); + })); + + // POV Right - Lock wheels + driverXbox.povRight().onTrue(Commands.runOnce(() -> { + m_DriveSubsystem.lock(); + SmartDashboard.putString("Status/Last Action", "Wheels Locked"); + })); + + // Position resets + driverXbox.b().onTrue(Commands.runOnce(() -> { + m_DriveSubsystem.resetOdometry(FieldConstants.BLUE_ALLIANCE_START); + SmartDashboard.putString("Status/Last Action", "Reset to Blue Start"); + })); + + driverXbox.x().onTrue(Commands.runOnce(() -> { + m_DriveSubsystem.resetOdometry(FieldConstants.RED_ALLIANCE_START); + SmartDashboard.putString("Status/Last Action", "Reset to Red Start"); + })); + + driverXbox.y().onTrue(Commands.runOnce(() -> { + m_DriveSubsystem.resetOdometry(FieldConstants.CENTER_START); + SmartDashboard.putString("Status/Last Action", "Reset to Center"); + })); + + // Controller key to lock at hub rest position (press START) + driverXbox.start().onTrue(Commands.runOnce(() -> { + m_DriveSubsystem.resetOdometry(FieldConstants.HUB_REST_POSITION); + m_DriveSubsystem.lock(); + SmartDashboard.putString("Status/Last Action", "Hub Rest (Start)"); + }, m_DriveSubsystem)); + + // Full speed mode (right trigger) - Remove duplicate deadband + driverXbox.rightTrigger(ControllerConstants.TRIGGER_THRESHOLD) + .onTrue(Commands.runOnce(() -> SmartDashboard.putString("Status/Speed Mode", "FULL SPEED"))) + .onFalse(Commands.runOnce(() -> SmartDashboard.putString("Status/Speed Mode", "Normal"))) + .whileTrue( + m_DriveSubsystem.driveCommand( + () -> -driverXbox.getLeftY(), + () -> -driverXbox.getLeftX(), + () -> -driverXbox.getRightX() * DriveConstants.FULL_SPEED_ROTATION_SCALE + ).withName("FullSpeedDrive") + ); + + // Precision mode (left trigger) - Remove duplicate deadband + driverXbox.leftTrigger(ControllerConstants.TRIGGER_THRESHOLD) + .onTrue(Commands.runOnce(() -> SmartDashboard.putString("Status/Speed Mode", "PRECISION"))) + .onFalse(Commands.runOnce(() -> SmartDashboard.putString("Status/Speed Mode", "Normal"))) + .whileTrue( + m_DriveSubsystem.driveCommand( + () -> -driverXbox.getLeftY() * DriveConstants.PRECISION_MULTIPLIER, + () -> -driverXbox.getLeftX() * DriveConstants.PRECISION_MULTIPLIER, + () -> -driverXbox.getRightX() * DriveConstants.PRECISION_ROTATION_SCALE + ).withName("PrecisionDrive") + ); + + // Test auto with A button + driverXbox.a() + .onTrue(Commands.runOnce(() -> SmartDashboard.putString("Status/Last Action", "Running Auto Test"))) + .whileTrue( + Commands.defer(this::getAutonomousCommand, Set.of(m_DriveSubsystem)) + ); + + // Initialize status + SmartDashboard.putString("Status/Speed Mode", "Normal"); + SmartDashboard.putString("Status/Last Action", "Ready"); + + // Operator diagnostics + m_operatorController.a().onTrue(Commands.runOnce(m_DriveSubsystem::printEncoderOffsets)); + m_operatorController.b().onTrue(Commands.runOnce(m_DriveSubsystem::diagnoseGyro)); + m_operatorController.x().onTrue(Commands.runOnce(m_DriveSubsystem::diagnoseMotorInversions)); + } + + /** + * Get the autonomous command to run. + * Always ensures robot starts at correct field position. + */ + public Command getAutonomousCommand() { + // Get selected starting position from dashboard or default to blue + String allianceColor = SmartDashboard.getString("Alliance/Color", "Blue"); + + Pose2d startingPose = allianceColor.equals("Red") ? + FieldConstants.RED_ALLIANCE_START : + FieldConstants.BLUE_ALLIANCE_START; + + // Reset to correct starting position for selected alliance + m_DriveSubsystem.stop(); + m_DriveSubsystem.zeroGyro(); + m_DriveSubsystem.resetOdometry(startingPose); + + // Get command from SendableChooser instead of string + Command selectedAuto = autoChooser.getSelected(); + System.out.println("[RobotContainer] Selected autonomous: " + selectedAuto.getName()); + + return selectedAuto != null ? selectedAuto : Autos.doNothingAuto(); + } + + /** + * Called when teleop starts. + */ + public void teleopInit() { + // Reset to Blue Alliance start at teleop begin + m_DriveSubsystem.resetOdometry(FieldConstants.BLUE_ALLIANCE_START); + System.out.println("Teleop initialized - odometry reset to Blue Alliance start"); + } +} diff --git a/src/main/java/frc/robot/commands/Autos.java b/src/main/java/frc/robot/commands/Autos.java new file mode 100644 index 0000000..222a006 --- /dev/null +++ b/src/main/java/frc/robot/commands/Autos.java @@ -0,0 +1,64 @@ +package frc.robot.commands; + +import edu.wpi.first.math.kinematics.ChassisSpeeds; +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.Commands; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Utility class containing autonomous routines for FIRST Rebuilt 2025. + * + * Game: FIRST Reefscape Rebuilt + * + * Scoring Opportunities: + * - Reef Scoring: 3 points per coral (3 branches: Front, Left, Right) + * - Processor Scoring: 4 points per coral (higher value) + * - Algae Removal: Bonus points (variable) + * + * Field Layout: + * - Field Size: 16.54m × 8.07m (54.27' × 26.47') + * - Reef Center: (8.27, 4.035) - Center obstacle + * - Coral Stations: Alliance walls for pickup + * - Processor Stations: Side stations for bonus scoring + * + * Available Auto Routines: + * - Simple: 1 coral (3 pts) - Safe and reliable + * - Triple Score: 3 corals (9 pts) - Multi-branch scoring + * - Complex Path: 3 corals (9 pts) - With pickup cycles + * - Pickup Cycles: 3 corals (9 pts) - Rapid cycling practice + * - Sequential: 1 coral (3 pts) - Multi-waypoint demo + * - Processor: 1 coral (4 pts) - Processor bonus scoring + * - Algae Removal: Variable points - Field control + * - Figure 8: Navigation practice only + * - Balance/Center: Positioning practice only + * - Collision Avoid: Safe pathing practice + */ +public final class Autos { + + /** + * Do nothing autonomous - robot stays still. + */ + public static Command doNothingAuto() { + return Commands.none().withName("Do Nothing"); + } + + /** + * Drive forward autonomous routine. + * Robot drives forward at a constant speed for a set duration. + */ + public static Command driveForwardAuto(DriveSubsystem driveSubsystem) { + return Commands.sequence( + // Drive forward at 50% speed for 3 seconds + Commands.run(() -> driveSubsystem.driveFieldOriented( + new ChassisSpeeds(2.25, 0, 0)), driveSubsystem) + .withTimeout(3), + // Stop the robot + Commands.runOnce(() -> driveSubsystem.stop(), driveSubsystem) + ).withName("Drive Forward"); + } + + // Private constructor to prevent instantiation + private Autos() { + throw new UnsupportedOperationException("Utility class - do not instantiate"); + } +} \ No newline at end of file diff --git a/src/main/java/frc/robot/commands/auto/AutoAlgaeAuto.java b/src/main/java/frc/robot/commands/auto/AutoAlgaeAuto.java new file mode 100644 index 0000000..565389d --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoAlgaeAuto.java @@ -0,0 +1,56 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Algae Removal Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Clear algae from designated field zones + * + * Strategy: + * 1. Start at Blue Alliance + * 2. Navigate to left algae zone (X=4.0m) + * 3. Clear algae (wait for mechanism) + * 4. Navigate to right algae zone (X=13.0m) + * 5. Clear algae (wait for mechanism) + * 6. Hold position + * + * Points: Variable (depends on algae cleared) + * Time: ~18 seconds + * Note: Algae removal provides bonus points and field control + */ +public class AutoAlgaeAuto extends SequentialCommandGroup { + + public AutoAlgaeAuto(DriveSubsystem drive) { + addCommands( + Commands.runOnce(() -> { + System.out.println("\n========== ALGAE REMOVAL - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Clear algae from field zones"); + System.out.println("Target: 2 algae zones"); + System.out.println("Expected Points: Variable (bonus points)"); + System.out.println("======================================================\n"); + }), + Commands.runOnce(() -> drive.stop()), + Commands.waitSeconds(0.3), + Commands.runOnce(() -> System.out.println("[Algae] Patrolling algae zones")), + new AutoDriveCommand(drive, new Pose2d(4.0, 4.0, Rotation2d.kZero), 2.0, 6.0), + Commands.waitSeconds(0.5), + new AutoDriveCommand(drive, new Pose2d(13.0, 4.0, Rotation2d.kZero), 2.0, 6.0), + Commands.runOnce(() -> { + drive.stop(); + drive.lock(); + System.out.println("[Algae] Complete\n"); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/AutoAvoidCollision.java b/src/main/java/frc/robot/commands/auto/AutoAvoidCollision.java new file mode 100644 index 0000000..93558fa --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoAvoidCollision.java @@ -0,0 +1,65 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Collision Avoidance Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Navigate around field obstacles (reef and game pieces) + * + * Strategy: + * 1. Start at Blue Alliance + * 2. Move along perimeter to avoid center reef + * 3. Navigate to safe approach position north of reef + * 4. Approach Reef Left scoring position carefully + * 5. Retreat via perimeter route back to safe zone + * + * Points: 0 (navigation practice - can be modified for scoring) + * Time: ~25 seconds + * Purpose: Demonstrate collision avoidance and safe pathing + * Best for: Testing obstacle detection and path planning + */ +public class AutoAvoidCollision extends SequentialCommandGroup { + + public AutoAvoidCollision(DriveSubsystem drive) { + addCommands( + Commands.runOnce(() -> { + System.out.println("\n========== COLLISION AVOID - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Navigate around center field obstacles"); + System.out.println("Objective: Safe pathing demonstration"); + System.out.println("Expected Points: 0 (navigation practice)"); + System.out.println("=========================================================\n"); + }), + Commands.runOnce(() -> drive.stop()), + Commands.waitSeconds(0.3), + Commands.runOnce(() -> System.out.println("[AvoidCollision] Moving along perimeter")), + new AutoDriveCommand(drive, new Pose2d(1.5, 6.5, Rotation2d.kZero), 2.0, 6.0), + Commands.waitSeconds(0.3), + Commands.runOnce(() -> System.out.println("[AvoidCollision] Moving to safe approach")), + new AutoDriveCommand(drive, new Pose2d(7.0, 6.0, Rotation2d.fromDegrees(120.0)), 2.0, 8.0), + Commands.waitSeconds(0.3), + Commands.runOnce(() -> System.out.println("[AvoidCollision] Final approach")), + new AutoDriveCommand(drive, FieldConstants.REEF_LEFT, 1.5, 6.0), + Commands.waitSeconds(1.5), + Commands.runOnce(() -> System.out.println("[AvoidCollision] Retreating")), + new AutoDriveCommand(drive, new Pose2d(3.0, 6.0, Rotation2d.kZero), 2.0, 8.0), + new AutoDriveCommand(drive, FieldConstants.BLUE_SAFE_ZONE, 2.0, 8.0), + Commands.runOnce(() -> { + System.out.println("[AvoidCollision] Complete\n"); + drive.stop(); + drive.lock(); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/AutoBalance.java b/src/main/java/frc/robot/commands/auto/AutoBalance.java new file mode 100644 index 0000000..26d9df7 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoBalance.java @@ -0,0 +1,65 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Balance/Center Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Navigate to field center and maintain position + * + * Strategy: + * 1. Start at Blue Alliance + * 2. Navigate to field center (8.27, 4.035) + * 3. Hold position for balance/stability test + * 4. Lock wheels to maintain position + * + * Points: 0 (positioning practice) + * Time: ~15 seconds + * Purpose: Test center field navigation and position holding + * Note: Can be modified for endgame balance/park scoring + */ +public class AutoBalance extends SequentialCommandGroup { + + private static final double BALANCE_POSITION_X = 8.27; + private static final Pose2d BALANCE_POSITION = new Pose2d(BALANCE_POSITION_X, 4.035, Rotation2d.kZero); + + public AutoBalance(DriveSubsystem drive) { + addCommands( + Commands.runOnce(() -> { + System.out.println("\n========== BALANCE/CENTER - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Navigate to center and hold position"); + System.out.println("Target: Field center (" + String.format("%.2f, %.2f", + BALANCE_POSITION.getX(), BALANCE_POSITION.getY()) + ")"); + System.out.println("Expected Points: 0 (positioning practice)"); + System.out.println("========================================================\n"); + }), + + Commands.runOnce(() -> drive.stop()), + Commands.waitSeconds(0.3), + + Commands.runOnce(() -> System.out.println("[Balance] Moving to balance position")), + new AutoDriveCommand(drive, BALANCE_POSITION, 2.0, 8.0), + + Commands.waitSeconds(0.5), + + Commands.runOnce(() -> System.out.println("[Balance] Maintaining position")), + Commands.waitSeconds(2.0), + + Commands.runOnce(() -> { + drive.stop(); + drive.lock(); + System.out.println("[Balance] Complete - holding position\n"); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/AutoComplexPath.java b/src/main/java/frc/robot/commands/auto/AutoComplexPath.java new file mode 100644 index 0000000..9286f26 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoComplexPath.java @@ -0,0 +1,115 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Complex Path Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Maximum coral scoring with multiple pickup cycles + * + * Strategy (3-piece auto): + * 1. Start with preloaded coral → Score on Reef Front (Level 1) + * 2. Pickup from Coral Station → Score on Reef Left (Level 1) + * 3. Pickup from Coral Station → Score on Reef Right (Level 1) + * 4. Return to safe zone for endgame positioning + * + * Points: 9 points (3 corals × 3 points each) + * Time: ~25-30 seconds + * Complexity: High - requires precise navigation and coral handling + * Best for: Experienced drivers, reliable intake/outtake mechanisms + */ +public class AutoComplexPath extends SequentialCommandGroup { + + public AutoComplexPath(DriveSubsystem drive) { + addCommands( + // Startup diagnostics + Commands.runOnce(() -> { + System.out.println("\n========== COMPLEX PATH - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Multi-coral scoring (3-piece auto)"); + Pose2d startPose = drive.getPose(); + System.out.println("Starting position: (" + + String.format("%.2f, %.2f", startPose.getX(), startPose.getY()) + ")"); + System.out.println("\nScoring Sequence:"); + System.out.println(" 1. Reef Front (preload): (8.27, 2.5) @ 0° → 3 pts"); + System.out.println(" 2. Pickup: Coral Station (1.2, 7.0)"); + System.out.println(" 3. Reef Left: (7.2, 5.0) @ 120° → 3 pts"); + System.out.println(" 4. Pickup: Coral Station (1.2, 7.0)"); + System.out.println(" 5. Reef Right: (9.3, 5.0) @ 60° → 3 pts"); + System.out.println(" 6. Safe Zone: (2.0, 1.5) @ 0°"); + System.out.println("\nExpected Points: 9 (3 corals on reef)"); + System.out.println("Field: 16.54m × 8.07m (Rebuilt 2025)"); + System.out.println("=====================================================\n"); + }), + + // Initialize + Commands.runOnce(() -> { + System.out.println("[ComplexPath] Ready with preloaded coral"); + drive.stop(); + }), + Commands.waitSeconds(0.5), + + // Score 1: Reef Front (preload) + Commands.runOnce(() -> { + System.out.println("[ComplexPath] Score 1/3: Reef Front (preload)"); + }), + new AutoDriveCommand(drive, FieldConstants.REEF_FRONT, 2.5, 8.0), + Commands.waitSeconds(1.0), // Score time + + // Pickup 1: Coral Station + Commands.runOnce(() -> { + System.out.println("[ComplexPath] Pickup 1/2: Coral Station"); + }), + new AutoDriveCommand(drive, FieldConstants.BLUE_CORAL_STATION, 2.5, 8.0), + Commands.waitSeconds(1.0), // Pickup time + + // Score 2: Reef Left + Commands.runOnce(() -> { + System.out.println("[ComplexPath] Score 2/3: Reef Left (120°)"); + }), + new AutoDriveCommand(drive, FieldConstants.REEF_LEFT, 2.5, 8.0), + Commands.waitSeconds(1.0), // Score time + + // Pickup 2: Coral Station + Commands.runOnce(() -> { + System.out.println("[ComplexPath] Pickup 2/2: Coral Station"); + }), + new AutoDriveCommand(drive, FieldConstants.BLUE_CORAL_STATION, 2.5, 8.0), + Commands.waitSeconds(1.0), // Pickup time + + // Score 3: Reef Right + Commands.runOnce(() -> { + System.out.println("[ComplexPath] Score 3/3: Reef Right (60°)"); + }), + new AutoDriveCommand(drive, FieldConstants.REEF_RIGHT, 2.5, 8.0), + Commands.waitSeconds(1.0), // Score time + + // Return to safe zone + Commands.runOnce(() -> { + System.out.println("[ComplexPath] Returning to safe zone"); + }), + new AutoDriveCommand(drive, FieldConstants.BLUE_SAFE_ZONE, 2.5, 10.0), + + // Finish + Commands.runOnce(() -> { + Pose2d finalPose = drive.getPose(); + System.out.println("[ComplexPath] [OK] Complete at (" + + String.format("%.2f, %.2f", finalPose.getX(), finalPose.getY()) + ")"); + System.out.println("[ComplexPath] [OK] Total pieces scored: 3"); + System.out.println("[ComplexPath] [OK] Reef branches covered: Front, Left, Right"); + drive.stop(); + drive.lock(); + System.out.println(); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/AutoDriveCommand.java b/src/main/java/frc/robot/commands/auto/AutoDriveCommand.java new file mode 100644 index 0000000..1ed1fd7 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoDriveCommand.java @@ -0,0 +1,138 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.kinematics.ChassisSpeeds; +import edu.wpi.first.wpilibj.Timer; +import edu.wpi.first.wpilibj2.command.Command; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Drive to a target pose autonomously. + * Moves in straight lines between waypoints using field-oriented control. + */ +public class AutoDriveCommand extends Command { + private final DriveSubsystem drive; + private final Pose2d targetPose; + private final double maxSpeed; + private final double timeoutSeconds; + private final double positionTolerance; + private double startTime; + + private static final double DEFAULT_POSITION_TOLERANCE = 0.20; // meters + private static final double ANGLE_TOLERANCE = 15.0; // degrees + private static final double KP_LINEAR = 2.0; + private static final double KP_ANGULAR = 1.5; + private static final double MIN_SPEED = 0.3; // m/s + + public AutoDriveCommand(DriveSubsystem drive, Pose2d targetPose, double positionTolerance, double maxSpeed, double timeoutSeconds) { + this.drive = drive; + this.targetPose = targetPose; + this.positionTolerance = positionTolerance; + this.maxSpeed = maxSpeed; + this.timeoutSeconds = timeoutSeconds; + addRequirements(drive); + } + + // Convenience constructor with default tolerance + public AutoDriveCommand(DriveSubsystem drive, Pose2d targetPose, double maxSpeed, double timeoutSeconds) { + this(drive, targetPose, DEFAULT_POSITION_TOLERANCE, maxSpeed, timeoutSeconds); + } + + @Override + public void initialize() { + startTime = Timer.getFPGATimestamp(); + + Pose2d currentPose = drive.getPose(); + double distance = currentPose.getTranslation().getDistance(targetPose.getTranslation()); + + System.out.println("[AutoDriveCommand] Moving from (" + + String.format("%.2f, %.2f @ %.0f deg", currentPose.getX(), currentPose.getY(), currentPose.getRotation().getDegrees()) + + ") to (" + String.format("%.2f, %.2f @ %.0f deg", targetPose.getX(), targetPose.getY(), targetPose.getRotation().getDegrees()) + + ") | Distance: " + String.format("%.2fm", distance)); + } + + @Override + public void execute() { + Pose2d currentPose = drive.getPose(); + + // Calculate error to target in field frame + double dx = targetPose.getX() - currentPose.getX(); + double dy = targetPose.getY() - currentPose.getY(); + double distance = Math.hypot(dx, dy); + + // Calculate angle error + double angleError = normalizeAngle( + targetPose.getRotation().getDegrees() - currentPose.getRotation().getDegrees() + ); + + // If close enough to target position, focus on rotation + if (distance < positionTolerance) { + if (Math.abs(angleError) < ANGLE_TOLERANCE) { + drive.stop(); + return; + } + + double omega = KP_ANGULAR * Math.toRadians(angleError); + omega = clamp(omega, -Math.PI, Math.PI); + drive.driveFieldOriented(new ChassisSpeeds(0, 0, omega)); + return; + } + + // Calculate speed toward target with proportional control + double speed = Math.min(KP_LINEAR * distance, maxSpeed); + speed = Math.max(MIN_SPEED, speed); // Minimum speed to overcome friction + + // Normalize direction vector and apply speed + double vx = (dx / distance) * speed; + double vy = (dy / distance) * speed; + + // Also correct heading while moving (but limit rotation to avoid instability) + double omega = KP_ANGULAR * Math.toRadians(angleError); + omega = clamp(omega, -Math.PI / 2, Math.PI / 2); + + // Send velocities to drive (field-oriented) + drive.driveFieldOriented(new ChassisSpeeds(vx, vy, omega)); + } + + @Override + public boolean isFinished() { + Pose2d currentPose = drive.getPose(); + double distance = currentPose.getTranslation().getDistance(targetPose.getTranslation()); + + double angleError = Math.abs(normalizeAngle( + targetPose.getRotation().getDegrees() - currentPose.getRotation().getDegrees() + )); + + boolean atTarget = distance < positionTolerance && angleError < ANGLE_TOLERANCE; + boolean timedOut = (Timer.getFPGATimestamp() - startTime) > timeoutSeconds; + + if (atTarget) { + System.out.println("[AutoDriveCommand] [OK] Reached target"); + } + if (timedOut) { + System.out.println("[AutoDriveCommand] [WARN] Timed out - distance: " + + String.format("%.2f", distance) + "m, angle error: " + + String.format("%.1f", angleError) + " deg"); + } + + return atTarget || timedOut; + } + + @Override + public void end(boolean interrupted) { + drive.stop(); + if (interrupted) { + System.out.println("[AutoDriveCommand] [WARN] Interrupted"); + } + } + + private double normalizeAngle(double angle) { + while (angle > 180) angle -= 360; + while (angle < -180) angle += 360; + return angle; + } + + private double clamp(double value, double min, double max) { + return Math.max(min, Math.min(max, value)); + } +} diff --git a/src/main/java/frc/robot/commands/auto/AutoFigure8.java b/src/main/java/frc/robot/commands/auto/AutoFigure8.java new file mode 100644 index 0000000..86a6291 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoFigure8.java @@ -0,0 +1,169 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Figure 8 Navigation Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Demonstrate advanced field navigation around reef obstacle + * + * Strategy: + * - Navigate in figure 8 pattern around entire Rebuilt field + * - Avoid center reef structure at all times + * - Left loop: Counter-clockwise around west side + * - Right loop: Clockwise around east side + * - Cross field safely above reef (Y=6.9m) + * + * Path Design: + * - Starts at Blue Alliance wall (X=1.5, Y=4.035) + * - Moves NORTH first to avoid reef collision + * - Left loop: X < 5.5m (stays west of reef) + * - Crosses at Y=6.9m (2.87m clearance above reef) + * - Right loop: X > 10.5m (stays east of reef) + * - Returns via safe northern route + * + * Safety Zones: + * - Reef danger zone: X=6.5-10.0m, Y=2.5-5.5m (avoided completely) + * - Crossing height: Y=6.9m (safe clearance) + * - Field boundaries: X=0.5-16.04m, Y=0.5-7.57m (0.5m margin) + * + * Points: 0 (navigation practice only) + * Time: ~35-40 seconds + * Purpose: Test autonomous navigation and obstacle avoidance + */ +public class AutoFigure8 extends SequentialCommandGroup { + + // Safety constants + private static final double REEF_CENTER_X = 8.27; + @SuppressWarnings("unused")// to suppress the error message because I don't like it. + private static final double REEF_CENTER_Y = 4.035; + private static final double SAFE_CROSSING_Y = 6.9; // 2.87m above reef center + private static final double LEFT_ZONE_MAX_X = 5.5; + private static final double RIGHT_ZONE_MIN_X = 10.5; + + // Initial safe movement - go NORTH first, then around perimeter + private static final Pose2d SAFE_NORTH = new Pose2d(1.5, SAFE_CROSSING_Y, Rotation2d.fromDegrees(0)); + + // LEFT LOOP waypoints (counter-clockwise around left side) + private static final Pose2d LEFT_TOP = new Pose2d(3.0, 7.4, Rotation2d.fromDegrees(0)); + private static final Pose2d LEFT_MID_EAST = new Pose2d(LEFT_ZONE_MAX_X, 6.3, Rotation2d.fromDegrees(-45)); + private static final Pose2d LEFT_BOTTOM = new Pose2d(3.5, 1.5, Rotation2d.fromDegrees(-90)); + private static final Pose2d LEFT_MID_RETURN = new Pose2d(5.0, 3.0, Rotation2d.fromDegrees(45)); + + // CROSSING waypoint - safely ABOVE the reef + private static final Pose2d CROSSING_NORTH = new Pose2d(REEF_CENTER_X, SAFE_CROSSING_Y, Rotation2d.fromDegrees(0)); + + // RIGHT LOOP waypoints (clockwise around right side) + private static final Pose2d RIGHT_TOP = new Pose2d(11.5, 7.4, Rotation2d.fromDegrees(0)); + private static final Pose2d RIGHT_EAST = new Pose2d(13.5, 5.0, Rotation2d.fromDegrees(-90)); + private static final Pose2d RIGHT_BOTTOM = new Pose2d(11.0, 1.5, Rotation2d.fromDegrees(-135)); + private static final Pose2d RIGHT_MID_RETURN = new Pose2d(RIGHT_ZONE_MIN_X, 3.5, Rotation2d.fromDegrees(135)); + + // Return crossing - back north of reef + private static final Pose2d CROSSING_RETURN = new Pose2d(REEF_CENTER_X, SAFE_CROSSING_Y, Rotation2d.fromDegrees(180)); + + public AutoFigure8(DriveSubsystem drive) { + addCommands( + // Print start message + Commands.runOnce(() -> { + System.out.println("\n========== FIGURE 8 NAV - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Advanced field navigation practice"); + System.out.println("Objective: Navigate figure 8 avoiding reef obstacle"); + System.out.println("Left Loop: Y=1.5-7.4m, X=1.5-5.5m (stays west of reef)"); + System.out.println("Right Loop: Y=1.5-7.4m, X=10.5-13.5m (stays east of reef)"); + System.out.println("Crossing: Y=6.9m (2.87m clearance above reef center)"); + System.out.println("Expected Points: 0 (navigation practice)"); + System.out.println("Field: 16.54m × 8.07m (Rebuilt 2025)"); + System.out.println("=====================================================\n"); + }), + + // Start from Blue Alliance position + Commands.runOnce(() -> { + drive.stop(); + System.out.println("[Figure8] Starting from Blue Alliance wall"); + System.out.println("[Figure8] Phase 1: Moving NORTH to safe crossing height..."); + }), + Commands.waitSeconds(0.5), + + // FIRST: Move NORTH along wall (no forward movement toward reef!) + new AutoDriveCommand(drive, SAFE_NORTH, 0.25, 2.5, 4.0), + Commands.waitSeconds(0.3), + + // === LEFT LOOP (Counter-clockwise) === + Commands.runOnce(() -> System.out.println("[Figure8] Phase 2: LEFT LOOP (counter-clockwise)")), + + new AutoDriveCommand(drive, LEFT_TOP, 0.25, 3.0, 4.0), + Commands.waitSeconds(0.2), + + Commands.runOnce(() -> System.out.println("[Figure8] Moving east (staying north of reef)")), + new AutoDriveCommand(drive, LEFT_MID_EAST, 0.30, 3.5, 4.5), + Commands.waitSeconds(0.2), + + Commands.runOnce(() -> System.out.println("[Figure8] Moving south along left safe zone")), + new AutoDriveCommand(drive, LEFT_BOTTOM, 0.35, 4.0, 5.0), + Commands.waitSeconds(0.2), + + Commands.runOnce(() -> System.out.println("[Figure8] Completing left loop - returning north")), + new AutoDriveCommand(drive, LEFT_MID_RETURN, 0.30, 3.5, 4.5), + Commands.waitSeconds(0.3), + + // === CROSS TO RIGHT SIDE (Above reef) === + Commands.runOnce(() -> System.out.println("[Figure8] Phase 3: CROSSING to right side (above reef)")), + new AutoDriveCommand(drive, CROSSING_NORTH, 0.35, 4.5, 5.0), + Commands.waitSeconds(0.4), + + // === RIGHT LOOP (Clockwise) === + Commands.runOnce(() -> System.out.println("[Figure8] Phase 4: RIGHT LOOP (clockwise)")), + + new AutoDriveCommand(drive, RIGHT_TOP, 0.30, 4.0, 4.5), + Commands.waitSeconds(0.2), + + Commands.runOnce(() -> System.out.println("[Figure8] Moving south along right safe zone")), + new AutoDriveCommand(drive, RIGHT_EAST, 0.35, 4.5, 5.0), + Commands.waitSeconds(0.2), + + new AutoDriveCommand(drive, RIGHT_BOTTOM, 0.35, 4.5, 5.0), + Commands.waitSeconds(0.2), + + Commands.runOnce(() -> System.out.println("[Figure8] Completing right loop - returning north")), + new AutoDriveCommand(drive, RIGHT_MID_RETURN, 0.30, 4.0, 4.5), + Commands.waitSeconds(0.3), + + // === CROSS BACK (Above reef) === + Commands.runOnce(() -> System.out.println("[Figure8] Phase 5: Crossing back (above reef)")), + new AutoDriveCommand(drive, CROSSING_RETURN, 0.35, 4.5, 5.0), + Commands.waitSeconds(0.3), + + // Return to safe zone + Commands.runOnce(() -> System.out.println("[Figure8] Phase 6: Returning to Blue safe zone")), + new AutoDriveCommand(drive, SAFE_NORTH, 0.25, 3.5, 4.0), + Commands.waitSeconds(0.2), + new AutoDriveCommand(drive, FieldConstants.BLUE_SAFE_ZONE, 0.20, 3.0, 4.0), + + // Finish + Commands.runOnce(() -> { + drive.stop(); + drive.lock(); + Pose2d finalPose = drive.getPose(); + System.out.println("\n[Figure8] [OK] Complete!"); + System.out.println("[Figure8] Figure 8 pattern completed with ZERO collisions"); + System.out.println("[Figure8] Final position: (" + + String.format("%.2f, %.2f @ %.0f deg", finalPose.getX(), finalPose.getY(), finalPose.getRotation().getDegrees()) + ")"); + System.out.println("[Figure8] Total distance: ~35 meters\n"); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} + + diff --git a/src/main/java/frc/robot/commands/auto/AutoPickupAuto.java b/src/main/java/frc/robot/commands/auto/AutoPickupAuto.java new file mode 100644 index 0000000..18bddc7 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoPickupAuto.java @@ -0,0 +1,80 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Pickup Cycles Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Practice rapid coral pickup and scoring cycles + * + * Strategy (3-cycle auto): + * 1. Score preloaded coral on Reef Front (3 pts) + * 2. Cycle 1: Pickup from Coral Station → Score on Reef Left (3 pts) + * 3. Cycle 2: Pickup from Coral Station → Score on Reef Right (3 pts) + * 4. Return to safe zone + * + * Points: 9 points (3 corals × 3 points each) + * Time: ~22-25 seconds + * Focus: Speed and efficiency in coral handling + */ +public class AutoPickupAuto extends SequentialCommandGroup { + + public AutoPickupAuto(DriveSubsystem drive) { + addCommands( + Commands.runOnce(() -> { + System.out.println("\n========== PICKUP CYCLES - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Rapid coral pickup and scoring cycles"); + System.out.println("Target: 3 corals (preload + 2 pickups)"); + System.out.println("Expected Points: 9 (3 × 3 pts)"); + System.out.println("======================================================\n"); + }), + + Commands.runOnce(() -> drive.stop()), + Commands.waitSeconds(0.3), + + // Cycle 1: Preload to Reef Front + Commands.runOnce(() -> System.out.println("[PickupCycles] Cycle 1: Scoring preload")), + new AutoDriveCommand(drive, FieldConstants.REEF_FRONT, 2.5, 6.0), + Commands.waitSeconds(0.8), + + // Pickup from Coral Station + Commands.runOnce(() -> System.out.println("[PickupCycles] Cycle 1: Picking up coral")), + new AutoDriveCommand(drive, FieldConstants.BLUE_CORAL_STATION, 2.5, 6.0), + Commands.waitSeconds(0.8), + + // Cycle 2: Score on Reef Left + Commands.runOnce(() -> System.out.println("[PickupCycles] Cycle 2: Scoring on Reef Left")), + new AutoDriveCommand(drive, FieldConstants.REEF_LEFT, 2.5, 6.0), + Commands.waitSeconds(0.8), + + // Pickup from Coral Station + Commands.runOnce(() -> System.out.println("[PickupCycles] Cycle 2: Picking up coral")), + new AutoDriveCommand(drive, FieldConstants.BLUE_CORAL_STATION, 2.5, 6.0), + Commands.waitSeconds(0.8), + + // Cycle 3: Score on Reef Right + Commands.runOnce(() -> System.out.println("[PickupCycles] Cycle 3: Scoring on Reef Right")), + new AutoDriveCommand(drive, FieldConstants.REEF_RIGHT, 2.5, 6.0), + Commands.waitSeconds(0.8), + + // Return home + Commands.runOnce(() -> System.out.println("[PickupCycles] Returning to safe zone")), + new AutoDriveCommand(drive, FieldConstants.BLUE_SAFE_ZONE, 2.0, 6.0), + + Commands.runOnce(() -> { + drive.stop(); + drive.lock(); + System.out.println("[PickupCycles] [OK] Complete - 3 pieces scored\n"); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/AutoProcessorAuto.java b/src/main/java/frc/robot/commands/auto/AutoProcessorAuto.java new file mode 100644 index 0000000..c963bc5 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoProcessorAuto.java @@ -0,0 +1,53 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Processor Scoring Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Score coral in processor station + * + * Strategy: + * 1. Start with preloaded coral + * 2. Navigate to Processor station + * 3. Score coral in processor (4 points - higher value!) + * 4. Return to safe zone + * + * Points: 4 points (processor scoring bonus) + * Time: ~15 seconds + * Note: Processor scores are worth more than reef (4 pts vs 3 pts) + */ +public class AutoProcessorAuto extends SequentialCommandGroup { + + public AutoProcessorAuto(DriveSubsystem drive) { + addCommands( + Commands.runOnce(() -> { + System.out.println("\n========== PROCESSOR AUTO - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Score coral in processor station"); + System.out.println("Expected Points: 4 (processor bonus)"); + System.out.println("=======================================================\n"); + }), + Commands.runOnce(() -> drive.stop()), + Commands.waitSeconds(0.3), + Commands.runOnce(() -> System.out.println("[Processor] Driving to processor")), + new AutoDriveCommand(drive, FieldConstants.PROCESSOR, 2.5, 8.0), + Commands.waitSeconds(1.5), + Commands.runOnce(() -> System.out.println("[Processor] Returning")), + new AutoDriveCommand(drive, FieldConstants.BLUE_SAFE_ZONE, 2.5, 8.0), + Commands.runOnce(() -> { + drive.stop(); + drive.lock(); + System.out.println("[Processor] Complete\n"); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/AutoSafeScore.java b/src/main/java/frc/robot/commands/auto/AutoSafeScore.java new file mode 100644 index 0000000..a1c61f9 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoSafeScore.java @@ -0,0 +1,53 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Safe Score Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Conservative, reliable single coral scoring + * + * Strategy: + * 1. Start with preloaded coral + * 2. Drive to Reef Front (nearest, safest approach) + * 3. Score coral on Level 1 (3 points) + * 4. Return to safe zone immediately + * + * Points: 3 points (guaranteed) + * Time: ~12-15 seconds + * Best for: Reliability, untested robots, practice matches + */ +public class AutoSafeScore extends SequentialCommandGroup { + + public AutoSafeScore(DriveSubsystem drive) { + addCommands( + Commands.runOnce(() -> { + System.out.println("\n========== SAFE SCORE - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Conservative single coral scoring"); + System.out.println("Expected Points: 3 (1 coral, guaranteed)"); + System.out.println("===================================================\n"); + }), + Commands.runOnce(() -> drive.stop()), + Commands.waitSeconds(0.3), + Commands.runOnce(() -> System.out.println("[SafeScore] Driving to Reef Front")), + new AutoDriveCommand(drive, FieldConstants.REEF_FRONT, 2.0, 8.0), + Commands.waitSeconds(1.5), + Commands.runOnce(() -> System.out.println("[SafeScore] Returning to safe zone")), + new AutoDriveCommand(drive, FieldConstants.BLUE_SAFE_ZONE, 2.0, 8.0), + Commands.runOnce(() -> { + drive.stop(); + drive.lock(); + System.out.println("[SafeScore] Complete\n"); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/AutoTripleScore.java b/src/main/java/frc/robot/commands/auto/AutoTripleScore.java new file mode 100644 index 0000000..c3745df --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoTripleScore.java @@ -0,0 +1,60 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Triple Score Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Score on all three reef branches (no pickup cycles) + * + * Strategy: + * Assumes robot has 3 preloaded corals (or uses ground corals) + * 1. Score on Reef Front branch (0°) + * 2. Score on Reef Left branch (120°) + * 3. Score on Reef Right branch (60°) + * 4. Return to safe zone + * + * Points: 9 points (3 corals × 3 points each) + * Time: ~20 seconds + * Note: Requires multi-coral storage or ground pickup capability + */ +public class AutoTripleScore extends SequentialCommandGroup { + + public AutoTripleScore(DriveSubsystem drive) { + addCommands( + Commands.runOnce(() -> { + System.out.println("\n========== TRIPLE SCORE - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Score on all 3 reef branches"); + System.out.println("Expected Points: 9 (3 corals × 3 pts)"); + System.out.println("======================================================\n"); + }), + Commands.runOnce(() -> drive.stop()), + Commands.waitSeconds(0.3), + Commands.runOnce(() -> System.out.println("[TripleScore] Score 1: Reef Front")), + new AutoDriveCommand(drive, FieldConstants.REEF_FRONT, 2.5, 8.0), + Commands.waitSeconds(1.5), + Commands.runOnce(() -> System.out.println("[TripleScore] Score 2: Reef Left")), + new AutoDriveCommand(drive, FieldConstants.REEF_LEFT, 2.5, 8.0), + Commands.waitSeconds(1.5), + Commands.runOnce(() -> System.out.println("[TripleScore] Score 3: Reef Right")), + new AutoDriveCommand(drive, FieldConstants.REEF_RIGHT, 2.5, 8.0), + Commands.waitSeconds(1.5), + Commands.runOnce(() -> System.out.println("[TripleScore] Returning to safe zone")), + new AutoDriveCommand(drive, FieldConstants.BLUE_SAFE_ZONE, 2.5, 10.0), + Commands.runOnce(() -> { + drive.stop(); + drive.lock(); + System.out.println("[TripleScore] Complete - 3 pieces scored\n"); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/SequentialAuto.java b/src/main/java/frc/robot/commands/auto/SequentialAuto.java new file mode 100644 index 0000000..fc8733b --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/SequentialAuto.java @@ -0,0 +1,100 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Sequential Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Multi-waypoint coral scoring demonstration + * + * Strategy: + * 1. Start at Blue Alliance + * 2. Navigate to Coral Station → Pickup coral + * 3. Navigate to Reef Left branch → Score coral (3 pts) + * 4. Return to safe zone for endgame + * + * Points: 3 points (1 coral from pickup) + * Time: ~20 seconds + * Purpose: Demonstrates path planning and waypoint navigation + */ +public class SequentialAuto extends SequentialCommandGroup { + + public SequentialAuto(DriveSubsystem drive) { + addCommands( + // Startup diagnostics + Commands.runOnce(() -> { + System.out.println("\n========== SEQUENTIAL AUTO - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Multi-waypoint coral scoring"); + Pose2d startPose = drive.getPose(); + System.out.println("Starting position: (" + + String.format("%.2f, %.2f", startPose.getX(), startPose.getY()) + ")"); + System.out.println("Waypoints:"); + System.out.println(" 1. Coral Station: (1.2, 7.0) - Pickup"); + System.out.println(" 2. Reef Left: (7.2, 5.0) - Score (3 pts)"); + System.out.println(" 3. Safe Zone: (2.0, 1.5) - Return"); + System.out.println("Expected Points: 3"); + System.out.println("Field: 16.54m × 8.07m (Rebuilt 2025)"); + System.out.println("========================================================\n"); + }), + + // Initialize: Verify starting position + Commands.runOnce(() -> { + System.out.println("[SequentialAuto] Verifying start position..."); + drive.stop(); + }), + Commands.waitSeconds(0.5), + + // Waypoint 1: Drive to Coral Station + Commands.runOnce(() -> { + System.out.println("[SequentialAuto] Waypoint 1: Driving to Coral Station (1.2, 7.0)"); + }), + new AutoDriveCommand( + drive, + FieldConstants.BLUE_CORAL_STATION, + 2.0, 8.0 + ), + Commands.waitSeconds(1.0), // Pickup time + + // Waypoint 2: Drive to Reef Left branch + Commands.runOnce(() -> { + System.out.println("[SequentialAuto] Waypoint 2: Driving to Reef Left (7.57, 5.105)"); + }), + new AutoDriveCommand( + drive, + FieldConstants.REEF_LEFT, + 2.5, 8.0 + ), + Commands.waitSeconds(1.5), // Score time + + // Waypoint 3: Return to safe zone + Commands.runOnce(() -> { + System.out.println("[SequentialAuto] Waypoint 3: Returning to safe zone"); + }), + new AutoDriveCommand( + drive, + FieldConstants.BLUE_SAFE_ZONE, + 2.5, 8.0 + ), + + // Finish + Commands.runOnce(() -> { + Pose2d finalPose = drive.getPose(); + System.out.println("[SequentialAuto] Complete at (" + + String.format("%.2f, %.2f", finalPose.getX(), finalPose.getY()) + ")"); + drive.stop(); + drive.lock(); + System.out.println(); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/commands/auto/SimpleAuto.java b/src/main/java/frc/robot/commands/auto/SimpleAuto.java new file mode 100644 index 0000000..8da67f3 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/SimpleAuto.java @@ -0,0 +1,94 @@ +package frc.robot.commands.auto; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.Constants.FieldConstants; +import frc.robot.subsystems.DriveSubsystem; + +/** + * Simple Auto - FIRST Rebuilt 2025 Strategy + * + * Game: FIRST Reefscape Rebuilt + * Objective: Score preloaded coral on reef center structure + * + * Strategy: + * 1. Start at Blue Alliance starting zone with preloaded coral + * 2. Drive to Reef Front scoring position (nearest branch) + * 3. Score coral on reef (Level 1 - 3 points) + * 4. Return to safe zone for endgame positioning + * + * Points: 3 points (1 coral on reef) + * Time: ~12 seconds + * Reliability: High - simple path, minimal risk + */ +public class SimpleAuto extends SequentialCommandGroup { + + public SimpleAuto(DriveSubsystem drive) { + addCommands( + // Startup diagnostics + Commands.runOnce(() -> { + System.out.println("\n========== SIMPLE AUTO - FIRST REBUILT 2025 =========="); + System.out.println("Strategy: Score preloaded coral on reef"); + Pose2d startPose = drive.getPose(); + System.out.println("Starting position: (" + + String.format("%.2f, %.2f", startPose.getX(), startPose.getY()) + ")"); + System.out.println("Target: Reef Front (8.27, 2.5)"); + System.out.println("Expected Points: 3 (Level 1 coral)"); + System.out.println("Field: 16.54m × 8.07m (Rebuilt 2025)"); + System.out.println("====================================================\n"); + }), + + // Step 1: Confirm starting position and stabilize + Commands.runOnce(() -> { + System.out.println("[SimpleAuto] Step 1: Confirming at valid field position"); + drive.stop(); + }), + Commands.waitSeconds(0.5), + + // Step 2: Drive to Reef Front approach + Commands.runOnce(() -> { + System.out.println("[SimpleAuto] Step 2: Driving to Reef front (8.77, 2.6)"); + }), + new AutoDriveCommand( + drive, + FieldConstants.REEF_FRONT, // Approaches from front + 2.0, // max speed (m/s) + 8.0 // timeout + ), + + // Step 3: Simulate scoring + Commands.runOnce(() -> { + System.out.println("[SimpleAuto] Step 3: Attempting to score..."); + drive.stop(); + }), + Commands.waitSeconds(1.5), // Time for intake/mechanism + + // Step 4: Return to safe zone + Commands.runOnce(() -> { + System.out.println("[SimpleAuto] Step 4: Returning to safe zone"); + }), + new AutoDriveCommand( + drive, + FieldConstants.BLUE_SAFE_ZONE, + 2.5, + 8.0 + ), + + // Finish + Commands.runOnce(() -> { + Pose2d finalPose = drive.getPose(); + System.out.println("[SimpleAuto] Complete at (" + + String.format("%.2f, %.2f", finalPose.getX(), finalPose.getY()) + ")"); + drive.stop(); + drive.lock(); + System.out.println(); + }), + + // Hold position until autonomous ends - prevents default command from taking over + Commands.run(() -> { + drive.stop(); + }, drive).withName("HoldPosition") + ); + } +} diff --git a/src/main/java/frc/robot/subsystems/2026ChassisBot.code-workspace b/src/main/java/frc/robot/subsystems/2026ChassisBot.code-workspace new file mode 100644 index 0000000..856a5af --- /dev/null +++ b/src/main/java/frc/robot/subsystems/2026ChassisBot.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": "../../../../../.." + } + ] +} \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/DriveSubsystem.java b/src/main/java/frc/robot/subsystems/DriveSubsystem.java new file mode 100644 index 0000000..b8a1011 --- /dev/null +++ b/src/main/java/frc/robot/subsystems/DriveSubsystem.java @@ -0,0 +1,560 @@ +package frc.robot.subsystems; + +import java.io.File; +import java.util.function.DoubleSupplier; + +import edu.wpi.first.math.geometry.*; +import edu.wpi.first.math.kinematics.ChassisSpeeds; +import edu.wpi.first.wpilibj.DriverStation; +import edu.wpi.first.wpilibj.Filesystem; +import edu.wpi.first.wpilibj.RobotBase; +import edu.wpi.first.wpilibj.Timer; +import edu.wpi.first.wpilibj.smartdashboard.Field2d; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.SubsystemBase; +import frc.robot.Constants.DriveConstants; +import swervelib.SwerveDrive; +import swervelib.parser.SwerveParser; + +public class DriveSubsystem extends SubsystemBase { + private SwerveDrive swerveDrive; + private final Field2d field2d; + private boolean initialized = false; + private boolean hasZeroed = false; + private long lastErrorTime = 0; + private static final long ERROR_THROTTLE_MS = 500; + + private double currentXSpeed = 0.0; + private double currentYSpeed = 0.0; + private double currentRotSpeed = 0.0; + + private double startupTime = 0; + private static final double STARTUP_DELAY_SECONDS = 0.5; + private static final double DEADZONE_THRESHOLD = 0.05; + private static final double ROTATION_DEADZONE = 0.05; + private static final double MAX_SPEED_LIMIT = 5.0; + + public DriveSubsystem(File directory) { + field2d = new Field2d(); + SmartDashboard.putData("Field", field2d); + + currentXSpeed = 0.0; + currentYSpeed = 0.0; + currentRotSpeed = 0.0; + + initializeSwerve(); + + startupTime = Timer.getFPGATimestamp(); + + stop(); + } + + private void initializeSwerve() { + try { + File swerveJsonDirectory = new File(Filesystem.getDeployDirectory(), "SWERVE"); + + if (!swerveJsonDirectory.exists()) { + logError("SWERVE directory not found: " + swerveJsonDirectory.getAbsolutePath()); + return; + } + + File[] files = swerveJsonDirectory.listFiles(); + if (files != null) { + logDebug("Files in SWERVE directory:"); + for (File f : files) { + logDebug(" - " + f.getName()); + } + } + + logDebug("Creating SwerveDrive with max speed: " + DriveConstants.MAX_SPEED_MPS + " m/s"); + logDebug("Running in " + (RobotBase.isSimulation() ? "SIMULATION" : "REAL") + " mode"); + + swerveDrive = new SwerveParser(swerveJsonDirectory).createSwerveDrive(DriveConstants.MAX_SPEED_MPS); + + // CRITICAL: Disable heading correction to prevent phantom spinning + // Heading correction tries to maintain heading when not rotating, but can cause unwanted rotation + swerveDrive.setHeadingCorrection(false); + + verifyModules(); + initialized = true; + + if (swerveDrive != null) { + try { + swerveDrive.drive(new Translation2d(0, 0), 0, false, false); + Thread.sleep(100); + } catch (Exception e) { + logDebug("Initial drive stop: " + e.getMessage()); + } + } + + try { + if (swerveDrive != null) { + var initialHeading = swerveDrive.getOdometryHeading(); + logDebug("Initial gyro heading: " + initialHeading.getDegrees() + "°"); + SmartDashboard.putNumber("Drive/Initial Heading", initialHeading.getDegrees()); + } + } catch (Exception e) { + logDebug("Could not read initial heading: " + e.getMessage()); + } + + zeroGyro(); + synchronizeModuleEncoders(); + + if (swerveDrive != null) { + try { + swerveDrive.driveFieldOriented(new ChassisSpeeds(0, 0, 0)); + Thread.sleep(100); + } catch (Exception e) { + logDebug("Post-zero stop: " + e.getMessage()); + } + } + + SmartDashboard.putBoolean("Drive/Initialized", true); + logDebug("Swerve drive initialized successfully"); + + } catch (Exception e) { + logError("FATAL ERROR during swerve initialization: " + e.getMessage()); + e.printStackTrace(); + SmartDashboard.putString("Drive/Error", "Init failed: " + e.getMessage()); + SmartDashboard.putBoolean("Drive/Initialized", false); + } + + SmartDashboard.putNumber("Drive/Max Speed (m/s)", DriveConstants.MAX_SPEED_MPS); + SmartDashboard.putNumber("Drive/Max Angular Velocity (rad/s)", DriveConstants.MAX_ANGULAR_VELOCITY); + } + + private void verifyModules() { + var modules = swerveDrive.getModules(); + logDebug("Loaded " + modules.length + " swerve modules"); + SmartDashboard.putNumber("Drive/Module Count", modules.length); + + int validModules = 0; + for (int i = 0; i < modules.length; i++) { + boolean isValid = modules[i] != null; + if (isValid) validModules++; + logDebug("Module " + i + ": " + (isValid ? "OK" : "NULL")); + SmartDashboard.putBoolean("Drive/Module " + i + " OK", isValid); + } + + if (validModules != 4) { + logError("Only " + validModules + "/4 modules loaded successfully"); + } + } + + private void logError(String message) { + long now = System.currentTimeMillis(); + if (now - lastErrorTime > ERROR_THROTTLE_MS) { + System.out.println("[DriveSubsystem ERROR] " + message); + SmartDashboard.putString("Drive/Error", message); + DriverStation.reportError(message, false); + lastErrorTime = now; + } + } + + private void logDebug(String message) { + System.out.println("[DriveSubsystem] " + message); + } + + public void zeroGyro() { + if (!isInitialized()) return; + + try { + swerveDrive.zeroGyro(); + SmartDashboard.putBoolean("Drive/Gyro Zeroed", true); + logDebug("Gyro zeroed"); + } catch (Exception e) { + logError("zeroGyro error: " + e.getMessage()); + } + } + + public void synchronizeModuleEncoders() { + if (!isInitialized()) return; + + try { + swerveDrive.synchronizeModuleEncoders(); + hasZeroed = true; + SmartDashboard.putBoolean("Drive/Modules Synced", true); + logDebug("Module encoders synchronized"); + } catch (Exception e) { + DriverStation.reportWarning("synchronizeModuleEncoders error: " + e.getMessage(), true); + } + } + + public boolean isInitialized() { + return initialized && swerveDrive != null; + } + + private boolean isReadyToDrive() { + return (Timer.getFPGATimestamp() - startupTime) >= STARTUP_DELAY_SECONDS; + } + + private double clamp(double value, double min, double max) { + return Math.max(min, Math.min(max, value)); + } + + private double applyDeadzone(double value) { + double absValue = Math.abs(value); + if (absValue < DEADZONE_THRESHOLD) { + return 0.0; + } + double sign = Math.signum(value); + return sign * ((absValue - DEADZONE_THRESHOLD) / (1.0 - DEADZONE_THRESHOLD)); + } + + private double applyRotationDeadzone(double value) { + double absValue = Math.abs(value); + if (absValue < ROTATION_DEADZONE) { + return 0.0; + } + double sign = Math.signum(value); + return sign * ((absValue - ROTATION_DEADZONE) / (1.0 - ROTATION_DEADZONE)); + } + @SuppressWarnings("unused") + private ChassisSpeeds limitSpeeds(ChassisSpeeds speeds) { + double linearMagnitude = Math.hypot(speeds.vxMetersPerSecond, speeds.vyMetersPerSecond); + double angularMagnitude = Math.abs(speeds.omegaRadiansPerSecond); + + if (linearMagnitude == 0 && angularMagnitude == 0) { + return speeds; + } + + double linearLimit = Math.min(1.0, MAX_SPEED_LIMIT / Math.max(linearMagnitude, 0.01)); + double angularLimit = Math.min(1.0, DriveConstants.MAX_ANGULAR_VELOCITY / Math.max(angularMagnitude, 0.01)); + + double limitFactor = Math.min(linearLimit, angularLimit); + + return new ChassisSpeeds( + speeds.vxMetersPerSecond * limitFactor, + speeds.vyMetersPerSecond * limitFactor, + speeds.omegaRadiansPerSecond * limitFactor + ); + } + + public Command driveCommand(DoubleSupplier translationX, DoubleSupplier translationY, + DoubleSupplier rotationX) { + return run(() -> { + if (!isReadyToDrive()) { + stop(); + SmartDashboard.putString("Debug/DriveState", "NOT READY - waiting for startup"); + return; + } + + try { + double rawX = translationX.getAsDouble(); + double rawY = translationY.getAsDouble(); + double rawRot = rotationX.getAsDouble(); + + double xInput = applyDeadzone(rawX); + double yInput = applyDeadzone(rawY); + double rotInput = applyRotationDeadzone(rawRot); + + // Debug: show exactly what the inputs are at every stage + SmartDashboard.putNumber("Debug/Raw X", rawX); + SmartDashboard.putNumber("Debug/Raw Y", rawY); + SmartDashboard.putNumber("Debug/Raw Rot", rawRot); + SmartDashboard.putNumber("Debug/After Deadzone X", xInput); + SmartDashboard.putNumber("Debug/After Deadzone Y", yInput); + SmartDashboard.putNumber("Debug/After Deadzone Rot", rotInput); + + xInput = clamp(xInput, -1.0, 1.0); + yInput = clamp(yInput, -1.0, 1.0); + rotInput = clamp(rotInput, -1.0, 1.0); + + currentXSpeed = xInput * DriveConstants.MAX_SPEED_MPS; + currentYSpeed = yInput * DriveConstants.MAX_SPEED_MPS; + currentRotSpeed = rotInput * DriveConstants.MAX_ANGULAR_VELOCITY; + + SmartDashboard.putNumber("Debug/Final vX", currentXSpeed); + SmartDashboard.putNumber("Debug/Final vY", currentYSpeed); + SmartDashboard.putNumber("Debug/Final Omega", currentRotSpeed); + SmartDashboard.putString("Debug/DriveState", "DRIVING"); + + // ALWAYS use YAGSL for driving — it handles both real and sim internally. + // Trying to bypass YAGSL in sim caused the oscillation because YAGSL's own + // periodic() still runs and conflicts with our manual sim pose. + if (isInitialized()) { + swerveDrive.drive( + new Translation2d(currentXSpeed, currentYSpeed), + currentRotSpeed, + false, // robot-oriented to avoid gyro issues + false); // closed-loop for stable sim + } + + } catch (Exception e) { + logError("Drive command error: " + e.getMessage()); + stop(); + } + }).withName("DriveCommand"); + } + + // Removed deprecated driveFieldOrientedSafe - all drive paths now use YAGSL consistently + + public void stop() { + currentXSpeed = 0.0; + currentYSpeed = 0.0; + currentRotSpeed = 0.0; + + // Always tell YAGSL to stop — it handles sim internally + if (isInitialized()) { + try { + swerveDrive.drive(new Translation2d(0, 0), 0.0, false, false); + } catch (Exception e) { + logError("Stop error: " + e.getMessage()); + } + } + SmartDashboard.putString("Drive/Status", "Stopped"); + } + + public void lock() { + if (isInitialized()) { + try { + swerveDrive.lockPose(); + SmartDashboard.putBoolean("Drive/Locked", true); + } catch (Exception e) { + logError("Lock error: " + e.getMessage()); + } + } + } + + public void seedForwards() { + try { + zeroGyro(); + Pose2d pose = getPose(); + resetOdometry(new Pose2d(pose.getX(), pose.getY(), Rotation2d.kZero)); + SmartDashboard.putBoolean("Drive/Heading Reset", true); + } catch (Exception e) { + logError("seedForwards error: " + e.getMessage()); + } + } + + public void driveFieldOriented(ChassisSpeeds velocity) { + if (velocity == null) { + velocity = new ChassisSpeeds(0, 0, 0); + } + + currentXSpeed = velocity.vxMetersPerSecond; + currentYSpeed = velocity.vyMetersPerSecond; + currentRotSpeed = velocity.omegaRadiansPerSecond; + + // Always use YAGSL — it handles sim internally via maple-sim + if (isInitialized()) { + try { + swerveDrive.driveFieldOriented(velocity); + } catch (Exception e) { + logError("driveFieldOriented error: " + e.getMessage()); + } + } + } + + public Pose2d getPose() { + // Always use YAGSL's pose — it tracks sim state internally + if (isInitialized()) { + try { + return swerveDrive.getPose(); + } catch (Exception e) { + logError("getPose error: " + e.getMessage()); + } + } + return new Pose2d(); + } + + public void resetOdometry(Pose2d pose) { + if (pose == null) { + pose = new Pose2d(); + } + + if (isInitialized()) { + try { + swerveDrive.resetOdometry(pose); + } catch (Exception e) { + logError("resetOdometry error: " + e.getMessage()); + } + } + + SmartDashboard.putString("Drive/Last Reset Pose", + String.format("(%.2f, %.2f) @ %.1f°", pose.getX(), pose.getY(), pose.getRotation().getDegrees())); + } + + public void addVisionMeasurement(Pose2d visionPose, double timestamp) { + if (visionPose == null || !isInitialized()) { + return; + } + + try { + swerveDrive.addVisionMeasurement(visionPose, timestamp); + } catch (Exception e) { + logError("addVisionMeasurement error: " + e.getMessage()); + } + } + + public Field2d getField2d() { + return field2d; + } + + public double getMaxSpeed() { + return DriveConstants.MAX_SPEED_MPS; + } + + public void printEncoderOffsets() { + if (!isInitialized()) { + System.out.println("Drive not initialized - cannot read encoders"); + return; + } + + String[] moduleNames = {"Front Left", "Front Right", "Back Left", "Back Right"}; + System.out.println("========== ENCODER OFFSETS =========="); + + try { + var modules = swerveDrive.getModules(); + for (int i = 0; i < modules.length && i < moduleNames.length; i++) { + if (modules[i] != null) { + double angle = modules[i].getAbsolutePosition(); + System.out.println(moduleNames[i] + ": " + angle + " degrees"); + SmartDashboard.putNumber("Calibration/" + moduleNames[i] + " Offset", angle); + } + } + } catch (Exception e) { + logError("Error reading encoders: " + e.getMessage()); + } + System.out.println("======================================"); + } + + public void diagnoseGyro() { + if (!isInitialized()) { + System.out.println("Drive not initialized"); + return; + } + + try { + var heading = swerveDrive.getOdometryHeading(); + System.out.println("=== GYRO DIAGNOSTICS ==="); + System.out.println("Heading: " + heading.getDegrees() + "°"); + System.out.println("If heading changes without commands, gyro has drift"); + System.out.println("========================"); + SmartDashboard.putNumber("Gyro/Heading", heading.getDegrees()); + } catch (Exception e) { + logError("Gyro diagnostic error: " + e.getMessage()); + } + } + + public void diagnoseMotorInversions() { + if (!isInitialized()) { + System.out.println("Drive not initialized"); + return; + } + + System.out.println("=== MOTOR INVERSION DIAGNOSTICS ==="); + String[] moduleNames = {"Front Left", "Front Right", "Back Left", "Back Right"}; + + try { + var modules = swerveDrive.getModules(); + for (int i = 0; i < modules.length && i < moduleNames.length; i++) { + if (modules[i] != null) { + System.out.println("\n" + moduleNames[i] + ":"); + System.out.println(" Absolute Position: " + modules[i].getAbsolutePosition() + "°"); + SmartDashboard.putNumber("Diag/" + moduleNames[i] + " Abs Pos", + modules[i].getAbsolutePosition()); + } + } + + // Check gyro heading - THIS IS OFTEN THE CAUSE OF ROTATION ISSUES + var heading = swerveDrive.getOdometryHeading(); + System.out.println("\n=== GYRO HEADING CHECK ==="); + System.out.println("Current Heading: " + heading.getDegrees() + "°"); + System.out.println("If heading is NOT 0° when robot faces forward, wheels will spin!"); + System.out.println("Press POV Up to zero gyro if needed."); + + System.out.println("\n=== EXPECTED BEHAVIOR ==="); + System.out.println("1. When driving forward (Y+), all modules should point forward"); + System.out.println("2. When driving left (X+), all modules should point left"); + System.out.println("3. When rotating CCW, modules should form an X pattern"); + System.out.println("4. If robot spins unexpectedly:"); + System.out.println(" - Check if gyro heading is 0 when facing forward"); + System.out.println(" - Check 'invertedIMU' in swervedrive.json"); + System.out.println(" - Try pressing POV Up to zero gyro"); + System.out.println("5. If robot drives wrong direction, check drive motor 'inverted' settings"); + System.out.println("==================================="); + + } catch (Exception e) { + logError("Motor inversion diagnostic error: " + e.getMessage()); + } + } + + @Override + public void periodic() { + try { + Pose2d pose = getPose(); + field2d.setRobotPose(pose); + + SmartDashboard.putNumber("Drive/Pose X (m)", pose.getX()); + SmartDashboard.putNumber("Drive/Pose Y (m)", pose.getY()); + SmartDashboard.putNumber("Drive/Pose Rotation (deg)", pose.getRotation().getDegrees()); + + if (isInitialized()) { + try { + var heading = swerveDrive.getOdometryHeading(); + SmartDashboard.putNumber("Drive/Heading (deg)", heading.getDegrees()); + + if (Math.abs(currentRotSpeed) < 0.01 && !isReadyToDrive()) { + SmartDashboard.putBoolean("Drive/Gyro Drift Warning", + Math.abs(heading.getDegrees()) > 1.0); + } + } catch (Exception e) { + SmartDashboard.putNumber("Drive/Heading (deg)", pose.getRotation().getDegrees()); + } + } else { + SmartDashboard.putNumber("Drive/Heading (deg)", pose.getRotation().getDegrees()); + } + + SmartDashboard.putNumber("Drive/X Velocity (m/s)", currentXSpeed); + SmartDashboard.putNumber("Drive/Y Velocity (m/s)", currentYSpeed); + SmartDashboard.putNumber("Drive/Rotation Velocity (rad/s)", currentRotSpeed); + SmartDashboard.putNumber("Drive/Total Speed (m/s)", + Math.sqrt(currentXSpeed * currentXSpeed + currentYSpeed * currentYSpeed)); + + // Debug: Show if rotation is being commanded when it shouldn't be + if (Math.abs(currentRotSpeed) > 0.01 && Math.abs(currentXSpeed) < 0.1 && Math.abs(currentYSpeed) < 0.1) { + SmartDashboard.putBoolean("Drive/Unexpected Rotation", true); + } else { + SmartDashboard.putBoolean("Drive/Unexpected Rotation", false); + } + + updateModuleData(); + + SmartDashboard.putBoolean("Drive/Initialized", isInitialized()); + SmartDashboard.putBoolean("Drive/Modules Zeroed", hasZeroed); + SmartDashboard.putBoolean("Drive/Ready", isReadyToDrive()); + SmartDashboard.putBoolean("Drive/Simulation", RobotBase.isSimulation()); + + } catch (Exception e) { + logError("Periodic error: " + e.getMessage()); + } + } + + private void updateModuleData() { + if (!isInitialized()) return; + + String[] moduleNames = {"FL", "FR", "BL", "BR"}; + + try { + var modules = swerveDrive.getModules(); + if (modules == null) return; + + for (int i = 0; i < modules.length && i < moduleNames.length; i++) { + try { + if (modules[i] != null) { + double absPos = modules[i].getAbsolutePosition(); + boolean isValid = !Double.isNaN(absPos) && !Double.isInfinite(absPos); + SmartDashboard.putNumber("Swerve/" + moduleNames[i] + " Angle", isValid ? absPos : 0.0); + SmartDashboard.putBoolean("Swerve/" + moduleNames[i] + " Encoder OK", isValid); + } + } catch (Exception e) { + SmartDashboard.putBoolean("Swerve/" + moduleNames[i] + " Encoder OK", false); + } + } + } catch (Exception e) { + // Silently handle + } + } +} \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/LimelightVision.java b/src/main/java/frc/robot/subsystems/LimelightVision.java new file mode 100644 index 0000000..731097f --- /dev/null +++ b/src/main/java/frc/robot/subsystems/LimelightVision.java @@ -0,0 +1,406 @@ +package frc.robot.subsystems; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.networktables.NetworkTable; +import edu.wpi.first.networktables.NetworkTableEntry; +import edu.wpi.first.networktables.NetworkTableInstance; +import edu.wpi.first.wpilibj.DriverStation; +import edu.wpi.first.wpilibj.Timer; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; +import edu.wpi.first.wpilibj2.command.SubsystemBase; + +/** + * Limelight vision subsystem for AprilTag detection. + */ +public class LimelightVision extends SubsystemBase { + // NetworkTable entries + private final NetworkTable limelightTable; + private final NetworkTableEntry tx; + private final NetworkTableEntry ty; + private final NetworkTableEntry ta; + private final NetworkTableEntry tv; + private final NetworkTableEntry botpose; + private final NetworkTableEntry tl; // Pipeline latency + private final NetworkTableEntry cl; // Capture latency + private final NetworkTableEntry tid; // AprilTag ID + + // Cached values + private double horizontalOffset = 0.0; + private double verticalOffset = 0.0; + private double targetArea = 0.0; + private boolean hasTarget = false; // Fixed: int to boolean + private int currentTagId = -1; + private double totalLatencyMs = 0.0; + + // Connection status + private boolean isConnected = false; + private double lastUpdateTime = 0.0; + private static final double CONNECTION_TIMEOUT_SECONDS = 1.0; // Fixed: Added value + + // Reference to drive subsystem + private DriveSubsystem driveSubsystem = null; + + // Configuration + private boolean autoUpdatePose = true; + private double minTargetArea = 0.1; // Minimum area to consider valid + private double maxPoseAmbiguity = 0.7; // Maximum ambiguity to accept pose + + // Field boundaries for pose validation (meters) + private static final double FIELD_LENGTH = 16.54; + private static final double FIELD_WIDTH = 8.02; + private static final double POSE_MARGIN = 0.5; // Allow small margin outside field + + public LimelightVision() { + this("limelight"); + System.out.println("[LimelightVision] Initialized"); + } + + /** + * Create a LimelightVision with a custom NetworkTable name. + * @param tableName The name of the Limelight's NetworkTable (e.g., "limelight", "limelight-front") + */ + public LimelightVision(String tableName) { + limelightTable = NetworkTableInstance.getDefault().getTable(tableName); + + // Get entries with null safety + tx = limelightTable.getEntry("tx"); + ty = limelightTable.getEntry("ty"); + ta = limelightTable.getEntry("ta"); + tv = limelightTable.getEntry("tv"); + botpose = limelightTable.getEntry("botpose_wpiblue"); // Use WPILib Blue alliance origin + tl = limelightTable.getEntry("tl"); + cl = limelightTable.getEntry("cl"); + tid = limelightTable.getEntry("tid"); + + // Initialize with safe defaults + try { + setLEDMode(LEDMode.OFF); + setCameraMode(CameraMode.VISION); + setPipeline(0); + } catch (Exception e) { + DriverStation.reportWarning("Limelight initialization warning: " + e.getMessage(), false); + } + + SmartDashboard.putBoolean("Limelight/Auto Update Pose", autoUpdatePose); + SmartDashboard.putNumber("Limelight/Min Target Area", minTargetArea); + } + + /** + * Set the drive subsystem to update with vision measurements. + */ + public void setDriveSubsystem(DriveSubsystem drive) { // Fixed: Changed return type to void + this.driveSubsystem = drive; + } + + /** + * Enable or disable automatic pose updates to the drive subsystem. + */ + public void setAutoUpdatePose(boolean enabled) { + this.autoUpdatePose = enabled; + SmartDashboard.putBoolean("Limelight/Auto Update Pose", autoUpdatePose); + } + + /** + * Set the minimum target area required to consider a detection valid. + */ + public void setMinTargetArea(double area) { + this.minTargetArea = Math.max(0.0, area); + SmartDashboard.putNumber("Limelight/Min Target Area", minTargetArea); + } + + @Override + public void periodic() { // Fixed: Added missing opening brace + try { + updateValues(); + updateConnectionStatus(); + updateDashboard(); + + // Automatically update drive subsystem with vision measurements + if (autoUpdatePose && driveSubsystem != null && hasValidTarget()) { + updateDriveWithVision(); + } + } catch (Exception e) { + DriverStation.reportError("LimelightVision periodic error: " + e.getMessage(), false); + } + } + + /** + * Update cached values from NetworkTables. + */ + private void updateValues() { + horizontalOffset = tx.getDouble(0.0); + verticalOffset = ty.getDouble(0.0); + targetArea = ta.getDouble(0.0); + hasTarget = tv.getDouble(0.0) == 1.0; + currentTagId = (int) tid.getDouble(-1.0); + + // Calculate total latency + double pipelineLatency = tl.getDouble(0.0); + double captureLatency = cl.getDouble(0.0); + totalLatencyMs = pipelineLatency + captureLatency; + } + + /** + * Check if we're receiving data from the Limelight. + */ + private void updateConnectionStatus() { + double currentTime = Timer.getFPGATimestamp(); + + // Check if we're getting updates (tx changes or we have a target) + double currentTx = tx.getDouble(Double.NaN); + if (!Double.isNaN(currentTx)) { + lastUpdateTime = currentTime; + isConnected = true; + } else if (currentTime - lastUpdateTime > CONNECTION_TIMEOUT_SECONDS) { + isConnected = false; + } + } + + /** + * Update SmartDashboard with current values. + */ + private void updateDashboard() { + SmartDashboard.putBoolean("Limelight/Connected", isConnected); + SmartDashboard.putBoolean("Limelight/Has Target", hasTarget); + SmartDashboard.putNumber("Limelight/TX", horizontalOffset); + SmartDashboard.putNumber("Limelight/TY", verticalOffset); + SmartDashboard.putNumber("Limelight/TA", targetArea); + SmartDashboard.putNumber("Limelight/Tag ID", currentTagId); + SmartDashboard.putNumber("Limelight/Latency (ms)", totalLatencyMs); + + if (hasTarget) { + Pose2d pose = getRobotPose(); + SmartDashboard.putString("Limelight/Pose", + String.format("(%.2f, %.2f) @ %.1f°", + pose.getX(), pose.getY(), pose.getRotation().getDegrees())); + } + } + + /** + * Send vision measurement to drive subsystem with latency compensation. + */ + private void updateDriveWithVision() { + Pose2d visionPose = getRobotPose(); + + // Validate pose before sending + if (!isPoseValid(visionPose)) { + SmartDashboard.putBoolean("Limelight/Pose Valid", false); + return; + } + + // Check target area is sufficient + if (targetArea < minTargetArea) { + SmartDashboard.putBoolean("Limelight/Pose Valid", false); + return; + } + + SmartDashboard.putBoolean("Limelight/Pose Valid", true); + + // Calculate timestamp with latency compensation + double timestamp = Timer.getFPGATimestamp() - (totalLatencyMs / 1000.0); + + updateVisionPose(visionPose, timestamp); + } + + /** + * Update vision pose in the drive subsystem. + */ + public void updateVisionPose(Pose2d visionPose, double timestamp) { + if (driveSubsystem != null && visionPose != null) { + driveSubsystem.addVisionMeasurement(visionPose, timestamp); + } + } + + /** + * Check if a pose is within valid field boundaries. + */ + private boolean isPoseValid(Pose2d pose) { + if (pose == null) { + return false; + } + + double x = pose.getX(); + double y = pose.getY(); + + // Check if pose is within field boundaries (with margin) + boolean xValid = x >= -POSE_MARGIN && x <= FIELD_LENGTH + POSE_MARGIN; + boolean yValid = y >= -POSE_MARGIN && y <= FIELD_WIDTH + POSE_MARGIN; + + // Check for obviously invalid values + boolean notZero = !(x == 0.0 && y == 0.0); + boolean notNaN = !Double.isNaN(x) && !Double.isNaN(y); + boolean notInfinite = !Double.isInfinite(x) && !Double.isInfinite(y); + + // Check pose ambiguity + boolean ambiguityValid = maxPoseAmbiguity >= 0.0 && maxPoseAmbiguity <= 1.0; + + return xValid && yValid && notZero && notNaN && notInfinite && ambiguityValid; + } + + /** + * Check if we have a valid target that meets all criteria. + */ + public boolean hasValidTarget() { + return hasTarget && isConnected && targetArea >= minTargetArea; + } + + /** + * Check if the Limelight is connected. + */ + public boolean isConnected() { + return isConnected; + } + + public double getHorizontalOffset() { + return horizontalOffset; + } + + public double getVerticalOffset() { + return verticalOffset; + } + + public double getTargetArea() { + return targetArea; + } + + public int getCurrentTagId() { + return currentTagId; + } + + public double getLatencyMs() { + return totalLatencyMs; + } + + /** + * Calculate distance to target using trigonometry. + */ + public double getDistanceToTarget(double targetHeightMeters, double cameraHeightMeters, double cameraMountAngleDegrees) { + if (!hasValidTarget()) { + return -1.0; // Return -1 to indicate no valid measurement + } + + double angleToGoalDegrees = cameraMountAngleDegrees + verticalOffset; + double angleToGoalRadians = Math.toRadians(angleToGoalDegrees); + + if (Math.abs(Math.tan(angleToGoalRadians)) < 0.001) { + return -1.0; // Avoid division by near-zero + } + + return (targetHeightMeters - cameraHeightMeters) / Math.tan(angleToGoalRadians); + } + + /** + * Get the robot pose from vision data. + */ + public Pose2d getRobotPose() { + try { + double[] poseArray = botpose.getDoubleArray(new double[0]); + + if (poseArray == null || poseArray.length < 6) { + return new Pose2d(); + } + + return new Pose2d( + poseArray[0], + poseArray[1], + Rotation2d.fromDegrees(poseArray[5]) + ); + } catch (Exception e) { + DriverStation.reportWarning("Error getting robot pose: " + e.getMessage(), false); + return new Pose2d(); + } + } + + /** + * Get the full pose array including Z, roll, and pitch. + */ + public double[] getFullPoseArray() { + try { + return botpose.getDoubleArray(new double[7]); + } catch (Exception e) { + return new double[7]; + } + } + + public void setPipeline(int pipeline) { + try { + limelightTable.getEntry("pipeline").setNumber(Math.max(0, Math.min(9, pipeline))); + SmartDashboard.putNumber("Limelight/Pipeline", pipeline); + } catch (Exception e) { + DriverStation.reportWarning("Error setting pipeline: " + e.getMessage(), false); + } + } + + public void setLEDMode(LEDMode mode) { + try { + limelightTable.getEntry("ledMode").setNumber(mode.getValue()); + SmartDashboard.putString("Limelight/LED Mode", mode.name()); + } catch (Exception e) { + DriverStation.reportWarning("Error setting LED mode: " + e.getMessage(), false); + } + } + + public void setCameraMode(CameraMode mode) { + try { + limelightTable.getEntry("camMode").setNumber(mode.getValue()); + SmartDashboard.putString("Limelight/Camera Mode", mode.name()); + } catch (Exception e) { + DriverStation.reportWarning("Error setting camera mode: " + e.getMessage(), false); + } + } + + /** + * Take a snapshot for later analysis. + */ + public void takeSnapshot() { + try { + limelightTable.getEntry("snapshot").setNumber(1); + } catch (Exception e) { + DriverStation.reportWarning("Error taking snapshot: " + e.getMessage(), false); + } + } + + /** + * Reset snapshot mode. + */ + public void resetSnapshot() { + try { + limelightTable.getEntry("snapshot").setNumber(0); + } catch (Exception e) { + DriverStation.reportWarning("Error resetting snapshot: " + e.getMessage(), false); + } + } + + public enum LEDMode { + PIPELINE(0), + OFF(1), + BLINK(2), + ON(3); + + private final int value; + + LEDMode(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + } + + public enum CameraMode { + VISION(0), + DRIVER(1); + + private final int value; + + CameraMode(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + } +} diff --git a/src/main/java/frc/robot/subsystems/SwerveModule.java b/src/main/java/frc/robot/subsystems/SwerveModule.java new file mode 100644 index 0000000..2715401 --- /dev/null +++ b/src/main/java/frc/robot/subsystems/SwerveModule.java @@ -0,0 +1,80 @@ +package frc.robot.subsystems; + +import edu.wpi.first.math.controller.PIDController; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.kinematics.SwerveModulePosition; +import edu.wpi.first.math.kinematics.SwerveModuleState; + +import com.revrobotics.spark.SparkMax; +import com.revrobotics.spark.SparkLowLevel.MotorType; +import com.revrobotics.spark.SparkAbsoluteEncoder; + +/** + * Individual swerve module controller (not used with YAGSL, kept for reference). + * Each module controls one drive motor and one turning motor for swerve drive. + * + * Motor Layout: + * - Drive Motor: Controls forward/backward speed (brushless) + * - Turning Motor: Controls wheel direction (brushless) + * - Turning Encoder: Absolute encoder for wheel angle feedback + */ +public class SwerveModule { + private static final double kMaxSpeed = 4.5; // m/s + + private SparkMax driveMotor; + private final SparkMax turningMotor; + private final SparkAbsoluteEncoder turningEncoder; + private final PIDController turningPIDController; + + public SwerveModule(int driveMotorId, int turningMotorId) { + driveMotor = new SparkMax(driveMotorId, MotorType.kBrushless); + turningMotor = new SparkMax(turningMotorId, MotorType.kBrushless); + turningEncoder = turningMotor.getAbsoluteEncoder(); + + // PID for wheel angle control + turningPIDController = new PIDController(0.5, 0.0, 0.0); + turningPIDController.enableContinuousInput(-Math.PI, Math.PI); + } + + private double getTurningRadians() { + return turningEncoder.getPosition(); + } + + public SwerveModuleState getState() { + return new SwerveModuleState( + driveMotor.getEncoder().getVelocity(), + new Rotation2d(getTurningRadians()) + ); + } + + public SwerveModulePosition getPosition() { + return new SwerveModulePosition( + driveMotor.getEncoder().getPosition(), new Rotation2d(getTurningRadians()) + ); + } + + @SuppressWarnings("deprecation") + public void setDesiredState(SwerveModuleState desiredState) { + if (desiredState == null) { + stop(); + return; + } + + // Optimize the desired state to avoid spinning more than 90 degrees + desiredState = SwerveModuleState.optimize(desiredState, getState().angle); + + driveMotor.set(desiredState.speedMetersPerSecond / kMaxSpeed); + + double turnOutput = turningPIDController.calculate( + getTurningRadians(), + desiredState.angle.getRadians() + ); + + turningMotor.set(turnOutput); + } + + public void stop() { + driveMotor.set(0.0); + turningMotor.set(0.0); + } +} diff --git a/vendordeps/WPILibNewCommands.json b/vendordeps/WPILibNewCommands.json new file mode 100644 index 0000000..d90630e --- /dev/null +++ b/vendordeps/WPILibNewCommands.json @@ -0,0 +1,39 @@ +{ + "fileName": "WPILibNewCommands.json", + "name": "WPILib-New-Commands", + "version": "1.0.0", + "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", + "frcYear": "2026", + "mavenUrls": [], + "jsonUrl": "", + "javaDependencies": [ + { + "groupId": "edu.wpi.first.wpilibNewCommands", + "artifactId": "wpilibNewCommands-java", + "version": "wpilib" + } + ], + "jniDependencies": [], + "cppDependencies": [ + { + "groupId": "edu.wpi.first.wpilibNewCommands", + "artifactId": "wpilibNewCommands-cpp", + "version": "wpilib", + "libName": "wpilibNewCommands", + "headerClassifier": "headers", + "sourcesClassifier": "sources", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "linuxsystemcore", + "linuxathena", + "linuxarm32", + "linuxarm64", + "windowsx86-64", + "windowsx86", + "linuxx86-64", + "osxuniversal" + ] + } + ] +} From 53010668f781430d36a289fe7dc25c492a5bd83b Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Tue, 10 Feb 2026 04:26:15 +0800 Subject: [PATCH 02/10] Fix all build errors: add vendordeps, fix UTF-8 encoding, fix deprecation warning --- build.gradle | 8 + src/main/java/frc/robot/Robot.java | 2 +- .../frc/robot/subsystems/SwerveModule.java | 2 +- vendordeps/Phoenix5.json | 119 +++++++ vendordeps/Phoenix6.json | 322 ++++++++++++++++++ vendordeps/REVLib.json | 71 ++++ vendordeps/ReduxLib.json | 72 ++++ vendordeps/Studica.json | 71 ++++ vendordeps/ThriftyLib.json | 20 ++ vendordeps/yagsl.json | 20 ++ 10 files changed, 705 insertions(+), 2 deletions(-) create mode 100644 vendordeps/Phoenix5.json create mode 100644 vendordeps/Phoenix6.json create mode 100644 vendordeps/REVLib.json create mode 100644 vendordeps/ReduxLib.json create mode 100644 vendordeps/Studica.json create mode 100644 vendordeps/ThriftyLib.json create mode 100644 vendordeps/yagsl.json diff --git a/build.gradle b/build.gradle index 21805c5..4526a7c 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,14 @@ java { targetCompatibility = JavaVersion.VERSION_17 } +// Force UTF-8 encoding for all Java source files +compileJava { + options.encoding = 'UTF-8' +} +compileTestJava { + options.encoding = 'UTF-8' +} + def ROBOT_MAIN_CLASS = "frc.robot.Main" // Define my targets (RoboRIO) and artifacts (deployable files) diff --git a/src/main/java/frc/robot/Robot.java b/src/main/java/frc/robot/Robot.java index 9b99129..6c27555 100644 --- a/src/main/java/frc/robot/Robot.java +++ b/src/main/java/frc/robot/Robot.java @@ -116,7 +116,7 @@ public void autonomousInit() { // Schedule the autonomous command if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); + CommandScheduler.getInstance().schedule(m_autonomousCommand); SmartDashboard.putString("Status/Auto Running", m_autonomousCommand.getName()); System.out.println("[Robot] Autonomous scheduled: " + m_autonomousCommand.getName()); } else { diff --git a/src/main/java/frc/robot/subsystems/SwerveModule.java b/src/main/java/frc/robot/subsystems/SwerveModule.java index 2715401..b1ff632 100644 --- a/src/main/java/frc/robot/subsystems/SwerveModule.java +++ b/src/main/java/frc/robot/subsystems/SwerveModule.java @@ -21,7 +21,7 @@ public class SwerveModule { private static final double kMaxSpeed = 4.5; // m/s - private SparkMax driveMotor; + private final SparkMax driveMotor; private final SparkMax turningMotor; private final SparkAbsoluteEncoder turningEncoder; private final PIDController turningPIDController; diff --git a/vendordeps/Phoenix5.json b/vendordeps/Phoenix5.json new file mode 100644 index 0000000..6b06f77 --- /dev/null +++ b/vendordeps/Phoenix5.json @@ -0,0 +1,119 @@ +{ + "fileName": "Phoenix5.json", + "name": "CTRE-Phoenix (v5)", + "version": "5.35.1", + "frcYear": "2026", + "uuid": "ab676553-b602-441f-a38d-f1296eff6537", + "mavenUrls": [ + "https://maven.ctr-electronics.com/release/" + ], + "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2025-latest.json", + "requires": [ + { + "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", + "errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.", + "offlineFileName": "Phoenix6-frc2025-latest.json", + "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-latest.json" + } + ], + "javaDependencies": [ + { + "groupId": "com.ctre.phoenix", + "artifactId": "api-java", + "version": "5.35.1" + }, + { + "groupId": "com.ctre.phoenix", + "artifactId": "wpiapi-java", + "version": "5.35.1" + } + ], + "jniDependencies": [ + { + "groupId": "com.ctre.phoenix", + "artifactId": "cci", + "version": "5.35.1", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "linuxathena"], + "simMode": "hwsim" + }, + { + "groupId": "com.ctre.phoenix.sim", + "artifactId": "cci-sim", + "version": "5.35.1", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + } + ], + "cppDependencies": [ + { + "groupId": "com.ctre.phoenix", + "artifactId": "wpiapi-cpp", + "version": "5.35.1", + "libName": "CTRE_Phoenix_WPI", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "linuxathena"], + "simMode": "hwsim" + }, + { + "groupId": "com.ctre.phoenix", + "artifactId": "api-cpp", + "version": "5.35.1", + "libName": "CTRE_Phoenix", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "linuxathena"], + "simMode": "hwsim" + }, + { + "groupId": "com.ctre.phoenix", + "artifactId": "cci", + "version": "5.35.1", + "libName": "CTRE_PhoenixCCI", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "linuxathena"], + "simMode": "hwsim" + }, + { + "groupId": "com.ctre.phoenix.sim", + "artifactId": "wpiapi-cpp-sim", + "version": "5.35.1", + "libName": "CTRE_Phoenix_WPISim", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix.sim", + "artifactId": "api-cpp-sim", + "version": "5.35.1", + "libName": "CTRE_PhoenixSim", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix.sim", + "artifactId": "cci-sim", + "version": "5.35.1", + "libName": "CTRE_PhoenixCCISim", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + } + ] +} diff --git a/vendordeps/Phoenix6.json b/vendordeps/Phoenix6.json new file mode 100644 index 0000000..39fc664 --- /dev/null +++ b/vendordeps/Phoenix6.json @@ -0,0 +1,322 @@ +{ + "fileName": "Phoenix6.json", + "name": "CTRE-Phoenix (v6)", + "version": "25.4.0", + "frcYear": "2026", + "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", + "mavenUrls": [ + "https://maven.ctr-electronics.com/release/" + ], + "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-latest.json", + "javaDependencies": [ + { + "groupId": "com.ctre.phoenix6", + "artifactId": "wpiapi-java", + "version": "25.4.0" + } + ], + "jniDependencies": [ + { + "groupId": "com.ctre.phoenix6", + "artifactId": "api-cpp", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "linuxathena"], + "simMode": "hwsim" + }, + { + "groupId": "com.ctre.phoenix6", + "artifactId": "tools", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "linuxathena"], + "simMode": "hwsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "api-cpp-sim", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "tools-sim", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simTalonSRX", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simVictorSPX", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simPigeonIMU", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simCANCoder", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProTalonFX", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProTalonFXS", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANcoder", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProPigeon2", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANrange", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANdi", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANdle", + "version": "25.4.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + } + ], + "cppDependencies": [ + { + "groupId": "com.ctre.phoenix6", + "artifactId": "wpiapi-cpp", + "version": "25.4.0", + "libName": "CTRE_Phoenix6_WPI", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "linuxathena"], + "simMode": "hwsim" + }, + { + "groupId": "com.ctre.phoenix6", + "artifactId": "tools", + "version": "25.4.0", + "libName": "CTRE_PhoenixTools", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "linuxathena"], + "simMode": "hwsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "wpiapi-cpp-sim", + "version": "25.4.0", + "libName": "CTRE_Phoenix6_WPISim", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "tools-sim", + "version": "25.4.0", + "libName": "CTRE_PhoenixTools_Sim", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simTalonSRX", + "version": "25.4.0", + "libName": "CTRE_SimTalonSRX", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simVictorSPX", + "version": "25.4.0", + "libName": "CTRE_SimVictorSPX", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simPigeonIMU", + "version": "25.4.0", + "libName": "CTRE_SimPigeonIMU", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simCANCoder", + "version": "25.4.0", + "libName": "CTRE_SimCANCoder", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProTalonFX", + "version": "25.4.0", + "libName": "CTRE_SimProTalonFX", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProTalonFXS", + "version": "25.4.0", + "libName": "CTRE_SimProTalonFXS", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANcoder", + "version": "25.4.0", + "libName": "CTRE_SimProCANcoder", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProPigeon2", + "version": "25.4.0", + "libName": "CTRE_SimProPigeon2", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANrange", + "version": "25.4.0", + "libName": "CTRE_SimProCANrange", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANdi", + "version": "25.4.0", + "libName": "CTRE_SimProCANdi", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANdle", + "version": "25.4.0", + "libName": "CTRE_SimProCANdle", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": ["windowsx86-64", "linuxx86-64", "linuxarm64", "osxuniversal"], + "simMode": "swsim" + } + ] +} diff --git a/vendordeps/REVLib.json b/vendordeps/REVLib.json new file mode 100644 index 0000000..8f3a93e --- /dev/null +++ b/vendordeps/REVLib.json @@ -0,0 +1,71 @@ +{ + "fileName": "REVLib.json", + "name": "REVLib", + "version": "2025.0.3", + "frcYear": "2026", + "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", + "mavenUrls": [ + "https://maven.revrobotics.com/" + ], + "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2025.json", + "javaDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-java", + "version": "2025.0.3" + } + ], + "jniDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-driver", + "version": "2025.0.3", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ], + "cppDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-cpp", + "version": "2025.0.3", + "libName": "REVLib", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-driver", + "version": "2025.0.3", + "libName": "REVLibDriver", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ] +} diff --git a/vendordeps/ReduxLib.json b/vendordeps/ReduxLib.json new file mode 100644 index 0000000..56435f0 --- /dev/null +++ b/vendordeps/ReduxLib.json @@ -0,0 +1,72 @@ +{ + "fileName": "ReduxLib.json", + "name": "ReduxLib", + "version": "2025.0.1", + "frcYear": "2026", + "uuid": "151ecca8-670b-4026-8160-cdd2679ef2bd", + "mavenUrls": [ + "https://maven.reduxrobotics.com/" + ], + "jsonUrl": "https://frcsdk.reduxrobotics.com/ReduxLib_2025.json", + "javaDependencies": [ + { + "groupId": "com.reduxrobotics.frc", + "artifactId": "ReduxLib-java", + "version": "2025.0.1" + } + ], + "jniDependencies": [ + { + "groupId": "com.reduxrobotics.frc", + "artifactId": "ReduxLib-driver", + "version": "2025.0.1", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": [ + "linuxathena", + "linuxx86-64", + "linuxarm32", + "linuxarm64", + "osxuniversal", + "windowsx86-64" + ] + } + ], + "cppDependencies": [ + { + "groupId": "com.reduxrobotics.frc", + "artifactId": "ReduxLib-cpp", + "version": "2025.0.1", + "libName": "ReduxLib", + "headerClassifier": "headers", + "sourcesClassifier": "sources", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "linuxathena", + "linuxx86-64", + "linuxarm32", + "linuxarm64", + "osxuniversal", + "windowsx86-64" + ] + }, + { + "groupId": "com.reduxrobotics.frc", + "artifactId": "ReduxLib-driver", + "version": "2025.0.1", + "libName": "ReduxCore", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "linuxathena", + "linuxx86-64", + "linuxarm32", + "linuxarm64", + "osxuniversal", + "windowsx86-64" + ] + } + ] +} diff --git a/vendordeps/Studica.json b/vendordeps/Studica.json new file mode 100644 index 0000000..17dcad7 --- /dev/null +++ b/vendordeps/Studica.json @@ -0,0 +1,71 @@ +{ + "fileName": "Studica.json", + "name": "Studica", + "version": "2025.0.0", + "uuid": "cb311d09-36e9-4143-a032-55bb2b94443b", + "frcYear": "2026", + "mavenUrls": [ + "https://dev.studica.com/maven/release/2025/" + ], + "jsonUrl": "https://dev.studica.com/releases/2025/Studica-2025.0.0.json", + "javaDependencies": [ + { + "groupId": "com.studica.frc", + "artifactId": "Studica-java", + "version": "2025.0.0" + } + ], + "jniDependencies": [ + { + "groupId": "com.studica.frc", + "artifactId": "Studica-driver", + "version": "2025.0.0", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": [ + "linuxathena", + "linuxarm32", + "linuxarm64", + "linuxx86-64", + "osxuniversal", + "windowsx86-64" + ] + } + ], + "cppDependencies": [ + { + "groupId": "com.studica.frc", + "artifactId": "Studica-cpp", + "version": "2025.0.0", + "libName": "Studica", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "linuxathena", + "linuxarm32", + "linuxarm64", + "linuxx86-64", + "osxuniversal", + "windowsx86-64" + ] + }, + { + "groupId": "com.studica.frc", + "artifactId": "Studica-driver", + "version": "2025.0.0", + "libName": "StudicaDriver", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "linuxathena", + "linuxarm32", + "linuxarm64", + "linuxx86-64", + "osxuniversal", + "windowsx86-64" + ] + } + ] +} diff --git a/vendordeps/ThriftyLib.json b/vendordeps/ThriftyLib.json new file mode 100644 index 0000000..0c481d8 --- /dev/null +++ b/vendordeps/ThriftyLib.json @@ -0,0 +1,20 @@ +{ + "fileName": "ThriftyLib.json", + "name": "ThriftyLib", + "version": "2025.1.1", + "frcYear": "2026", + "uuid": "60b2694b-9e6e-4026-81ee-6f167946f4b0", + "mavenUrls": [ + "https://docs.home.thethriftybot.com" + ], + "jsonUrl": "https://docs.home.thethriftybot.com/ThriftyLib.json", + "javaDependencies": [ + { + "groupId": "com.thethriftybot.frc", + "artifactId": "ThriftyLib-java", + "version": "2025.1.1" + } + ], + "jniDependencies": [], + "cppDependencies": [] +} diff --git a/vendordeps/yagsl.json b/vendordeps/yagsl.json new file mode 100644 index 0000000..cde810a --- /dev/null +++ b/vendordeps/yagsl.json @@ -0,0 +1,20 @@ +{ + "fileName": "yagsl.json", + "name": "YAGSL", + "version": "2025.8.0", + "frcYear": "2026", + "uuid": "1ccce5a4-acd2-4d18-bca3-4b8047188400", + "mavenUrls": [ + "https://broncbotz3481.github.io/YAGSL-Lib/yagsl/repos" + ], + "jsonUrl": "https://broncbotz3481.github.io/YAGSL-Lib/yagsl/yagsl.json", + "javaDependencies": [ + { + "groupId": "swervelib", + "artifactId": "YAGSL-java", + "version": "2025.8.0" + } + ], + "jniDependencies": [], + "cppDependencies": [] +} From 361620aaf59202cbb1518cbcd89a1e88bc456a2d Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Tue, 10 Feb 2026 04:57:18 +0800 Subject: [PATCH 03/10] Add defensive null checks to prevent crash when DriveSubsystem fails to initialize - Make m_DriveSubsystem non-final to allow null value - Wrap DriveSubsystem initialization in try-catch - Add null checks in all methods that use m_DriveSubsystem - Robot can now start even if YAGSL/hardware initialization fails - Fixes simulation crash when hardware devices are not available --- src/main/java/frc/robot/Robot.java | 26 ++-- src/main/java/frc/robot/RobotContainer.java | 115 ++++++++++++------ .../frc/robot/commands/ExampleCommand.java | 2 +- 3 files changed, 92 insertions(+), 51 deletions(-) diff --git a/src/main/java/frc/robot/Robot.java b/src/main/java/frc/robot/Robot.java index 6c27555..4794cb0 100644 --- a/src/main/java/frc/robot/Robot.java +++ b/src/main/java/frc/robot/Robot.java @@ -95,23 +95,27 @@ public void autonomousInit() { // Small delay to ensure systems are ready Thread.sleep(100); - // Log position BEFORE getting autonomous command - Pose2d prePose = m_robotContainer.m_DriveSubsystem.getPose(); - System.out.println("[Robot] Position BEFORE getAutonomousCommand: (" + - String.format("%.2f, %.2f", prePose.getX(), prePose.getY()) + ")"); + // Log position BEFORE getting autonomous command (only if DriveSubsystem available) + if (m_robotContainer.m_DriveSubsystem != null) { + Pose2d prePose = m_robotContainer.m_DriveSubsystem.getPose(); + System.out.println("[Robot] Position BEFORE getAutonomousCommand: (" + + String.format("%.2f, %.2f", prePose.getX(), prePose.getY()) + ")"); + } // Get a fresh autonomous command each time m_autonomousCommand = m_robotContainer.getAutonomousCommand(); // Log position AFTER getting autonomous command (but before scheduling) - Pose2d postPose = m_robotContainer.m_DriveSubsystem.getPose(); - System.out.println("[Robot] Position AFTER getAutonomousCommand: (" + - String.format("%.2f, %.2f", postPose.getX(), postPose.getY()) + ")"); + if (m_robotContainer.m_DriveSubsystem != null) { + Pose2d postPose = m_robotContainer.m_DriveSubsystem.getPose(); + System.out.println("[Robot] Position AFTER getAutonomousCommand: (" + + String.format("%.2f, %.2f", postPose.getX(), postPose.getY()) + ")"); - // Verify robot is on field before starting autonomous - if (!isValidFieldPosition(postPose)) { - DriverStation.reportWarning("WARNING: Robot starting position outside field bounds! Pos: (" + - String.format("%.2f, %.2f", postPose.getX(), postPose.getY()) + ")", false); + // Verify robot is on field before starting autonomous + if (!isValidFieldPosition(postPose)) { + DriverStation.reportWarning("WARNING: Robot starting position outside field bounds! Pos: (" + + String.format("%.2f, %.2f", postPose.getX(), postPose.getY()) + ")", false); + } } // Schedule the autonomous command diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 4556e1a..acfc3fa 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -33,7 +33,7 @@ public class RobotContainer { - public final DriveSubsystem m_DriveSubsystem; + public DriveSubsystem m_DriveSubsystem; // Not final - may fail to initialize private final CommandXboxController driverXbox; private final CommandXboxController m_operatorController; private LimelightVision limelightVision; @@ -44,24 +44,34 @@ public RobotContainer() { driverXbox = new CommandXboxController(ControllerConstants.DRIVER_CONTROLLER_PORT); m_operatorController = new CommandXboxController(1); - // Initialize drive subsystem - m_DriveSubsystem = new DriveSubsystem(new File(Filesystem.getDeployDirectory(), "SWERVE")); + // Initialize drive subsystem (wrapped in try-catch to allow robot to start even if it fails) + try { + m_DriveSubsystem = new DriveSubsystem(new File(Filesystem.getDeployDirectory(), "SWERVE")); + System.out.println("[RobotContainer] DriveSubsystem initialized successfully"); + + // Set initial robot position - START AT BLUE ALLIANCE + m_DriveSubsystem.resetOdometry(FieldConstants.BLUE_ALLIANCE_START); + System.out.println("[RobotContainer] Robot initialized at Blue Alliance start: (" + + String.format("%.2f, %.2f", FieldConstants.BLUE_ALLIANCE_START.getX(), + FieldConstants.BLUE_ALLIANCE_START.getY()) + ")"); + } catch (Exception e) { + DriverStation.reportError("DriveSubsystem initialization failed: " + e.getMessage(), e.getStackTrace()); + System.err.println("[RobotContainer] CRITICAL: DriveSubsystem failed to initialize - robot will run in limited mode"); + e.printStackTrace(); + // m_DriveSubsystem will be null, checks will be needed in methods that use it + } // Initialize vision (optional - won't crash if it fails) try { limelightVision = new LimelightVision(); - limelightVision.setDriveSubsystem(m_DriveSubsystem); + if (m_DriveSubsystem != null) { + limelightVision.setDriveSubsystem(m_DriveSubsystem); + } } catch (Exception e) { DriverStation.reportWarning("LimelightVision initialization failed: " + e.getMessage(), false); limelightVision = null; } - // Set initial robot position - START AT BLUE ALLIANCE - m_DriveSubsystem.resetOdometry(FieldConstants.BLUE_ALLIANCE_START); - System.out.println("[RobotContainer] Robot initialized at Blue Alliance start: (" + - String.format("%.2f, %.2f", FieldConstants.BLUE_ALLIANCE_START.getX(), - FieldConstants.BLUE_ALLIANCE_START.getY()) + ")"); - // Configure commands and bindings configureDefaultCommand(); configureBindings(); @@ -116,39 +126,53 @@ private void setupSmartDashboard() { private void setupAutonomousChooser() { autoChooser = new SendableChooser<>(); autoChooser.setDefaultOption("Do Nothing", Autos.doNothingAuto()); - autoChooser.addOption("Drive Forward", Autos.driveForwardAuto(m_DriveSubsystem)); - // Basic scoring autos - autoChooser.addOption("Simple (Reef)", new SimpleAuto(m_DriveSubsystem)); - autoChooser.addOption("Safe Score (1 piece)", new AutoSafeScore(m_DriveSubsystem)); - - // Multi-piece autos - autoChooser.addOption("Sequential (2 pieces)", new SequentialAuto(m_DriveSubsystem)); - autoChooser.addOption("Triple Score (3 pieces)", new AutoTripleScore(m_DriveSubsystem)); - - // Specialized autos - autoChooser.addOption("Avoid Collision", new AutoAvoidCollision(m_DriveSubsystem)); - autoChooser.addOption("Algae Removal", new AutoAlgaeAuto(m_DriveSubsystem)); - autoChooser.addOption("Processor Scoring", new AutoProcessorAuto(m_DriveSubsystem)); - autoChooser.addOption("Complex Path", new AutoComplexPath(m_DriveSubsystem)); - autoChooser.addOption("Balance", new AutoBalance(m_DriveSubsystem)); - autoChooser.addOption("Pickup Cycles", new AutoPickupAuto(m_DriveSubsystem)); - autoChooser.addOption("Figure 8 Pattern", new AutoFigure8(m_DriveSubsystem)); + // Only add drive-dependent autos if DriveSubsystem initialized successfully + if (m_DriveSubsystem != null) { + autoChooser.addOption("Drive Forward", Autos.driveForwardAuto(m_DriveSubsystem)); + + // Basic scoring autos + autoChooser.addOption("Simple (Reef)", new SimpleAuto(m_DriveSubsystem)); + autoChooser.addOption("Safe Score (1 piece)", new AutoSafeScore(m_DriveSubsystem)); + + // Multi-piece autos + autoChooser.addOption("Sequential (2 pieces)", new SequentialAuto(m_DriveSubsystem)); + autoChooser.addOption("Triple Score (3 pieces)", new AutoTripleScore(m_DriveSubsystem)); + + // Specialized autos + autoChooser.addOption("Avoid Collision", new AutoAvoidCollision(m_DriveSubsystem)); + autoChooser.addOption("Algae Removal", new AutoAlgaeAuto(m_DriveSubsystem)); + autoChooser.addOption("Processor Scoring", new AutoProcessorAuto(m_DriveSubsystem)); + autoChooser.addOption("Complex Path", new AutoComplexPath(m_DriveSubsystem)); + autoChooser.addOption("Balance", new AutoBalance(m_DriveSubsystem)); + autoChooser.addOption("Pickup Cycles", new AutoPickupAuto(m_DriveSubsystem)); + autoChooser.addOption("Figure 8 Pattern", new AutoFigure8(m_DriveSubsystem)); + } else { + DriverStation.reportWarning("DriveSubsystem not initialized - limited autonomous options available", false); + } SmartDashboard.putData("Auto Chooser", autoChooser); } private void configureDefaultCommand() { - m_DriveSubsystem.setDefaultCommand( - m_DriveSubsystem.driveCommand( - () -> -driverXbox.getLeftY(), - () -> -driverXbox.getLeftX(), - () -> -driverXbox.getRightX() * DriveConstants.ROTATION_SCALE - ).withName("DefaultDrive") - ); + if (m_DriveSubsystem != null) { + m_DriveSubsystem.setDefaultCommand( + m_DriveSubsystem.driveCommand( + () -> -driverXbox.getLeftY(), + () -> -driverXbox.getLeftX(), + () -> -driverXbox.getRightX() * DriveConstants.ROTATION_SCALE + ).withName("DefaultDrive") + ); + } } private void configureBindings() { + // Skip binding drive commands if DriveSubsystem failed to initialize + if (m_DriveSubsystem == null) { + DriverStation.reportWarning("DriveSubsystem not available - skipping drive button bindings", false); + return; + } + // Speed control with bumpers driverXbox.rightBumper().onTrue(Commands.runOnce(() -> { SmartDashboard.putString("Status/Last Action", "Speed increased"); @@ -233,17 +257,19 @@ private void configureBindings() { driverXbox.a() .onTrue(Commands.runOnce(() -> SmartDashboard.putString("Status/Last Action", "Running Auto Test"))) .whileTrue( - Commands.defer(this::getAutonomousCommand, Set.of(m_DriveSubsystem)) + Commands.defer(this::getAutonomousCommand, m_DriveSubsystem != null ? Set.of(m_DriveSubsystem) : Set.of()) ); // Initialize status SmartDashboard.putString("Status/Speed Mode", "Normal"); SmartDashboard.putString("Status/Last Action", "Ready"); - // Operator diagnostics - m_operatorController.a().onTrue(Commands.runOnce(m_DriveSubsystem::printEncoderOffsets)); - m_operatorController.b().onTrue(Commands.runOnce(m_DriveSubsystem::diagnoseGyro)); - m_operatorController.x().onTrue(Commands.runOnce(m_DriveSubsystem::diagnoseMotorInversions)); + // Operator diagnostics (only if DriveSubsystem available) + if (m_DriveSubsystem != null) { + m_operatorController.a().onTrue(Commands.runOnce(m_DriveSubsystem::printEncoderOffsets)); + m_operatorController.b().onTrue(Commands.runOnce(m_DriveSubsystem::diagnoseGyro)); + m_operatorController.x().onTrue(Commands.runOnce(m_DriveSubsystem::diagnoseMotorInversions)); + } } /** @@ -251,6 +277,12 @@ private void configureBindings() { * Always ensures robot starts at correct field position. */ public Command getAutonomousCommand() { + // If DriveSubsystem failed to initialize, return do-nothing command + if (m_DriveSubsystem == null) { + DriverStation.reportWarning("Cannot run autonomous - DriveSubsystem not initialized", false); + return Autos.doNothingAuto(); + } + // Get selected starting position from dashboard or default to blue String allianceColor = SmartDashboard.getString("Alliance/Color", "Blue"); @@ -274,6 +306,11 @@ public Command getAutonomousCommand() { * Called when teleop starts. */ public void teleopInit() { + if (m_DriveSubsystem == null) { + DriverStation.reportWarning("DriveSubsystem not available for teleop", false); + return; + } + // Reset to Blue Alliance start at teleop begin m_DriveSubsystem.resetOdometry(FieldConstants.BLUE_ALLIANCE_START); System.out.println("Teleop initialized - odometry reset to Blue Alliance start"); diff --git a/src/main/java/frc/robot/commands/ExampleCommand.java b/src/main/java/frc/robot/commands/ExampleCommand.java index 7481d3c..e57403c 100644 --- a/src/main/java/frc/robot/commands/ExampleCommand.java +++ b/src/main/java/frc/robot/commands/ExampleCommand.java @@ -9,7 +9,7 @@ /** An example command that uses an example subsystem. */ public class ExampleCommand extends Command { - @SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField"}) + @SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField","unused"}) private final ExampleSubsystem m_subsystem; /** From 2c0c83d54ff41e4681a1d20c3ece38e8b77e321e Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Thu, 12 Feb 2026 00:42:54 +0800 Subject: [PATCH 04/10] added maplesim since the last one was deleted when I integrated it into the new WPILib --- build.gradle | 2 +- simgui-ds.json | 5 ++++ src/main/java/frc/robot/RobotContainer.java | 14 ++++++----- vendordeps/maple-sim.json | 26 +++++++++++++++++++++ 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 vendordeps/maple-sim.json diff --git a/build.gradle b/build.gradle index 4526a7c..ab61ab1 100644 --- a/build.gradle +++ b/build.gradle @@ -56,7 +56,7 @@ def deployArtifact = deploy.targets.roborio.artifacts.frcJava wpi.java.debugJni = false // Set this to true to enable desktop support. -def includeDesktopSupport = false +def includeDesktopSupport = true // Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. // Also defines JUnit 5. diff --git a/simgui-ds.json b/simgui-ds.json index 73cc713..69b1a3c 100644 --- a/simgui-ds.json +++ b/simgui-ds.json @@ -88,5 +88,10 @@ "buttonCount": 0, "povCount": 0 } + ], + "robotJoysticks": [ + { + "guid": "Keyboard0" + } ] } diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index acfc3fa..94a6fbd 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -115,12 +115,14 @@ private void setupSmartDashboard() { SmartDashboard.putString("Controls/POV Down", "Reset Heading"); SmartDashboard.putString("Controls/POV Up", "Zero Gyro & Sync Modules"); - // Computer key (dashboard) to lock and rest near hub - SmartDashboard.putData("Drive/Hub Rest", Commands.runOnce(() -> { - m_DriveSubsystem.resetOdometry(FieldConstants.HUB_REST_POSITION); - m_DriveSubsystem.lock(); - SmartDashboard.putString("Status/Last Action", "Hub Rest (Dashboard)"); - }, m_DriveSubsystem).withName("HubRest")); + // Computer key (dashboard) to lock and rest near hub (only if DriveSubsystem available) + if (m_DriveSubsystem != null) { + SmartDashboard.putData("Drive/Hub Rest", Commands.runOnce(() -> { + m_DriveSubsystem.resetOdometry(FieldConstants.HUB_REST_POSITION); + m_DriveSubsystem.lock(); + SmartDashboard.putString("Status/Last Action", "Hub Rest (Dashboard)"); + }, m_DriveSubsystem).withName("HubRest")); + } } private void setupAutonomousChooser() { diff --git a/vendordeps/maple-sim.json b/vendordeps/maple-sim.json new file mode 100644 index 0000000..a8dc6df --- /dev/null +++ b/vendordeps/maple-sim.json @@ -0,0 +1,26 @@ +{ + "fileName": "maple-sim.json", + "name": "maplesim", + "version": "0.4.0-beta", + "frcYear": "2026", + "uuid": "c39481e8-4a63-4a4c-9df6-48d91e4da37b", + "mavenUrls": [ + "https://shenzhen-robotics-alliance.github.io/maple-sim/vendordep/repos/releases", + "https://repo1.maven.org/maven2" + ], + "jsonUrl": "https://shenzhen-robotics-alliance.github.io/maple-sim/vendordep/maple-sim.json", + "javaDependencies": [ + { + "groupId": "org.ironmaple", + "artifactId": "maplesim-java", + "version": "0.4.0-beta" + }, + { + "groupId": "org.dyn4j", + "artifactId": "dyn4j", + "version": "5.0.2" + } + ], + "jniDependencies": [], + "cppDependencies": [] +} From 35ec18775a1372eb3d3e3af03b9ebd7f11c2905b Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Thu, 12 Feb 2026 00:57:25 +0800 Subject: [PATCH 05/10] added pathplanner depencies and installed pathplannerLib from it's official library --- src/main/java/frc/robot/RobotContainer.java | 75 +++++++++---------- .../frc/robot/subsystems/DriveSubsystem.java | 52 ++++++++++++- vendordeps/PathplannerLib.json | 38 ++++++++++ 3 files changed, 123 insertions(+), 42 deletions(-) create mode 100644 vendordeps/PathplannerLib.json diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 94a6fbd..d9c7f42 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -3,7 +3,6 @@ import java.io.File; import java.util.Set; -import edu.wpi.first.math.geometry.Pose2d; import edu.wpi.first.wpilibj.DriverStation; import edu.wpi.first.wpilibj.Filesystem; import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; @@ -30,6 +29,7 @@ import frc.robot.commands.auto.SimpleAuto; import frc.robot.subsystems.DriveSubsystem; import frc.robot.subsystems.LimelightVision; +import com.pathplanner.lib.auto.AutoBuilder; public class RobotContainer { @@ -126,31 +126,32 @@ private void setupSmartDashboard() { } private void setupAutonomousChooser() { - autoChooser = new SendableChooser<>(); - autoChooser.setDefaultOption("Do Nothing", Autos.doNothingAuto()); - - // Only add drive-dependent autos if DriveSubsystem initialized successfully - if (m_DriveSubsystem != null) { - autoChooser.addOption("Drive Forward", Autos.driveForwardAuto(m_DriveSubsystem)); - - // Basic scoring autos - autoChooser.addOption("Simple (Reef)", new SimpleAuto(m_DriveSubsystem)); - autoChooser.addOption("Safe Score (1 piece)", new AutoSafeScore(m_DriveSubsystem)); - - // Multi-piece autos - autoChooser.addOption("Sequential (2 pieces)", new SequentialAuto(m_DriveSubsystem)); - autoChooser.addOption("Triple Score (3 pieces)", new AutoTripleScore(m_DriveSubsystem)); - - // Specialized autos - autoChooser.addOption("Avoid Collision", new AutoAvoidCollision(m_DriveSubsystem)); - autoChooser.addOption("Algae Removal", new AutoAlgaeAuto(m_DriveSubsystem)); - autoChooser.addOption("Processor Scoring", new AutoProcessorAuto(m_DriveSubsystem)); - autoChooser.addOption("Complex Path", new AutoComplexPath(m_DriveSubsystem)); - autoChooser.addOption("Balance", new AutoBalance(m_DriveSubsystem)); - autoChooser.addOption("Pickup Cycles", new AutoPickupAuto(m_DriveSubsystem)); - autoChooser.addOption("Figure 8 Pattern", new AutoFigure8(m_DriveSubsystem)); + // Use PathPlanner's AutoBuilder if configured, otherwise fall back to manual chooser + if (m_DriveSubsystem != null && AutoBuilder.isConfigured()) { + // PathPlanner auto chooser - reads autos from src/main/deploy/pathplanner/autos/ + autoChooser = AutoBuilder.buildAutoChooser(); + System.out.println("[RobotContainer] PathPlanner AutoBuilder chooser configured"); } else { - DriverStation.reportWarning("DriveSubsystem not initialized - limited autonomous options available", false); + // Fallback: manual auto chooser + autoChooser = new SendableChooser<>(); + autoChooser.setDefaultOption("Do Nothing", Autos.doNothingAuto()); + + if (m_DriveSubsystem != null) { + autoChooser.addOption("Drive Forward", Autos.driveForwardAuto(m_DriveSubsystem)); + autoChooser.addOption("Simple (Reef)", new SimpleAuto(m_DriveSubsystem)); + autoChooser.addOption("Safe Score (1 piece)", new AutoSafeScore(m_DriveSubsystem)); + autoChooser.addOption("Sequential (2 pieces)", new SequentialAuto(m_DriveSubsystem)); + autoChooser.addOption("Triple Score (3 pieces)", new AutoTripleScore(m_DriveSubsystem)); + autoChooser.addOption("Avoid Collision", new AutoAvoidCollision(m_DriveSubsystem)); + autoChooser.addOption("Algae Removal", new AutoAlgaeAuto(m_DriveSubsystem)); + autoChooser.addOption("Processor Scoring", new AutoProcessorAuto(m_DriveSubsystem)); + autoChooser.addOption("Complex Path", new AutoComplexPath(m_DriveSubsystem)); + autoChooser.addOption("Balance", new AutoBalance(m_DriveSubsystem)); + autoChooser.addOption("Pickup Cycles", new AutoPickupAuto(m_DriveSubsystem)); + autoChooser.addOption("Figure 8 Pattern", new AutoFigure8(m_DriveSubsystem)); + } else { + DriverStation.reportWarning("DriveSubsystem not initialized - limited autonomous options available", false); + } } SmartDashboard.putData("Auto Chooser", autoChooser); @@ -276,7 +277,7 @@ private void configureBindings() { /** * Get the autonomous command to run. - * Always ensures robot starts at correct field position. + * Uses PathPlanner auto chooser if configured, otherwise falls back to manual chooser. */ public Command getAutonomousCommand() { // If DriveSubsystem failed to initialize, return do-nothing command @@ -285,23 +286,15 @@ public Command getAutonomousCommand() { return Autos.doNothingAuto(); } - // Get selected starting position from dashboard or default to blue - String allianceColor = SmartDashboard.getString("Alliance/Color", "Blue"); - - Pose2d startingPose = allianceColor.equals("Red") ? - FieldConstants.RED_ALLIANCE_START : - FieldConstants.BLUE_ALLIANCE_START; - - // Reset to correct starting position for selected alliance - m_DriveSubsystem.stop(); - m_DriveSubsystem.zeroGyro(); - m_DriveSubsystem.resetOdometry(startingPose); - - // Get command from SendableChooser instead of string + // Get command from auto chooser (PathPlanner or manual) Command selectedAuto = autoChooser.getSelected(); - System.out.println("[RobotContainer] Selected autonomous: " + selectedAuto.getName()); - return selectedAuto != null ? selectedAuto : Autos.doNothingAuto(); + if (selectedAuto != null) { + System.out.println("[RobotContainer] Selected autonomous: " + selectedAuto.getName()); + return selectedAuto; + } + + return Autos.doNothingAuto(); } /** diff --git a/src/main/java/frc/robot/subsystems/DriveSubsystem.java b/src/main/java/frc/robot/subsystems/DriveSubsystem.java index b8a1011..e06d9e6 100644 --- a/src/main/java/frc/robot/subsystems/DriveSubsystem.java +++ b/src/main/java/frc/robot/subsystems/DriveSubsystem.java @@ -16,6 +16,12 @@ import frc.robot.Constants.DriveConstants; import swervelib.SwerveDrive; import swervelib.parser.SwerveParser; +import com.pathplanner.lib.auto.AutoBuilder; +import com.pathplanner.lib.config.PIDConstants; +import com.pathplanner.lib.config.RobotConfig; +import com.pathplanner.lib.controllers.PPHolonomicDriveController; +import edu.wpi.first.wpilibj.DriverStation; + public class DriveSubsystem extends SubsystemBase { private SwerveDrive swerveDrive; @@ -66,7 +72,7 @@ private void initializeSwerve() { logDebug(" - " + f.getName()); } } - + logDebug("Creating SwerveDrive with max speed: " + DriveConstants.MAX_SPEED_MPS + " m/s"); logDebug("Running in " + (RobotBase.isSimulation() ? "SIMULATION" : "REAL") + " mode"); @@ -113,6 +119,9 @@ private void initializeSwerve() { SmartDashboard.putBoolean("Drive/Initialized", true); logDebug("Swerve drive initialized successfully"); + // Configure PathPlanner after successful swerve init + configurePathPlanner(); + } catch (Exception e) { logError("FATAL ERROR during swerve initialization: " + e.getMessage()); e.printStackTrace(); @@ -124,6 +133,47 @@ private void initializeSwerve() { SmartDashboard.putNumber("Drive/Max Angular Velocity (rad/s)", DriveConstants.MAX_ANGULAR_VELOCITY); } + /** + * Configure PathPlanner's AutoBuilder for autonomous path following. + * Must be called after YAGSL swerve drive is initialized. + */ + private void configurePathPlanner() { + try { + RobotConfig config = RobotConfig.fromGUISettings(); + + AutoBuilder.configure( + this::getPose, // Pose supplier + this::resetOdometry, // Pose reset consumer + this::getRobotRelativeSpeeds, // ChassisSpeeds supplier (robot-relative) + (speeds, feedforwards) -> driveFieldOriented(speeds), // Drive consumer + new PPHolonomicDriveController( + new PIDConstants(5.0, 0.0, 0.0), // Translation PID + new PIDConstants(5.0, 0.0, 0.0) // Rotation PID + ), + config, + () -> { + // Flip path for red alliance + var alliance = DriverStation.getAlliance(); + return alliance.isPresent() && alliance.get() == DriverStation.Alliance.Red; + }, + this // Subsystem requirement + ); + logDebug("PathPlanner AutoBuilder configured successfully"); + } catch (Exception e) { + DriverStation.reportError("PathPlanner config failed: " + e.getMessage(), e.getStackTrace()); + } + } + + /** + * Get the robot-relative chassis speeds (used by PathPlanner). + */ + public ChassisSpeeds getRobotRelativeSpeeds() { + if (isInitialized()) { + return swerveDrive.getRobotVelocity(); + } + return new ChassisSpeeds(); + } + private void verifyModules() { var modules = swerveDrive.getModules(); logDebug("Loaded " + modules.length + " swerve modules"); diff --git a/vendordeps/PathplannerLib.json b/vendordeps/PathplannerLib.json new file mode 100644 index 0000000..4414707 --- /dev/null +++ b/vendordeps/PathplannerLib.json @@ -0,0 +1,38 @@ +{ + "fileName": "PathplannerLib.json", + "name": "PathplannerLib", + "version": "2026.1.2", + "uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786", + "frcYear": "2026", + "mavenUrls": [ + "https://3015rangerrobotics.github.io/pathplannerlib/repo" + ], + "jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib.json", + "javaDependencies": [ + { + "groupId": "com.pathplanner.lib", + "artifactId": "PathplannerLib-java", + "version": "2026.1.2" + } + ], + "jniDependencies": [], + "cppDependencies": [ + { + "groupId": "com.pathplanner.lib", + "artifactId": "PathplannerLib-cpp", + "version": "2026.1.2", + "libName": "PathplannerLib", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxx86-64", + "osxuniversal", + "linuxathena", + "linuxarm32", + "linuxarm64" + ] + } + ] +} \ No newline at end of file From ea9a155c0d93055edc013fb66caf254e260c8de7 Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Thu, 12 Feb 2026 07:44:14 +0800 Subject: [PATCH 06/10] a --- simgui-ds.json | 3 + src/main/deploy/SWERVE/modules/Backleft.json | 28 +- src/main/deploy/SWERVE/modules/Backright.json | 28 +- src/main/deploy/SWERVE/modules/Frontleft.json | 28 +- .../deploy/SWERVE/modules/Frontright.json | 28 +- src/main/deploy/SWERVE/swerve.json | 9 - src/main/deploy/SWERVE/swervedrive.json | 2 +- src/main/java/frc/robot/Robot.java | 6 + src/main/java/frc/robot/RobotContainer.java | 9 +- .../frc/robot/subsystems/DriveSubsystem.java | 208 ++- .../AbstractDriveTrainSimulation.java | 169 ++ .../SelfControlledSwerveDriveSimulation.java | 580 ++++++ .../drivesims/SwerveDriveSimulation.java | 367 ++++ .../drivesims/SwerveModuleSimulation.java | 538 ++++++ .../configs/DriveTrainSimulationConfig.java | 323 ++++ .../configs/SwerveModuleSimulationConfig.java | 128 ++ .../simulation/motorsims/MapleMotorSim.java | 194 ++ .../motorsims/SimulatedMotorController.java | 108 ++ .../mathutils/SwerveStateProjection.java | 26 + temp_yagsl/swervelib/SwerveDrive.java | 1614 +++++++++++++++++ temp_yagsl/swervelib/SwerveModule.java | 1016 +++++++++++ temp_yagsl/swervelib/math/SwerveMath.java | 394 ++++ .../parser/SwerveDriveConfiguration.java | 139 ++ .../parser/SwerveModuleConfiguration.java | 141 ++ temp_yagsl/swervelib/parser/SwerveParser.java | 204 +++ .../swervelib/parser/json/ModuleJson.java | 141 ++ .../modules/AngleConversionFactorsJson.java | 27 + .../json/modules/ConversionFactorsJson.java | 40 + .../modules/DriveConversionFactorsJson.java | 29 + .../parser/json/modules/LocationJson.java | 14 + .../simulation/SwerveIMUSimulation.java | 108 ++ .../simulation/SwerveModuleSimulation.java | 100 + 32 files changed, 6521 insertions(+), 228 deletions(-) delete mode 100644 src/main/deploy/SWERVE/swerve.json create mode 100644 temp_yagsl/org/ironmaple/simulation/drivesims/AbstractDriveTrainSimulation.java create mode 100644 temp_yagsl/org/ironmaple/simulation/drivesims/SelfControlledSwerveDriveSimulation.java create mode 100644 temp_yagsl/org/ironmaple/simulation/drivesims/SwerveDriveSimulation.java create mode 100644 temp_yagsl/org/ironmaple/simulation/drivesims/SwerveModuleSimulation.java create mode 100644 temp_yagsl/org/ironmaple/simulation/drivesims/configs/DriveTrainSimulationConfig.java create mode 100644 temp_yagsl/org/ironmaple/simulation/drivesims/configs/SwerveModuleSimulationConfig.java create mode 100644 temp_yagsl/org/ironmaple/simulation/motorsims/MapleMotorSim.java create mode 100644 temp_yagsl/org/ironmaple/simulation/motorsims/SimulatedMotorController.java create mode 100644 temp_yagsl/org/ironmaple/utils/mathutils/SwerveStateProjection.java create mode 100644 temp_yagsl/swervelib/SwerveDrive.java create mode 100644 temp_yagsl/swervelib/SwerveModule.java create mode 100644 temp_yagsl/swervelib/math/SwerveMath.java create mode 100644 temp_yagsl/swervelib/parser/SwerveDriveConfiguration.java create mode 100644 temp_yagsl/swervelib/parser/SwerveModuleConfiguration.java create mode 100644 temp_yagsl/swervelib/parser/SwerveParser.java create mode 100644 temp_yagsl/swervelib/parser/json/ModuleJson.java create mode 100644 temp_yagsl/swervelib/parser/json/modules/AngleConversionFactorsJson.java create mode 100644 temp_yagsl/swervelib/parser/json/modules/ConversionFactorsJson.java create mode 100644 temp_yagsl/swervelib/parser/json/modules/DriveConversionFactorsJson.java create mode 100644 temp_yagsl/swervelib/parser/json/modules/LocationJson.java create mode 100644 temp_yagsl/swervelib/simulation/SwerveIMUSimulation.java create mode 100644 temp_yagsl/swervelib/simulation/SwerveModuleSimulation.java diff --git a/simgui-ds.json b/simgui-ds.json index 69b1a3c..063e2ab 100644 --- a/simgui-ds.json +++ b/simgui-ds.json @@ -90,6 +90,9 @@ } ], "robotJoysticks": [ + { + "guid": "78696e70757401000000000000000000" + }, { "guid": "Keyboard0" } diff --git a/src/main/deploy/SWERVE/modules/Backleft.json b/src/main/deploy/SWERVE/modules/Backleft.json index 63f462f..2091243 100644 --- a/src/main/deploy/SWERVE/modules/Backleft.json +++ b/src/main/deploy/SWERVE/modules/Backleft.json @@ -1,27 +1 @@ -{ - "location": { - "front": -11.125, - "left": 11.125 - }, - "absoluteEncoderOffset": 0, - "drive": { - "type": "talonfx", - "id": 43, - "canbus": null - }, - "angle": { - "type": "talonfx", - "id": 42, - "canbus": null - }, - "encoder": { - "type": "cancoder", - "id": 41, - "canbus": null - }, - "inverted": { - "drive": false, - "angle": false - }, - "absoluteEncoderInverted": false -} \ No newline at end of file +{"location":{"front":-11.125,"left":11.125},"absoluteEncoderOffset":0,"drive":{"type":"talonfx","id":43,"canbus":null},"angle":{"type":"talonfx","id":42,"canbus":null},"encoder":{"type":"cancoder","id":41,"canbus":null},"inverted":{"drive":false,"angle":false}} diff --git a/src/main/deploy/SWERVE/modules/Backright.json b/src/main/deploy/SWERVE/modules/Backright.json index 865e5ba..13907a0 100644 --- a/src/main/deploy/SWERVE/modules/Backright.json +++ b/src/main/deploy/SWERVE/modules/Backright.json @@ -1,27 +1 @@ -{ - "location": { - "front": -11.125, - "left": -11.125 - }, - "absoluteEncoderOffset": 36.13, - "drive": { - "type": "talonfx", - "id": 33, - "canbus": null - }, - "angle": { - "type": "talonfx", - "id": 32, - "canbus": null - }, - "encoder": { - "type": "cancoder", - "id": 31, - "canbus": null - }, - "inverted": { - "drive": false, - "angle": false - }, - "absoluteEncoderInverted": false -} \ No newline at end of file +{"location":{"front":-11.125,"left":-11.125},"absoluteEncoderOffset":0,"drive":{"type":"talonfx","id":33,"canbus":null},"angle":{"type":"talonfx","id":32,"canbus":null},"encoder":{"type":"cancoder","id":31,"canbus":null},"inverted":{"drive":false,"angle":false}} diff --git a/src/main/deploy/SWERVE/modules/Frontleft.json b/src/main/deploy/SWERVE/modules/Frontleft.json index d723112..d3f2db9 100644 --- a/src/main/deploy/SWERVE/modules/Frontleft.json +++ b/src/main/deploy/SWERVE/modules/Frontleft.json @@ -1,27 +1 @@ -{ - "location": { - "front": 11.125, - "left": 11.125 - }, - "absoluteEncoderOffset": 0, - "drive": { - "type": "talonfx", - "id": 13, - "canbus": null - }, - "angle": { - "type": "talonfx", - "id": 12, - "canbus": null - }, - "encoder": { - "type": "cancoder", - "id": 11, - "canbus": null - }, - "inverted": { - "drive": false, - "angle": false - }, - "absoluteEncoderInverted": false -} \ No newline at end of file +{"location":{"front":11.125,"left":11.125},"absoluteEncoderOffset":0,"drive":{"type":"talonfx","id":13,"canbus":null},"angle":{"type":"talonfx","id":12,"canbus":null},"encoder":{"type":"cancoder","id":11,"canbus":null},"inverted":{"drive":false,"angle":false}} diff --git a/src/main/deploy/SWERVE/modules/Frontright.json b/src/main/deploy/SWERVE/modules/Frontright.json index 42f017a..605b896 100644 --- a/src/main/deploy/SWERVE/modules/Frontright.json +++ b/src/main/deploy/SWERVE/modules/Frontright.json @@ -1,27 +1 @@ -{ - "location": { - "front": 11.125, - "left": -11.125 - }, - "absoluteEncoderOffset": 0, - "drive": { - "type": "talonfx", - "id": 23, - "canbus": null - }, - "angle": { - "type": "talonfx", - "id": 22, - "canbus": null - }, - "encoder": { - "type": "cancoder", - "id": 21, - "canbus": null - }, - "inverted": { - "drive": false, - "angle": false - }, - "absoluteEncoderInverted": false -} \ No newline at end of file +{"location":{"front":11.125,"left":-11.125},"absoluteEncoderOffset":0,"drive":{"type":"talonfx","id":23,"canbus":null},"angle":{"type":"talonfx","id":22,"canbus":null},"encoder":{"type":"cancoder","id":21,"canbus":null},"inverted":{"drive":false,"angle":false}} diff --git a/src/main/deploy/SWERVE/swerve.json b/src/main/deploy/SWERVE/swerve.json deleted file mode 100644 index 4d6a677..0000000 --- a/src/main/deploy/SWERVE/swerve.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "gyro": { - "type": "pigeon2", - "id": 1, - "canbus": null - }, - "invertedDrive": false, - "maxSpeed": 4.5 -} diff --git a/src/main/deploy/SWERVE/swervedrive.json b/src/main/deploy/SWERVE/swervedrive.json index 5c4ddd2..1ed6650 100644 --- a/src/main/deploy/SWERVE/swervedrive.json +++ b/src/main/deploy/SWERVE/swervedrive.json @@ -4,7 +4,7 @@ "id": 50, "canbus": null }, - "invertedIMU": true, + "invertedIMU": false, "modules": [ "Frontleft.json", "Frontright.json", diff --git a/src/main/java/frc/robot/Robot.java b/src/main/java/frc/robot/Robot.java index 4794cb0..0cb4c08 100644 --- a/src/main/java/frc/robot/Robot.java +++ b/src/main/java/frc/robot/Robot.java @@ -189,6 +189,12 @@ public void testInit() { SmartDashboard.putBoolean("Robot/Enabled", true); // Cancels all running commands at the start of test mode. CommandScheduler.getInstance().cancelAll(); + + // Auto-start the forward drive diagnostic + if (robotInitialized && m_robotContainer != null && m_robotContainer.m_DriveSubsystem != null) { + m_robotContainer.m_DriveSubsystem.testDriveForwardCommand().schedule(); + System.out.println("[TEST] Auto-started testDriveForwardCommand"); + } } /** This function is called periodically during test mode. */ diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index d9c7f42..76db7c6 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -256,12 +256,11 @@ private void configureBindings() { ).withName("PrecisionDrive") ); - // Test auto with A button + // Test: A button = pure forward drive (1 m/s, no joystick, no field-relative) + // If robot spins during this, the issue is module config. If straight, issue is joystick/field-relative. driverXbox.a() - .onTrue(Commands.runOnce(() -> SmartDashboard.putString("Status/Last Action", "Running Auto Test"))) - .whileTrue( - Commands.defer(this::getAutonomousCommand, m_DriveSubsystem != null ? Set.of(m_DriveSubsystem) : Set.of()) - ); + .onTrue(Commands.runOnce(() -> SmartDashboard.putString("Status/Last Action", "TEST FORWARD DRIVE"))) + .whileTrue(m_DriveSubsystem.testDriveForwardCommand()); // Initialize status SmartDashboard.putString("Status/Speed Mode", "Normal"); diff --git a/src/main/java/frc/robot/subsystems/DriveSubsystem.java b/src/main/java/frc/robot/subsystems/DriveSubsystem.java index e06d9e6..6cb0a79 100644 --- a/src/main/java/frc/robot/subsystems/DriveSubsystem.java +++ b/src/main/java/frc/robot/subsystems/DriveSubsystem.java @@ -21,6 +21,7 @@ import com.pathplanner.lib.config.RobotConfig; import com.pathplanner.lib.controllers.PPHolonomicDriveController; import edu.wpi.first.wpilibj.DriverStation; +@SuppressWarnings("unused") public class DriveSubsystem extends SubsystemBase { @@ -78,22 +79,19 @@ private void initializeSwerve() { swerveDrive = new SwerveParser(swerveJsonDirectory).createSwerveDrive(DriveConstants.MAX_SPEED_MPS); - // CRITICAL: Disable heading correction to prevent phantom spinning - // Heading correction tries to maintain heading when not rotating, but can cause unwanted rotation + // Match YAGSL official example configuration: + // 1. Heading correction should only be used while controlling via angle setpoint swerveDrive.setHeadingCorrection(false); + // 2. Disable cosine compensation — causes discrepancies in simulation + swerveDrive.setCosineCompensator(false); + // 3. Correct for skew that gets worse as angular velocity increases + swerveDrive.setAngularVelocityCompensation(true, true, 0.1); + // 4. Disable auto-synchronize to prevent jitter + swerveDrive.setModuleEncoderAutoSynchronize(false, 1); verifyModules(); initialized = true; - if (swerveDrive != null) { - try { - swerveDrive.drive(new Translation2d(0, 0), 0, false, false); - Thread.sleep(100); - } catch (Exception e) { - logDebug("Initial drive stop: " + e.getMessage()); - } - } - try { if (swerveDrive != null) { var initialHeading = swerveDrive.getOdometryHeading(); @@ -105,16 +103,6 @@ private void initializeSwerve() { } zeroGyro(); - synchronizeModuleEncoders(); - - if (swerveDrive != null) { - try { - swerveDrive.driveFieldOriented(new ChassisSpeeds(0, 0, 0)); - Thread.sleep(100); - } catch (Exception e) { - logDebug("Post-zero stop: " + e.getMessage()); - } - } SmartDashboard.putBoolean("Drive/Initialized", true); logDebug("Swerve drive initialized successfully"); @@ -283,53 +271,33 @@ private ChassisSpeeds limitSpeeds(ChassisSpeeds speeds) { public Command driveCommand(DoubleSupplier translationX, DoubleSupplier translationY, DoubleSupplier rotationX) { + // Matches YAGSL official example: driveCommand(DoubleSupplier, DoubleSupplier, DoubleSupplier) return run(() -> { - if (!isReadyToDrive()) { - stop(); - SmartDashboard.putString("Debug/DriveState", "NOT READY - waiting for startup"); + if (!isInitialized()) { return; } try { - double rawX = translationX.getAsDouble(); - double rawY = translationY.getAsDouble(); - double rawRot = rotationX.getAsDouble(); - - double xInput = applyDeadzone(rawX); - double yInput = applyDeadzone(rawY); - double rotInput = applyRotationDeadzone(rawRot); - - // Debug: show exactly what the inputs are at every stage - SmartDashboard.putNumber("Debug/Raw X", rawX); - SmartDashboard.putNumber("Debug/Raw Y", rawY); - SmartDashboard.putNumber("Debug/Raw Rot", rawRot); - SmartDashboard.putNumber("Debug/After Deadzone X", xInput); - SmartDashboard.putNumber("Debug/After Deadzone Y", yInput); - SmartDashboard.putNumber("Debug/After Deadzone Rot", rotInput); - - xInput = clamp(xInput, -1.0, 1.0); - yInput = clamp(yInput, -1.0, 1.0); - rotInput = clamp(rotInput, -1.0, 1.0); + double xInput = translationX.getAsDouble(); + double yInput = translationY.getAsDouble(); + double rotInput = rotationX.getAsDouble(); - currentXSpeed = xInput * DriveConstants.MAX_SPEED_MPS; - currentYSpeed = yInput * DriveConstants.MAX_SPEED_MPS; - currentRotSpeed = rotInput * DriveConstants.MAX_ANGULAR_VELOCITY; + // Apply deadzone + xInput = applyDeadzone(xInput); + yInput = applyDeadzone(yInput); + rotInput = applyRotationDeadzone(rotInput); - SmartDashboard.putNumber("Debug/Final vX", currentXSpeed); - SmartDashboard.putNumber("Debug/Final vY", currentYSpeed); - SmartDashboard.putNumber("Debug/Final Omega", currentRotSpeed); - SmartDashboard.putString("Debug/DriveState", "DRIVING"); + // Scale to velocity (m/s and rad/s) + currentXSpeed = xInput * swerveDrive.getMaximumChassisVelocity(); + currentYSpeed = yInput * swerveDrive.getMaximumChassisVelocity(); + currentRotSpeed = Math.pow(rotInput, 3) * swerveDrive.getMaximumChassisAngularVelocity(); - // ALWAYS use YAGSL for driving — it handles both real and sim internally. - // Trying to bypass YAGSL in sim caused the oscillation because YAGSL's own - // periodic() still runs and conflicts with our manual sim pose. - if (isInitialized()) { - swerveDrive.drive( - new Translation2d(currentXSpeed, currentYSpeed), - currentRotSpeed, - false, // robot-oriented to avoid gyro issues - false); // closed-loop for stable sim - } + // Drive using YAGSL — field-relative, closed-loop (matching YAGSL example) + swerveDrive.drive( + new Translation2d(currentXSpeed, currentYSpeed), + currentRotSpeed, + true, + false); } catch (Exception e) { logError("Drive command error: " + e.getMessage()); @@ -340,6 +308,73 @@ public Command driveCommand(DoubleSupplier translationX, DoubleSupplier translat // Removed deprecated driveFieldOrientedSafe - all drive paths now use YAGSL consistently + private long diagPrintCounter = 0; + + /** + * Diagnostic command: drives the robot at a fixed 1 m/s forward using robot-relative ChassisSpeeds. + * Logs detailed module state info to identify spinning root cause. + */ + public Command testDriveForwardCommand() { + return run(() -> { + if (isInitialized()) { + ChassisSpeeds desired = new ChassisSpeeds(1.0, 0.0, 0.0); + + // Drive robot-relative, closed-loop + swerveDrive.drive(desired); + + // Log what kinematics WANTS vs what modules ACTUALLY report + var desiredStates = swerveDrive.kinematics.toSwerveModuleStates(desired); + var modules = swerveDrive.getModules(); + String[] names = {"FL", "FR", "BL", "BR"}; + boolean shouldPrint = (diagPrintCounter++ % 50 == 0); // Print every 1 second at 50Hz + + if (shouldPrint) { + System.out.println("=== DIAG: ChassisSpeeds(1,0,0) robot-relative ==="); + System.out.printf(" Heading: %.2f deg%n", swerveDrive.getOdometryHeading().getDegrees()); + } + + for (int i = 0; i < modules.length; i++) { + var actual = modules[i].getState(); + SmartDashboard.putNumber("Diag/" + names[i] + "/DesiredAngle", desiredStates[i].angle.getDegrees()); + SmartDashboard.putNumber("Diag/" + names[i] + "/DesiredSpeed", desiredStates[i].speedMetersPerSecond); + SmartDashboard.putNumber("Diag/" + names[i] + "/ActualAngle", actual.angle.getDegrees()); + SmartDashboard.putNumber("Diag/" + names[i] + "/ActualSpeed", actual.speedMetersPerSecond); + SmartDashboard.putNumber("Diag/" + names[i] + "/AngleError", + desiredStates[i].angle.getDegrees() - actual.angle.getDegrees()); + + // Also log maple-sim direct state if available + var simMod = modules[i].getSimModule(); + if (simMod != null && simMod.mapleSimModule != null) { + var simState = simMod.mapleSimModule.getMeasuredState(); + SmartDashboard.putNumber("Diag/" + names[i] + "/SimAngle", simState.angle.getDegrees()); + SmartDashboard.putNumber("Diag/" + names[i] + "/SimSpeed", simState.speedMetersPerSecond); + } + + if (shouldPrint) { + System.out.printf(" %s: desired(%.1f°, %.2f m/s) actual(%.1f°, %.2f m/s) err=%.1f°%n", + names[i], + desiredStates[i].angle.getDegrees(), desiredStates[i].speedMetersPerSecond, + actual.angle.getDegrees(), actual.speedMetersPerSecond, + desiredStates[i].angle.getDegrees() - actual.angle.getDegrees()); + } + } + var velocity = swerveDrive.getRobotVelocity(); + SmartDashboard.putNumber("Diag/ActualVx", velocity.vxMetersPerSecond); + SmartDashboard.putNumber("Diag/ActualVy", velocity.vyMetersPerSecond); + SmartDashboard.putNumber("Diag/ActualOmega", velocity.omegaRadiansPerSecond); + SmartDashboard.putNumber("Diag/Heading", swerveDrive.getOdometryHeading().getDegrees()); + + if (shouldPrint) { + System.out.printf(" Velocity: vx=%.2f vy=%.2f omega=%.3f rad/s%n", + velocity.vxMetersPerSecond, velocity.vyMetersPerSecond, velocity.omegaRadiansPerSecond); + System.out.printf(" Pose: (%.2f, %.2f) @ %.1f°%n", + swerveDrive.getPose().getX(), swerveDrive.getPose().getY(), + swerveDrive.getPose().getRotation().getDegrees()); + } + } + }).withName("TestDriveForward"); + } + public void stop() { currentXSpeed = 0.0; currentYSpeed = 0.0; @@ -533,52 +568,15 @@ public void diagnoseMotorInversions() { @Override public void periodic() { - try { - Pose2d pose = getPose(); - field2d.setRobotPose(pose); - - SmartDashboard.putNumber("Drive/Pose X (m)", pose.getX()); - SmartDashboard.putNumber("Drive/Pose Y (m)", pose.getY()); - SmartDashboard.putNumber("Drive/Pose Rotation (deg)", pose.getRotation().getDegrees()); - - if (isInitialized()) { - try { - var heading = swerveDrive.getOdometryHeading(); - SmartDashboard.putNumber("Drive/Heading (deg)", heading.getDegrees()); - - if (Math.abs(currentRotSpeed) < 0.01 && !isReadyToDrive()) { - SmartDashboard.putBoolean("Drive/Gyro Drift Warning", - Math.abs(heading.getDegrees()) > 1.0); - } - } catch (Exception e) { - SmartDashboard.putNumber("Drive/Heading (deg)", pose.getRotation().getDegrees()); - } - } else { - SmartDashboard.putNumber("Drive/Heading (deg)", pose.getRotation().getDegrees()); - } - - SmartDashboard.putNumber("Drive/X Velocity (m/s)", currentXSpeed); - SmartDashboard.putNumber("Drive/Y Velocity (m/s)", currentYSpeed); - SmartDashboard.putNumber("Drive/Rotation Velocity (rad/s)", currentRotSpeed); - SmartDashboard.putNumber("Drive/Total Speed (m/s)", - Math.sqrt(currentXSpeed * currentXSpeed + currentYSpeed * currentYSpeed)); - - // Debug: Show if rotation is being commanded when it shouldn't be - if (Math.abs(currentRotSpeed) > 0.01 && Math.abs(currentXSpeed) < 0.1 && Math.abs(currentYSpeed) < 0.1) { - SmartDashboard.putBoolean("Drive/Unexpected Rotation", true); - } else { - SmartDashboard.putBoolean("Drive/Unexpected Rotation", false); + // Minimal periodic — YAGSL handles odometry updates in its own thread + // Only update field2d for visualization + if (isInitialized()) { + try { + Pose2d pose = swerveDrive.getPose(); + field2d.setRobotPose(pose); + } catch (Exception e) { + // silently handle } - - updateModuleData(); - - SmartDashboard.putBoolean("Drive/Initialized", isInitialized()); - SmartDashboard.putBoolean("Drive/Modules Zeroed", hasZeroed); - SmartDashboard.putBoolean("Drive/Ready", isReadyToDrive()); - SmartDashboard.putBoolean("Drive/Simulation", RobotBase.isSimulation()); - - } catch (Exception e) { - logError("Periodic error: " + e.getMessage()); } } diff --git a/temp_yagsl/org/ironmaple/simulation/drivesims/AbstractDriveTrainSimulation.java b/temp_yagsl/org/ironmaple/simulation/drivesims/AbstractDriveTrainSimulation.java new file mode 100644 index 0000000..c3109b2 --- /dev/null +++ b/temp_yagsl/org/ironmaple/simulation/drivesims/AbstractDriveTrainSimulation.java @@ -0,0 +1,169 @@ +package org.ironmaple.simulation.drivesims; + +import static edu.wpi.first.units.Units.Meters; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.kinematics.ChassisSpeeds; +import edu.wpi.first.math.kinematics.SwerveModuleState; +import org.dyn4j.dynamics.Body; +import org.dyn4j.geometry.Geometry; +import org.dyn4j.geometry.MassType; +import org.ironmaple.simulation.drivesims.configs.DriveTrainSimulationConfig; +import org.ironmaple.utils.mathutils.GeometryConvertor; + +/** + * + * + *

Represents an Abstract Drivetrain Simulation.

+ * + *

Simulates the Mass, Collision Space, and Friction of the Drivetrain.

+ * + *

This class models the physical properties of a drivetrain, including mass and collision space. + * + *

It also provides APIs to obtain the status (position, velocity etc.) in WPILib geometry classes. + * + *

The propelling forces generated by motors are simulated in its subclass, or {@link SwerveDriveSimulation}. + */ +public abstract class AbstractDriveTrainSimulation extends Body { + public static final double + BUMPER_COEFFICIENT_OF_FRICTION = 0.65, // https://en.wikipedia.org/wiki/Friction#Coefficient_of_friction + BUMPER_COEFFICIENT_OF_RESTITUTION = 0.08; // https://simple.wikipedia.org/wiki/Coefficient_of_restitution + + public final DriveTrainSimulationConfig config; + + /** + * + * + *

Creates a Simulation of a Drivetrain.

+ * + *

Sets Up the Collision Space and Mass of the Chassis.

+ * + *

Since this is an abstract class, the constructor must be called from a subclass. + * + *

Note that the chassis does not appear on the simulation field upon creation. Refer to + * {@link org.ironmaple.simulation.SimulatedArena} for instructions on how to add it to the simulation world. + * + * @param config a {@link DriveTrainSimulationConfig} instance containing the configurations of this drivetrain + * @param initialPoseOnField the initial pose of the drivetrain in the simulation world + */ + protected AbstractDriveTrainSimulation(DriveTrainSimulationConfig config, Pose2d initialPoseOnField) { + + this.config = config; + /* width and height in world reference is flipped */ + final double WIDTH_IN_WORLD_REFERENCE = config.bumperLengthX.in(Meters), + HEIGHT_IN_WORLD_REFERENCE = config.bumperWidthY.in(Meters); + + super.addFixture( + Geometry.createRectangle(WIDTH_IN_WORLD_REFERENCE, HEIGHT_IN_WORLD_REFERENCE), + config.getDensityKgPerSquaredMeters(), + BUMPER_COEFFICIENT_OF_FRICTION, + BUMPER_COEFFICIENT_OF_RESTITUTION); + + super.setMass(MassType.NORMAL); + super.setLinearDamping(0.1); + super.setAngularDamping(0.1); + setSimulationWorldPose(initialPoseOnField); + } + + /** + * + * + *

Sets the Robot's Current Pose in the Simulation World.

+ * + *

This method instantly teleports the robot to the specified pose in the simulation world. The robot does not + * drive to the new pose; it is moved directly. + * + * @param robotPose the desired robot pose, represented as a {@link Pose2d} + */ + public void setSimulationWorldPose(Pose2d robotPose) { + super.transform.set(GeometryConvertor.toDyn4jTransform(robotPose)); + super.linearVelocity.set(0, 0); + } + + /** + * + * + *

Sets the Robot's Speeds to the Given Chassis Speeds.

+ * + *

This method sets the robot's current velocity to the specified chassis speeds. + * + *

The robot does not accelerate smoothly to these speeds; instead, it jumps to the velocity + * Instantaneously. + * + * @param givenSpeeds the desired chassis speeds, represented as a {@link ChassisSpeeds} object + */ + public void setRobotSpeeds(ChassisSpeeds givenSpeeds) { + super.setLinearVelocity(GeometryConvertor.toDyn4jLinearVelocity(givenSpeeds)); + super.setAngularVelocity(givenSpeeds.omegaRadiansPerSecond); + } + + /** + * + * + *

Abstract Simulation Sub-Tick Method.

+ * + *

This method is called every time the simulation world is updated. + * + *

It is implemented in the sub-classes of {@link AbstractDriveTrainSimulation}. + * + *

It is responsible for applying the propelling forces to the robot during each sub-tick of the simulation. + */ + public abstract void simulationSubTick(); + + /** + * + * + *

Gets the Actual Pose of the Drivetrain in the Simulation World.

+ * + *

This method is used to display the robot on AdvantageScope Field3d or to update + * vision simulations. + * + *

Note: Do not use this method to simulate odometry! For a more realistic odometry simulation, + * use a {@link SwerveDriveSimulation} together with a + * {@link edu.wpi.first.math.estimator.SwerveDrivePoseEstimator}. + * + * @return a {@link Pose2d} object yielding the current world pose of the robot in the simulation + */ + public Pose2d getSimulatedDriveTrainPose() { + return GeometryConvertor.toWpilibPose2d(getTransform()); + } + + /** + * + * + *

Gets the Actual Robot-Relative Chassis Speeds from the Simulation.

+ * + *

This method returns the actual chassis speeds of the drivetrain in the simulation, relative to the robot. + * + *

To simulate the chassis speeds calculated by encoders, use a {@link SwerveDriveSimulation} together with + * {@link edu.wpi.first.math.kinematics.SwerveDriveKinematics#toChassisSpeeds(SwerveModuleState...)} for a more + * realistic simulation. + * + * @return the actual chassis speeds in the simulation world, Robot-Relative + */ + public ChassisSpeeds getDriveTrainSimulatedChassisSpeedsRobotRelative() { + ChassisSpeeds speeds = getDriveTrainSimulatedChassisSpeedsFieldRelative(); + speeds = ChassisSpeeds.fromFieldRelativeSpeeds( + speeds, getSimulatedDriveTrainPose().getRotation()); + return speeds; + } + + /** + * + * + *

Gets the Actual Field-Relative Chassis Speeds from the Simulation.

+ * + *

This method returns the actual chassis speeds of the drivetrain in the simulation, relative to the robot. + * + *

To simulate the chassis speeds calculated by encoders, use a {@link SwerveDriveSimulation} together with + * {@link edu.wpi.first.math.kinematics.SwerveDriveKinematics#toChassisSpeeds(SwerveModuleState...)} for a more + * realistic simulation. + * + * @return the actual chassis speeds in the simulation world, Field-Relative + */ + public ChassisSpeeds getDriveTrainSimulatedChassisSpeedsFieldRelative() { + return GeometryConvertor.toWpilibChassisSpeeds(getLinearVelocity(), getAngularVelocity()); + } +} diff --git a/temp_yagsl/org/ironmaple/simulation/drivesims/SelfControlledSwerveDriveSimulation.java b/temp_yagsl/org/ironmaple/simulation/drivesims/SelfControlledSwerveDriveSimulation.java new file mode 100644 index 0000000..3c27341 --- /dev/null +++ b/temp_yagsl/org/ironmaple/simulation/drivesims/SelfControlledSwerveDriveSimulation.java @@ -0,0 +1,580 @@ +package org.ironmaple.simulation.drivesims; + +import static edu.wpi.first.units.Units.*; + +import edu.wpi.first.math.Matrix; +import edu.wpi.first.math.VecBuilder; +import edu.wpi.first.math.controller.PIDController; +import edu.wpi.first.math.estimator.SwerveDrivePoseEstimator; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Translation2d; +import edu.wpi.first.math.kinematics.*; +import edu.wpi.first.math.numbers.N1; +import edu.wpi.first.math.numbers.N3; +import edu.wpi.first.units.measure.*; +import edu.wpi.first.wpilibj.Timer; +import java.util.Arrays; +import org.ironmaple.simulation.SimulatedArena; +import org.ironmaple.simulation.drivesims.configs.DriveTrainSimulationConfig; +import org.ironmaple.simulation.motorsims.SimulatedMotorController; +import org.ironmaple.utils.mathutils.SwerveStateProjection; + +/** + * + * + *

An easier way to simulate swerve drive.

+ * + *

Check Online Documentation + * + *

This class owns and controls a {@link SwerveDriveSimulation}, running closed loops/open loops on the simulated + * motors. + * + *

It works identically to how the real swerve simulation code. + * + *

Note: The order for swerve modules is: front-left, front-right, back-left, back-right. + */ +public class SelfControlledSwerveDriveSimulation { + private final SwerveDriveSimulation swerveDriveSimulation; + private final SelfControlledModuleSimulation[] moduleSimulations; + private final SwerveDriveKinematics kinematics; + private final SwerveDrivePoseEstimator poseEstimator; + private final SwerveModuleState[] setPointsOptimized; + + /** + * + * + *

Default Constructor.

+ * + *

Constructs a simplified swerve simulation with default standard deviations for odometry & vision pose + * estimates. + * + *

Odometry is simulated as high-frequency odometry, assuming a robot period of 0.02 seconds and an odometry + * frequency of 250 Hz. + * + * @param swerveDriveSimulation the {@link SwerveDriveSimulation} to control. + */ + public SelfControlledSwerveDriveSimulation(SwerveDriveSimulation swerveDriveSimulation) { + this(swerveDriveSimulation, VecBuilder.fill(0.1, 0.1, 0.1), VecBuilder.fill(0.9, 0.9, 0.9)); + } + + /** + * + * + *

Constructs an instance with given odometry standard deviations.

+ * + *

Constructs a simplified swerve simulation with specified standard deviations for odometry & vision pose + * estimates. + * + * @param swerveDriveSimulation the {@link SwerveDriveSimulation} to control. + * @param stateStdDevs the standard deviations for odometry encoders. + * @param visionMeasurementStdDevs the standard deviations for vision pose estimates. + */ + public SelfControlledSwerveDriveSimulation( + SwerveDriveSimulation swerveDriveSimulation, + Matrix stateStdDevs, + Matrix visionMeasurementStdDevs) { + this.swerveDriveSimulation = swerveDriveSimulation; + this.moduleSimulations = Arrays.stream(swerveDriveSimulation.getModules()) + .map(SelfControlledModuleSimulation::new) + .toArray(SelfControlledModuleSimulation[]::new); + + this.kinematics = swerveDriveSimulation.kinematics; + + this.poseEstimator = new SwerveDrivePoseEstimator( + kinematics, + getRawGyroAngle(), + getLatestModulePositions(), + getActualPoseInSimulationWorld(), + stateStdDevs, + visionMeasurementStdDevs); + + this.setPointsOptimized = new SwerveModuleState[moduleSimulations.length]; + Arrays.fill(setPointsOptimized, new SwerveModuleState()); + } + + /** + * + * + *

Periodic Method for Simplified Swerve Sim.

+ * + *

Call this method in the {@link edu.wpi.first.wpilibj2.command.Subsystem#periodic()} of your swerve subsystem. + * + *

Updates the odometry by fetching cached inputs. + */ + public void periodic() { + final SwerveModulePosition[][] cachedModulePositions = getCachedModulePositions(); + for (int i = 0; i < SimulatedArena.getSimulationSubTicksIn1Period(); i++) + poseEstimator.updateWithTime( + Timer.getFPGATimestamp() + - SimulatedArena.getSimulationDt().in(Seconds) + * (SimulatedArena.getSimulationDt().in(Seconds) - i), + swerveDriveSimulation.gyroSimulation.getCachedGyroReadings()[i], + cachedModulePositions[i]); + } + + /** + * + * + *

Obtains the LATEST module positions measured by the encoders.

+ * + *

The order for swerve modules is: front-left, front-right, back-left, back-right. + * + * @return the module positions + */ + public SwerveModulePosition[] getLatestModulePositions() { + return Arrays.stream(moduleSimulations) + .map(SelfControlledModuleSimulation::getModulePosition) + .toArray(SwerveModulePosition[]::new); + } + + /** + * + * + *

Obtains the CACHED module positions measured by the encoders.

+ * + *

This simulates high-frequency odometry. + * + *

The module positions, or the value of {@link #getLatestModulePositions()} are cached in every simulation + * sub-tick. + * + *

The array is ordered in a [timeStampIndex][moduleIndex] format. + * + *

The order for swerve modules is: front-left, front-right, back-left, back-right. + * + * @return the cached module positions + */ + public SwerveModulePosition[][] getCachedModulePositions() { + final SwerveModulePosition[][] cachedModulePositions = + new SwerveModulePosition[SimulatedArena.getSimulationSubTicksIn1Period()][moduleSimulations.length]; + + for (int moduleIndex = 0; moduleIndex < moduleSimulations.length; moduleIndex++) { + final Angle[] wheelPosition = moduleSimulations[moduleIndex].instance.getCachedDriveWheelFinalPositions(); + final Rotation2d[] swerveModuleFacings = + moduleSimulations[moduleIndex].instance.getCachedSteerAbsolutePositions(); + for (int timeStamp = 0; timeStamp < SimulatedArena.getSimulationSubTicksIn1Period(); timeStamp++) + cachedModulePositions[timeStamp][moduleIndex] = new SwerveModulePosition( + wheelPosition[timeStamp].in(Radians) + * moduleSimulations[0].instance.config.WHEEL_RADIUS.in(Meters), + swerveModuleFacings[timeStamp]); + } + + return cachedModulePositions; + } + + /** + * + * + *

Obtains the raw angle of the gyro.

+ * + *

Note that the simulated gyro also drifts/skids like real gyros, especially if the robot collides. + * + *

To obtain the facing of the robot retrieved from the odometry, use {@link #getOdometryEstimatedPose()}; to + * obtain the actual facing of the robot, use {@link #getActualPoseInSimulationWorld()}. + * + * @deprecated This rotation is NOT the actual facing of the robot; it is uncalibrated and is only + * used for features like rotation lock. + * @return the raw (uncalibrated) angle of the simulated gyro. + */ + @Deprecated + public Rotation2d getRawGyroAngle() { + return swerveDriveSimulation.gyroSimulation.getGyroReading(); + } + + /** + * + * + *

Obtains the robot pose measured by the odometry.

+ * + *

Retrieves the pose estimated by the odometry system (and vision, if applicable). + * + *

This method wraps around {@link SwerveDrivePoseEstimator#getEstimatedPosition()}. + * + *

This represents the estimated position of the robot. + * + *

Note that this estimation includes realistic simulations of measurement errors due to skidding and odometry + * drift. + * + *

To obtain the ACTUAL pose of the robot, with no measurement errors, use + * {@link #getActualPoseInSimulationWorld()}. + */ + public Pose2d getOdometryEstimatedPose() { + return poseEstimator.getEstimatedPosition(); + } + + /** + * + * + *

Resets the odometry to a specified position.

+ * + *

This method wraps around {@link SwerveDrivePoseEstimator#resetPosition(Rotation2d, SwerveModulePosition[], + * Pose2d)}. + * + *

It resets the position of the pose estimator to the given pose. + * + * @param pose The position on the field where the robot is located. + */ + public void resetOdometry(Pose2d pose) { + this.poseEstimator.resetPosition(getRawGyroAngle(), getLatestModulePositions(), pose); + } + + /** + * + * + *

Adds a vision estimation to the pose estimator.

+ * + *

This method wraps around {@link SwerveDrivePoseEstimator#addVisionMeasurement(Pose2d, double)}. + * + *

Adds a vision measurement to the Kalman Filter, correcting the odometry pose estimate while accounting for + * measurement noise. + * + * @param robotPoseMeters The pose of the robot as measured by the vision camera. + * @param timeStampSeconds The timestamp of the vision measurement, in seconds. + */ + public void addVisionEstimation(Pose2d robotPoseMeters, double timeStampSeconds) { + this.poseEstimator.addVisionMeasurement(robotPoseMeters, timeStampSeconds); + } + + /** + * + * + *

Adds a vision estimation to the pose estimator.

+ * + *

This method wraps around {@link SwerveDrivePoseEstimator#addVisionMeasurement(Pose2d, double, Matrix)}. + * + *

Adds a vision measurement to the Kalman Filter, correcting the odometry pose estimate while accounting for + * measurement noise. + * + * @param robotPoseMeters The pose of the robot as measured by the vision camera. + * @param timeStampSeconds The timestamp of the vision measurement, in seconds. + * @param measurementStdDevs Standard deviations of the vision pose measurement (x position in meters, y position in + * meters, and heading in radians). Increase these values to reduce the trust in the vision pose measurement. + */ + public void addVisionEstimation( + Pose2d robotPoseMeters, double timeStampSeconds, Matrix measurementStdDevs) { + this.poseEstimator.addVisionMeasurement(robotPoseMeters, timeStampSeconds, measurementStdDevs); + } + + /** + * + * + *

Runs chassis speeds on the simulated swerve drive.

+ * + *

Runs the specified chassis speeds, either robot-centric or field-centric. + * + * @param chassisSpeeds The speeds to run, in either robot-centric or field-centric coordinates. + * @param centerOfRotationMeters The center of rotation. For example, if you set the center of rotation at one + * corner of the robot and provide a chassis speed that has only a dtheta component, the robot will rotate + * around that corner. + * @param fieldCentricDrive Whether to execute field-centric drive with the provided speed. + * @param discretizeSpeeds Whether to apply {@link ChassisSpeeds#discretize(ChassisSpeeds, double)} to the provided + * speed. + */ + public void runChassisSpeeds( + ChassisSpeeds chassisSpeeds, + Translation2d centerOfRotationMeters, + boolean fieldCentricDrive, + boolean discretizeSpeeds) { + if (fieldCentricDrive) { + chassisSpeeds = ChassisSpeeds.fromFieldRelativeSpeeds( + chassisSpeeds, getOdometryEstimatedPose().getRotation()); + } + if (discretizeSpeeds) { + chassisSpeeds = ChassisSpeeds.discretize( + chassisSpeeds, + SimulatedArena.getSimulationDt().in(Seconds) * SimulatedArena.getSimulationSubTicksIn1Period()); + } + final SwerveModuleState[] setPoints = kinematics.toSwerveModuleStates(chassisSpeeds, centerOfRotationMeters); + runSwerveStates(setPoints); + } + + /** + * + * + *

Runs a raw module states on the chassis.

+ * + *

Runs the specified module states on the modules. + * + * @param setPoints an array of {@link SwerveModuleState} yielding the requested states + */ + public void runSwerveStates(SwerveModuleState[] setPoints) { + for (int i = 0; i < moduleSimulations.length; i++) + setPointsOptimized[i] = moduleSimulations[i].optimizeAndRunModuleState(setPoints[i]); + } + + /** + * + * + *

Obtain the MEASURED swerve states.

+ * + *

The order of the swerve modules is: front-left, front-right, back-left, back-right. + * + * @return The actual measured swerve states of the simulated swerve. + */ + public SwerveModuleState[] getMeasuredStates() { + return Arrays.stream(moduleSimulations) + .map(SelfControlledModuleSimulation::getMeasuredState) + .toArray(SwerveModuleState[]::new); + } + + /** + * + * + *

Obtain the optimized SETPOINTS of the swerve.

+ * + *

The setpoints are calculated using {@link SwerveDriveKinematics#toSwerveModuleStates(ChassisSpeeds)} in the + * most recent call to {@link #runChassisSpeeds(ChassisSpeeds, Translation2d, boolean, boolean)}. + * + *

The setpoints are optimized using {@link SwerveModuleState#optimize(SwerveModuleState, Rotation2d)}. + * + *

The order of the swerve modules is: front-left, front-right, back-left, back-right. + * + * @return The optimized setpoints of the swerve, calculated during the last chassis speed run. + */ + public SwerveModuleState[] getSetPointsOptimized() { + return setPointsOptimized; + } + + /** + * + * + *

Obtain the field-relative chassis speeds measured from the encoders.

+ * + *

The speeds are measured from the simulated swerve modules. + * + * @param useGyroForAngularVelocity Whether to use the gyro for a more accurate angular velocity measurement. + * @return The measured chassis speeds, field-relative. + */ + public ChassisSpeeds getMeasuredSpeedsFieldRelative(boolean useGyroForAngularVelocity) { + ChassisSpeeds speeds = getMeasuredSpeedsRobotRelative(useGyroForAngularVelocity); + speeds = ChassisSpeeds.fromRobotRelativeSpeeds( + speeds, getOdometryEstimatedPose().getRotation()); + return speeds; + } + + /** + * + * + *

Obtain the robot-relative chassis speeds measured from the encoders.

+ * + *

The speeds are measured from the simulated swerve modules. + * + * @param useGyroForAngularVelocity Whether to use the gyro for a more accurate angular velocity measurement. + * @return The measured chassis speeds, robot-relative. + */ + public ChassisSpeeds getMeasuredSpeedsRobotRelative(boolean useGyroForAngularVelocity) { + final ChassisSpeeds swerveSpeeds = kinematics.toChassisSpeeds(getMeasuredStates()); + return new ChassisSpeeds( + swerveSpeeds.vxMetersPerSecond, + swerveSpeeds.vyMetersPerSecond, + useGyroForAngularVelocity + ? swerveDriveSimulation + .gyroSimulation + .getMeasuredAngularVelocity() + .in(RadiansPerSecond) + : swerveSpeeds.omegaRadiansPerSecond); + } + + /** + * + * + *

Obtain the {@link SwerveDriveSimulation} object controlled by this simplified swerve simulation.

+ * + * @return The swerve drive simulation. + */ + public SwerveDriveSimulation getDriveTrainSimulation() { + return this.swerveDriveSimulation; + } + + /** + * + * + *

Obtain the ACTUAL robot pose.

+ * + *

Obtains the ACTUAL robot pose with zero measurement error. + * + *

To obtain the pose calculated by odometry (where the robot thinks it is), use + * {@link #getOdometryEstimatedPose()}. + */ + public Pose2d getActualPoseInSimulationWorld() { + return swerveDriveSimulation.getSimulatedDriveTrainPose(); + } + + /** + * + * + *

Get the ACTUAL field-relative chassis speeds of the robot.

+ * + *

Wraps around {@link SwerveDriveSimulation#getDriveTrainSimulatedChassisSpeedsFieldRelative()}. + * + * @return the actual chassis speeds in the simulation world, field-relative + */ + public ChassisSpeeds getActualSpeedsFieldRelative() { + return this.swerveDriveSimulation.getDriveTrainSimulatedChassisSpeedsFieldRelative(); + } + + /** + * + * + *

Get the ACTUAL robot-relative chassis speeds of the robot.

+ * + *

Wraps around {@link SwerveDriveSimulation#getDriveTrainSimulatedChassisSpeedsRobotRelative()}. + * + * @return the actual chassis speeds in the simulation world, robot-relative + */ + public ChassisSpeeds getActualSpeedsRobotRelative() { + return this.swerveDriveSimulation.getDriveTrainSimulatedChassisSpeedsRobotRelative(); + } + + /** + * + * + *

Teleport the robot to a specified location on the simulated field.

+ * + *

This method moves the drivetrain instantly to the specified location on the field, bypassing any obstacles in + * its path. + * + *

Wraps around {@link SwerveDriveSimulation#setSimulationWorldPose(Pose2d)}. + * + * @param robotPose the pose of the robot to teleport to + */ + public void setSimulationWorldPose(Pose2d robotPose) { + this.swerveDriveSimulation.setSimulationWorldPose(robotPose); + } + + public SelfControlledSwerveDriveSimulation withSteerPID(PIDController steerController) { + for (SelfControlledModuleSimulation moduleSimulation : moduleSimulations) + moduleSimulation.withSteerPID( + new PIDController(steerController.getP(), steerController.getI(), steerController.getD())); + return this; + } + + public SelfControlledSwerveDriveSimulation withCurrentLimits(Current driveCurrentLimit, Current steerCurrentLimit) { + for (SelfControlledModuleSimulation moduleSimulation : moduleSimulations) + moduleSimulation.withCurrentLimits(driveCurrentLimit, steerCurrentLimit); + + return this; + } + + public static class SelfControlledModuleSimulation { + public final SwerveModuleSimulation instance; + private Current driveCurrentLimit; + + private PIDController steerController; + + private final SimulatedMotorController.GenericMotorController driveMotor; + private final SimulatedMotorController.GenericMotorController steerMotor; + + public SelfControlledModuleSimulation(SwerveModuleSimulation moduleSimulation) { + this.instance = moduleSimulation; + steerController = new PIDController(5.0, 0, 0); + + this.driveMotor = this.instance.useGenericMotorControllerForDrive(); + this.driveMotor.withCurrentLimit(this.driveCurrentLimit = Amps.of(60)); + this.steerMotor = this.instance.useGenericControllerForSteer(); + } + + public SelfControlledModuleSimulation withSteerPID(PIDController steerController) { + this.steerController = steerController; + steerController.enableContinuousInput(-Math.PI, Math.PI); + return this; + } + + public SelfControlledModuleSimulation withCurrentLimits(Current driveCurrentLimit, Current steerCurrentLimit) { + this.driveMotor.withCurrentLimit(this.driveCurrentLimit = driveCurrentLimit); + this.steerMotor.withCurrentLimit(steerCurrentLimit); + steerController.enableContinuousInput(-Math.PI, Math.PI); + return this; + } + + /** + * + * + *

Runs the control loops for swerve states on a simulated module.

+ * + *

Optimizes the set-point using {@link SwerveModuleState#optimize(SwerveModuleState, Rotation2d)}. + * + *

Executes a closed-loop control on the swerve module. + * + * @param setPoint the desired state to optimize and apply + * @return the optimized swerve module state after control execution + */ + public SwerveModuleState optimizeAndRunModuleState(SwerveModuleState setPoint) { + setPoint.optimize(instance.getSteerAbsoluteFacing()); + runModuleState(setPoint); + return setPoint; + } + + public void runModuleState(SwerveModuleState setPoint) { + final double + cosProjectedSpeedMPS = SwerveStateProjection.project(setPoint, instance.getSteerAbsoluteFacing()), + driveWheelVelocitySetPointRadPerSec = + cosProjectedSpeedMPS / instance.config.WHEEL_RADIUS.in(Meters); + + driveMotor.requestVoltage(instance.config.driveMotorConfigs.calculateVoltage( + Amps.of(0), RadiansPerSecond.of(driveWheelVelocitySetPointRadPerSec))); + + steerMotor.requestVoltage(Volts.of(steerController.calculate( + instance.getSteerAbsoluteFacing().getRadians(), setPoint.angle.getRadians()))); + } + + public void runDriveMotorCharacterization(Rotation2d desiredModuleFacing, double volts) { + driveMotor.requestVoltage(Volts.of(volts)); + + steerMotor.requestVoltage(Volts.of(steerController.calculate( + instance.getSteerAbsoluteFacing().getRadians(), desiredModuleFacing.getRadians()))); + } + + public void runSteerMotorCharacterization(double volts) { + driveMotor.requestVoltage(Volts.zero()); + + steerMotor.requestVoltage(Volts.of(volts)); + } + + public SwerveModuleState getMeasuredState() { + return instance.getCurrentState(); + } + + public SwerveModulePosition getModulePosition() { + return new SwerveModulePosition( + instance.getDriveWheelFinalPosition().in(Radians) * instance.config.WHEEL_RADIUS.in(Meters), + instance.getSteerAbsoluteFacing()); + } + } + + /** @see SwerveDriveSimulation#maxLinearVelocity() */ + public LinearVelocity maxLinearVelocity() { + return swerveDriveSimulation.maxLinearVelocity(); + } + + /** @see SwerveDriveSimulation#maxLinearAcceleration(Current) */ + public LinearAcceleration maxLinearAcceleration() { + return swerveDriveSimulation.maxLinearAcceleration(moduleSimulations[0].driveCurrentLimit); + } + + /** @see DriveTrainSimulationConfig#trackWidthY() */ + public Distance trackWidthY() { + return swerveDriveSimulation.config.trackWidthY(); + } + + /** @see DriveTrainSimulationConfig#trackLengthX() */ + public Distance trackLengthX() { + return swerveDriveSimulation.config.trackLengthX(); + } + + /** @see SwerveDriveSimulation#driveBaseRadius() */ + public Distance driveBaseRadius() { + return swerveDriveSimulation.config.driveBaseRadius(); + } + + /** @see SwerveDriveSimulation#maxAngularVelocity() */ + public AngularVelocity maxAngularVelocity() { + return RadiansPerSecond.of( + maxLinearVelocity().in(MetersPerSecond) / driveBaseRadius().in(Meters)); + } + + /** @see SwerveDriveSimulation#maxAngularAcceleration(Current) */ + public AngularAcceleration maxAngularAcceleration() { + return swerveDriveSimulation.maxAngularAcceleration(moduleSimulations[0].driveCurrentLimit); + } +} diff --git a/temp_yagsl/org/ironmaple/simulation/drivesims/SwerveDriveSimulation.java b/temp_yagsl/org/ironmaple/simulation/drivesims/SwerveDriveSimulation.java new file mode 100644 index 0000000..84f2ea0 --- /dev/null +++ b/temp_yagsl/org/ironmaple/simulation/drivesims/SwerveDriveSimulation.java @@ -0,0 +1,367 @@ +package org.ironmaple.simulation.drivesims; + +import static edu.wpi.first.units.Units.*; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Translation2d; +import edu.wpi.first.math.kinematics.ChassisSpeeds; +import edu.wpi.first.math.kinematics.SwerveDriveKinematics; +import edu.wpi.first.math.kinematics.SwerveModuleState; +import edu.wpi.first.units.measure.*; +import java.util.Arrays; +import java.util.function.Supplier; +import org.dyn4j.geometry.Vector2; +import org.ironmaple.simulation.SimulatedArena; +import org.ironmaple.simulation.drivesims.configs.DriveTrainSimulationConfig; +import org.ironmaple.utils.mathutils.GeometryConvertor; +import org.ironmaple.utils.mathutils.MapleCommonMath; + +/** + * + * + *

Simulates a Swerve Drivetrain.

+ * + *

Check Online + * Documentation + * + *

1. Purpose

+ * + *

This class simulates a swerve drivetrain composed of more than two {@link SwerveModuleSimulation} modules. + * + *

It provides a realistic modeling of drivetrain physics, replicating wheel grip and motor propulsion for an actual + * swerve drive. + * + *

2. Simulation Dynamics

+ * + *
    + *
  • 1. Propelling forces generated by the drive motors, computed by + * {@link SwerveModuleSimulation#updateSimulationSubTickGetModuleForce(Vector2, Rotation2d, double)}. + *
  • 2. Friction forces generated by the wheels that "pull" the robot from its current ground velocity to the module + * velocities, both translational and rotational. + *
  • 3. Centripetal forces generated by the steering when the drivetrain makes a turn. + *
+ * + *

3. Odometry Simulation

+ * + *

To simulate odometry, follow these steps: + * + *

    + *
  • Obtain the {@link SwerveModuleSimulation} instances through {@link #getModules()}. + *
  • Create an IO + * Implementation that wraps around {@link SwerveModuleSimulation} to retrieve encoder readings. + *
  • Update a {@link edu.wpi.first.math.estimator.SwerveDrivePoseEstimator} using the encoder readings, similar to + * how you would on a real robot. + *
+ * + *

Refer to the ModuleIOSim.java + * example project for more details. + * + *

Vision Simulation

+ * + *

You can obtain the real robot pose from {@link #getSimulatedDriveTrainPose()} and feed it to the PhotonVision + * simulation to simulate vision. + */ +public class SwerveDriveSimulation extends AbstractDriveTrainSimulation { + private final SwerveModuleSimulation[] moduleSimulations; + protected final GyroSimulation gyroSimulation; + protected final Translation2d[] moduleTranslations; + protected final SwerveDriveKinematics kinematics; + private final double gravityForceOnEachModule; + + /** + * + * + *

Creates a Swerve Drive Simulation.

+ * + *

This constructor initializes a swerve drive simulation with the given robot mass, bumper dimensions, module + * simulations, module translations, gyro simulation, and initial pose on the field. + * + * @param config a {@link DriveTrainSimulationConfig} instance containing the configurations of * this drivetrain + * @param initialPoseOnField the initial pose of the drivetrain in the simulation world, represented as a + * {@link Pose2d} + */ + public SwerveDriveSimulation(DriveTrainSimulationConfig config, Pose2d initialPoseOnField) { + super(config, initialPoseOnField); + this.moduleTranslations = config.moduleTranslations; + this.moduleSimulations = Arrays.stream(config.swerveModuleSimulationFactories) + .map(Supplier::get) + .toArray(SwerveModuleSimulation[]::new); + this.gyroSimulation = config.gyroSimulationFactory.get(); + + super.setLinearDamping(1.4); + super.setAngularDamping(1.4); + this.kinematics = new SwerveDriveKinematics(moduleTranslations); + + this.gravityForceOnEachModule = config.robotMass.in(Kilograms) * 9.8 / moduleSimulations.length; + } + + /** + * + * + *

Updates the Swerve Drive Simulation.

+ * + *

This method performs the following actions during each sub-tick of the simulation: + * + *

    + *
  • Applies the translational friction force to the physics engine. + *
  • Applies the rotational friction torque to the physics engine. + *
  • Updates the simulation of each swerve module. + *
  • Applies the propelling forces of the modules to the physics engine. + *
  • Updates the gyro simulation of the drivetrain. + *
+ */ + @Override + public void simulationSubTick() { + simulateChassisFrictionForce(); + + simulateChassisFrictionTorque(); + + simulateModulePropellingForces(); + + gyroSimulation.updateSimulationSubTick(super.getAngularVelocity()); + } + + private Translation2d previousModuleSpeedsFieldRelative = new Translation2d(); + + /** + * + * + *

Simulates the Translational Friction Force and Applies It to the Physics Engine.

+ * + *

This method simulates the translational friction forces acting on the robot and applies them to the physics + * engine. There are two components of the friction forces: + * + *

    + *
  • A portion of the friction force pushes the robot from its current ground speeds + * ({@link #getDriveTrainSimulatedChassisSpeedsRobotRelative()}) toward its current module speeds + * ({@link #getModuleSpeeds()}). + *
  • Another portion of the friction force is the centripetal force, which occurs when the chassis changes its + * direction of movement. + *
+ * + *

The total friction force should not exceed the tire's grip limit. + */ + private void simulateChassisFrictionForce() { + final ChassisSpeeds moduleSpeeds = getModuleSpeeds(); + + /* The friction force that tries to bring the chassis from floor speeds to module speeds */ + final ChassisSpeeds differenceBetweenFloorSpeedAndModuleSpeedsRobotRelative = + moduleSpeeds.minus(getDriveTrainSimulatedChassisSpeedsRobotRelative()); + final Translation2d floorAndModuleSpeedsDiffFieldRelative = new Translation2d( + differenceBetweenFloorSpeedAndModuleSpeedsRobotRelative.vxMetersPerSecond, + differenceBetweenFloorSpeedAndModuleSpeedsRobotRelative.vyMetersPerSecond) + .rotateBy(getSimulatedDriveTrainPose().getRotation()); + final double FRICTION_FORCE_GAIN = 3.0, + totalGrippingForce = + moduleSimulations[0].config.getGrippingForceNewtons(gravityForceOnEachModule) + * moduleSimulations.length; + final Vector2 speedsDifferenceFrictionForce = Vector2.create( + Math.min( + FRICTION_FORCE_GAIN * totalGrippingForce * floorAndModuleSpeedsDiffFieldRelative.getNorm(), + totalGrippingForce), + MapleCommonMath.getAngle(floorAndModuleSpeedsDiffFieldRelative).getRadians()); + + /* the centripetal friction force during turning */ + final ChassisSpeeds moduleSpeedsFieldRelative = ChassisSpeeds.fromRobotRelativeSpeeds( + moduleSpeeds, getSimulatedDriveTrainPose().getRotation()); + final Rotation2d dTheta = MapleCommonMath.getAngle( + GeometryConvertor.getChassisSpeedsTranslationalComponent(moduleSpeedsFieldRelative)) + .minus(MapleCommonMath.getAngle(previousModuleSpeedsFieldRelative)); + + final double orbitalAngularVelocity = + dTheta.getRadians() / SimulatedArena.getSimulationDt().in(Seconds); + final Rotation2d centripetalForceDirection = + MapleCommonMath.getAngle(previousModuleSpeedsFieldRelative).plus(Rotation2d.fromDegrees(90)); + final Vector2 centripetalFrictionForce = Vector2.create( + previousModuleSpeedsFieldRelative.getNorm() * orbitalAngularVelocity * config.robotMass.in(Kilograms), + centripetalForceDirection.getRadians()); + previousModuleSpeedsFieldRelative = + GeometryConvertor.getChassisSpeedsTranslationalComponent(moduleSpeedsFieldRelative); + + /* apply force to physics engine */ + final Vector2 + totalFrictionForceUnlimited = centripetalFrictionForce.copy().add(speedsDifferenceFrictionForce), + totalFrictionForce = + Vector2.create( + Math.min(totalGrippingForce, totalFrictionForceUnlimited.getMagnitude()), + totalFrictionForceUnlimited.getDirection()); + super.applyForce(totalFrictionForce); + } + + /** + * + * + *

Simulates the Rotational Friction Torque and Applies It to the Physics Engine.

+ * + *

This method simulates the rotational friction torque acting on the robot and applies them to the physics + * engine. + * + *

The friction torque pushes the robot from its current ground angular velocity + * ({@link #getDriveTrainSimulatedChassisSpeedsRobotRelative()}) toward its current modules' angular velocity + * ({@link #getModuleSpeeds()}). + */ + private void simulateChassisFrictionTorque() { + final double + desiredRotationalMotionPercent = + Math.abs(getDesiredSpeed().omegaRadiansPerSecond + / maxAngularVelocity().in(RadiansPerSecond)), + actualRotationalMotionPercent = + Math.abs(getAngularVelocity() / maxAngularVelocity().in(RadiansPerSecond)), + differenceBetweenFloorSpeedAndModuleSpeed = + getModuleSpeeds().omegaRadiansPerSecond - getAngularVelocity(), + grippingTorqueMagnitude = + moduleSimulations[0].config.getGrippingForceNewtons(gravityForceOnEachModule) + * moduleTranslations[0].getNorm() + * moduleSimulations.length, + FRICTION_TORQUE_GAIN = 1; + + if (actualRotationalMotionPercent < 0.01 && desiredRotationalMotionPercent < 0.02) super.setAngularVelocity(0); + else + super.applyTorque(Math.copySign( + Math.min( + FRICTION_TORQUE_GAIN + * grippingTorqueMagnitude + * Math.abs(differenceBetweenFloorSpeedAndModuleSpeed), + grippingTorqueMagnitude), + differenceBetweenFloorSpeedAndModuleSpeed)); + } + + /** + * + * + *

Simulates the Translational Friction Force and Applies It to the Physics Engine.

+ * + *

This method simulates the translational friction forces acting on the robot and applies them to the physics + * engine. There are two components of the friction forces: + * + *

    + *
  • A portion of the friction force pushes the robot from its current ground speeds + * ({@link #getDriveTrainSimulatedChassisSpeedsRobotRelative()}) toward its current module speeds + * ({@link #getModuleSpeeds()}). + *
  • Another portion of the friction force is the centripetal force, which occurs when the chassis changes its + * direction of movement. + *
+ * + *

The total friction force should not exceed the tire's grip limit. + */ + private void simulateModulePropellingForces() { + for (int i = 0; i < moduleSimulations.length; i++) { + final Vector2 moduleWorldPosition = getWorldPoint(GeometryConvertor.toDyn4jVector2(moduleTranslations[i])); + final Vector2 moduleForce = moduleSimulations[i].updateSimulationSubTickGetModuleForce( + super.getLinearVelocity(moduleWorldPosition), + getSimulatedDriveTrainPose().getRotation(), + gravityForceOnEachModule); + super.applyForce(moduleForce, moduleWorldPosition); + } + } + + /** + * + * + *

Obtains the Chassis Speeds the Modules Are Attempting to Achieve.

+ * + *

This method returns the desired chassis speeds that the modules are trying to reach. If the robot maintains + * the current driving voltage and steering position for a long enough period, it will achieve these speeds. + * + * @return the desired chassis speeds, robot-relative + */ + private ChassisSpeeds getDesiredSpeed() { + return kinematics.toChassisSpeeds(Arrays.stream(moduleSimulations) + .map((SwerveModuleSimulation::getFreeSpinState)) + .toArray(SwerveModuleState[]::new)); + } + + /** + * + * + *

Obtains the Current Chassis Speeds of the Modules.

+ * + *

This method estimates the chassis speeds of the robot based on the swerve states of the modules. + * + *

Note: These speeds might not represent the actual floor speeds due to potential skidding. + * + * @return the module speeds, robot-relative + */ + private ChassisSpeeds getModuleSpeeds() { + return kinematics.toChassisSpeeds(Arrays.stream(moduleSimulations) + .map((SwerveModuleSimulation::getCurrentState)) + .toArray(SwerveModuleState[]::new)); + } + + /** + * + * + *

Obtains the maximum achievable linear velocity of the chassis.

+ * + * @return the maximum linear velocity + * @see org.ironmaple.simulation.drivesims.configs.SwerveModuleSimulationConfig#maximumGroundSpeed() + */ + public LinearVelocity maxLinearVelocity() { + return moduleSimulations[0].config.maximumGroundSpeed(); + } + + /** + * + * + *

Obtains the maximum achievable linear acceleration of the chassis.

+ * + * @return the maximum linear acceleration + * @see org.ironmaple.simulation.drivesims.configs.SwerveModuleSimulationConfig#maxAcceleration(Mass, int, Current) + */ + public LinearAcceleration maxLinearAcceleration(Current statorCurrentLimit) { + return moduleSimulations[0].config.maxAcceleration( + config.robotMass, moduleSimulations.length, statorCurrentLimit); + } + + /** + * + * + *

Obtains the drive base radius of the swerve drive.

+ * + * @return the drive base radius. + */ + public Distance driveBaseRadius() { + return config.driveBaseRadius(); + } + + /** + * + * + *

Obtains the maximum achievable angular velocity of the chassis.

+ * + * @return the maximum angular velocity + */ + public AngularVelocity maxAngularVelocity() { + return RadiansPerSecond.of(maxLinearVelocity().in(MetersPerSecond) + / config.driveBaseRadius().in(Meters)); + } + + /** + * + * + *

Obtains the maximum achievable angular acceleration of the chassis.

+ * + * @return the maximum angular acceleration + */ + public AngularAcceleration maxAngularAcceleration(Current statorCurrentLimit) { + return RadiansPerSecondPerSecond.of(moduleSimulations[0] + .config + .getTheoreticalPropellingForcePerModule( + config.robotMass, moduleSimulations.length, statorCurrentLimit) + .in(Newtons) + * moduleTranslations[0].getNorm() + * moduleSimulations.length + / super.getMass().getInertia()); + } + + public SwerveModuleSimulation[] getModules() { + return moduleSimulations; + } + + public GyroSimulation getGyroSimulation() { + return this.gyroSimulation; + } +} diff --git a/temp_yagsl/org/ironmaple/simulation/drivesims/SwerveModuleSimulation.java b/temp_yagsl/org/ironmaple/simulation/drivesims/SwerveModuleSimulation.java new file mode 100644 index 0000000..4608d07 --- /dev/null +++ b/temp_yagsl/org/ironmaple/simulation/drivesims/SwerveModuleSimulation.java @@ -0,0 +1,538 @@ +package org.ironmaple.simulation.drivesims; + +import static edu.wpi.first.units.Units.*; + +import edu.wpi.first.math.MathUtil; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.kinematics.SwerveDriveOdometry; +import edu.wpi.first.math.kinematics.SwerveModuleState; +import edu.wpi.first.units.measure.*; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; +import org.dyn4j.geometry.Vector2; +import org.ironmaple.simulation.SimulatedArena; +import org.ironmaple.simulation.drivesims.configs.SwerveModuleSimulationConfig; +import org.ironmaple.simulation.motorsims.*; + +/** + * + * + *

Simulation for a Single Swerve Module.

+ * + *

Check Online + * Documentation + * + *

This class provides a simulation for a single swerve module in the {@link SwerveDriveSimulation}. + * + *

1. Purpose

+ * + *

This class serves as the bridge between your code and the physics engine. + * + *

You will apply voltage outputs to the drive/steer motor of the module and obtain their encoder readings in your + * code, just as how you deal with your physical motors. + * + *

2. Perspectives

+ * + *
    + *
  • Simulates the steering mechanism using a custom brushless motor simulator. + *
  • Simulates the propelling force generated by the driving motor, with a current limit. + *
  • Simulates encoder readings, which can be used to simulate a {@link SwerveDriveOdometry}. + *
+ * + *

3. Simulating Odometry

+ * + *
    + *
  • Retrieve the encoder readings from {@link #getDriveEncoderUnGearedPosition()}} and + * {@link #getSteerAbsoluteFacing()}. + *
  • Use {@link SwerveDriveOdometry} to estimate the pose of your robot. + *
  • 250Hz + * Odometry is supported. You can retrive cached encoder readings from every sub-tick through + * {@link #getCachedDriveEncoderUnGearedPositions()} and {@link #getCachedSteerAbsolutePositions()}. + *
+ * + *

An example of how to simulate odometry using this class is the ModuleIOSim.java + * from the Advanced Swerve Drive with maple-sim example. + */ +public class SwerveModuleSimulation { + public final SwerveModuleSimulationConfig config; + + private final MapleMotorSim steerMotorSim; + + private Voltage driveMotorAppliedVoltage = Volts.zero(); + private Current driveMotorStatorCurrent = Amps.zero(); + private Angle driveWheelFinalPosition = Radians.zero(); + private AngularVelocity driveWheelFinalSpeed = RadiansPerSecond.zero(); + + private SimulatedMotorController driveMotorController; + + private final Angle steerRelativeEncoderOffSet = Radians.of((Math.random() - 0.5) * 30); + private final Queue driveWheelFinalPositionCache; + private final Queue steerAbsolutePositionCache; + + /** + * + * + *

Constructs a Swerve Module Simulation.

+ * + *

If you are using {@link SimulatedArena#overrideSimulationTimings(Time, int)} to use custom timings, you must + * call the method before constructing any swerve module simulations using this constructor. + * + * @param config the configuration + */ + public SwerveModuleSimulation(SwerveModuleSimulationConfig config) { + this.config = config; + + SimulatedBattery.addElectricalAppliances(this::getDriveMotorSupplyCurrent); + this.steerMotorSim = new MapleMotorSim(config.steerMotorConfigs); + + this.driveWheelFinalPositionCache = new ConcurrentLinkedQueue<>(); + for (int i = 0; i < SimulatedArena.getSimulationSubTicksIn1Period(); i++) + driveWheelFinalPositionCache.offer(driveWheelFinalPosition); + this.steerAbsolutePositionCache = new ConcurrentLinkedQueue<>(); + for (int i = 0; i < SimulatedArena.getSimulationSubTicksIn1Period(); i++) + steerAbsolutePositionCache.offer(getSteerAbsoluteFacing()); + + this.driveMotorController = new SimulatedMotorController.GenericMotorController(config.driveMotorConfigs.motor); + this.steerMotorSim.useSimpleDCMotorController(); + } + + public SimMotorConfigs getDriveMotorConfigs() { + return config.driveMotorConfigs; + } + + public SimMotorConfigs getSteerMotorConfigs() { + return steerMotorSim.getConfigs(); + } + + /** + * + * + *

Sets the motor controller for the drive motor.

+ * + *

The configured controller runs control loop on the motor. + * + * @param driveMotorController the motor controller to control the drive motor + */ + public T useDriveMotorController(T driveMotorController) { + this.driveMotorController = driveMotorController; + return driveMotorController; + } + + public SimulatedMotorController.GenericMotorController useGenericMotorControllerForDrive() { + return useDriveMotorController( + new SimulatedMotorController.GenericMotorController(config.driveMotorConfigs.motor)); + } + + /** + * + * + *

Requests the Steering Motor to Run at a Specified Output.

+ * + *

Think of it as the requestOutput() of your physical steering motor. + * + * @param steerMotorController the motor controller to control the steer motor + */ + public T useSteerMotorController(T steerMotorController) { + return this.steerMotorSim.useMotorController(steerMotorController); + } + + public SimulatedMotorController.GenericMotorController useGenericControllerForSteer() { + return this.steerMotorSim.useSimpleDCMotorController(); + } + + /** + * + * + *

Updates the Simulation for This Module.

+ * + *

Note: Friction forces are not simulated in this method. + * + * @param moduleCurrentGroundVelocityWorldRelative the current ground velocity of the module, relative to the world + * @param robotFacing the absolute facing of the robot, relative to the world + * @param gravityForceOnModuleNewtons the gravitational force acting on this module, in newtons + * @return the propelling force generated by the module, as a {@link Vector2} object + */ + public Vector2 updateSimulationSubTickGetModuleForce( + Vector2 moduleCurrentGroundVelocityWorldRelative, + Rotation2d robotFacing, + double gravityForceOnModuleNewtons) { + /* Step1: Update the steer mechanism simulation */ + steerMotorSim.update(SimulatedArena.getSimulationDt()); + + /* Step2: Simulate the amount of propelling force generated by the module. */ + final double grippingForceNewtons = config.getGrippingForceNewtons(gravityForceOnModuleNewtons); + final Rotation2d moduleWorldFacing = this.getSteerAbsoluteFacing().plus(robotFacing); + final Vector2 propellingForce = + getPropellingForce(grippingForceNewtons, moduleWorldFacing, moduleCurrentGroundVelocityWorldRelative); + + /* Step3: Updates and caches the encoder readings for odometry simulation. */ + updateEncoderCaches(); + + return propellingForce; + } + + /** + * + * + *

Calculates the amount of propelling force that the module generates.

+ * + *

For most of the time, that propelling force is directly applied to the drivetrain. And the drive wheel runs as + * fast as the ground velocity + * + *

However, if the propelling force exceeds the gripping, only the max gripping force is applied. The rest of the + * propelling force will cause the wheel to start skidding and make the odometry inaccurate. + * + * @param grippingForceNewtons the amount of gripping force that wheel can generate, in newtons + * @param moduleWorldFacing the current world facing of the module + * @param moduleCurrentGroundVelocity the current ground velocity of the module, world-reference + * @return a vector representing the propelling force that the module generates, world-reference + */ + private Vector2 getPropellingForce( + double grippingForceNewtons, Rotation2d moduleWorldFacing, Vector2 moduleCurrentGroundVelocity) { + final double driveWheelTorque = getDriveWheelTorque(); + double propellingForceNewtons = driveWheelTorque / config.WHEEL_RADIUS.in(Meters); + final boolean skidding = Math.abs(propellingForceNewtons) > grippingForceNewtons; + if (skidding) propellingForceNewtons = Math.copySign(grippingForceNewtons, propellingForceNewtons); + + final double floorVelocityProjectionOnWheelDirectionMPS = moduleCurrentGroundVelocity.getMagnitude() + * Math.cos(moduleCurrentGroundVelocity.getAngleBetween(new Vector2(moduleWorldFacing.getRadians()))); + + // if the chassis is tightly gripped on floor, the floor velocity is projected to the wheel + this.driveWheelFinalSpeed = + RadiansPerSecond.of(floorVelocityProjectionOnWheelDirectionMPS / config.WHEEL_RADIUS.in(Meters)); + + // if the module is skidding + if (skidding) { + final AngularVelocity skiddingEquilibriumWheelSpeed = config.driveMotorConfigs.calculateMechanismVelocity( + config.driveMotorConfigs.calculateCurrent( + NewtonMeters.of(propellingForceNewtons * config.WHEEL_RADIUS.in(Meters))), + driveMotorAppliedVoltage); + this.driveWheelFinalSpeed = driveWheelFinalSpeed.times(0.5).plus(skiddingEquilibriumWheelSpeed.times(0.5)); + } + + return Vector2.create(propellingForceNewtons, moduleWorldFacing.getRadians()); + } + + /** + * + * + *

Calculates the amount of torque that the drive motor can generate on the wheel.

+ * + * @return the amount of torque on the wheel by the drive motor, in Newton * Meters + */ + private double getDriveWheelTorque() { + driveMotorAppliedVoltage = driveMotorController.updateControlSignal( + driveWheelFinalPosition, + driveWheelFinalSpeed, + getDriveEncoderUnGearedPosition(), + getDriveEncoderUnGearedSpeed()); + + driveMotorAppliedVoltage = SimulatedBattery.clamp(driveMotorAppliedVoltage); + + /* calculate the stator current */ + driveMotorStatorCurrent = + config.driveMotorConfigs.calculateCurrent(driveWheelFinalSpeed, driveMotorAppliedVoltage); + + /* calculate the torque generated */ + Torque driveWheelTorque = config.driveMotorConfigs.calculateTorque(driveMotorStatorCurrent); + + /* calculates the torque if you included losses from friction */ + Torque driveWheelTorqueWithFriction = NewtonMeters.of(MathUtil.applyDeadband( + driveWheelTorque.in(NewtonMeters), + config.driveMotorConfigs.friction.in(NewtonMeters), + Double.POSITIVE_INFINITY)); + return driveWheelTorqueWithFriction.in(NewtonMeters); + } + + /** @return the current module state of this simulation module */ + public SwerveModuleState getCurrentState() { + return new SwerveModuleState( + MetersPerSecond.of(getDriveWheelFinalSpeed().in(RadiansPerSecond) * config.WHEEL_RADIUS.in(Meters)), + getSteerAbsoluteFacing()); + } + + /** + * + * + *

Obtains the "free spin" state of the module

+ * + *

The "free spin" state of a simulated module refers to its state after spinning freely for a long time under + * the current input voltage + * + * @return the free spinning module state + */ + protected SwerveModuleState getFreeSpinState() { + return new SwerveModuleState( + config.driveMotorConfigs + .calculateMechanismVelocity( + config.driveMotorConfigs.calculateCurrent(config.driveMotorConfigs.friction), + driveMotorAppliedVoltage) + .in(RadiansPerSecond) + * config.WHEEL_RADIUS.in(Meters), + getSteerAbsoluteFacing()); + } + + /** + * + * + *

Cache the encoder values for high-frequency odometry.

+ * + *

An internal method to cache the encoder values to their queues. + */ + private void updateEncoderCaches() { + /* Increment of drive wheel position */ + this.driveWheelFinalPosition = + this.driveWheelFinalPosition.plus(this.driveWheelFinalSpeed.times(SimulatedArena.getSimulationDt())); + + /* cache sensor readings to queue for high-frequency odometry */ + this.steerAbsolutePositionCache.poll(); + this.steerAbsolutePositionCache.offer(getSteerAbsoluteFacing()); + + this.driveWheelFinalPositionCache.poll(); + this.driveWheelFinalPositionCache.offer(driveWheelFinalPosition); + } + + /** + * + * + *

Obtains the Actual Output Voltage of the Drive Motor.

+ * + * @return the actual output voltage of the drive motor + */ + public Voltage getDriveMotorAppliedVoltage() { + return driveMotorAppliedVoltage; + } + + /** + * + * + *

Obtains the Actual Output Voltage of the Steering Motor.

+ * + * @return the actual output voltage of the steering motor + * @see MapleMotorSim#getAppliedVoltage() + */ + public Voltage getSteerMotorAppliedVoltage() { + return steerMotorSim.getAppliedVoltage(); + } + + /** + * + * + *

Obtains the Amount of Current Supplied to the Drive Motor.

+ * + * @return the current supplied to the drive motor + */ + public Current getDriveMotorSupplyCurrent() { + return getDriveMotorStatorCurrent().times(driveMotorAppliedVoltage.div(SimulatedBattery.getBatteryVoltage())); + } + + /** + * + * + *

Obtains the Stator current the Drive Motor.

+ * + * @return the stator current of the drive motor + */ + public Current getDriveMotorStatorCurrent() { + return driveMotorStatorCurrent; + } + + /** + * + * + *

Obtains the Amount of Current Supplied to the Steer Motor.

+ * + * @return the current supplied to the steer motor + * @see MapleMotorSim#getSupplyCurrent() + */ + public Current getSteerMotorSupplyCurrent() { + return steerMotorSim.getSupplyCurrent(); + } + + /** + * + * + *

Obtains the Stator current the Steer Motor.

+ * + * @return the stator current of the drive motor + * @see MapleMotorSim#getSupplyCurrent() + */ + public Current getSteerMotorStatorCurrent() { + return steerMotorSim.getStatorCurrent(); + } + + /** + * + * + *

Obtains the Position of the Drive Encoder.

+ * + *

This value represents the un-geared position of the encoder, i.e., the amount of radians the drive motor's + * encoder has rotated. + * + * @return the position of the drive motor's encoder (un-geared) + */ + public Angle getDriveEncoderUnGearedPosition() { + return getDriveWheelFinalPosition().times(config.DRIVE_GEAR_RATIO); + } + + /** + * + * + *

Obtains the Final Position of the Wheel.

+ * + *

This method provides the final position of the drive encoder in terms of wheel angle. + * + * @return the final position of the drive encoder (wheel rotations) + */ + public Angle getDriveWheelFinalPosition() { + return driveWheelFinalPosition; + } + + /** + * + * + *

Obtains the Speed of the Drive Encoder.

+ * + * @return the un-geared speed of the drive encoder + */ + public AngularVelocity getDriveEncoderUnGearedSpeed() { + return getDriveWheelFinalSpeed().times(config.DRIVE_GEAR_RATIO); + } + + /** + * + * + *

Obtains the Final Speed of the Wheel.

+ * + * @return the final speed of the drive wheel + */ + public AngularVelocity getDriveWheelFinalSpeed() { + return driveWheelFinalSpeed; + } + + /** + * + * + *

Obtains the Relative Position of the Steer Encoder.

+ * + * @return the relative encoder position of the steer motor + * @see MapleMotorSim#getEncoderPosition() + */ + public Angle getSteerRelativeEncoderPosition() { + return getSteerAbsoluteFacing() + .getMeasure() + .times(config.STEER_GEAR_RATIO) + .plus(steerRelativeEncoderOffSet); + } + + /** + * + * + *

Obtains the Speed of the Steer Relative Encoder (Geared).

+ * + * @return the speed of the steer relative encoder + * @see MapleMotorSim#getEncoderVelocity() + */ + public AngularVelocity getSteerRelativeEncoderVelocity() { + return getSteerAbsoluteEncoderSpeed().times(config.STEER_GEAR_RATIO); + } + + /** + * + * + *

Obtains the Absolute Facing of the Steer Mechanism.

+ * + * @return the absolute facing of the steer mechanism, as a {@link Rotation2d} + */ + public Rotation2d getSteerAbsoluteFacing() { + return new Rotation2d(getSteerAbsoluteAngle()); + } + + /** + * + * + *

Obtains the Absolute Angle of the Steer Mechanism.

+ * + * @return the (continuous) final angle of the steer mechanism, as a {@link Angle} + * @see MapleMotorSim#getAngularPosition() + */ + public Angle getSteerAbsoluteAngle() { + return steerMotorSim.getAngularPosition(); + } + + /** + * + * + *

Obtains the Absolute Rotational Velocity of the Steer Mechanism.

+ * + * @return the absolute angular velocity of the steer mechanism + */ + public AngularVelocity getSteerAbsoluteEncoderSpeed() { + return steerMotorSim.getVelocity(); + } + + /** + * + * + *

Obtains the Cached Readings of the Drive Encoder's Un-Geared Position.

+ * + *

The values of {@link #getDriveEncoderUnGearedPosition()} are cached at each sub-tick and can be retrieved + * using this method. + * + * @return an array of cached drive encoder un-geared positions + */ + public Angle[] getCachedDriveEncoderUnGearedPositions() { + return driveWheelFinalPositionCache.stream() + .map(value -> value.times(config.DRIVE_GEAR_RATIO)) + .toArray(Angle[]::new); + } + + /** + * + * + *

Obtains the Cached Readings of the Drive Encoder's Final Position (Wheel Rotations).

+ * + *

The values of {@link #getDriveWheelFinalPosition()} are cached at each sub-tick and are divided by the gear + * ratio to obtain the final wheel rotations. + * + * @return an array of cached drive encoder final positions (wheel rotations) + */ + public Angle[] getCachedDriveWheelFinalPositions() { + return driveWheelFinalPositionCache.toArray(Angle[]::new); + } + + /** + * + * + *

Obtains the Cached Readings of the Steer Relative Encoder's Position.

+ * + *

The values of {@link #getSteerRelativeEncoderPosition()} are cached at each sub-tick and can be retrieved + * using this method. + * + * @return an array of cached steer relative encoder positions + */ + public Angle[] getCachedSteerRelativeEncoderPositions() { + return steerAbsolutePositionCache.stream() + .map(absoluteFacing -> absoluteFacing + .getMeasure() + .times(config.STEER_GEAR_RATIO) + .plus(steerRelativeEncoderOffSet)) + .toArray(Angle[]::new); + } + + /** + * + * + *

Obtains the Cached Readings of the Steer Absolute Positions.

+ * + *

The values of {@link #getSteerAbsoluteFacing()} are cached at each sub-tick and can be retrieved using this + * method. + * + * @return an array of cached absolute steer positions, as {@link Rotation2d} objects + */ + public Rotation2d[] getCachedSteerAbsolutePositions() { + return steerAbsolutePositionCache.toArray(Rotation2d[]::new); + } +} diff --git a/temp_yagsl/org/ironmaple/simulation/drivesims/configs/DriveTrainSimulationConfig.java b/temp_yagsl/org/ironmaple/simulation/drivesims/configs/DriveTrainSimulationConfig.java new file mode 100644 index 0000000..c8cf906 --- /dev/null +++ b/temp_yagsl/org/ironmaple/simulation/drivesims/configs/DriveTrainSimulationConfig.java @@ -0,0 +1,323 @@ +package org.ironmaple.simulation.drivesims.configs; + +import static edu.wpi.first.units.Units.Kilograms; +import static edu.wpi.first.units.Units.Meters; + +import edu.wpi.first.math.geometry.Translation2d; +import edu.wpi.first.math.system.plant.DCMotor; +import edu.wpi.first.units.measure.Distance; +import edu.wpi.first.units.measure.Mass; +import java.util.Arrays; +import java.util.OptionalDouble; +import java.util.function.Supplier; +import org.ironmaple.simulation.drivesims.COTS; +import org.ironmaple.simulation.drivesims.GyroSimulation; +import org.ironmaple.simulation.drivesims.SwerveModuleSimulation; + +/** + * + * + *

Stores the configurations for a swerve drive simulation.

+ * + *

This class is used to hold all the parameters necessary for simulating a swerve drivetrain, allowing for realistic + * performance testing and evaluation. + */ +public class DriveTrainSimulationConfig { + public Mass robotMass; + public Distance bumperLengthX, bumperWidthY; + public Supplier[] swerveModuleSimulationFactories; + public Supplier gyroSimulationFactory; + public Translation2d[] moduleTranslations; + + /** + * + * + *

Ordinary Constructor

+ * + *

Creates an instance of {@link DriveTrainSimulationConfig} with specified parameters. + * + * @param robotMass the mass of the robot, including bumpers. + * @param bumperLengthX the length of the bumper (distance from front to back). + * @param bumperWidthY the width of the bumper (distance from left to right). + * @param trackLengthX the distance between the front and rear wheels. + * @param trackWidthY the distance between the left and right wheels. + * @param swerveModuleSimulationFactory the factory that creates appropriate swerve module simulation for the + * drivetrain. You can specify one factory to apply the same configuration over all modules or specify four + * factories in the order (FL, FR, BL, BR). + * @param gyroSimulationFactory the factory that creates appropriate gyro simulation for the drivetrain. + */ + public DriveTrainSimulationConfig( + Mass robotMass, + Distance bumperLengthX, + Distance bumperWidthY, + Distance trackLengthX, + Distance trackWidthY, + Supplier gyroSimulationFactory, + Supplier... swerveModuleSimulationFactory) { + this.robotMass = robotMass; + this.bumperLengthX = bumperLengthX; + this.bumperWidthY = bumperWidthY; + this.withTrackLengthTrackWidth(trackLengthX, trackWidthY); + + if (swerveModuleSimulationFactory.length == 1) this.withSwerveModule(swerveModuleSimulationFactory[0]); + else if (swerveModuleSimulationFactory.length == 4) this.withSwerveModules(swerveModuleSimulationFactory); + else + throw new IllegalArgumentException("Module simulation factories length must be 1 or 4, provided " + + swerveModuleSimulationFactory.length); + this.gyroSimulationFactory = gyroSimulationFactory; + + checkRobotMass(); + checkBumperSize(); + } + + /** + * + * + *

Default Constructor.

+ * + *

Creates a {@link DriveTrainSimulationConfig} with all the data set to default values. + * + *

Though the config starts with default values, any configuration can be modified after creation. + * + *

The default configurations are: + * + *

    + *
  • Robot Mass of 45 kilograms. + *
  • Bumper Length of 0.76 meters. + *
  • Bumper Width of 0.76 meters. + *
  • Track Length of 0.52 meters. + *
  • Track Width of 0.52 meters. + *
  • Default swerve module simulations based on Falcon 500 motors. + *
  • Default gyro simulation using the Pigeon2 gyro. + *
+ * + * @return a new instance of {@link DriveTrainSimulationConfig} with all configs set to default values. + */ + public static DriveTrainSimulationConfig Default() { + return new DriveTrainSimulationConfig( + Kilograms.of(45), + Meters.of(0.76), + Meters.of(.76), + Meters.of(0.52), + Meters.of(0.52), + COTS.ofPigeon2(), + COTS.ofMark4(DCMotor.getFalcon500(1), DCMotor.getFalcon500(1), COTS.WHEELS.COLSONS.cof, 2)); + } + + /** + * + * + *

Sets the robot mass.

+ * + *

Updates the mass of the robot in kilograms. + * + * @param robotMass the new mass of the robot. + * @return the current instance of {@link DriveTrainSimulationConfig} for method chaining. + */ + public DriveTrainSimulationConfig withRobotMass(Mass robotMass) { + this.robotMass = robotMass; + checkRobotMass(); + return this; + } + + /** + * + * + *

Sets the bumper size.

+ * + *

Updates the dimensions of the bumper. + * + * @param bumperLengthX the length of the bumper. + * @param bumperWidthY the width of the bumper. + * @return the current instance of {@link DriveTrainSimulationConfig} for method chaining. + */ + public DriveTrainSimulationConfig withBumperSize(Distance bumperLengthX, Distance bumperWidthY) { + this.bumperLengthX = bumperLengthX; + this.bumperWidthY = bumperWidthY; + + checkBumperSize(); + return this; + } + + /** + * + * + *

Sets the track length and width.

+ * + *

Updates the translations for the swerve modules based on the specified track length and track width. + * + *

For non-rectangular chassis configuration, use {@link #withCustomModuleTranslations(Translation2d[])} instead. + * + * @param trackLengthX the distance between the front and rear wheels. + * @param trackWidthY the distance between the left and right wheels. + * @return the current instance of {@link DriveTrainSimulationConfig} for method chaining. + */ + public DriveTrainSimulationConfig withTrackLengthTrackWidth(Distance trackLengthX, Distance trackWidthY) { + BoundingCheck.check(trackLengthX.in(Meters), 0.5, 1.5, "track length", "meters"); + BoundingCheck.check(trackWidthY.in(Meters), 0.5, 1.5, "track width", "meters"); + + this.moduleTranslations = new Translation2d[] { + new Translation2d(trackLengthX.in(Meters) / 2, trackWidthY.in(Meters) / 2), + new Translation2d(trackLengthX.in(Meters) / 2, -trackWidthY.in(Meters) / 2), + new Translation2d(-trackLengthX.in(Meters) / 2, trackWidthY.in(Meters) / 2), + new Translation2d(-trackLengthX.in(Meters) / 2, -trackWidthY.in(Meters) / 2) + }; + return this; + } + + /** + * + * + *

Sets custom module translations.

+ * + *

Updates the translations of the swerve modules with user-defined values. + * + *

For ordinary rectangular modules configuration, use {@link #withTrackLengthTrackWidth(Distance, Distance)} + * instead. + * + * @param moduleTranslations the custom translations for the swerve modules. + * @return the current instance of {@link DriveTrainSimulationConfig} for method chaining. + */ + public DriveTrainSimulationConfig withCustomModuleTranslations(Translation2d[] moduleTranslations) { + checkModuleTranslations(); + this.moduleTranslations = moduleTranslations; + return this; + } + + /** + * + * + *

Sets the swerve module simulation factory.

+ * + *

Updates the factory used to create swerve module simulations. + * + * @param swerveModuleSimulationFactory the new factory (or factories) for swerve module simulations. You can + * specify one factory to apply the same configuration over all modules, or specify four factories in the order + * (FL, FR, BL, BR) + * @return the current instance of {@link DriveTrainSimulationConfig} for method chaining. + */ + public DriveTrainSimulationConfig withSwerveModules( + Supplier... swerveModuleSimulationFactory) { + if (swerveModuleSimulationFactory.length == 1) return withSwerveModule(swerveModuleSimulationFactory[0]); + + if (swerveModuleSimulationFactory.length != moduleTranslations.length) + throw new IllegalArgumentException("Module simulation factories length must be 1 or 4, provided " + + swerveModuleSimulationFactory.length); + + this.swerveModuleSimulationFactories = swerveModuleSimulationFactory; + return this; + } + + /** + * + * + *

Sets the swerve module simulation factory.

+ * + *

Updates the factory used to create swerve module simulations. + * + *

Uses the same configuration over all the modules + * + * @param swerveModuleSimulationFactory the new factory for swerve module simulations. + * @return the current instance of {@link DriveTrainSimulationConfig} for method chaining. + */ + public DriveTrainSimulationConfig withSwerveModule(Supplier swerveModuleSimulationFactory) { + this.swerveModuleSimulationFactories = new Supplier[moduleTranslations.length]; + Arrays.fill(this.swerveModuleSimulationFactories, swerveModuleSimulationFactory); + return this; + } + + /** + * + * + *

Sets the gyro simulation factory.

+ * + *

Updates the factory used to create gyro simulations. + * + * @param gyroSimulationFactory the new factory for gyro simulations. + * @return the current instance of {@link DriveTrainSimulationConfig} for method chaining. + */ + public DriveTrainSimulationConfig withGyro(Supplier gyroSimulationFactory) { + this.gyroSimulationFactory = gyroSimulationFactory; + return this; + } + + /** + * + * + *

Calculates the density of the robot.

+ * + *

Returns the density of the robot based on its mass and bumper dimensions. + * + * @return the density in kilograms per square meter. + */ + public double getDensityKgPerSquaredMeters() { + return robotMass.in(Kilograms) / (bumperLengthX.in(Meters) * bumperWidthY.in(Meters)); + } + + /** + * + * + *

Calculates the track length in the X direction.

+ * + *

Returns the total distance between the frontmost and rearmost module translations in the X direction. + * + * @return the track length. + * @throws IllegalStateException if the module translations are empty. + */ + public Distance trackLengthX() { + final OptionalDouble maxModuleX = Arrays.stream(moduleTranslations) + .mapToDouble(Translation2d::getX) + .max(); + final OptionalDouble minModuleX = Arrays.stream(moduleTranslations) + .mapToDouble(Translation2d::getX) + .min(); + if (maxModuleX.isEmpty() || minModuleX.isEmpty()) + throw new IllegalStateException("Modules translations are empty"); + return Meters.of(maxModuleX.getAsDouble() - minModuleX.getAsDouble()); + } + + /** + * + * + *

Calculates the track width in the Y direction.

+ * + *

Returns the total distance between the leftmost and rightmost module translations in the Y direction. + * + * @return the track width. + * @throws IllegalStateException if the module translations are empty. + */ + public Distance trackWidthY() { + final OptionalDouble maxModuleY = Arrays.stream(moduleTranslations) + .mapToDouble(Translation2d::getY) + .max(); + final OptionalDouble minModuleY = Arrays.stream(moduleTranslations) + .mapToDouble(Translation2d::getY) + .min(); + if (maxModuleY.isEmpty() || minModuleY.isEmpty()) + throw new IllegalStateException("Modules translations are empty"); + return Meters.of(maxModuleY.getAsDouble() - minModuleY.getAsDouble()); + } + + public Distance driveBaseRadius() { + return Meters.of(Math.hypot(trackLengthX().in(Meters), trackWidthY().in(Meters))); + } + + private void checkRobotMass() { + BoundingCheck.check(robotMass.in(Kilograms), 10, 80, "robot mass", "kg"); + } + + private void checkBumperSize() { + BoundingCheck.check(bumperLengthX.in(Meters), 0.5, 1.5, "bumper length", "meters"); + BoundingCheck.check(bumperWidthY.in(Meters), 0.5, 1.5, "bumper width", "meters"); + } + + private void checkModuleTranslations() { + for (int i = 0; i < moduleTranslations.length; i++) + BoundingCheck.check( + moduleTranslations[i].getNorm(), + 0.2, + 1.2, + "module number " + i + " translation magnitude", + "meters"); + } +} diff --git a/temp_yagsl/org/ironmaple/simulation/drivesims/configs/SwerveModuleSimulationConfig.java b/temp_yagsl/org/ironmaple/simulation/drivesims/configs/SwerveModuleSimulationConfig.java new file mode 100644 index 0000000..eb2b414 --- /dev/null +++ b/temp_yagsl/org/ironmaple/simulation/drivesims/configs/SwerveModuleSimulationConfig.java @@ -0,0 +1,128 @@ +package org.ironmaple.simulation.drivesims.configs; + +import static edu.wpi.first.units.Units.*; + +import edu.wpi.first.math.system.plant.DCMotor; +import edu.wpi.first.math.util.Units; +import edu.wpi.first.units.measure.*; +import java.util.function.Supplier; +import org.ironmaple.simulation.SimulatedArena; +import org.ironmaple.simulation.drivesims.SwerveModuleSimulation; +import org.ironmaple.simulation.motorsims.SimMotorConfigs; + +public class SwerveModuleSimulationConfig implements Supplier { + public final SimMotorConfigs driveMotorConfigs, steerMotorConfigs; + public final double DRIVE_GEAR_RATIO, STEER_GEAR_RATIO, WHEELS_COEFFICIENT_OF_FRICTION; + public final Voltage DRIVE_FRICTION_VOLTAGE; + public final Distance WHEEL_RADIUS; + + /** + * + * + *

Constructs a Configuration for Swerve Module Simulation.

+ * + *

If you are using {@link SimulatedArena#overrideSimulationTimings(Time, int)} to use custom timings, you must + * call the method before constructing any swerve module simulations using this constructor. + * + * @param driveMotorModel the model of the driving motor + * @param steerMotorModel; the model of the steering motor + * @param driveGearRatio the gear ratio for the driving motor, >1 is reduction + * @param steerGearRatio the gear ratio for the steering motor, >1 is reduction + * @param driveFrictionVoltage the measured minimum amount of voltage that can turn the driving rotter + * @param steerFrictionVoltage the measured minimum amount of voltage that can turn the steering rotter + * @param wheelRadius the radius of the wheels. + * @param steerRotationalInertia the rotational inertia of the entire steering mechanism + * @param wheelsCoefficientOfFriction the coefficient + * of friction of the tires, normally around 1.2 {@link Units#inchesToMeters(double)}. + */ + public SwerveModuleSimulationConfig( + DCMotor driveMotorModel, + DCMotor steerMotorModel, + double driveGearRatio, + double steerGearRatio, + Voltage driveFrictionVoltage, + Voltage steerFrictionVoltage, + Distance wheelRadius, + MomentOfInertia steerRotationalInertia, + double wheelsCoefficientOfFriction) { + BoundingCheck.check(driveGearRatio, 4, 24, "drive gear ratio", "times reduction"); + BoundingCheck.check(steerGearRatio, 6, 50, "steer gear ratio", "times reduction"); + BoundingCheck.check(driveFrictionVoltage.in(Volts), 0.01, 0.35, "drive friction voltage", "volts"); + BoundingCheck.check(steerFrictionVoltage.in(Volts), 0.01, 0.6, "steer friction voltage", "volts"); + BoundingCheck.check(wheelRadius.in(Inches), 1, 3.2, "drive wheel radius", "inches"); + BoundingCheck.check( + steerRotationalInertia.in(KilogramSquareMeters), 0.005, 0.06, "steer rotation inertia", "kg * m^2"); + BoundingCheck.check(wheelsCoefficientOfFriction, 0.6, 1.9, "tire coefficient of friction", ""); + + this.driveMotorConfigs = + new SimMotorConfigs(driveMotorModel, driveGearRatio, KilogramSquareMeters.zero(), driveFrictionVoltage); + this.steerMotorConfigs = + new SimMotorConfigs(steerMotorModel, steerGearRatio, steerRotationalInertia, steerFrictionVoltage); + DRIVE_GEAR_RATIO = driveGearRatio; + STEER_GEAR_RATIO = steerGearRatio; + WHEELS_COEFFICIENT_OF_FRICTION = wheelsCoefficientOfFriction; + DRIVE_FRICTION_VOLTAGE = driveFrictionVoltage; + WHEEL_RADIUS = wheelRadius; + } + + @Override + public SwerveModuleSimulation get() { + return new SwerveModuleSimulation(this); + } + + public double getGrippingForceNewtons(double gravityForceOnModuleNewtons) { + return gravityForceOnModuleNewtons * WHEELS_COEFFICIENT_OF_FRICTION; + } + + /** + * + * + *

Obtains the theoretical speed that the module can achieve.

+ * + * @return the theoretical maximum ground speed that the module can achieve, in m/s + */ + public LinearVelocity maximumGroundSpeed() { + return MetersPerSecond.of( + driveMotorConfigs.freeSpinMechanismVelocity().in(RadiansPerSecond) * WHEEL_RADIUS.in(Meters)); + } + + /** + * + * + *

Obtains the theoretical maximum propelling force of ONE module.

+ * + *

Calculates the maximum propelling force with respect to the gripping force and the drive motor's torque under + * its current limit. + * + * @param robotMass the mass of the robot + * @param modulesCount the amount of modules on the robot, assumed to be sharing the gravity force equally + * @return the maximum propelling force of EACH module + */ + public Force getTheoreticalPropellingForcePerModule(Mass robotMass, int modulesCount, Current statorCurrentLimit) { + final double + maxThrustNewtons = + driveMotorConfigs.calculateTorque(statorCurrentLimit).in(NewtonMeters) + / WHEEL_RADIUS.in(Meters), + maxGrippingNewtons = 9.8 * robotMass.in(Kilograms) / modulesCount * WHEELS_COEFFICIENT_OF_FRICTION; + + return Newtons.of(Math.min(maxThrustNewtons, maxGrippingNewtons)); + } + + /** + * + * + *

Obtains the theatrical linear acceleration that the robot can achieve.

+ * + *

Calculates the maximum linear acceleration of a robot, with respect to its mass and + * {@link #getTheoreticalPropellingForcePerModule(Mass, int, Current)}. + * + * @param robotMass the mass of the robot + * @param modulesCount the amount of modules on the robot, assumed to be sharing the gravity force equally + */ + public LinearAcceleration maxAcceleration(Mass robotMass, int modulesCount, Current statorCurrentLimit) { + return getTheoreticalPropellingForcePerModule(robotMass, modulesCount, statorCurrentLimit) + .times(modulesCount) + .div(robotMass); + } +} diff --git a/temp_yagsl/org/ironmaple/simulation/motorsims/MapleMotorSim.java b/temp_yagsl/org/ironmaple/simulation/motorsims/MapleMotorSim.java new file mode 100644 index 0000000..7cf9a48 --- /dev/null +++ b/temp_yagsl/org/ironmaple/simulation/motorsims/MapleMotorSim.java @@ -0,0 +1,194 @@ +package org.ironmaple.simulation.motorsims; + +import static edu.wpi.first.units.Units.*; + +import edu.wpi.first.units.measure.*; +import edu.wpi.first.wpilibj.simulation.DCMotorSim; + +/** + * + * + *

{@link edu.wpi.first.wpilibj.simulation.DCMotorSim} with a bit of extra spice.

+ * + *

This class extends the functionality of the original {@link edu.wpi.first.wpilibj.simulation.DCMotorSim} and + * models the following aspects in addition: + * + *

    + *
  • Motor Controller Closed Loops. + *
  • Smart current limiting. + *
  • Friction force on the rotor. + *
+ */ +public class MapleMotorSim { + private final SimMotorConfigs configs; + + private SimMotorState state; + private SimulatedMotorController controller; + private Voltage appliedVoltage; + private Current statorCurrent; + + /** + * + * + *

Constructs a Brushless Motor Simulation Instance.

+ * + * @param configs the configuration for this motor + */ + public MapleMotorSim(SimMotorConfigs configs) { + this.configs = configs; + this.state = new SimMotorState(Radians.zero(), RadiansPerSecond.zero()); + this.controller = (mechanismAngle, mechanismVelocity, encoderAngle, encoderVelocity) -> Volts.of(0); + this.appliedVoltage = Volts.zero(); + this.statorCurrent = Amps.zero(); + + SimulatedBattery.addMotor(this); + } + + /** + * + * + *

Updates the simulation.

+ * + *

This is equivalent to{@link edu.wpi.first.wpilibj.simulation.DCMotorSim#update(double)}. + */ + public void update(Time dt) { + this.appliedVoltage = controller.updateControlSignal( + state.mechanismAngularPosition, + state.mechanismAngularVelocity, + state.mechanismAngularPosition.times(configs.gearing), + state.mechanismAngularVelocity.times(configs.gearing)); + this.appliedVoltage = SimulatedBattery.clamp(appliedVoltage); + this.statorCurrent = configs.calculateCurrent(state.mechanismAngularVelocity, appliedVoltage); + this.state.step(configs.calculateTorque(statorCurrent), configs.friction, configs.loadMOI, dt); + + if (state.mechanismAngularPosition.lte(configs.reverseHardwareLimit)) + state = new SimMotorState(configs.reverseHardwareLimit, RadiansPerSecond.zero()); + else if (state.mechanismAngularPosition.gte(configs.forwardHardwareLimit)) + state = new SimMotorState(configs.forwardHardwareLimit, RadiansPerSecond.zero()); + } + + public T useMotorController(T motorController) { + this.controller = motorController; + return motorController; + } + + public SimulatedMotorController.GenericMotorController useSimpleDCMotorController() { + return useMotorController(new SimulatedMotorController.GenericMotorController(configs.motor)); + } + + /** + * + * + *

Obtains the final position of the mechanism.

+ * + *

This is equivalent to {@link edu.wpi.first.wpilibj.simulation.DCMotorSim#getAngularPosition()}. + * + * @return the angular position of the mechanism, continuous + */ + public Angle getAngularPosition() { + return state.mechanismAngularPosition; + } + + /** + * + * + *

Obtains the angular position measured by the relative encoder of the motor.

+ * + * @return the angular position measured by the encoder, continuous + */ + public Angle getEncoderPosition() { + return getAngularPosition().times(configs.gearing); + } + + /** + * + * + *

Obtains the final velocity of the mechanism.

+ * + *

This is equivalent to {@link edu.wpi.first.wpilibj.simulation.DCMotorSim#getAngularVelocity()}. + * + * @return the final angular velocity of the mechanism + */ + public AngularVelocity getVelocity() { + return state.mechanismAngularVelocity; + } + + /** + * + * + *

Obtains the angular velocity measured by the relative encoder of the motor.

+ * + * @return the angular velocity measured by the encoder + */ + public AngularVelocity getEncoderVelocity() { + return getVelocity().times(configs.gearing); + } + + /** + * + * + *

Obtains the applied voltage by the motor controller.

+ * + *

The applied voltage is calculated by the motor controller in the previous call to {@link #update(Time)} + * + *

The motor controller specified by {@link #useMotorController(SimulatedMotorController)} is used to calculate + * the applied voltage. + * + *

The applied voltage is also restricted for current limit and battery voltage. + * + * @return the applied voltage + */ + public Voltage getAppliedVoltage() { + return appliedVoltage; + } + + /** + * + * + *

Obtains the stator current.

+ * + *

This is equivalent to {@link DCMotorSim#getCurrentDrawAmps()} + * + * @return the stator current of the motor + */ + public Current getStatorCurrent() { + return statorCurrent; + } + + /** + * + * + *

Obtains the supply current.

+ * + *

The supply current is different from the stator current, as described here. + * + * @return the supply current of the motor + */ + public Current getSupplyCurrent() { + // Supply Power = Stator Power (Conservation of Energy) + // Hence, + // Battery Voltage x Supply Current = Applied Voltage x Stator Current + // Supply Current = Stator Current * Applied Voltage / Battery Voltage + return getStatorCurrent().times(appliedVoltage.div(SimulatedBattery.getBatteryVoltage())); + } + + /** + * + * + *

Obtains the configuration of the motor.

+ * + *

You can modify the configuration of this motor by: + * + *


+     *     mapleMotorSim.getConfigs()
+     *          .with...(...)
+     *          .with...(...);
+     * 
+ * + * @return the configuration of the motor + */ + public SimMotorConfigs getConfigs() { + return this.configs; + } +} diff --git a/temp_yagsl/org/ironmaple/simulation/motorsims/SimulatedMotorController.java b/temp_yagsl/org/ironmaple/simulation/motorsims/SimulatedMotorController.java new file mode 100644 index 0000000..a22c0ff --- /dev/null +++ b/temp_yagsl/org/ironmaple/simulation/motorsims/SimulatedMotorController.java @@ -0,0 +1,108 @@ +package org.ironmaple.simulation.motorsims; + +import static edu.wpi.first.units.Units.*; + +import edu.wpi.first.math.system.plant.DCMotor; +import edu.wpi.first.units.measure.Angle; +import edu.wpi.first.units.measure.AngularVelocity; +import edu.wpi.first.units.measure.Current; +import edu.wpi.first.units.measure.Voltage; + +public interface SimulatedMotorController { + Voltage updateControlSignal( + Angle mechanismAngle, + AngularVelocity mechanismVelocity, + Angle encoderAngle, + AngularVelocity encoderVelocity); + + final class GenericMotorController implements SimulatedMotorController { + private final DCMotor model; + private Current currentLimit = Amps.of(150); + private Angle forwardSoftwareLimit = Radians.of(Double.POSITIVE_INFINITY), + reverseSoftwareLimit = Radians.of(-Double.POSITIVE_INFINITY); + + private Voltage requestedVoltage = Volts.zero(); + private Voltage appliedVoltage = Volts.zero(); + + public GenericMotorController(DCMotor model) { + this.model = model; + } + + public GenericMotorController withCurrentLimit(Current currentLimit) { + this.currentLimit = currentLimit; + return this; + } + + public GenericMotorController withSoftwareLimits(Angle forwardSoftwareLimit, Angle reverseSoftwareLimit) { + this.forwardSoftwareLimit = forwardSoftwareLimit; + this.reverseSoftwareLimit = reverseSoftwareLimit; + return this; + } + + public void requestVoltage(Voltage voltage) { + this.requestedVoltage = voltage; + } + + /** + * + * + *

(Utility Function) Constrains the Output Voltage of a Motor.

+ * + *

Constrains the output voltage of a motor such that the stator current does not exceed the + * current limit + * + *

Prevents motor from exceeding software limits + * + * @param encoderAngle the angle of the encoder + * @param encoderVelocity the velocity of the encoder + * @param requestedVoltage the requested voltage + * @return the constrained voltage that satisfied the limits + */ + public Voltage constrainOutputVoltage( + Angle encoderAngle, AngularVelocity encoderVelocity, Voltage requestedVoltage) { + final double kCurrentThreshold = 1.2; + + // don't use WpiLib Units for calculations + final double motorCurrentVelocityRadPerSec = encoderVelocity.in(RadiansPerSecond); + final double currentLimitAmps = currentLimit.in(Amps); + final double requestedOutputVoltageVolts = requestedVoltage.in(Volts); + final double currentAtRequestedVoltageAmps = + model.getCurrent(motorCurrentVelocityRadPerSec, requestedOutputVoltageVolts); + + // Resource for current limiting: + // https://file.tavsys.net/control/controls-engineering-in-frc.pdf (sec 12.1.3) + double limitedVoltage = requestedOutputVoltageVolts; + final boolean currentTooHigh = + Math.abs(currentAtRequestedVoltageAmps) > (kCurrentThreshold * currentLimitAmps); + if (currentTooHigh) { + final double limitedCurrent = Math.copySign(currentLimitAmps, currentAtRequestedVoltageAmps); + limitedVoltage = model.getVoltage(model.getTorque(limitedCurrent), motorCurrentVelocityRadPerSec); + } + + // ensure the current limit doesn't cause an increase to output voltage + if (Math.abs(limitedVoltage) > Math.abs(requestedOutputVoltageVolts)) + limitedVoltage = requestedOutputVoltageVolts; + + // apply software limits + if (encoderAngle.gte(forwardSoftwareLimit) && limitedVoltage > 0) limitedVoltage = 0; + if (encoderAngle.lte(reverseSoftwareLimit) && limitedVoltage < 0) limitedVoltage = 0; + + // constrain the output voltage to the battery voltage + return Volts.of(limitedVoltage); + } + + @Override + public Voltage updateControlSignal( + Angle mechanismAngle, + AngularVelocity mechanismVelocity, + Angle encoderAngle, + AngularVelocity encoderVelocity) { + appliedVoltage = constrainOutputVoltage(encoderAngle, encoderVelocity, requestedVoltage); + return appliedVoltage; + } + + public Voltage getAppliedVoltage() { + return appliedVoltage; + } + } +} diff --git a/temp_yagsl/org/ironmaple/utils/mathutils/SwerveStateProjection.java b/temp_yagsl/org/ironmaple/utils/mathutils/SwerveStateProjection.java new file mode 100644 index 0000000..5310f62 --- /dev/null +++ b/temp_yagsl/org/ironmaple/utils/mathutils/SwerveStateProjection.java @@ -0,0 +1,26 @@ +// Created by Team 5516 https://github.com/Shenzhen-Robotics-Alliance/ using ChatGPT4o +package org.ironmaple.utils.mathutils; + +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.kinematics.SwerveModuleState; + +public class SwerveStateProjection { + /** + * Projects the swerve module speed onto the direction of the current swerve facing. + * + * @param swerveSpeed The current speed and direction of the swerve module. + * @param currentSwerveFacing The desired direction to project onto. + * @return The projected speed in the direction of currentSwerveFacing. + */ + public static double project(SwerveModuleState swerveSpeed, Rotation2d currentSwerveFacing) { + // Get the angle of the swerve module's current direction + Rotation2d swerveModuleAngle = swerveSpeed.angle; + + // Calculate the cosine of the angle difference between swerve module direction and the desired + // direction + double cosTheta = Math.cos(swerveModuleAngle.minus(currentSwerveFacing).getRadians()); + + // Scale the speed by the cosine value to get the projection + return swerveSpeed.speedMetersPerSecond * cosTheta; + } +} diff --git a/temp_yagsl/swervelib/SwerveDrive.java b/temp_yagsl/swervelib/SwerveDrive.java new file mode 100644 index 0000000..ddccf84 --- /dev/null +++ b/temp_yagsl/swervelib/SwerveDrive.java @@ -0,0 +1,1614 @@ +package swervelib; + +import static edu.wpi.first.hal.FRCNetComm.tInstances.kRobotDriveSwerve_YAGSL; +import static edu.wpi.first.hal.FRCNetComm.tResourceType.kResourceType_RobotDrive; +import static edu.wpi.first.units.Units.Inches; +import static edu.wpi.first.units.Units.KilogramSquareMeters; +import static edu.wpi.first.units.Units.Kilograms; +import static edu.wpi.first.units.Units.Meters; +import static edu.wpi.first.units.Units.Newtons; +import static edu.wpi.first.units.Units.RadiansPerSecond; +import static edu.wpi.first.units.Units.Seconds; +import static edu.wpi.first.units.Units.Volts; + +import edu.wpi.first.hal.HAL; +import edu.wpi.first.math.Matrix; +import edu.wpi.first.math.controller.SimpleMotorFeedforward; +import edu.wpi.first.math.estimator.SwerveDrivePoseEstimator; +import edu.wpi.first.math.filter.SlewRateLimiter; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Rotation3d; +import edu.wpi.first.math.geometry.Transform2d; +import edu.wpi.first.math.geometry.Translation2d; +import edu.wpi.first.math.geometry.Translation3d; +import edu.wpi.first.math.kinematics.ChassisSpeeds; +import edu.wpi.first.math.kinematics.SwerveDriveKinematics; +import edu.wpi.first.math.kinematics.SwerveModulePosition; +import edu.wpi.first.math.kinematics.SwerveModuleState; +import edu.wpi.first.math.numbers.N1; +import edu.wpi.first.math.numbers.N3; +import edu.wpi.first.math.system.plant.DCMotor; +import edu.wpi.first.math.trajectory.Trajectory; +import edu.wpi.first.math.util.Units; +import edu.wpi.first.networktables.DoublePublisher; +import edu.wpi.first.networktables.NetworkTableInstance; +import edu.wpi.first.units.measure.AngularVelocity; +import edu.wpi.first.units.measure.Force; +import edu.wpi.first.units.measure.LinearVelocity; +import edu.wpi.first.wpilibj.Alert; +import edu.wpi.first.wpilibj.Alert.AlertType; +import edu.wpi.first.wpilibj.DriverStation; +import edu.wpi.first.wpilibj.Notifier; +import edu.wpi.first.wpilibj.TimedRobot; +import edu.wpi.first.wpilibj.Timer; +import edu.wpi.first.wpilibj.smartdashboard.Field2d; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import org.ironmaple.simulation.SimulatedArena; +import org.ironmaple.simulation.drivesims.AbstractDriveTrainSimulation; +import org.ironmaple.simulation.drivesims.SwerveDriveSimulation; +import org.ironmaple.simulation.drivesims.configs.DriveTrainSimulationConfig; +import org.ironmaple.simulation.drivesims.configs.SwerveModuleSimulationConfig; +import swervelib.encoders.CANCoderSwerve; +import swervelib.imu.Pigeon2Swerve; +import swervelib.imu.SwerveIMU; +import swervelib.math.SwerveMath; +import swervelib.motors.TalonFXSwerve; +import swervelib.parser.Cache; +import swervelib.parser.SwerveControllerConfiguration; +import swervelib.parser.SwerveDriveConfiguration; +import swervelib.simulation.SwerveIMUSimulation; +import swervelib.telemetry.SwerveDriveTelemetry; +import swervelib.telemetry.SwerveDriveTelemetry.TelemetryVerbosity; + +/** + * Swerve Drive class representing and controlling the swerve drive. + */ +public class SwerveDrive implements AutoCloseable +{ + + /** + * Swerve Kinematics object. + */ + public final SwerveDriveKinematics kinematics; + /** + * Swerve drive configuration. + */ + public final SwerveDriveConfiguration swerveDriveConfiguration; + /** + * Swerve odometry. + */ + public final SwerveDrivePoseEstimator swerveDrivePoseEstimator; + /** + * IMU reading cache for robot readings. + */ + public final Cache imuReadingCache; + /** + * Swerve modules. + */ + private final SwerveModule[] swerveModules; + /** + * WPILib {@link Notifier} to keep odometry up to date. + */ + private final Notifier odometryThread; + /** + * Odometry lock to ensure thread safety. + */ + private final Lock odometryLock = new ReentrantLock(); + /** + * Alert to recommend Tuner X if the configuration is compatible. + */ + private final Alert tunerXRecommendation = new Alert("Swerve Drive", + "Your Swerve Drive is compatible with Tuner X swerve generator, please consider using that instead of YAGSL. More information here!\n" + + "https://pro.docs.ctr-electronics.com/en/latest/docs/tuner/tuner-swerve/index.html", + AlertType.kWarning); + /** + * NT4 Publisher for the IMU reading. + */ + private final DoublePublisher rawIMUPublisher + = NetworkTableInstance.getDefault() + .getTable( + "SmartDashboard") + .getDoubleTopic( + "swerve/imu/raw") + .publish(); + /** + * NT4 Publisher for the IMU reading adjusted by offset and inversion. + */ + private final DoublePublisher adjustedIMUPublisher + = NetworkTableInstance.getDefault() + .getTable( + "SmartDashboard") + .getDoubleTopic( + "swerve/imu/adjusted") + .publish(); + /** + * Field object. + */ + public Field2d field = new Field2d(); + /** + * Swerve controller for controlling heading of the robot. + */ + public SwerveController swerveController; + /** + * Correct chassis velocity in {@link SwerveDrive#drive(Translation2d, double, boolean, boolean)} using 254's + * correction. + */ + public boolean chassisVelocityCorrection = true; + /** + * Correct chassis velocity in {@link SwerveDrive#setChassisSpeeds(ChassisSpeeds chassisSpeeds)} (auto) using 254's + * correction during auto. + */ + public boolean autonomousChassisVelocityCorrection = false; + /** + * Correct for skew that scales with angular velocity in + * {@link SwerveDrive#drive(Translation2d, double, boolean, boolean)} + */ + public boolean angularVelocityCorrection = false; + /** + * Correct for skew that scales with angular velocity in + * {@link SwerveDrive#setChassisSpeeds(ChassisSpeeds chassisSpeeds)} during auto. + */ + public boolean autonomousAngularVelocityCorrection = false; + /** + * Angular Velocity Correction Coefficent (expected values between -0.15 and 0.15). + */ + public double angularVelocityCoefficient = 0; + /** + * Whether to correct heading when driving translationally. Set to true to enable. + */ + public boolean headingCorrection = false; + /** + * MapleSim SwerveDrive. + */ + private SwerveDriveSimulation mapleSimDrive; + /** + * Amount of seconds the duration of the timestep the speeds should be applied for. + */ + private double discretizationdtSeconds = 0.02; + /** + * Deadband for speeds in heading correction. + */ + private double HEADING_CORRECTION_DEADBAND = 0.01; + /** + * Swerve IMU device for sensing the heading of the robot. + */ + private SwerveIMU imu; + /** + * Simulation of the swerve drive. + */ + private SwerveIMUSimulation simIMU; + /** + * Counter to synchronize the modules relative encoder with absolute encoder when not moving. + */ + private int moduleSynchronizationCounter = 0; + /** + * The last heading set in radians. + */ + private double lastHeadingRadians = 0; + /** + * The absolute max speed that your robot can reach while translating in meters per second. + */ + private double attainableMaxTranslationalSpeedMetersPerSecond = 0; + /** + * The absolute max speed the robot can reach while rotating radians per second. + */ + private double attainableMaxRotationalVelocityRadiansPerSecond = 0; + /** + * Maximum speed of the robot in meters per second. + */ + private double maxChassisSpeedMPS; + + /** + * Creates a new swerve drivebase subsystem. Robot is controlled via the {@link SwerveDrive#drive} method, or via the + * {@link SwerveDrive#setRawModuleStates} method. The {@link SwerveDrive#drive} method incorporates kinematics-- it + * takes a translation and rotation, as well as parameters for field-centric and closed-loop velocity control. + * {@link SwerveDrive#setRawModuleStates} takes a list of SwerveModuleStates and directly passes them to the modules. + * This subsystem also handles odometry. + * + * @param config The {@link SwerveDriveConfiguration} configuration to base the swerve drive off of. + * @param controllerConfig The {@link SwerveControllerConfiguration} to use when creating the + * {@link SwerveController}. + * @param maxSpeedMPS Maximum speed of the robot in meters per second, remember to use + * {@link Units#feetToMeters(double)} if you have feet per second! + * @param startingPose Starting {@link Pose2d} on the field. + */ + public SwerveDrive( + SwerveDriveConfiguration config, SwerveControllerConfiguration controllerConfig, double maxSpeedMPS, + Pose2d startingPose) + { + this.attainableMaxTranslationalSpeedMetersPerSecond = this.maxChassisSpeedMPS = maxSpeedMPS; + this.attainableMaxRotationalVelocityRadiansPerSecond = Math.PI * + 2; // Defaulting to something reasonable for most robots + swerveDriveConfiguration = config; + swerveController = new SwerveController(controllerConfig); + // Create Kinematics from swerve module locations. + kinematics = new SwerveDriveKinematics(config.moduleLocationsMeters); + odometryThread = new Notifier(this::updateOdometry); + + this.swerveModules = config.modules; + + // Create an integrator for angle if the robot is being simulated to emulate an IMU + // If the robot is real, instantiate the IMU instead. + if (SwerveDriveTelemetry.isSimulation) + { + DriveTrainSimulationConfig simulationConfig = DriveTrainSimulationConfig.Default() + .withBumperSize( + Meters.of(config.getTracklength()) + .plus(Inches.of(5)), + Meters.of(config.getTrackwidth()) + .plus(Inches.of(5))) + .withRobotMass(Kilograms.of(config.physicalCharacteristics.robotMassKg)) + .withCustomModuleTranslations(config.moduleLocationsMeters) + .withGyro(config.getGyroSim()) + .withSwerveModule(new SwerveModuleSimulationConfig( + config.getDriveMotorSim(), + config.getAngleMotorSim(), + config.physicalCharacteristics.conversionFactor.drive.gearRatio, + config.physicalCharacteristics.conversionFactor.angle.gearRatio, + Volts.of(config.physicalCharacteristics.driveFrictionVoltage), + Volts.of(config.physicalCharacteristics.angleFrictionVoltage), + Inches.of( + config.physicalCharacteristics.conversionFactor.drive.diameter / + 2), + KilogramSquareMeters.of(0.02), + config.physicalCharacteristics.wheelGripCoefficientOfFriction) + ); + + mapleSimDrive = new SwerveDriveSimulation(simulationConfig, startingPose); + + // feed module simulation instances to modules + for (int i = 0; i < swerveModules.length; i++) + { + this.swerveModules[i].configureModuleSimulation(mapleSimDrive.getModules()[i], config.physicalCharacteristics); + } + + // register the drivetrain simulation + SimulatedArena.getInstance().addDriveTrainSimulation(mapleSimDrive); + simIMU = new SwerveIMUSimulation(mapleSimDrive.getGyroSimulation()); + imuReadingCache = new Cache<>(simIMU::getGyroRotation3d, 5L); + } else + { + imu = config.imu; + imu.factoryDefault(); + imuReadingCache = new Cache<>(imu::getRotation3d, 5L); + } + + // odometry = new SwerveDriveOdometry(kinematics, getYaw(), getModulePositions()); + swerveDrivePoseEstimator = + new SwerveDrivePoseEstimator( + kinematics, + getYaw(), + getModulePositions(), + startingPose); // x,y,heading in radians; Vision measurement std dev, higher=less weight +// +// Rotation3d currentGyro = imuReadingCache.getValue(); +// double offset = currentGyro.getZ() + +// startingPose.getRotation().getRadians(); +// setGyroOffset(new Rotation3d(currentGyro.getX(), currentGyro.getY(), offset)); + + // Initialize Telemetry + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.POSE.ordinal()) + { + SmartDashboard.putData("Field", field); + } + + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.INFO.ordinal()) + { + SwerveDriveTelemetry.maxSpeed = maxSpeedMPS; + SwerveDriveTelemetry.maxAngularVelocity = swerveController.config.maxAngularVelocity; + SwerveDriveTelemetry.moduleCount = swerveModules.length; + SwerveDriveTelemetry.sizeFrontBack = Units.metersToInches(SwerveMath.getSwerveModule(swerveModules, true, + false).moduleLocation.getX() + + SwerveMath.getSwerveModule(swerveModules, + false, + false).moduleLocation.getX()); + SwerveDriveTelemetry.sizeLeftRight = Units.metersToInches(SwerveMath.getSwerveModule(swerveModules, false, + true).moduleLocation.getY() + + SwerveMath.getSwerveModule(swerveModules, + false, + false).moduleLocation.getY()); + SwerveDriveTelemetry.wheelLocations = new double[SwerveDriveTelemetry.moduleCount * 2]; + for (SwerveModule module : swerveModules) + { + SwerveDriveTelemetry.wheelLocations[module.moduleNumber * 2] = Units.metersToInches( + module.configuration.moduleLocation.getX()); + SwerveDriveTelemetry.wheelLocations[(module.moduleNumber * 2) + 1] = Units.metersToInches( + module.configuration.moduleLocation.getY()); + } + SwerveDriveTelemetry.measuredStates = new double[SwerveDriveTelemetry.moduleCount * 2]; + SwerveDriveTelemetry.desiredStates = new double[SwerveDriveTelemetry.moduleCount * 2]; + SwerveDriveTelemetry.desiredStatesObj = new SwerveModuleState[SwerveDriveTelemetry.moduleCount]; + SwerveDriveTelemetry.measuredStatesObj = new SwerveModuleState[SwerveDriveTelemetry.moduleCount]; + } + + setOdometryPeriod(SwerveDriveTelemetry.isSimulation ? 0.004 : 0.02); + + checkIfTunerXCompatible(); + + HAL.report(kResourceType_RobotDrive, kRobotDriveSwerve_YAGSL); + } + + @Override + public void close() + { + imu.close(); + tunerXRecommendation.close(); + + for (var module : swerveModules) + { + module.close(); + } + } + + /** + * Update the cache validity period for the robot. + * + * @param imu IMU reading cache validity period in milliseconds. + * @param driveMotor Drive motor reading cache in milliseconds. + * @param absoluteEncoder Absolute encoder reading cache in milliseconds. + */ + public void updateCacheValidityPeriods(long imu, long driveMotor, long absoluteEncoder) + { + imuReadingCache.updateValidityPeriod(imu); + for (SwerveModule module : swerveModules) + { + module.drivePositionCache.updateValidityPeriod(driveMotor); + module.driveVelocityCache.updateValidityPeriod(driveMotor); + module.absolutePositionCache.updateValidityPeriod(absoluteEncoder); + } + } + + /** + * Check all components to ensure that Tuner X Swerve Generator is recommended instead. + */ + private void checkIfTunerXCompatible() + { + boolean compatible = imu instanceof Pigeon2Swerve; + for (SwerveModule module : swerveModules) + { + compatible = compatible && module.getDriveMotor() instanceof TalonFXSwerve && + module.getAngleMotor() instanceof TalonFXSwerve && + module.getAbsoluteEncoder() instanceof CANCoderSwerve; + if (!compatible) + { + break; + } + } + if (compatible) + { + tunerXRecommendation.set(true); + } + + } + + /** + * Set the odometry update period in seconds. + * + * @param period period in seconds. + */ + public void setOdometryPeriod(double period) + { + odometryThread.stop(); + if (SwerveDriveTelemetry.isSimulation) + { + SimulatedArena.overrideSimulationTimings(Seconds.of(period), 1); + } + odometryThread.startPeriodic(period); + } + + /** + * Stop the odometry thread in favor of manually updating odometry. + */ + public void stopOdometryThread() + { + odometryThread.stop(); + if (SwerveDriveTelemetry.isSimulation) + { + SimulatedArena.overrideSimulationTimings(Seconds.of(TimedRobot.kDefaultPeriod), 5); + } + } + + /** + * Set the conversion factor for the angle/azimuth motor controller. + * + * @param conversionFactor Angle motor conversion factor for PID, should be generated from + * {@link SwerveMath#calculateDegreesPerSteeringRotation(double, double)} or calculated. + */ + public void setAngleMotorConversionFactor(double conversionFactor) + { + for (SwerveModule module : swerveModules) + { + module.setAngleMotorConversionFactor(conversionFactor); + } + } + + /** + * Set the conversion factor for the drive motor controller. + * + * @param conversionFactor Drive motor conversion factor for PID, should be generated from + * {@link SwerveMath#calculateMetersPerRotation(double, double, double)} or calculated. + */ + public void setDriveMotorConversionFactor(double conversionFactor) + { + for (SwerveModule module : swerveModules) + { + module.setDriveMotorConversionFactor(conversionFactor); + } + } + + /** + * Fetch the latest odometry heading, should be trusted over {@link SwerveDrive#getYaw()}. + * + * @return {@link Rotation2d} of the robot heading. + */ + public Rotation2d getOdometryHeading() + { + return swerveDrivePoseEstimator.getEstimatedPosition().getRotation(); + } + + /** + * Set the heading correction capabilities of YAGSL. + * + * @param state {@link SwerveDrive#headingCorrection} state. + */ + public void setHeadingCorrection(boolean state) + { + setHeadingCorrection(state, HEADING_CORRECTION_DEADBAND); + } + + /** + * Set the heading correction capabilities of YAGSL. + * + * @param state {@link SwerveDrive#headingCorrection} state. + * @param deadband {@link SwerveDrive#HEADING_CORRECTION_DEADBAND} deadband. + */ + public void setHeadingCorrection(boolean state, double deadband) + { + headingCorrection = state; + HEADING_CORRECTION_DEADBAND = deadband; + } + + /** + * Tertiary method of controlling the drive base given velocity in both field oriented and robot oriented at the same + * time. The inputs are added together so this is not intended to be used to give the driver both methods of control. + * + * @param fieldOrientedVelocity The field oriented velocties to use + * @param robotOrientedVelocity The robot oriented velocties to use + */ + public void driveFieldOrientedAndRobotOriented(ChassisSpeeds fieldOrientedVelocity, + ChassisSpeeds robotOrientedVelocity) + { + + drive(ChassisSpeeds.fromFieldRelativeSpeeds(fieldOrientedVelocity, getOdometryHeading()) + .plus(robotOrientedVelocity)); + } + + /** + * Secondary method of controlling the drive base given velocity and adjusting it for field oriented use. + * + * @param fieldRelativeSpeeds Velocity of the robot desired. + */ + public void driveFieldOriented(ChassisSpeeds fieldRelativeSpeeds) + { + drive(ChassisSpeeds.fromFieldRelativeSpeeds(fieldRelativeSpeeds, getOdometryHeading())); + } + + /** + * Secondary method of controlling the drive base given velocity and adjusting it for field oriented use. + * + * @param fieldRelativeSpeeds Velocity of the robot desired. + * @param centerOfRotationMeters The center of rotation in meters, 0 is the center of the robot. + */ + public void driveFieldOriented(ChassisSpeeds fieldRelativeSpeeds, Translation2d centerOfRotationMeters) + { + drive(ChassisSpeeds.fromFieldRelativeSpeeds(fieldRelativeSpeeds, getOdometryHeading()), centerOfRotationMeters); + } + + /** + * Secondary method for controlling the drivebase. Given a simple {@link ChassisSpeeds} set the swerve module states, + * to achieve the goal. + * + * @param velocity The desired robot-oriented {@link ChassisSpeeds} for the robot to achieve. + */ + public void drive(ChassisSpeeds velocity) + { + drive(velocity, false, new Translation2d()); + } + + /** + * Secondary method for controlling the drivebase. Given a simple {@link ChassisSpeeds} set the swerve module states, + * to achieve the goal. + * + * @param velocity The desired robot-oriented {@link ChassisSpeeds} for the robot to achieve. + * @param centerOfRotationMeters The center of rotation in meters, 0 is the center of the robot. + */ + public void drive(ChassisSpeeds velocity, Translation2d centerOfRotationMeters) + { + drive(velocity, false, centerOfRotationMeters); + } + + /** + * The primary method for controlling the drivebase. Takes a {@link Translation2d} and a rotation rate, and calculates + * and commands module states accordingly. Can use either open-loop or closed-loop velocity control for the wheel + * velocities. Also has field- and robot-relative modes, which affect how the translation vector is used. + * + * @param translation {@link Translation2d} that is the commanded linear velocity of the robot, in meters + * per second. In robot-relative mode, positive x is torwards the bow (front) and + * positive y is torwards port (left). In field-relative mode, positive x is away from + * the alliance wall (field North) and positive y is torwards the left wall when looking + * through the driver station glass (field West). + * @param rotation Robot angular rate, in radians per second. CCW positive. Unaffected by field/robot + * relativity. + * @param fieldRelative Drive mode. True for field-relative, false for robot-relative. + * @param isOpenLoop Whether to use closed-loop velocity control. Set to true to disable closed-loop. + * @param centerOfRotationMeters The center of rotation in meters, 0 is the center of the robot. + */ + public void drive( + Translation2d translation, double rotation, boolean fieldRelative, boolean isOpenLoop, + Translation2d centerOfRotationMeters) + { + // Creates a robot-relative ChassisSpeeds object, converting from field-relative speeds if + // necessary. + ChassisSpeeds velocity = new ChassisSpeeds(translation.getX(), translation.getY(), rotation); + if (fieldRelative) + { + velocity = ChassisSpeeds.fromFieldRelativeSpeeds(velocity, getOdometryHeading()); + } + drive(velocity, isOpenLoop, centerOfRotationMeters); + } + + /** + * The primary method for controlling the drivebase. Takes a {@link Translation2d} and a rotation rate, and calculates + * and commands module states accordingly. Can use either open-loop or closed-loop velocity control for the wheel + * velocities. Also has field- and robot-relative modes, which affect how the translation vector is used. + * + * @param translation {@link Translation2d} that is the commanded linear velocity of the robot, in meters per + * second. In robot-relative mode, positive x is torwards the bow (front) and positive y is + * torwards port (left). In field-relative mode, positive x is away from the alliance wall (field + * North) and positive y is torwards the left wall when looking through the driver station glass + * (field West). + * @param rotation Robot angular rate, in radians per second. CCW positive. Unaffected by field/robot + * relativity. + * @param fieldRelative Drive mode. True for field-relative, false for robot-relative. + * @param isOpenLoop Whether to use closed-loop velocity control. Set to true to disable closed-loop. + */ + public void drive( + Translation2d translation, double rotation, boolean fieldRelative, boolean isOpenLoop) + { + // Creates a robot-relative ChassisSpeeds object, converting from field-relative speeds if + // necessary. + ChassisSpeeds velocity = new ChassisSpeeds(translation.getX(), translation.getY(), rotation); + + if (fieldRelative) + { + velocity = ChassisSpeeds.fromFieldRelativeSpeeds(velocity, getOdometryHeading()); + } + drive(velocity, isOpenLoop, new Translation2d()); + } + + /** + * The primary method for controlling the drivebase. Takes a {@link ChassisSpeeds}, and calculates and commands module + * states accordingly. Can use either open-loop or closed-loop velocity control for the wheel velocities. Applies + * heading correction if enabled and necessary. + * + * @param robotRelativeVelocity The chassis speeds to set the robot to achieve. + * @param isOpenLoop Whether to use closed-loop velocity control. Set to true to disable closed-loop. + * @param centerOfRotationMeters The center of rotation in meters, 0 is the center of the robot. + */ + public void drive(ChassisSpeeds robotRelativeVelocity, boolean isOpenLoop, Translation2d centerOfRotationMeters) + { + SwerveDriveTelemetry.startCtrlCycle(); + robotRelativeVelocity = movementOptimizations(robotRelativeVelocity, + chassisVelocityCorrection, + angularVelocityCorrection); + + // Heading Angular Velocity Deadband, might make a configuration option later. + // Originally made by Team 1466 Webb Robotics. + // Modified by Team 7525 Pioneers and BoiledBurntBagel of 6036 + if (headingCorrection) + { + if (Math.abs(robotRelativeVelocity.omegaRadiansPerSecond) < HEADING_CORRECTION_DEADBAND + && (Math.abs(robotRelativeVelocity.vxMetersPerSecond) > HEADING_CORRECTION_DEADBAND + || Math.abs(robotRelativeVelocity.vyMetersPerSecond) > HEADING_CORRECTION_DEADBAND)) + { + robotRelativeVelocity.omegaRadiansPerSecond = + swerveController.headingCalculate(getOdometryHeading().getRadians(), lastHeadingRadians); + } else + { + lastHeadingRadians = getOdometryHeading().getRadians(); + } + } + + // Display commanded speed for testing + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.LOW.ordinal()) + { + SwerveDriveTelemetry.desiredChassisSpeedsObj = robotRelativeVelocity; + } + + // Calculate required module states via kinematics + SwerveModuleState[] swerveModuleStates = kinematics.toSwerveModuleStates(robotRelativeVelocity, + centerOfRotationMeters); + + setRawModuleStates(swerveModuleStates, robotRelativeVelocity, isOpenLoop); + } + + /** + * Set the maximum attainable speeds for desaturation. + * + * @param attainableMaxTranslationalSpeedMetersPerSecond The absolute max speed that your robot can reach while + * translating in meters per second. + * @param attainableMaxRotationalVelocityRadiansPerSecond The absolute max speed the robot can reach while rotating in + * radians per second. + */ + public void setMaximumAttainableSpeeds( + double attainableMaxTranslationalSpeedMetersPerSecond, + double attainableMaxRotationalVelocityRadiansPerSecond) + { + this.attainableMaxTranslationalSpeedMetersPerSecond = attainableMaxTranslationalSpeedMetersPerSecond; + this.attainableMaxRotationalVelocityRadiansPerSecond = attainableMaxRotationalVelocityRadiansPerSecond; + } + + /** + * Set the maximum allowable speeds for desaturation. + * + * @param maxTranslationalSpeedMetersPerSecond The allowable max speed that your robot should reach while translating + * in meters per second. + * @param maxRotationalVelocityRadiansPerSecond The allowable max speed the robot should reach while rotating in + * radians per second. + */ + public void setMaximumAllowableSpeeds( + double maxTranslationalSpeedMetersPerSecond, + double maxRotationalVelocityRadiansPerSecond) + { + this.maxChassisSpeedMPS = maxTranslationalSpeedMetersPerSecond; + this.swerveController.config.maxAngularVelocity = maxRotationalVelocityRadiansPerSecond; + } + + /** + * Get the maximum velocity from {@link SwerveDrive#attainableMaxTranslationalSpeedMetersPerSecond} or + * {@link SwerveDrive#maxChassisSpeedMPS} whichever is the lower limit on the robot's speed. + * + * @return Minimum speed in meters/second of physically attainable and user allowable limits. + */ + public double getMaximumChassisVelocity() + { + return Math.min(this.attainableMaxTranslationalSpeedMetersPerSecond, maxChassisSpeedMPS); + } + + /** + * Get the maximum drive velocity of a module as a {@link LinearVelocity}. + * + * @return {@link LinearVelocity} representing the maximum drive speed of a module. + */ + public double getMaximumModuleDriveVelocity() + { + return swerveModules[0].getMaxDriveVelocityMetersPerSecond(); + } + + /** + * Get the maximum angular velocity of an azimuth/angle motor in the swerve module. + * + * @return {@link AngularVelocity} of the maximum azimuth/angle motor. + */ + public AngularVelocity getMaximumModuleAngleVelocity() + { + return swerveModules[0].getMaxAngularVelocity(); + } + + /** + * Get the maximum angular velocity, either {@link SwerveDrive#attainableMaxRotationalVelocityRadiansPerSecond} or + * {@link SwerveControllerConfiguration#maxAngularVelocity}, whichever is the lower limit on the robot's speed. + * + * @return Minimum angular velocity in radians per second of physically attainable and user allowable limits. + */ + public double getMaximumChassisAngularVelocity() + { + return Math.min(this.attainableMaxRotationalVelocityRadiansPerSecond, swerveController.config.maxAngularVelocity); + } + + /** + * Set the module states (azimuth and velocity) directly. + * + * @param desiredStates A list of SwerveModuleStates to send to the modules. + * @param desiredChassisSpeed The desired chassis speeds to set the robot to achieve. + * @param isOpenLoop Whether to use closed-loop velocity control. Set to true to disable closed-loop. + */ + private void setRawModuleStates(SwerveModuleState[] desiredStates, ChassisSpeeds desiredChassisSpeed, + boolean isOpenLoop) + { + // Desaturates wheel speeds + double maxModuleSpeedMPS = getMaximumModuleDriveVelocity(); + if ((attainableMaxTranslationalSpeedMetersPerSecond != 0 || attainableMaxRotationalVelocityRadiansPerSecond != 0) && + attainableMaxTranslationalSpeedMetersPerSecond != maxChassisSpeedMPS) + { + SwerveDriveKinematics.desaturateWheelSpeeds(desiredStates, desiredChassisSpeed, + maxModuleSpeedMPS, + attainableMaxTranslationalSpeedMetersPerSecond, + attainableMaxRotationalVelocityRadiansPerSecond); + } else + { + SwerveDriveKinematics.desaturateWheelSpeeds(desiredStates, maxModuleSpeedMPS); + } + + // Sets states + for (SwerveModule module : swerveModules) + { + module.setDesiredState(desiredStates[module.moduleNumber], isOpenLoop, false); + } + } + + /** + * Set the module states (azimuth and velocity) directly. Used primarily for auto paths. Does not allow for usage of + * {@link SwerveDriveKinematics#desaturateWheelSpeeds(SwerveModuleState[] moduleStates, ChassisSpeeds + * desiredChassisSpeed, double attainableMaxModuleSpeedMetersPerSecond, double + * attainableMaxTranslationalSpeedMetersPerSecond, double attainableMaxRotationalVelocityRadiansPerSecond)} + * + * @param desiredStates A list of SwerveModuleStates to send to the modules. + * @param isOpenLoop Whether to use closed-loop velocity control. Set to true to disable closed-loop. + */ + public void setModuleStates(SwerveModuleState[] desiredStates, boolean isOpenLoop) + { + SwerveDriveTelemetry.startCtrlCycle(); + double maxModuleSpeedMPS = getMaximumModuleDriveVelocity(); + desiredStates = kinematics.toSwerveModuleStates(kinematics.toChassisSpeeds(desiredStates)); + SwerveDriveKinematics.desaturateWheelSpeeds(desiredStates, maxModuleSpeedMPS); + + // Sets states + for (SwerveModule module : swerveModules) + { + module.setDesiredState(desiredStates[module.moduleNumber], isOpenLoop, false); + } + } + + /** + * Drive the robot using the {@link SwerveModuleState}, it is recommended to have + * {@link SwerveDrive#setCosineCompensator(boolean)} set to false for this.
+ * + * @param robotRelativeVelocity Robot relative {@link ChassisSpeeds} + * @param states Corresponding {@link SwerveModuleState} to use (not checked against the + * {@param robotRelativeVelocity}). + * @param feedforwardForces Feedforward forces generated by set-point generator + */ + public void drive(ChassisSpeeds robotRelativeVelocity, SwerveModuleState[] states, Force[] feedforwardForces) + { + SwerveDriveTelemetry.startCtrlCycle(); + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.LOW.ordinal()) + { + SwerveDriveTelemetry.desiredChassisSpeedsObj = robotRelativeVelocity; + } + for (SwerveModule module : swerveModules) + { + module.applyStateOptimizations(states[module.moduleNumber]); + module.applyAntiJitter(states[module.moduleNumber], false); + + // from the module configuration, obtain necessary information to calculate feed-forward + // Warning: Will not work well if motor is not what we are expecting. + // Warning: Should replace module.getDriveMotor().simMotor with expected motor type first. + DCMotor driveMotorModel = module.configuration.driveMotor.getSimMotor(); + double driveGearRatio = module.configuration.conversionFactors.drive.gearRatio; + double wheelRadiusMeters = Units.inchesToMeters(module.configuration.conversionFactors.drive.diameter) / 2; + + // calculation: + double desiredGroundSpeedMPS = states[module.moduleNumber].speedMetersPerSecond; + double feedforwardVoltage = driveMotorModel.getVoltage( + // Since: (1) torque = force * momentOfForce; (2) torque (on wheel) = torque (on motor) * gearRatio + // torque (on motor) = force * wheelRadius / gearRatio + feedforwardForces[module.moduleNumber].in(Newtons) * wheelRadiusMeters / driveGearRatio, + // Since: (1) linear velocity = angularVelocity * wheelRadius; (2) wheelVelocity = motorVelocity / gearRatio + // motorAngularVelocity = linearVelocity / wheelRadius * gearRatio + desiredGroundSpeedMPS / wheelRadiusMeters * driveGearRatio + ); + module.setDesiredState( + states[module.moduleNumber], + false, + feedforwardVoltage + ); + } + } + + /** + * Set chassis speeds with closed-loop velocity control. + * + * @param robotRelativeSpeeds Chassis speeds to set. + */ + public void setChassisSpeeds(ChassisSpeeds robotRelativeSpeeds) + { + SwerveDriveTelemetry.startCtrlCycle(); + robotRelativeSpeeds = movementOptimizations(robotRelativeSpeeds, + autonomousChassisVelocityCorrection, + autonomousAngularVelocityCorrection); + + SwerveDriveTelemetry.desiredChassisSpeedsObj = robotRelativeSpeeds; + + setRawModuleStates(kinematics.toSwerveModuleStates(robotRelativeSpeeds), robotRelativeSpeeds, false); + } + + /** + * Gets the measured pose (position and rotation) of the robot, as reported by odometry. + * + * @return The robot's pose + */ + public Pose2d getPose() + { + + odometryLock.lock(); + Pose2d poseEstimation = swerveDrivePoseEstimator.getEstimatedPosition(); + odometryLock.unlock(); + return poseEstimation; + } + + /** + * Gets the maple-sim drivetrain simulation instance This is used to add intake simulation / launch game pieces from + * the robot + * + * @return an optional maple-sim {@link SwerveDriveSimulation} object, or {@link Optional#empty()} when calling from a + * real robot + */ + public Optional getMapleSimDrive() + { + if (SwerveDriveTelemetry.isSimulation) + { + return Optional.of(mapleSimDrive); + } + + return Optional.empty(); + } + + /** + * Gets the actual pose of the drivetrain during simulation + * + * @return an {@link Optional} {@link Pose2d}, representing the drivetrain pose during simulation, or an empty + * optional when running on real robot + */ + public Optional getSimulationDriveTrainPose() + { + odometryLock.lock(); + Optional simulationPose = getMapleSimDrive().map(AbstractDriveTrainSimulation::getSimulatedDriveTrainPose); + odometryLock.unlock(); + return simulationPose; + } + + /** + * Gets the measured field-relative robot velocity (x, y and omega) + * + * @return A ChassisSpeeds object of the current field-relative velocity + */ + public ChassisSpeeds getFieldVelocity() + { + // ChassisSpeeds has a method to convert from field-relative to robot-relative speeds, + // but not the reverse. However, because this transform is a simple rotation, negating the + // angle given as the robot angle reverses the direction of rotation, and the conversion is reversed. + ChassisSpeeds robotRelativeSpeeds = kinematics.toChassisSpeeds(getStates()); + return ChassisSpeeds.fromRobotRelativeSpeeds(robotRelativeSpeeds, getOdometryHeading()); + // Might need to be this instead + //return ChassisSpeeds.fromFieldRelativeSpeeds( + // kinematics.toChassisSpeeds(getStates()), getOdometryHeading().unaryMinus()); + } + + /** + * Gets the current robot-relative velocity (x, y and omega) of the robot + * + * @return A ChassisSpeeds object of the current robot-relative velocity + */ + public ChassisSpeeds getRobotVelocity() + { + return kinematics.toChassisSpeeds(getStates()); + } + + /** + * Resets odometry to the given pose. Gyro angle and module positions do not need to be reset when calling this + * method. However, if either gyro angle or module position is reset, this must be called in order for odometry to + * keep working. + * + * @param pose The pose to set the odometry to. Field relative, blue-origin where 0deg is facing towards RED alliance. + */ + public void resetOdometry(Pose2d pose) + { + odometryLock.lock(); + swerveDrivePoseEstimator.resetPosition(getYaw(), getModulePositions(), pose); + if (SwerveDriveTelemetry.isSimulation) + { + mapleSimDrive.setSimulationWorldPose(pose); + } + odometryLock.unlock(); + ChassisSpeeds robotRelativeSpeeds = ChassisSpeeds.fromRobotRelativeSpeeds(new ChassisSpeeds(0, 0, 0), getYaw()); + kinematics.toSwerveModuleStates(robotRelativeSpeeds); + + } + + /** + * Post the trajectory to the field + * + * @param trajectory the trajectory to post. + */ + public void postTrajectory(Trajectory trajectory) + { + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.POSE.ordinal()) + { + field.getObject("Trajectory").setTrajectory(trajectory); + } + } + + /** + * Gets the current module states (azimuth and velocity) + * + * @return A list of SwerveModuleStates containing the current module states + */ + public SwerveModuleState[] getStates() + { + SwerveModuleState[] states = new SwerveModuleState[swerveDriveConfiguration.moduleCount]; + for (SwerveModule module : swerveModules) + { + states[module.moduleNumber] = module.getState(); + } + return states; + } + + /** + * Gets the current module positions (azimuth and wheel position (meters)). + * + * @return A list of SwerveModulePositions containg the current module positions + */ + public SwerveModulePosition[] getModulePositions() + { + SwerveModulePosition[] positions = + new SwerveModulePosition[swerveDriveConfiguration.moduleCount]; + for (SwerveModule module : swerveModules) + { + positions[module.moduleNumber] = module.getPosition(); + } + return positions; + } + + /** + * Getter for the {@link SwerveIMU}. + * + * @return generated {@link SwerveIMU} + */ + public SwerveIMU getGyro() + { + return swerveDriveConfiguration.imu; + } + + /** + * Set the expected gyroscope angle using a {@link Rotation3d} object. To reset gyro, set to a new {@link Rotation3d} + * subtracted from the current gyroscopic readings {@link SwerveIMU#getRotation3d()}. + * + * @param gyro expected gyroscope angle as {@link Rotation3d}. + */ + public void setGyro(Rotation3d gyro) + { + if (SwerveDriveTelemetry.isSimulation) + { + setGyroOffset(simIMU.getGyroRotation3d().minus(gyro)); + } else + { + setGyroOffset(imu.getRawRotation3d().minus(gyro)); + } + imuReadingCache.update(); + } + + /** + * Resets the gyro angle to zero and resets odometry to the same position, but facing toward 0 (red alliance station). + */ + public void zeroGyro() + { + // Resets the real gyro or the angle accumulator, depending on whether the robot is being + // simulated + if (SwerveDriveTelemetry.isSimulation) + { + simIMU.setAngle(0); + } else + { + setGyroOffset(imu.getRawRotation3d()); + } + imuReadingCache.update(); + swerveController.lastAngleScalar = 0; + lastHeadingRadians = 0; + resetOdometry(new Pose2d(getPose().getTranslation(), new Rotation2d())); + } + + /** + * Gets the current yaw angle of the robot, as reported by the imu. CCW positive, not wrapped. + * + * @return The yaw as a {@link Rotation2d} angle + */ + public Rotation2d getYaw() + { + // Read the imu if the robot is real or the accumulator if the robot is simulated. + return Rotation2d.fromRadians(imuReadingCache.getValue().getZ()); + } + + /** + * Gets the current pitch angle of the robot, as reported by the imu. + * + * @return The heading as a {@link Rotation2d} angle + */ + public Rotation2d getPitch() + { + // Read the imu if the robot is real or the accumulator if the robot is simulated. + return Rotation2d.fromRadians(imuReadingCache.getValue().getY()); + } + + /** + * Gets the current roll angle of the robot, as reported by the imu. + * + * @return The heading as a {@link Rotation2d} angle + */ + public Rotation2d getRoll() + { + // Read the imu if the robot is real or the accumulator if the robot is simulated. + return Rotation2d.fromRadians(imuReadingCache.getValue().getX()); + } + + /** + * Gets the current gyro {@link Rotation3d} of the robot, as reported by the imu. + * + * @return The heading as a {@link Rotation3d} angle + */ + public Rotation3d getGyroRotation3d() + { + // Read the imu if the robot is real or the accumulator if the robot is simulated. + return imuReadingCache.getValue(); + } + + /** + * Gets current acceleration of the robot in m/s/s. If gyro unsupported returns empty. + * + * @return acceleration of the robot as a {@link Translation3d} + */ + public Optional getAccel() + { + if (!SwerveDriveTelemetry.isSimulation) + { + return imu.getAccel(); + } else + { + return simIMU.getAccel(); + } + } + + /** + * Sets the drive motors to brake/coast mode. + * + * @param brake True to set motors to brake mode, false for coast. + */ + public void setMotorIdleMode(boolean brake) + { + for (SwerveModule swerveModule : swerveModules) + { + swerveModule.setMotorBrake(brake); + } + } + + /** + * Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a + * few seconds. + * + * @param enabled Enable state + * @param deadband Deadband in degrees, default is 3 degrees. + */ + public void setModuleEncoderAutoSynchronize(boolean enabled, double deadband) + { + for (SwerveModule swerveModule : swerveModules) + { + swerveModule.setEncoderAutoSynchronize(enabled, deadband); + } + } + + + /** + * Point all modules toward the robot center, thus making the robot very difficult to move. Forcing the robot to keep + * the current pose. + */ + public void lockPose() + { + // Sets states + for (SwerveModule swerveModule : swerveModules) + { + SwerveModuleState desiredState = + new SwerveModuleState(0, swerveModule.configuration.moduleLocation.getAngle()); + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.INFO.ordinal()) + { + SwerveDriveTelemetry.desiredStatesObj[swerveModule.moduleNumber] = desiredState; + } + swerveModule.setDesiredState(desiredState, false, true); + + } + + // Update kinematics because we are not using setModuleStates + kinematics.toSwerveModuleStates(new ChassisSpeeds()); + } + + /** + * Get the swerve module poses and on the field relative to the robot. + * + * @param robotPose Robot pose. + * @return Swerve module poses. + */ + public Pose2d[] getSwerveModulePoses(Pose2d robotPose) + { + Pose2d[] poseArr = new Pose2d[swerveDriveConfiguration.moduleCount]; + List poses = new ArrayList<>(); + for (SwerveModule module : swerveModules) + { + poses.add( + robotPose.plus( + new Transform2d(module.configuration.moduleLocation, module.getState().angle))); + } + return poses.toArray(poseArr); + } + + /** + * Setup the swerve module feedforward. + * + * @param driveFeedforward Feedforward for the drive motor on swerve modules. + */ + public void replaceSwerveModuleFeedforward(SimpleMotorFeedforward driveFeedforward) + { + for (SwerveModule swerveModule : swerveModules) + { + swerveModule.setFeedforward(driveFeedforward); + } + } + + /** + * Update odometry should be run every loop. Synchronizes module absolute encoders with relative encoders + * periodically. In simulation mode will also post the pose of each module. Updates SmartDashboard with module encoder + * readings and states. + */ + public void updateOdometry() + { + SwerveDriveTelemetry.startOdomCycle(); + odometryLock.lock(); +// invalidateCache(); + try + { + // Update odometry + swerveDrivePoseEstimator.update(getYaw(), getModulePositions()); + + if (SwerveDriveTelemetry.isSimulation) + { + try + { + SimulatedArena.getInstance().simulationPeriodic(); + } catch (Exception e) + { + DriverStation.reportError("MapleSim error", false); + } + } + + // Update angle accumulator if the robot is simulated + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.INFO.ordinal()) + { + SwerveDriveTelemetry.measuredChassisSpeedsObj = getRobotVelocity(); + SwerveDriveTelemetry.robotRotationObj = getOdometryHeading(); + } + + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.POSE.ordinal()) + { + if (SwerveDriveTelemetry.isSimulation) + { + field.setRobotPose(mapleSimDrive.getSimulatedDriveTrainPose()); + field.getObject("OdometryPose").setPose(swerveDrivePoseEstimator.getEstimatedPosition()); + field.getObject("XModules").setPoses(getSwerveModulePoses(mapleSimDrive.getSimulatedDriveTrainPose())); + + } else + { + field.setRobotPose(swerveDrivePoseEstimator.getEstimatedPosition()); + } + } + + double sumVelocity = 0; + for (SwerveModule module : swerveModules) + { + SwerveModuleState moduleState = module.getState(); + sumVelocity += Math.abs(moduleState.speedMetersPerSecond); + if (SwerveDriveTelemetry.verbosity == TelemetryVerbosity.HIGH) + { + module.updateTelemetry(); + rawIMUPublisher.set(getYaw().getDegrees()); + adjustedIMUPublisher.set(getOdometryHeading().getDegrees()); + } + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.INFO.ordinal()) + { + SwerveDriveTelemetry.measuredStatesObj[module.moduleNumber] = moduleState; + } + } + + // If the robot isn't moving synchronize the encoders every 100ms (Inspired by democrat's SDS + // lib) + // To ensure that everytime we initialize it works. + if (sumVelocity <= .01 && ++moduleSynchronizationCounter > 5) + { + synchronizeModuleEncoders(); + moduleSynchronizationCounter = 0; + } + + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.INFO.ordinal()) + { + SwerveDriveTelemetry.updateData(); + } + } catch (Exception e) + { + odometryLock.unlock(); + throw e; + } + odometryLock.unlock(); + SwerveDriveTelemetry.endOdomCycle(); + } + + /** + * Invalidate all {@link Cache} object used by the {@link SwerveDrive} + */ + public void invalidateCache() + { + imuReadingCache.update(); + for (SwerveModule module : swerveModules) + { + module.invalidateCache(); + } + } + + /** + * Synchronize angle motor integrated encoders with data from absolute encoders. + */ + public void synchronizeModuleEncoders() + { + for (SwerveModule module : swerveModules) + { + module.queueSynchronizeEncoders(); + } + } + + /** + * Set the gyro scope offset to a desired known rotation. Unlike {@link SwerveDrive#setGyro(Rotation3d)} it DOES NOT + * take the current rotation into account. + * + * @param offset {@link Rotation3d} known offset of the robot for gyroscope to use. + */ + public void setGyroOffset(Rotation3d offset) + { + if (SwerveDriveTelemetry.isSimulation) + { + simIMU.setAngle(offset.getZ()); + } else + { + imu.setOffset(offset); + } + imuReadingCache.update(); + } + + /** + * Add a vision measurement to the {@link SwerveDrivePoseEstimator} and update the {@link SwerveIMU} gyro reading with + * the given timestamp of the vision measurement. + * + * @param robotPose Robot {@link Pose2d} as measured by vision. + * @param timestamp Timestamp the measurement was taken as time since startup, should be taken from + * {@link Timer#getFPGATimestamp()} or similar sources. + * @param visionMeasurementStdDevs Vision measurement standard deviation that will be sent to the + * {@link SwerveDrivePoseEstimator}.The standard deviation of the vision measurement, + * for best accuracy calculate the standard deviation at 2 or more points and fit a + * line to it with the calculated optimal standard deviation. (Units should be meters + * per pixel). By optimizing this you can get * vision accurate to inches instead of + * feet. + */ + public void addVisionMeasurement(Pose2d robotPose, double timestamp, + Matrix visionMeasurementStdDevs) + { + odometryLock.lock(); + swerveDrivePoseEstimator.addVisionMeasurement(robotPose, timestamp, visionMeasurementStdDevs); + odometryLock.unlock(); + } + + /** + * Sets the pose estimator's trust of global measurements. This might be used to change trust in vision measurements + * after the autonomous period, or to change trust as distance to a vision target increases. + * + * @param visionMeasurementStdDevs Standard deviations of the vision measurements. Increase these numbers to trust + * global measurements from vision less. This matrix is in the form [x, y, theta], + * with units in meters and radians. + */ + public void setVisionMeasurementStdDevs(Matrix visionMeasurementStdDevs) + { + odometryLock.lock(); + swerveDrivePoseEstimator.setVisionMeasurementStdDevs(visionMeasurementStdDevs); + odometryLock.unlock(); + } + + /** + * Add a vision measurement to the {@link SwerveDrivePoseEstimator} and update the {@link SwerveIMU} gyro reading with + * the given timestamp of the vision measurement. + * + * @param robotPose Robot {@link Pose2d} as measured by vision. + * @param timestamp Timestamp the measurement was taken as time since startup, should be taken from + * {@link Timer#getFPGATimestamp()} or similar sources. + */ + public void addVisionMeasurement(Pose2d robotPose, double timestamp) + { + odometryLock.lock(); + swerveDrivePoseEstimator.addVisionMeasurement(robotPose, timestamp); +// Pose2d newOdometry = new Pose2d(swerveDrivePoseEstimator.getEstimatedPosition().getTranslation(), +// robotPose.getRotation()); + odometryLock.unlock(); + +// setGyroOffset(new Rotation3d(0, 0, robotPose.getRotation().getRadians())); +// resetOdometry(newOdometry); + } + + /** + * Helper function to get the {@link SwerveDrive#swerveController} for the {@link SwerveDrive} which can be used to + * generate {@link ChassisSpeeds} for the robot to orient it correctly given axis or angles, and apply + * {@link edu.wpi.first.math.filter.SlewRateLimiter} to given inputs. Important functions to look at are + * {@link SwerveController#getTargetSpeeds(double, double, double, double, double)}, + * {@link SwerveController#addSlewRateLimiters(SlewRateLimiter, SlewRateLimiter, SlewRateLimiter)}, + * {@link SwerveController#getRawTargetSpeeds(double, double, double)}. + * + * @return {@link SwerveController} for the {@link SwerveDrive}. + */ + public SwerveController getSwerveController() + { + return swerveController; + } + + /** + * Get the {@link SwerveModule}s associated with the {@link SwerveDrive}. + * + * @return {@link SwerveModule} array specified by configurations. + */ + public SwerveModule[] getModules() + { + return swerveDriveConfiguration.modules; + } + + /** + * Get the {@link SwerveModule}'s as a {@link HashMap} where the key is the swerve module configuration name. + * + * @return {@link HashMap}(Module Name, SwerveModule) + */ + public Map getModuleMap() + { + Map map = new HashMap(); + for (SwerveModule module : swerveModules) + { + map.put(module.configuration.name, module); + } + return map; + } + + /** + * Reset the drive encoders on the robot, useful when manually resetting the robot without a reboot, like in + * autonomous. + */ + public void resetDriveEncoders() + { + for (SwerveModule module : swerveModules) + { + module.getDriveMotor().setPosition(0); + } + } + + /** + * Set the motor controller closed loop feedback device to the defined external absolute encoder, with the given + * offset from the supplied configuration, overwriting any native offset. + */ + public void useExternalFeedbackSensor() + { + for (SwerveModule module : swerveModules) + { + module.useExternalFeedbackSensor(); + } + } + + /** + * Set the motor controller closed loop feedback device to the internal encoder instead of the absolute encoder. + */ + public void useInternalFeedbackSensor() + { + for (SwerveModule module : swerveModules) + { + module.useInternalFeedbackSensor(); + } + } + + /** + * Pushes the Absolute Encoder offsets to the Encoder or Motor Controller, depending on type. Also removes the + * internal offsets to prevent double offsetting. + */ + @Deprecated + public void pushOffsetsToEncoders() + { + for (SwerveModule module : swerveModules) + { + module.pushOffsetsToEncoders(); + } + } + + /** + * Restores Internal YAGSL Encoder offsets and sets the Encoder stored offset back to 0 + */ + @Deprecated + public void restoreInternalOffset() + { + for (SwerveModule module : swerveModules) + { + module.restoreInternalOffset(); + } + } + + /** + * Set module optimization to be utilized or not. Sometimes it is desirable to be enabled for debugging purposes + * only. + * + * @param enabled Optimization enabled state. + */ + public void setModuleStateOptimization(boolean enabled) + { + for (SwerveModule module : swerveModules) + { + module.setModuleStateOptimization(enabled); + } + } + + /** + * Enable auto-centering module wheels. This has a side effect of causing some jitter to the robot when a PID is not + * tuned perfectly. This function is a wrapper for {@link SwerveModule#setAntiJitter(boolean)} to perform + * auto-centering. + * + * @param enabled Enable auto-centering (disable antiJitter) + */ + public void setAutoCenteringModules(boolean enabled) + { + for (SwerveModule module : swerveModules) + { + module.setAntiJitter(!enabled); + } + } + + /** + * Enable or disable the {@link swervelib.parser.SwerveModuleConfiguration#useCosineCompensator} for all + * {@link SwerveModule}'s in the swerve drive. The cosine compensator will slow down or speed up modules that are + * close to their desired state in theory. + * + * @param enabled Usage of the cosine compensator. + */ + public void setCosineCompensator(boolean enabled) + { + for (SwerveModule module : swerveModules) + { + module.configuration.useCosineCompensator = enabled; + } + } + + /** + * Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop + * + * @param enable Enable chassis velocity correction, which will use + * {@link ChassisSpeeds#discretize(ChassisSpeeds, double)}} with the following. + * @param dtSeconds The duration of the timestep the speeds should be applied for. + */ + public void setChassisDiscretization(boolean enable, double dtSeconds) + { + if (!SwerveDriveTelemetry.isSimulation) + { + chassisVelocityCorrection = enable; + discretizationdtSeconds = dtSeconds; + } + } + + /** + * Sets the Chassis discretization seconds as well as enableing/disabling the Chassis velocity correction in teleop + * and/or auto + * + * @param useInTeleop Enable chassis velocity correction, which will use + * {@link ChassisSpeeds#discretize(ChassisSpeeds, double)} with the following in teleop. + * @param useInAuto Enable chassis velocity correction, which will use + * {@link ChassisSpeeds#discretize(ChassisSpeeds, double)} with the following in auto. + * @param dtSeconds The duration of the timestep the speeds should be applied for. + */ + public void setChassisDiscretization(boolean useInTeleop, boolean useInAuto, double dtSeconds) + { + if (!SwerveDriveTelemetry.isSimulation) + { + chassisVelocityCorrection = useInTeleop; + autonomousChassisVelocityCorrection = useInAuto; + discretizationdtSeconds = dtSeconds; + } + } + + /** + * Enables angular velocity skew correction in teleop and/or autonomous and sets the angular velocity coefficient for + * both modes + * + * @param useInTeleop Enables angular velocity correction in teleop. + * @param useInAuto Enables angular velocity correction in autonomous. + * @param angularVelocityCoeff The angular velocity coefficient. Expected values between -0.15 to 0.15. Start with a + * value of 0.1, test in teleop. When enabling for the first time if the skew is + * significantly worse try inverting the value. Tune by moving in a straight line while + * rotating. Testing is best done with angular velocity controls on the right stick. + * Change the value until you are visually happy with the skew. Ensure your tune works + * with different translational and rotational magnitudes. If this reduces skew in teleop, + * it may improve auto. + */ + public void setAngularVelocityCompensation(boolean useInTeleop, boolean useInAuto, double angularVelocityCoeff) + { + if (!SwerveDriveTelemetry.isSimulation) + { + angularVelocityCorrection = useInTeleop; + autonomousAngularVelocityCorrection = useInAuto; + angularVelocityCoefficient = angularVelocityCoeff; + } + } + + /** + * Correct for skew that worsens as angular velocity increases + * + * @param robotRelativeVelocity The chassis speeds to set the robot to achieve. + * @return {@link ChassisSpeeds} of the robot after angular velocity skew correction. + */ + public ChassisSpeeds angularVelocitySkewCorrection(ChassisSpeeds robotRelativeVelocity) + { + var angularVelocity = new Rotation2d(imu.getYawAngularVelocity().in(RadiansPerSecond) * angularVelocityCoefficient); + if (angularVelocity.getRadians() != 0.0) + { + ChassisSpeeds fieldRelativeVelocity = ChassisSpeeds.fromRobotRelativeSpeeds(robotRelativeVelocity, + getOdometryHeading()); + robotRelativeVelocity = ChassisSpeeds.fromFieldRelativeSpeeds(fieldRelativeVelocity, + getOdometryHeading().plus(angularVelocity)); + } + return robotRelativeVelocity; + } + + /** + * Enable desired drive corrections + * + * @param robotRelativeVelocity The chassis speeds to set the robot to achieve. + * @param uesChassisDiscretize Correct chassis velocity using 254's correction. + * @param useAngularVelocitySkewCorrection Use the robot's angular velocity to correct for skew. + * @return The chassis speeds after optimizations. + */ + private ChassisSpeeds movementOptimizations(ChassisSpeeds robotRelativeVelocity, boolean uesChassisDiscretize, + boolean useAngularVelocitySkewCorrection) + { + + if (useAngularVelocitySkewCorrection) + { + robotRelativeVelocity = angularVelocitySkewCorrection(robotRelativeVelocity); + } + + // Thank you to Jared Russell FRC254 for Open Loop Compensation Code + // https://www.chiefdelphi.com/t/whitepaper-swerve-drive-skew-and-second-order-kinematics/416964/5 + if (uesChassisDiscretize) + { + robotRelativeVelocity = ChassisSpeeds.discretize(robotRelativeVelocity, discretizationdtSeconds); + } + + return robotRelativeVelocity; + } + + /** + * Convert a {@link ChassisSpeeds} to {@link SwerveModuleState[]} for use elsewhere. + * + * @param robotRelativeVelocity {@link ChassisSpeeds} velocity to use. + * @param optimize Perform chassis velocity correction or angular velocity correction. + * @return {@link SwerveModuleState[]} for use elsewhere. + */ + public SwerveModuleState[] toServeModuleStates(ChassisSpeeds robotRelativeVelocity, boolean optimize) + { + if (optimize) + { + robotRelativeVelocity = movementOptimizations(robotRelativeVelocity, + chassisVelocityCorrection, + angularVelocityCorrection); + } + return kinematics.toSwerveModuleStates(robotRelativeVelocity); + } +} diff --git a/temp_yagsl/swervelib/SwerveModule.java b/temp_yagsl/swervelib/SwerveModule.java new file mode 100644 index 0000000..0eb060e --- /dev/null +++ b/temp_yagsl/swervelib/SwerveModule.java @@ -0,0 +1,1016 @@ +package swervelib; + +import static edu.wpi.first.units.Units.InchesPerSecond; +import static edu.wpi.first.units.Units.MetersPerSecond; +import static edu.wpi.first.units.Units.RadiansPerSecond; +import static edu.wpi.first.units.Units.RotationsPerSecond; + +import edu.wpi.first.math.controller.SimpleMotorFeedforward; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.kinematics.SwerveModulePosition; +import edu.wpi.first.math.kinematics.SwerveModuleState; +import edu.wpi.first.networktables.BooleanPublisher; +import edu.wpi.first.networktables.DoublePublisher; +import edu.wpi.first.networktables.NetworkTableInstance; +import edu.wpi.first.units.measure.AngularVelocity; +import edu.wpi.first.units.measure.LinearVelocity; +import edu.wpi.first.wpilibj.Alert; +import edu.wpi.first.wpilibj.Alert.AlertType; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; +import swervelib.encoders.SparkMaxEncoderSwerve; +import swervelib.encoders.SwerveAbsoluteEncoder; +import swervelib.math.SwerveMath; +import swervelib.motors.SparkMaxBrushedMotorSwerve; +import swervelib.motors.SparkMaxSwerve; +import swervelib.motors.SwerveMotor; +import swervelib.parser.Cache; +import swervelib.parser.PIDFConfig; +import swervelib.parser.SwerveModuleConfiguration; +import swervelib.parser.SwerveModulePhysicalCharacteristics; +import swervelib.simulation.SwerveModuleSimulation; +import swervelib.telemetry.SwerveDriveTelemetry; +import swervelib.telemetry.SwerveDriveTelemetry.TelemetryVerbosity; + +/** + * The Swerve Module class which represents and controls Swerve Modules for the swerve drive. + */ +public class SwerveModule implements AutoCloseable +{ + + /** + * Swerve module configuration options. + */ + public final SwerveModuleConfiguration configuration; + /** + * Absolute encoder position cache. + */ + public final Cache absolutePositionCache; + /** + * Drive motor position cache. + */ + public final Cache drivePositionCache; + /** + * Drive motor velocity cache. + */ + public final Cache driveVelocityCache; + /** + * Module number for kinematics, usually 0 to 3. front left -> front right -> back left -> back right. + */ + public final int moduleNumber; + /** + * Swerve Motors. + */ + private final SwerveMotor angleMotor, driveMotor; + /** + * Absolute encoder for swerve drive. + */ + private final SwerveAbsoluteEncoder absoluteEncoder; + /** + * An {@link Alert} for if pushing the Absolute Encoder offset to the encoder fails. + */ + private final Alert encoderOffsetWarning; + /** + * An {@link Alert} for if there is no Absolute Encoder on the module. + */ + private final Alert noEncoderWarning; + /** + * An {@link Alert} for if there is no Absolute Encoder on the module. + */ + private final Alert externalSensorIsNull = new Alert("No absolute Encoder found.", + AlertType.kError); + /** + * An {@link Alert} for if the offset is 0 degrees. + */ + private final Alert internalOffsetIsZero = new Alert( + "Absolute encoder offset is 0, this may be a problem.", + AlertType.kWarning); + /** + * An {@link Alert} for if the angle/steer/azimuth motor is incompatible with the absolute encoder. + */ + private final Alert externalFeedbackIncompatible = new Alert( + "Absolute encoder is incompatible, cannot set as an external feedback device.", + AlertType.kError); + /** + * An {@link Alert} for if the absolute encoder cannot set an offset. + */ + private final Alert externalOffsetIncompatible = new Alert( + "Absolute encoder is incompatible, cannot set an offset internally.", + AlertType.kError); + /** + * NT4 Raw Absolute Angle publisher for the absolute encoder. + */ + private final DoublePublisher rawAbsoluteAnglePublisher; + /** + * NT4 Adjusted Absolute angle publisher for the absolute encoder. + */ + private final DoublePublisher adjAbsoluteAnglePublisher; + /** + * NT4 Absolute encoder read issue. + */ + private final BooleanPublisher absoluteEncoderIssuePublisher; + /** + * NT4 raw angle motor. + */ + private final DoublePublisher rawAnglePublisher; + /** + * NT4 Raw drive motor. + */ + private final DoublePublisher rawDriveEncoderPublisher; + /** + * NT4 Raw drive motor. + */ + private final DoublePublisher rawDriveVelocityPublisher; + /** + * Speed setpoint publisher for the module motor-controller PID. + */ + private final DoublePublisher speedSetpointPublisher; + /** + * Angle setpoint publisher for the module motor-controller PID. + */ + private final DoublePublisher angleSetpointPublisher; + /** + * Maximum {@link LinearVelocity} for the drive motor of the swerve module. + */ + private LinearVelocity maxDriveVelocity; + /** + * Maximum velocity for the drive motor of the swerve module. + */ + private double maxDriveVelocityMetersPerSecond; + /** + * Maximum {@link AngularVelocity} for the azimuth/angle motor of the swerve module. + */ + private AngularVelocity maxAngularVelocity; + /** + * Feedforward for the drive motor during closed loop control. + */ + private SimpleMotorFeedforward driveMotorFeedforward; + /** + * Anti-Jitter AKA auto-centering disabled. + */ + private boolean antiJitterEnabled = true; + /** + * Last swerve module state applied. + */ + private SwerveModuleState lastState; + /** + * Angle offset from the absolute encoder. + */ + private double angleOffset; + /** + * Simulated swerve module. + */ + private SwerveModuleSimulation simModule; + /** + * Enables utilization off {@link SwerveModuleState#optimize(Rotation2d)} + */ + private boolean optimizeSwerveModuleState = true; + /** + * Encoder synchronization queued. + */ + private boolean synchronizeEncoderQueued = false; + /** + * Encoder, Absolute encoder synchronization enabled. + */ + private boolean synchronizeEncoderEnabled = false; + /** + * Encoder synchronization deadband in degrees. + */ + private double synchronizeEncoderDeadband = 3; + + + /** + * Construct the swerve module and initialize the swerve module motors and absolute encoder. + * + * @param moduleNumber Module number for kinematics. + * @param moduleConfiguration Module constants containing CAN ID's and offsets. + */ + public SwerveModule(int moduleNumber, SwerveModuleConfiguration moduleConfiguration) + { + // angle = 0; + // speed = 0; + // omega = 0; + // fakePos = 0; + this.moduleNumber = moduleNumber; + configuration = moduleConfiguration; + angleOffset = moduleConfiguration.angleOffset; + + // Create motors from configuration and reset them to defaults. + angleMotor = moduleConfiguration.angleMotor; + driveMotor = moduleConfiguration.driveMotor; + angleMotor.factoryDefaults(); + driveMotor.factoryDefaults(); + + // Initialize Feedforwards. + driveMotorFeedforward = getDefaultFeedforward(); + + // Configure voltage comp, current limit, and ramp rate. + angleMotor.setVoltageCompensation(configuration.physicalCharacteristics.optimalVoltage); + driveMotor.setVoltageCompensation(configuration.physicalCharacteristics.optimalVoltage); + angleMotor.setCurrentLimit(configuration.physicalCharacteristics.angleMotorCurrentLimit); + driveMotor.setCurrentLimit(configuration.physicalCharacteristics.driveMotorCurrentLimit); + angleMotor.setLoopRampRate(configuration.physicalCharacteristics.angleMotorRampRate); + driveMotor.setLoopRampRate(configuration.physicalCharacteristics.driveMotorRampRate); + + // Config angle encoders + absoluteEncoder = moduleConfiguration.absoluteEncoder; + if (absoluteEncoder != null) + { + absoluteEncoder.factoryDefault(); + absoluteEncoder.configure(moduleConfiguration.absoluteEncoderInverted); + } + + if (SwerveDriveTelemetry.isSimulation) + { + simModule = new SwerveModuleSimulation(); + } + + // Setup the cache for the absolute encoder position. + absolutePositionCache = new Cache<>(this::getRawAbsolutePosition, 20); + + // Config angle motor/controller + if (!angleMotor.usingExternalFeedbackSensor()) + { + angleMotor.configureIntegratedEncoder(moduleConfiguration.conversionFactors.angle.factor); + } + angleMotor.configurePIDF(moduleConfiguration.anglePIDF); + angleMotor.configurePIDWrapping(0, 360); + angleMotor.setInverted(moduleConfiguration.angleMotorInverted); + angleMotor.setMotorBrake(false); + + // Set the position AFTER settings the conversion factor. + if (absoluteEncoder != null) + { + angleMotor.setPosition(getAbsolutePosition()); + } + + // Config drive motor/controller + driveMotor.configureIntegratedEncoder(moduleConfiguration.conversionFactors.drive.factor); + driveMotor.configurePIDF(moduleConfiguration.velocityPIDF); + driveMotor.setInverted(moduleConfiguration.driveMotorInverted); + driveMotor.setMotorBrake(true); + + driveMotor.burnFlash(); + angleMotor.burnFlash(); + + drivePositionCache = new Cache<>(driveMotor::getPosition, 20); + driveVelocityCache = new Cache<>(driveMotor::getVelocity, 20); + + // Force a cache update on init. + driveVelocityCache.update(); + drivePositionCache.update(); + absolutePositionCache.update(); + + // Save the current state. + lastState = getState(); + + noEncoderWarning = new Alert("Motors", + "There is no Absolute Encoder on module #" + + moduleNumber, + AlertType.kWarning); + encoderOffsetWarning = new Alert("Motors", + "Pushing the Absolute Encoder offset to the encoder failed on module #" + + moduleNumber, + AlertType.kWarning); + + rawAbsoluteAnglePublisher = NetworkTableInstance.getDefault().getTable("SmartDashboard").getDoubleTopic( + "swerve/modules/" + configuration.name + "/Raw Absolute Encoder").publish(); + adjAbsoluteAnglePublisher = NetworkTableInstance.getDefault().getTable("SmartDashboard").getDoubleTopic( + "swerve/modules/" + configuration.name + "/Adjusted Absolute Encoder").publish(); + absoluteEncoderIssuePublisher = NetworkTableInstance.getDefault().getTable("SmartDashboard").getBooleanTopic( + "swerve/modules/" + configuration.name + "/Absolute Encoder Read Issue").publish(); + rawAnglePublisher = NetworkTableInstance.getDefault().getTable("SmartDashboard").getDoubleTopic( + "swerve/modules/" + configuration.name + "/Raw Angle Encoder").publish(); + rawDriveEncoderPublisher = NetworkTableInstance.getDefault().getTable("SmartDashboard").getDoubleTopic( + "swerve/modules/" + configuration.name + "/Raw Drive Encoder").publish(); + rawDriveVelocityPublisher = NetworkTableInstance.getDefault().getTable("SmartDashboard").getDoubleTopic( + "swerve/modules/" + configuration.name + "/Raw Drive Velocity").publish(); + speedSetpointPublisher = NetworkTableInstance.getDefault().getTable("SmartDashboard").getDoubleTopic( + "swerve/modules/" + configuration.name + "/Speed Setpoint").publish(); + angleSetpointPublisher = NetworkTableInstance.getDefault().getTable("SmartDashboard").getDoubleTopic( + "swerve/modules/" + configuration.name + "/Angle Setpoint").publish(); + } + + @Override + public void close() + { + angleMotor.close(); + driveMotor.close(); + absoluteEncoder.close(); + } + + /** + * Get the default {@link SimpleMotorFeedforward} for the swerve module drive motor. + * + * @return {@link SimpleMotorFeedforward} using motor details. + */ + public SimpleMotorFeedforward getDefaultFeedforward() + { + double nominalVoltage = driveMotor.getSimMotor().nominalVoltageVolts; + double maxDriveSpeedMPS = getMaxVelocity().in(MetersPerSecond); + return SwerveMath.createDriveFeedforward(nominalVoltage, + maxDriveSpeedMPS, + configuration.physicalCharacteristics.wheelGripCoefficientOfFriction); + } + + /** + * Set utilization of {@link SwerveModuleState#optimize(Rotation2d)} which should be disabled for some debugging. + * + * @param optimizationState Optimization enabled. + */ + public void setModuleStateOptimization(boolean optimizationState) + { + optimizeSwerveModuleState = optimizationState; + if (!optimizeSwerveModuleState) + { + angleMotor.disablePIDWrapping(); + angleMotor.burnFlash(); + } + } + + /** + * Check if the module state optimization used by {@link SwerveModuleState#optimize(Rotation2d)} is enabled. + * + * @return optimization state. + */ + public boolean getModuleStateOptimization() + { + return optimizeSwerveModuleState; + } + + /** + * Set the voltage compensation for the swerve module motor. + * + * @param optimalVoltage Nominal voltage for operation to output to. + */ + public void setAngleMotorVoltageCompensation(double optimalVoltage) + { + angleMotor.setVoltageCompensation(optimalVoltage); + } + + /** + * Set the voltage compensation for the swerve module motor. + * + * @param optimalVoltage Nominal voltage for operation to output to. + */ + public void setDriveMotorVoltageCompensation(double optimalVoltage) + { + driveMotor.setVoltageCompensation(optimalVoltage); + } + + + /** + * Queue synchronization of the integrated angle encoder with the absolute encoder. + */ + public void queueSynchronizeEncoders() + { + if (absoluteEncoder != null && synchronizeEncoderEnabled) + { + synchronizeEncoderQueued = true; + } + } + + /** + * Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a + * few seconds. + * + * @param enabled Enable state + * @param deadband Deadband in degrees, default is 3 degrees. + */ + public void setEncoderAutoSynchronize(boolean enabled, double deadband) + { + synchronizeEncoderEnabled = enabled; + synchronizeEncoderDeadband = deadband; + } + + /** + * Enable auto synchronization for encoders during a match. This will only occur when the modules are not moving for a + * few seconds. + * + * @param enabled Enable state + */ + public void setEncoderAutoSynchronize(boolean enabled) + { + synchronizeEncoderEnabled = enabled; + } + + /** + * Set the antiJitter functionality, if true the modules will NOT auto center. Pushes the offsets to the angle motor + * controllers as well. + * + * @param antiJitter Anti-Jitter state desired. + */ + public void setAntiJitter(boolean antiJitter) + { + this.antiJitterEnabled = antiJitter; + if (antiJitter) + { + pushOffsetsToEncoders(); + } else + { + restoreInternalOffset(); + } + } + + /** + * Set the feedforward attributes to the given parameters. + * + * @param drive Drive motor feedforward for the module. + */ + public void setFeedforward(SimpleMotorFeedforward drive) + { + this.driveMotorFeedforward = drive; + } + + /** + * Get the current drive motor PIDF values. + * + * @return {@link PIDFConfig} of the drive motor. + */ + public PIDFConfig getDrivePIDF() + { + return configuration.velocityPIDF; + } + + /** + * Set the drive PIDF values. + * + * @param config {@link PIDFConfig} of that should be set. + */ + public void setDrivePIDF(PIDFConfig config) + { + configuration.velocityPIDF = config; + driveMotor.configurePIDF(config); + } + + /** + * Get the current angle/azimuth/steering motor PIDF values. + * + * @return {@link PIDFConfig} of the angle motor. + */ + public PIDFConfig getAnglePIDF() + { + return configuration.anglePIDF; + } + + /** + * Set the angle/azimuth/steering motor PID + * + * @param config {@link PIDFConfig} of that should be set. + */ + public void setAnglePIDF(PIDFConfig config) + { + configuration.anglePIDF = config; + angleMotor.configurePIDF(config); + } + + /** + * Set the desired state of the swerve module.
WARNING: If you are not using one of the functions from + * {@link SwerveDrive} you may screw up {@link SwerveDrive#kinematics} + * + * @param desiredState Desired swerve module state. + * @param isOpenLoop Whether to use open loop (direct percent) or direct velocity control. + * @param force Disables optimizations that prevent movement in the angle motor and forces the desired state + * onto the swerve module. + */ + public void setDesiredState(SwerveModuleState desiredState, boolean isOpenLoop, boolean force) + { + applyStateOptimizations(desiredState); + applyAntiJitter(desiredState, force); + + // Cosine compensation. + double nextVelocityMetersPerSecond = configuration.useCosineCompensator + ? getCosineCompensatedVelocity(desiredState) + : desiredState.speedMetersPerSecond; + double curVelocityMetersPerSecond = lastState.speedMetersPerSecond; + desiredState.speedMetersPerSecond = nextVelocityMetersPerSecond; + + setDesiredState(desiredState, + isOpenLoop, + driveMotorFeedforward.calculateWithVelocities(curVelocityMetersPerSecond, + nextVelocityMetersPerSecond)); + } + + /** + * Set the desired state of the swerve module.
WARNING: If you are not using one of the functions from + * {@link SwerveDrive} you may screw up {@link SwerveDrive#kinematics} + * + * @param desiredState Desired swerve module state. + * @param isOpenLoop Whether to use open loop (direct percent) or direct velocity control. + * @param driveFeedforwardVoltage Drive motor controller feedforward as a voltage. + */ + public void setDesiredState(SwerveModuleState desiredState, boolean isOpenLoop, + double driveFeedforwardVoltage) + { + if (isOpenLoop) + { + double percentOutput = desiredState.speedMetersPerSecond / maxDriveVelocity.in(MetersPerSecond); + driveMotor.setVoltage(percentOutput * 12); + } else + { + driveMotor.setReference(desiredState.speedMetersPerSecond, driveFeedforwardVoltage); + } + + // Prevent module rotation if angle is the same as the previous angle. + // Synchronize encoders if queued and send in the current position as the value from the absolute encoder. + if (absoluteEncoder != null && synchronizeEncoderQueued && synchronizeEncoderEnabled) + { + double absoluteEncoderPosition = getAbsolutePosition(); + if (Math.abs(angleMotor.getPosition() - absoluteEncoderPosition) >= synchronizeEncoderDeadband) + { + angleMotor.setPosition(absoluteEncoderPosition); + } + angleMotor.setReference(desiredState.angle.getDegrees(), 0, absoluteEncoderPosition); + synchronizeEncoderQueued = false; + } else + { + angleMotor.setReference(desiredState.angle.getDegrees(), 0); + } + + lastState = desiredState; + + if (SwerveDriveTelemetry.isSimulation) + { + simModule.updateStateAndPosition(desiredState); + } + + // TODO: Change and move to SwerveDriveTelemetry + if (SwerveDriveTelemetry.verbosity.ordinal() >= TelemetryVerbosity.INFO.ordinal()) + { + SwerveDriveTelemetry.desiredStatesObj[moduleNumber] = desiredState; + } + + if (SwerveDriveTelemetry.verbosity == TelemetryVerbosity.HIGH) + { + speedSetpointPublisher.set(desiredState.speedMetersPerSecond); + angleSetpointPublisher.set(desiredState.angle.getDegrees()); + } + + if (moduleNumber == SwerveDriveTelemetry.moduleCount - 1) + { + SwerveDriveTelemetry.endCtrlCycle(); + } + } + + /** + * Get the cosine compensated velocity to set the swerve module to. + * + * @param desiredState Desired {@link SwerveModuleState} to use. + * @return Cosine compensated velocity in meters/second. + */ + private double getCosineCompensatedVelocity(SwerveModuleState desiredState) + { + double cosineScalar = 1.0; + // Taken from the CTRE SwerveModule class. + // https://api.ctr-electronics.com/phoenix6/release/java/src-html/com/ctre/phoenix6/mechanisms/swerve/SwerveModule.html#line.46 + /* From FRC 900's whitepaper, we add a cosine compensator to the applied drive velocity */ + /* To reduce the "skew" that occurs when changing direction */ + /* If error is close to 0 rotations, we're already there, so apply full power */ + /* If the error is close to 0.25 rotations, then we're 90 degrees, so movement doesn't help us at all */ + cosineScalar = Rotation2d.fromDegrees(desiredState.angle.getDegrees()) + .minus(Rotation2d.fromDegrees(getAbsolutePosition())) + .getCos(); // TODO: Investigate angle modulus by 180. + /* Make sure we don't invert our drive, even though we shouldn't ever target over 90 degrees anyway */ + if (cosineScalar < 0.0) + { + cosineScalar = 1; + } + + return desiredState.speedMetersPerSecond * cosineScalar; + } + + /** + * Apply the {@link SwerveModuleState#optimize(Rotation2d)} function if the module state optimization is enabled while + * debugging. + * + * @param desiredState The desired state to apply the optimization to. + */ + public void applyStateOptimizations(SwerveModuleState desiredState) + { + // SwerveModuleState optimization might be desired to be disabled while debugging. + if (optimizeSwerveModuleState) + { + desiredState.optimize(Rotation2d.fromDegrees(getAbsolutePosition())); + } + } + + /** + * Apply anti-jitter to the desired state. This will prevent the module from rotating if the speed requested is too + * low. If force is true, the anti-jitter will not be applied. + * + * @param desiredState The desired state to apply the anti-jitter to. + * @param force Whether to ignore the {@link SwerveModule#antiJitterEnabled} state and apply the anti-jitter + * anyway. + */ + public void applyAntiJitter(SwerveModuleState desiredState, boolean force) + { + if (!force && antiJitterEnabled) + { + // Prevents module rotation if speed is less than 1% + SwerveMath.antiJitter(desiredState, lastState, Math.min(maxDriveVelocityMetersPerSecond, 4)); + } + } + + /** + * Set the angle for the module. + * + * @param angle Angle in degrees. + */ + public void setAngle(double angle) + { + angleMotor.setReference(angle, 0); + lastState.angle = Rotation2d.fromDegrees(angle); + } + + /** + * Get the Swerve Module state. + * + * @return Current SwerveModule state. + */ + public SwerveModuleState getState() + { + double velocity; + Rotation2d azimuth; + if (!SwerveDriveTelemetry.isSimulation) + { + velocity = driveVelocityCache.getValue(); + azimuth = Rotation2d.fromDegrees(getAbsolutePosition()); + } else + { + return simModule.getState(); + } + return new SwerveModuleState(velocity, azimuth); + } + + /** + * Get the position of the swerve module. + * + * @return {@link SwerveModulePosition} of the swerve module. + */ + public SwerveModulePosition getPosition() + { + double position; + Rotation2d azimuth; + if (!SwerveDriveTelemetry.isSimulation) + { + position = drivePositionCache.getValue(); + azimuth = Rotation2d.fromDegrees(getAbsolutePosition()); + } else + { + return simModule.getPosition(); + } + return new SwerveModulePosition(position, azimuth); + } + + /** + * Get the absolute position. Falls back to relative position on reading failure. + * + * @return Absolute encoder angle in degrees in the range [0, 360). + */ + public double getAbsolutePosition() + { + return absolutePositionCache.getValue(); + } + + /** + * Get the absolute position. Falls back to relative position on reading failure. + * + * @return Absolute encoder angle in degrees in the range [0, 360). + */ + public double getRawAbsolutePosition() + { + /* During simulation, when no absolute encoders are available, we return the state from the simulation module instead. */ + if (SwerveDriveTelemetry.isSimulation) + { + Rotation2d absolutePosition = simModule.getState().angle; + return absolutePosition.getDegrees(); + } + + double angle; + if (absoluteEncoder != null) + { + angle = absoluteEncoder.getAbsolutePosition() - angleOffset; + if (absoluteEncoder.readingError) + { + angle = getRelativePosition(); + } + } else + { + angle = getRelativePosition(); + } + if (optimizeSwerveModuleState) + { + angle %= 360; + if (angle < 0.0) + { + angle += 360; + } + } + + return angle; + } + + /** + * Get the relative angle in degrees. + * + * @return Angle in degrees. + */ + public double getRelativePosition() + { + return angleMotor.getPosition(); + } + + /** + * Set the brake mode. + * + * @param brake Set the brake mode. + */ + public void setMotorBrake(boolean brake) + { + driveMotor.setMotorBrake(brake); + } + + /** + * Set the conversion factor for the angle/azimuth motor controller. + * + * @param conversionFactor Angle motor conversion factor for PID, should be generated from + * {@link SwerveMath#calculateDegreesPerSteeringRotation(double, double)} or calculated. + */ + public void setAngleMotorConversionFactor(double conversionFactor) + { + angleMotor.configureIntegratedEncoder(conversionFactor); + } + + /** + * Set the conversion factor for the drive motor controller. + * + * @param conversionFactor Drive motor conversion factor for PID, should be generated from + * {@link SwerveMath#calculateMetersPerRotation(double, double, double)} or calculated. + */ + public void setDriveMotorConversionFactor(double conversionFactor) + { + driveMotor.configureIntegratedEncoder(conversionFactor); + } + + /** + * Get the angle {@link SwerveMotor} for the {@link SwerveModule}. + * + * @return {@link SwerveMotor} for the angle/steering motor of the module. + */ + public SwerveMotor getAngleMotor() + { + return angleMotor; + } + + /** + * Get the drive {@link SwerveMotor} for the {@link SwerveModule}. + * + * @return {@link SwerveMotor} for the drive motor of the module. + */ + public SwerveMotor getDriveMotor() + { + return driveMotor; + } + + /** + * Get the {@link SwerveAbsoluteEncoder} for the {@link SwerveModule}. + * + * @return {@link SwerveAbsoluteEncoder} for the swerve module. + */ + public SwerveAbsoluteEncoder getAbsoluteEncoder() + { + return absoluteEncoder; + } + + /** + * Fetch the {@link SwerveModuleConfiguration} for the {@link SwerveModule} with the parsed configurations. + * + * @return {@link SwerveModuleConfiguration} for the {@link SwerveModule}. + */ + public SwerveModuleConfiguration getConfiguration() + { + return configuration; + } + + + /** + * Use external sensors for the feedback of the angle/azimuth/steer controller. + */ + public void useExternalFeedbackSensor() + { + if (absoluteEncoder == null) + { + externalSensorIsNull.set(true); + return; + } + if (angleOffset == 0) + { + internalOffsetIsZero.set(true); + } + if (absoluteEncoder.setAbsoluteEncoderOffset(configuration.angleOffset)) + { + angleMotor.setAbsoluteEncoder(absoluteEncoder); + if (angleMotor.usingExternalFeedbackSensor()) + { + angleOffset = 0; + } else + { + externalFeedbackIncompatible.set(true); + angleMotor.setAbsoluteEncoder(null); + absoluteEncoder.setAbsoluteEncoderOffset(0); + } + + } else + { + externalOffsetIncompatible.set(true); + absoluteEncoder.setAbsoluteEncoderOffset(0); + } + } + + /** + * Use external sensors for the feedback of the angle/azimuth/steer controller. + */ + public void useInternalFeedbackSensor() + { + if (absoluteEncoder == null) + { + externalSensorIsNull.set(true); + return; + } + if (angleOffset == 0) + { + internalOffsetIsZero.set(true); + } + angleMotor.setAbsoluteEncoder(null); + absoluteEncoder.setAbsoluteEncoderOffset(0); + angleOffset = configuration.angleOffset; + } + + /** + * Push absolute encoder offset in the memory of the encoder or controller. Also removes the internal angle offset. + */ + @Deprecated + public void pushOffsetsToEncoders() + { + if (absoluteEncoder != null && angleOffset == configuration.angleOffset) + { + // If the absolute encoder is attached. + if (angleMotor instanceof SparkMaxSwerve || angleMotor instanceof SparkMaxBrushedMotorSwerve) + { + if (absoluteEncoder instanceof SparkMaxEncoderSwerve) + { + angleMotor.setAbsoluteEncoder(absoluteEncoder); + if (absoluteEncoder.setAbsoluteEncoderOffset(angleOffset)) + { + angleOffset = 0; + } else + { + angleMotor.setAbsoluteEncoder(null); + encoderOffsetWarning.set(true); + } + } + } + + } else + { + noEncoderWarning.set(true); + } + } + + /** + * Restore internal offset in YAGSL and either sets absolute encoder offset to 0 or restores old value. + */ + public void restoreInternalOffset() + { + angleMotor.setAbsoluteEncoder(null); + absoluteEncoder.setAbsoluteEncoderOffset(0); + angleOffset = configuration.angleOffset; + } + + /** + * Get if the last Absolute Encoder had a read issue, such as it does not exist. + * + * @return If the last Absolute Encoder had a read issue, or absolute encoder does not exist. + */ + public boolean getAbsoluteEncoderReadIssue() + { + if (absoluteEncoder == null) + { + return true; + } else + { + return absoluteEncoder.readingError; + } + } + + + /** + * Get the maximum module velocity as a {@link LinearVelocity} based on the RPM and gear ratio. + * + * @return {@link LinearVelocity} max velocity of the drive wheel. + */ + public LinearVelocity getMaxVelocity() + { + getMaxDriveVelocityMetersPerSecond(); + return maxDriveVelocity; + } + + /** + * Get the maximum drive velocity of the module in Meters Per Second. + * + * @return Maximum drive motor velocity in Meters Per Second. + */ + public double getMaxDriveVelocityMetersPerSecond() + { + if (maxDriveVelocity == null) + { + maxDriveVelocity = InchesPerSecond.of( + (driveMotor.getSimMotor().freeSpeedRadPerSec / + configuration.conversionFactors.drive.gearRatio) * + configuration.conversionFactors.drive.diameter / 2.0); + maxDriveVelocityMetersPerSecond = maxDriveVelocity.in(MetersPerSecond); + } + return maxDriveVelocityMetersPerSecond; + } + + /** + * Get the maximum module angular velocity as a {@link AngularVelocity} based on the RPM and gear ratio. + * + * @return {@link AngularVelocity} max velocity of the angle/azimuth. + */ + public AngularVelocity getMaxAngularVelocity() + { + if (maxAngularVelocity == null) + { + maxAngularVelocity = RotationsPerSecond.of( + RadiansPerSecond.of(angleMotor.getSimMotor().freeSpeedRadPerSec).in(RotationsPerSecond) / + configuration.conversionFactors.angle.gearRatio); + } + return maxAngularVelocity; + } + + /** + * Update data sent to {@link SmartDashboard}. + */ + public void updateTelemetry() + { + if (absoluteEncoder != null) + { + rawAbsoluteAnglePublisher.set(absoluteEncoder.getAbsolutePosition()); + } + if (SwerveDriveTelemetry.isSimulation && SwerveDriveTelemetry.verbosity == TelemetryVerbosity.HIGH) + { + SwerveModulePosition pos = simModule.getPosition(); + SwerveModuleState state = simModule.getState(); + rawAnglePublisher.set(pos.angle.getDegrees()); + rawDriveEncoderPublisher.set(pos.distanceMeters); + rawDriveVelocityPublisher.set(state.speedMetersPerSecond); + // For code coverage + angleMotor.getPosition(); + drivePositionCache.getValue(); + driveVelocityCache.getValue(); + } else + { + rawAnglePublisher.set(angleMotor.getPosition()); + rawDriveEncoderPublisher.set(drivePositionCache.getValue()); + rawDriveVelocityPublisher.set(driveVelocityCache.getValue()); + } + adjAbsoluteAnglePublisher.set(getAbsolutePosition()); + absoluteEncoderIssuePublisher.set(getAbsoluteEncoderReadIssue()); + + } + + /** + * Invalidate the {@link Cache} objects used by {@link SwerveModule}. + */ + public void invalidateCache() + { + absolutePositionCache.update(); + drivePositionCache.update(); + driveVelocityCache.update(); + } + + /** + * Obtains the {@link SwerveModuleSimulation} used in simulation. + * + * @return the module simulation, null if this method is called on a real robot + */ + public SwerveModuleSimulation getSimModule() + { + return simModule; + } + + /** + * Configure the {@link SwerveModule#simModule} with the MapleSim + * {@link org.ironmaple.simulation.drivesims.SwerveModuleSimulation} + * + * @param swerveModuleSimulation MapleSim {@link org.ironmaple.simulation.drivesims.SwerveModuleSimulation} to + * configure with. + * @param physicalCharacteristics {@link SwerveModulePhysicalCharacteristics} that represent the swerve drive. + */ + public void configureModuleSimulation( + org.ironmaple.simulation.drivesims.SwerveModuleSimulation swerveModuleSimulation, + SwerveModulePhysicalCharacteristics physicalCharacteristics) + { + this.simModule.configureSimModule(swerveModuleSimulation, physicalCharacteristics); + } +} diff --git a/temp_yagsl/swervelib/math/SwerveMath.java b/temp_yagsl/swervelib/math/SwerveMath.java new file mode 100644 index 0000000..3c3de29 --- /dev/null +++ b/temp_yagsl/swervelib/math/SwerveMath.java @@ -0,0 +1,394 @@ +package swervelib.math; + +import edu.wpi.first.math.controller.SimpleMotorFeedforward; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Translation2d; +import edu.wpi.first.math.geometry.Translation3d; +import edu.wpi.first.math.geometry.Twist2d; +import edu.wpi.first.math.kinematics.ChassisSpeeds; +import edu.wpi.first.math.kinematics.SwerveModuleState; +import java.util.List; +import swervelib.SwerveController; +import swervelib.SwerveModule; +import swervelib.parser.SwerveDriveConfiguration; +import swervelib.parser.SwerveModuleConfiguration; + +/** Mathematical functions which pertain to swerve drive. */ +public class SwerveMath { + + /** + * Calculate the meters per rotation for the integrated encoder. Calculation: (PI * WHEEL DIAMETER + * IN METERS) / (GEAR RATIO * ENCODER RESOLUTION) + * + * @param wheelDiameter Wheel diameter in meters. + * @param driveGearRatio The gear ratio of the drive motor. + * @param pulsePerRotation The number of encoder pulses per rotation. 1 if using an integrated + * encoder. + * @return Meters per rotation for the drive motor. + */ + public static double calculateMetersPerRotation( + double wheelDiameter, double driveGearRatio, double pulsePerRotation) { + return (Math.PI * wheelDiameter) / (driveGearRatio * pulsePerRotation); + } + + /** + * Calculate the meters per rotation for the integrated encoder. Calculation: (PI * WHEEL DIAMETER + * IN METERS) / (GEAR RATIO) + * + * @param wheelDiameter Wheel diameter in meters. + * @param driveGearRatio The gear ratio of the drive motor. + * @return Meters per rotation for the drive motor. + */ + public static double calculateMetersPerRotation(double wheelDiameter, double driveGearRatio) { + return calculateMetersPerRotation(wheelDiameter, driveGearRatio, 1); + } + + /** + * Normalize an angle to be within 0 to 360. + * + * @param angle Angle in degrees. + * @return Normalized angle in degrees. + */ + public static double normalizeAngle(double angle) { + Rotation2d angleRotation = Rotation2d.fromDegrees(angle); + return new Rotation2d(angleRotation.getCos(), angleRotation.getSin()).getDegrees(); + } + + /** + * Algebraically apply a deadband using a piece wise function. + * + * @param value value to apply deadband to. + * @param scaled Use algebra to determine deadband by starting the value at 0 past deadband. + * @param deadband The deadbnad to apply. + * @return Value with deadband applied. + */ + public static double applyDeadband(double value, boolean scaled, double deadband) { + value = Math.abs(value) > deadband ? value : 0; + return scaled + ? ((1 / (1 - deadband)) * (Math.abs(value) - deadband)) * Math.signum(value) + : value; + } + + /** + * Create the drive feedforward for swerve modules. + * + * @param optimalVoltage Optimal voltage to calculate kV (voltage/max Velocity) + * @param maxSpeed Maximum velocity in meters per second to use for the feed forward, should be as + * close to physical max as possible. + * @param wheelGripCoefficientOfFriction Wheel grip coefficient of friction for kA + * (voltage/(cof*9.81)) + * @return Drive feedforward for drive motor on a swerve module. + */ + public static SimpleMotorFeedforward createDriveFeedforward( + double optimalVoltage, double maxSpeed, double wheelGripCoefficientOfFriction) { + double kv = optimalVoltage / maxSpeed; + /// ^ Volt-seconds per meter (max voltage divided by max speed) + double ka = optimalVoltage / calculateMaxAcceleration(wheelGripCoefficientOfFriction); + /// ^ Volt-seconds^2 per meter (max voltage divided by max accel) + return new SimpleMotorFeedforward(0, kv, 0); + } + + /** + * Calculate the degrees per steering rotation for the integrated encoder. Encoder conversion + * values. Drive converts motor rotations to linear wheel distance and steering converts motor + * rotations to module azimuth. + * + * @param angleGearRatio The gear ratio of the steering motor. + * @param pulsePerRotation The number of pulses in a complete rotation for the encoder, 1 if + * integrated. + * @return Degrees per steering rotation for the angle motor. + */ + public static double calculateDegreesPerSteeringRotation( + double angleGearRatio, double pulsePerRotation) { + return 360 / (angleGearRatio * pulsePerRotation); + } + + /** + * Calculate the degrees per steering rotation for the integrated encoder. Encoder conversion + * values. Drive converts motor rotations to linear wheel distance and steering converts motor + * rotations to module azimuth. + * + * @param angleGearRatio The gear ratio of the steering motor. + * @return Degrees per steering rotation for the angle motor. + */ + public static double calculateDegreesPerSteeringRotation(double angleGearRatio) { + return calculateDegreesPerSteeringRotation(angleGearRatio, 1); + } + + /** + * Calculate the maximum angular velocity. + * + * @param maxSpeed Max speed of the robot in meters per second. + * @param furthestModuleX X of the furthest module in meters. + * @param furthestModuleY Y of the furthest module in meters. + * @return Maximum angular velocity in rad/s. + */ + public static double calculateMaxAngularVelocity( + double maxSpeed, double furthestModuleX, double furthestModuleY) { + return maxSpeed / Math.hypot(furthestModuleX, furthestModuleY); + } + + /** + * Calculate the practical maximum acceleration of the robot using the wheel coefficient of + * friction. + * + * @param cof Coefficient of Friction of the wheel grip tape. + * @return Practical maximum acceleration in m/s/s. + */ + public static double calculateMaxAcceleration(double cof) { + return cof * 9.81; + } + + /** + * Calculate the maximum theoretical acceleration without friction. + * + * @param stallTorqueNm Stall torque of driving motor in nM. + * @param gearRatio Gear ratio for driving motor number of motor rotations until one wheel + * rotation. + * @param moduleCount Number of swerve modules. + * @param wheelDiameter Wheel diameter in meters. + * @param robotMass Mass of the robot in kg. + * @return Theoretical maximum acceleration in m/s/s. + */ + public static double calculateMaxAcceleration( + double stallTorqueNm, + double gearRatio, + double moduleCount, + double wheelDiameter, + double robotMass) { + return (stallTorqueNm * gearRatio * moduleCount) / ((wheelDiameter / 2) * robotMass); + } + + /** + * Calculates the maximum acceleration allowed in a direction without tipping the robot. Reads arm + * position from NetworkTables and is passed the direction in question. + * + * @param angle The direction in which to calculate max acceleration, as a Rotation2d. Note that + * this is robot-relative. + * @param matter Matter that the robot is composed of in kg. (Includes chassis) + * @param robotMass The weight of the robot in kg. (Including manipulators, etc). + * @param config The swerve drive configuration. + * @return Maximum acceleration allowed in the robot direction. + */ + private static double calcMaxAccel( + Rotation2d angle, List matter, double robotMass, SwerveDriveConfiguration config) { + // Calculate the vertical mass moment using the floor as the datum. This will be used later to + // calculate max acceleration + Translation3d centerMass = new Translation3d(); + for (Matter object : matter) { + centerMass = centerMass.plus(object.massMoment()); + } + Translation3d robotCG = centerMass.div(robotMass); + Translation2d horizontalCG = robotCG.toTranslation2d(); + + Translation2d projectedHorizontalCg = + new Translation2d( + (angle.getSin() * angle.getCos() * horizontalCG.getY()) + + (Math.pow(angle.getCos(), 2) * horizontalCG.getX()), + (angle.getSin() * angle.getCos() * horizontalCG.getX()) + + (Math.pow(angle.getSin(), 2) * horizontalCG.getY())); + + // Projects the edge of the wheelbase onto the direction line. Assumes the wheelbase is + // rectangular. + // Because a line is being projected, rather than a point, one of the coordinates of the + // projected point is + // already known. + Translation2d projectedWheelbaseEdge; + double angDeg = angle.getDegrees(); + if (angDeg <= 45 && angDeg >= -45) { + SwerveModuleConfiguration conf = getSwerveModule(config.modules, true, true); + projectedWheelbaseEdge = + new Translation2d( + conf.moduleLocation.getX(), conf.moduleLocation.getX() * angle.getTan()); + } else if (135 >= angDeg && angDeg > 45) { + SwerveModuleConfiguration conf = getSwerveModule(config.modules, true, true); + projectedWheelbaseEdge = + new Translation2d( + conf.moduleLocation.getY() / angle.getTan(), conf.moduleLocation.getY()); + } else if (-135 <= angDeg && angDeg < -45) { + SwerveModuleConfiguration conf = getSwerveModule(config.modules, true, false); + projectedWheelbaseEdge = + new Translation2d( + conf.moduleLocation.getY() / angle.getTan(), conf.moduleLocation.getY()); + } else { + SwerveModuleConfiguration conf = getSwerveModule(config.modules, false, true); + projectedWheelbaseEdge = + new Translation2d( + conf.moduleLocation.getX(), conf.moduleLocation.getX() * angle.getTan()); + } + + double horizontalDistance = projectedHorizontalCg.plus(projectedWheelbaseEdge).getNorm(); + return 9.81 * horizontalDistance / robotCG.getZ(); + } + + /** + * Logical inverse of the Pose exponential from 254. Taken from team 3181. + * + * @param transform Pose to perform the log on. + * @return {@link Twist2d} of the transformed pose. + */ + public static Twist2d PoseLog(final Pose2d transform) { + + final double kEps = 1E-9; + final double dtheta = transform.getRotation().getRadians(); + final double half_dtheta = 0.5 * dtheta; + final double cos_minus_one = transform.getRotation().getCos() - 1.0; + double halftheta_by_tan_of_halfdtheta; + if (Math.abs(cos_minus_one) < kEps) { + halftheta_by_tan_of_halfdtheta = 1.0 - 1.0 / 12.0 * dtheta * dtheta; + } else { + halftheta_by_tan_of_halfdtheta = + -(half_dtheta * transform.getRotation().getSin()) / cos_minus_one; + } + final Translation2d translation_part = + transform + .getTranslation() + .rotateBy(new Rotation2d(halftheta_by_tan_of_halfdtheta, -half_dtheta)); + return new Twist2d(translation_part.getX(), translation_part.getY(), dtheta); + } + + /** + * Limits a commanded velocity to prevent exceeding the maximum acceleration given by {@link + * SwerveMath#calcMaxAccel}. Note that this takes and returns field-relative velocities. + * + * @param commandedVelocity The desired velocity + * @param fieldVelocity The velocity of the robot within a field relative state. + * @param robotPose The current pose of the robot. + * @param loopTime The time it takes to update the velocity in seconds. Note: this should + * include the 100ms that it takes for a SparkMax velocity to update. + * @param matter Matter that the robot is composed of with position in meters and mass in kg. + * @param robotMass The weight of the robot in kg. (Including manipulators, etc). + * @param config The swerve drive configuration. + * @return The limited velocity. This is either the commanded velocity, if attainable, or the + * closest attainable velocity. + */ + public static Translation2d limitVelocity( + Translation2d commandedVelocity, + ChassisSpeeds fieldVelocity, + Pose2d robotPose, + double loopTime, + double robotMass, + List matter, + SwerveDriveConfiguration config) { + // Get the robot's current field-relative velocity + Translation2d currentVelocity = SwerveController.getTranslation2d(fieldVelocity); + + // Calculate the commanded change in velocity by subtracting current velocity + // from commanded velocity + Translation2d deltaV = commandedVelocity.minus(currentVelocity); + + // Creates an acceleration vector with the direction of delta V and a magnitude + // of the maximum allowed acceleration in that direction + Translation2d maxAccel = + new Translation2d( + calcMaxAccel( + deltaV + // Rotates the velocity vector to convert from field-relative to robot-relative + .rotateBy(robotPose.getRotation().unaryMinus()) + .getAngle(), + matter, + robotMass, + config), + deltaV.getAngle()); + + // Calculate the maximum achievable velocity by the next loop cycle. + // delta V = Vf - Vi = at + Translation2d maxAchievableDeltaVelocity = maxAccel.times(loopTime); + + if (deltaV.getNorm() > maxAchievableDeltaVelocity.getNorm()) { + return maxAchievableDeltaVelocity.plus(currentVelocity); + } else { + // If the commanded velocity is attainable, use that. + return commandedVelocity; + } + } + + /** + * Get the fruthest module from center based on the module locations. + * + * @param modules Swerve module list. + * @param front True = furthest front, False = furthest back. + * @param left True = furthest left, False = furthest right. + * @return Module location which is the furthest from center and abides by parameters. + */ + public static SwerveModuleConfiguration getSwerveModule( + SwerveModule[] modules, boolean front, boolean left) { + Translation2d target = modules[0].configuration.moduleLocation, current, temp; + SwerveModuleConfiguration configuration = modules[0].configuration; + for (SwerveModule module : modules) { + current = module.configuration.moduleLocation; + temp = + front + ? (target.getY() >= current.getY() ? current : target) + : (target.getY() <= current.getY() ? current : target); + target = + left + ? (target.getX() >= temp.getX() ? temp : target) + : (target.getX() <= temp.getX() ? temp : target); + configuration = current.equals(target) ? module.configuration : configuration; + } + return configuration; + } + + /** + * Put an angle within the 360 deg scope of a reference. For example, given a scope reference of + * 756 degrees, assumes the full scope is (720-1080), and places an angle of 22 degrees into it, + * returning 742 deg. + * + *

A more formal definition: returns the closest angle {@code n} to {@code scopeReference} such + * that {@code n} is congruent to {@code newAngle}. + * + * @param scopeReference Current Angle (deg) + * @param newAngle Target Angle (deg) + * @return Closest angle within scope (deg) + */ + public static double placeInAppropriate0To360Scope(double scopeReference, double newAngle) { + // Figure out how many revolutions from the angle to the reference + double diffRevs = Math.round((scopeReference - newAngle) / 360) * 360; + + // Add that many revolutions + return diffRevs + newAngle; + } + + /** + * Perform anti-jitter within modules if the speed requested is too low. + * + * @param moduleState Current {@link SwerveModuleState} requested. + * @param lastModuleState Previous {@link SwerveModuleState} used. + * @param maxSpeed Maximum speed of the modules. + */ + public static void antiJitter( + SwerveModuleState moduleState, SwerveModuleState lastModuleState, double maxSpeed) { + if (Math.abs(moduleState.speedMetersPerSecond) <= (maxSpeed * 0.01)) { + moduleState.angle = lastModuleState.angle; + } + } + + /** + * Cube the {@link Translation2d} magnitude given in Polar coordinates. + * + * @param translation {@link Translation2d} to manipulate. + * @return Cubed magnitude from {@link Translation2d}. + */ + public static Translation2d cubeTranslation(Translation2d translation) { + if (Math.hypot(translation.getX(), translation.getY()) <= 1.0E-6) { + return translation; + } + return new Translation2d(Math.pow(translation.getNorm(), 3), translation.getAngle()); + } + + /** + * Scale the {@link Translation2d} Polar coordinate magnitude. + * + * @param translation {@link Translation2d} to use. + * @param scalar Multiplier for the Polar coordinate magnitude to use. + * @return {@link Translation2d} scaled by given magnitude scalar. + */ + public static Translation2d scaleTranslation(Translation2d translation, double scalar) { + if (Math.hypot(translation.getX(), translation.getY()) <= 1.0E-6) { + return translation; + } + return new Translation2d(translation.getNorm() * scalar, translation.getAngle()); + } +} diff --git a/temp_yagsl/swervelib/parser/SwerveDriveConfiguration.java b/temp_yagsl/swervelib/parser/SwerveDriveConfiguration.java new file mode 100644 index 0000000..433f725 --- /dev/null +++ b/temp_yagsl/swervelib/parser/SwerveDriveConfiguration.java @@ -0,0 +1,139 @@ +package swervelib.parser; + +import edu.wpi.first.math.geometry.Translation2d; +import edu.wpi.first.math.system.plant.DCMotor; +import java.util.function.Supplier; +import org.ironmaple.simulation.drivesims.COTS; +import org.ironmaple.simulation.drivesims.GyroSimulation; +import swervelib.SwerveModule; +import swervelib.imu.NavXSwerve; +import swervelib.imu.Pigeon2Swerve; +import swervelib.imu.SwerveIMU; +import swervelib.math.SwerveMath; + +/** Swerve drive configurations used during SwerveDrive construction. */ +public class SwerveDriveConfiguration { + + /** Number of modules on the robot. */ + public final int moduleCount; + /** Swerve Module locations. */ + public Translation2d[] moduleLocationsMeters; + /** Swerve IMU */ + public SwerveIMU imu; + /** Swerve Modules. */ + public SwerveModule[] modules; + /** Physical characteristics of the swerve drive from physicalproperties.json. */ + public SwerveModulePhysicalCharacteristics physicalCharacteristics; + + /** + * Create swerve drive configuration. + * + * @param moduleConfigs Module configuration. + * @param swerveIMU Swerve IMU. + * @param invertedIMU Invert the IMU. + * @param physicalCharacteristics {@link SwerveModulePhysicalCharacteristics} to store in + * association with self. + */ + public SwerveDriveConfiguration( + SwerveModuleConfiguration[] moduleConfigs, + SwerveIMU swerveIMU, + boolean invertedIMU, + SwerveModulePhysicalCharacteristics physicalCharacteristics) { + this.moduleCount = moduleConfigs.length; + this.imu = swerveIMU; + swerveIMU.setInverted(invertedIMU); + this.modules = createModules(moduleConfigs); + this.moduleLocationsMeters = new Translation2d[moduleConfigs.length]; + for (SwerveModule module : modules) { + this.moduleLocationsMeters[module.moduleNumber] = module.configuration.moduleLocation; + } + this.physicalCharacteristics = physicalCharacteristics; + } + + /** + * Create modules based off of the SwerveModuleConfiguration. + * + * @param swerves Swerve constants. + * @return Swerve Modules. + */ + public SwerveModule[] createModules(SwerveModuleConfiguration[] swerves) { + SwerveModule[] modArr = new SwerveModule[swerves.length]; + for (int i = 0; i < swerves.length; i++) { + modArr[i] = new SwerveModule(i, swerves[i]); + } + return modArr; + } + + /** + * Calculate the Drive Base Radius + * + * @return Drive base radius from center of robot to the farthest wheel in meters. + */ + public double getDriveBaseRadiusMeters() { + Translation2d centerOfModules = moduleLocationsMeters[0]; + + // Calculate the Center by adding all module offsets together. + for (int i = 1; i < moduleLocationsMeters.length; i++) { + centerOfModules = centerOfModules.plus(moduleLocationsMeters[i]); + } + + // Return Largest Radius + return centerOfModules.getDistance(moduleLocationsMeters[0]); + } + + /** + * Get the trackwidth of the swerve modules. + * + * @return Effective trackwdtih in Meters + */ + public double getTrackwidth() { + SwerveModuleConfiguration fr = SwerveMath.getSwerveModule(modules, true, false); + SwerveModuleConfiguration fl = SwerveMath.getSwerveModule(modules, true, true); + return fr.moduleLocation.getDistance(fl.moduleLocation); + } + + /** + * Get the tracklength of the swerve modules. + * + * @return Effective tracklength in Meters + */ + public double getTracklength() { + SwerveModuleConfiguration br = SwerveMath.getSwerveModule(modules, false, false); + SwerveModuleConfiguration bl = SwerveMath.getSwerveModule(modules, false, true); + return br.moduleLocation.getDistance(bl.moduleLocation); + } + + /** + * Get the {@link DCMotor} corresponding to the first module's configuration. + * + * @return {@link DCMotor} of the drive motor. + */ + public DCMotor getDriveMotorSim() { + SwerveModuleConfiguration fl = SwerveMath.getSwerveModule(modules, true, true); + return fl.driveMotor.getSimMotor(); + } + + /** + * Get the {@link DCMotor} corresponding to the first module configuration. + * + * @return {@link DCMotor} of the angle motor. + */ + public DCMotor getAngleMotorSim() { + SwerveModuleConfiguration fl = SwerveMath.getSwerveModule(modules, true, true); + return fl.angleMotor.getSimMotor(); + } + + /** + * Get the gyro simulation for the robot. + * + * @return {@link GyroSimulation} gyro simulation. + */ + public Supplier getGyroSim() { + if (imu instanceof Pigeon2Swerve) { + return COTS.ofPigeon2(); + } else if (imu instanceof NavXSwerve) { + return COTS.ofNav2X(); + } + return COTS.ofGenericGyro(); + } +} diff --git a/temp_yagsl/swervelib/parser/SwerveModuleConfiguration.java b/temp_yagsl/swervelib/parser/SwerveModuleConfiguration.java new file mode 100644 index 0000000..1fa3f4e --- /dev/null +++ b/temp_yagsl/swervelib/parser/SwerveModuleConfiguration.java @@ -0,0 +1,141 @@ +package swervelib.parser; + +import edu.wpi.first.math.geometry.Translation2d; +import swervelib.encoders.SwerveAbsoluteEncoder; +import swervelib.motors.SwerveMotor; +import swervelib.parser.json.modules.ConversionFactorsJson; + +/** Swerve Module configuration class which is used to configure {@link swervelib.SwerveModule}. */ +public class SwerveModuleConfiguration { + + /** + * Conversion factor for drive motor onboard PID's and angle PID's. Use {@link + * swervelib.math.SwerveMath#calculateMetersPerRotation(double, double, double)} and {@link + * swervelib.math.SwerveMath#calculateDegreesPerSteeringRotation(double, double)} respectively to + * calculate the conversion factors. + */ + public final ConversionFactorsJson conversionFactors; + /** Angle offset in degrees for the Swerve Module. */ + public final double angleOffset; + /** Whether the absolute encoder is inverted. */ + public final boolean absoluteEncoderInverted; + /** State of inversion of the drive motor. */ + public final boolean driveMotorInverted; + /** State of inversion of the angle motor. */ + public final boolean angleMotorInverted; + /** PIDF configuration options for the angle motor closed-loop PID controller. */ + public PIDFConfig anglePIDF; + /** PIDF configuration options for the drive motor closed-loop PID controller. */ + public PIDFConfig velocityPIDF; + /** Swerve module location relative to the robot. */ + public Translation2d moduleLocation; + /** Physical characteristics of the swerve module. */ + public SwerveModulePhysicalCharacteristics physicalCharacteristics; + /** The drive motor and angle motor of this swerve module. */ + public SwerveMotor driveMotor, angleMotor; + /** The Absolute Encoder for the swerve module. */ + public SwerveAbsoluteEncoder absoluteEncoder; + /** Name for the swerve module for telemetry. */ + public String name; + /** Should do cosine compensation when not pointing correct direction;. */ + public boolean useCosineCompensator; + + /** + * Construct a configuration object for swerve modules. + * + * @param driveMotor Drive {@link SwerveMotor}. + * @param angleMotor Angle {@link SwerveMotor} + * @param absoluteEncoder Absolute encoder {@link SwerveAbsoluteEncoder}. + * @param angleOffset Absolute angle offset to 0. + * @param absoluteEncoderInverted Absolute encoder inverted. + * @param angleMotorInverted State of inversion of the angle motor. + * @param driveMotorInverted Drive motor inverted. + * @param xMeters Module location in meters from the center horizontally. + * @param yMeters Module location in meters from center vertically. + * @param anglePIDF Angle PIDF configuration. + * @param velocityPIDF Velocity PIDF configuration. + * @param physicalCharacteristics Physical characteristics of the swerve module. + * @param name The name for the swerve module. + * @param conversionFactors Conversion factors to be applied to the drive and angle motors. + * @param useCosineCompensator Should use cosineCompensation. + */ + public SwerveModuleConfiguration( + SwerveMotor driveMotor, + SwerveMotor angleMotor, + ConversionFactorsJson conversionFactors, + SwerveAbsoluteEncoder absoluteEncoder, + double angleOffset, + double xMeters, + double yMeters, + PIDFConfig anglePIDF, + PIDFConfig velocityPIDF, + SwerveModulePhysicalCharacteristics physicalCharacteristics, + boolean absoluteEncoderInverted, + boolean driveMotorInverted, + boolean angleMotorInverted, + String name, + boolean useCosineCompensator) { + this.driveMotor = driveMotor; + this.angleMotor = angleMotor; + this.conversionFactors = conversionFactors; + this.absoluteEncoder = absoluteEncoder; + this.angleOffset = angleOffset; + this.absoluteEncoderInverted = absoluteEncoderInverted; + this.driveMotorInverted = driveMotorInverted; + this.angleMotorInverted = angleMotorInverted; + this.moduleLocation = new Translation2d(xMeters, yMeters); + this.anglePIDF = anglePIDF; + this.velocityPIDF = velocityPIDF; + this.physicalCharacteristics = physicalCharacteristics; + this.name = name; + this.useCosineCompensator = useCosineCompensator; + } + + /** + * Construct a configuration object for swerve modules. Assumes the absolute encoder and drive + * motor are not inverted. + * + * @param driveMotor Drive {@link SwerveMotor}. + * @param angleMotor Angle {@link SwerveMotor} + * @param conversionFactors Conversion factors for angle/azimuth motors drive factors. + * @param absoluteEncoder Absolute encoder {@link SwerveAbsoluteEncoder}. + * @param angleOffset Absolute angle offset to 0. + * @param xMeters Module location in meters from the center horizontally. + * @param yMeters Module location in meters from center vertically. + * @param anglePIDF Angle PIDF configuration. + * @param velocityPIDF Velocity PIDF configuration. + * @param physicalCharacteristics Physical characteristics of the swerve module. + * @param name Name for the module. + * @param useCosineCompensator Should use cosineCompensation. + */ + public SwerveModuleConfiguration( + SwerveMotor driveMotor, + SwerveMotor angleMotor, + ConversionFactorsJson conversionFactors, + SwerveAbsoluteEncoder absoluteEncoder, + double angleOffset, + double xMeters, + double yMeters, + PIDFConfig anglePIDF, + PIDFConfig velocityPIDF, + SwerveModulePhysicalCharacteristics physicalCharacteristics, + String name, + boolean useCosineCompensator) { + this( + driveMotor, + angleMotor, + conversionFactors, + absoluteEncoder, + angleOffset, + xMeters, + yMeters, + anglePIDF, + velocityPIDF, + physicalCharacteristics, + false, + false, + false, + name, + useCosineCompensator); + } +} diff --git a/temp_yagsl/swervelib/parser/SwerveParser.java b/temp_yagsl/swervelib/parser/SwerveParser.java new file mode 100644 index 0000000..47ea5e2 --- /dev/null +++ b/temp_yagsl/swervelib/parser/SwerveParser.java @@ -0,0 +1,204 @@ +package swervelib.parser; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import edu.wpi.first.math.geometry.Pose2d; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import swervelib.SwerveDrive; +import swervelib.SwerveModule; +import swervelib.math.SwerveMath; +import swervelib.parser.json.ControllerPropertiesJson; +import swervelib.parser.json.ModuleJson; +import swervelib.parser.json.PIDFPropertiesJson; +import swervelib.parser.json.PhysicalPropertiesJson; +import swervelib.parser.json.SwerveDriveJson; + +/** + * Helper class used to parse the JSON directory with specified configuration options. + */ +public class SwerveParser +{ + + /** + * Module number mapped to the JSON name. + */ + private static final HashMap moduleConfigs = new HashMap<>(); + /** + * Parsed swervedrive.json + */ + public static SwerveDriveJson swerveDriveJson; + /** + * Parsed controllerproperties.json + */ + public static ControllerPropertiesJson controllerPropertiesJson; + /** + * Parsed modules/pidfproperties.json + */ + public static PIDFPropertiesJson pidfPropertiesJson; + /** + * Parsed modules/physicalproperties.json + */ + public static PhysicalPropertiesJson physicalPropertiesJson; + /** + * Array holding the module jsons given in {@link SwerveDriveJson}. + */ + public static ModuleJson[] moduleJsons; + + /** + * Construct a swerve parser. Will throw an error if there is a missing file. + * + * @param directory Directory with swerve configurations. + * @throws IOException if a file doesn't exist. + */ + public SwerveParser(File directory) throws IOException + { + checkDirectory(directory); + swerveDriveJson = + new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .readValue(new File(directory, "swervedrive.json"), SwerveDriveJson.class); + controllerPropertiesJson = + new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .readValue( + new File(directory, "controllerproperties.json"), ControllerPropertiesJson.class); + pidfPropertiesJson = + new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .readValue( + new File(directory, "modules/pidfproperties.json"), PIDFPropertiesJson.class); + physicalPropertiesJson = + new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .readValue( + new File(directory, "modules/physicalproperties.json"), + PhysicalPropertiesJson.class); + moduleJsons = new ModuleJson[swerveDriveJson.modules.length]; + for (int i = 0; i < moduleJsons.length; i++) + { + moduleConfigs.put(swerveDriveJson.modules[i], i); + File moduleFile = new File(directory, "modules/" + swerveDriveJson.modules[i]); + assert moduleFile.exists(); + moduleJsons[i] = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .readValue(moduleFile, ModuleJson.class); + } + } + + /** + * Get the swerve module by the json name. + * + * @param name JSON name. + * @param driveConfiguration {@link SwerveDriveConfiguration} to pull from. + * @return {@link SwerveModuleConfiguration} based on the file. + */ + public static SwerveModule getModuleConfigurationByName( + String name, SwerveDriveConfiguration driveConfiguration) + { + return driveConfiguration.modules[moduleConfigs.get(name + ".json")]; + } + + /** + * Open JSON file. + * + * @param file JSON File to open. + * @return JsonNode of file. + */ + private JsonNode openJson(File file) + { + try + { + return new ObjectMapper().readTree(file); + } catch (IOException e) + { + throw new RuntimeException(e); + } + } + + /** + * Check directory structure. + * + * @param directory JSON Configuration Directory + */ + private void checkDirectory(File directory) + { + assert new File(directory, "swervedrive.json").exists(); + assert new File(directory, "controllerproperties.json").exists(); + assert new File(directory, "modules").exists() && new File(directory, "modules").isDirectory(); + assert new File(directory, "modules/pidfproperties.json").exists(); + assert new File(directory, "modules/physicalproperties.json").exists(); + } + + /** + * Create {@link SwerveDrive} from JSON configuration directory. + * + * @param maxSpeed Maximum speed of the robot in meters per second, used for both angular acceleration used in + * {@link swervelib.SwerveController} and drive feedforward in + * {@link SwerveMath#createDriveFeedforward(double, double, double)}. + * @return {@link SwerveDrive} instance. + */ + public SwerveDrive createSwerveDrive(double maxSpeed) + { + return createSwerveDrive(maxSpeed, Pose2d.kZero); + } + + /** + * Create {@link SwerveDrive} from JSON configuration directory. + * + * @param maxSpeed Maximum speed of the robot in meters per second, used for both angular + * acceleration used in {@link swervelib.SwerveController} and drive feedforward in + * {@link SwerveMath#createDriveFeedforward(double, double, double)}. + * @param angleMotorConversionFactor Angle (AKA azimuth) motor conversion factor to convert motor controller PID loop + * units to degrees, usually created using + * {@link SwerveMath#calculateDegreesPerSteeringRotation(double, double)}. + * @param driveMotorConversion Drive motor conversion factor to convert motor controller PID loop units to + * meters per rotation, usually created using + * {@link SwerveMath#calculateMetersPerRotation(double, double, double)}. + * @return {@link SwerveDrive} instance. + */ + public SwerveDrive createSwerveDrive(double maxSpeed, double angleMotorConversionFactor, double driveMotorConversion) + { + physicalPropertiesJson.conversionFactors.angle.factor = angleMotorConversionFactor; + physicalPropertiesJson.conversionFactors.drive.factor = driveMotorConversion; + return createSwerveDrive(maxSpeed, Pose2d.kZero); + } + + /** + * Create {@link SwerveDrive} from JSON configuration directory. + * + * @param maxSpeed Maximum speed of the robot in meters per second for normal+angular acceleration in + * {@link swervelib.SwerveController} of the robot + * @param initialPose {@link Pose2d} initial pose. + * @return {@link SwerveDrive} instance. + */ + public SwerveDrive createSwerveDrive(double maxSpeed, Pose2d initialPose) + { + SwerveModuleConfiguration[] moduleConfigurations = + new SwerveModuleConfiguration[moduleJsons.length]; + for (int i = 0; i < moduleConfigurations.length; i++) + { + ModuleJson module = moduleJsons[i]; + moduleConfigurations[i] = + module.createModuleConfiguration( + pidfPropertiesJson.angle, + pidfPropertiesJson.drive, + physicalPropertiesJson.createPhysicalProperties(), + swerveDriveJson.modules[i]); + } + SwerveDriveConfiguration swerveDriveConfiguration = + new SwerveDriveConfiguration( + moduleConfigurations, + swerveDriveJson.imu.createIMU(), + swerveDriveJson.invertedIMU, + physicalPropertiesJson.createPhysicalProperties()); + + return new SwerveDrive( + swerveDriveConfiguration, + controllerPropertiesJson.createControllerConfiguration(swerveDriveConfiguration, maxSpeed), + maxSpeed, + initialPose); + } +} diff --git a/temp_yagsl/swervelib/parser/json/ModuleJson.java b/temp_yagsl/swervelib/parser/json/ModuleJson.java new file mode 100644 index 0000000..9d00c88 --- /dev/null +++ b/temp_yagsl/swervelib/parser/json/ModuleJson.java @@ -0,0 +1,141 @@ +package swervelib.parser.json; + +import com.revrobotics.spark.SparkMax; +import edu.wpi.first.math.util.Units; +import swervelib.encoders.SparkMaxEncoderSwerve; +import swervelib.encoders.SwerveAbsoluteEncoder; +import swervelib.encoders.ThriftyNovaEncoderSwerve; +import swervelib.motors.SwerveMotor; +import swervelib.motors.ThriftyNovaSwerve; +import swervelib.parser.PIDFConfig; +import swervelib.parser.SwerveModuleConfiguration; +import swervelib.parser.SwerveModulePhysicalCharacteristics; +import swervelib.parser.json.modules.BoolMotorJson; +import swervelib.parser.json.modules.ConversionFactorsJson; +import swervelib.parser.json.modules.LocationJson; + +/** + * {@link swervelib.SwerveModule} JSON parsed class. Used to access the JSON data. + */ +public class ModuleJson +{ + + /** + * Drive motor device configuration. + */ + public DeviceJson drive; + /** + * Angle motor device configuration. + */ + public DeviceJson angle; + /** + * Conversion Factors composition. Auto-calculates the conversion factors. + */ + public ConversionFactorsJson conversionFactors = new ConversionFactorsJson(); + /** + * Absolute encoder device configuration. + */ + public DeviceJson encoder; + /** + * Defines which motors are inverted. + */ + public BoolMotorJson inverted; + /** + * Absolute encoder offset from 0 in degrees. + */ + public double absoluteEncoderOffset; + /** + * Absolute encoder inversion state. + */ + public boolean absoluteEncoderInverted = false; + /** + * The location of the swerve module from the center of the robot in inches. + */ + public LocationJson location; + /** + * Should do cosine compensation when not pointing correct direction;. + */ + public boolean useCosineCompensator = true; + + /** + * Create the swerve module configuration based off of parsed data. + * + * @param anglePIDF The PIDF values for the angle motor. + * @param velocityPIDF The velocity PIDF values for the drive motor. + * @param physicalCharacteristics Physical characteristics of the swerve module. + * @param name Module json filename. + * @return {@link SwerveModuleConfiguration} based on the provided data and parsed data. + */ + public SwerveModuleConfiguration createModuleConfiguration( + PIDFConfig anglePIDF, + PIDFConfig velocityPIDF, + SwerveModulePhysicalCharacteristics physicalCharacteristics, + String name) + { + SwerveMotor angleMotor = angle.createMotor(false); + SwerveAbsoluteEncoder absEncoder = encoder.createEncoder(angleMotor); + + //Throw an error if module locations are improperly set + if (location.front == 0 && location.left == 0) + { + throw new RuntimeException("Improper Module Location Settings!\n" + + "Your module location is set to 0 for both 'front' and 'left' values.\n" + + "Set the distance from the center of the robot to the center of the wheel in your module JSON file!"); + } + + // Set the conversion factors to null if they are both 0. + if (!conversionFactors.works() && physicalCharacteristics.conversionFactor == null) + { + throw new RuntimeException("No Conversion Factor configured! Please create SwerveDrive using \n" + + "SwerveParser.createSwerveDrive(driveFeedforward, maxSpeed, angleMotorConversionFactor, driveMotorConversion)\n" + + "OR\n" + + "SwerveParser.createSwerveDrive(maxSpeed, angleMotorConversionFactor, driveMotorConversion)\n" + + "OR\n" + + "Set the conversion factor in physicalproperties.json OR the module JSON file." + + "REMEMBER: You can calculate the conversion factors using SwerveMath.calculateMetersPerRotation AND SwerveMath.calculateDegreesPerSteeringRotation\n"); + } else if (physicalCharacteristics.conversionFactor.works() && !conversionFactors.works()) + { + conversionFactors = physicalCharacteristics.conversionFactor; + } else if (physicalCharacteristics.conversionFactor.works()) + // If both are defined, override 0 with the physical characterstics input. + { + conversionFactors.angle = conversionFactors.isAngleEmpty() ? physicalCharacteristics.conversionFactor.angle + : conversionFactors.angle; + conversionFactors.drive = conversionFactors.isDriveEmpty() ? physicalCharacteristics.conversionFactor.drive + : conversionFactors.drive; + } + + if (conversionFactors.isDriveEmpty() || conversionFactors.isAngleEmpty()) + { + throw new RuntimeException( + "Conversion factors cannot be 0, please configure conversion factors in physicalproperties.json or the module JSON files."); + } + + // Backwards compatibility, auto-optimization. + if (conversionFactors.angle.factor == 360 && absEncoder != null && + (absEncoder instanceof SparkMaxEncoderSwerve && angleMotor.getMotor() instanceof SparkMax)) + { + angleMotor.setAbsoluteEncoder(absEncoder); + } else if ((absEncoder instanceof ThriftyNovaEncoderSwerve && angleMotor instanceof ThriftyNovaSwerve)) + { + angleMotor.setAbsoluteEncoder(absEncoder); + } + + return new SwerveModuleConfiguration( + drive.createMotor(true), + angleMotor, + conversionFactors, + absEncoder, + absoluteEncoderOffset, + Units.inchesToMeters(Math.round(location.front)), + Units.inchesToMeters(Math.round(location.left)), + anglePIDF, + velocityPIDF, + physicalCharacteristics, + absoluteEncoderInverted, + inverted.drive, + inverted.angle, + name.replaceAll("\\.json", ""), + useCosineCompensator); + } +} diff --git a/temp_yagsl/swervelib/parser/json/modules/AngleConversionFactorsJson.java b/temp_yagsl/swervelib/parser/json/modules/AngleConversionFactorsJson.java new file mode 100644 index 0000000..f946f66 --- /dev/null +++ b/temp_yagsl/swervelib/parser/json/modules/AngleConversionFactorsJson.java @@ -0,0 +1,27 @@ +package swervelib.parser.json.modules; + +import swervelib.math.SwerveMath; + +/** Angle motor conversion factors composite JSON parse class. */ +public class AngleConversionFactorsJson { + + /** + * Gear ratio for the angle/steering/azimuth motor on the Swerve Module. Motor rotations to 1 + * wheel rotation. + */ + public double gearRatio; + /** Calculated or given conversion factor. */ + public double factor = 0; + + /** + * Calculate the drive conversion factor. + * + * @return Drive conversion factor, if factor isn't set. + */ + public double calculate() { + if (factor == 0) { + factor = SwerveMath.calculateDegreesPerSteeringRotation(gearRatio); + } + return factor; + } +} diff --git a/temp_yagsl/swervelib/parser/json/modules/ConversionFactorsJson.java b/temp_yagsl/swervelib/parser/json/modules/ConversionFactorsJson.java new file mode 100644 index 0000000..8d69d3f --- /dev/null +++ b/temp_yagsl/swervelib/parser/json/modules/ConversionFactorsJson.java @@ -0,0 +1,40 @@ +package swervelib.parser.json.modules; + +/** Conversion Factors parsed JSON class */ +public class ConversionFactorsJson { + + /** Drive motor conversion factors composition. */ + public DriveConversionFactorsJson drive = new DriveConversionFactorsJson(); + /** Angle motor conversion factors composition. */ + public AngleConversionFactorsJson angle = new AngleConversionFactorsJson(); + + /** + * Check if the conversion factors are set for the drive motor. + * + * @return Empty + */ + public boolean isDriveEmpty() { + drive.calculate(); + return drive.factor == 0; + } + + /** + * Check if the conversion factors are set for the angle motor. + * + * @return Empty + */ + public boolean isAngleEmpty() { + angle.calculate(); + return angle.factor == 0; + } + + /** + * Check if the conversion factor can be found. + * + * @return If the conversion factors can be found. + */ + public boolean works() { + return (angle.factor != 0 && drive.factor != 0) + || ((drive.gearRatio != 0 && drive.diameter != 0)) && (angle.gearRatio != 0); + } +} diff --git a/temp_yagsl/swervelib/parser/json/modules/DriveConversionFactorsJson.java b/temp_yagsl/swervelib/parser/json/modules/DriveConversionFactorsJson.java new file mode 100644 index 0000000..55144f7 --- /dev/null +++ b/temp_yagsl/swervelib/parser/json/modules/DriveConversionFactorsJson.java @@ -0,0 +1,29 @@ +package swervelib.parser.json.modules; + +import edu.wpi.first.math.util.Units; +import swervelib.math.SwerveMath; + +/** Drive motor composite JSON parse class. */ +public class DriveConversionFactorsJson { + + /** Gear ratio for the drive motor rotations to turn the wheel 1 complete rotation. */ + public double gearRatio; + /** Diameter of the wheel in inches. */ + public double diameter; + /** Calculated conversion factor. */ + public double factor = 0; + + /** + * Calculate the drive conversion factor. + * + * @return Drive conversion factor, if factor isn't set. + */ + public double calculate() { + if (factor == 0) { + factor = + SwerveMath.calculateMetersPerRotation( + Units.inchesToMeters(this.diameter), this.gearRatio); + } + return factor; + } +} diff --git a/temp_yagsl/swervelib/parser/json/modules/LocationJson.java b/temp_yagsl/swervelib/parser/json/modules/LocationJson.java new file mode 100644 index 0000000..d795325 --- /dev/null +++ b/temp_yagsl/swervelib/parser/json/modules/LocationJson.java @@ -0,0 +1,14 @@ +package swervelib.parser.json.modules; + +/** + * Location JSON parsed class. Used to access the JSON data. Module locations, in inches, as + * distances to the center of the robot. +x is towards the robot front, and +y is towards robot + * left. + */ +public class LocationJson { + + /** Location of the swerve module in inches from the center of the robot horizontally. */ + public double front = 0; + /** Location of the swerve module in inches from the center of the robot vertically. */ + public double left = 0; +} diff --git a/temp_yagsl/swervelib/simulation/SwerveIMUSimulation.java b/temp_yagsl/swervelib/simulation/SwerveIMUSimulation.java new file mode 100644 index 0000000..aa92c7e --- /dev/null +++ b/temp_yagsl/swervelib/simulation/SwerveIMUSimulation.java @@ -0,0 +1,108 @@ +package swervelib.simulation; + +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Rotation3d; +import edu.wpi.first.math.geometry.Translation3d; +import edu.wpi.first.math.kinematics.SwerveDriveKinematics; +import edu.wpi.first.math.kinematics.SwerveModuleState; +import edu.wpi.first.wpilibj.smartdashboard.Field2d; +import java.util.Optional; +import org.ironmaple.simulation.drivesims.GyroSimulation; + +/** + * Simulation for {@link swervelib.SwerveDrive} IMU. + */ +public class SwerveIMUSimulation +{ + + private final GyroSimulation gyroSimulation; + + /** + * Create the swerve drive IMU simulation. + * + * @param gyroSimulation Gyro simulation from MapleSim. + */ + public SwerveIMUSimulation(GyroSimulation gyroSimulation) + { + this.gyroSimulation = gyroSimulation; + } + + /** + * Get the estimated angle of the robot. + * + * @return {@link Rotation2d} estimation of the robot. + */ + public Rotation2d getYaw() + { + return gyroSimulation.getGyroReading(); + } + + /** + * Pitch is not simulated currently, always returns 0. + * + * @return Pitch of the robot as {@link Rotation2d}. + */ + public Rotation2d getPitch() + { + return new Rotation2d(); + } + + /** + * Roll is not simulated currently, always returns 0. + * + * @return Roll of the robot as {@link Rotation2d}. + */ + public Rotation2d getRoll() + { + return new Rotation2d(); + } + + /** + * Gets the estimated gyro {@link Rotation3d} of the robot. + * + * @return The heading as a {@link Rotation3d} angle + */ + public Rotation3d getGyroRotation3d() + { + return new Rotation3d(0, 0, getYaw().getRadians()); + } + + /** + * Fetch the acceleration [x, y, z] from the IMU in m/s/s. If acceleration isn't supported returns empty. + * + * @return {@link Translation3d} of the acceleration as an {@link Optional}. + */ + public Optional getAccel() + { + return Optional.empty(); + } + + /** + * Update the odometry of the simulated {@link swervelib.SwerveDrive} and post the {@link swervelib.SwerveModule} + * states to the {@link Field2d}. + * + * @param kinematics {@link SwerveDriveKinematics} of the swerve drive. + * @param states {@link SwerveModuleState} array of the module states. + * @param modulePoses {@link Pose2d} representing the swerve modules. + * @param field {@link Field2d} to update. + */ + public void updateOdometry( + SwerveDriveKinematics kinematics, + SwerveModuleState[] states, + Pose2d[] modulePoses, + Field2d field) + { + field.getObject("XModules").setPoses(modulePoses); + } + + /** + * Set the heading of the robot. + * + * @param angle Angle of the robot in radians. + */ + public void setAngle(double angle) + { + this.gyroSimulation.setRotation(Rotation2d.fromRadians(angle)); + } +} diff --git a/temp_yagsl/swervelib/simulation/SwerveModuleSimulation.java b/temp_yagsl/swervelib/simulation/SwerveModuleSimulation.java new file mode 100644 index 0000000..41bc138 --- /dev/null +++ b/temp_yagsl/swervelib/simulation/SwerveModuleSimulation.java @@ -0,0 +1,100 @@ +package swervelib.simulation; + +import static edu.wpi.first.units.Units.Amps; + +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.kinematics.SwerveModulePosition; +import edu.wpi.first.math.kinematics.SwerveModuleState; +import org.ironmaple.simulation.drivesims.SelfControlledSwerveDriveSimulation; +import swervelib.SwerveDrive; +import swervelib.parser.SwerveModulePhysicalCharacteristics; + +/** + * Class that wraps around {@link org.ironmaple.simulation.drivesims.SwerveModuleSimulation} + */ +public class SwerveModuleSimulation +{ + + /** + * MapleSim module. + */ + public SelfControlledSwerveDriveSimulation.SelfControlledModuleSimulation mapleSimModule = null; + + /** + * Configure the maple sim module + * + * @param simModule the {@link org.ironmaple.simulation.drivesims.SwerveModuleSimulation} object for + * simulation + * @param physicalCharacteristics Physical characteristics of the swerve drive from the JSON or built. + */ + public void configureSimModule(org.ironmaple.simulation.drivesims.SwerveModuleSimulation simModule, + SwerveModulePhysicalCharacteristics physicalCharacteristics) + { + this.mapleSimModule = new SelfControlledSwerveDriveSimulation.SelfControlledModuleSimulation(simModule); + this.mapleSimModule.withCurrentLimits( + Amps.of(physicalCharacteristics.driveMotorCurrentLimit), + Amps.of(physicalCharacteristics.angleMotorCurrentLimit)); + } + + /** + * Update the position and state of the module. Called from {@link swervelib.SwerveModule#setDesiredState} function + * when simulated. + * + * @param desiredState State the swerve module is set to. + */ + public void updateStateAndPosition(SwerveModuleState desiredState) + { + mapleSimModule.runModuleState(desiredState); + } + + /** + * Runs a drive motor characterization on the sim module. This is called from + * {@link swervelib.SwerveDriveTest#runDriveMotorsCharacterizationOnSimModules(SwerveDrive, double, boolean)} to run + * sysId during simulation + * + * @param desiredFacing the desired facing of the module + * @param volts the voltage to run + */ + public void runDriveMotorCharacterization(Rotation2d desiredFacing, double volts) + { + mapleSimModule.runDriveMotorCharacterization(desiredFacing, volts); + } + + /** + * Runs a drive motor characterization on the sim module. This method is called from + * {@link swervelib.SwerveDriveTest#runAngleMotorsCharacterizationOnSimModules(SwerveDrive, double)} to run sysId + * during simulation + * + * @param volts the voltage to run + */ + public void runAngleMotorCharacterization(double volts) + { + mapleSimModule.runSteerMotorCharacterization(volts); + } + + /** + * Get the simulated swerve module position. + * + * @return {@link SwerveModulePosition} of the simulated module. + */ + public SwerveModulePosition getPosition() + { + return mapleSimModule.getModulePosition(); + } + + /** + * Get the {@link SwerveModuleState} of the simulated module. + * + * @return {@link SwerveModuleState} of the simulated module. + */ + public SwerveModuleState getState() + { + if (mapleSimModule == null) + { + return new SwerveModuleState(); + } + SwerveModuleState state = mapleSimModule.getMeasuredState(); + state.angle = state.angle.minus(Rotation2d.kZero); + return state; + } +} From cf86e3fcd74e3428cd3c9ce2dba9fdf76efa5d04 Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Thu, 12 Feb 2026 10:05:27 +0800 Subject: [PATCH 07/10] finally fixed occilation --- simgui-ds.json | 3 - src/main/java/frc/robot/Input.java | 91 +++++++++++++++++++ src/main/java/frc/robot/Robot.java | 2 +- src/main/java/frc/robot/RobotContainer.java | 53 ++++++++--- .../frc/robot/subsystems/DriveSubsystem.java | 8 +- 5 files changed, 135 insertions(+), 22 deletions(-) diff --git a/simgui-ds.json b/simgui-ds.json index 063e2ab..69b1a3c 100644 --- a/simgui-ds.json +++ b/simgui-ds.json @@ -90,9 +90,6 @@ } ], "robotJoysticks": [ - { - "guid": "78696e70757401000000000000000000" - }, { "guid": "Keyboard0" } diff --git a/src/main/java/frc/robot/Input.java b/src/main/java/frc/robot/Input.java index b9639ad..a27bba5 100644 --- a/src/main/java/frc/robot/Input.java +++ b/src/main/java/frc/robot/Input.java @@ -1,11 +1,46 @@ package frc.robot; import edu.wpi.first.wpilibj.XboxController; +import edu.wpi.first.wpilibj2.command.button.CommandGenericHID; +import edu.wpi.first.wpilibj.GenericHID; public class Input { public static final XboxController driveController = new XboxController(0); + // Keyboard control - port 2 (WPILib simulator keyboard shows up as a joystick) + private static final GenericHID keyboard = new GenericHID(2); + + // Toggle between controller and keyboard + private static boolean useKeyboard = false; + + /** + * Switch control mode between Xbox controller and keyboard + */ + public static void toggleControlMode() { + useKeyboard = !useKeyboard; + System.out.println("Control mode: " + (useKeyboard ? "KEYBOARD" : "XBOX CONTROLLER")); + } + + /** + * Set control mode explicitly + * @param keyboard true for keyboard, false for Xbox controller + */ + public static void setControlMode(boolean keyboard) { + useKeyboard = keyboard; + System.out.println("Control mode set to: " + (useKeyboard ? "KEYBOARD" : "XBOX CONTROLLER")); + } + + /** + * Check if keyboard mode is active + */ + public static boolean isKeyboardMode() { + return useKeyboard; + } + public static double getTranslationX() { + if (useKeyboard) { + return getKeyboardTranslationX(); + } return driveController.getLeftX(); } @@ -16,13 +51,69 @@ public static void testInput() { System.out.println("Translation X: " + translationX); System.out.println("Translation Y: " + translationY); } + // getting the information neccessary for driving the robot public static double getTranslationY() { + if (useKeyboard) { + return getKeyboardTranslationY(); + } double value = driveController.getLeftY(); return value; } public static double getRotation() { + if (useKeyboard) { + return getKeyboardRotation(); + } return driveController.getRightX(); } + + // Keyboard controls mapping + // WASD for translation, Q/E for rotation + private static double getKeyboardTranslationX() { + double x = 0; + if (keyboard.getRawButton(1)) { // A - strafe left + x -= 0.5; + } + if (keyboard.getRawButton(4)) { // D - strafe right + x += 0.5; + } + return x; + } + + private static double getKeyboardTranslationY() { + double y = 0; + if (keyboard.getRawButton(3)) { // W - forward + y += 0.5; + } + if (keyboard.getRawButton(2)) { // S - backward + y -= 0.5; + } + return y; + } + + private static double getKeyboardRotation() { + double rotation = 0; + if (keyboard.getRawButton(5)) { // Q - rotate left + rotation -= 0.4; + } + if (keyboard.getRawButton(6)) { // E - rotate right + rotation += 0.4; + } + return rotation; + } + + /** + * Get the keyboard HID for button binding + */ + public static GenericHID getKeyboard() { + return keyboard; + } + + /** + * Create a CommandGenericHID wrapper for the keyboard + */ + public static CommandGenericHID getCommandKeyboard() { + return new CommandGenericHID(2); + } } \ No newline at end of file diff --git a/src/main/java/frc/robot/Robot.java b/src/main/java/frc/robot/Robot.java index 0cb4c08..10c8a60 100644 --- a/src/main/java/frc/robot/Robot.java +++ b/src/main/java/frc/robot/Robot.java @@ -192,7 +192,7 @@ public void testInit() { // Auto-start the forward drive diagnostic if (robotInitialized && m_robotContainer != null && m_robotContainer.m_DriveSubsystem != null) { - m_robotContainer.m_DriveSubsystem.testDriveForwardCommand().schedule(); + CommandScheduler.getInstance().schedule(m_robotContainer.m_DriveSubsystem.testDriveForwardCommand()); System.out.println("[TEST] Auto-started testDriveForwardCommand"); } } diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 76db7c6..7dceadd 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -91,6 +91,17 @@ private void setupSmartDashboard() { // Alliance color selector SmartDashboard.putString("Alliance/Color", "Blue"); + // Control mode indicator + SmartDashboard.putString("Controls/Mode", "Xbox Controller"); + SmartDashboard.putData("Controls/Toggle to Keyboard", Commands.runOnce(() -> { + Input.setControlMode(true); + SmartDashboard.putString("Controls/Mode", "Keyboard (WASD+QE)"); + }).withName("UseKeyboard")); + SmartDashboard.putData("Controls/Toggle to Xbox", Commands.runOnce(() -> { + Input.setControlMode(false); + SmartDashboard.putString("Controls/Mode", "Xbox Controller"); + }).withName("UseXbox")); + // Field constants for debugging SmartDashboard.putNumber("Field/Length (m)", 17.54); SmartDashboard.putNumber("Field/Width (m)", 8.21); @@ -101,19 +112,28 @@ private void setupSmartDashboard() { SmartDashboard.putNumber("Field/Hub Rest X", FieldConstants.HUB_REST_POSITION.getX()); SmartDashboard.putNumber("Field/Hub Rest Y", FieldConstants.HUB_REST_POSITION.getY()); - // Control instructions - SmartDashboard.putString("Controls/Left Stick", "Move Robot"); - SmartDashboard.putString("Controls/Right Stick X", "Rotate Robot"); - SmartDashboard.putString("Controls/Right Bumper (R1)", "Increase Speed (+10%)"); - SmartDashboard.putString("Controls/Left Bumper (L1)", "Decrease Speed (-10%)"); - SmartDashboard.putString("Controls/Right Trigger", "Full Speed Mode"); - SmartDashboard.putString("Controls/Left Trigger", "Precision Mode"); - SmartDashboard.putString("Controls/A Button", "Test Auto"); - SmartDashboard.putString("Controls/B Button", "Reset to Blue Start"); - SmartDashboard.putString("Controls/X Button", "Reset to Red Start"); - SmartDashboard.putString("Controls/Y Button", "Reset to Center"); - SmartDashboard.putString("Controls/POV Down", "Reset Heading"); - SmartDashboard.putString("Controls/POV Up", "Zero Gyro & Sync Modules"); + // Control instructions - Xbox Controller + SmartDashboard.putString("Xbox/Left Stick", "Move Robot"); + SmartDashboard.putString("Xbox/Right Stick X", "Rotate Robot"); + SmartDashboard.putString("Xbox/Right Bumper (R1)", "Increase Speed (+10%)"); + SmartDashboard.putString("Xbox/Left Bumper (L1)", "Decrease Speed (-10%)"); + SmartDashboard.putString("Xbox/Right Trigger", "Full Speed Mode"); + SmartDashboard.putString("Xbox/Left Trigger", "Precision Mode"); + SmartDashboard.putString("Xbox/A Button", "Test Auto"); + SmartDashboard.putString("Xbox/B Button", "Reset to Blue Start"); + SmartDashboard.putString("Xbox/X Button", "Reset to Red Start"); + SmartDashboard.putString("Xbox/Y Button", "Reset to Center"); + SmartDashboard.putString("Xbox/POV Down", "Reset Heading"); + SmartDashboard.putString("Xbox/POV Up", "Zero Gyro & Sync Modules"); + + // Keyboard instructions + SmartDashboard.putString("Keyboard/W", "Forward"); + SmartDashboard.putString("Keyboard/S", "Backward"); + SmartDashboard.putString("Keyboard/A", "Strafe Left"); + SmartDashboard.putString("Keyboard/D", "Strafe Right"); + SmartDashboard.putString("Keyboard/Q", "Rotate Left"); + SmartDashboard.putString("Keyboard/E", "Rotate Right"); + SmartDashboard.putString("Keyboard/Spacebar", "Toggle Control Mode"); // Computer key (dashboard) to lock and rest near hub (only if DriveSubsystem available) if (m_DriveSubsystem != null) { @@ -176,6 +196,13 @@ private void configureBindings() { return; } + // Toggle control mode - Back button on Xbox or keyboard button + driverXbox.back().onTrue(Commands.runOnce(() -> { + Input.toggleControlMode(); + SmartDashboard.putString("Controls/Mode", Input.isKeyboardMode() ? "Keyboard (WASD+QE)" : "Xbox Controller"); + SmartDashboard.putString("Status/Last Action", "Toggled to " + (Input.isKeyboardMode() ? "Keyboard" : "Xbox")); + })); + // Speed control with bumpers driverXbox.rightBumper().onTrue(Commands.runOnce(() -> { SmartDashboard.putString("Status/Last Action", "Speed increased"); diff --git a/src/main/java/frc/robot/subsystems/DriveSubsystem.java b/src/main/java/frc/robot/subsystems/DriveSubsystem.java index 6cb0a79..f2e36aa 100644 --- a/src/main/java/frc/robot/subsystems/DriveSubsystem.java +++ b/src/main/java/frc/robot/subsystems/DriveSubsystem.java @@ -20,7 +20,6 @@ import com.pathplanner.lib.config.PIDConstants; import com.pathplanner.lib.config.RobotConfig; import com.pathplanner.lib.controllers.PPHolonomicDriveController; -import edu.wpi.first.wpilibj.DriverStation; @SuppressWarnings("unused") @@ -248,7 +247,6 @@ private double applyRotationDeadzone(double value) { double sign = Math.signum(value); return sign * ((absValue - ROTATION_DEADZONE) / (1.0 - ROTATION_DEADZONE)); } - @SuppressWarnings("unused") private ChassisSpeeds limitSpeeds(ChassisSpeeds speeds) { double linearMagnitude = Math.hypot(speeds.vxMetersPerSecond, speeds.vyMetersPerSecond); double angularMagnitude = Math.abs(speeds.omegaRadiansPerSecond); @@ -342,10 +340,10 @@ public Command testDriveForwardCommand() { SmartDashboard.putNumber("Diag/" + names[i] + "/AngleError", desiredStates[i].angle.getDegrees() - actual.angle.getDegrees()); - // Also log maple-sim direct state if available + // Also log maple-sim direct state if available (via YAGSL sim wrapper) var simMod = modules[i].getSimModule(); - if (simMod != null && simMod.mapleSimModule != null) { - var simState = simMod.mapleSimModule.getMeasuredState(); + if (simMod != null) { + var simState = simMod.getState(); SmartDashboard.putNumber("Diag/" + names[i] + "/SimAngle", simState.angle.getDegrees()); SmartDashboard.putNumber("Diag/" + names[i] + "/SimSpeed", simState.speedMetersPerSecond); } From 0b78cffc930083fbdf5c71c96a029cdb7e957915 Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Thu, 12 Feb 2026 11:34:04 +0800 Subject: [PATCH 08/10] see if I commited everything --- src/main/java/frc/robot/RobotContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 7dceadd..fbdc0d5 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -30,7 +30,7 @@ import frc.robot.subsystems.DriveSubsystem; import frc.robot.subsystems.LimelightVision; import com.pathplanner.lib.auto.AutoBuilder; - +@SuppressWarnings("unused") // Many commands and constants are defined but not used yet as we build out functionality incrementally public class RobotContainer { public DriveSubsystem m_DriveSubsystem; // Not final - may fail to initialize From aa442875a2829aa78388b63a60b16a8497c87efa Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Wed, 25 Feb 2026 01:15:49 +0800 Subject: [PATCH 09/10] added AutoPath.java --- simgui-ds.json | 9 +- src/main/java/frc/robot/Input.java | 136 +++++++----------- src/main/java/frc/robot/RobotContainer.java | 24 ++-- .../frc/robot/commands/auto/AutoPathes.java | 47 ++++++ .../frc/robot/subsystems/LimelightVision.java | 3 +- .../AbstractDriveTrainSimulation.java | 2 +- 6 files changed, 117 insertions(+), 104 deletions(-) create mode 100644 src/main/java/frc/robot/commands/auto/AutoPathes.java diff --git a/simgui-ds.json b/simgui-ds.json index 69b1a3c..2c50070 100644 --- a/simgui-ds.json +++ b/simgui-ds.json @@ -12,7 +12,6 @@ }, { "decKey": 69, - "decayRate": 0.0, "incKey": 82, "keyRate": 0.009999999776482582 } @@ -78,8 +77,8 @@ 268, 266, 261, - 269, - 267 + 81, + 70 ], "povCount": 0 }, @@ -92,6 +91,10 @@ "robotJoysticks": [ { "guid": "Keyboard0" + }, + {}, + { + "guid": "Keyboard2" } ] } diff --git a/src/main/java/frc/robot/Input.java b/src/main/java/frc/robot/Input.java index a27bba5..ce87568 100644 --- a/src/main/java/frc/robot/Input.java +++ b/src/main/java/frc/robot/Input.java @@ -7,111 +7,83 @@ public class Input { public static final XboxController driveController = new XboxController(0); - // Keyboard control - port 2 (WPILib simulator keyboard shows up as a joystick) - private static final GenericHID keyboard = new GenericHID(2); + // Keyboard0 on robot port 0: WASD = axes 0,1 (translation) + // Keyboard2 on robot port 2: Arrow keys = axes 0,1 (translation), Q/F = axis 2 (rotation) + private static final GenericHID kb0 = new GenericHID(0); // Keyboard0 = WASD + private static final GenericHID kb2 = new GenericHID(2); // Keyboard2 = Arrows + Q/F - // Toggle between controller and keyboard - private static boolean useKeyboard = false; + // Deadband + private static final double DEADBAND = 0.05; /** - * Switch control mode between Xbox controller and keyboard + * Translation X (strafe): + * Keyboard0 axis 0 (A/D keys) OR Keyboard2 axis 0 (Left/Right arrows) + * Uses whichever has larger absolute value. */ - public static void toggleControlMode() { - useKeyboard = !useKeyboard; - System.out.println("Control mode: " + (useKeyboard ? "KEYBOARD" : "XBOX CONTROLLER")); - } - - /** - * Set control mode explicitly - * @param keyboard true for keyboard, false for Xbox controller - */ - public static void setControlMode(boolean keyboard) { - useKeyboard = keyboard; - System.out.println("Control mode set to: " + (useKeyboard ? "KEYBOARD" : "XBOX CONTROLLER")); - } - - /** - * Check if keyboard mode is active - */ - public static boolean isKeyboardMode() { - return useKeyboard; - } - public static double getTranslationX() { - if (useKeyboard) { - return getKeyboardTranslationX(); - } - return driveController.getLeftX(); + double wasd = kb0.getRawAxis(0); + double arrows = kb2.getRawAxis(0); + + if (Math.abs(wasd) < DEADBAND) wasd = 0; + if (Math.abs(arrows) < DEADBAND) arrows = 0; + + return (Math.abs(arrows) > Math.abs(wasd)) ? arrows : wasd; } - public static void testInput() { - // Example usage of getTranslationX and getTranslationY to remove the unused method warning - double translationX = getTranslationX(); - double translationY = getTranslationY(); - System.out.println("Translation X: " + translationX); - System.out.println("Translation Y: " + translationY); - } - - // getting the information neccessary for driving the robot + /** + * Translation Y (forward/back): + * Keyboard0 axis 1 (W/S keys) OR Keyboard2 axis 1 (Up/Down arrows) + * Uses whichever has larger absolute value. + */ public static double getTranslationY() { - if (useKeyboard) { - return getKeyboardTranslationY(); - } - double value = driveController.getLeftY(); - return value; + double wasd = kb0.getRawAxis(1); + double arrows = kb2.getRawAxis(1); + + if (Math.abs(wasd) < DEADBAND) wasd = 0; + if (Math.abs(arrows) < DEADBAND) arrows = 0; + + return (Math.abs(arrows) > Math.abs(wasd)) ? arrows : wasd; } + /** + * Rotation: + * Keyboard2 button 5 (Q = rotate left), button 6 (F = rotate right) + * These are momentary buttons - only active while held down. + * Also checks Xbox right stick (kb0 axis 4) if a real controller is connected. + */ public static double getRotation() { - if (useKeyboard) { - return getKeyboardRotation(); - } - return driveController.getRightX(); - } - - // Keyboard controls mapping - // WASD for translation, Q/E for rotation - private static double getKeyboardTranslationX() { - double x = 0; - if (keyboard.getRawButton(1)) { // A - strafe left - x -= 0.5; + // Xbox right stick (if real controller plugged in) + double xboxRot = kb0.getRawAxis(4); + if (Math.abs(xboxRot) < DEADBAND) xboxRot = 0; + + // Keyboard rotation via buttons (momentary, no latching) + double keyRot = 0; + if (kb2.getRawButton(5)) { // Q key - rotate left + keyRot -= 1.0; } - if (keyboard.getRawButton(4)) { // D - strafe right - x += 0.5; + if (kb2.getRawButton(6)) { // F key - rotate right + keyRot += 1.0; } - return x; + + return (Math.abs(keyRot) > Math.abs(xboxRot)) ? keyRot : xboxRot; } - - private static double getKeyboardTranslationY() { - double y = 0; - if (keyboard.getRawButton(3)) { // W - forward - y += 0.5; - } - if (keyboard.getRawButton(2)) { // S - backward - y -= 0.5; - } - return y; - } - - private static double getKeyboardRotation() { - double rotation = 0; - if (keyboard.getRawButton(5)) { // Q - rotate left - rotation -= 0.4; - } - if (keyboard.getRawButton(6)) { // E - rotate right - rotation += 0.4; - } - return rotation; + + public static void testInput() { + System.out.printf("X: %.2f Y: %.2f Rot: %.2f (kb0: %.2f/%.2f kb2: %.2f/%.2f/%.2f)%n", + getTranslationX(), getTranslationY(), getRotation(), + kb0.getRawAxis(0), kb0.getRawAxis(1), + kb2.getRawAxis(0), kb2.getRawAxis(1), kb2.getRawAxis(2)); } /** * Get the keyboard HID for button binding */ public static GenericHID getKeyboard() { - return keyboard; + return kb2; } /** - * Create a CommandGenericHID wrapper for the keyboard + * Create a CommandGenericHID wrapper for Keyboard2 */ public static CommandGenericHID getCommandKeyboard() { return new CommandGenericHID(2); diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index fbdc0d5..8f4b3eb 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -17,6 +17,7 @@ import frc.robot.Constants.FieldConstants; import frc.robot.commands.Autos; import frc.robot.commands.auto.AutoAlgaeAuto; +import frc.robot.commands.auto.AutoPathes; import frc.robot.commands.auto.AutoAvoidCollision; import frc.robot.commands.auto.AutoBalance; import frc.robot.commands.auto.AutoComplexPath; @@ -92,15 +93,7 @@ private void setupSmartDashboard() { SmartDashboard.putString("Alliance/Color", "Blue"); // Control mode indicator - SmartDashboard.putString("Controls/Mode", "Xbox Controller"); - SmartDashboard.putData("Controls/Toggle to Keyboard", Commands.runOnce(() -> { - Input.setControlMode(true); - SmartDashboard.putString("Controls/Mode", "Keyboard (WASD+QE)"); - }).withName("UseKeyboard")); - SmartDashboard.putData("Controls/Toggle to Xbox", Commands.runOnce(() -> { - Input.setControlMode(false); - SmartDashboard.putString("Controls/Mode", "Xbox Controller"); - }).withName("UseXbox")); + SmartDashboard.putString("Controls/Mode", "Keyboard: Arrows+QE | Xbox: Sticks (both work)"); // Field constants for debugging SmartDashboard.putNumber("Field/Length (m)", 17.54); @@ -169,6 +162,7 @@ private void setupAutonomousChooser() { autoChooser.addOption("Balance", new AutoBalance(m_DriveSubsystem)); autoChooser.addOption("Pickup Cycles", new AutoPickupAuto(m_DriveSubsystem)); autoChooser.addOption("Figure 8 Pattern", new AutoFigure8(m_DriveSubsystem)); + autoChooser.addOption("Auto Pathes (PathPlanner)", new AutoPathes(m_DriveSubsystem)); } else { DriverStation.reportWarning("DriveSubsystem not initialized - limited autonomous options available", false); } @@ -181,9 +175,9 @@ private void configureDefaultCommand() { if (m_DriveSubsystem != null) { m_DriveSubsystem.setDefaultCommand( m_DriveSubsystem.driveCommand( - () -> -driverXbox.getLeftY(), - () -> -driverXbox.getLeftX(), - () -> -driverXbox.getRightX() * DriveConstants.ROTATION_SCALE + () -> -Input.getTranslationY(), + () -> -Input.getTranslationX(), + () -> -Input.getRotation() * DriveConstants.ROTATION_SCALE ).withName("DefaultDrive") ); } @@ -196,11 +190,9 @@ private void configureBindings() { return; } - // Toggle control mode - Back button on Xbox or keyboard button + // Back button - reserved for future use driverXbox.back().onTrue(Commands.runOnce(() -> { - Input.toggleControlMode(); - SmartDashboard.putString("Controls/Mode", Input.isKeyboardMode() ? "Keyboard (WASD+QE)" : "Xbox Controller"); - SmartDashboard.putString("Status/Last Action", "Toggled to " + (Input.isKeyboardMode() ? "Keyboard" : "Xbox")); + SmartDashboard.putString("Status/Last Action", "Back button pressed"); })); // Speed control with bumpers diff --git a/src/main/java/frc/robot/commands/auto/AutoPathes.java b/src/main/java/frc/robot/commands/auto/AutoPathes.java new file mode 100644 index 0000000..b74a0d3 --- /dev/null +++ b/src/main/java/frc/robot/commands/auto/AutoPathes.java @@ -0,0 +1,47 @@ +package frc.robot.commands.auto; + +import com.pathplanner.lib.auto.AutoBuilder; +import com.pathplanner.lib.path.PathPlannerPath; + +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.Commands; +import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; +import frc.robot.subsystems.DriveSubsystem; + +public class AutoPathes extends SequentialCommandGroup{ + public AutoPathes(DriveSubsystem drive){ + addCommands( + Commands.runOnce(() -> { + System.out.println("\n========== AUTO PATHES =========="); + System.out.println("Following PathPlanner 'ExamplePath'"); + System.out.println("End Position: (1.141, 3.867)"); + System.out.println("End Heading: 176.644°"); + System.out.println("========================================\n"); + }), + Commands.runOnce(() -> drive.stop()), + Commands.waitSeconds(0.2), + Commands.runOnce(() -> System.out.println("[AutoPathes] Starting path following...")), + getPathCommand(), + + Commands.runOnce(() -> { + drive.stop(); + drive.lock(); + System.out.println("[AutoPathes] Path following complete. Robot stopped and locked."); + }), + Commands.run(() -> drive.stop(), drive).withName("HoldPosition") + + ); + + } + private Command getPathCommand(){ + try { + PathPlannerPath path = PathPlannerPath.fromPathFile("ExamplePath"); + return AutoBuilder.followPath(path); + } catch (Exception e) { + System.err.println("[ExamplePath] ERROR: Could not load path file!"); + System.err.println(" Make sure 'ExamplePath.path' exists in deploy/pathplanner/paths/"); + e.printStackTrace(); + return Commands.none(); + } + } +} \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/LimelightVision.java b/src/main/java/frc/robot/subsystems/LimelightVision.java index 731097f..a9e3035 100644 --- a/src/main/java/frc/robot/subsystems/LimelightVision.java +++ b/src/main/java/frc/robot/subsystems/LimelightVision.java @@ -59,8 +59,7 @@ public LimelightVision() { /** * Create a LimelightVision with a custom NetworkTable name. * @param tableName The name of the Limelight's NetworkTable (e.g., "limelight", "limelight-front") - */ - public LimelightVision(String tableName) { + */ public LimelightVision(String tableName) { limelightTable = NetworkTableInstance.getDefault().getTable(tableName); // Get entries with null safety diff --git a/temp_yagsl/org/ironmaple/simulation/drivesims/AbstractDriveTrainSimulation.java b/temp_yagsl/org/ironmaple/simulation/drivesims/AbstractDriveTrainSimulation.java index c3109b2..451442f 100644 --- a/temp_yagsl/org/ironmaple/simulation/drivesims/AbstractDriveTrainSimulation.java +++ b/temp_yagsl/org/ironmaple/simulation/drivesims/AbstractDriveTrainSimulation.java @@ -11,7 +11,7 @@ import org.ironmaple.simulation.drivesims.configs.DriveTrainSimulationConfig; import org.ironmaple.utils.mathutils.GeometryConvertor; -/** +/**p * * *

Represents an Abstract Drivetrain Simulation.

From 4af5cf7ffb2673f49c2e2ca31137e88932417395 Mon Sep 17 00:00:00 2001 From: 1TimTian <237118956+1TimTian@users.noreply.github.com> Date: Sat, 28 Feb 2026 04:54:17 +0800 Subject: [PATCH 10/10] sldkjsdlfkjsaflasjfalkfjsf --- .vscode/launch.json | 2 + src/main/java/frc/robot/Constants.java | 6 + src/main/java/frc/robot/Input.java | 96 ++++++------- src/main/java/frc/robot/Robot.java | 3 - src/main/java/frc/robot/RobotContainer.java | 129 +++++++++++++----- .../frc/robot/commands/auto/AutoPathes.java | 103 +++++++++++--- .../frc/robot/subsystems/DriveSubsystem.java | 100 ++++++++++++-- 7 files changed, 315 insertions(+), 124 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index c9c9713..9ce8380 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,8 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + + { "type": "wpilib", diff --git a/src/main/java/frc/robot/Constants.java b/src/main/java/frc/robot/Constants.java index a68d55a..f210a69 100644 --- a/src/main/java/frc/robot/Constants.java +++ b/src/main/java/frc/robot/Constants.java @@ -20,6 +20,12 @@ public static final class DriveConstants { public static final double PRECISION_MULTIPLIER = 0.3; public static final double PRECISION_ROTATION_SCALE = 0.3; + // Speed multiplier bounds for bumper-based speed control + public static final double MIN_SPEED_MULTIPLIER = 0.2; + public static final double MAX_SPEED_MULTIPLIER = 1.0; + public static final double SPEED_MULTIPLIER_STEP = 0.1; + public static final double DEFAULT_SPEED_MULTIPLIER = 0.7; + // Auto constants public static final double AUTO_MAX_SPEED_MPS = 4.0; public static final double AUTO_POSITION_TOLERANCE_M = 0.20; diff --git a/src/main/java/frc/robot/Input.java b/src/main/java/frc/robot/Input.java index ce87568..5cb15df 100644 --- a/src/main/java/frc/robot/Input.java +++ b/src/main/java/frc/robot/Input.java @@ -1,91 +1,73 @@ package frc.robot; -import edu.wpi.first.wpilibj.XboxController; import edu.wpi.first.wpilibj2.command.button.CommandGenericHID; import edu.wpi.first.wpilibj.GenericHID; public class Input { - public static final XboxController driveController = new XboxController(0); - - // Keyboard0 on robot port 0: WASD = axes 0,1 (translation) - // Keyboard2 on robot port 2: Arrow keys = axes 0,1 (translation), Q/F = axis 2 (rotation) - private static final GenericHID kb0 = new GenericHID(0); // Keyboard0 = WASD - private static final GenericHID kb2 = new GenericHID(2); // Keyboard2 = Arrows + Q/F - - // Deadband - private static final double DEADBAND = 0.05; - + // Keyboard0 on robot port 0: WASD keys + E/R rotation + // axis 0 = A (dec) / D (inc) — strafe left/right + // axis 1 = W (dec) / S (inc) — forward/back + // axis 2 = E (dec) / R (inc) — rotation (slow ramp, keyRate 0.01) + // Keyboard2 on robot port 2: Arrow keys + Q/F buttons + // axis 0 = Left (dec) / Right (inc) — strafe left/right + // axis 1 = Up (dec) / Down (inc) — forward/back + // button 5 = Q (rotate left), button 6 = F (rotate right) + private static final GenericHID kb0 = new GenericHID(0); + private static final GenericHID kb2 = new GenericHID(2); + /** - * Translation X (strafe): - * Keyboard0 axis 0 (A/D keys) OR Keyboard2 axis 0 (Left/Right arrows) - * Uses whichever has larger absolute value. + * Translation X (strafe left/right). + * Returns the larger-magnitude value between WASD (A/D) and arrow keys. */ public static double getTranslationX() { - double wasd = kb0.getRawAxis(0); + double wasd = kb0.getRawAxis(0); double arrows = kb2.getRawAxis(0); - - if (Math.abs(wasd) < DEADBAND) wasd = 0; - if (Math.abs(arrows) < DEADBAND) arrows = 0; - return (Math.abs(arrows) > Math.abs(wasd)) ? arrows : wasd; } /** - * Translation Y (forward/back): - * Keyboard0 axis 1 (W/S keys) OR Keyboard2 axis 1 (Up/Down arrows) - * Uses whichever has larger absolute value. + * Translation Y (forward/back). + * Returns the larger-magnitude value between WASD (W/S) and arrow keys. */ public static double getTranslationY() { - double wasd = kb0.getRawAxis(1); + double wasd = kb0.getRawAxis(1); double arrows = kb2.getRawAxis(1); - - if (Math.abs(wasd) < DEADBAND) wasd = 0; - if (Math.abs(arrows) < DEADBAND) arrows = 0; - return (Math.abs(arrows) > Math.abs(wasd)) ? arrows : wasd; } /** - * Rotation: - * Keyboard2 button 5 (Q = rotate left), button 6 (F = rotate right) - * These are momentary buttons - only active while held down. - * Also checks Xbox right stick (kb0 axis 4) if a real controller is connected. + * Rotation. + * Sources (picks whichever has the largest magnitude): + * - Keyboard0 axis 2: E (dec = left) / R (inc = right) — smooth ramp via keyRate + * - Keyboard2 button 5 (Q) = rotate left (-1.0), button 6 (F) = rotate right (+1.0) */ public static double getRotation() { - // Xbox right stick (if real controller plugged in) - double xboxRot = kb0.getRawAxis(4); - if (Math.abs(xboxRot) < DEADBAND) xboxRot = 0; - - // Keyboard rotation via buttons (momentary, no latching) - double keyRot = 0; - if (kb2.getRawButton(5)) { // Q key - rotate left - keyRot -= 1.0; - } - if (kb2.getRawButton(6)) { // F key - rotate right - keyRot += 1.0; - } - - return (Math.abs(keyRot) > Math.abs(xboxRot)) ? keyRot : xboxRot; + // E/R keys on Keyboard0 (axis 2) — smooth ramp rotation + double erRot = kb0.getRawAxis(2); + + // Q/F keys on Keyboard2 (buttons) — instant full rotation + double qfRot = 0; + if (kb2.getRawButton(5)) qfRot -= 1.0; // Q = rotate left (CCW) + if (kb2.getRawButton(6)) qfRot += 1.0; // F = rotate right (CW) + + return (Math.abs(qfRot) > Math.abs(erRot)) ? qfRot : erRot; } public static void testInput() { - System.out.printf("X: %.2f Y: %.2f Rot: %.2f (kb0: %.2f/%.2f kb2: %.2f/%.2f/%.2f)%n", + System.out.printf("X: %.2f Y: %.2f Rot: %.2f (kb0: %.2f/%.2f/%.2f kb2: %.2f/%.2f Q:%b F:%b)%n", getTranslationX(), getTranslationY(), getRotation(), - kb0.getRawAxis(0), kb0.getRawAxis(1), - kb2.getRawAxis(0), kb2.getRawAxis(1), kb2.getRawAxis(2)); + kb0.getRawAxis(0), kb0.getRawAxis(1), kb0.getRawAxis(2), + kb2.getRawAxis(0), kb2.getRawAxis(1), + kb2.getRawButton(5), kb2.getRawButton(6)); } - - /** - * Get the keyboard HID for button binding - */ + + /** Get the Keyboard2 HID for button binding */ public static GenericHID getKeyboard() { return kb2; } - - /** - * Create a CommandGenericHID wrapper for Keyboard2 - */ + + /** Create a CommandGenericHID wrapper for Keyboard2 */ public static CommandGenericHID getCommandKeyboard() { return new CommandGenericHID(2); } -} \ No newline at end of file +} diff --git a/src/main/java/frc/robot/Robot.java b/src/main/java/frc/robot/Robot.java index 10c8a60..3afb9b0 100644 --- a/src/main/java/frc/robot/Robot.java +++ b/src/main/java/frc/robot/Robot.java @@ -92,9 +92,6 @@ public void autonomousInit() { } try { - // Small delay to ensure systems are ready - Thread.sleep(100); - // Log position BEFORE getting autonomous command (only if DriveSubsystem available) if (m_robotContainer.m_DriveSubsystem != null) { Pose2d prePose = m_robotContainer.m_DriveSubsystem.getPose(); diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 8f4b3eb..0b690c6 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -3,6 +3,7 @@ import java.io.File; import java.util.Set; +import edu.wpi.first.math.geometry.Pose2d; import edu.wpi.first.wpilibj.DriverStation; import edu.wpi.first.wpilibj.Filesystem; import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; @@ -50,11 +51,12 @@ public RobotContainer() { m_DriveSubsystem = new DriveSubsystem(new File(Filesystem.getDeployDirectory(), "SWERVE")); System.out.println("[RobotContainer] DriveSubsystem initialized successfully"); - // Set initial robot position - START AT BLUE ALLIANCE - m_DriveSubsystem.resetOdometry(FieldConstants.BLUE_ALLIANCE_START); - System.out.println("[RobotContainer] Robot initialized at Blue Alliance start: (" + - String.format("%.2f, %.2f", FieldConstants.BLUE_ALLIANCE_START.getX(), - FieldConstants.BLUE_ALLIANCE_START.getY()) + ")"); + // Set initial robot position based on alliance reported by Driver Station + Pose2d startPose = getAllianceStartPose(); + m_DriveSubsystem.resetOdometry(startPose); + System.out.println("[RobotContainer] Robot initialized at " + + (isRedAlliance() ? "Red" : "Blue") + " Alliance start: (" + + String.format("%.2f, %.2f", startPose.getX(), startPose.getY()) + ")"); } catch (Exception e) { DriverStation.reportError("DriveSubsystem initialization failed: " + e.getMessage(), e.getStackTrace()); System.err.println("[RobotContainer] CRITICAL: DriveSubsystem failed to initialize - robot will run in limited mode"); @@ -124,9 +126,11 @@ private void setupSmartDashboard() { SmartDashboard.putString("Keyboard/S", "Backward"); SmartDashboard.putString("Keyboard/A", "Strafe Left"); SmartDashboard.putString("Keyboard/D", "Strafe Right"); - SmartDashboard.putString("Keyboard/Q", "Rotate Left"); - SmartDashboard.putString("Keyboard/E", "Rotate Right"); - SmartDashboard.putString("Keyboard/Spacebar", "Toggle Control Mode"); + SmartDashboard.putString("Keyboard/Q", "Rotate Left (instant)"); + SmartDashboard.putString("Keyboard/F", "Rotate Right (instant)"); + SmartDashboard.putString("Keyboard/E", "Rotate Left (smooth)"); + SmartDashboard.putString("Keyboard/R", "Rotate Right (smooth)"); + SmartDashboard.putString("Keyboard/Arrows", "Alternative WASD"); // Computer key (dashboard) to lock and rest near hub (only if DriveSubsystem available) if (m_DriveSubsystem != null) { @@ -145,24 +149,38 @@ private void setupAutonomousChooser() { autoChooser = AutoBuilder.buildAutoChooser(); System.out.println("[RobotContainer] PathPlanner AutoBuilder chooser configured"); } else { - // Fallback: manual auto chooser + // Fallback: manual auto chooser using deferred commands (so they can be re-run) autoChooser = new SendableChooser<>(); autoChooser.setDefaultOption("Do Nothing", Autos.doNothingAuto()); if (m_DriveSubsystem != null) { - autoChooser.addOption("Drive Forward", Autos.driveForwardAuto(m_DriveSubsystem)); - autoChooser.addOption("Simple (Reef)", new SimpleAuto(m_DriveSubsystem)); - autoChooser.addOption("Safe Score (1 piece)", new AutoSafeScore(m_DriveSubsystem)); - autoChooser.addOption("Sequential (2 pieces)", new SequentialAuto(m_DriveSubsystem)); - autoChooser.addOption("Triple Score (3 pieces)", new AutoTripleScore(m_DriveSubsystem)); - autoChooser.addOption("Avoid Collision", new AutoAvoidCollision(m_DriveSubsystem)); - autoChooser.addOption("Algae Removal", new AutoAlgaeAuto(m_DriveSubsystem)); - autoChooser.addOption("Processor Scoring", new AutoProcessorAuto(m_DriveSubsystem)); - autoChooser.addOption("Complex Path", new AutoComplexPath(m_DriveSubsystem)); - autoChooser.addOption("Balance", new AutoBalance(m_DriveSubsystem)); - autoChooser.addOption("Pickup Cycles", new AutoPickupAuto(m_DriveSubsystem)); - autoChooser.addOption("Figure 8 Pattern", new AutoFigure8(m_DriveSubsystem)); - autoChooser.addOption("Auto Pathes (PathPlanner)", new AutoPathes(m_DriveSubsystem)); + Set driveReqs = Set.of(m_DriveSubsystem); + autoChooser.addOption("Drive Forward", + Commands.defer(() -> Autos.driveForwardAuto(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Simple (Reef)", + Commands.defer(() -> new SimpleAuto(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Safe Score (1 piece)", + Commands.defer(() -> new AutoSafeScore(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Sequential (2 pieces)", + Commands.defer(() -> new SequentialAuto(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Triple Score (3 pieces)", + Commands.defer(() -> new AutoTripleScore(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Avoid Collision", + Commands.defer(() -> new AutoAvoidCollision(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Algae Removal", + Commands.defer(() -> new AutoAlgaeAuto(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Processor Scoring", + Commands.defer(() -> new AutoProcessorAuto(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Complex Path", + Commands.defer(() -> new AutoComplexPath(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Balance", + Commands.defer(() -> new AutoBalance(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Pickup Cycles", + Commands.defer(() -> new AutoPickupAuto(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Figure 8 Pattern", + Commands.defer(() -> new AutoFigure8(m_DriveSubsystem), driveReqs)); + autoChooser.addOption("Auto Pathes (PathPlanner)", + Commands.defer(() -> new AutoPathes(m_DriveSubsystem), driveReqs)); } else { DriverStation.reportWarning("DriveSubsystem not initialized - limited autonomous options available", false); } @@ -175,9 +193,27 @@ private void configureDefaultCommand() { if (m_DriveSubsystem != null) { m_DriveSubsystem.setDefaultCommand( m_DriveSubsystem.driveCommand( - () -> -Input.getTranslationY(), - () -> -Input.getTranslationX(), - () -> -Input.getRotation() * DriveConstants.ROTATION_SCALE + // Forward/back: W/S keys (sim) or Xbox left stick Y (real robot) — pick larger magnitude + () -> { + double kb = -Input.getTranslationY(); + double xbox = -driverXbox.getLeftY(); + return (Math.abs(kb) > Math.abs(xbox)) ? kb : xbox; + }, + // Strafe: A/D keys (sim) or Xbox left stick X (real robot) + () -> { + double kb = -Input.getTranslationX(); + double xbox = -driverXbox.getLeftX(); + return (Math.abs(kb) > Math.abs(xbox)) ? kb : xbox; + }, + // Rotation: E/R axis + Q/F buttons (sim) or Xbox right stick X (real robot) + // Keyboard gives 0 or ±1 (buttons) or slow ramp (axis), so don't pre-scale here. + // DriveSubsystem.driveCommand applies cube scaling internally, which is enough. + // Only apply ROTATION_SCALE to Xbox stick (which is analog and needs dampening). + () -> { + double kb = -Input.getRotation(); + double xbox = -driverXbox.getRightX() * DriveConstants.ROTATION_SCALE; + return (Math.abs(kb) > Math.abs(xbox)) ? kb : xbox; + } ).withName("DefaultDrive") ); } @@ -190,17 +226,25 @@ private void configureBindings() { return; } - // Back button - reserved for future use + // Back button - EMERGENCY STOP: instantly stop all motors and lock wheels driverXbox.back().onTrue(Commands.runOnce(() -> { - SmartDashboard.putString("Status/Last Action", "Back button pressed"); - })); + CommandScheduler.getInstance().cancelAll(); + m_DriveSubsystem.stop(); + m_DriveSubsystem.lock(); + SmartDashboard.putString("Status/Last Action", "EMERGENCY STOP"); + System.out.println("[RobotContainer] EMERGENCY STOP triggered"); + }, m_DriveSubsystem)); - // Speed control with bumpers + // Speed control with bumpers — persistently adjusts drive speed driverXbox.rightBumper().onTrue(Commands.runOnce(() -> { - SmartDashboard.putString("Status/Last Action", "Speed increased"); + m_DriveSubsystem.increaseSpeed(); + SmartDashboard.putString("Status/Last Action", + "Speed: " + String.format("%.0f%%", m_DriveSubsystem.getSpeedMultiplier() * 100)); })); driverXbox.leftBumper().onTrue(Commands.runOnce(() -> { - SmartDashboard.putString("Status/Last Action", "Speed decreased"); + m_DriveSubsystem.decreaseSpeed(); + SmartDashboard.putString("Status/Last Action", + "Speed: " + String.format("%.0f%%", m_DriveSubsystem.getSpeedMultiplier() * 100)); })); // Heading reset (POV Down) @@ -315,6 +359,21 @@ public Command getAutonomousCommand() { return Autos.doNothingAuto(); } + /** + * Returns true if the Driver Station reports Red alliance (or defaults to false/Blue if unknown). + */ + private boolean isRedAlliance() { + var alliance = DriverStation.getAlliance(); + return alliance.isPresent() && alliance.get() == DriverStation.Alliance.Red; + } + + /** + * Returns the correct starting pose based on the current alliance color. + */ + private Pose2d getAllianceStartPose() { + return isRedAlliance() ? FieldConstants.RED_ALLIANCE_START : FieldConstants.BLUE_ALLIANCE_START; + } + /** * Called when teleop starts. */ @@ -324,8 +383,10 @@ public void teleopInit() { return; } - // Reset to Blue Alliance start at teleop begin - m_DriveSubsystem.resetOdometry(FieldConstants.BLUE_ALLIANCE_START); - System.out.println("Teleop initialized - odometry reset to Blue Alliance start"); + // Reset odometry to the correct alliance start position + Pose2d startPose = getAllianceStartPose(); + m_DriveSubsystem.resetOdometry(startPose); + System.out.println("Teleop initialized - odometry reset to " + + (isRedAlliance() ? "Red" : "Blue") + " Alliance start"); } } diff --git a/src/main/java/frc/robot/commands/auto/AutoPathes.java b/src/main/java/frc/robot/commands/auto/AutoPathes.java index b74a0d3..875610a 100644 --- a/src/main/java/frc/robot/commands/auto/AutoPathes.java +++ b/src/main/java/frc/robot/commands/auto/AutoPathes.java @@ -1,45 +1,108 @@ package frc.robot.commands.auto; +import java.util.List; + import com.pathplanner.lib.auto.AutoBuilder; +import com.pathplanner.lib.path.GoalEndState; +import com.pathplanner.lib.path.PathConstraints; import com.pathplanner.lib.path.PathPlannerPath; +import com.pathplanner.lib.path.Waypoint; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.Commands; import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; import frc.robot.subsystems.DriveSubsystem; -public class AutoPathes extends SequentialCommandGroup{ - public AutoPathes(DriveSubsystem drive){ +/** + * Autonomous command that follows a PathPlanner path. + * Tries to load 'ExamplePath' from deploy/pathplanner/paths/. + * Falls back to an on-the-fly path if the file doesn't exist. + */ +public class AutoPathes extends SequentialCommandGroup { + public AutoPathes(DriveSubsystem drive) { + Command followCommand = buildFollowCommand(drive); + addCommands( Commands.runOnce(() -> { System.out.println("\n========== AUTO PATHES =========="); - System.out.println("Following PathPlanner 'ExamplePath'"); - System.out.println("End Position: (1.141, 3.867)"); - System.out.println("End Heading: 176.644°"); - System.out.println("========================================\n"); + System.out.println("Following PathPlanner path"); + System.out.println("=================================\n"); }), - Commands.runOnce(() -> drive.stop()), - Commands.waitSeconds(0.2), - Commands.runOnce(() -> System.out.println("[AutoPathes] Starting path following...")), - getPathCommand(), + // Small settle delay + Commands.waitSeconds(0.1), + + // Follow the path + followCommand, + + // Stop when done Commands.runOnce(() -> { drive.stop(); drive.lock(); - System.out.println("[AutoPathes] Path following complete. Robot stopped and locked."); - }), - Commands.run(() -> drive.stop(), drive).withName("HoldPosition") - + System.out.println("[AutoPathes] Path complete. Robot stopped and locked."); + }) ); - } - private Command getPathCommand(){ - try { + + /** + * Build the follow command. Tries to load from file first, falls back to on-the-fly path. + */ + private Command buildFollowCommand(DriveSubsystem drive) { + // Try loading from file first + try { PathPlannerPath path = PathPlannerPath.fromPathFile("ExamplePath"); - return AutoBuilder.followPath(path); + System.out.println("[AutoPathes] Loaded 'ExamplePath' from file."); + + // Reset pose to path start before following + return Commands.sequence( + Commands.runOnce(() -> { + try { + path.getStartingHolonomicPose().ifPresent(pose -> { + drive.resetOdometry(pose); + System.out.println("[AutoPathes] Reset pose to path start: " + pose); + }); + } catch (Exception e) { + System.err.println("[AutoPathes] Could not reset pose: " + e.getMessage()); + } + }), + Commands.waitSeconds(0.1), + AutoBuilder.followPath(path) + ); + } catch (Exception e) { + System.out.println("[AutoPathes] 'ExamplePath' not found, using on-the-fly path."); + } + + // Fallback: create an on-the-fly path from current position forward + try { + Pose2d start = new Pose2d(1.0, 1.0, Rotation2d.kZero); + Pose2d end = new Pose2d(3.0, 3.0, Rotation2d.kZero); + + List waypoints = PathPlannerPath.waypointsFromPoses(start, end); + PathConstraints constraints = new PathConstraints( + 2.0, 2.0, // max velocity (m/s), max acceleration (m/s²) + Math.PI, Math.PI // max angular velocity, max angular acceleration + ); + PathPlannerPath onTheFlyPath = new PathPlannerPath( + waypoints, + constraints, + null, // ideal starting state (null = use current) + new GoalEndState(0.0, end.getRotation()) // stop at end + ); + + System.out.println("[AutoPathes] Created on-the-fly path: (1,1) -> (3,3)"); + + return Commands.sequence( + Commands.runOnce(() -> { + drive.resetOdometry(start); + System.out.println("[AutoPathes] Reset pose to on-the-fly start: " + start); + }), + Commands.waitSeconds(0.1), + AutoBuilder.followPath(onTheFlyPath) + ); } catch (Exception e) { - System.err.println("[ExamplePath] ERROR: Could not load path file!"); - System.err.println(" Make sure 'ExamplePath.path' exists in deploy/pathplanner/paths/"); + System.err.println("[AutoPathes] ERROR: Could not create on-the-fly path: " + e.getMessage()); e.printStackTrace(); return Commands.none(); } diff --git a/src/main/java/frc/robot/subsystems/DriveSubsystem.java b/src/main/java/frc/robot/subsystems/DriveSubsystem.java index f2e36aa..a2459c0 100644 --- a/src/main/java/frc/robot/subsystems/DriveSubsystem.java +++ b/src/main/java/frc/robot/subsystems/DriveSubsystem.java @@ -9,11 +9,13 @@ import edu.wpi.first.wpilibj.Filesystem; import edu.wpi.first.wpilibj.RobotBase; import edu.wpi.first.wpilibj.Timer; +import edu.wpi.first.wpilibj.RobotController; import edu.wpi.first.wpilibj.smartdashboard.Field2d; import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.SubsystemBase; import frc.robot.Constants.DriveConstants; +import frc.robot.Constants.FieldConstants; import swervelib.SwerveDrive; import swervelib.parser.SwerveParser; import com.pathplanner.lib.auto.AutoBuilder; @@ -40,7 +42,10 @@ public class DriveSubsystem extends SubsystemBase { private static final double DEADZONE_THRESHOLD = 0.05; private static final double ROTATION_DEADZONE = 0.05; private static final double MAX_SPEED_LIMIT = 5.0; - + + // Adjustable speed multiplier (changed via bumpers) + private double speedMultiplier = DriveConstants.DEFAULT_SPEED_MULTIPLIER; + public DriveSubsystem(File directory) { field2d = new Field2d(); SmartDashboard.putData("Field", field2d); @@ -132,7 +137,7 @@ private void configurePathPlanner() { this::getPose, // Pose supplier this::resetOdometry, // Pose reset consumer this::getRobotRelativeSpeeds, // ChassisSpeeds supplier (robot-relative) - (speeds, feedforwards) -> driveFieldOriented(speeds), // Drive consumer + (speeds, feedforwards) -> driveRobotRelative(speeds), // Drive consumer (robot-relative!) new PPHolonomicDriveController( new PIDConstants(5.0, 0.0, 0.0), // Translation PID new PIDConstants(5.0, 0.0, 0.0) // Rotation PID @@ -247,6 +252,19 @@ private double applyRotationDeadzone(double value) { double sign = Math.signum(value); return sign * ((absValue - ROTATION_DEADZONE) / (1.0 - ROTATION_DEADZONE)); } + + /** + * Clamp a velocity component so the robot cannot drive outside the field. + * When the robot is near or beyond a boundary, velocity pushing further out is zeroed. + * The margin constant controls how close to the wall the brake engages. + */ + private double clampFieldVelocity(double velocity, double position, double minBound, double maxBound) { + final double MARGIN = FieldConstants.FIELD_MARGIN; // 0.5 m from wall + if (position <= minBound + MARGIN && velocity < 0) return 0.0; + if (position >= maxBound - MARGIN && velocity > 0) return 0.0; + return velocity; + } + private ChassisSpeeds limitSpeeds(ChassisSpeeds speeds) { double linearMagnitude = Math.hypot(speeds.vxMetersPerSecond, speeds.vyMetersPerSecond); double angularMagnitude = Math.abs(speeds.omegaRadiansPerSecond); @@ -269,7 +287,6 @@ private ChassisSpeeds limitSpeeds(ChassisSpeeds speeds) { public Command driveCommand(DoubleSupplier translationX, DoubleSupplier translationY, DoubleSupplier rotationX) { - // Matches YAGSL official example: driveCommand(DoubleSupplier, DoubleSupplier, DoubleSupplier) return run(() -> { if (!isInitialized()) { return; @@ -285,12 +302,18 @@ public Command driveCommand(DoubleSupplier translationX, DoubleSupplier translat yInput = applyDeadzone(yInput); rotInput = applyRotationDeadzone(rotInput); - // Scale to velocity (m/s and rad/s) - currentXSpeed = xInput * swerveDrive.getMaximumChassisVelocity(); - currentYSpeed = yInput * swerveDrive.getMaximumChassisVelocity(); - currentRotSpeed = Math.pow(rotInput, 3) * swerveDrive.getMaximumChassisAngularVelocity(); + // Scale to velocity (m/s and rad/s), applying speed multiplier + currentXSpeed = xInput * swerveDrive.getMaximumChassisVelocity() * speedMultiplier; + currentYSpeed = yInput * swerveDrive.getMaximumChassisVelocity() * speedMultiplier; + currentRotSpeed = Math.pow(rotInput, 3) * swerveDrive.getMaximumChassisAngularVelocity() * speedMultiplier; - // Drive using YAGSL — field-relative, closed-loop (matching YAGSL example) + // Field boundary protection — prevent driving off the field + // Velocities here are field-relative (X = downfield, Y = cross-field) + Pose2d pose = swerveDrive.getPose(); + currentXSpeed = clampFieldVelocity(currentXSpeed, pose.getX(), 0, FieldConstants.FIELD_LENGTH); + currentYSpeed = clampFieldVelocity(currentYSpeed, pose.getY(), 0, FieldConstants.FIELD_WIDTH); + + // Drive using YAGSL — field-relative, closed-loop swerveDrive.drive( new Translation2d(currentXSpeed, currentYSpeed), currentRotSpeed, @@ -430,6 +453,28 @@ public void driveFieldOriented(ChassisSpeeds velocity) { } } + /** + * Drive using robot-relative chassis speeds. + * Used by PathPlanner's AutoBuilder — PathPlanner outputs robot-relative speeds. + */ + public void driveRobotRelative(ChassisSpeeds velocity) { + if (velocity == null) { + velocity = new ChassisSpeeds(0, 0, 0); + } + + currentXSpeed = velocity.vxMetersPerSecond; + currentYSpeed = velocity.vyMetersPerSecond; + currentRotSpeed = velocity.omegaRadiansPerSecond; + + if (isInitialized()) { + try { + swerveDrive.drive(velocity); + } catch (Exception e) { + logError("driveRobotRelative error: " + e.getMessage()); + } + } + } + public Pose2d getPose() { // Always use YAGSL's pose — it tracks sim state internally if (isInitialized()) { @@ -479,6 +524,27 @@ public double getMaxSpeed() { return DriveConstants.MAX_SPEED_MPS; } + /** Increase the teleop speed multiplier by one step. */ + public void increaseSpeed() { + speedMultiplier = Math.min(DriveConstants.MAX_SPEED_MULTIPLIER, + speedMultiplier + DriveConstants.SPEED_MULTIPLIER_STEP); + SmartDashboard.putNumber("Drive/Speed Multiplier", speedMultiplier); + logDebug("Speed multiplier: " + String.format("%.0f%%", speedMultiplier * 100)); + } + + /** Decrease the teleop speed multiplier by one step. */ + public void decreaseSpeed() { + speedMultiplier = Math.max(DriveConstants.MIN_SPEED_MULTIPLIER, + speedMultiplier - DriveConstants.SPEED_MULTIPLIER_STEP); + SmartDashboard.putNumber("Drive/Speed Multiplier", speedMultiplier); + logDebug("Speed multiplier: " + String.format("%.0f%%", speedMultiplier * 100)); + } + + /** Get the current speed multiplier (0.0–1.0). */ + public double getSpeedMultiplier() { + return speedMultiplier; + } + public void printEncoderOffsets() { if (!isInitialized()) { System.out.println("Drive not initialized - cannot read encoders"); @@ -566,12 +632,26 @@ public void diagnoseMotorInversions() { @Override public void periodic() { - // Minimal periodic — YAGSL handles odometry updates in its own thread - // Only update field2d for visualization if (isInitialized()) { try { Pose2d pose = swerveDrive.getPose(); field2d.setRobotPose(pose); + + // Essential telemetry — always available on dashboard + SmartDashboard.putNumber("Drive/X (m)", Math.round(pose.getX() * 100.0) / 100.0); + SmartDashboard.putNumber("Drive/Y (m)", Math.round(pose.getY() * 100.0) / 100.0); + SmartDashboard.putNumber("Drive/Heading (deg)", + Math.round(pose.getRotation().getDegrees() * 10.0) / 10.0); + SmartDashboard.putNumber("Drive/Speed Multiplier", speedMultiplier); + + // Battery voltage — critical for knowing when to swap + double voltage = RobotController.getBatteryVoltage(); + SmartDashboard.putNumber("Robot/Battery (V)", Math.round(voltage * 100.0) / 100.0); + if (voltage < 11.5) { + SmartDashboard.putString("Robot/Battery Warning", "LOW BATTERY!"); + } else { + SmartDashboard.putString("Robot/Battery Warning", "OK"); + } } catch (Exception e) { // silently handle }