From 7d002ae79ecea55d9ca7a7d8c6af5d63c461c167 Mon Sep 17 00:00:00 2001 From: d-millar <33498836+d-millar@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:23:12 +0000 Subject: [PATCH] GP-6112: cmd args for gdb/lldb --- .../data/debugger-launchers/local-gdb.ps1 | 1 + .../data/debugger-launchers/local-gdb.sh | 1 + .../data/debugger-launchers/local-rr.sh | 3 ++- .../data/debugger-launchers/qemu-gdb.sh | 1 + .../data/debugger-launchers/qemu-sys-gdb.ps1 | 1 + .../data/debugger-launchers/qemu-sys-gdb.sh | 1 + .../data/debugger-launchers/remote-gdb.ps1 | 1 + .../data/debugger-launchers/remote-gdb.sh | 1 + .../data/debugger-launchers/ssh-gdb.ps1 | 1 + .../data/debugger-launchers/ssh-gdb.sh | 1 + .../data/debugger-launchers/ssh-gdbserver.ps1 | 1 + .../data/debugger-launchers/ssh-gdbserver.sh | 1 + .../data/debugger-launchers/wine-gdb.sh | 1 + .../data/support/gdbsetuputils.ps1 | 1 + .../data/support/gdbsetuputils.sh | 1 + .../src/main/help/help/topics/gdb/gdb.html | 3 +++ .../help/topics/gdb/images/GdbLauncher.png | Bin 16405 -> 18667 bytes .../android-lldb-attach.ps1 | 1 + .../debugger-launchers/android-lldb-attach.sh | 1 + .../data/debugger-launchers/android-lldb.ps1 | 1 + .../data/debugger-launchers/android-lldb.sh | 1 + .../data/debugger-launchers/kernel-lldb.ps1 | 1 + .../data/debugger-launchers/kernel-lldb.sh | 1 + .../data/debugger-launchers/local-lldb.ps1 | 1 + .../data/debugger-launchers/local-lldb.sh | 1 + .../data/debugger-launchers/remote-lldb.ps1 | 1 + .../data/debugger-launchers/remote-lldb.sh | 1 + .../data/debugger-launchers/ssh-lldb.ps1 | 1 + .../data/debugger-launchers/ssh-lldb.sh | 1 + .../data/support/lldbsetuputils.ps1 | 1 + .../data/support/lldbsetuputils.sh | 2 +- .../src/main/help/help/topics/lldb/lldb.html | 3 +++ .../DebuggerEmulationServicePlugin.java | 8 +++++--- .../emulation/DefaultEmulatorFactory.java | 3 ++- ...inScreenShots.java => gdbScreenShots.java} | 11 +++++++++-- .../TutorialDebuggerScreenShots.java | 14 ++++++++++---- .../images/GettingStarted_LaunchGDBDialog.png | Bin 17288 -> 18531 bytes .../RemoteTargets_GdbPlusGdbserverViaSsh.png | Bin 27095 -> 28500 bytes .../images/RemoteTargets_GdbViaSsh.png | Bin 23736 -> 24989 bytes 39 files changed, 62 insertions(+), 12 deletions(-) rename Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/{TraceRmiLauncherServicePluginScreenShots.java => gdbScreenShots.java} (84%) diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-gdb.ps1 b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-gdb.ps1 index fe1e3ba424..405d8cd0a0 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-gdb.ps1 +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-gdb.ps1 @@ -31,6 +31,7 @@ #@arg :file "Image" "The target binary executable image" #@env OPT_TARGET_ARGS:str="" "Arguments" "Command-line arguments to pass to the target" #@env OPT_GDB_PATH:file="gdb" "gdb command" "The path to gdb. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_START_CMD:StartCmd="starti" "Run command" "The gdb command to actually run the target." #@env OPT_ARCH:str="auto" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-gdb.sh b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-gdb.sh index c2945d3f4c..c8ba88534f 100755 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-gdb.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-gdb.sh @@ -32,6 +32,7 @@ #@arg :file "Image" "The target binary executable image, empty for no target" #@args "Arguments" "Command-line arguments to pass to the target" #@env OPT_GDB_PATH:file="gdb" "gdb command" "The path to gdb. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_START_CMD:StartCmd="starti" "Run command" "The gdb command to actually run the target." #@env OPT_ARCH:str="i386:x86-64" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-rr.sh b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-rr.sh index ca8684b05a..cb92423801 100755 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-rr.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/local-rr.sh @@ -30,6 +30,7 @@ #@enum Endian:str auto big little #@arg :file "Trace Dir" "The target trace directory (e.g. .local/share/rr/trace)" #@env OPT_RR_PATH:file="rr" "rr command" "The path to rr. Omit the full path to resolve using the system PATH." +#@env OPT_RR_ARGS:str="" "rr cmd args" "Arguments passed to rr (versus the target)" #@env OPT_ARCH:str="i386:x86-64" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" #@env OPT_EXTRA_TTY:bool=false "Inferior TTY" "Provide a separate terminal emulator for the target." @@ -62,5 +63,5 @@ set confirm on set pagination on ' > $RRINIT -"$OPT_RR_PATH" replay -x $RRINIT "$target_trace" +"$OPT_RR_PATH" $OPT_RR_ARGS replay -x $RRINIT "$target_trace" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-gdb.sh b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-gdb.sh index c43a4b159f..00ce5988d2 100755 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-gdb.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-gdb.sh @@ -35,6 +35,7 @@ #@env QEMU_GDB:int=1234 "QEMU Port" "Port for gdb connection to qemu" #@env OPT_EXTRA_QEMU_ARGS:str="" "Extra qemu arguments" "Extra arguments to pass to qemu. Use with care." #@env OPT_GDB_PATH:file="gdb-multiarch" "gdb command" "The path to gdb. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_ARCH:str="auto" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" #@env OPT_EXTRA_TTY:bool=false "QEMU TTY" "Provide a separate terminal emulator for the target." diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-sys-gdb.ps1 b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-sys-gdb.ps1 index 531f644bc0..b8566212f0 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-sys-gdb.ps1 +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-sys-gdb.ps1 @@ -33,6 +33,7 @@ #@env QEMU_GDB:int=1234 "QEMU Port" "Port for gdb connection to qemu" #@env OPT_EXTRA_QEMU_ARGS:str="" "Extra qemu arguments" "Extra arguments to pass to qemu. Use with care." #@env OPT_GDB_PATH:file="gdb-multiarch" "gdb command" "The path to gdb. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_ARCH:str="auto" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" #@env OPT_EXTRA_TTY:bool=false "QEMU TTY" "Provide a separate terminal emulator for qemu." diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-sys-gdb.sh b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-sys-gdb.sh index e9b490bbf9..a7054286cd 100755 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-sys-gdb.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/qemu-sys-gdb.sh @@ -34,6 +34,7 @@ #@env QEMU_GDB:int=1234 "QEMU Port" "Port for gdb connection to qemu" #@env OPT_EXTRA_QEMU_ARGS:str="" "Extra qemu arguments" "Extra arguments to pass to qemu. Use with care." #@env OPT_GDB_PATH:file="gdb-multiarch" "gdb command" "The path to gdb. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_ARCH:str="auto" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" #@env OPT_EXTRA_TTY:bool=false "QEMU TTY" "Provide a separate terminal emulator for qemu." diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/remote-gdb.ps1 b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/remote-gdb.ps1 index b4dd4fa6a9..9b368def67 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/remote-gdb.ps1 +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/remote-gdb.ps1 @@ -33,6 +33,7 @@ #@env OPT_HOST:str="localhost" "Host" "The hostname of the target" #@env OPT_PORT:int=9999 "Port" "The host's listening port" #@env OPT_GDB_PATH:file="gdb" "gdb command" "The path to gdb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_ARCH:str="auto" "Architecture" "Target architecture override" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/remote-gdb.sh b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/remote-gdb.sh index 2378da4e75..c17a037a89 100755 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/remote-gdb.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/remote-gdb.sh @@ -34,6 +34,7 @@ #@env OPT_HOST:str="localhost" "Host" "The hostname of the target" #@env OPT_PORT:int=9999 "Port" "The host's listening port" #@env OPT_GDB_PATH:file="gdb" "gdb command" "The path to gdb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_ARCH:str="auto" "Architecture" "Target architecture override" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdb.ps1 b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdb.ps1 index 7da578cd36..d02b1ee7a3 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdb.ps1 +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdb.ps1 @@ -35,6 +35,7 @@ #@env OPT_REMOTE_PORT:int=12345 "Remote Trace RMI Port" "A free port on the remote end to receive and forward the Trace RMI connection." #@env OPT_EXTRA_SSH_ARGS:str="" "Extra ssh arguments" "Extra arguments to pass to ssh. Use with care." #@env OPT_GDB_PATH:str="gdb" "gdb command" "The path to gdb on the remote system. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_START_CMD:StartCmd="starti" "Run command" "The gdb command to actually run the target." #@env OPT_ARCH:str="i386:x86-64" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdb.sh b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdb.sh index 8befb88948..fc24b26ffe 100755 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdb.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdb.sh @@ -36,6 +36,7 @@ #@env OPT_REMOTE_PORT:int=12345 "Remote Trace RMI Port" "A free port on the remote end to receive and forward the Trace RMI connection." #@env OPT_EXTRA_SSH_ARGS:str="" "Extra ssh arguments" "Extra arguments to pass to ssh. Use with care." #@env OPT_GDB_PATH:str="gdb" "gdb command" "The path to gdb on the remote system. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_START_CMD:StartCmd="starti" "Run command" "The gdb command to actually run the target." #@env OPT_ARCH:str="i386:x86-64" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdbserver.ps1 b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdbserver.ps1 index d1b866bbc2..745544b7ba 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdbserver.ps1 +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdbserver.ps1 @@ -35,6 +35,7 @@ #@env OPT_GDBSERVER_PATH:str="gdbserver" "gdbserver command (remote)" "The path to gdbserver on the remote system. Omit the full path to resolve using the system PATH." #@env OPT_EXTRA_GDBSERVER_ARGS:str="" "Extra gdbserver arguments" "Extra arguments to pass to gdbserver. Use with care." #@env OPT_GDB_PATH:file="gdb" "gdb command" "The path to gdb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_ARCH:str="auto" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdbserver.sh b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdbserver.sh index 1692276674..3d2cceabb6 100755 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdbserver.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/ssh-gdbserver.sh @@ -36,6 +36,7 @@ #@env OPT_GDBSERVER_PATH:str="gdbserver" "gdbserver command (remote)" "The path to gdbserver on the remote system. Omit the full path to resolve using the system PATH." #@env OPT_EXTRA_GDBSERVER_ARGS:str="" "Extra gdbserver arguments" "Extra arguments to pass to gdbserver. Use with care." #@env OPT_GDB_PATH:file="gdb" "gdb command" "The path to gdb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_ARCH:str="auto" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/wine-gdb.sh b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/wine-gdb.sh index d7a8532595..e5884c710c 100755 --- a/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/wine-gdb.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/debugger-launchers/wine-gdb.sh @@ -32,6 +32,7 @@ #@args "Arguments" "Command-line arguments to pass to the target" #@env OPT_WINE_PATH:file="/usr/lib/wine/wine64" "Path to wine binary" "The path to the wine executable for your target architecture." #@env OPT_GDB_PATH:file="gdb" "gdb command" "The path to gdb. Omit the full path to resolve using the system PATH." +#@env OPT_GDB_ARGS:str="" "gdb cmd args" "Arguments passed to gdb (versus the target)" #@env OPT_ARCH:str="i386:x86-64" "Architecture" "Target architecture" #@env OPT_ENDIAN:Endian="auto" "Endian" "Target byte order" #@env OPT_EXTRA_TTY:bool=false "Inferior TTY" "Provide a separate terminal emulator for the target." diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.ps1 b/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.ps1 index bfcdcda03e..5208e764b6 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.ps1 +++ b/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.ps1 @@ -26,6 +26,7 @@ function Add-Gdb-Init-Args { $ArgList.Value+=("-ex", "`"python if not 'ghidragdb' in locals(): exit(253)`"") $ArgList.Value+=("-ex", "`"set architecture $Env:OPT_ARCH`"") $ArgList.Value+=("-ex", "`"set endian $Env:OPT_ENDIAN`"") + $ArgList.Value+=($Env:OPT_GDB_ARGS) } function Add-Gdb-Image-And-Args { diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.sh b/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.sh index e449b890b6..ed134b962a 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.sh +++ b/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.sh @@ -24,6 +24,7 @@ add-gdb-init-args() { args+=(-ex "python if not 'ghidragdb' in locals(): exit(253)") args+=(-ex "set architecture $OPT_ARCH") args+=(-ex "set endian $OPT_ENDIAN") + args+=($OPT_GDB_ARGS) } add-gdb-image-and-args() { diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/main/help/help/topics/gdb/gdb.html b/Ghidra/Debug/Debugger-agent-gdb/src/main/help/help/topics/gdb/gdb.html index 04415f321d..91895838ce 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/main/help/help/topics/gdb/gdb.html +++ b/Ghidra/Debug/Debugger-agent-gdb/src/main/help/help/topics/gdb/gdb.html @@ -102,6 +102,9 @@ python3 -m pip install --no-index -f Debugger-rmi-trace/pypkg/dist -f Debugger-a
dLS!+=p1Zf`KG=?wh@neFN?z+beij@1}S(i8udU;x>5=zUP^V7OKS;9iflJ^4dZl z1EPF|M6AyDcMd!mA9KyVx0W|V_4{#fupFof^3X2Nx&7;|`vAn}N*pY3*^zT(+Y;yDxGoZ)WWp zUc1(P`)1nr%4ZG7NerPO;ludIwQZyx3VC0?n-tM>rEv=noo=u^b7WH@)A~_g$w|Ho zJ!$@MXaLO#p5(trZP&Ph7E^O#(LOwlg_iHBn#?72yt!lJ*fRUZuh8kUh_8ThjpSdq zHCXukqQlzV-CuTZ7Dvi@G1zT)^pgIh9lJegR?h(1<+92?gw=_i$-Pyax=SS;TVh=E zQj%n^Lb<*~V~G?o1{5S^;r?Z-p06}c#3AyEdkeHt~k{c@{O zKU)HNm1-V``2$b)Jdg2+?vAi0qSm{*hq<|z(@)R#* YU!o#Hu4f$rbZ8# z)IE-OF1;91{fy6(A;>g>-4x4We&AyrVR(APCmzvQ^KJAgN08H+r42Fq%hbSJshQVr zM9nH8xZtekvbji33 zkArm;nB&Hng7{U)1O=_05XyBK?x4vl=9V_yHYt5zaRd6=4K}TO?cpyYVq(^=La$28 zF^~8K5;CO;@2?Fz+S 2qi&!;_38M@Do=0nMy zX1voRVjR{-n5n3m!xgxS&{H?2YvK{FhjUU-{K-AU_T5hp$|nkB-y0e!`zC9cI;u5d z37kFFu7!M`<;&Krif(dubBks(* _Y%nvDHHEdB^n{ *cn~p9|skYs~}<8t{+NSFT(U z4JG3PD;vm^+sH}sEs+eIa$Y8d`TP0F#$BZH2xl< #*jM@5N&djwoCX%PH~89JSIMg)GHjV)mp|dWj17L?m`N9+yUiLuzNZ4+;uO zTaeuw@jB15dGe2!>xJD>BWDD@77dxs3#~X3o)Cx}bD!VFSaI^va=fRcEj0($oJmKh zu&}Uvx^t96cu!1;iK|71sVT*i{v>|)6DLUEB&w@tQ1S?wBVINaWaPCIkc z=bMgf?R(qX?*amJ>&(YXWG)h(y~&U~9AjKG7vt=ee>BNyKK5~nVRvtj{rn0 R6G<{NiG<&EogLEG5g4yjc(}4~LFTz 3+j7LBC5({GDIQZSMV}MzSjqDp_YJy7bvvZcX)8^{KJP!s=>URfFR3!MNpC z&80^)=l)8s-XKh2On3}Faki2iN(QooN+LS!`AUu)r>L=M;<$q9K%S0J0Tw&hN0US9 zdJDa~V}mB8t6i#493H}GRVt~k9Z@VR+E}DK^16Hua2$)F?9s;ec$rDXvm^O>CI>I^ z8d}I)Z<7;WwKB>K!tfSXRUO;%ygUVIio5oS!OXN{9|MwcT 6GiVv O4Q3f981j0v zYQ2-O7Clz9`H?TPWglgJ=aM(jxU1({=xqYMs*pZro)MsQQ^f~9iMWB0j;og0NNfKA z79^xF6v YdLUR#<}!9AHU z%T<6+(Gsp84{qO*nf7g9#QHI~!RM01=r?$yVR|#~H@Wh3*kvTtGV|xP%`7<{n+vg{ zj`Z{ey??(tRaKFdl~r1LSoa3imyP%i6BCo_*f+J(;@87dn*A?ZLP+s&ah2Wo5rf%+ zad}3xZMXw`ZBCDAXlU5jii86RBw{#7`Q47buo}I+mY6wq3`&Ue-jcJ63%tC1$KMC` zft!)o>A7QMQc}|OTLeX*M1srn&B5($ZRL}J_~mp^{}P+UmsnV#F8c@>RsjLezLXaq zhZ2QQ$84+Nn*@vBj1zOxq~awhd*Jr3VcRXSaB9o|O2;f!VaMESPLE*cz3%yDw+XY1 z6K6oQyBw^ykr|cPE_Z>T=!$#7X*%%kAWA?*d@y|zGXryUgc&CqJ{C0PDKT;Oy+I z*AkM-T)vi5VXSO?h^!Jj+1c4L$s)z3g8@8lXFDy$9BzA^oTvM1qJchd-W)3riU$?V z=IJ!__4Tb7+`_^-+}XkDo0yy&&ef7ieql7Y(wl6VYhtjw&}MgEb`gZF;9OeFZp^lg+)aA zoW%&OUcN+seR6VAz@`unf0DqXU$Ly|+x*-Zq50aOG=s;eC@euVi0Ii=`q$M?FOBqT z*G(R^rKd~9r+N2{g=uC71qHQ#V(M3GW$os*t;mh`59dgU@ETlwo>)psW`yt3tq!+a z?M)U{k<$jd|6@up()SkO6le%+orx!Up?o40^0F7ccW71Z-VidXC)~x$YCr9ugFlgC zm7AmqwJ0EP7J_HlZH(=MWX=Bi<;!S^xtii|lB@LX*`B`s{^R>DuFJM}qwV&<;}_-Q zBLbwxP1uYHx)HE9eX^wU31j4wgs%dFS-nwL;Rg0&e1lV_y$6{UC@{$*%nV#wHY!26 zL)F3x;X&?X-wC+ev5n#~)3sx`$N9+_P8sZp0X)iNr~|={M`@lhz7TnSdf5L&wmpi$ zB)ZdZSQRwQ=S&m|7eCSk%*TpW6aC3(^Q$xNF!ioU9H!3IRk _p6L{}bnEp{cH8&wv;Y8<(r>IuSo&p4T86@=oFXKtCLLX&5;sn_ zLy}cfUwvY >~KxvoC!={4=J9Hi-@cm{i)7d1Cn%Y!rJ=69xX-P;JClg?q2suYo z`M6g6#MRc%8C^zxR^LV^lMu1JyPcfVKh}mr4c|pjNxYPlG^_);%5F9iR)d#eR%SlV z5xrgD(%Hxh^?Uoa$Mq)0-73M&&COCd%V&qJ$R2LuC$)chv2~dS4da}0dh^#)bU{AQ zRQ2|b%NQF|hn^lCz4iBBURX#;OS^%Jn&mRz+1e^*!)AZq4cG38f+@?2p#U>;IHy7u zy-LA@d-uFpR%53Mjj%R8a0FBQdOA>P7UQp6zkVI8IuD;=0RJ*JWa+t%jt+ee4>iM$ z5ELmzWXdhhSgqbrkocKei03&sB}AK_+w-sem0Lkj&Jg#2hug~nmtPbgU4ktLovd&i z9t-pHIasLoy;W3t7Qh(pkW8ih6+=%?Z>wU9Kl;+u*}18uWm>YT3Dg+JVGYMPe)nhu zKnO`Ehtr i<=r7GhF5+;5eUIjWC_R zNYY$bzo%7cPZAD{W`Av1dYP1Te~iziAw?r;&k*G67@J>DB% ;VFhQBRjkiLO5lM#Qd8*9csGzE4T{#-_w#Qk6fI00lavV%YKd zS*h9T>gvVC1*=il9YU0QI;XKT)YM1w F54{;)O `1W5y8o&@%<7#lVEZ>MgF`sHBUw%g0=|S@=e;{;_P^g?P~)aT);K6LT{I#xaA>} z0sbJ9*OcTSn|V;;{As2jJ4?NHMzfZq8vGdpqhh16^UwRzng}t_XPm@6{Ipvm2opZ! zq)`yCp;3Pfqf$7sAmOolx8+A*Ua;A%iP-#HDZF9b_DV%~|5gHA0;;!i 1ua? z30nEjUaS09clH3F1=cdW8WPk~ZhB@9mOL=0D;zZC!!Venk@DhN?QL4UhUnWlNmo#A zWHdeiw4GR6$mj|sikJCc|3^dv@}6MxAEW%grS$kEv-}W9M%+6dIw=D)YH @t2CUH6;kSTdz;)eW@;WrS(X+b$DugS@310!Dg0$X`>e;;F z4Tu#{gMwbE&`8e%AS2MeorUF(Q DoR*eTN@fK0RTJdUWEQKf$b%M;`AeX zY6!R+{|L5Mz`d-cg|>*y%uG(psXKD*LTDdF+UgND{#Wx7UvTLP5fTzI%ZplnrMw;~ zqKF}J^77TICSE@3;19loi cKm7cvu*LnVJ6 YHzsyB+VE^ruBmqKR%xDB-~_ zIt65<*TNL^=I?*#)zEl%lgLa6Mz2 &>v(-vNL~^a?oB8?q!F!=kEGn`)SRVxq)WX6-ewI8=`U0kq1rWJ#@_D+zxyj|l zIl21}8NkPli%j-GBhD|<@;u)MEjooF)jN*MdJZs2mCEe1G-v7YiQ?BvTT@k|S$Cn( zb{`m~$v1#OYWw>OftEsFe_8`7Z_r&<)e^H8k5D#Px28puLP(-b^`DYHRSXUe6ccf@ zr?{_Oi2>kgbZo46eLzr9<>_X{s*Bi*7djGJT3S&eM$T?-ZWb1sNJ1?Bg$2}R0<2rN zpuA4oXmlXsD#rmaIX*p&AT1~?Yym&(^$ }&I6JadOfOA6*cdN_=b3 Zz zn4Q2$u_3GAUo c3^8$zy^F1A^5!335sa; zU7D(LUEPSYa2=iEH16?gTIGLd5v9V%#1y*RKibW57bsdrAo{-h lp)LUb?3+VDa8VDsV_a+cGnHS@hHTf liiTnO78jlO^ON(rd>mX& zEvm4D>ET5G+ve29 TrH&>PpU?;L%2`0DD_tGIZ0s}3=n zHGnOuR1zef3KHD81G4o8P>l>F2HB+|=r2~4wY3u_(c*gCfZ}Cr{{iPXWJ(W&mkgCT z97t~ |9DpPB!0C`*NcEHtl!XZwjXf{!IHIjI1{(sF-1RO~&7Z4}D{K>}e%J z8Z&6*57V+LJf)Yz73S?OSuLA`?mm+GDlR2;cz77kZJSnBHk9;QXro1wN^UYHXY=A& zoTy@O|G8-c*b`n}Ue#h#cAfgS6BFvz*58DOK{vuLFx?K+w14Z4Y$0`4gCiT*9BgQy zS)l8bnXWtBghpR8yZO}ju{yiMleeIP?>gUrB;0?eBr})?I?um%t*emOs}-9*pkGRQ zYdF?{`={6DRDjN*Jsl1NJfZ3vzV9HQU!86r`TH=3?wN=P3tQ8nx%4%EVo)0@ zG?G$M8Ybg&S)V9p<>7&Y&<9%T?!mzlmKN0|qjDY+$altYl5<+9OG;vD@ljEwflw*p zSu8|tDKpkK0fA>E y`nd$SenJA_zJCxpp7kBvq=6eZ3GE0 zb3cCEg9DYdY-?+KP}bVoTCr9Ago}&o;X_|`cXxM{F~D2S&d=rK
*P+vdK#lnJ-{Wv)<<3%C2;?`L4+H8Zr3Lh(LA<%KN zbG{RDw2-a2{aBGP|L4;+`*jOkR=#pJ?EczGAfs`*O$%>GjWJMsWN8ClZUK}qI)%Hl zSpzYg%kaf};T!BKOz<-J@=apS$(oe<7$!YD4^Cz^ly)crKlgT}fbSSu- zwr4=g{v^g94ZzFg#A9mecTD>`J7`!~-ED1&YU?vIGXY~(Z66*273ux^_bCIQ!AN5X z`t&?dkz)z<2b}vy*bfN~J4eT5YZPycE06I;oaAk#*=B%F_yStp0xV 4+W!IU8so0NVuX0j|5ZkQ7X + z?04PX+uM625j_Ah5qMe8LERu#uXb|=I_RCPk^Ffe%@%Q_u)VbS#apR29JES-6aSgh z@@sl}dQ1%TVc|V $ z|F_~r_YpXN$k?8knAltHj>rafTDKB8hncdfD)FMfzdsPE^2!j8ivfHE3Oes@D 1~#(d%L@3nADOI+>-d_v3<%Kfespz2@b+jg&S$KjBH@Lo> Z&)CfS%zNre<8Hu4gK%XM^h?*mvI){ #DIi?y0L8OAGxxltE;2}j(mlH_**!E@~oK7eJ@nbw}pn>R!CYYTp=0$ z&h8ft(`x`PbGIAgjgL 9-JE)|!7!L(`@llNl*g4T> zd(XaMIJ>omQLw!%J-wQMNs%RDkF%Qe*GqE+gz7oG*zA|c2IVkoog3SV{=}q}Gx$ QsEBMX{FGRZvm)(_N#rqA@%+JwyS-q z4obgw(Xj$}$+Od<{UR#rry90)c11&ez{lf%*q;P&=aZxKW5@uH{$K{ 5j$p%zf!W WmtztS20 z9kEf>Ra2rsKKr?0pyONtGQ+{_7U*d>$esrI2@HP&tDkDX?`HQe7sQJb5uzzs& MkA*9g9+FnC`^j&06#Z5|2;lj_K zzm1RAvau;RaQ@CXl#V9%_|c 8pU}*C1Xb zaZg_e3&ZBY9+D@G23G9J{u-zjVs(H@7(RpkX~f_inM^e<8=#?~so!N|Po~Nu=XH{P zEkq_@w}PFT508?J<7w-Lq~No%uqekp7m>Kor#I~r4<1w)SFoO~zaD+Nfaf7-G<(7@ zA-zylewQEA-9;FG_NjR!%tHPcZ_WhX82QZl0^(#IOFPB|?n|%%C#ic4OEaxd1-RyS znW|7W=}EW}D5r5+#4wl$CO )7c9sp-SA67bv-0 zi)&pNZ7gtGA<<~qhG}9f`|BZn0|R^l0z)IC*M|}@X*_H7V>2fDP3knYp2Q3IVv-Qh r+rREBck5EH`+ z5)nOs*crQs6$%$5R#a3t;A{MItq**Gm)NIabb7D>gn|jc90`U!C@O##_RSh#H0mz| z;j2gAGNR~|ayq`Swlp-nQ5RY(NO Qtu*Q^Nm=hFx=pkk8Tvwqjh^GpE~;|~mPFyqo|z70>6_y@D&&}&Tul a3Iiyy7;k7gp?)=5r{tM*x z7vW=j58gj8Xo3G%XjuV)3|`YP059Cv*SDU%totjH^4-G+TX_k_A`Bp2h_^W`@FB5x z_3Xv~4ko^EJDhZsrhqIx9VXVW{_C6T4VS`KYM=k4A^*BUfVI*~bpC#n;B>!{FbARA zS7z9L(#GbIo<#x%wGtq!uY^;IHr_T$LU3fqw$hdoK GY}!Js{Ae| fx~>Pv8idY%=*m`cr^N3 z==UowFHXVuhWq)+K6r)TVS0_X*$NJT|LwGQz$1(2HHP_qYw?rT5V}l=)z2_!Fl)7T zbbO?>T^80%x4@ }?KyGXeYr0z(ivn?SV z1~D5p?%T9HCAfcb!7QM{KqT&U-7HTB7O #$C|D>}_o;fGG7|0q-n4hAnH(g!Y^9Drji`2IvwiF6!$A zql-s1;&xvsXM3#lP)s%eFZ-Enva4;hVxb{03yWTvQ1c%zM1VSV2F84VH>+;zv-P(4 zZ7O8ou30zw-Ga;oq|o}nxL^-VAjp7@^azMVplPwQvvYBc zhEA} ?`&a8}# zA)9IdFRrYvmfNk$R%AtR0#f$ev4G7!Rb!BkBoYH?bAo!pLIXep1`czfHh_~AQbwI1 zRC^$O7hpceqA38Mw~Ow!4ucL2MA8>2NrCR`tsxIQ8hKRYt3xVTe;QM*AJrA;Rc)&O zbisSN`bI6=_V_S6F)!hDh;6N{j46+kAsJ-J%V-IVkuv<#`T2K5_E$v)8k)nuYG|G^ zU@NduS?NCx`9Wz~LESuL5v zHzUrv8wx7JPvtol)`3P!O`QQ;79hgj74UEa@>XCxaJ)g|@BAhWCWs@+J (k# z@Ef|ren4*lFrwOO_Uc0>^|Hs0ABQ!8>7zqLRxW|+7XeRxc9k (`=!T5 3A8JDd4dZsTg92E(*-6dl bevuc4{&Hjt#cRy?XnaIm(}Q55Ucc`#q4$-Ma=C!cg9fT z^Z>@ijecNgwxnBD*7LW|16C+p!5w0;To2b5hx-9^thHN01e1^_ZZTIj#GfO-*hW<} zVl^OJCf_?gIqCDx<52)2eiK5~<7`J17#aZeob7~qE<|*~?3B|a=ld2WG*Kb_zr=5V z#_fK9h@-!TibaOBQgGW?*c1{~uvYuRLl2yMC!#-pZp8zW9!RGT2TpvrK8i;|(lG~* zyR~-mb0nzWoN}_gKj8P8DmX~EZS-Yj`+yh$97Utf=q3Tq_2JxUU}ufUha6M_(}o`K z)v@$=kLc-qN#L?HwOi~v?;{kVb9=kw&fA%4*89`DffYtKoJb(rmmp}>^4C& +SSW#47y^uf#d?rSTIp%^sItIy~tRm(6G~~FeAelka&QUQcW<;-I0Dx z&UkqqqXZe4>M>~ov#wyQr*&L6gG0t-eas5rc(azV67wha2zed?g6`JV1kM;kMKb4w za1emijHB`D(?G5>`s$n}eL}F9>v>K`dJl_Htt9A67A`6Jh{T&eg#@U5IR76Sz@L)) z?=2%A3!=@q%TE3L8bIp*SuFhva{rkOcn<2Fjm<8wYDY^oAYP_EIRzg-egtS>mUzOb z8wsz&(1H9vDkX#hfnmYFuc%T|pbsY?{TQkp5UJ06A)iq+UfVUH{r+Y?)+Ojlct1Dd zpS(UnWJLOCa+L?|4?kpY_p?_H{L}M@^n?h}m>a0@J9C4H41@@IZLUF3e}#NuA`$GS zf_jxAI20i*Y%x_y K+Ab7(aw>A+7#KuM^xdWj4i)|5)N{xGyfTs?| z3Fou+Uj9-wAO7v|=TGW%iW)TFJ(3I}W`_a1-5Jde1p(>d!5?^QNKb-e%P`N$#AJ1S zv~Uu9O-y76N^GbCtn&*TuL=JRj=fDwe-E$P*x1xJG=O6W%CQIh|D^U1tvDr+GWg`= z@i8&3U=WB#E)7hmPC59qlSg6zjpzd42CW*8DiDlA*(%-qr}Tlg(`XVDWH>m?z>u<4 zG!~ eOHag0gps4x^zbYiq!{Ru9~hN-}~EfpPIR$kuYCr{KQd(4OQ z FT@3r(NDQ!l{|XY<_P3@zXX|~Hay9wf zPky|^p>(PQhZq22Ud*aFL1dlT3PtMy@6C$|$cU7l=J$WW8AG8fWQ2XnzHFQ(eGlM# z>ph7LyNm6MXJut&U|5ySY^3LxAZX)bQAh=_JD89M$4Ep($8t0(@aYuGCJM+Tet;nh zVor;R-?pw3fQqLOZ}!#Aqw?jiwuOTD9>cf2B7T7yJt1wvNZ^AEdjHQoOpviNrMXug zW1Jn>2jA!hB$#Ad{bMxd*Dt7E+%sRC!BL`H|H)PT9~O+i0A=SAP%DtrDvB}ES3Qks zA+^}+@b(AL&9UMvU||-oq{FhXSSEq?;c>n{%yPZx9WJ$mIvzy&`p=IYtPL}9a3}_i zrR2aO(mXiiTNAFm#2W@+_)5hlOS7Lt=U~c {W>r4r`1Uz$5PV3Ue;fcv(Ej1! z@DF*0u%+k6tH@$V58v$5{eZDSC65Y+4&DH)a1vlcpef+4S$0Ur-7l5PLIni N z5pp631g#zT3=mPq$4|j|2Kv@SLm8P~(071?I$Y_z2S#`RvE8=+BkS>*$FpU|^1H)h zV$^`snpwa6S+F`t(G8|;Wwi}vJ2MJEas$O}Bgqs9BQqfhYm5xd<5mF3f =69}NyGByTqFw8yr0Fcosnv`F z{gCSlPG2c2i(RrfDsh5R>3B`U(S&)*50HHQec-%DQ=p?gAI{OhBIoZweEIUl&hxu1 z(qJXlN(J5s5caYq>k%XQlu|uQ?O-Si96R~ygvd;9Z5OPJ2C8Hk ZFoh;EcIO(KEQ^#^U;&@?|;}%nx_MXmsS*`Ik{o> z<{cO+!oC(h^L2l}1IJpwS5fq6H*boGi>Iiq0=M%TDr!6T*b?BN$IE_TQ-KkLhbzBA z#YL7)1-jPeO|X|XsAkIY@ 3n1Vh_*okHjU4af+cjV9J)?85ev8h+O6(5 nob7seXbpiaZI2c25ch4jp=n5E14+Lr0BK~KV}7H7(XPbG6Fo#*!L-|G=H zW4T=v7C({Ajl4KT1jmzyp6%AP#cRUBIJCj9 bw7GSfjD2I0BJ3 ztG0$I>9ib^i=}lmr+v^;!NNh_dUCSeWErA<#&O(NDxi77!ELm5Y0#-sC9u*YAyr90 zPGGD3{HSEY=d~^qJJICp3R+6V _Gw4v??M59)!XKc*#n6q=T z&g@W&hJpTL$|cX8-Y&d`WlL9Mgr7%0=aG2ud3%s2f4Nmlk|&kB{ZV}gIiuN#qk~%g z@%|-`uw2u*=$_BAc_&>Zql5gL-l`HhK3(=OSgZ_uB}Dlf3P+K&&BoGq2~m-b$+5M} zP;w8Qy$mePd(eXWX;Wx0n@wVihSFhDlJl`o)vTA?+s6_@OJ-=Hqf&KquQ~fAwL*?s z4!xNyT+aK+OGtT25o-~ifdV*}4Zd&ge)8`cbt@<0$bKfj7}O{12m-0=b%Rv(%lMLo z@dTB4xz)q<8@u 4G5I7{8-x<6-JY0IY@9Wd=D3-;$3W)>-R 7e6Xh?RzA+&b z7`H#WNEhgZg++>LPSEFA-D>E5P$6#+=r_JS%N-*s+-ND_WFckK)v;L7y?74fNRo;> zKjzYogho9tY3EZzLsE 0Q3NoD-agxYARpK8}!)aZoCZrjIn}I z+u6ARpm`@aRl>+P1vIIiM4_e>(*)W#$$`i`h#mHO{%i+hn&$GOg4kkpy1>^T2VD=> z@EYy!81;dU4Qjve*7iT~a9ibzNHBy3B K@MnBj`aa&qwRy?Myn8QQ 3YX$% jp7ZgDZX%K?t%lCU%74lBzu6W z+{b_$*k3%mwH5#6i! JaH!PP zCjcK_*|Y&ut|bxnT2!dN5{x6^{cNUOdSeDY)ac`8TY~G7e9O#A(i7cc%=8k9)3LYT zQSgTR&)wq>qK?nYD0L4Q*1x{6Yo7-PN)a4pVnz&ES``k#Qh^t1H5aeGo@9O?t+Rq+ zdeDSid-RclsmUOguIzYAtIfrxT-HrvIG&NX)y~eh& L+W~eCa9!o!>6g!VKB?K9D`Sr zd3oj}N{kksl{Z}owOeMnJ;_SL%*+h*xJ}WK;z^*(5D %=3oO(`SWT*E~TKI`h0Oil+k`|To*<>{KUlm7kq%ky?i0gcPU%hcuDF4hqaH2$Qm z$O&UWi?p<+fv%Cqr7>$p^lNUm!5^!?Xax*mf^BREW3dKLMpN%6KS%(D-lfq@ThBtd zm-XepJ_1&ac$K=H`+gKTxwAFvBu)f&acRe!`2HG~yKo~}FhL`5ynqLvKLv)vO3riF zkUl6^R=*lgXjYdAylc_XN#SQ|_@^}+E^D1S9j;0_#Pc}kFLdtvUl4qHu&_X&9s{k~ z>e*?p_`n$KKA)wtSB;HJG=>6BhS@kerjsVS00MKwE919*mz-RxEj#mNj#BPdA{%6} z|D6G*y-C8l0|AI2*|^(qqYzUoT03-ZpP%_Y;1}yN2Yv87N3d^hxkB<<*O_`pe}XGj zZ&NwQ>b^c%mn?F2(>vYZ#Lp!-7X>su7hp%>P>PK3rGo?d=ANFOi04NW+YYdSqTn5l z*pk_a#n F64|{LFGZS+hqR)6~F$lxI zu2Pk>qB$N(#thZh*YEjKXf|2^s73F_WAnLLe{#b>d83aA{T@DB`8RTja;-SXt~$HU z@j%g1f(py8>s)tn`Gv1Q+o(D)h}8UR&ZH4P03A&5e7nCq2coJt1sc^<3Qx3#Nb8g5B+ zw^#n?kBPr{ynWn#S-serLtfA)sU^uDd3ZTBx_T)XJDuHqqv{SJ%T}QIDQlBv_Dxje z1AuevA6075QkmDMs-6Uozro^19=wZsTH2?nscCmO{M$rGpyj5eg#lWCPfQoGS*)>& zQ;3miy3iV4lqC_(wzI##7!S$lq8>!nf{YvKHVwKc$ZA*XXW;BRe97XBVky$>R%7_O zz|eUkjmOMs_WM2`4Pj_Jog}~9_ObUmpGo u8?OzR^UhUKX@yc_YQe+JsG_ORH{OR=N+aAmot${I7 z7H6|FI}-rCyt}O1osOvCvhx7IfeEk6lG|x>Z>vD};?ewUUg!8h+?|SyonQNF^c303 z^K?jCl%W^ETyjtM;5mzAK=th43J))LXg`#CZsvYrS#ep-V1Jspeksv*jM#26_wV{P z?v7X-JVoWdRI!`5TwGcrAS4{lX?c&lEtL7uv%hZ(B=O|wAkR&HyLE6bAFwhoetCMh zb-7YViZ?yNroD6{el;G`-C6GPF7$%My`jjlq~&s}4#-3LMn=oa%X>^iudjoizbMl2 zqUR^FQf^@$@~b&N7|&_!2SY^so)^4mJ75A9oVI%*CU$gjx|P{5>3U#(8P9h)<~RdR z*n%@5z*tmKQ33AXLeI3_
1H`eEOG>xBv1KL(dI1N}|S4T%m=@0j( zC>S>}ZefIQX%aDC=Mc#rk`YCc8-;8C@%N8h=n36HevM!QL$FC!`{& {`Y_GIrltgp64r!z4zK{z3Y8{ -lI%{56zuLD*%X0d{d3>Lj0blaBRWu-ZVNw{^4qCl{YofhJKPCr zY sc_Z{3Im{%WD-}mp|CqF5q z0RQiwUk`r_K9$! Y-NowNh#6gK8EeUbU YDtZrhj!K0`RYDz2zUW z>h63Rd{a9+ey)z!A}TZ+HPrczlBv8zvxW)4P;~renH^p(Rd#) Gb~P@?Mz zBg~r?3}~nwVWih#SHHWpoo%c3(7xHF^tfspPd}SS?8|(Sb*EOv&b57H?EEt8c)t%_ z09w$`0J}i)0!`(|g%lDIL{U?kmv~ >$&61A?E_7RQCin-Gm~&bLGe1 z$v16WOx32eNR8DVwgue}!X`IAD-rz?XZ16U#lH0dRjjByLC~9KUn?W?*J$PD^*WDe zJ1uJ_d}OSbGL pfI9TObB@Zt?buMIC=VVndU%Vh4+UWqSl3mfmF`IhxAiuy3#; zl{jKL%B9b%JavyL4$}+mBWB+;OV7c*ZlW1!; c{0%#;E(kgHgOK-k*kXf zUrm<`l`=5dj*}C=9TDD0Bf-Cz`Jv8#?&GD$&oP0&eJ+jnjAQS-XAv%j7X0*rI#`EC z 2(ojC6|P_sMV-&bAfmNl)ud%n7QN$ycsE1DIlH&E{PlM^vtvCpx5Peg$Ewaq2# z=JxdKTg8HSiX*7(!e3s-Fmt?V2(K_dhxa|&4*RIq4)?t8mMkqKkoC^ee)lzt;lM%f zTyQna6I1a$S}@BzS`5+1?dCga1+824!OuqTd}Z3Hir!DKh-K;MNmJ&MmdD4xg+Frp z#*G^y%5Q|OHjaiTR8~et#s&ndfPg?R2+Chy+OVIYK_I5lp`oF2q>&Jahg7n5qYea8 z$oEDF0{M -}zG|3n3mp zosz!08$(-tn2BrO*WyqiFOwd!=PE^+5UdAk^JP&+G;J+FAcPQhSdbIm$_px4JHvx+ z6iE6TH&RBe+Ru?g`5NO>Q*M2!;>rb@dY1dIkvDTJMvKxcrfa2Q+0BM>M+>zZL&L%x zcedwRTZ70XT`w*U>n=OAE_U{ZwPMSYL$S%YWp+MMie+jlDD3U^zbZ2w4W%34bvb&< zU}a~gALBBu;+>*yJS$qDUNJi})0-&Z#jM-%n5P|yT$!x0Z-hgq9p<36i} 2huK4J?hX=&C zvZ|^$4ITSlrdC~TSXlqYWL1GimFR-ga$3|&Rap-^cw}fn!2Q+WL`*g>FR!d;x-D3d z?SxsYNMAqFG?b(?$tXrB7M6k?o5>J;w)@sMbje71*%npT(IUMPUpkALeI+9;hzDKc z8T-$PYR9m?7uvbv``orGkMRaDef|8jrR2!jj7ZuLu(D+81ROeCrAHjJ%J{zi{>f=V zKG t0D=%DI9Gqz_||8;-!m;~1-PwttNPpXlh!wQSwiAbROA3BAvQ^7}IL z!R}|ezn|I3{!&~#=~SRHA&o~bQk0;yt@}FZ!s22v^<)iQR9{ob%IN55ZdTKl|Fw#W ziv5*AlYva!7(}|&M^X-Ru&S3A=UL*mW0+KhFZF0vusgoWR?g_PJ32ZdVRkYroH@Ik zlR8lcHz1iTou-XMnhu_XdFmCR`9HzcH;K47C *iM40TZI(k>JhdG}*rukY zN?_dFCv_LAbuCLt$ap^I$DD@WAH=7x2~Q@`;s$j(6>;V)t|lSnU-2o95kV4>Pm7^O z4}}6ouvV9PQ;;u1v9*NHK&&9sR-Q$CLP157;bUQui>ZHFos0+xx&3-&VL|i~?(J rUs>0%e zg4ZM;wCd^W>+9(;kK*!Qp0U1?x9h94HOX#mZZ=|!5aHZi=qm1a54eMmpZYSESr;CM zF`e8Q! $eq0gdCmr5FS)+E*u(FBafXa|(hi3S;S-@kvQY|?s8overN&Fmz>@Pi zZ2joZcoh(U0vUw-uOu;_QPan#dGfo-XW|1zlBoj4@}7ALZz4#<^;(ixR ;SqOU zY4|wY?sZ{#^y?d2d4}fF;DVQ<{vo %*J7(uW1wP zKclyWImjAQa*1I)>88zrUh*-vQW^fGa%QdHs%wbrbx5<7?$%1@Ff5d4J2*HD=WDDE z7i_MqIGr6?QkWfXO!7JHC8lXq+KiSM$uA?ExNVkhlah9 jb>e(w4V(c4p(+N;A3Qu__z*`1pF3mZ$43 zt2S#pW{bS! -jNk7f>ZpJB#s3Z_HZjWwr^Lxyn3&1C-& `K(yx>pp A_2SWygHlF+ z4k*~U`NF%2cN>z@($jZD_71uiSzyZx;MEP^JQ*NJDD5}g63atkONc85di{zHDzxtF z bTiQ;nMpM;XlTN17wKXusp06guOH`@Igp0il5Ze17{!}iL<*HS3 zIJ% 5!k;v6K%;lL>@)wn5gy_#+6 zxR;2{12hEI#Z5=JX@qnfcP})+>Jv%QlhGuM*pQl@j?%}bB7UZf)I5)=^zWg^)BlRM zrkOr0B% WnNy5&sftrv}y^SAr=iq?7QbZf%pC=bwWL BdXPvGHsf$B z4aCPjGFK<3%6EDn?{S5qeQ@o5k+Yi*J9RGtD};-S+w<&{UMj+QZwZ%-OapNeO(_<1 zwqak#W5024&?q;{ZEs1o^u=WCg3Qhv1qJ+?uS0oiQLY{hb9+PUD=V+HE;ZB~9LmA_ zR)akB{>H7g4jYL)&6?LL*`sf-qoZ>e^)(q@dV719ILGnWr)yYQT7n&^kk0%e|E&+T z>HGW-?O` 4AQ0E<@Erf#$My-H)}WY5DUE=8+LLpNfw5Tc>IJ*N 3 z?YTGYVrK_a-M#zw-Ix2){P1YxYRg9uo=_8d3JMCFVNv_XVboHy313m)K;*lLE2#j` zcLhaB(|Mik!2TN>+P|&(g(9R%W&AeT=BKD0W^%ZsV-X_i>TIC0vUHZC>aS%ZC_mF- zb*1@7Kpa>UzQc7gR~#RbD(bY5J=IknyeI$CKmr>=SZ~T6evX!*F{(wOn0y=?j^MXy zXS_SFN4e(3LQX<5R_l5S;L)pCb_RZat(X>T2a#O^ra_+c3RL7==z8!8(Q~#c9RgHc z!&x_ydTADx22aBv_b+eN5CT-l#&GR__lTnV75MCQCUV|(bGhW%k1wM*#bR=gi=z-c z=~Kx& lYgYPl~&~iakJTS*(Fm55; z4BGS83PR|5&!i+qgViyK0&~R)YDsCNKmVvo68<;$MM#0cp12`HJ_f#fP_#Wf5vecZ z7e|QT61)xRkQX5Jr#QBFHx_YDAV-C$6Ia#Rp^Rz})sxCL+<@QFE7DiDZXIYx&dD+9 zMOd9*%k*S^OOTXRk-+knlJcIf=^0yD8nHqHH*Sg^GZi}I)*E(GlIY=ZY9op>>a;a6 zM(8HK{v%p%mtY6}K1| z2TA`4d4tlaFEncL&X}4N<{l<@0LHZmN4hPB(gEnd*3Znu#B|Xc`^OluF5hK=TH=nP zFcjgZYv{lqfgu5g_^6{r%lc|3|hmRbkcxxR7j;;?b?jpB$WQVZ`8tX-_{%&e#iq zQ5t1jE|h3g*>xe 3fKT( z>6_DaO!`sYcOHKX^&b3Kd5gW|cKXP7yPt+UVwiOBbf{6E{pJ)Ov*Im@l(*WpS0iS) zZkpL-7lf~XB}E$Q(!|SUET2VrZQ%<=yt+9)>J|C4w6j}~l5F765NSIpJNtBP^%{F_ z``yBsmBAc?&ggHkksmB7{X_OGjwx>piAWVvC@ST>9;|UbJlS8h{|juwcruj>;&XCV zK^|3oEhzZDpuhs8IubxRegouU2TjeXa9a7tQy>j||1L9S1|aJ5=g$Ez0Wt))cEg9y zpYIWtJ;WLTn9ShxU_H0OaaW(D1`SG5UQt0sLsMMhe7MmS$1@C&>C{v_-B}7AQmfAG zoVABnDCInZ|9p9Crt$J@k)OwQML0z&CxOcvp2p{LwB?2KERiD3Gmh7B2NZmj>eRJ# zN14%yI`_JOfLqRNln)=O$P7{B?T;EH0H8UTtr#HUaCx{noxo *n!CKQ(cQO19~>0a-PKj&a=cSw)K4w_ zxoy_X&CLr9D$zeTKi^yh#l}9^+IqnA*1#b6KEGS{XD)hkkv7w#AKy@&B+DIlsZD~& z`4Cg2FED{3;+(j5WDX>kSUuYnGr}t&S z0|ixuq^7{Z**Ss7K0h(hV@h(NC!uGyAzd}(TP%3-Ab =%IHDas`i$0+YNkhMA17w>MwwBpmx0p^{(^Fh|r_$jb z8JTL_!cCWpyMPx}txr@~ySVV?^b_=@OMw#d@GU# s#rC;fjVThITD03Q6f9Z_2aC`3O1m`uC`X z`v(abUVqnE0X$z7#Kqu!KBuM?D!o%8Y|lfB#3xG36X923VA=*J xHjI2qx$E3x_uIlkM*8 zuy7~gAxwsHlLo~_fATm56SEoP-vE3lJa%KeY_l&-(qgjGc4LA|;>T)VPFP6D^M1x6 z?bV??sEvx89r}k0R8&;31*}wY@=P42C4RO(gy~VD=8};XX#;2`b+|H=xBByEiB2;n zc}CUT6|f?+`2$#C&}*uwyfC`LV5Cooh@#rsUVuISmi^u{m-3=46_v3^#5MavY6ni4 z4VzHCW5Hbz?Iy$dAUsUK9*TFrI0jWjHbnE lDsc!*=nj$kjTxQyWd(*!8#z<>e{PVi{4K|nwrVGQ)RRg+Nk*iTJS zX7Jn#@i850wxLWaC@2Uv2he=DjQUb1Ce$sz3_dJQx{U$}e_`sYwU hYgStzm>J(Cg>?=sFRDsTmY1b-bea{a$mfjF;23h7r& zWPESd!wF|)9NpYdAu{3v>2hM%-w53Tvh|z)`452k>vcp9X2~x$;_%}WDe$i$pA|M= z123d<=WEsgE=uueA^5nS9z0RbPj$~?WX#tGUk;f5dVHsT;}tzz>h+@Ib3O?4_n)=g z>CQ-STUlCC$x&i3Uic+^q^TC`Kk5RN!JJCq74j%sF{jdgQxhb3^U2DqL`YBHIXYUQ zS>u$SpMN&f@pIb4!vg?icC#^?h7TAZbGz(sZEfXiRQ0Wd_mJPy&G1NDpQ?%FBhCkz z6qFbpf!%9=O#&Da5DxOR>f-6%=1>U1x60!#C}NC^jB=M37h4me*XHN-{GnN8O-;gg z)PYF=L~K_V7hnmf^iNL4rQJYBcXn`iL_=fnR~mQO|E-P4)YjG20UGw5zwz5Q?T$!> z;Q}q1njlgR>54Y>zb9;WBxLVOOb?Ut-|rDl=l1hsDC*}Y3^M2o4|%nuqpK_RJNp8q zL@taUGXMdL)!hf$XKQO~u@lfCzzeBpL^7EM@eLgVj)F{d^n{`mKKi4$&x~8tnJGsC z<)BDJLHSv=|Hivz{g}b_*a?aE@qsPg)JD=@EUUn#x{|GY?>}>iP7mpd<;ZZ}0yF)D zDCQPGPm;;(5!?^opph1}KbZWu<7<`u*g=e)!(|Ira_?79=Mp zCeF^!t*xw<2*+DnGpgCKFfg|F_5uR}DAUL}-+4IQzVm^)9TDmX%J>Y7?~!X5l O(W7 z(t>VAe}fY&fKv8TnEAEP-}C*d9uA-m667)|DG-Cve9ooip}CEKRUz9-7_0m{%saaKbCng6zy%{)e7YDfV aQMW|sH`oln_0`zl-=Bq* z70g=qMv9)ywKUrM&l@;XS7fe6=W}&|*K0OnV&eApc7T(J I}jo9H@_z}f+P~oo(hvNpQ=6vaO`njNkJ=c{^(zq00p)k zpvX|w5O$dL!b|^O0_&N;{s6`P^uJ=;-$JUjt?m4)ckIjz6cpcvhokJOfY1O$3SRdM zUM;}Rt3jD6;hx{cp?>R=C43+_Rb_9{5=acgCgZVFFEb~Lnmj)}H0VM!lRJQ%=9C7d z{TQlNV#w@#V49Nf81+qBrXppPFRb_KeWP3905qP_wrgr?s-pv!>|k$?*ZE)#NWmwE zn*}8l0eA{YC4IHzc>f}shTUin4tE#Du|3+T+AQL<<$T+ATcW$Y9pe{JO$rWvB`0^s z1lVa&Pu61$;{E=_sx0kJvrT^glEO#>I h0KPlI~LMU4s%ohg=|wkPGr zBM`_uF?m7bA}643^}%_iHPc~A=!x(oC1{=R+TPuKlYBz%qnmHj_C@<85Q 3FW7*BleRQBf8p*zar{ijD}9Wx7DDWYo0zL09$6q~1;Z*Q z|I!d+;^NF~Y)7@}K8=2_pV$IfI#=5IIe7+Vu>7+Hcw&08(#N%jeZtnZ6c68!lQRAV z yF+ZudZqPJl<)I?M73LrPWMaBO@W zK(+||suEi*Ev=NC-wWrmS#x-_2p585%?tq+kxG5(B4Z>(exKLj=|?%>J`Ow>$o`}u zj4=Fj+W0>6I z{-sePc#bR!1A@ys-On9?<1v`@ALfOQ%Wmzik#yh~Z+dlzpPyeU7c(ZX ZcYxCnvPll z=M>nfvpTV@9?;=jRiUz D8Y<~j15JeEGAViY^6pPR>R|BP3;YN`G#IR-X3Tt+n3e5uL08lUG z)(ENW4?aGC=0&go`*yI$ns(^2g2iv}SMI$^);9nd(eM5&{s~A5vflir!QAR!jTM0n zm(}>MsBeJZeW=*a2m=EH*rPy4GMOmfZu>;plfd5ttg>|=P=gWgEKWsqz)uf1?JX^} zPw{YZWp|D+MzJEpA|u)D)>IJoKnH%?8O>}nKrfAv;Ces|mCbwob--jB6T$|Oo0@G7 zSblwb7C)){weK$^rC&M&{DAYbvv}tXE(%6i7K=`kZ+Lh(kSg5W-8nco^hhY5J}m?? z1c*%JB5m0H oVrJV5(Cn+Qbrn#NY{4dDIZ_lV3v^TC3QM2#V{xEBrE9??1U z*Er%5P~5~+e*0IOv8=Z7b+dkX&@@J66eG++U;RqwZB~W zDFK7sI^mh?QqU`6qCTvqi0_k6+#Ra*Lx7EG+en5e*O 5fw?pYci~F?o5 -IzNGCiqv#@XnzNbzN^-;gDky3O2+t;$QYisKH71~Cj)wBV(q*m 862zzCN#dR%+9(*cb0vx9L9An>VM zzu)}u^+OtD;4W4VCh>2$T}B}g76*DuWSYCWx~8Z3X=rG;xJCg|&r}M(e&Yt%3QV-L z;>Q&;z#=?egu`5ScXxFyf6u|ASdh5cn3#e~H&$0oZ1#ck>Ifv9L7}P)M@|+}xl0i6 zAOfgJOU)+{H?A5AEa-TB=mE0t28aqMKOf0>B2A>X;tC@R@jVb9PE7DnuJ*Dg-Ip2r zY1iQtv0$C^y{^H*ub_SaUmF7lha;PS3P$j{@Qr6m3T4F`Fjw?14wFDvfJK@Q-Py&! zJ0EKEC=QUpmukO)T?ou1(4O(MlH1W58BS|MBPp*urg$|~?*My-DZzvp85x Pej>N#DDR |%ZdYmU}*y#_Fwbszk=h}HxJB+AoV(#1p*Wx|GoAV zI;wjNQTd(ye#75C2} fPI5Rs166VnYN7r?Xj%PK1KB7>oRjb%h{$Y>GR4dW7ZLt=Tk_c z)|y{Ta3=@*1N7I-udSU8Dr;?*Ytv09d6raHSA&f4eEWxA%C8A!CnY2#EVY<+19sCM z(_nKm8Z#Yz3I (6|Cf&f>?UEAM z4t9HHV&V^w{|c&iB#gAsvflc@`vIsXxOWeW^gT_`FQskNv>fp5gU{8VA4pV0WSdjt zZi3rMR!WL4*em|~{H9+4Z~?*Z?0hBg#^aHbPXUJ*$i!8Zl{>AESwD@^zOgJa`z`t! z*|BOjTt|q0DX+BNudIFuTSsnWnBozL>I?BOSb|N*1SNsJvCaOzk_-CIn&wiI+|TCj z=Q7rxd h3o$ z^eYBXKzlA}>#vY2M1|Jp;^Ok~;X{cMY)r_l->XSZN=-$@ch!!u+yYj!ozfIn<8D?~ z7H=`|2whfMlkV*h 4gbJQVMtR%nUO! z6myhd59qA`lmqJL7f!_`B}DV;K$cM0kUF3H`KlI;6hdLFLw9NNs*7#2_LT9wgWosz zr4Q9k$$j^;FQ8v=t+mG6>stNJZ}!^?x2QX3ud3t(kJSsvlrGcdEe0Uq?9 |8yyCqdsbV@re?9JQ@r#h(`rjm^O{wRtKH1U-?Z0lSw-)B?3a%yb~ zbES2X?H?!+B^o_2(*ZHeD>sFG{NS#%GwA=jf;O1dw?A-_^K~A{ML9l`;5nhQFQO z`rO)@>B-(l z2sqdu2DAE#^dyy(cXoUDdAPXNN50HmdF% (7cN8oTUmr1@T7MHEg(;b#Z<;eYiHd3s3;Ts*E44kqm{y?4JS! z$i@J}61^WF&~R&}>j06d3;I=pf`YKIu>q3T7f4~p!o~)jgBTVdapbFfNd~J4`cd-4 zL`93r^%ol|VU9MowrK=aHp_R&$@8ZOg-ZP}bqC;8_M7@VL!bk1xj&=-OW{@5OU)>( zm(_Hnu(R`JE#qi{`ZVZ*8`g3^PhU|B=a_Qv!VW=K&U@Y5spyG)BQX6N{Lh?)MtV&? zWb`&fhTzwzfnIs-FFE9Y_`~dNNPW>CY5l)2>;9`E@#p0XUB|nN?ng5|acD``CGdu? zLll4qSQG*Un#bna8vR*qiJ4%!q@<)X=#25Z{#qC#oH`!^k_qHmJqpr;<$jun4+R5B zQq!};(%sM$+7kc12}>~aBO(V_H=s{br^L9BH3o3eT+o+UP!3dc92^{xSBlq+q{9;k zK}lN>>DQ2;e=C%Nq3F3F8u2YUIvP{}AY;hHU8He~NXX{^Pv3*)eR@@R^e9{bRQOE* z)Icj2z}%z#A0zs|=$y|jUAuN|49KM*sxa`VfByWrWy^oQCod)@c5wae6pa*}LHB1P z3yW#cjhMZ~l^#+cO8ZRp%83I|N#UwR7?^7j0ogbIdeStUQZ(>|xHv`Y@#$$*MFj>% z^NE;KAJhnRzuDOx9Bt1ncE&VXw}}B!wSf*GxgDTkq-3~XUVu!KuU|_dZ~CGZ@a$8- zH b!OG^ B&nCi}UatdlCGzn)FubbYi#}fck*J&Y?Vkwsz_a4m3?&qsEqZZ{X<$@`I z%T(j&27Y27UDz7B+uj2RkN;9a;?6%V1 80mY1WWqfG1YF7I1JJ3UZzth+xJ7ik`~eSi6sPelYk23}m)WZF-R z5uld8YxXC&GD6h!e;XmTK}F*Bt$*UM{L##Y-_PRN9v+79Vu0(Kc-gO~dtJt$*W-P= za-Su=w9Fts{H`46|87wKw}`2-$W;^jkS}n-K@%nfB0~wp&i~!kb}-=oX~VqmRR?~T zoN?nF(3Ed>p(|uL3r5S1_TOr}&!k|de@uUJcGTskwHP#J1N9~%xlKYya?i5bKOo>w z+0*Uj<3yAs?WAwGt+yztzt#JylCd?xZMt$aJQ^^eL7bY+&40_Em*mr>N&oj>hwT+N zuvXwS4I}^hHm5v#s&8|$iY6Z-ApzXScTL+3zU`krMi0sgnYK|2%;sE|kQiz6ol{hQ zdB~|l=YVzfth>x!hC$JTD5OL0=ygHo<9$Dh8_K&D1d~PSq%XTn#;Yln8o%FT&Ov3* zol%H`GA-aUT+-R8e?L555I%_iV*8`oY;HREg7YE!LFZR3cjvZ#bNorN^}2u$nJQl^ zQyk5d-I|P_A}IB3>)~vlvkPZZ#HhZhNjuaOn{8j-JDr^-mTfJvzgLIvxHOUOYP4w) zL|O-Psvn;=9Sd_gohm5Xc;-O6bh?<~X1k7NsuI@wYb^BhyPILkE(Br`4bI+no8x`~ zd12t*KC!{CPL5jd&lb4Y^PUErFOLUnoKak?1ZU)5@NAFOxz`?SHhqq}w72{QZ=BjK zt*L%A#&kCF_)??dMp?6FHZx+_PERzqC51~z3Efl$`R#+G{IfB!2% li2T&TJc|j-EJ6YmPcC zHRO+UsJS7Nvu0=dhg}KRtKD{kMr7GUcgOO#d=-W0tVNBIe?2iX<>=u2RaqR#*LRDo z1#ZlHaqGJL&OWAX{?R9oGCM0w>`2{8j*rTzrmK1`z$A^MF^$aJcZ+^6Qns1#xdZ1c zAw?6s)#YHj1`T80CB ugPpGVO)>!c!HE|k?8mtN`cI>{$y`Q7ZKT>AXk@acQ z&HhBN*2?I$-8XliHB!>@(^XVeo>%Ixw|eBaRd1j!npMfVD95xEI==+T8GvHo9W&}H zyhmao7QSlC;IaZdZJ_D0-3(f`IE)7}K^qxRpmABVJ&;&I)K}3mk`G1YAm@v>+K)Xq zxI7z+k{~EzF`crr^lptlf5{@DS88ZSimg%TYWikxV=fB&(L$#tnf3Aslc3;Qj0sp< zk%YF3)~UVYOWp{C#?tmd8HaoCQI(#X`tk9xr>7_IVri?Y n+vZoIR$mXwy(-v$sSqWXKOnHoB} z4*>bZ((E^i$KU;|;<3MntkiVa9GaZ=H=n%BThk)ZSFc@WK8(#nFOp7OY&DpC(azXe zeGqWE_M)qfLjfCmT@Dmt)pKBD-*?#(0BtR?Y$oiEJ3rORE_Pk_F3wLi)YTt@?hJF# z0*My7&)R)i--q=6y#n>1l%34@-1nE|L+gIr6(+FT*?aHa5Jpb)tuEYRZqqS%f(u^H zz8GuMH|rD!>yl}EbUa4a3K~UqF)Qlx;~w`QKR+N8NNa1)eCD#Aa@mz4Bnov5qXU}2 zGvHdpB?4nKP3;k3hDjr6vSwwy>eyg4=!ShZ#ndmOSl*nWT(A4u{iK@JbOw9aNDCT$ zYIa#xyUejjddT%DRdCn{x48^Dx&_WX0N`5Vw6AmJ-db2}0zgTCkN-0IsrJR$G5r)c z+mo4@3E*Sj qL$=>a}Zs4=$ZYgb))rcpr)81oB z%ErmbUnh;El{ra8MXwka@3Uv|=^_lTOO^(*`a$Oklx94_ApH6t8waZs+Tko}6wjr| z%!# Y#h&$@IwvHY z4DLl-DlyLAL}xLdC hLAbQ&__fb`nrAuLvafdU6#>p04ZSqf0=?ZBI`Ky}VIAr$1 zbR^~l`JTqnWX3f0#M%7RC6$(|?lO)}=rtY!{E1=%oEjWpa+d+Y4OozR0`I5tfvrvg zGyD#I33B%?XTi-b&;fLGdJ2ec?;trLAvOJ=DM`y3`x+bHtkuQ(NZ=V+YcWo`W>57& z2f9|=y{&_?%MnZC%k}`;#T~rj{L91EQ{E}R6^_MN&)pO_(~0@;%*!uCd<~x96jp&j zPdwF$g`g1@*jEyB2WPuIfPVx~eb2K2uEo+uPjfRBH8mW}K~ho@IKjX$tYY~)F124M z>b3+XX_yUUeyXbCxxD_|PPAPbt&3HRos)o+5cN0eiBzw1T=dRTb7Xydw$u{m=RZFr zr8u&M{K$hInjc@I5bjX>V_bI>UC!!~z@3Woq1#lYkh?}@#`M~Y;Ica6I-8!*F3W_C zXY2djrKdP Hz$o0 N((>A@{^xV9;u-c}zCi7Xjd? zh?vnVV#otjx^~>0(W|Qf2KJ@#HGWUys{|R{eafr@8lm-V2X2$jF7KdW#xq)Qqs2!A z;r2KE0mpB6i`aC%8tAz#>+mQ1&M7a?%zVts8aCC3gK`7*07ehvoORG{dUW?Lb508U uswbEZ gWI@&w2IA>ty^AmhAw|9=1_RiBOk diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb-attach.ps1 b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb-attach.ps1 index b0448d8568..d75a12fa23 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb-attach.ps1 +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb-attach.ps1 @@ -30,6 +30,7 @@ #@env OPT_PORT:str="9999" "Port" "The host's listening port" #@env OPT_ARCH:str="" "Architecture" "Target architecture override" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" #@env OPT_EXTRA_CMDS:str="" "Additional commands" "Follow-up lldb commands." . ..\support\lldbsetuputils.ps1 diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb-attach.sh b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb-attach.sh index 183aa6cb22..579284b6df 100755 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb-attach.sh +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb-attach.sh @@ -31,6 +31,7 @@ #@env OPT_PORT:str="9999" "Port" "The host's listening port" #@env OPT_ARCH:str="" "Architecture" "Target architecture override" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" #@env OPT_EXTRA_CMDS:str="" "Additional commands" "Follow-up lldb commands." . ../support/lldbsetuputils.sh diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb.ps1 b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb.ps1 index 52dc9ce0c4..bbfdf05c90 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb.ps1 +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb.ps1 @@ -33,6 +33,7 @@ #@env OPT_PORT:str="9999" "Port" "The host's listening port" #@env OPT_ARCH:str="" "Architecture" "Target architecture override" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" #@env OPT_START_CMD:StartCmd="process launch" "Run command" "The lldb command to actually run the target." . ..\support\lldbsetuputils.ps1 diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb.sh b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb.sh index f82e41d17c..7e6cee8fb4 100755 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb.sh +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/android-lldb.sh @@ -34,6 +34,7 @@ #@env OPT_PORT:str="9999" "Port" "The host's listening port" #@env OPT_ARCH:str="" "Architecture" "Target architecture override" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" #@env OPT_START_CMD:StartCmd="process launch" "Run command" "The lldb command to actually run the target." . ../support/lldbsetuputils.sh diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/kernel-lldb.ps1 b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/kernel-lldb.ps1 index ac7275db76..6023a039a9 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/kernel-lldb.ps1 +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/kernel-lldb.ps1 @@ -28,6 +28,7 @@ #@env OPT_HOST:str="localhost" "Host" "The hostname of the target" #@env OPT_ARCH:str="" "Architecture" "Target architecture override" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" . ..\support\lldbsetuputils.ps1 diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/kernel-lldb.sh b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/kernel-lldb.sh index a72176ac55..d684644cc0 100755 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/kernel-lldb.sh +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/kernel-lldb.sh @@ -29,6 +29,7 @@ #@env OPT_HOST:str="localhost" "Host" "The hostname of the target" #@env OPT_ARCH:str="" "Architecture" "Target architecture override" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" . ../support/lldbsetuputils.sh diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/local-lldb.ps1 b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/local-lldb.ps1 index 44de04f9e9..488c23ce38 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/local-lldb.ps1 +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/local-lldb.ps1 @@ -30,6 +30,7 @@ #@arg :file "Image" "The target binary executable image" #@env OPT_TARGET_ARGS:str="" "Arguments" "Command-line arguments to pass to the target" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" #@env OPT_START_CMD:StartCmd="process launch" "Run command" "The lldb command to actually run the target." . ..\support\lldbsetuputils.ps1 diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/local-lldb.sh b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/local-lldb.sh index b9715b2b5b..26aa1e2128 100755 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/local-lldb.sh +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/local-lldb.sh @@ -31,6 +31,7 @@ #@arg :file "Image" "The target binary executable image" #@args "Arguments" "Command-line arguments to pass to the target" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" #@env OPT_START_CMD:StartCmd="process launch" "Run command" "The lldb command to actually run the target." #@env OPT_EXTRA_TTY:bool=false "Target TTY" "Provide a separate terminal emulator for the target." #@tty TTY_TARGET if env:OPT_EXTRA_TTY diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/remote-lldb.ps1 b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/remote-lldb.ps1 index a3e61fe529..ad0e6ed664 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/remote-lldb.ps1 +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/remote-lldb.ps1 @@ -31,6 +31,7 @@ #@env OPT_PORT:str="9999" "Port" "The host's listening port" #@env OPT_ARCH:str="" "Architecture" "Target architecture override" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" . ..\support\lldbsetuputils.ps1 diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/remote-lldb.sh b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/remote-lldb.sh index 08e7c307d6..bce1bb33db 100755 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/remote-lldb.sh +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/remote-lldb.sh @@ -32,6 +32,7 @@ #@env OPT_PORT:str="9999" "Port" "The host's listening port" #@env OPT_ARCH:str="" "Architecture" "Target architecture override" #@env OPT_LLDB_PATH:file="lldb" "lldb command" "The path to lldb on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" . ../support/lldbsetuputils.sh diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/ssh-lldb.ps1 b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/ssh-lldb.ps1 index 3b9c31f799..c6e398faa6 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/ssh-lldb.ps1 +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/ssh-lldb.ps1 @@ -35,6 +35,7 @@ #@env OPT_REMOTE_PORT:int=12345 "Remote Trace RMI Port" "A free port on the remote end to receive and forward the Trace RMI connection." #@env OPT_EXTRA_SSH_ARGS:str="" "Extra ssh arguments" "Extra arguments to pass to ssh. Use with care." #@env OPT_LLDB_PATH:str="lldb" "lldb command" "The path to lldb on the remote system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" #@env OPT_START_CMD:StartCmd="process launch" "Run command" "The lldb command to actually run the target." #@env OPT_ARCH:str="x86_64" "Architecture" "Target architecture" diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/ssh-lldb.sh b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/ssh-lldb.sh index 65e59634a0..d70580f336 100755 --- a/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/ssh-lldb.sh +++ b/Ghidra/Debug/Debugger-agent-lldb/data/debugger-launchers/ssh-lldb.sh @@ -36,6 +36,7 @@ #@env OPT_REMOTE_PORT:int=12345 "Remote Trace RMI Port" "A free port on the remote end to receive and forward the Trace RMI connection." #@env OPT_EXTRA_SSH_ARGS:str="" "Extra ssh arguments" "Extra arguments to pass to ssh. Use with care." #@env OPT_LLDB_PATH:str="lldb" "lldb command" "The path to lldb on the remote system. Omit the full path to resolve using the system PATH." +#@env OPT_LLDB_ARGS:str="" "lldb cmd args" "Arguments passed to lldb (versus the target)" #@env OPT_START_CMD:StartCmd="process launch" "Run command" "The lldb command to actually run the target." #@env OPT_ARCH:str="x86_64" "Architecture" "Target architecture" diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/support/lldbsetuputils.ps1 b/Ghidra/Debug/Debugger-agent-lldb/data/support/lldbsetuputils.ps1 index 6467183c83..9e2cba3bba 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/data/support/lldbsetuputils.ps1 +++ b/Ghidra/Debug/Debugger-agent-lldb/data/support/lldbsetuputils.ps1 @@ -24,6 +24,7 @@ function Add-Lldb-Init-Args { if ("$Env:OPT_ARCH" -ne "") { $ArgList.Value+=("-o", "`"settings set target.default-arch $Env:OPT_ARCH`"") } + $ArgList.Value+=($Env:OPT_LLDB_ARGS) } function Add-Lldb-Image-And-Args { diff --git a/Ghidra/Debug/Debugger-agent-lldb/data/support/lldbsetuputils.sh b/Ghidra/Debug/Debugger-agent-lldb/data/support/lldbsetuputils.sh index 67f5920487..a7f65f2b00 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/data/support/lldbsetuputils.sh +++ b/Ghidra/Debug/Debugger-agent-lldb/data/support/lldbsetuputils.sh @@ -19,10 +19,10 @@ add-lldb-init-args() { args+=(-o "version") args+=(-o "script import os, ghidralldb") args+=(-o "script if not 'ghidralldb' in locals(): os._exit(253)") - if [ -n "$OPT_ARCH" ]; then args+=(-o "settings set target.default-arch $OPT_ARCH") fi + args+=($OPT_LLDB_ARGS) } add-lldb-image-and-args() { diff --git a/Ghidra/Debug/Debugger-agent-lldb/src/main/help/help/topics/lldb/lldb.html b/Ghidra/Debug/Debugger-agent-lldb/src/main/help/help/topics/lldb/lldb.html index e56238173a..fe570f0bda 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/src/main/help/help/topics/lldb/lldb.html +++ b/Ghidra/Debug/Debugger-agent-lldb/src/main/help/help/topics/lldb/lldb.html @@ -94,6 +94,9 @@ python3 -m pip install --no-index -f Debugger-rmi-trace/pypkg/dist -f Debugger-a lldb command: This is the command or path to LLDB. We recommend version 15 or later. +lldb cmd args: Arguments passed directly to LLDB (versus the target). + Note: these arguments may override user arguments passed to the cmd. +Run command: This is the LLDB command to actually launch the target. In most cases this should include "--stop-at-entry", since this will assure you an initial break and a chance to enable your breakpoints. diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerEmulationServicePlugin.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerEmulationServicePlugin.java index 8a81cf73a7..8b7dd85b6a 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerEmulationServicePlugin.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerEmulationServicePlugin.java @@ -101,8 +101,10 @@ import ghidra.util.task.TaskMonitor; public class DebuggerEmulationServicePlugin extends Plugin implements DebuggerEmulationService { protected static final int MAX_CACHE_SIZE = 5; - private static final AutoConfigState.ClassHandlerCONFIG_STATE_HANDLER = - AutoConfigState.wireHandler(DebuggerEmulationServicePlugin.class, MethodHandles.lookup()); + private static final AutoConfigState.ClassHandler< + DebuggerEmulationServicePlugin> CONFIG_STATE_HANDLER = + AutoConfigState.wireHandler(DebuggerEmulationServicePlugin.class, + MethodHandles.lookup()); public interface EmulateProgramAction { String NAME = "Emulate Program in new Trace"; @@ -299,7 +301,7 @@ public class DebuggerEmulationServicePlugin extends Plugin implements DebuggerEm } @AutoConfigStateField - private String defaultEmulator; + private String defaultEmulator = DefaultEmulatorFactory.TITLE; protected EmulatorFactory emulatorFactory = new DefaultEmulatorFactory(); diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DefaultEmulatorFactory.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DefaultEmulatorFactory.java index 817fe702d9..b08a5bdc1a 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DefaultEmulatorFactory.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DefaultEmulatorFactory.java @@ -25,12 +25,13 @@ import ghidra.pcode.exec.trace.TraceEmulationIntegration.Writer; * The Debugger's default emulator factory */ public class DefaultEmulatorFactory implements EmulatorFactory { + public static final String TITLE = "Default Concrete P-code Emulator"; // TODO: Config options: // 1) userop library @Override public String getTitle() { - return "Default Concrete P-code Emulator"; + return TITLE; } @Override diff --git a/Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/TraceRmiLauncherServicePluginScreenShots.java b/Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/gdbScreenShots.java similarity index 84% rename from Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/TraceRmiLauncherServicePluginScreenShots.java rename to Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/gdbScreenShots.java index 07a49cc174..440043be38 100644 --- a/Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/TraceRmiLauncherServicePluginScreenShots.java +++ b/Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/gdbScreenShots.java @@ -15,9 +15,12 @@ */ package ghidra.app.plugin.core.debug.gui.tracermi.launcher; +import java.awt.Window; import java.nio.file.Paths; import java.util.Map; +import javax.swing.SwingUtilities; + import org.junit.Test; import ghidra.app.plugin.core.terminal.TerminalProvider; @@ -27,7 +30,8 @@ import ghidra.framework.plugintool.AutoConfigState.PathIsFile; import ghidra.test.ToyProgramBuilder; import help.screenshot.GhidraScreenShotGenerator; -public class TraceRmiLauncherServicePluginScreenShots extends GhidraScreenShotGenerator { +// Class name must be ScreenShots, and topic is "gdb", so yeah, lowercase! +public class gdbScreenShots extends GhidraScreenShotGenerator { TraceRmiLauncherServicePlugin servicePlugin; protected void captureLauncherByTitle(String title, Map > args) @@ -47,7 +51,10 @@ public class TraceRmiLauncherServicePluginScreenShots extends GhidraScreenShotGe runSwingLater(() -> servicePlugin.configureAndLaunch(offer)); - captureDialog(TraceRmiLaunchDialog.class); + TraceRmiLaunchDialog dialog = waitForDialogComponent(TraceRmiLaunchDialog.class); + Window window = SwingUtilities.windowForComponent(dialog.getComponent()); + window.requestFocus(); + captureDialog(dialog); } protected ValStr fileArg(String path) { diff --git a/Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidraclass/debugger/screenshot/TutorialDebuggerScreenShots.java b/Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidraclass/debugger/screenshot/TutorialDebuggerScreenShots.java index 18e61664c6..f6a77c9b9a 100644 --- a/Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidraclass/debugger/screenshot/TutorialDebuggerScreenShots.java +++ b/Ghidra/Test/DebuggerIntegrationTest/src/screen/java/ghidraclass/debugger/screenshot/TutorialDebuggerScreenShots.java @@ -18,6 +18,7 @@ package ghidraclass.debugger.screenshot; import static org.junit.Assert.*; import java.awt.Rectangle; +import java.awt.Window; import java.awt.event.MouseEvent; import java.io.*; import java.nio.charset.Charset; @@ -26,6 +27,8 @@ import java.nio.file.Files; import java.util.*; import java.util.concurrent.TimeUnit; +import javax.swing.SwingUtilities; + import org.junit.Before; import org.junit.Test; @@ -277,7 +280,10 @@ public class TutorialDebuggerScreenShots extends GhidraScreenShotGenerator } })); - captureDialog(TraceRmiLaunchDialog.class); + TraceRmiLaunchDialog dialog = waitForDialogComponent(TraceRmiLaunchDialog.class); + Window window = SwingUtilities.windowForComponent(dialog.getComponent()); + window.requestFocus(); + captureDialog(dialog); } @Test @@ -382,9 +388,9 @@ public class TutorialDebuggerScreenShots extends GhidraScreenShotGenerator Program prog = null; long snap = flatDbg.getCurrentSnap(); try (LoadResults result = ProgramLoader.builder() - .source(new File(module.getName(snap))) - .project(env.getProject()) - .monitor(monitor) + .source(new File(module.getName(snap))) + .project(env.getProject()) + .monitor(monitor) .load()) { result.save(monitor); diff --git a/GhidraDocs/GhidraClass/Debugger/images/GettingStarted_LaunchGDBDialog.png b/GhidraDocs/GhidraClass/Debugger/images/GettingStarted_LaunchGDBDialog.png index 2d4dbd089d8c250d98ba2c7fcd4dbea1d493fe29..fe0b28a4a9839cc7631f99c98a61e7320fd485b4 100644 GIT binary patch literal 18531 zcmcJ%by!s0{x&`+iUI=|fG~upAdN`3v~+h#H%Ln>sk8zT(%p@8iHLL#9nvs#H~iM1 z=Q+ p^ z4ZISnF2e fPrL#!$2SbCek_ z%!Uvz1jN;evs45bqQbO^O*He9n8#FB9iaJ9K4Bj*{k}(tWe~bTFP99oI=&7~EyX?I z;%Yv2=UbgC9V$(%JD6HsJLfS^yk|U~o|);&z0Zt}jvhc4^;k4yq>7Ibas&CpD#Xvv z&xkvM1ODBj_)73T_)&NVm6Mf~mApEbjnOhbU_J9|W?UrbV*j{U@hdOaNnI2F{RpOV zbc^?1Uh=CQLW#y6&NB;-Q+4j3-!T0cSE&9 Ad9q``SO9Y(AkmCkrd1-(eNX<_8}{Wu5G*%S&^%;9HC>iJ91d?|EU!Kw}l7i#!oH z+s g>p6;E}nYd$8290vvfdihz{7b975mVbG%CDMVgWr6lvF4B2 z$vC~)xdlxU|JkVP);DA<+Odib#+JR)zbe+?DP;MyunxES=fLU8;U$+BO(=uQ<9Y9= zb^f&t29Xxc4su*4r)W@87LN|>28;9U;ih+=Wz6r7Q#Ej3Hcr|sH|o-o (n$f7yMx~}6SncxwN;FK1% z^|cnGz@6Or%DzI$U8upf3L5vl+_IV7A~JC( a16yE8 #e39=&-PRLsvi#)caz$ zYKFnvU)>{Iv^YNH3 v=!Rf$8X;h(pO Xkh6Uj@nG6!(cs6e zeY8EL4N6Ot=m9NyCyCC77engNxa!#gP9r!i(a#-*&Wi6DJG<~ng@13zpM1%xxivFA z&wM`u9iKs_!3hmIy|cEglRzrrORekeuVLriiGdv6%F?~cU#Sh2@2ARFYIt(_rnzlg zUKjE%uuI9wVuERfTr}B@ew5%R13a~)q@?JpdGDo1{pVn`#Ss(&8F}WkIaO!fTmyl; z3eOrTx(|U^V2|KHAd-!K;H7J &2+gfpKv}h#b46Zbd%V16p{E<2p433MA)4z=*6Uzapl)(~HqB z6QxAi&%oeV2u8M0<`WiP`nGj-m3u=`va**gnp*<#2U1S GM)7 zN?e45gnANq*4NibUDt{eJuhO6J&qTmLisM E}3BO|r7wMx0la^3T7;c9V+C)W}( z*51Keg9z+4CO8)JtR}0Ag(afs(=!SSt |q 4X=y3x@_opwhc08U!DC?# zHJ_|zIrdt3Z8M@)l8i|4Cvka?U>=y4ATUyv6PP`nBfWfiHz*(=#fMJgYj4BqaG}%d z*CvBmcjydF+u;iZKJViiSH{X|EJN 5Hjyi&j-nMB;qB#~z5!aM4V9@uHO5*m!Ac>owj)y*t+eHW7Om!oJY* zFbTRs5sOGWHR_7(s}c6_s88X8yiHy<6)b_Yteo(9UYtcxDMXk~Ry(AgMCo{liM#=` zG4kre530ywXjoVxiQ0`+7gg@OnnvJA%5;3D)0aBXeI!`LDP@tJ5FMRWt!PDUI{r1k zrslLgl4dwht<+}jheD=w CBYMXX)*)LUT_fc*)c(G=s#o#3Y5$Y25&USb zM_V)fCHk4LnZ>RzGSSc8QH#Su2$=kg3Yi(*Hma7klF1-&31N#{2A{&iFOORJM1+JQ zKD&>8%lM%=4S5@jZIOk|%s_DtC1f@k|7y89l)pNdeXr|igsl(qRviT#ZE0z-ZaDv1 zTFNvT$;H8eoS)}#Hb~M}$o~_d>h1DVZ+Mr(;6{`4MFEPCzVTK5of6_nB!Pc>9!;vX zwb3&R!K59 LT&@wC8iOF%E`%>s^@Yu>JrQVn0ipCa)W3 zeN6x*#)|b@uLqhxTlktBPe@Cjp^Wn96GB)t?%3w32?w_4ne!->MG|shog5h5Y-Uxo zD X+s`s<5dw>i{rK^tm6g@O!2t;gi9Z(c-F_3 PZCXc8W)*9z@K=`t<3N2ZP~H ztr(87NE#JRF0SERmC)GZ Km nJW@Z z=m72;g;cE2(??3uaqN9*V&P!f%g1ZqWzB2Hm(QY{X-eR6{qg<#{NiE)pJ#&012(I; zu!qd$jtNr>wRLs(?%sX={CPwVgOZf;BkPwAk-~v^$45s`$jJ?jjYGlpEq2DVmp>3t zF~XvI_UsuQT`-Hcw>KJ;FhbccF_9G9k-(g}wj`Q~;o(Ce0#I`jxt!<&&50vE fY~3>!*fWqF2CZ< zkR~gaLRkBH=2};@s@9aTw%nw1Y)p={vtoGUPnf(`y7_Q{Xef!{erIQ= FpWC13go%Y;0_T+$~4QEp@tsJ;|**LHPhp+hac0cU;{kb+&&UuKh3 z1LcyXM#_aT0F2=jg+%PH-%fp0FE 6^Q zP-K#_Laq#)xECQ*aI4EU_(QK^-4Lyn+-jU$iOW9XX~G+?#SXw;IBuVS3rjcrVm^=o z?ddBa%is6sJA0Q2e-Ttl=3SurDITGLI%(+ko8qv;SEhquZ2j&y8cz;0PUN>AcHs{d zXnl!{R8mwFvQ}#!{xXHB7C%K&?lLFE8KXG8-o;F?*31<$M6FeApA5rWctns)lP`FW zHF=-6uv}P|M!alMPaQ2?sMY3IoBC<$iJlsVW)6RThH_#KR}%b#=AGD~pbtaGoj3)5 zrra4I0`8{==>)UiKimWBLUjxL4d8ly6IGoRSvsZOsMQ(i#X+xMzrMob;}@h&_Vj7y zY4%}~>%1t5vyah{;^pS$g>^NG^X2*B=%Xq&cvJw|3g*L@ei(5bF_47Ym6@5wCMG7* z($ezs@-JSzRkp4rz{3*>$&mJu@!H4~m%2H**4omtoiRi$@tJmee?MK4GxKm`QlchJ zQva5gDRFGk2M)W%t)91M=jU`*aw7qE5dogkqIN02e!apQ=A ?ibyo!USrlgR#@5#kp*3{Ire*ZopQ`gGSaJJJch#k-C9*fA7j!!u$ zY`AF0Ypct~BF7dH6&=u^snaROmVFa9Rn5cAz1C509vBofhzMp|5qWj6Hac&}nSRtt zuHGgN@OiM-*)H%Ll=y*-J{ZON-FUVytd{Z_j6MZrSW+XX@t*f6B$H~Yu!uQnwQHky z)HKZlzbQw^swiYgnkw8>I=cU2H7R159gAD-3Y}^EC0MfHg9rr&v@*_*Gy(&$jD4Jm ze*sHxu>x-$X_@tOJ>U=#JwGl-iuGl9_7y?#M#CmKn{wT}Jxz7EHX4pscQ9tY)*YLC za#xW7w}LE-j)?nBShqDJ`de1@CCLVl^P|@LD=RAzrIzDg(G<)Wi*(}+Pxe;qI{-w? z&do9D|G>0igxp>1iTU>J8<-#lfFP- gzXH^Ga#eN_;lPh=_=O zgp&5~nWHsg;`I>3GKIj{y2r;|e}<8PMc&cbd7sIQ=|2h{-9XknQ_p3^fde$ic-kY@ zGFKcM8~Cdczp`E%H2bw2zsGUZnDF#~NJth5wTU33;=W>sNaS+mbxud6=HegrL-UYV zkm^y{RW|l@k~3U+@|*^-?32e)YhH5NtlxMk=VoSRh`Ags;5l$02{6#nBTTvdRTMoB z yztpG%icFsn0t?+_Pn}nM1D*lVj zOzK#pAH65%g97FTKG*vQJ>izwHzP+P$wWxM#}Yv>le}0Jzj>)Qlo}lVDh#8RJC_pA zC#||q{~(`2>Bx$R*DZR}@2+9V|8ZiaFaPPZ*~zhwQBj^HppVI7nqJ<_ob+xG$PwCS zqgrS2n3o^PQVyrisYw=!$s<&mWaLnD*4&X-rW$5=8%rRld?z;NG~0LR=Pk4pmW!Nm zc__7R{QEw%VhS|KbwJdN7FiC%2XQ>Y xzUe!ab(W4$+75X|8=-ZOJG@^%Aw zB_br|az-9h`STmH`2~4Ig1e{3KvtRZ)Jr=U_;i>5&~ebn;U{-AeBb9 e?B z0l%S0A+JdO{GCv31ay4Xga0_$|2K6nRApI73W1nC zP3a~9YvDdPlk8maGClAEUfol*#|J(^(QVpl4B#J(pyEy5036)nTHuBk6gtZ{ZHfZP z6R8cL_HV(`74%NBslk905l$-U7YmN`J_P1MyYEI$@d%lP2@V+Bf`GD=n3$N6(PFZo z|A>1TUc?L22->`Q9fT}|mHGWS@-6(zQX(QE^78#%U)Wj((UMWcQw?+-ssvH~alSml z*uBY08^KNm?|w=(Rjm!=@7@~e?e3PwL`e$Hi?!7f%E`sJgW_)S{%MrP_fCwMxVSY0 z!leS;P0oSmx-9%>4x` 1Z0t~AW)_tl9UTE%<};lJtND<{ zNRh5_cbx9_+1VLT`tr4)Yydc@9iN?@J>FdcRHGgcM(|=+Tbu5-x=#%L^M?;#fl1 %vdhDGrF2^rZtA6z`Vp)|33)erC8yQenL(Gi&57YY6u z{^g77#o2LN_|s4rTS&{l5M0N;6k%RoUi(plzxXh%c3`gyndjxXlZyl;HFY&j*RL#s z2M?lSV#KtMmQzDxSuHu;j<$f%EnWmn?9Eu?yX!qs{E>%KuAwbmdy<>X7Z(?R%+k}+ zra47bOt}QMPz6t=(`!~Xeo@|d8);g*vsT*EuknzaRxO?-JK`BdyUsK zC^&dw5|G&a<-XKBX%#KtTB+9ICGQJtOx7H>Jxw%l81=(v&^FiyPfUKdKV70$%)4y> za1_;ePuVxa7Ck_?J(Wo?aBxXQ^d?`=RTvvBHFl2O=XzyGSeQj&vW{CfL8F|P#3nF= z%IcLz=y7K>Qn$XKx*F$B@3dczO>&j>G;i$lUQ34YQ@}}!*e5mmx}N7QEi7!iRlicD zNcA{BLEhDp8LrJ*CeI5u<%)0%6RB`&W@|l%oZbf|)iDVR+w-PQ8xu38>KgZB)oqfg zRD3dqwEJLWUF2Z?NI6aO0mtW@g+E?IS!%LO7qF7w{89MOW-p; FaR%xcM^z`&(WpP4#Vwn6rt(G@8d**(# zxZuFR)N#vd6wF( t +S+TR9rkDG_)s(fa!ZnIi3>CabqIJ zlUP$%(K1V-2cr16#LQwt1@@U%ZFX&K?boko9%n}r6Ph+Q`ND9&>LfEkh#6Oj*;b&o zgU`7VC@+X7)ww_P{EL$Lft?(I@gFfhqlXCsAp9To0P^+t-K|Dm1`qMn9e zLS8-CVWGT2 +Q#%8J`|ss~#vfpuk2bbJ;h`3Cs7xB=|OG5ZBn)SXRb7 zgo%Z &X>*p8iy0~!WE-fy~hx4Ha#xj4=-v^5YxFQj7CMKrw za`RS%`ti5L5&d`t1%*g{_jgc~XLm;xZG~Qt!s;(hRvodQn-9@`eUE7OSLq|BpQJ72 zbPm@L>kV(I?0wQj#cHL};NecjZ-TxJmU-{}65zYrW7ivY05w|&`Wk=Eg$65WdpH@q z^WHXx@{Opu)yvQGJs9buai71I#e#Aww*e8QNpyct^ ;mWcbd@aEO>qdO 9~{s9e#`+(Fv{wPH*ikj2pH;^gQ^YiCR zF)?5k#xUypRaS;vgI#;|q$GR({R@_n*KME3K{*6Q+gxkt(sbOQ^Ivx;>n3cB;;&iJ z=ywxv%-_EU`OWlxPZw~Ym=yAg_Rqrp@8RGR2ILjbtdb%Jt>Y~i;dhU-IwUi6f~&6K zAh{mSTifIsv#VpEi}j)^Oi4jr{!>hh^KvhlBWeB(a@p7&lqW&w^8VKVT&?*-Q7ExX z%z$b4>C-2xsamQG-dp6dgr3|)q8qY}vM{sr6bE9#{bg!XL4-mUM7H9il3;i}s88>m z&14B(-&Eg4(ob1W#ZWAO4Vpi5sD_2pkcIj!bYFCTxqV-tz0t362#lg2@TG$T*&_%H z5sK)GT=k832Yr`MmYbo8|M7}UlEN03mSp1Ciw!$I1AT~zjlIMP+IrE {<1JscXM+C6?WYbG{nHHa$M{rsCO|iNc-{ymM?vL=6yTASutf_ zV5-taA5dUstavUb?Q%2Rs7U~QfN*t_ylDV<^LtdkIcH!Z<#kz!k4mWycd}Ei_)4o^ zQ&ZC!Rhx&0hb9`3-n;wzJkC4wfc>5vZWfl21>RFkE<1If)CX4i)YR1N+qVe_2ny>@ zs4+f~Qe6rW49-kc*{Q{G5 >UMS;0*D@Q*bcjMOus7eTTZ`!WqYlD_L*(g>bpBTl~|P0QXJB_hH>B%KiF!) zlWc{jO0O8z2B;a0Z&B#f%U*epgT5d@7&GFGyL7Pr>a) ?{lHN)a~V z`VJ7pgAy|{e`r@HbZ&N5HGc6ew=^zErW?G9tjndHg{?L*ZE`RGLka;XZaJ`6goTAi zM@R8ghB+n4)mfRD*d&1$>=1i>hh6DS+zulfsspYXi#q;C>Oazo-ME|RqAIzefp3`q z<;z E%^!hVa^O`6um;ZIwx%B=vR}sX~f3ijTgiM%E3dzX#szhQvdo4 zl9~;b{HA7BBSmC^G!5q3^=?)2G(d4hNCy72Kcm-ZTj+=aTxuP#ocVd7)slynCV)3t zwkM%C@WFQ?dckezT3%kJ*Q)N717v_!t9tMsLrSZe1PW(&Gu1Sew&1LQ M3Id+{=lw^*g`D3!EP*^XuvZDb(&L~YQsVzd+9sK341u(Jzrj_)3MBpp z@&R8OQ)&Rd|Idt#`PKn30i^NSyt(ZATUY4rX?^SMyDKX7n;8BkDi9bU0Omg&>+c6% zWkJh5gsO8G-`M5+RSo~I@BWtqCnK`Qy_KLRYnABb dlx9}+2!SzZL}|G dKm$0W15}AxqHOt<|9Ws}T17hCb(ZB=iydC+I6h!?_w+@vEk5*4CRo zKBx=35$o*<6p~GGadAaOMW7Rfii-M#f}$iNDhgj>V65QNzqFr%xUDAG@iONd8((nZ z3=MKJ|C6720e;rvW%N(lLkjD!{m|0^cv#hQ6EhJhWj_1muzo*okE1PJ01D&)+&?Fx zyrjv<%q->n5EOgXraG7wLzruBsS=2RPv2`02B+cxbdI5)lldTPVQ^3}!Ib1L%CJ{V zHkq~a^!tGQ2O96$GnB3NKVU=N?!e(STo$W7u2cf-4V3FQ%S`&dUG-9m*x`{f (E2z@D>Kf?!f`*rrqadQ(QD*DgT=5bN{Q&oJj0p9|f3MWfoZuChy+8 zW9CU4eKgwJ)+SaJ0D?CEWWb-kAz`PW^j}~nObftHKl@*>qpbK(*pVzqc2JX*@Dxxm zuMtm4O|7wC5vXbBMHwtf9!dtli)3z~$Gfqy!N|ziuB7;PN_+(;9|VJjZd2Qt{BsmW z&Ho3KloM!SLH{CslNLx)TAl0g`t<`o4>v2Tg33zP)Q;q)ziEkg|0Hz(leE&~gEXrC zS@HiZPP_;HJ-GYep%+<$JdzTsmLX6f;99@2R8D^aK;!)o*T~p-y2@^e9+E_zoEucY zayR8QR2|rjCODu|f}wcpEn{!Fh)Uc)UOe6QlmnR?q*S;v{Qf~?UkL&;HQVy9*#!Qd zO~#rwi6aOZ!9-G7pqk5SM01sqiph3ugpslNb5<>shN2`O|Hg~>D`g3c<~&=_WC;rk z<8?pbuAKM^)>IZck}LYP%LaEKr6T8eSmm4Tl)Ab)A{Ex`y95L)i;E&LpfSH=7cS9p zp&9cXaRoaMNJzT9K%4w;H0`S>F}=puJkS~))cto^h)Cqa8EyYh4&qF1?uH{je-r3W zQ#Jr+Y|yjHq7rmqwCh}o&p!kNRBKSMV0DN|NWeI3pLErHVYBAd`+kel3@_8Chxatd zFAKbJN4@si3*xsCY}QlU)p$Pa!j$wFa!4)RJL(6jJ}Al{D^-buAFD`kMW$>)pY3 SQ{AoK&-y*H03V;No#T(5!LHudI9ndg#oA+`)P7Gv97Z)i#6- zq9%P6oOL~2uZR?gcuaI97};R9078G_bJM47qjQA7#W>yQv(rG%Y$py#>yYB&;yh^y zQ~Do>--J!UU;SJoCc{T_?l)B{gSFS)4T()QYz7=CU$yuV7ncS>*#MrJnAmNpn`-g> z-3dG$__xhtR#4xn2grLGDZZ(2v3z;i@9T1Qv< &_LMO%Rj_4%`@7oTmo zkrKC*1dTZ0`yKyA= !w88%f=-Jd}TiAywjD1sQ*MJdnZ>)W94776Atb2OzV+ zRKP1wc|uFuIX=$C$S8MQH512S2gn<8$b5xEK_jul3y_?>jBj>7KY{<%fY4L6LZ(OvQ5(zC zBWYC$RrD8H0vBUKFOYLL>n_aWaMB6jWxC-28#Xq!tLrInAcaLl)CU9Z#-ev6@Qja+ z#%LC~9oyoio%T{GWRy{PQ=eT7y7? ?7zfxZgiak9&JxD#2S8_Vrfd;nyQwar? zF(r6&UzGUrh5%-h<|Rxp5B(9uR8Ahbwsit)vNGj3pkdj~A*Id$l_Ik|FO`W5(}$ zRZLd&{xgVHD!oIRHUC0h{?38^{lKq^LX>BiX9o_!H+zIp8Xs(FM#N$z#Gt)p{1xL2 zf}2>#UJD9@^_{R2K=1!d)OsI|RA@mU&0&T7NcoAB%sTfWnE$ txvVBCLGBZe&jB$AnqV3c{J3U2N+7+-`)2DG-}#D6K|z6z=Q&I0m&_gF zSh0?t9_!%(;``V+#DCT{9zMR)+Q@de3~#b$Ha$ISps=o* ton2`~#o^Z0uTVLoN2Lmlvj*e8J39$RYyf!DP45SG#CNRjfCPc-Yrb+; zIo&b~lT3<`X^+! v0IeH8%CU6#EwbnUJWy^Vg_`N@EEiuxte2B zMS_9%@R(~rF$7gg3h(Kh=h=3vy~ZS<+YJ}{g=G {4|Gm_b~i*Bw3Ux$d# `%khv=#Y_E7`wXmVPfW8|DfRRTz1M3fZEIJ0|2?Jmu%q;d7M9cm4rBDjCyy-0G&St!@7h zOf57tG-Varvm+aP{3uXlcz1q2b}Lbf!P+#-v@x~aD7^l5=1Q+|jy!wxXckCGJTKsn ztCt!{Wg8I0=Je+I+naWYy4DI %haqBPb}i^7Z4! zf~l~x24=pL;)6g|B1SzSH@CC>)nSkX20hR=KDM>-3Z&ybsu*%mi)_o)1E2=U*qG^J zX^ M41vyt{oz(cu696sKHBOr#M5dG{NIsOt@0&Ds^^EL`bU~}-tHtOe)NGpS zGjZ|`&3ZRyz}J9A1B9g`iouvakX5tHL=Gr0=Tbl)R{GOH$1dFz%hDYzCfb6rsv>$R z5|FDgY583#+Q;=wkTa@m1|%6rLV&)o0;YgHEiEW>($=h99d8z6jGr?x9akH8+9Cyu z4hYUYTG5C=PJR2g+#t&M+^7KEp7IqVAl>kgD|_A>`i=$QB}5kYzgNWnUJd@j-zyY{ zye h`<$?ga(}_?W+LAO{uXCO>s& zcefEA6bi}WT&7Mn5B8zd^hWme3BQAk(ly*`uQ2WN`*5HB vbe^|H7XZTCUi_tp#YD(Bsd z2h@Tr^vDvUm=C2Qxgys_KrRCllhjdDR`!``e;R1CI3fm3K{MXXLHk2!C^kBJiVsL) zgJ#8AXAILKSKhJ7D2Q8Hf^=v;i2hC09>2fycxQK4O|yu^yu_K!y9LQdKzHHk)2E`M zqB*h(Rd^7GoARIqu)FMXXZC(_C9M#$`XsemvfD5B&d<*Se%aeAD P=v5Q4xgE(b zNQj4*p$UkM*Z0GNacdf1N>TPJK(J!H|7$xa2vhlKd7n=R+*JGlGU3bIps-jP@CnFt zb}p{cYGr>GQaTtl6%`eb&AJX;s}>`Go t(qQ8+8l02A5fIF414GTzq z?!#`)YBos8zz_=0el-62FM@i*&K#_NA5^%Jlt_mkI2kCWAZI%-+CJ;G|3=~cz)S50 zk9c^tfYgFK1VJL{1v(JVQ@_=e|MX*KdxBAPGSlqutQk`TNHi$4DJdyyYZe^*haU NMOtl0UkLGGI)iW zRkk2d28Og->Fq6OW=5@Z9`7_YlL+f4vIBVqw>uDr2gm03Q2vk%^sUOUAJl18z^d+F z*KG|Uj$+WEUjmcE2_VQ{3^DSa;ujVII@rcURViqk+o!FMSLhV$`A+hz_6hZXog!e6 zfII+v;|cZm_b pcZ8H|7$mXhN>27h0HpNg7@`p|RPkobrX{a2n zn?o?KH@Iu1HrW9Ue3KhLJ;U305#<%;8zU01pQri1u wd|^H%Er+m`{{DU|FmqI{s|($ZpeVQv$pVQW!!YRS!8!~V zmt3SvUIi|uz{f;wAbTzSgZVWGHDIkP`htOrW}t3^4HFOY3ELAo^l*VVLYBp&08rxg zx3}f?6v@LDg^shqbtf_8Y{=_{LFp(IZ{)y~Zh~at09Z+Y$n}>@M<;U%Z)7S%0qDTJ za%v)$Ed+CfL`15qszyQb@68(`PW$&aI0k{70?};`Ff5HS6GqTb1yr +)hxe0nn>aq?|ch4=OKYncb&42FSegC&^>B>dK5;*%7 zbG ?sYVkhsY=x%@Nu5!}Km5Lfy&qfs5)2=seBa=L8z)PbRW0%1g0<|yQ{geH zES(149smzBrf!iS^uDmLP|OJ;%J(9UpMUE%xdGC;l$4iN|NKQUmXRXxFzji%z7XX* zfWCp6Fa{iT)msVKVk=KV(38VoHIqwxJ~}!1(bCeFzXv*<*RNfhCo;4Hn+wkDnt| F>)?nMD3ehu|ElQ@z01+11lv`Z%Jw`NVq`JLKS$O@6A`=0`7|30Vx7dQL& zl2Ez>9P<~JLW85;5#vB#$vy@C+yB4Y FrG)Ki`|8 zL<~XEH;qK{hU7#oUJlo;UAwRR`@LPDO)M^64eIpK;n7zp^cEBY8p5vqfDzgmq?(@^ zGV ;?^r{RuecX5U0)ltCxK542YP2HzRiV?q_lL zNxk^54K3E^vu`3l_w$5Aqi^tgKMuhc>7>nhti1Xby2}1zWb0s^OYdb PDvlxyLX>O8+{xX|3Q^6!&RW}3e`I%$Z%jCHsopun zf}O=ECt6NwWK>DBt9ty|iv7iw^R#<0jpaz~x{UPbh|`!z50#vZ)a6njh7 Gs;(*?(`{Vs1~YiKa{ zi>6PxY~eEav`4Ll9@bVKo2!qYH)Z^vPYMS}z-A@7)jRLF3U%y#) zA_=eeSn<}vU?YOD9@Y$&-e^xZ9reAmZY%hR;do}ZnQiIc({(XB(x>2ieR{&JYOnfv zu&z@maCgvd-ULmMK!V7m=iV7tSKW#9fR++m3qXGl0Mt4l6rg3?5=0H&ks5$_59hQP z_QM#uaG^Y&Wvh|lJ=jqZ$1U0E{G#z4cO&^U#^7VSg`5+Nm&di^=M6?KtoZRSVNCkR z33kp6w{I6er9W<{;#horFzxx$b2U((YP5y7&{JdYOZzn4?i@8GrE1YDeo$FSHMOaz znM`tq9eqVRG52o%T3$XvrVR}Z!JZQ!rmR7@T~8iYHl|5V*a57hujYa&Mf26e^PcV0 zX* 4E%kxdoaQv|f>rJpz$_!4u+cuO`1NHBk{OWL-T{{a?DVV0NvfUl>_B4&QssCv_ z#0EP|;EdCLy*Icpzc$+`(cs)Ql6G?F*WQ$@RZ>x5ybp%zxz&V*Ou>(qEP#$lf#z|~ zVIQCq8}MBGbcf9;9%|}#N!!t&UB03++vMNR09nr5k7oS!$}pLXBM@y#E{j=MSgSrt zdjiO-WwmT>aJP$C4K;f2Z7jUISlTqb9>{kH@4jzC9L%&*+)6SIasoiif!%CCe;y-p z3ri})I=?77AB-A<@+|mt8IZ&kybmoaV_VzX0RL+3SNh9L2Rff>cyF*iIiIXgy{H&E zZW&I9DTV9r3|}{LAHOWOt~K_UW3juJ-K%e_xT0joTI+Va15_|7a{|`TUhlCE{{i z)3B~ j;Z}m^Fd+Z)RGAsM9S{)@=$bnT(p{csC2%M)vgaTdcyos3 z&wAG6oueaYljn3{t)VuqyJTm*e+$zGD`$`ZQJoBeuH+daBd0s2eV*sTo^1+z`3B~_ zlYZV)0TfNQ4YxG !yaGV}J2*&U zRp_+@0J1)0U_!3p7SoyZ=MjKSDjz3WvV2~PWG7(e7)vW*hEO9hu1F46zrWIu5WAOX zEnS;=w%ZZk_C%=QTYaIGVtmIl#hx?}fa2rht0vVQb_9|_RrBSdRQ?-aBh7aR(u@+? zS0pbD2Cv|YcQ0NzvL1>nPeqpPwlLH+?D`94Msi%%JDgUSH(Z_$#ZMQUpI*w_-mI@u ztBPpGng{C;1V(_t0m!$ZP4&0YXU`GCg*~&t!%8=m0~<&|M{Nhh(xPR)()3W?&e9&o zC1GTWj)8qX43g)u%h7v%g=YT2V_UnM;phQ{`J*mpF>DpR#EiG)oIALeS@v_Il3ggO zs;fQr;VSm6POC$7)iiPmse3oO5qqDz=hT;&wU&0cYL!b^maUqfW(pZD>73j4tP~!^ zwO6X1H2F1q28Q6<+F}%Te;DyRGHBX3lF*;J)HV6(Bydg8`61}F0HdNzUvYCNAC~yE zJ&Z?RPmeN&rTi0Mqfh *j1&53c6 dBcaW2y2P&C<^GOZfa= z%WRXi_3`|8+S2st%m*