From 931a32ffb31e4754c0f052bbc823ae5dff2e36e1 Mon Sep 17 00:00:00 2001 From: Qustinnus Date: Tue, 23 Feb 2021 22:30:24 +0100 Subject: [PATCH] Experi-Sci: Techweb nodes may now require you to perform "scientific" experiments (#54093) Co-authored-by: Brett Williams Co-authored-by: Jordan Brown Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: Aleksej Komarov Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> --- .../map_files/Deltastation/DeltaStation2.dmm | 25 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 44 +- _maps/map_files/KiloStation/KiloStation.dmm | 24 +- _maps/map_files/MetaStation/MetaStation.dmm | 25 +- code/__DEFINES/dcs/signals.dm | 12 + code/__DEFINES/experisci.dm | 35 + code/__DEFINES/research.dm | 44 +- code/__DEFINES/traits.dm | 1 + code/_globalvars/lists/objects.dm | 1 + code/_onclick/other_mobs.dm | 1 + code/controllers/subsystem/research.dm | 18 +- code/datums/materials/_material.dm | 6 +- code/game/machinery/computer/arcade.dm | 1 + code/game/machinery/doppler_array.dm | 77 +- .../circuitboards/machine_circuitboards.dm | 16 + code/game/objects/objs.dm | 1 + code/game/objects/structures/tables_racks.dm | 2 + code/game/turfs/closed/wall/mineral_walls.dm | 13 + code/game/turfs/open/floor/mineral_floor.dm | 9 + .../abductor/equipment/abduction_gear.dm | 1 + code/modules/asset_cache/asset_list.dm | 13 + .../atmospherics/gasmixtures/reactions.dm | 13 +- code/modules/experisci/destructive_scanner.dm | 101 +++ .../experisci/experiment/experiments.dm | 140 +++ .../experiment/handlers/experiment_handler.dm | 405 +++++++++ .../experiment/physical_experiments.dm | 56 ++ .../experisci/experiment/types/experiment.dm | 88 ++ .../experisci/experiment/types/explosive.dm | 39 + .../experiment/types/physical_experiment.dm | 35 + .../experiment/types/random_scanning.dm | 21 + .../experisci/experiment/types/scanning.dm | 140 +++ .../experiment/types/scanning_material.dm | 24 + .../experiment/types/scanning_points.dm | 46 + .../experiment/types/scanning_vatgrown.dm | 14 + code/modules/experisci/handheld_scanner.dm | 24 + code/modules/mob/living/carbon/life.dm | 7 - .../computers/item/tablet_presets.dm | 1 + .../file_system/programs/techweb.dm | 217 +++++ .../research/designs/experisci_designs.dm | 9 + .../research/designs/machine_designs.dm | 16 + .../research/designs/nanite_designs.dm | 14 - code/modules/research/destructive_analyzer.dm | 6 +- code/modules/research/experimentor.dm | 4 - .../nanites/nanite_programs/utility.dm | 47 -- code/modules/research/rdconsole.dm | 683 ++++++--------- code/modules/research/research_disk.dm | 63 -- code/modules/research/server.dm | 6 - code/modules/research/techweb/_techweb.dm | 137 ++- .../modules/research/techweb/_techweb_node.dm | 58 +- code/modules/research/techweb/all_nodes.dm | 44 +- .../vatgrowing/samples/_micro_organism.dm | 1 + .../research/xenobiology/xenobio_camera.dm | 22 - .../research/xenobiology/xenobiology.dm | 28 +- code/modules/tgui/external.dm | 1 + icons/mob/inhands/misc/devices_lefthand.dmi | Bin 1422 -> 1476 bytes icons/mob/inhands/misc/devices_righthand.dmi | Bin 1425 -> 1503 bytes icons/obj/device.dmi | Bin 60622 -> 61987 bytes icons/obj/machines/experisci.dmi | Bin 0 -> 4239 bytes icons/obj/modular_tablet.dmi | Bin 18695 -> 20215 bytes .../destructive_scanner/ScanDangerous.ogg | Bin 0 -> 97431 bytes .../machines/destructive_scanner/ScanSafe.ogg | Bin 0 -> 95555 bytes .../machines/destructive_scanner/TubeDown.ogg | Bin 0 -> 135532 bytes sound/machines/destructive_scanner/TubeUp.ogg | Bin 0 -> 20587 bytes tgstation.dme | 16 + .../tgui/interfaces/ExperimentConfigure.js | 237 ++++++ tgui/packages/tgui/interfaces/NtosTechweb.js | 13 + tgui/packages/tgui/interfaces/TachyonArray.js | 37 +- tgui/packages/tgui/interfaces/Techweb.js | 796 ++++++++++++++++++ .../interfaces/ExperimentConfigure.scss | 85 ++ .../tgui/styles/interfaces/TachyonArray.scss | 13 + .../tgui/styles/interfaces/Techweb.scss | 78 ++ tgui/packages/tgui/styles/main.scss | 3 + tools/ci/build_spaceman_dmm.sh | 0 tools/ci/check_changelogs.sh | 0 tools/ci/check_filedirs.sh | 0 tools/ci/check_grep.sh | 0 tools/ci/dm.sh | 0 tools/ci/download_byond.sh | 0 tools/ci/install_byond.sh | 0 tools/ci/install_rust_g.sh | 0 tools/ci/install_spaceman_dmm.sh | 0 tools/ci/template_dm_generator.py | 0 82 files changed, 3349 insertions(+), 808 deletions(-) create mode 100644 code/__DEFINES/experisci.dm create mode 100644 code/modules/experisci/destructive_scanner.dm create mode 100644 code/modules/experisci/experiment/experiments.dm create mode 100644 code/modules/experisci/experiment/handlers/experiment_handler.dm create mode 100644 code/modules/experisci/experiment/physical_experiments.dm create mode 100644 code/modules/experisci/experiment/types/experiment.dm create mode 100644 code/modules/experisci/experiment/types/explosive.dm create mode 100644 code/modules/experisci/experiment/types/physical_experiment.dm create mode 100644 code/modules/experisci/experiment/types/random_scanning.dm create mode 100644 code/modules/experisci/experiment/types/scanning.dm create mode 100644 code/modules/experisci/experiment/types/scanning_material.dm create mode 100644 code/modules/experisci/experiment/types/scanning_points.dm create mode 100644 code/modules/experisci/experiment/types/scanning_vatgrown.dm create mode 100644 code/modules/experisci/handheld_scanner.dm create mode 100644 code/modules/modular_computers/file_system/programs/techweb.dm create mode 100644 code/modules/research/designs/experisci_designs.dm create mode 100644 icons/obj/machines/experisci.dmi create mode 100644 sound/machines/destructive_scanner/ScanDangerous.ogg create mode 100644 sound/machines/destructive_scanner/ScanSafe.ogg create mode 100644 sound/machines/destructive_scanner/TubeDown.ogg create mode 100644 sound/machines/destructive_scanner/TubeUp.ogg create mode 100644 tgui/packages/tgui/interfaces/ExperimentConfigure.js create mode 100644 tgui/packages/tgui/interfaces/NtosTechweb.js create mode 100644 tgui/packages/tgui/interfaces/Techweb.js create mode 100644 tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss create mode 100644 tgui/packages/tgui/styles/interfaces/TachyonArray.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Techweb.scss mode change 100644 => 100755 tools/ci/build_spaceman_dmm.sh mode change 100644 => 100755 tools/ci/check_changelogs.sh mode change 100644 => 100755 tools/ci/check_filedirs.sh mode change 100644 => 100755 tools/ci/check_grep.sh mode change 100644 => 100755 tools/ci/dm.sh mode change 100644 => 100755 tools/ci/download_byond.sh mode change 100644 => 100755 tools/ci/install_byond.sh mode change 100644 => 100755 tools/ci/install_rust_g.sh mode change 100644 => 100755 tools/ci/install_spaceman_dmm.sh mode change 100644 => 100755 tools/ci/template_dm_generator.py diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 2e99af52c3f..dd0ed105efd 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -33807,10 +33807,11 @@ /turf/open/floor/iron/white, /area/science/research) "cPd" = ( -/obj/structure/chair, /obj/effect/turf_decal/tile/purple{ dir = 4 }, +/obj/machinery/destructive_scanner, +/obj/effect/turf_decal/stripes/end, /turf/open/floor/iron/white, /area/science/research) "cPe" = ( @@ -35295,15 +35296,6 @@ }, /turf/open/floor/iron, /area/security/checkpoint/science/research) -"cSp" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/science/research) "cSq" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -36200,6 +36192,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 6 }, +/obj/effect/turf_decal/arrows/white{ + color = "#800080"; + dir = 8 + }, /turf/open/floor/iron, /area/science/research) "cUh" = ( @@ -41271,6 +41267,13 @@ dir = 6 }, /obj/machinery/power/apc/auto_name/west, +/obj/item/experi_scanner, +/obj/item/experi_scanner{ + pixel_x = 4 + }, +/obj/item/experi_scanner{ + pixel_x = -4 + }, /turf/open/floor/iron, /area/science/lab) "dfr" = ( @@ -149835,7 +149838,7 @@ cmP cNp cOW cQH -cSp +dgv cUe cWb cXr diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index d5deba4f665..ca185029ab0 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -12604,6 +12604,7 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/machinery/lapvend, /turf/open/floor/iron, /area/hallway/primary/starboard) "bfZ" = ( @@ -12615,14 +12616,14 @@ dir = 8 }, /obj/machinery/light, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, /turf/open/floor/iron, /area/hallway/primary/starboard) "bga" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/lapvend, +/obj/machinery/destructive_scanner, +/obj/effect/turf_decal/stripes/end, /turf/open/floor/iron, /area/hallway/primary/starboard) "bgb" = ( @@ -14998,6 +14999,14 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/item/experi_scanner{ + pixel_x = 4 + }, +/obj/item/experi_scanner, +/obj/item/experi_scanner{ + pixel_x = -4 + }, +/obj/structure/table, /turf/open/floor/iron/white, /area/science/lab) "boB" = ( @@ -31448,6 +31457,13 @@ }, /turf/open/floor/iron, /area/cargo/storage) +"gdd" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/hallway/primary/starboard) "gdg" = ( /obj/structure/mirror{ pixel_y = 28 @@ -56782,6 +56798,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/medical/medbay/central) +"xXm" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/hallway/primary/starboard) "xXp" = ( /turf/closed/wall, /area/medical/break_room) @@ -102378,7 +102404,7 @@ nhQ iMW csr pXx -aYV +bga qXW aYV bfX @@ -103922,8 +103948,8 @@ iwd vVm aYV qXW -aYV -bga +gdd +bfX bgc bgc bgc @@ -104180,7 +104206,7 @@ vVm aYV qXW aYV -bfX +xXm bhC biF bks diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index a1b813c745f..e34db77aa55 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -11439,18 +11439,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/machinery/camera{ - c_tag = "Starboard Hallway Research Desk"; - name = "starboard camera" +/obj/machinery/destructive_scanner, +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, /turf/open/floor/iron/dark, /area/hallway/primary/starboard) @@ -21774,6 +21768,13 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -30 }, +/obj/item/experi_scanner{ + pixel_x = -4 + }, +/obj/item/experi_scanner, +/obj/item/experi_scanner{ + pixel_x = 4 + }, /turf/open/floor/iron/dark, /area/science/lab) "aZl" = ( @@ -23477,6 +23478,11 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/camera{ + c_tag = "Starboard Hallway Research Desk"; + dir = 4; + name = "starboard camera" + }, /turf/open/floor/iron, /area/hallway/primary/starboard) "bcn" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 75013e4b495..767840a4266 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -33699,7 +33699,6 @@ /obj/effect/turf_decal/tile/purple{ dir = 4 }, -/obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/science/research) "euv" = ( @@ -34973,6 +34972,7 @@ dir = 1 }, /obj/effect/turf_decal/siding/purple, +/obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/science/research) "eRR" = ( @@ -43063,16 +43063,16 @@ /turf/open/floor/wood, /area/command/heads_quarters/captain/private) "ikF" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, /obj/effect/turf_decal/trimline/purple/warning{ dir = 6 }, /obj/effect/turf_decal/trimline/purple/warning{ dir = 6 }, -/obj/effect/turf_decal/siding/purple, +/obj/machinery/destructive_scanner, +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, /turf/open/floor/iron/white, /area/science/research) "ikK" = ( @@ -43467,6 +43467,9 @@ /area/commons/vacant_room/commissary) "isH" = ( /obj/structure/table/glass, +/obj/item/experi_scanner{ + pixel_x = -4 + }, /turf/open/floor/iron/white, /area/science/research) "isV" = ( @@ -51975,6 +51978,16 @@ }, /turf/open/floor/engine/vacuum, /area/engineering/atmos) +"lXi" = ( +/obj/structure/table/glass, +/obj/item/experi_scanner{ + pixel_x = 4 + }, +/obj/item/experi_scanner{ + pixel_x = -15 + }, +/turf/open/floor/iron/white, +/area/science/research) "lXu" = ( /obj/item/radio/intercom{ pixel_y = -29 @@ -114559,7 +114572,7 @@ glk vou uwX jeM -isH +lXi vLG dvC hSZ diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index a9b37740060..33157167745 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -49,6 +49,9 @@ /// handler for vv_do_topic (usr, href_list) #define COMSIG_VV_TOPIC "vv_topic" #define COMPONENT_VV_HANDLED (1<<0) +/// from datum ui_act (usr, action) +#define COMSIG_UI_ACT "COMSIG_UI_ACT" + /// fires on the target datum when an element is attached to it (/datum/element) #define COMSIG_ELEMENT_ATTACH "element_attach" @@ -147,6 +150,9 @@ ///from obj/machinery/bsa/full/proc/fire(): () #define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass" #define COMSIG_ATOM_BLOCKS_BSA_BEAM (1<<0) +///from /obj/machinery/doppler_array/proc/sense_explosion(...): Runs when an explosion is succesfully detected by a doppler array(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range) +#define COMSIG_DOPPLER_ARRAY_EXPLOSION_DETECTED "atom_dopplerarray_explosion_detected" + ///from base of atom/setDir(): (old_dir, new_dir). Called before the direction changes. #define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" ///from base of atom/handle_atom_del(): (atom/deleted) @@ -270,6 +276,8 @@ #define COMSIG_LIVING_START_PULL "living_start_pull" ///called on /living when someone is pulled (mob/living/puller) #define COMSIG_LIVING_GET_PULLED "living_start_pulled" +///from base of [/atom/proc/interact]: (mob/user) +#define COMSIG_ATOM_UI_INTERACT "atom_ui_interact" /// from /datum/component/singularity/proc/can_move(), as well as /obj/energy_ball/proc/can_move() /// if a callback returns `SINGULARITY_TRY_MOVE_BLOCK`, then the singularity will not move to that turf @@ -588,6 +596,10 @@ #define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored" ///from /obj/machinery/set_occupant(atom/movable/O): (new_occupant) #define COMSIG_MACHINERY_SET_OCCUPANT "machinery_set_occupant" +///from /obj/machinery/destructive_scanner/proc/open(aggressive): Runs when the destructive scanner scans a group of objects. (list/scanned_atoms) +#define COMSIG_MACHINERY_DESTRUCTIVE_SCAN "machinery_destructive_scan" +///from /obj/machinery/computer/arcade/prizevend(mob/user, prizes = 1) +#define COMSIG_ARCADE_PRIZEVEND "arcade_prizevend" ///from obj/machinery/iv_drip/IV_attach(target, usr) : (attachee) #define COMSIG_IV_ATTACH "iv_attach" diff --git a/code/__DEFINES/experisci.dm b/code/__DEFINES/experisci.dm new file mode 100644 index 00000000000..9130e0ae565 --- /dev/null +++ b/code/__DEFINES/experisci.dm @@ -0,0 +1,35 @@ +#define EXPERIMENT_CONFIG_ATTACKSELF "experiment_config_attackself" +#define EXPERIMENT_CONFIG_ALTCLICK "experiment_config_altclick" +#define EXPERIMENT_CONFIG_CLICK "experiment_config_click" +#define EXPERIMENT_CONFIG_UI "experiment_config_ui" + +/// Boolean stage, complete/incomplete. No specific progress to report. +#define EXPERIMENT_BOOL_STAGE "bool" +/// Integer stages, should be whole numbers with total being included +/// to support rendering ``value of total``, or something akin to it. +#define EXPERIMENT_INT_STAGE "integer" +/// Float stages, the value should be between 0 and 1 representing percent completion +#define EXPERIMENT_FLOAT_STAGE "float" +/// Detail stages, only provide more textual information and have no inherent progress +#define EXPERIMENT_DETAIL_STAGE "detail" + +/// Macro for defining a progress stage +#define EXPERIMENT_PROGRESS(type, desc, values...) list(list(type, desc, values)) +/// Macro for boolean stages +#define EXPERIMENT_PROG_BOOL(desc, complete) EXPERIMENT_PROGRESS(EXPERIMENT_BOOL_STAGE, desc, complete) +/// Macro for integer stages +#define EXPERIMENT_PROG_INT(desc, complete, total) EXPERIMENT_PROGRESS(EXPERIMENT_INT_STAGE, desc, complete, total) +/// Macro for float stages +#define EXPERIMENT_PROG_FLOAT(desc, complete) EXPERIMENT_PROGRESS(EXPERIMENT_FLOAT_STAGE, desc, complete) +/// Macro for non-valued stages, details for exp stages +#define EXPERIMENT_PROG_DETAIL(desc, complete) EXPERIMENT_PROGRESS(EXPERIMENT_DETAIL_STAGE, desc, complete) + +/// Destructive experiments which will destroy the sample +#define EXPERIMENT_TRAIT_DESTRUCTIVE (1 << 0) + +/// Will always attempt to action every experiment eligible with a single input, +/// no experiment selection required +#define EXPERIMENT_CONFIG_ALWAYS_ACTIVE (1 << 0) +/// Experiment handlers with this flag will not automatically connect to the first techweb they find +/// on initialization +#define EXPERIMENT_CONFIG_NO_AUTOCONNECT (1 << 1) diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 218a66a3a31..d8db678bc29 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -1,36 +1,5 @@ -//! Defines for the R&D console, see: [/obj/machinery/computer/rdconsole] -#define RDCONSOLE_UI_MODE_NORMAL 1 -#define RDCONSOLE_UI_MODE_EXPERT 2 -#define RDCONSOLE_UI_MODE_LIST 3 - -#define RDSCREEN_MENU 0 -#define RDSCREEN_TECHDISK 1 -#define RDSCREEN_DESIGNDISK 20 -#define RDSCREEN_DESIGNDISK_UPLOAD 21 -#define RDSCREEN_SETTINGS 61 -#define RDSCREEN_TECHWEB 70 -#define RDSCREEN_TECHWEB_NODEVIEW 71 -#define RDSCREEN_TECHWEB_DESIGNVIEW 72 - #define RDSCREEN_NOBREAK "" -//! Sanity check defines for when these devices aren't connected or no disk is inserted -#define RDSCREEN_TEXT_NO_PROTOLATHE "

No Protolathe Linked!


" -#define RDSCREEN_TEXT_NO_IMPRINTER "

No Circuit Imprinter Linked!


" -#define RDSCREEN_TEXT_NO_DECONSTRUCT "

No Destructive Analyzer Linked!


" -#define RDSCREEN_TEXT_NO_TDISK "

No Technology Disk Inserted!


" -#define RDSCREEN_TEXT_NO_DDISK "

No Design Disk Inserted!


" -#define RDSCREEN_TEXT_NO_SNODE "

No Technology Node Selected!


" -#define RDSCREEN_TEXT_NO_SDESIGN "

No Design Selected!


" - -#define RDSCREEN_UI_LATHE_CHECK if(QDELETED(linked_lathe)) { return RDSCREEN_TEXT_NO_PROTOLATHE } -#define RDSCREEN_UI_IMPRINTER_CHECK if(QDELETED(linked_imprinter)) { return RDSCREEN_TEXT_NO_IMPRINTER } -#define RDSCREEN_UI_DECONSTRUCT_CHECK if(QDELETED(linked_destroy)) { return RDSCREEN_TEXT_NO_DECONSTRUCT } -#define RDSCREEN_UI_TDISK_CHECK if(QDELETED(t_disk)) { return RDSCREEN_TEXT_NO_TDISK } -#define RDSCREEN_UI_DDISK_CHECK if(QDELETED(d_disk)) { return RDSCREEN_TEXT_NO_DDISK } -#define RDSCREEN_UI_SNODE_CHECK if(!selected_node) { return RDSCREEN_TEXT_NO_SNODE } -#define RDSCREEN_UI_SDESIGN_CHECK if(!selected_design) { return RDSCREEN_TEXT_NO_SDESIGN } - //! Defines for the Protolathe screens, see: [/obj/machinery/rnd/production/protolathe] #define RESEARCH_FABRICATOR_SCREEN_MAIN 1 #define RESEARCH_FABRICATOR_SCREEN_CHEMICALS 2 @@ -63,17 +32,8 @@ TECHWEB_POINT_TYPE_NANITES = "Nanite Research"\ ) -/// R&D point value for a maxcap bomb. Can be adjusted if need be. Current Value Cap Radius: 100 -#define TECHWEB_BOMB_POINTCAP 50000 - -//! Research point values for slime extracts, see: [xenobio_camera][code/modules/research/xenobiology/xenobio_camera.dm] -#define SLIME_RESEARCH_TIER_0 100 -#define SLIME_RESEARCH_TIER_1 500 -#define SLIME_RESEARCH_TIER_2 1000 -#define SLIME_RESEARCH_TIER_3 1500 -#define SLIME_RESEARCH_TIER_4 2000 -#define SLIME_RESEARCH_TIER_5 2500 -#define SLIME_RESEARCH_TIER_RAINBOW 5000 +/// Amount of cash you can get from a maxcap +#define TECHWEB_BOMB_CASHCAP 50000 //! Amount of points gained per second by a single R&D server, see: [research][code/controllers/subsystem/research.dm] #define TECHWEB_SINGLE_SERVER_INCOME 52.3 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 2e750703a8f..bb13f919cfb 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -149,6 +149,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_TESLA_SHOCKIMMUNE "tesla_shock_immunity" #define TRAIT_STABLEHEART "stable_heart" #define TRAIT_STABLELIVER "stable_liver" +#define TRAIT_VATGROWN "vatgrown" #define TRAIT_RESISTHEAT "resist_heat" #define TRAIT_RESISTHEATHANDS "resist_heat_handsonly" //For when you want to be able to touch hot things, but still want fire to be an issue. #define TRAIT_RESISTCOLD "resist_cold" diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index c7551c30044..d16673f008a 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -35,6 +35,7 @@ GLOBAL_LIST_EMPTY(meteor_list) // List of all meteors. GLOBAL_LIST_EMPTY(active_jammers) // List of active radio jammers GLOBAL_LIST_EMPTY(ladders) GLOBAL_LIST_EMPTY(trophy_cases) +GLOBAL_LIST_EMPTY(experiment_handlers) ///This is a global list of all signs you can change an existing sign or new sign backing to, when using a pen on them. GLOBAL_LIST_EMPTY(editable_sign_types) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 9045e4077d8..b58cfcff91b 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -93,6 +93,7 @@ else add_fingerprint(user) if(interaction_flags_atom & INTERACT_ATOM_UI_INTERACT) + SEND_SIGNAL(src, COMSIG_ATOM_UI_INTERACT, user) return ui_interact(user) return FALSE diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index bce3168049e..368503a091e 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -30,10 +30,8 @@ SUBSYSTEM_DEF(research) ) var/list/errored_datums = list() var/list/point_types = list() //typecache style type = TRUE list - var/list/slime_already_researched = list() //Slime cores that have already been researched //---------------------------------------------- var/list/single_server_income = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_SINGLE_SERVER_INCOME) - var/multiserver_calculation = FALSE var/last_income //^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^ @@ -65,18 +63,10 @@ SUBSYSTEM_DEF(research) /datum/controller/subsystem/research/fire() var/list/bitcoins = list() - if(multiserver_calculation) - var/eff = calculate_server_coefficient() - for(var/obj/machinery/rnd/server/miner in servers) - var/list/result = (miner.mine()) //SLAVE AWAY, SLAVE. - for(var/i in result) - result[i] *= eff - bitcoins[i] = bitcoins[i]? bitcoins[i] + result[i] : result[i] - else - for(var/obj/machinery/rnd/server/miner in servers) - if(miner.working) - bitcoins = single_server_income.Copy() - break //Just need one to work. + for(var/obj/machinery/rnd/server/miner in servers) + if(miner.working) + bitcoins = single_server_income.Copy() + break //Just need one to work. if (!isnull(last_income)) var/income_time_difference = world.time - last_income science_tech.last_bitcoins = bitcoins // Doesn't take tick drift into account diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 186b656da99..819078e5ad5 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -16,7 +16,7 @@ Simple datum which is instanced once per type and is used for every object of sa ///Base color of the material, is used for greyscale. Item isn't changed in color if this is null. var/color ///Base alpha of the material, is used for greyscale icons. - var/alpha + var/alpha = 255 ///Bitflags that influence how SSmaterials handles this material. var/init_flags = MATERIAL_INIT_MAPLOAD ///Materials "Traits". its a map of key = category | Value = Bool. Used to define what it can be used for @@ -163,8 +163,8 @@ Simple datum which is instanced once per type and is used for every object of sa o.throwforce = initial(o.throwforce) /datum/material/proc/on_removed_turf(turf/T, amount, material_flags) - if(alpha) - RemoveElement(/datum/element/turf_z_transparency, FALSE) + if(alpha < 255) + T.RemoveElement(/datum/element/turf_z_transparency, FALSE) /** * This proc is called when the mat is found in an item that's consumed by accident. see /obj/item/proc/on_accidental_consumption. diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 89ca674d420..bb6188ad3a1 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -77,6 +77,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( Reset() /obj/machinery/computer/arcade/proc/prizevend(mob/user, prizes = 1) + SEND_SIGNAL(user, COMSIG_ARCADE_PRIZEVEND, user, prizes) if(user.mind?.get_skill_level(/datum/skill/gaming) >= SKILL_LEVEL_LEGENDARY && HAS_TRAIT(user, TRAIT_GAMERGOD)) visible_message("[user] inputs an intense cheat code!",\ "You hear a flurry of buttons being pressed.") diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index df609d0edea..e6f0c098474 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -144,12 +144,7 @@ return FALSE next_announce = world.time + cooldown - var/distance = get_dist(epicenter, zone) - var/direct = get_dir(zone, epicenter) - - if(distance > max_dist) - return FALSE - if(!(direct & dir)) + if((get_dist(epicenter, zone) > max_dist) || !(get_dir(zone, epicenter) & dir)) return FALSE var/datum/data/tachyon_record/R = new /datum/data/tachyon_record() @@ -178,12 +173,13 @@ record_number++ records += R + + SEND_SIGNAL(src, COMSIG_DOPPLER_ARRAY_EXPLOSION_DETECTED, epicenter, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range) + return TRUE /obj/machinery/doppler_array/powered() - if(!anchored) - return FALSE - return ..() + return anchored && ..() /obj/machinery/doppler_array/update_icon_state() if(machine_stat & BROKEN) @@ -194,44 +190,64 @@ /obj/machinery/doppler_array/research name = "tachyon-doppler research array" - desc = "A specialized tachyon-doppler bomb detection array that uses the results of the highest yield of explosions for research." + desc = "A specialized tachyon-doppler bomb detection array that uses complex on-board software to record data for experiments." + circuit = /obj/item/circuitboard/machine/doppler_array var/datum/techweb/linked_techweb +/obj/machinery/doppler_array/research/Initialize() + ..() + linked_techweb = SSresearch.science_tech + return INITIALIZE_HINT_LATELOAD + +// Late initialize to allow the server machinery to initialize first +/obj/machinery/doppler_array/research/LateInitialize() + . = ..() + AddComponent(/datum/component/experiment_handler, \ + allowed_experiments = list(/datum/experiment/explosion), \ + config_mode = EXPERIMENT_CONFIG_UI, \ + config_flags = EXPERIMENT_CONFIG_ALWAYS_ACTIVE) + +/obj/machinery/doppler_array/research/attackby(obj/item/I, mob/user, params) + if (default_deconstruction_screwdriver(user, "tdoppler", "tdoppler", I) || default_deconstruction_crowbar(I)) + update_icon() + return + return ..() + /obj/machinery/doppler_array/research/sense_explosion(datum/source, turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range) //probably needs a way to ignore admin explosives later on . = ..() if(!.) return + if(!istype(linked_techweb)) - say("Warning: No linked research system!") + say("Warning: no linked research system!") return - var/point_gain = 0 + var/cash_gain = 0 + /*****The Point Calculator*****/ if(orig_light_range < 10) - say("Explosion not large enough for research calculations.") + say("Explosion not large enough for profitability.") return else if(orig_light_range < 4500) - point_gain = (83300 * orig_light_range) / (orig_light_range + 3000) + cash_gain = (83300 * orig_light_range) / (orig_light_range + 3000) else - point_gain = TECHWEB_BOMB_POINTCAP + cash_gain = TECHWEB_BOMB_CASHCAP /*****The Point Capper*****/ - if(point_gain > linked_techweb.largest_bomb_value) - if(point_gain <= TECHWEB_BOMB_POINTCAP || linked_techweb.largest_bomb_value < TECHWEB_BOMB_POINTCAP) + if(cash_gain > linked_techweb.largest_bomb_value) + if(cash_gain <= TECHWEB_BOMB_CASHCAP || linked_techweb.largest_bomb_value < TECHWEB_BOMB_CASHCAP) var/old_tech_largest_bomb_value = linked_techweb.largest_bomb_value //held so we can pull old before we do math - linked_techweb.largest_bomb_value = point_gain - point_gain -= old_tech_largest_bomb_value - point_gain = min(point_gain,TECHWEB_BOMB_POINTCAP) + linked_techweb.largest_bomb_value = cash_gain + cash_gain -= old_tech_largest_bomb_value + cash_gain = min(cash_gain,TECHWEB_BOMB_CASHCAP) else - linked_techweb.largest_bomb_value = TECHWEB_BOMB_POINTCAP - point_gain = 1000 + linked_techweb.largest_bomb_value = TECHWEB_BOMB_CASHCAP + cash_gain = 1000 var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_SCI) if(D) - D.adjust_money(point_gain) - linked_techweb.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, point_gain) - say("Explosion details and mixture analyzed and sold to the highest bidder for [point_gain] cr, with a reward of [point_gain] points.") - + D.adjust_money(cash_gain) + say("Explosion details and mixture analyzed and sold to the highest bidder for [cash_gain] cr.") else //you've made smaller bombs say("Data already captured. Aborting.") return @@ -240,4 +256,13 @@ . = ..() linked_techweb = SSresearch.science_tech +/obj/machinery/doppler_array/research/ui_data(mob/user) + . = ..() + .["is_research"] = TRUE + +/obj/machinery/doppler_array/research/ui_act(action, list/params) + . = ..() + if (.) + return + #undef PRINTER_TIMEOUT diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 8ef417d6ea9..96985a18816 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -1236,3 +1236,19 @@ /obj/item/stock_parts/scanning_module = 2 ) +/obj/item/circuitboard/machine/destructive_scanner + name = "Experimental Destructive Scanner (Machine Board)" + icon_state = "science" + build_path = /obj/machinery/destructive_scanner + req_components = list( + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stock_parts/matter_bin = 1, + /obj/item/stock_parts/manipulator = 2) + +/obj/item/circuitboard/machine/doppler_array + name = "Tachyon-Doppler Research Array (Machine Board)" + icon_state = "science" + build_path = /obj/machinery/doppler_array/research + req_components = list( + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stock_parts/scanning_module = 4) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 7c03dfab1e6..721bfff1c60 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -186,6 +186,7 @@ . = ..() if(.) return + SEND_SIGNAL(src, COMSIG_ATOM_UI_INTERACT, user) ui_interact(user) /mob/proc/unset_machine() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 9f66c42fd18..8549656943f 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -309,6 +309,7 @@ icon = 'icons/obj/smooth_structures/glass_table.dmi' icon_state = "glass_table-0" base_icon_state = "glass_table" + custom_materials = list(/datum/material/glass = 2000) buildstack = /obj/item/stack/sheet/glass smoothing_groups = list(SMOOTH_GROUP_GLASS_TABLES) canSmoothWith = list(SMOOTH_GROUP_GLASS_TABLES) @@ -558,6 +559,7 @@ can_buckle = 1 buckle_lying = NO_BUCKLE_LYING buckle_requires_restraints = TRUE + custom_materials = list(/datum/material/silver = 2000) var/mob/living/carbon/human/patient = null var/obj/machinery/computer/operating/computer = null diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index d54fe013525..f1bc8bf8e32 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -17,6 +17,7 @@ explosion_block = 0 //gold is a soft metal you dingus. smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_GOLD_WALLS) canSmoothWith = list(SMOOTH_GROUP_GOLD_WALLS) + custom_materials = list(/datum/material/gold = 4000) /turf/closed/wall/mineral/silver name = "silver wall" @@ -28,6 +29,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SILVER_WALLS) canSmoothWith = list(SMOOTH_GROUP_SILVER_WALLS) + custom_materials = list(/datum/material/silver = 4000) /turf/closed/wall/mineral/diamond name = "diamond wall" @@ -41,6 +43,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_DIAMOND_WALLS) canSmoothWith = list(SMOOTH_GROUP_DIAMOND_WALLS) + custom_materials = list(/datum/material/diamond = 4000) /turf/closed/wall/mineral/diamond/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 41) return ..() @@ -55,6 +58,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS) canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS) + custom_materials = list(/datum/material/bananium = 4000) /turf/closed/wall/mineral/sandstone name = "sandstone wall" @@ -67,6 +71,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SANDSTONE_WALLS) canSmoothWith = list(SMOOTH_GROUP_SANDSTONE_WALLS) + custom_materials = list(/datum/material/sandstone = 4000) /turf/closed/wall/mineral/uranium article = "a" @@ -79,6 +84,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_URANIUM_WALLS) canSmoothWith = list(SMOOTH_GROUP_URANIUM_WALLS) + custom_materials = list(/datum/material/uranium = 4000) /turf/closed/wall/mineral/uranium/proc/radiate() if(!active) @@ -118,6 +124,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASMA_WALLS) canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS) + custom_materials = list(/datum/material/plasma = 4000) /turf/closed/wall/mineral/plasma/attackby(obj/item/W, mob/user, params) if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite @@ -160,6 +167,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WOOD_WALLS) canSmoothWith = list(SMOOTH_GROUP_WOOD_WALLS) + custom_materials = list(/datum/material/wood = 4000) /turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user) if(W.get_sharpness() && W.force) @@ -189,6 +197,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_IRON_WALLS) canSmoothWith = list(SMOOTH_GROUP_IRON_WALLS) + custom_materials = list(/datum/material/iron = 4000) /turf/closed/wall/mineral/snow name = "packed snow wall" @@ -205,6 +214,7 @@ girder_type = null bullet_sizzle = TRUE bullet_bounce_sound = null + custom_materials = list(/datum/material/snow = 4000) /turf/closed/wall/mineral/snow/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 0) return ..() //No recoil damage, snow is weak @@ -221,6 +231,7 @@ smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS) canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS) + custom_materials = list(/datum/material/alloy/alien = 4000) /////////////////////Titanium walls///////////////////// @@ -237,6 +248,7 @@ smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS) canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS) + custom_materials = list(/datum/material/titanium = 4000) /turf/closed/wall/mineral/titanium/rust_heretic_act() return // titanium does not rust @@ -312,6 +324,7 @@ smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS) canSmoothWith = list(SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS) + custom_materials = list(/datum/material/alloy/plastitanium = 4000) /turf/closed/wall/mineral/plastitanium/rust_heretic_act() return // plastitanium does not rust diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm index 00fd3e7c62b..5e0f2d96afc 100644 --- a/code/game/turfs/open/floor/mineral_floor.dm +++ b/code/game/turfs/open/floor/mineral_floor.dm @@ -35,6 +35,7 @@ icon_state = "plasma" floor_tile = /obj/item/stack/tile/mineral/plasma icons = list("plasma","plasma_dam") + custom_materials = list(/datum/material/plasma = 500) /turf/open/floor/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature) if(exposed_temperature > 300) @@ -69,6 +70,7 @@ icon_state = "gold" floor_tile = /obj/item/stack/tile/mineral/gold icons = list("gold","gold_dam") + custom_materials = list(/datum/material/gold = 500) //SILVER @@ -77,6 +79,7 @@ icon_state = "silver" floor_tile = /obj/item/stack/tile/mineral/silver icons = list("silver","silver_dam") + custom_materials = list(/datum/material/silver = 500) //TITANIUM (shuttle) @@ -84,6 +87,7 @@ name = "shuttle floor" icon_state = "titanium" floor_tile = /obj/item/stack/tile/mineral/titanium + custom_materials = list(/datum/material/titanium = 500) /turf/open/floor/mineral/titanium/setup_broken_states() return list("titanium_dam1","titanium_dam2","titanium_dam3","titanium_dam4","titanium_dam5") @@ -167,6 +171,7 @@ name = "shuttle floor" icon_state = "plastitanium" floor_tile = /obj/item/stack/tile/mineral/plastitanium + custom_materials = list(/datum/material/alloy/plastitanium = 500) /turf/open/floor/mineral/plastitanium/setup_broken_states() return list("plastitanium_dam1","plastitanium_dam2","plastitanium_dam3","plastitanium_dam4","plastitanium_dam5") @@ -193,6 +198,7 @@ icon_state = "bananium" floor_tile = /obj/item/stack/tile/mineral/bananium icons = list("bananium","bananium_dam") + custom_materials = list(/datum/material/bananium = 500) var/sound_cooldown = 0 /turf/open/floor/mineral/bananium/Entered(atom/movable/AM) @@ -236,6 +242,7 @@ icon_state = "diamond" floor_tile = /obj/item/stack/tile/mineral/diamond icons = list("diamond","diamond_dam") + custom_materials = list(/datum/material/diamond = 500) //URANIUM @@ -245,6 +252,7 @@ icon_state = "uranium" floor_tile = /obj/item/stack/tile/mineral/uranium icons = list("uranium","uranium_dam") + custom_materials = list(/datum/material/uranium = 500) var/last_event = 0 var/active = null @@ -287,6 +295,7 @@ floor_tile = /obj/item/stack/tile/mineral/abductor icons = list("alienpod1", "alienpod2", "alienpod3", "alienpod4", "alienpod5", "alienpod6", "alienpod7", "alienpod8", "alienpod9") baseturfs = /turf/open/floor/plating/abductor2 + custom_materials = list(/datum/material/alloy/alien = 500) /turf/open/floor/mineral/abductor/Initialize() . = ..() diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index f6863fa78fd..b602beaf73c 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -822,6 +822,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} smoothing_groups = list(SMOOTH_GROUP_ABDUCTOR_TABLES) canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_TABLES) frame = /obj/structure/table_frame/abductor + custom_materials = list(/datum/material/silver = 2000) /obj/structure/table/optable/abductor name = "alien operating table" diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index 221febbe14d..94ffbb318cc 100644 --- a/code/modules/asset_cache/asset_list.dm +++ b/code/modules/asset_cache/asset_list.dm @@ -217,6 +217,19 @@ GLOBAL_LIST_EMPTY(asset_datums) var/size_id = sprite[SPR_SIZE] return {"[name][size_id] [sprite_name]"} +/** + * Returns the size class (ex design32x32) for a given sprite's icon + * + * Arguments: + * * sprite_name - The sprite to get the size of + */ +/datum/asset/spritesheet/proc/icon_size_id(sprite_name) + var/sprite = sprites[sprite_name] + if (!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return "[name][size_id]" + #undef SPR_SIZE #undef SPR_IDX #undef SPRSZ_COUNT diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index ca6957156a1..3e10add9dc7 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -170,13 +170,13 @@ nobiliumsuppression = INFINITY energy_released += (FIRE_HYDROGEN_ENERGY_WEAK * burned_fuel) cached_results["fire"] += burned_fuel - + else burned_fuel = cached_gases[/datum/gas/tritium][MOLES] cached_gases[/datum/gas/tritium][MOLES] -= burned_fuel / TRITIUM_BURN_TRIT_FACTOR cached_gases[/datum/gas/oxygen][MOLES] -= burned_fuel - + ASSERT_GAS(/datum/gas/water_vapor, air) //oxygen+more-or-less hydrogen=H2O cached_gases[/datum/gas/water_vapor][MOLES] += burned_fuel / TRITIUM_BURN_TRIT_FACTOR @@ -514,8 +514,6 @@ nobiliumsuppression = INFINITY cached_gases[/datum/gas/nitrous_oxide][MOLES] -= reaction_efficency cached_gases[/datum/gas/plasma][MOLES] -= 2 * reaction_efficency - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, min((reaction_efficency**2) * BZ_RESEARCH_SCALE, BZ_RESEARCH_MAX_AMOUNT)) - if(energy_released > 0) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) @@ -554,7 +552,6 @@ nobiliumsuppression = INFINITY cached_gases[/datum/gas/hydrogen][MOLES] -= heat_efficency * 3.5 if (prob(100 / increase_factor)) new /obj/item/stack/sheet/mineral/metal_hydrogen(location) - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, min((heat_efficency * increase_factor * 0.5), METAL_HYDROGEN_RESEARCH_MAX_AMOUNT)) if(energy_used > 0) var/new_heat_capacity = air.heat_capacity() @@ -619,7 +616,6 @@ nobiliumsuppression = INFINITY cached_gases[/datum/gas/stimulum][MOLES]+= heat_scale * 0.75 cached_gases[/datum/gas/tritium][MOLES] -= heat_scale cached_gases[/datum/gas/nitryl][MOLES] -= heat_scale - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, STIMULUM_RESEARCH_AMOUNT * max(stim_energy_change, 0)) if(stim_energy_change) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) @@ -647,10 +643,9 @@ nobiliumsuppression = INFINITY var/energy_produced = nob_formed * (NOBLIUM_FORMATION_ENERGY / (max(cached_gases[/datum/gas/bz][MOLES], 1))) if ((cached_gases[/datum/gas/tritium][MOLES] - 5 * nob_formed < 0) || (cached_gases[/datum/gas/nitrogen][MOLES] - 10 * nob_formed < 0)) return NO_REACTION - cached_gases[/datum/gas/tritium][MOLES] -= nob_formed * 5 - cached_gases[/datum/gas/nitrogen][MOLES] -= nob_formed * 10 + cached_gases[/datum/gas/tritium][MOLES] -= 5 * nob_formed + cached_gases[/datum/gas/nitrogen][MOLES] -= 10 * nob_formed cached_gases[/datum/gas/hypernoblium][MOLES] += nob_formed - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, nob_formed * NOBLIUM_RESEARCH_AMOUNT) if (nob_formed) var/new_heat_capacity = air.heat_capacity() diff --git a/code/modules/experisci/destructive_scanner.dm b/code/modules/experisci/destructive_scanner.dm new file mode 100644 index 00000000000..b572193cb42 --- /dev/null +++ b/code/modules/experisci/destructive_scanner.dm @@ -0,0 +1,101 @@ +/** + * # Destructive scanner + * + * Placed machine that handles destructive experiments (but can also do the normal ones) + */ +/obj/machinery/destructive_scanner + name = "Experimental Destructive Scanner" + desc = "A much larger version of the hand-held scanner, a charred label warns about its destructive capabilities." + icon = 'icons/obj/machines/experisci.dmi' + icon_state = "tube_open" + circuit = /obj/item/circuitboard/machine/destructive_scanner + layer = MOB_LAYER + var/scanning = FALSE + +/obj/machinery/destructive_scanner/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +// Late load to ensure the component initialization occurs after the machines are initialized +/obj/machinery/destructive_scanner/LateInitialize() + . = ..() + AddComponent(/datum/component/experiment_handler, \ + allowed_experiments = list(/datum/experiment/scanning),\ + config_mode = EXPERIMENT_CONFIG_CLICK, \ + start_experiment_callback = CALLBACK(src, .proc/activate)) + +///Activates the machine; checks if it can actually scan, then starts. +/obj/machinery/destructive_scanner/proc/activate() + var/atom/pickup_zone = drop_location() + var/aggressive = FALSE + for(var/mob/living/living_mob in pickup_zone) + if(!(obj_flags & EMAGGED) && ishuman(living_mob)) //Can only kill humans when emagged. + playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + say("Cannot scan with humans inside.") + return + aggressive = TRUE + start_closing(aggressive) + +///Closes the machine to kidnap everything in the turf into it. +/obj/machinery/destructive_scanner/proc/start_closing(aggressive) + if(scanning) + return + var/atom/pickup_zone = drop_location() + for(var/atom/movable/to_pickup in pickup_zone) + to_pickup.forceMove(src) + flick("tube_down", src) + scanning = TRUE + update_icon() + playsound(src, 'sound/machines/destructive_scanner/TubeDown.ogg', 100) + addtimer(CALLBACK(src, .proc/start_scanning, aggressive), 1.2 SECONDS) + +///Starts scanning the fancy scanning effects +/obj/machinery/destructive_scanner/proc/start_scanning(aggressive) + if(aggressive) + playsound(src, 'sound/machines/destructive_scanner/ScanDangerous.ogg', 100, extrarange = 5) + else + playsound(src, 'sound/machines/destructive_scanner/ScanSafe.ogg', 100) + addtimer(CALLBACK(src, .proc/finish_scanning, aggressive), 6 SECONDS) + + +///Performs the actual scan, happens once the tube effects are done +/obj/machinery/destructive_scanner/proc/finish_scanning(aggressive) + flick("tube_up", src) + scanning = FALSE + update_icon() + playsound(src, 'sound/machines/destructive_scanner/TubeUp.ogg', 100) + addtimer(CALLBACK(src, .proc/open, aggressive), 1.2 SECONDS) + +///Opens the machine to let out any contents. If the scan had mobs it'll gib them. +/obj/machinery/destructive_scanner/proc/open(aggressive) + var/turf/this_turf = get_turf(src) + var/list/scanned_atoms = list() + + for(var/atom/movable/movable_atom in contents) + if(movable_atom in component_parts) + continue + scanned_atoms += movable_atom + movable_atom.forceMove(this_turf) + if(isliving(movable_atom)) + var/mob/living/fucked_up_thing = movable_atom + fucked_up_thing.gib() + + SEND_SIGNAL(src, COMSIG_MACHINERY_DESTRUCTIVE_SCAN, scanned_atoms) + + +/obj/machinery/destructive_scanner/emag_act(mob/user) + if(obj_flags & EMAGGED) + return + obj_flags |= EMAGGED + playsound(src, "sparks", 75, TRUE, SILENCED_SOUND_EXTRARANGE) + to_chat(user, "You disable the safety sensor BIOS on [src].") + +/obj/machinery/destructive_scanner/update_icon_state() + . = ..() + icon_state = scanning ? "tube_on" : "tube_open" + +/obj/machinery/destructive_scanner/attackby(obj/item/object, mob/user, params) + if (!scanning && default_deconstruction_screwdriver(user, "tube_open", "tube_open", object) || default_deconstruction_crowbar(object)) + update_icon() + return + return ..() diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm new file mode 100644 index 00000000000..73a4d7fb886 --- /dev/null +++ b/code/modules/experisci/experiment/experiments.dm @@ -0,0 +1,140 @@ +/datum/experiment/scanning/points/slime + name = "Base Slime Experiment" + required_points = 1 + +/datum/experiment/scanning/points/slime/calibration + name = "Slime Sample Test" + description = "Let's see if our scanners can pick up the genetic data from a simple slime extract." + required_atoms = list(/obj/item/slime_extract/grey = 1) + +/datum/experiment/scanning/points/slime/easy + name = "Easy Slime Survey" + description = "A wealthy client has requested that we provide samples of data from several basic slime cores." + required_points = 3 + required_atoms = list(/obj/item/slime_extract/orange = 1, + /obj/item/slime_extract/purple = 1, + /obj/item/slime_extract/blue = 1, + /obj/item/slime_extract/metal = 1) + +/datum/experiment/scanning/points/slime/moderate + name = "Moderate Slime Survey" + description = "Central Command has asked that you collect data from several common slime cores." + required_points = 5 + required_atoms = list(/obj/item/slime_extract/yellow = 1, + /obj/item/slime_extract/darkpurple = 1, + /obj/item/slime_extract/darkblue = 1, + /obj/item/slime_extract/silver = 1) + +/datum/experiment/scanning/points/slime/hard + name = "Challenging Slime Survey" + description = "Another station has challenged your research team to collect several challenging slime cores, \ + are you up to the task?" + required_points = 10 + required_atoms = list(/obj/item/slime_extract/bluespace = 1, + /obj/item/slime_extract/sepia = 1, + /obj/item/slime_extract/cerulean = 1, + /obj/item/slime_extract/pyrite = 1, + /obj/item/slime_extract/red = 2, + /obj/item/slime_extract/green = 2, + /obj/item/slime_extract/pink = 2, + /obj/item/slime_extract/gold = 2) + +/datum/experiment/scanning/points/slime/expert + name = "Expert Slime Survey" + description = "The intergalactic society of xenobiologists are currently looking for samples of the most complex \ + slime cores, we are tasking your station with providing them with everything they need." + required_points = 10 + required_atoms = list(/obj/item/slime_extract/adamantine = 1, + /obj/item/slime_extract/oil = 1, + /obj/item/slime_extract/black = 1, + /obj/item/slime_extract/lightpink = 1, + /obj/item/slime_extract/rainbow = 10) + +/datum/experiment/scanning/random/cytology/easy + name = "Basic Cytology Scanning Experiment" + description = "A scientist needs vermin to test on, use the cytology equipment to grow some of these simple critters!" + total_requirement = 3 + max_requirement_per_type = 2 + possible_types = list(/mob/living/simple_animal/hostile/cockroach, /datum/micro_organism/cell_line/mouse) + +/datum/experiment/scanning/random/cytology/medium + name = "Advanced Cytology Scanning Experiment" + description = "We need to see how the body functions from the earliest moments. Some cytology experiments will help us gain this understanding." + total_requirement = 3 + max_requirement_per_type = 2 + possible_types = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/retaliate/poison/snake, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/dog/corgi, /mob/living/simple_animal/cow, /mob/living/simple_animal/chicken) + +/datum/experiment/scanning/random/cytology/medium/one + name = "Advanced Cytology Scanning Experiment One" + +/datum/experiment/scanning/random/cytology/medium/two + name = "Advanced Cytology Scanning Experiment Two" + +/datum/experiment/scanning/random/janitor_trash + name = "Station Hygiene Inspection" + description = "To learn how to clean, we must first learn what it is to have filth. We need you to scan some filth around the station." + possible_types = list(/obj/effect/decal/cleanable/vomit, + /obj/effect/decal/cleanable/blood) + total_requirement = 3 + +/datum/experiment/explosion/calibration + name = "Is This Thing On?" + description = "The engineers from last shift left a notice for us that the doppler array seemed to be malfunctioning. \ + Could you check that it is still working? Any explosion will do!" + required_light = 1 + +/datum/experiment/explosion/maxcap + name = "Mother of God" + description = "A recent outbreak of a blood-cult in a nearby sector necessitates the development of a large explosive. \ + Create a large enough explosion to prove your bomb, we'll be watching." + +/datum/experiment/explosion/medium + name = "Explosive Ordinance Experiment" + description = "Alright, can we really call ourselves professionals if we can't make shit blow up?" + required_heavy = 2 + required_light = 6 + +/datum/experiment/explosion/maxcap/New() + required_devastation = GLOB.MAX_EX_DEVESTATION_RANGE + required_heavy = GLOB.MAX_EX_HEAVY_RANGE + required_light = GLOB.MAX_EX_LIGHT_RANGE + +/datum/experiment/scanning/random/material/meat + name = "Biological Material Scanning Experiment" + description = "They told us we couldn't make chairs out of every material in the world. You're here to prove those nay-sayers wrong." + possible_material_types = list(/datum/material/meat) + +/datum/experiment/scanning/random/material/easy + name = "Low Grade Material Scanning Experiment" + description = "Material science is all about a basic understanding of the universe, and how it's built. To explain this, build something basic and we'll show you how to break it." + total_requirement = 6 + possible_types = list(/obj/structure/chair, /obj/structure/toilet, /obj/structure/table) + possible_material_types = list(/datum/material/iron, /datum/material/glass) + +/datum/experiment/scanning/random/material/medium + name = "Medium Grade Material Scanning Experiment" + description = "Not all materials are strong enough to hold together a space station. Look at these materials for example, and see what makes them useful for our electronics and equipment." + possible_material_types = list(/datum/material/silver, /datum/material/gold, /datum/material/plastic, /datum/material/titanium) + +/datum/experiment/scanning/random/material/medium/one + name = "Medium Grade Material Scanning Experiment One" + +/datum/experiment/scanning/random/material/medium/two + name = "Medium Grade Material Scanning Experiment Two" + +/datum/experiment/scanning/random/material/medium/three + name = "Medium Grade Material Scanning Experiment Three" + +/datum/experiment/scanning/random/material/hard + name = "High Grade Material Scanning Experiment" + description = "NT spares no expense to test even the most valuable of materials for their qualities as construction materials. Go build us some of these exotic creations and collect the data." + possible_material_types = list(/datum/material/diamond, /datum/material/plasma, /datum/material/uranium) + +/datum/experiment/scanning/random/material/hard/one + name = "High Grade Material Scanning Experiment One" + +/datum/experiment/scanning/random/material/hard/two + name = "High Grade Material Scanning Experiment Two" + +/datum/experiment/scanning/random/material/hard/three + name = "High Grade Material Scanning Experiment Three" diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm new file mode 100644 index 00000000000..430dff2fa0d --- /dev/null +++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm @@ -0,0 +1,405 @@ +/** + * # Experiment Handler + * + * This is the component for interacting with experiments from a connected techweb. It is generic + * and should be set-up to automatically work on any class it is attached to without outside code + * (Excluding potential callbacks) + */ +/datum/component/experiment_handler + /// Holds the currently linked techweb to get experiments from + var/datum/techweb/linked_web + /// Holds the currently selected experiment + var/datum/experiment/selected_experiment + /// Holds the list of types of experiments that this experiment_handler can interact with + var/list/allowed_experiments + /// Holds the list of types of experiments that this experimennt_handler should NOT interact with + var/list/blacklisted_experiments + /// A set of optional experiment traits (see defines) that are disallowed for any experiments + var/disallowed_traits + /// Additional configuration flags for how the experiment_handler operates + var/config_flags + /// Callback that, when supplied, can be called from the UI + var/datum/callback/start_experiment_callback + +/** + * Initializes a new instance of the experiment_handler component + * + * Arguments: + * * allowed_experiments - The list of /datum/experiment types that can be performed with this component + * * blacklisted_experiments - The list of /datum/experiment types that explicitly cannot be performed with this component + * * config_mode - The define that determines how the experiment_handler should display the configuration UI + * * disallowed_traits - Flags that control what experiment traits are blacklisted by this experiment handler + * * config_flags - Flags that control the operational behaviour of the experiment handler, see experiment defines + * * start_experiment_callback - When provided adds a UI button to use this callback to the start the experiment + */ +/datum/component/experiment_handler/Initialize(allowed_experiments = list(), + blacklisted_experiments = list(), + config_mode = EXPERIMENT_CONFIG_ATTACKSELF, + disallowed_traits = null, + config_flags = null, + datum/callback/start_experiment_callback = null, +) + . = ..() + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + src.allowed_experiments = allowed_experiments + src.blacklisted_experiments = blacklisted_experiments + src.disallowed_traits = disallowed_traits + src.config_flags = config_flags + src.start_experiment_callback = start_experiment_callback + + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK, .proc/try_run_handheld_experiment) + RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/ignored_handheld_experiment_attempt) + if(istype(parent, /obj/machinery/doppler_array)) + RegisterSignal(parent, COMSIG_DOPPLER_ARRAY_EXPLOSION_DETECTED, .proc/try_run_doppler_experiment) + if(istype(parent, /obj/machinery/destructive_scanner)) + RegisterSignal(parent, COMSIG_MACHINERY_DESTRUCTIVE_SCAN, .proc/try_run_destructive_experiment) + + // Determine UI display mode + switch(config_mode) + if(EXPERIMENT_CONFIG_ATTACKSELF) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/configure_experiment) + if(EXPERIMENT_CONFIG_ALTCLICK) + RegisterSignal(parent, COMSIG_CLICK_ALT, .proc/configure_experiment) + if(EXPERIMENT_CONFIG_CLICK) + RegisterSignal(parent, COMSIG_ATOM_UI_INTERACT, .proc/configure_experiment_click) + if(EXPERIMENT_CONFIG_UI) + RegisterSignal(parent, COMSIG_UI_ACT, .proc/ui_handle_experiment) + + // Auto connect to the first visible techweb (useful for always active handlers) + // Note this won't work at the moment for non-machines that have been included + // on the map as the servers aren't initialized when the non-machines are initializing + if (!(config_flags & EXPERIMENT_CONFIG_NO_AUTOCONNECT)) + var/list/found_servers = get_available_servers(parent) + var/obj/machinery/rnd/server/selected_server = found_servers.len ? found_servers[1] : null + if (selected_server) + link_techweb(selected_server.stored_research) + + GLOB.experiment_handlers += src + +/datum/component/experiment_handler/Destroy(force, silent) + . = ..() + GLOB.experiment_handlers -= src + +/** + * Hooks on attack to try and run an experiment (When using a handheld handler) + */ +/datum/component/experiment_handler/proc/try_run_handheld_experiment(datum/source, atom/target, mob/user, params) + SIGNAL_HANDLER + if (!should_run_handheld_experiment(source, target, user, params)) + return + INVOKE_ASYNC(src, .proc/try_run_handheld_experiment_async, source, target, user, params) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/** + * Provides feedback when an item isn't related to an experiment, and has fully passed the attack chain + */ +/datum/component/experiment_handler/proc/ignored_handheld_experiment_attempt(datum/source, atom/target, mob/user, proximity_flag, params) + SIGNAL_HANDLER + if (!proximity_flag || (selected_experiment == null && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE))) + return + playsound(user, 'sound/machines/buzz-sigh.ogg', 25) + to_chat(user, "[target] is not related to your currently selected experiment.") + +/** + * Checks that an experiment can be run using the provided target, used for preventing the cancellation of the attack chain inappropriately + */ +/datum/component/experiment_handler/proc/should_run_handheld_experiment(datum/source, atom/target, mob/user, params) + // Check that there is actually an experiment selected + if (selected_experiment == null && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) + return + + // Determine if this experiment is actionable with this target + var/list/arguments = list(src) + arguments = args.len > 1 ? arguments + args.Copy(2) : arguments + if (config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE) + for (var/datum/experiment/experiment in linked_web.available_experiments) + if (experiment.actionable(arglist(arguments))) + return TRUE + else + return selected_experiment.actionable(arglist(arguments)) + +/** + * This proc exists because Jared Fogle really likes async + */ +/datum/component/experiment_handler/proc/try_run_handheld_experiment_async(datum/source, atom/target, mob/user, params) + if (selected_experiment == null && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) + to_chat(user, "You do not have an experiment selected!") + return + if(!do_after(user, 1 SECONDS, target = target)) + return + if(action_experiment(source, target)) + playsound(user, 'sound/machines/ping.ogg', 25) + to_chat(user, "You scan [target].") + else + playsound(user, 'sound/machines/buzz-sigh.ogg', 25) + to_chat(user, "[target] is not related to your currently selected experiment.") + + +/** + * Hooks on destructive scans to try and run an experiment (When using a handheld handler) + */ +/datum/component/experiment_handler/proc/try_run_destructive_experiment(datum/source, list/scanned_atoms) + SIGNAL_HANDLER + var/atom/movable/our_scanner = parent + if (selected_experiment == null) + playsound(our_scanner, 'sound/machines/buzz-sigh.ogg', 25) + to_chat(our_scanner, "No experiment selected!") + return + var/successful_scan + for(var/scan_target in scanned_atoms) + if(action_experiment(source, scan_target)) + successful_scan = TRUE + break + if(successful_scan) + playsound(our_scanner, 'sound/machines/ping.ogg', 25) + to_chat(our_scanner, "The scan succeeds.") + else + playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + our_scanner.say("The scan did not result in anything.") +/** + * Hooks on successful explosions on the doppler array this is attached to + */ +/datum/component/experiment_handler/proc/try_run_doppler_experiment(datum/source, turf/epicenter, devastation_range, + heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range +) + SIGNAL_HANDLER + var/atom/movable/our_array = parent + if(action_experiment(source, devastation_range, heavy_impact_range, light_impact_range)) + playsound(src, 'sound/machines/ping.ogg', 25) + else + playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + our_array.say("Insufficient explosion to contribute to current experiment.") + +/** + * Announces a message to all experiment handlers + * + * Arguments: + * * message - The message to announce + */ +/datum/component/experiment_handler/proc/announce_message_to_all(message) + for(var/experiment in GLOB.experiment_handlers) + var/datum/component/experiment_handler/experi_handler = experiment + var/atom/movable/experi_parent = experi_handler.parent + experi_parent.say(message) + +/** + * Announces a message to this experiment handler + * + * Arguments: + * * message - The message to announce + */ +/datum/component/experiment_handler/proc/announce_message(message) + var/atom/movable/experi_parent = parent + experi_parent.say(message) + +/** + * Attempts to perform the selected experiment given some arguments + */ +/datum/component/experiment_handler/proc/action_experiment(datum/source, ...) + // Check if an experiment is selected + if (selected_experiment == null && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) + return FALSE + + // Get arguments for passing to the experiment[s] + var/list/arguments = list(src) + arguments = args.len > 1 ? arguments + args.Copy(2) : arguments + + // Check if this handler is configured to be always active, in which case we + // attempt to action every experiment that is available to this handler. + if (config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE) + var/any_success + for (var/datum/experiment/experiment in linked_web.available_experiments) + // Because this checks any experiment, we have to ensure it is allowable to be selected with can_select_experiment(...) + // this handles the handler's blacklist, whitelist, etc (potentially refactor this in the future if possible because this could be expensive) + if (can_select_experiment(experiment) && experiment.actionable(arglist(arguments)) && experiment.perform_experiment(arglist(arguments))) + any_success = TRUE + return any_success + else + // Returns true if the experiment was succesfuly handled + return selected_experiment.actionable(arglist(arguments)) && selected_experiment.perform_experiment(arglist(arguments)) + +/** + * Hook for handling UI interaction via signals + */ +/datum/component/experiment_handler/proc/ui_handle_experiment(datum/source, mob/user, action) + SIGNAL_HANDLER + switch(action) + if("open_experiments") + INVOKE_ASYNC(src, .proc/configure_experiment, null, usr) + +/** + * Attempts to show the user the experiment configuration panel + * + * Arguments: + * * user - The user to show the experiment configuration panel to + */ +/datum/component/experiment_handler/proc/configure_experiment(datum/source, mob/user) + ui_interact(user) + +/** + * Attempts to show the user the experiment configuration panel + * + * Arguments: + * * user - The user to show the experiment configuration panel to + */ +/datum/component/experiment_handler/proc/configure_experiment_click(datum/source, mob/user) + ui_interact(user) + +/** + * Attempts to link this experiment_handler to a provided techweb + * + * This proc attempts to link the handler to a provided techweb, overriding the existing techweb if relevant + * + * Arguments: + * * new_web - The new techweb to link to + */ +/datum/component/experiment_handler/proc/link_techweb(datum/techweb/new_web) + if (new_web == linked_web) + return + selected_experiment = null + linked_web = new_web + +/** + * Unlinks this handler from the selected techweb + */ +/datum/component/experiment_handler/proc/unlink_techweb() + selected_experiment = null + linked_web = null + +/** + * Attempts to link this experiment_handler to a provided experiment + * + * Arguments: + * * experiment - The experiment to attempt to link to + */ +/datum/component/experiment_handler/proc/link_experiment(datum/experiment/experiment) + if (experiment && can_select_experiment(experiment)) + selected_experiment = experiment + +/** + * Unlinks this handler from the selected experiment + */ +/datum/component/experiment_handler/proc/unlink_experiment() + selected_experiment = null + +/** + * Attempts to get rnd servers on the same z-level as a provided turf + * + * Arguments: + * * turf_to_check_for_servers - The turf to get servers on the same z-level of + */ +/datum/component/experiment_handler/proc/get_available_servers(turf/turf_to_check_for_servers = null) + if (!turf_to_check_for_servers) + turf_to_check_for_servers = get_turf(parent) + var/list/local_servers = list() + for (var/obj/machinery/rnd/server/server in SSresearch.servers) + var/turf/position_of_this_server_machine = get_turf(server) + if (turf_to_check_for_servers && position_of_this_server_machine && position_of_this_server_machine.z == turf_to_check_for_servers.z) + local_servers += server + return local_servers + +/** + * Checks if an experiment is valid to be selected by this handler + * + * Arguments: + * * experiment - The experiment to check + */ +/datum/component/experiment_handler/proc/can_select_experiment(datum/experiment/experiment) + // Check that this experiments has no disallowed traits + if (experiment.traits & disallowed_traits) + return FALSE + + // Check against the list of allowed experimentors + if (experiment.allowed_experimentors && experiment.allowed_experimentors.len) + var/matched = FALSE + for (var/experimentor in experiment.allowed_experimentors) + if (istype(parent, experimentor)) + matched = TRUE + break + if (!matched) + return FALSE + + // Check that this experiment is visible currently + if (!linked_web || !(experiment in linked_web.available_experiments)) + return FALSE + + // Check that this experiment type isn't blacklisted + for (var/badsci in blacklisted_experiments) + if (istype(experiment, badsci)) + return FALSE + + // Check against the allowed experiment types + for (var/goodsci in allowed_experiments) + if (istype(experiment, goodsci)) + return TRUE + + // If we haven't returned yet then this shouldn't be allowed + return FALSE + +/datum/component/experiment_handler/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + var/atom/parent_atom = parent + ui = new(user, src, "ExperimentConfigure", "[parent_atom ? "[parent_atom.name] | " : ""]Experiment Configuration") + ui.open() + +/datum/component/experiment_handler/ui_data(mob/user) + . = list( + "always_active" = config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE, + "has_start_callback" = !isnull(start_experiment_callback)) + .["servers"] = list() + for (var/obj/machinery/rnd/server/server in get_available_servers()) + var/list/data = list( + name = server.name, + web_id = server.stored_research?.id, + web_org = server.stored_research?.organization, + location = get_area(server), + selected = !isnull(linked_web) && server.stored_research == linked_web, + ref = REF(server) + ) + .["servers"] += list(data) + .["experiments"] = list() + if (linked_web) + for (var/datum/experiment/experiment in linked_web.available_experiments) + var/list/data = list( + name = experiment.name, + description = experiment.description, + tag = experiment.exp_tag, + selectable = can_select_experiment(experiment), + selected = selected_experiment == experiment, + progress = experiment.check_progress(), + performance_hint = experiment.performance_hint, + ref = REF(experiment) + ) + .["experiments"] += list(data) + +/datum/component/experiment_handler/ui_act(action, params) + . = ..() + if (.) + return + switch (action) + if ("select_server") + . = TRUE + var/obj/machinery/rnd/server/server = locate(params["ref"]) + if (server) + link_techweb(server.stored_research) + return + if ("clear_server") + . = TRUE + unlink_techweb() + if ("select_experiment") + . = TRUE + // Don't allow selection for always actives (no concept of active) + if (config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE) + return + var/datum/experiment/experiment = locate(params["ref"]) + if (experiment) + link_experiment(experiment) + if ("clear_experiment") + . = TRUE + unlink_experiment() + if("start_experiment_callback") + start_experiment_callback.Invoke(selected_experiment) diff --git a/code/modules/experisci/experiment/physical_experiments.dm b/code/modules/experisci/experiment/physical_experiments.dm new file mode 100644 index 00000000000..d163e5f0b35 --- /dev/null +++ b/code/modules/experisci/experiment/physical_experiments.dm @@ -0,0 +1,56 @@ +/datum/experiment/physical/meat_wall_explosion + name = "Extreme Cooking Experiment" + description = "There has been interest in using our engineering equipment to see what kind of new cooking appliances we can create" + +/datum/experiment/physical/meat_wall_explosion/register_events() + if(!istype(currently_scanned_atom, /turf/closed/wall)) + linked_experiment_handler.announce_message("Incorrect object for experiment.") + return FALSE + + if(!currently_scanned_atom.has_material_type(/datum/material/meat)) + linked_experiment_handler.announce_message("Object is not made out of the correct materials.") + return FALSE + + RegisterSignal(currently_scanned_atom, COMSIG_ATOM_BULLET_ACT, .proc/check_experiment) + linked_experiment_handler.announce_message("Experiment ready to start.") + return TRUE + +/datum/experiment/physical/meat_wall_explosion/unregister_events() + UnregisterSignal(currently_scanned_atom, COMSIG_ATOM_BULLET_ACT) + +/datum/experiment/physical/meat_wall_explosion/check_progress() + . += EXPERIMENT_PROG_BOOL("Fire an emitter at a tracked meat wall", is_complete()) + +/datum/experiment/physical/meat_wall_explosion/proc/check_experiment(datum/source, obj/projectile/Proj) + if(istype(Proj, /obj/projectile/beam/emitter)) + finish_experiment(linked_experiment_handler) + +/datum/experiment/physical/meat_wall_explosion/finish_experiment(datum/component/experiment_handler/experiment_handler) + . = ..() + new /obj/effect/gibspawner/generic(currently_scanned_atom) + var/turf/meat_wall = currently_scanned_atom + var/turf/new_turf = meat_wall.ScrapeAway() + new /obj/effect/gibspawner/generic(new_turf) + new /obj/item/food/meat/steak/plain(new_turf) + +/datum/experiment/physical/arcade_winner + name = "Playtesting Experiences" + description = "How do they make these arcade games so fun? Let's play one and win it to find out." + +/datum/experiment/physical/arcade_winner/register_events() + if(!istype(currently_scanned_atom, /obj/machinery/computer/arcade)) + linked_experiment_handler.announce_message("Incorrect object for experiment.") + return FALSE + + RegisterSignal(currently_scanned_atom, COMSIG_ARCADE_PRIZEVEND, .proc/win_arcade) + linked_experiment_handler.announce_message("Experiment ready to start.") + return TRUE + +/datum/experiment/physical/arcade_winner/unregister_events() + UnregisterSignal(currently_scanned_atom, COMSIG_ARCADE_PRIZEVEND) + +/datum/experiment/physical/arcade_winner/check_progress() + . += EXPERIMENT_PROG_BOOL("Win an arcade game at a tracked arcade cabinet.", is_complete()) + +/datum/experiment/physical/arcade_winner/proc/win_arcade(datum/source) + finish_experiment(linked_experiment_handler) diff --git a/code/modules/experisci/experiment/types/experiment.dm b/code/modules/experisci/experiment/types/experiment.dm new file mode 100644 index 00000000000..efbf488426c --- /dev/null +++ b/code/modules/experisci/experiment/types/experiment.dm @@ -0,0 +1,88 @@ +/** + * # Experiment + * + * This is the base datum for experiments, storing the base definition. + * + * This class should be subclassed for producing actual experiments. The + * proc stubs should be implemented in whole. + */ +/datum/experiment + /// Name that distinguishes the experiment + var/name = "Experiment" + /// A brief description of the experiment to be shown as details + var/description = "Base experiment" + /// A descriptive tag used on UI elements to denote 'types' of experiments + var/exp_tag = "Base" + /// A list of types that are allowed to experiment with this dastum + var/list/allowed_experimentors + /// Whether the experiment has been completed + var/completed = FALSE + /// Traits related to the experiment + var/traits + /// A textual hint shown on the UI in a tooltip to help a user determine how to perform + /// the experiment + var/performance_hint + +/** + * Performs any necessary initialization of tags and other variables + */ +/datum/experiment/New() + if (traits & EXPERIMENT_TRAIT_DESTRUCTIVE) + exp_tag = "Destructive [exp_tag]" + +/** + * Checks if the experiment is complete + * + * This proc should be overridden such that it returns TRUE/FALSE to + * state if the experiment is complete or not. + */ +/datum/experiment/proc/is_complete() + return + +/** + * Gets the current progress towards the goal of the experiment + * + * This proc should be overridden such that the return value is a + * list of lists, wherein each inner list represents a stage. Stages have + * types, see _DEFINES/experisci.dm. Each stage should be constructed using + * one of several available macros in that file. + */ +/datum/experiment/proc/check_progress() + . = list() + +/** + * Gets if the experiment is actionable provided some arguments + * + * This proc should be overridden such that the return value is a + * boolean value representing if the experiment could be actioned with + * the provided arguments. + */ +/datum/experiment/proc/actionable(...) + return !is_complete() + +/** + * Proc that tries to perform the experiment, and then checks if its completed. + */ +/datum/experiment/proc/perform_experiment(datum/component/experiment_handler/experiment_handler, ...) + var/action_succesful = perform_experiment_actions(arglist(args)) + if(is_complete()) + finish_experiment(experiment_handler) + return action_succesful + +/** + * Attempts to perform the experiment provided some arguments + * + * This proc should be overridden such that the experiment will be actioned + * with some defined arguments + */ +/datum/experiment/proc/perform_experiment_actions(datum/component/experiment_handler/experiment_handler, ...) + return + +/** + * Called when you complete an experiment, makes sure the techwebs knows the experiment was finished, and tells everyone it happend, yay! + */ +/datum/experiment/proc/finish_experiment(datum/component/experiment_handler/experiment_handler) + completed = TRUE + experiment_handler.announce_message_to_all("The [name] has been completed!") + experiment_handler.selected_experiment = null + experiment_handler.linked_web.complete_experiment(src) diff --git a/code/modules/experisci/experiment/types/explosive.dm b/code/modules/experisci/experiment/types/explosive.dm new file mode 100644 index 00000000000..62db6e963cd --- /dev/null +++ b/code/modules/experisci/experiment/types/explosive.dm @@ -0,0 +1,39 @@ +/datum/experiment/explosion + name = "Explosive Experiment" + description = "An experiment requiring an explosion to progress" + exp_tag = "Explosion" + performance_hint = "Perform explosive experiments using the research doppler array in the toxins lab." + /// The required devastation range to complete the experiment + var/required_devastation = 0 + /// The required heavy impact range to complete the experiment + var/required_heavy = 0 + /// The required light impact range to complete the experiment + var/required_light = 0 + /// The last measured devastation range + var/last_devastation + /// The last measured heavy range + var/last_heavy + /// The last measured light range + var/last_light + +/datum/experiment/explosion/is_complete() + return required_devastation <= last_devastation \ + && required_heavy <= last_heavy \ + && required_light <= last_light + +/datum/experiment/explosion/check_progress() + var/status_message = "You must record an explosion with ranges of at least \ + [required_devastation] devastation, [required_heavy] heavy, and [required_light] light." + if (last_devastation || last_heavy || last_light) + status_message += " The last attempt had ranges of [last_devastation]D/[last_heavy]H/[last_light]L." + . += EXPERIMENT_PROG_BOOL(status_message, is_complete()) + +/datum/experiment/explosion/perform_experiment_actions(datum/component/experiment_handler/experiment_handler, devastation, heavy, light) + last_devastation = devastation + last_heavy = heavy + last_light = light + return is_complete() + +/datum/experiment/explosion/actionable(datum/component/experiment_handler/experiment_handler, devastation, heavy, light) + return !is_complete() + diff --git a/code/modules/experisci/experiment/types/physical_experiment.dm b/code/modules/experisci/experiment/types/physical_experiment.dm new file mode 100644 index 00000000000..5e692931c5b --- /dev/null +++ b/code/modules/experisci/experiment/types/physical_experiment.dm @@ -0,0 +1,35 @@ +/datum/experiment/physical + name = "Physical Experiment" + description = "An experiment requiring a physical reaction to continue" + exp_tag = "Physical Experiment" + performance_hint = "To perform physical experiments you must use a hand-held scanner unit to track objects in our world relevant to \ + your experiment. Activate the experiment on your scanner, scan the object to track, and then complete the objective." + /// The atom that is currently being watched by this experiment + var/atom/currently_scanned_atom + /// Linked experiment handler + var/datum/component/experiment_handler/linked_experiment_handler + +/datum/experiment/physical/is_complete() + return completed + +/datum/experiment/physical/perform_experiment_actions(datum/component/experiment_handler/experiment_handler, atom/target) + unregister_events() + currently_scanned_atom = target + linked_experiment_handler = experiment_handler + if(register_events()) + return TRUE + currently_scanned_atom = null + linked_experiment_handler = null + return FALSE + +/** + * Handles registering to events relevant to the experiment + */ +/datum/experiment/physical/proc/register_events() + return FALSE + +/** + * Handles unregistering to events relevant to the experiment + */ +/datum/experiment/physical/proc/unregister_events() + return diff --git a/code/modules/experisci/experiment/types/random_scanning.dm b/code/modules/experisci/experiment/types/random_scanning.dm new file mode 100644 index 00000000000..e80a80b5a0e --- /dev/null +++ b/code/modules/experisci/experiment/types/random_scanning.dm @@ -0,0 +1,21 @@ +/datum/experiment/scanning/random + name = "Base random scanning experiment" + description = "This experiment's contents will be randomized. Good luck!" + ///list of types which that can be included in the experiment. Randomly picked from on New + var/list/possible_types = list() + /// The total desired number of atoms to have scanned + var/total_requirement = 0 + /// Max amount of a requirement per type + var/max_requirement_per_type = 100 + +/datum/experiment/scanning/random/New() + // Generate random contents + if (possible_types.len) + var/picked = 0 + while (picked < total_requirement) + var/randum = min(rand(1, total_requirement - picked), max_requirement_per_type) //Short for "random num" and not "this is dum that I have to rename 100 different variable names" + required_atoms[pick(possible_types)] += randum + picked += randum + + // Fill the experiment as per usual + ..() diff --git a/code/modules/experisci/experiment/types/scanning.dm b/code/modules/experisci/experiment/types/scanning.dm new file mode 100644 index 00000000000..ab2b11d9de5 --- /dev/null +++ b/code/modules/experisci/experiment/types/scanning.dm @@ -0,0 +1,140 @@ +/** + * # Scanning Experiment + * + * This is the base implementation of scanning experiments. + * + * This class should be subclassed for producing actual experiments. The + * procs should be extended where necessary. + */ +/datum/experiment/scanning + name = "Scanning Experiment" + description = "Base experiment for scanning atoms" + exp_tag = "Scan" + allowed_experimentors = list(/obj/item/experi_scanner, /obj/machinery/destructive_scanner) + performance_hint = "Perform scanning experiments using a handheld experi-scanner, or the stationary experimental destructive scanner. \ + Destructive scans can only be performed with the experimental destructive scanner." + /// The typepaths and number of atoms that must be scanned + var/list/required_atoms = list() + /// The list of atoms with sub-lists of atom references for scanned atoms contributing to the experiment + var/list/scanned = list() + +/** + * Initializes the scanned atoms lists + * + * Initializes the internal scanned atoms list to keep track of which atoms have already been scanned + */ +/datum/experiment/scanning/New() + . = ..() + for (var/req_atom in required_atoms) + scanned[req_atom] = traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? 0 : list() + +/** + * Checks if the scanning experiment is complete + * + * Returns TRUE/FALSE as to if the necessary number of atoms have been + * scanned. + */ +/datum/experiment/scanning/is_complete() + . = TRUE + var/destructive = traits & EXPERIMENT_TRAIT_DESTRUCTIVE + for (var/req_atom in required_atoms) + var/list/seen = scanned[req_atom] + if (destructive && (!(req_atom in scanned) || scanned[req_atom] != required_atoms[req_atom])) + return FALSE + if (!destructive && (!seen || seen.len != required_atoms[req_atom])) + return FALSE + +/** + * Gets the number of atoms that have been scanned and the goal + * + * This proc returns a string describing the number of atoms that + * have been scanned as well as the target number of atoms. + */ +/datum/experiment/scanning/check_progress() + . = list() + for (var/atom_type in required_atoms) + var/atom/required_atom = atom_type + var/list/seen_instances = scanned[required_atom] + . += serialize_progress_stage(required_atom, seen_instances) + +/** + * Serializes a progress stage into a list to be sent to the UI + * + * Arguments: + * * target - The targeted atom for this progress stage + * * seen_instances - The number of instances seen of this atom + */ +/datum/experiment/scanning/proc/serialize_progress_stage(atom/target, list/seen_instances) + var/scanned_total = traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len + return EXPERIMENT_PROG_INT("Scan samples of \a [initial(target.name)]", scanned_total, required_atoms[target]) + +/** + * Attempts to scan an atom towards the experiment's goal + * + * This proc attempts to scan an atom towards the experiment's goal, + * and returns TRUE/FALSE based on success. + * Arguments: + * * target - The atom to attempt to scan + */ +/datum/experiment/scanning/perform_experiment_actions(datum/component/experiment_handler/experiment_handler, atom/target) + var/contributing_index_value = get_contributing_index(target) + if (contributing_index_value) + scanned[contributing_index_value] += traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? 1 : target + if(traits & EXPERIMENT_TRAIT_DESTRUCTIVE && !isliving(target))//only qdel things when destructive scanning and they're not living (living things get gibbed) + qdel(target) + do_after_experiment(target, contributing_index_value) + return TRUE + +/datum/experiment/scanning/actionable(datum/component/experiment_handler/experiment_handler, atom/target) + return ..() && get_contributing_index(target) + +/** + * Attempts to get the typepath for an atom that would contribute to the experiment + * + * This proc checks the required atoms for a typepath that this target atom can contribute to + * and if found returns that typepath, otherwise returns null + * Arguments: + * * target - The atom to attempt to scan + */ +/datum/experiment/scanning/proc/get_contributing_index(atom/target) + var/destructive = traits & EXPERIMENT_TRAIT_DESTRUCTIVE + for (var/req_atom in required_atoms) + if (!istype(target, req_atom)) + continue + + // Try to select a required atom that this scanned atom would contribute towards + var/selected + var/list/seen = scanned[req_atom] + if (destructive && (req_atom in scanned) && scanned[req_atom] < required_atoms[req_atom]) + selected = req_atom + else if (!destructive && seen.len < required_atoms[req_atom] && !(target in seen)) + selected = req_atom + + // Run any additonal checks if necessary + if (selected && final_contributing_index_checks(target, selected)) + return selected + +/** + * Performs any additional checks against the atom being considered for selection as a contributing index + * + * This proc is intended to be used to add additional functionality to contributing index checks + * without having to duplicate the iteration structure of get_contributing_index() + * Arguments: + * * target - The atom being scanned + * * typepath - The typepath (selected index) of the target atom + */ +/datum/experiment/scanning/proc/final_contributing_index_checks(atom/target, typepath) + return TRUE + +/** + * Performs actions following a successful experiment action + * + * This proc is intended to be used to add additional functionality to follow experiment + * actions without having to change the perform_experiment_actions proc to get access to the + * selected typepath index + * Arguments: + * * target - The atom being scanned + * * typepath - The typepath (selected index) of the target atom + */ +/datum/experiment/scanning/proc/do_after_experiment(atom/target, typepath) + return TRUE diff --git a/code/modules/experisci/experiment/types/scanning_material.dm b/code/modules/experisci/experiment/types/scanning_material.dm new file mode 100644 index 00000000000..714205289de --- /dev/null +++ b/code/modules/experisci/experiment/types/scanning_material.dm @@ -0,0 +1,24 @@ +/datum/experiment/scanning/random/material + name = "Material Scanning Experiment" + description = "Base experiment for scanning atoms with materials" + exp_tag = "Material Scan" + total_requirement = 8 + possible_types = list(/obj/structure/chair, /obj/structure/toilet, /obj/structure/table, /turf/closed/wall, /turf/open/floor) + ///List of materials that can be required. + var/possible_material_types = list() + ///List of materials actually required, indexed by the atom that is required. + var/required_materials = list() + +/datum/experiment/scanning/random/material/New() + . = ..() + for(var/req_atom in required_atoms) + var/chosen_material = pick(possible_material_types) + required_materials[req_atom] = chosen_material + +/datum/experiment/scanning/random/material/final_contributing_index_checks(atom/target, typepath) + return ..() && target.custom_materials && target.has_material_type(required_materials[typepath]) + +/datum/experiment/scanning/random/material/serialize_progress_stage(atom/target, list/seen_instances) + var/datum/material/required_material = GET_MATERIAL_REF(required_materials[target]) + return EXPERIMENT_PROG_INT("Scan samples of \a [required_material.name] [initial(target.name)]", \ + traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target]) diff --git a/code/modules/experisci/experiment/types/scanning_points.dm b/code/modules/experisci/experiment/types/scanning_points.dm new file mode 100644 index 00000000000..7b8c7b07d4b --- /dev/null +++ b/code/modules/experisci/experiment/types/scanning_points.dm @@ -0,0 +1,46 @@ +/datum/experiment/scanning/points + name = "Point Scanning Experiment" + description = "Base experiment for scanning experiments tracked by points" + /// The current points gained on this experiment + var/points = 0 + /// The total required points for this experiment + var/required_points + +/datum/experiment/scanning/points/is_complete() + return points >= required_points + +/datum/experiment/scanning/points/check_progress() + . = EXPERIMENT_PROG_INT("Scan samples of the following objects to accumulate enough points to complete this experiment.", points, required_points) + var/complete = is_complete() + var/point_val_cache = list() + for (var/a_type in required_atoms) + var/atom/req_atom = a_type + if (!point_val_cache["[required_atoms[a_type]]"]) + point_val_cache["[required_atoms[a_type]]"] = list() + point_val_cache["[required_atoms[a_type]]"] += initial(req_atom.name) + + for (var/point_amt in point_val_cache) + var/list/types = point_val_cache[point_amt] + var/types_joined = types.Join(", ") + . += EXPERIMENT_PROG_DETAIL("[text2num(point_amt)] point\s: [types_joined]", complete) + +/datum/experiment/scanning/points/get_contributing_index(atom/target) + var/destructive = traits & EXPERIMENT_TRAIT_DESTRUCTIVE + for (var/req_atom in required_atoms) + if (!istype(target, req_atom)) + continue + + // Try to select a required atom that this scanned atom would contribute towards + var/selected + if (destructive && (req_atom in scanned)) + selected = req_atom + else if (!destructive && !(target in scanned[req_atom])) + selected = req_atom + + // Run any additonal checks if necessary + if (selected && final_contributing_index_checks(target, selected)) + return selected + +/datum/experiment/scanning/points/do_after_experiment(atom/target, typepath) + . = ..() + points = min(required_points, points + required_atoms[typepath]) diff --git a/code/modules/experisci/experiment/types/scanning_vatgrown.dm b/code/modules/experisci/experiment/types/scanning_vatgrown.dm new file mode 100644 index 00000000000..63bdf171a8a --- /dev/null +++ b/code/modules/experisci/experiment/types/scanning_vatgrown.dm @@ -0,0 +1,14 @@ +/datum/experiment/scanning/random/cytology + name = "Cytology Scanning Experiment" + description = "Base experiment for scanning atoms that were vatgrown" + exp_tag = "Cytology Scan" + total_requirement = 1 + possible_types = list(/mob/living/simple_animal/hostile/cockroach) + traits = EXPERIMENT_TRAIT_DESTRUCTIVE + +/datum/experiment/scanning/random/cytology/final_contributing_index_checks(atom/target, typepath) + return ..() && HAS_TRAIT(target, TRAIT_VATGROWN) + +/datum/experiment/scanning/random/cytology/serialize_progress_stage(atom/target, list/seen_instances) + return EXPERIMENT_PROG_INT("Scan samples of \a vat-grown [initial(target.name)]", \ + traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target]) diff --git a/code/modules/experisci/handheld_scanner.dm b/code/modules/experisci/handheld_scanner.dm new file mode 100644 index 00000000000..153958c3c38 --- /dev/null +++ b/code/modules/experisci/handheld_scanner.dm @@ -0,0 +1,24 @@ +/** + * # Experi-Scanner + * + * Handheld scanning unit to perform scanning experiments + */ +/obj/item/experi_scanner + name = "Experi-Scanner" + desc = "A handheld scanner used for completing the many experiments of modern science." + w_class = WEIGHT_CLASS_SMALL + icon = 'icons/obj/device.dmi' + icon_state = "experiscanner" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + +/obj/item/experi_scanner/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +// Late initialize to allow for the rnd servers to initialize first +/obj/item/experi_scanner/LateInitialize() + . = ..() + AddComponent(/datum/component/experiment_handler, \ + allowed_experiments = list(/datum/experiment/scanning, /datum/experiment/physical),\ + disallowed_traits = EXPERIMENT_TRAIT_DESTRUCTIVE) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index af92e73d61b..9d3c4819e7f 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -527,17 +527,10 @@ All effects don't start immediately, but rather get worse over time; the rate is if(SSresearch.science_tech) if(drunkenness >= 12.9 && drunkenness <= 13.8) drunkenness = round(drunkenness, 0.01) - var/ballmer_percent = 0 - if(drunkenness == 13.35) // why run math if I dont have to - ballmer_percent = 1 - else - ballmer_percent = (-abs(drunkenness - 13.35) / 0.9) + 1 if(DT_PROB(2.5, delta_time)) say(pick_list_replacements(VISTA_FILE, "ballmer_good_msg"), forced = "ballmer") - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS * ballmer_percent)) if(drunkenness > 26) // by this point you're into windows ME territory if(DT_PROB(2.5, delta_time)) - SSresearch.science_tech.remove_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS)) say(pick_list_replacements(VISTA_FILE, "ballmer_windows_me_msg"), forced = "ballmer") if(drunkenness >= 41) diff --git a/code/modules/modular_computers/computers/item/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet_presets.dm index a812c62bc55..7dac5dc416c 100644 --- a/code/modules/modular_computers/computers/item/tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/tablet_presets.dm @@ -41,6 +41,7 @@ install_component(new /obj/item/computer_hardware/sensorpackage) install_component(new /obj/item/computer_hardware/card_slot/secondary) hard_drive.store_file(new /datum/computer_file/program/budgetorders) + hard_drive.store_file(new /datum/computer_file/program/science) /// Given by the syndicate as part of the contract uplink bundle - loads in the Contractor Uplink. /obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink/Initialize() diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm new file mode 100644 index 00000000000..c4801fb8cad --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -0,0 +1,217 @@ +/datum/computer_file/program/science + filename = "experi_track" + filedesc = "Nanotrasen Science Hub" + program_icon_state = "research" + extended_desc = "Connect to the internal science server in order to assist in station research efforts." + requires_ntnet = TRUE + size = 16 + tgui_id = "NtosTechweb" + program_icon = "atom" + required_access = ACCESS_RND + transfer_access = ACCESS_RD + /// Reference to global science techweb + var/datum/techweb/stored_research + /// Determines if the console is locked, and consequently if actions can be performed with it + var/locked = FALSE + /// Used for compressing data sent to the UI via static_data as payload size is of concern + var/id_cache = list() + /// Sequence var for the id cache + var/id_cache_seq = 1 + +/datum/computer_file/program/science/run_program(mob/living/user) + . = ..() + stored_research = SSresearch.science_tech + + +/datum/computer_file/program/science/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/research_designs) + ) + +// heavy data from this proc should be moved to static data when possible +/datum/computer_file/program/science/ui_data(mob/user) + var/list/data = get_header_data() + data += list( + "nodes" = list(), + "experiments" = list(), + "researched_designs" = stored_research.researched_designs, + "points" = stored_research.research_points, + "points_last_tick" = stored_research.last_bitcoins, + "web_org" = stored_research.organization, + "sec_protocols" = !(computer.obj_flags & EMAGGED), + "t_disk" = null, //Not doing disk operations on the app, use the console for that. + "d_disk" = null, //See above. + "locked" = locked + ) + + // Serialize all nodes to display + for(var/tier in stored_research.tiers) + var/datum/techweb_node/node = SSresearch.techweb_node_by_id(tier) + + // Ensure node is supposed to be visible + if (stored_research.hidden_nodes[tier]) + continue + + data["nodes"] += list(list( + "id" = node.id, + "can_unlock" = stored_research.can_unlock_node(node), + "tier" = stored_research.tiers[node.id] + )) + + // Get experiments and serialize them + var/list/exp_to_process = stored_research.available_experiments.Copy() + for (var/comp_experi in stored_research.completed_experiments) + exp_to_process += stored_research.completed_experiments[comp_experi] + for (var/process_experi in exp_to_process) + var/datum/experiment/unf_experi = process_experi + data["experiments"][unf_experi.type] = list( + "name" = unf_experi.name, + "description" = unf_experi.description, + "tag" = unf_experi.exp_tag, + "progress" = unf_experi.check_progress(), + "completed" = unf_experi.completed, + "performance_hint" = unf_experi.performance_hint + ) + return data + +/datum/computer_file/program/science/ui_act(action, list/params) + . = ..() + if (.) + return + var/obj/item/computer_hardware/card_slot/card_slot + if(computer) + card_slot = computer.all_components[MC_CARD] + var/obj/item/card/id/user_id_card = card_slot.stored_card + + // Check if the console is locked to block any actions occuring + if (locked && action != "toggleLock") + computer.say("Console is locked, cannot perform further actions.") + return TRUE + + switch (action) + if ("toggleLock") + if(computer.obj_flags & EMAGGED) + to_chat(usr, "Security protocol error: Unable to access locking protocols.") + return TRUE + if(ACCESS_RND in user_id_card?.access) + locked = !locked + else + to_chat(usr, "Unauthorized Access. Please insert research ID card.") + return TRUE + if ("researchNode") + if(!SSresearch.science_tech.available_nodes[params["node_id"]]) + return TRUE + research_node(params["node_id"], usr) + return TRUE + +/datum/computer_file/program/science/ui_static_data(mob/user) + . = list( + "static_data" = list() + ) + + // Build node cache... + // Note this looks a bit ugly but its to reduce the size of the JSON payload + // by the greatest amount that we can, as larger JSON payloads result in + // hanging when the user opens the UI + var/node_cache = list() + for (var/node_id in SSresearch.techweb_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] || SSresearch.error_node + var/compressed_id = "[compress_id(node.id)]" + node_cache[compressed_id] = list( + "name" = node.display_name, + "description" = node.description + ) + if (LAZYLEN(node.research_costs)) + node_cache[compressed_id]["costs"] = list() + for (var/node_cost in node.research_costs) + node_cache[compressed_id]["costs"]["[compress_id(node_cost)]"] = node.research_costs[node_cost] + if (LAZYLEN(node.prereq_ids)) + node_cache[compressed_id]["prereq_ids"] = list() + for (var/prerequisite_node in node.prereq_ids) + node_cache[compressed_id]["prereq_ids"] += compress_id(prerequisite_node) + if (LAZYLEN(node.design_ids)) + node_cache[compressed_id]["design_ids"] = list() + for (var/unlocked_design in node.design_ids) + node_cache[compressed_id]["design_ids"] += compress_id(unlocked_design) + if (LAZYLEN(node.unlock_ids)) + node_cache[compressed_id]["unlock_ids"] = list() + for (var/unlocked_node in node.unlock_ids) + node_cache[compressed_id]["unlock_ids"] += compress_id(unlocked_node) + if (LAZYLEN(node.required_experiments)) + node_cache[compressed_id]["required_experiments"] = node.required_experiments + if (LAZYLEN(node.discount_experiments)) + node_cache[compressed_id]["discount_experiments"] = node.discount_experiments + + // Build design cache + var/design_cache = list() + var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs) + var/size32x32 = "[spritesheet.name]32x32" + for (var/design_id in SSresearch.techweb_designs) + var/datum/design/design = SSresearch.techweb_designs[design_id] || SSresearch.error_design + var/compressed_id = "[compress_id(design.id)]" + var/size = spritesheet.icon_size_id(design.id) + design_cache[compressed_id] = list( + design.name, + "[size == size32x32 ? "" : "[size] "][design.id]" + ) + + // Ensure id cache is included for decompression + var/flat_id_cache = list() + for (var/id in id_cache) + flat_id_cache += id + + .["static_data"] = list( + "node_cache" = node_cache, + "design_cache" = design_cache, + "id_cache" = flat_id_cache + ) + +/** + * Compresses an ID to an integer representation using the id_cache, used for deduplication + * in sent JSON payloads + * + * Arguments: + * * id - the ID to compress + */ +/datum/computer_file/program/science/proc/compress_id(id) + if (!id_cache[id]) + id_cache[id] = id_cache_seq + id_cache_seq += 1 + return id_cache[id] + +/datum/computer_file/program/science/proc/research_node(id, mob/user) + if(!stored_research.available_nodes[id] || stored_research.researched_nodes[id]) + computer.say("Node unlock failed: Either already researched or not available!") + return FALSE + var/datum/techweb_node/tech_node = SSresearch.techweb_node_by_id(id) + if(!istype(tech_node)) + computer.say("Node unlock failed: Unknown error.") + return FALSE + var/list/price = tech_node.get_price(stored_research) + if(stored_research.can_afford(price)) + computer.investigate_log("[key_name(user)] researched [id]([json_encode(price)]) on techweb id [stored_research.id] via [computer].", INVESTIGATE_RESEARCH) + if(stored_research == SSresearch.science_tech) + SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = tech_node.display_name, "price" = "[json_encode(price)]", "time" = SQLtime())) + if(stored_research.research_node_id(id)) + computer.say("Successfully researched [tech_node.display_name].") + var/logname = "Unknown" + if(isAI(user)) + logname = "AI: [user.name]" + if(iscarbon(user)) + var/obj/item/card/id/idcard = user.get_active_held_item() + if(istype(idcard)) + logname = "User: [idcard.registered_name]" + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + var/obj/item/worn = human_user.wear_id + if(istype(worn)) + var/obj/item/card/id/id_card_of_human_user = worn.GetID() + if(istype(id_card_of_human_user)) + logname = "User: [id_card_of_human_user.registered_name]" + stored_research.research_logs = list(list(tech_node.display_name, price["General Research"], logname, "[get_area(src)] ([computer.x],[computer.y],[computer.z])")) + return TRUE + else + computer.say("Failed to research node: Internal database error!") + return FALSE + computer.say("Not enough research points...") + return FALSE diff --git a/code/modules/research/designs/experisci_designs.dm b/code/modules/research/designs/experisci_designs.dm new file mode 100644 index 00000000000..fb74bc827d7 --- /dev/null +++ b/code/modules/research/designs/experisci_designs.dm @@ -0,0 +1,9 @@ +/datum/design/experi_scanner + name = "Experimental Scanner" + desc = "Experimental scanning unit used for performing scanning experiments." + id = "experi_scanner" + build_type = PROTOLATHE + materials = list(/datum/material/glass = 500, /datum/material/iron = 500) + build_path = /obj/item/experi_scanner + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 7f2d48ca7fc..3bb3f2d6335 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -312,6 +312,22 @@ build_path = /obj/item/circuitboard/machine/dnascanner category = list("Research Machinery") +/datum/design/board/destructive_scanner + name = "Machine Design (Destructive Scanner Board)" + desc = "The circuit board for an experimental destructive scanner." + id = "destructive_scanner" + build_path = /obj/item/circuitboard/machine/destructive_scanner + category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/doppler_array + name = "Machine Design (Tachyon-Doppler Research Array Board)" + desc = "The circuit board for a tachyon-doppler research array" + id = "doppler_array" + build_path = /obj/item/circuitboard/machine/doppler_array + category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + /datum/design/board/microwave name = "Machine Design (Microwave Board)" desc = "The circuit board for a microwave." diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm index df7854ff701..d744bdc5b85 100644 --- a/code/modules/research/designs/nanite_designs.dm +++ b/code/modules/research/designs/nanite_designs.dm @@ -25,20 +25,6 @@ program_type = /datum/nanite_program/viral category = list("Utility Nanites") -/datum/design/nanites/research - name = "Distributed Computing" - desc = "The nanites aid the research servers by performing a portion of its calculations, increasing research point generation." - id = "research_nanites" - program_type = /datum/nanite_program/research - category = list("Utility Nanites") - -/datum/design/nanites/researchplus - name = "Neural Network" - desc = "The nanites link the host's brains together forming a neural research network, that becomes more efficient with the amount of total hosts. Can be overloaded to increase research output." - id = "researchplus_nanites" - program_type = /datum/nanite_program/researchplus - category = list("Utility Nanites") - /datum/design/nanites/monitoring name = "Monitoring" desc = "The nanites monitor the host's vitals and location, sending them to the suit sensor network." diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 33625135619..87fb2732359 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -111,11 +111,7 @@ Note: Must be placed within 3 tiles of the R&D Console return FALSE if(QDELETED(loaded_item) || QDELETED(src)) return FALSE - var/loaded_type = loaded_item.type - if(destroy_item(loaded_item)) - stored_research.add_point_list(point_value) - stored_research.deconstructed_items[loaded_type] = point_value - + destroy_item(loaded_item) return TRUE /obj/machinery/rnd/destructive_analyzer/proc/unload_item() diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 5d40dbb6b1a..5d7db7a4e78 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -464,10 +464,6 @@ visible_message("[src] scans the [exp_on], revealing its true nature!") playsound(src, 'sound/effects/supermatter.ogg', 50, 3, -1) var/obj/item/relic/R = loaded_item - if (!R.revealed) - var/points = rand(3500,3750) // discovery reward - new /obj/item/research_notes(drop_location(src), points, "experimentation") - visible_message(" This discovery netted [points] points for research.") R.reveal() investigate_log("Experimentor has revealed a relic with [R.realProc] effect.", INVESTIGATE_EXPERIMENTOR) ejectItem() diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm index b33b390f670..6e84a291204 100644 --- a/code/modules/research/nanites/nanite_programs/utility.dm +++ b/code/modules/research/nanites/nanite_programs/utility.dm @@ -154,53 +154,6 @@ /datum/nanite_program/metabolic_synthesis/active_effect() host_mob.adjust_nutrition(-0.5) -/datum/nanite_program/research - name = "Distributed Computing" - desc = "The nanites aid the research servers by performing a portion of its calculations, increasing research point generation." - use_rate = 0.2 - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/research/active_effect() - if(!iscarbon(host_mob)) - return - var/points = 1 - if(!host_mob.client) //less brainpower - points *= 0.25 - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points)) - -/datum/nanite_program/researchplus - name = "Neural Network" - desc = "The nanites link the host's brains together forming a neural research network, that becomes more efficient with the amount of total hosts." - use_rate = 0.3 - rogue_types = list(/datum/nanite_program/brain_decay) - -/datum/nanite_program/researchplus/enable_passive_effect() - . = ..() - if(!iscarbon(host_mob)) - return - if(host_mob.client) - SSnanites.neural_network_count++ - else - SSnanites.neural_network_count += 0.25 - -/datum/nanite_program/researchplus/disable_passive_effect() - . = ..() - if(!iscarbon(host_mob)) - return - if(host_mob.client) - SSnanites.neural_network_count-- - else - SSnanites.neural_network_count -= 0.25 - -/datum/nanite_program/researchplus/active_effect() - if(!iscarbon(host_mob)) - return - var/mob/living/carbon/C = host_mob - var/points = round(SSnanites.neural_network_count / 12, 0.1) - if(!C.client) //less brainpower - points *= 0.25 - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points)) - /datum/nanite_program/access name = "Subdermal ID" desc = "The nanites store the host's ID access rights in a subdermal magnetic strip. Updates when triggered, copying the host's current access." diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 163cf949b33..ecf325ff854 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -1,3 +1,5 @@ +#define RND_TECH_DISK "tech" +#define RND_DESIGN_DISK "design" /* Research and Development (R&D) Console @@ -19,34 +21,25 @@ Nothing else in the console has ID requirements. desc = "A console used to interface with R&D tools." icon_screen = "rdcomp" icon_keyboard = "rd_key" - var/datum/techweb/stored_research //Reference to global science techweb. - var/obj/item/disk/tech_disk/t_disk //Stores the technology disk. - var/obj/item/disk/design_disk/d_disk //Stores the design disk. circuit = /obj/item/circuitboard/computer/rdconsole - - req_access = list(ACCESS_RND) //lA AND SETTING MANIPULATION REQUIRES SCIENTIST ACCESS. - - //UI VARS - var/screen = RDSCREEN_MENU - var/back = RDSCREEN_MENU + req_access = list(ACCESS_RND) // Locking and unlocking the console requires science access + /// Reference to global science techweb + var/datum/techweb/stored_research + /// The stored technology disk, if present + var/obj/item/disk/tech_disk/t_disk + /// The stored design disk, if present + var/obj/item/disk/design_disk/d_disk + /// Determines if the console is locked, and consequently if actions can be performed with it var/locked = FALSE - var/tdisk_uple = FALSE - var/ddisk_uple = FALSE - var/datum/selected_node_id - var/datum/selected_design_id - var/selected_category - var/disk_slot_selected - var/searchstring = "" - var/searchtype = "" - var/ui_mode = RDCONSOLE_UI_MODE_NORMAL - - var/research_control = TRUE + /// Used for compressing data sent to the UI via static_data as payload size is of concern + var/id_cache = list() + /// Sequence var for the id cache + var/id_cache_seq = 1 /proc/CallMaterialName(ID) if (istype(ID, /datum/material)) var/datum/material/material = ID return material.name - else if(GLOB.chemical_reagents_list[ID]) var/datum/reagent/reagent = GLOB.chemical_reagents_list[ID] return reagent.name @@ -69,12 +62,6 @@ Nothing else in the console has ID requirements. return ..() /obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, params) - if(istype(D, /obj/item/research_notes)) - var/obj/item/research_notes/R = D - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = R.value)) - playsound(src,'sound/machines/copier.ogg', 100, TRUE) - qdel(R) - return TRUE //Loading a disk into it. if(istype(D, /obj/item/disk)) if(istype(D, /obj/item/disk/tech_disk)) @@ -147,417 +134,267 @@ Nothing else in the console has ID requirements. locked = FALSE return ..() -/obj/machinery/computer/rdconsole/proc/list_categories(list/categories, menu_num as num) - if(!categories) - return +/obj/machinery/computer/rdconsole/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "Techweb") + ui.open() - var/line_length = 1 - var/list/l = "" +/obj/machinery/computer/rdconsole/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/research_designs) + ) - for(var/C in categories) - if(line_length > 2) - l += "" - line_length = 1 +// heavy data from this proc should be moved to static data when possible +/obj/machinery/computer/rdconsole/ui_data(mob/user) + . = list( + "nodes" = list(), + "experiments" = list(), + "researched_designs" = stored_research.researched_designs, + "points" = stored_research.research_points, + "points_last_tick" = stored_research.last_bitcoins, + "web_org" = stored_research.organization, + "sec_protocols" = !(obj_flags & EMAGGED), + "t_disk" = null, + "d_disk" = null, + "locked" = locked + ) - l += "" - line_length++ - - l += "
[C]
" - return l - -/obj/machinery/computer/rdconsole/proc/ui_header() - var/list/l = list() - var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/research_designs) - l += "[sheet.css_tag()][RDSCREEN_NOBREAK]" - l += "
[stored_research.organization] Research and Development Network" - l += "Available points:
[techweb_point_display_rdconsole(stored_research.research_points, stored_research.last_bitcoins)]" - l += "Security protocols: [obj_flags & EMAGGED ? "Disabled" : "Enabled"]" - l += "Main Menu | Back
[RDSCREEN_NOBREAK]" - l += "[ui_mode == 1? "Normal View" : "Normal View"] | [ui_mode == 2? "Expert View" : "Expert View"] | [ui_mode == 3? "List View" : "List View"]" - return l - -/obj/machinery/computer/rdconsole/proc/ui_main_menu() - var/list/l = list() - if(research_control) - l += "

Technology" - if(d_disk) - l += "
Design Disk" - if(t_disk) - l += "
Tech Disk" - l += "
Settings

" - return l - -/obj/machinery/computer/rdconsole/proc/ui_locked() - return list("

SYSTEM LOCKED


") - -/obj/machinery/computer/rdconsole/proc/ui_settings() - var/list/l = list() - l += "

R&D Console Settings:

" - l += "Lock Console
" - return l - -/obj/machinery/computer/rdconsole/proc/ui_techdisk() //Legacy code - RDSCREEN_UI_TDISK_CHECK - var/list/l = list() - l += "
Disk Operations: Clear Disk" - l += "Eject Disk" - l += "Upload All" - l += "Load Technology to Disk
" - l += "

Stored Technology Nodes:

" - for(var/i in t_disk.stored_research.researched_nodes) - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(i) - l += "[N.display_name]" - l += "
" - return l - -/obj/machinery/computer/rdconsole/proc/ui_designdisk() //Legacy code - RDSCREEN_UI_DDISK_CHECK - var/list/l = list() - l += "Disk Operations: Clear DiskUpload AllEject Disk" - for(var/i in 1 to d_disk.max_blueprints) - l += "
" - if(d_disk.blueprints[i]) - var/datum/design/D = d_disk.blueprints[i] - l += "[D.name]" - l += "Operations: Upload to database Clear Slot" - else - l += "Empty Slot Operations: Load Design to Slot" - l += "
" - return l - -/obj/machinery/computer/rdconsole/proc/ui_designdisk_upload() //Legacy code - RDSCREEN_UI_DDISK_CHECK - var/list/l = list() - l += "Return to Disk Operations
" - l += "

Load Design to Disk:

" - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - l += "[D.name] " - l += "Copy to Disk" - l += "
" - return l - -/obj/machinery/computer/rdconsole/proc/ui_techweb() - var/list/l = list() - if(ui_mode != RDCONSOLE_UI_MODE_LIST) - var/list/columns = list() - var/max_tier = 0 - for (var/node_ in stored_research.tiers) - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_) - var/tier = stored_research.tiers[node.id] - LAZYINITLIST(columns["[tier]"]) // String hackery to make the numbers associative - columns["[tier]"] += ui_techweb_single_node(node, minimal=(tier != 1)) - max_tier = max(max_tier, tier) - - l += "[RDSCREEN_NOBREAK]" - if(max_tier) - for(var/tier in 0 to max_tier) - l += "[RDSCREEN_NOBREAK]" - l += "
ResearchedAvailableFuture
[RDSCREEN_NOBREAK]" - l += columns["[tier]"] - l += "
[RDSCREEN_NOBREAK]" - else - var/list/avail = list() //This could probably be optimized a bit later. - var/list/unavail = list() - var/list/res = list() - for(var/v in stored_research.researched_nodes) - res += SSresearch.techweb_node_by_id(v) - for(var/v in stored_research.available_nodes) - if(stored_research.researched_nodes[v] || stored_research.hidden_nodes[v]) - continue - avail += SSresearch.techweb_node_by_id(v) - for(var/v in stored_research.visible_nodes) - if(stored_research.available_nodes[v]) - continue - unavail += SSresearch.techweb_node_by_id(v) - l += "

Technology Nodes:

[RDSCREEN_NOBREAK]" - l += "

Available for Research:

" - for(var/datum/techweb_node/N in avail) - var/not_unlocked = (stored_research.available_nodes[N.id] && !stored_research.researched_nodes[N.id]) - var/has_points = (stored_research.can_afford(N.get_price(stored_research))) - var/research_href = not_unlocked? (has_points? "Research" : "Not Enough Points") : null - l += "[N.display_name][research_href]" - l += "

Locked Nodes:

" - for(var/datum/techweb_node/N in unavail) - l += "[N.display_name]" - l += "

Researched Nodes:

" - for(var/datum/techweb_node/N in res) - l += "[N.display_name]" - l += "
[RDSCREEN_NOBREAK]" - return l - -/obj/machinery/computer/rdconsole/proc/machine_icon(atom/item) - return icon2html(initial(item.icon), usr, initial(item.icon_state), SOUTH) - -/obj/machinery/computer/rdconsole/proc/ui_techweb_single_node(datum/techweb_node/node, selflink=TRUE, minimal=FALSE) - var/list/l = list() - if (stored_research.hidden_nodes[node.id]) - return l - var/display_name = node.display_name - if (selflink) - display_name = "[display_name]" - l += "
[display_name] [RDSCREEN_NOBREAK]" - if(minimal) - l += "
[node.description]" - else - if(stored_research.researched_nodes[node.id]) - l += "Researched" - else if(stored_research.available_nodes[node.id]) - if(stored_research.can_afford(node.get_price(stored_research))) - l += "
[node.price_display(stored_research)]" + if (t_disk) + .["t_disk"] = list ( + "stored_research" = t_disk.stored_research.researched_nodes + ) + if (d_disk) + .["d_disk"] = list ( + "max_blueprints" = d_disk.max_blueprints, + "blueprints" = list() + ) + for (var/i in 1 to d_disk.max_blueprints) + if (d_disk.blueprints[i]) + var/datum/design/D = d_disk.blueprints[i] + .["d_disk"]["blueprints"] += D.id else - l += "
[node.price_display(stored_research)]" // gray - too expensive - else - l += "
[node.price_display(stored_research)]" // red - missing prereqs - if(ui_mode == RDCONSOLE_UI_MODE_NORMAL) - l += "[node.description]" - for(var/i in node.design_ids) - var/datum/design/D = SSresearch.techweb_design_by_id(i) - l += "[D.icon_html(usr)][RDSCREEN_NOBREAK]" - l += "
[RDSCREEN_NOBREAK]" - return l + .["d_disk"]["blueprints"] += null -/obj/machinery/computer/rdconsole/proc/ui_techweb_nodeview() - var/datum/techweb_node/selected_node = SSresearch.techweb_node_by_id(selected_node_id) - RDSCREEN_UI_SNODE_CHECK - var/list/l = list() - if(stored_research.hidden_nodes[selected_node.id]) - l += "

ERROR: RESEARCH NODE UNKNOWN.

" + + // Serialize all nodes to display + for(var/v in stored_research.tiers) + var/datum/techweb_node/n = SSresearch.techweb_node_by_id(v) + + // Ensure node is supposed to be visible + if (stored_research.hidden_nodes[v]) + continue + + .["nodes"] += list(list( + "id" = n.id, + "can_unlock" = stored_research.can_unlock_node(n), + "tier" = stored_research.tiers[n.id] + )) + + // Get experiments and serialize them + var/list/exp_to_process = stored_research.available_experiments.Copy() + for (var/e in stored_research.completed_experiments) + exp_to_process += stored_research.completed_experiments[e] + for (var/e in exp_to_process) + var/datum/experiment/ex = e + .["experiments"][ex.type] = list( + "name" = ex.name, + "description" = ex.description, + "tag" = ex.exp_tag, + "progress" = ex.check_progress(), + "completed" = ex.completed, + "performance_hint" = ex.performance_hint + ) + +/** + * Compresses an ID to an integer representation using the id_cache, used for deduplication + * in sent JSON payloads + * + * Arguments: + * * id - the ID to compress + */ +/obj/machinery/computer/rdconsole/proc/compress_id(id) + if (!id_cache[id]) + id_cache[id] = id_cache_seq + id_cache_seq += 1 + return id_cache[id] + +/obj/machinery/computer/rdconsole/ui_static_data(mob/user) + . = list( + "static_data" = list() + ) + + // Build node cache... + // Note this looks a bit ugly but its to reduce the size of the JSON payload + // by the greatest amount that we can, as larger JSON payloads result in + // hanging when the user opens the UI + var/node_cache = list() + for (var/node_id in SSresearch.techweb_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] || SSresearch.error_node + var/compressed_id = "[compress_id(node.id)]" + node_cache[compressed_id] = list( + "name" = node.display_name, + "description" = node.description + ) + if (LAZYLEN(node.research_costs)) + node_cache[compressed_id]["costs"] = list() + for (var/node_cost in node.research_costs) + node_cache[compressed_id]["costs"]["[compress_id(node_cost)]"] = node.research_costs[node_cost] + if (LAZYLEN(node.prereq_ids)) + node_cache[compressed_id]["prereq_ids"] = list() + for (var/prerequisite_node in node.prereq_ids) + node_cache[compressed_id]["prereq_ids"] += compress_id(prerequisite_node) + if (LAZYLEN(node.design_ids)) + node_cache[compressed_id]["design_ids"] = list() + for (var/unlocked_design in node.design_ids) + node_cache[compressed_id]["design_ids"] += compress_id(unlocked_design) + if (LAZYLEN(node.unlock_ids)) + node_cache[compressed_id]["unlock_ids"] = list() + for (var/unlocked_node in node.unlock_ids) + node_cache[compressed_id]["unlock_ids"] += compress_id(unlocked_node) + if (LAZYLEN(node.required_experiments)) + node_cache[compressed_id]["required_experiments"] = node.required_experiments + if (LAZYLEN(node.discount_experiments)) + node_cache[compressed_id]["discount_experiments"] = node.discount_experiments + + // Build design cache + var/design_cache = list() + var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs) + var/size32x32 = "[spritesheet.name]32x32" + for (var/design_id in SSresearch.techweb_designs) + var/datum/design/design = SSresearch.techweb_designs[design_id] || SSresearch.error_design + var/compressed_id = "[compress_id(design.id)]" + var/size = spritesheet.icon_size_id(design.id) + design_cache[compressed_id] = list( + design.name, + "[size == size32x32 ? "" : "[size] "][design.id]" + ) + + // Ensure id cache is included for decompression + var/flat_id_cache = list() + for (var/id in id_cache) + flat_id_cache += id + + .["static_data"] = list( + "node_cache" = node_cache, + "design_cache" = design_cache, + "id_cache" = flat_id_cache + ) + +/obj/machinery/computer/rdconsole/ui_act(action, list/params) + . = ..() + if (.) return - l += "[RDSCREEN_NOBREAK]" - if (length(selected_node.prereq_ids)) - l += "[RDSCREEN_NOBREAK]" - l += "[RDSCREEN_NOBREAK]" - if (length(selected_node.unlock_ids)) - l += "[RDSCREEN_NOBREAK]" - - l += "[RDSCREEN_NOBREAK]" - if (length(selected_node.prereq_ids)) - l += "[RDSCREEN_NOBREAK]" - l += "[RDSCREEN_NOBREAK]" - if (length(selected_node.unlock_ids)) - l += "[RDSCREEN_NOBREAK]" - - l += "
RequiresCurrent NodeUnlocks
[RDSCREEN_NOBREAK]" - for (var/i in selected_node.prereq_ids) - l += ui_techweb_single_node(SSresearch.techweb_node_by_id(i)) - l += "[RDSCREEN_NOBREAK]" - l += ui_techweb_single_node(selected_node, selflink=FALSE) - l += "[RDSCREEN_NOBREAK]" - for (var/i in selected_node.unlock_ids) - l += ui_techweb_single_node(SSresearch.techweb_node_by_id(i)) - l += "
[RDSCREEN_NOBREAK]" - return l - -/obj/machinery/computer/rdconsole/proc/ui_techweb_designview() //Legacy code - var/datum/design/selected_design = SSresearch.techweb_design_by_id(selected_design_id) - RDSCREEN_UI_SDESIGN_CHECK - var/list/l = list() - l += "
[selected_design.icon_html(usr)][selected_design.name]
[RDSCREEN_NOBREAK]" - if(selected_design.build_type) - var/lathes = list() - if(selected_design.build_type & IMPRINTER) - lathes += "[machine_icon(/obj/machinery/rnd/production/circuit_imprinter)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & PROTOLATHE) - lathes += "[machine_icon(/obj/machinery/rnd/production/protolathe)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & AUTOLATHE) - lathes += "[machine_icon(/obj/machinery/autolathe)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & MECHFAB) - lathes += "[machine_icon(/obj/machinery/mecha_part_fabricator)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & BIOGENERATOR) - lathes += "[machine_icon(/obj/machinery/biogenerator)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & LIMBGROWER) - lathes += "[machine_icon(/obj/machinery/limbgrower)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & SMELTER) - lathes += "[machine_icon(/obj/machinery/mineral/processing_unit)][RDSCREEN_NOBREAK]" - l += "Construction types:" - l += lathes - l += "" - l += "Required materials:" - var/all_mats = selected_design.materials + selected_design.reagents_list - for(var/M in all_mats) - l += "* [CallMaterialName(M)] x [all_mats[M]]" - l += "Unlocked by:" - for (var/i in selected_design.unlocked_by) - l += ui_techweb_single_node(SSresearch.techweb_node_by_id(i)) - l += "[RDSCREEN_NOBREAK]
" - return l - -//Fuck TGUI. -/obj/machinery/computer/rdconsole/proc/generate_ui() - var/list/ui = list() - ui += ui_header() - if(locked) - ui += ui_locked() - else - switch(screen) - if(RDSCREEN_MENU) - ui += ui_main_menu() - if(RDSCREEN_TECHWEB) - ui += ui_techweb() - if(RDSCREEN_TECHWEB_NODEVIEW) - ui += ui_techweb_nodeview() - if(RDSCREEN_TECHWEB_DESIGNVIEW) - ui += ui_techweb_designview() - if(RDSCREEN_DESIGNDISK) - ui += ui_designdisk() - if(RDSCREEN_DESIGNDISK_UPLOAD) - ui += ui_designdisk_upload() - if(RDSCREEN_TECHDISK) - ui += ui_techdisk() - if(RDSCREEN_SETTINGS) - ui += ui_settings() - - for(var/i in 1 to length(ui)) - if(!findtextEx(ui[i], RDSCREEN_NOBREAK)) - ui[i] += "
" - . = ui.Join("") - return replacetextEx(., RDSCREEN_NOBREAK, "") - -/obj/machinery/computer/rdconsole/Topic(raw, ls) - if(..()) - return add_fingerprint(usr) - usr.set_machine(src) - if(ls["switch_screen"]) - back = screen - screen = text2num(ls["switch_screen"]) - if(ls["ui_mode"]) - ui_mode = text2num(ls["ui_mode"]) - if(ls["lock_console"]) - if(obj_flags & EMAGGED) - to_chat(usr, "Security protocol error: Unable to lock.") - return - if(allowed(usr)) - lock_console(usr) - else - to_chat(usr, "Unauthorized Access.") - if(ls["unlock_console"]) - if(allowed(usr)) - unlock_console(usr) - else - to_chat(usr, "Unauthorized Access.") - if(ls["back_screen"]) - back = text2num(ls["back_screen"]) - if(ls["category"]) - selected_category = ls["category"] - if(ls["eject_design"]) //Eject the design disk. - eject_disk("design") - screen = RDSCREEN_MENU - say("Ejecting Design Disk") - if(ls["eject_tech"]) //Eject the technology disk. - eject_disk("tech") - screen = RDSCREEN_MENU - say("Ejecting Technology Disk") - if(ls["disk_slot"]) - disk_slot_selected = text2num(ls["disk_slot"]) - if(ls["research_node"]) - if(!research_control) - return //honestly should call them out for href exploiting :^) - if(!SSresearch.science_tech.available_nodes[ls["research_node"]]) - return //Nope! - research_node(ls["research_node"], usr) - if(ls["clear_tech"]) //Erase la on the technology disk. - if(QDELETED(t_disk)) - say("No Technology Disk Inserted!") - return - qdel(t_disk.stored_research) - t_disk.stored_research = new - say("Wiping technology disk.") - if(ls["copy_tech"]) //Copy some technology la from the research holder to the disk. - if(QDELETED(t_disk)) - say("No Technology Disk Inserted!") - return - stored_research.copy_research_to(t_disk.stored_research) - screen = RDSCREEN_TECHDISK - say("Downloading to technology disk.") - if(ls["clear_design"]) //Erases la on the design disk. - if(QDELETED(d_disk)) - say("No Design Disk Inserted!") - return - var/n = text2num(ls["clear_design"]) - if(!n) - for(var/i in 1 to d_disk.max_blueprints) - d_disk.blueprints[i] = null - say("Wiping design disk.") - else + + // Check if the console is locked to block any actions occuring + if (locked && action != "toggleLock") + say("Console is locked, cannot perform further actions.") + return TRUE + + switch (action) + if ("toggleLock") + if(obj_flags & EMAGGED) + to_chat(usr, "Security protocol error: Unable to access locking protocols.") + return TRUE + if(allowed(usr)) + locked = !locked + else + to_chat(usr, "Unauthorized Access.") + return TRUE + if ("researchNode") + if(!SSresearch.science_tech.available_nodes[params["node_id"]]) + return TRUE + research_node(params["node_id"], usr) + return TRUE + if ("ejectDisk") + eject_disk(params["type"]) + return TRUE + if ("writeDesign") + if(QDELETED(d_disk)) + say("No Design Disk Inserted!") + return TRUE + var/slot = text2num(params["slot"]) + var/datum/design/design = SSresearch.techweb_design_by_id(params["selectedDesign"]) + if(design) + var/autolathe_friendly = TRUE + if(design.reagents_list.len) + autolathe_friendly = FALSE + design.category -= "Imported" + else + for(var/material in design.materials) + if( !(material in list(/datum/material/iron, /datum/material/glass))) + autolathe_friendly = FALSE + design.category -= "Imported" + + if(design.build_type & (AUTOLATHE|PROTOLATHE)) // Specifically excludes circuit imprinter and mechfab + design.build_type = autolathe_friendly ? (design.build_type | AUTOLATHE) : design.build_type + design.category |= "Imported" + d_disk.blueprints[slot] = design + return TRUE + if ("uploadDesignSlot") + if(QDELETED(d_disk)) + say("No design disk found.") + return TRUE + var/n = text2num(params["slot"]) + stored_research.add_design(d_disk.blueprints[n], TRUE) + return TRUE + if ("clearDesignSlot") + if(QDELETED(d_disk)) + say("No design disk inserted!") + return TRUE + var/n = text2num(params["slot"]) var/datum/design/D = d_disk.blueprints[n] say("Wiping design [D.name] from design disk.") d_disk.blueprints[n] = null - if(ls["updt_tech"]) //Uple the research holder with information from the technology disk. - if(QDELETED(t_disk)) - say("No Technology Disk Inserted!") - return - say("Uploading technology disk.") - t_disk.stored_research.copy_research_to(stored_research) - if(ls["copy_design"]) //Copy design from the research holder to the design disk. - if(QDELETED(d_disk)) - say("No Design Disk Inserted!") - return - var/slot = text2num(ls["copy_design"]) - var/datum/design/D = SSresearch.techweb_design_by_id(ls["copy_design_ID"]) - if(D) - var/autolathe_friendly = TRUE - if(D.reagents_list.len) - autolathe_friendly = FALSE - D.category -= "Imported" - else - for(var/x in D.materials) - if( !(x in list(/datum/material/iron, /datum/material/glass))) - autolathe_friendly = FALSE - D.category -= "Imported" - - if(D.build_type & (AUTOLATHE|PROTOLATHE)) // Specifically excludes circuit imprinter and mechfab - D.build_type = autolathe_friendly ? (D.build_type | AUTOLATHE) : D.build_type - D.category |= "Imported" - d_disk.blueprints[slot] = D - screen = RDSCREEN_DESIGNDISK - if(ls["view_node"]) - selected_node_id = ls["view_node"] - screen = RDSCREEN_TECHWEB_NODEVIEW - if(ls["view_design"]) - selected_design_id = ls["view_design"] - screen = RDSCREEN_TECHWEB_DESIGNVIEW - if(ls["updt_design"]) //Uploads a design from disk to the techweb. - if(QDELETED(d_disk)) - say("No design disk found.") - return - var/n = text2num(ls["updt_design"]) - if(!n) - for(var/D in d_disk.blueprints) - if(D) - stored_research.add_design(D, TRUE) - else - stored_research.add_design(d_disk.blueprints[n], TRUE) - - updateUsrDialog() - -/obj/machinery/computer/rdconsole/ui_interact(mob/user) - . = ..() - var/datum/browser/popup = new(user, "rndconsole", name, 900, 600) - popup.add_stylesheet("techwebs", 'html/browser/techwebs.css') - popup.set_content(generate_ui()) - popup.open() - -/obj/machinery/computer/rdconsole/proc/tdisk_uple_complete() - tdisk_uple = FALSE - updateUsrDialog() - -/obj/machinery/computer/rdconsole/proc/ddisk_uple_complete() - ddisk_uple = FALSE - updateUsrDialog() + return TRUE + if ("eraseDisk") + if (params["type"] == RND_DESIGN_DISK) + if(QDELETED(d_disk)) + say("No design disk inserted!") + return TRUE + say("Wiping design disk.") + for(var/i in 1 to d_disk.max_blueprints) + d_disk.blueprints[i] = null + if (params["type"] == RND_TECH_DISK) + if(QDELETED(t_disk)) + say("No tech disk inserted!") + return TRUE + qdel(t_disk.stored_research) + t_disk.stored_research = new + say("Wiping technology disk.") + return TRUE + if ("uploadDisk") + if (params["type"] == RND_DESIGN_DISK) + if(QDELETED(d_disk)) + say("No design disk inserted!") + return TRUE + for(var/D in d_disk.blueprints) + if(D) + stored_research.add_design(D, TRUE) + if (params["type"] == RND_TECH_DISK) + if (QDELETED(t_disk)) + say("No tech disk inserted!") + return TRUE + say("Uploading technology disk.") + t_disk.stored_research.copy_research_to(stored_research) + return TRUE + if ("loadTech") + if(QDELETED(t_disk)) + say("No tech disk inserted!") + return + stored_research.copy_research_to(t_disk.stored_research) + say("Downloading to technology disk.") + return TRUE /obj/machinery/computer/rdconsole/proc/eject_disk(type) - if(type == "design") + if(type == RND_DESIGN_DISK && d_disk) d_disk.forceMove(get_turf(src)) d_disk = null - if(type == "tech") + if(type == RND_TECH_DISK && t_disk) t_disk.forceMove(get_turf(src)) t_disk = null -/obj/machinery/computer/rdconsole/proc/lock_console(mob/user) - locked = TRUE - -/obj/machinery/computer/rdconsole/proc/unlock_console(mob/user) - locked = FALSE +#undef RND_TECH_DISK +#undef RND_DESIGN_DISK diff --git a/code/modules/research/research_disk.dm b/code/modules/research/research_disk.dm index 62eca2aedf7..3b1e3e928e2 100644 --- a/code/modules/research/research_disk.dm +++ b/code/modules/research/research_disk.dm @@ -40,66 +40,3 @@ /obj/item/disk/tech_disk/spaceloot/Initialize() . = ..() stored_research = new /datum/techweb/bepis(remove_tech = FALSE) - -/obj/item/research_notes - name = "research notes" - desc = "Valuable scientific data. Use it in a research console to scan it." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper" - inhand_icon_state = "paper" - w_class = WEIGHT_CLASS_SMALL - ///research points it holds - var/value = 69 - ///origin of the research - var/origin_type = "debug" - ///if it ws merged with different origins to apply a bonus - var/mixed = FALSE - -/obj/item/research_notes/Initialize(mapload, _value, _origin_type) - . = ..() - if(_value) - value = _value - if(_origin_type) - origin_type = _origin_type - change_vol() - -/obj/item/research_notes/examine(mob/user) - . = ..() - . += "It is worth [value] research points." - -/// proc that changes name and icon depending on value -/obj/item/research_notes/proc/change_vol() - if(value >= 10000) - name = "revolutionary discovery in the field of [origin_type]" - icon_state = "docs_verified" - return - else if(value >= 2500) - name = "essay about [origin_type]" - icon_state = "paper_words" - return - else if(value >= 100) - name = "notes of [origin_type]" - icon_state = "paperslip_words" - return - else - name = "fragmentary data of [origin_type]" - icon_state = "scrap" - return - -///proc when you slap research notes into another one, it applies a bonus if they are of different origin (only applied once) -/obj/item/research_notes/proc/merge(obj/item/research_notes/new_paper) - var/bonus = min(value , new_paper.value) - value = value + new_paper.value - if(origin_type != new_paper.origin_type && !mixed) - value += bonus * 0.3 - origin_type = "[origin_type] and [new_paper.origin_type]" - mixed = TRUE - change_vol() - qdel(new_paper) - -/obj/item/research_notes/attackby(obj/item/I, mob/user, params) - . = ..() - if(istype(I, /obj/item/research_notes)) - var/obj/item/research_notes/R = I - merge(R) - return TRUE diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 3c3bb3cc7ff..e8bf8f3ddcc 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -69,12 +69,6 @@ research_disabled = !research_disabled refresh_working() -/obj/machinery/rnd/server/proc/mine() - . = base_mining_income - var/penalty = max((get_env_temp() - temp_tolerance_high), 0) * temp_penalty_coefficient - current_temp = get_env_temp() - . = max(. - penalty, 0) - /obj/machinery/rnd/server/proc/get_env_temp() var/turf/open/L = loc if(isturf(L)) diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index dfba6fa3408..6982395aed1 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -1,27 +1,47 @@ - -//Used \n[\s]*origin_tech[\s]*=[\s]*"[\S]+" to delete all origin techs. -//Or \n[\s]*origin_tech[\s]*=[\s]list\([A-Z_\s=0-9,]*\) -//Used \n[\s]*req_tech[\s]*=[\s]*list\(["a-z\s=0-9,]*\) to delete all req_techs. - -//Techweb datums are meant to store unlocked research, being able to be stored on research consoles, servers, and disks. They are NOT global. +/** + * # Techweb + * + * A datum representing a research techweb + * + * Techweb datums are meant to store unlocked research, being able to be stored + * on research consoles, servers, and disks. They are NOT global. + */ /datum/techweb - var/list/researched_nodes = list() //Already unlocked and all designs are now available. Assoc list, id = TRUE - var/list/visible_nodes = list() //Visible nodes, doesn't mean it can be researched. Assoc list, id = TRUE - var/list/available_nodes = list() //Nodes that can immediately be researched, all reqs met. assoc list, id = TRUE - var/list/researched_designs = list() //Designs that are available for use. Assoc list, id = TRUE - var/list/custom_designs = list() //Custom inserted designs like from disks that should survive recalculation. - var/list/boosted_nodes = list() //Already boosted nodes that can't be boosted again. node id = path of boost object. - var/list/hidden_nodes = list() //Hidden nodes. id = TRUE. Used for unhiding nodes when requirements are met by removing the entry of the node. - var/list/deconstructed_items = list() //items already deconstructed for a generic point boost. path = list(point_type = points) - var/list/research_points = list() //Available research points. type = number + /// Already unlocked and all designs are now available. Assoc list, id = TRUE + var/list/researched_nodes = list() + /// Visible nodes, doesn't mean it can be researched. Assoc list, id = TRUE + var/list/visible_nodes = list() + /// Nodes that can immediately be researched, all reqs met. assoc list, id = TRUE + var/list/available_nodes = list() + /// Designs that are available for use. Assoc list, id = TRUE + var/list/researched_designs = list() + /// Custom inserted designs like from disks that should survive recalculation. + var/list/custom_designs = list() + /// Already boosted nodes that can't be boosted again. node id = path of boost object. + var/list/boosted_nodes = list() + /// Hidden nodes. id = TRUE. Used for unhiding nodes when requirements are met by removing the entry of the node. + var/list/hidden_nodes = list() + /// Items already deconstructed for a generic point boost, path = list(point_type = points) + var/list/deconstructed_items = list() + /// Available research points, type = number + var/list/research_points = list() var/list/obj/machinery/computer/rdconsole/consoles_accessing = list() var/id = "generic" - var/list/research_logs = list() //IC logs. + /// IC logs + var/list/research_logs = list() var/largest_bomb_value = 0 - var/organization = "Third-Party" //Organization name, used for display. - var/list/last_bitcoins = list() //Current per-second production, used for display only. - var/list/discovered_mutations = list() //Mutations discovered by genetics, this way they are shared and cant be destroyed by destroying a single console - var/list/tiers = list() //Assoc list, id = number, 1 is available, 2 is all reqs are 1, so on + /// Organization name, used for display + var/organization = "Third-Party" + /// Current per-second production, used for display only. + var/list/last_bitcoins = list() + /// Mutations discovered by genetics, this way they are shared and cant be destroyed by destroying a single console + var/list/discovered_mutations = list() + /// Assoc list, id = number, 1 is available, 2 is all reqs are 1, so on + var/list/tiers = list() + /// Available experiments + var/list/available_experiments = list() + /// Completed experiments + var/list/completed_experiments = list() /datum/techweb/New() SSresearch.techwebs += src @@ -206,6 +226,69 @@ return FALSE return TRUE +/** + * Checks if all experiments have been completed for a given node on this techweb + * + * Arguments: + * * node - the node to check + */ +/datum/techweb/proc/have_experiments_for_node(datum/techweb_node/node) + . = TRUE + for (var/experiment_type in node.required_experiments) + if (!completed_experiments[experiment_type]) + return FALSE + +/** + * Checks if a node can be unlocked on this techweb, having the required points and experiments + * + * Arguments: + * * node - the node to check + */ +/datum/techweb/proc/can_unlock_node(datum/techweb_node/node) + return can_afford(node.get_price(src)) && have_experiments_for_node(node) + +/** + * Adds an experiment to this techweb by its type, ensures that no duplicates are added. + * + * Arguments: + * * experiment_type - the type of the experiment to add + */ +/datum/techweb/proc/add_experiment(experiment_type) + . = TRUE + // check active experiments for experiment of this type + for (var/available_experiment in available_experiments) + var/datum/experiment/experiment = available_experiment + if (experiment.type == experiment_type) + return FALSE + // check completed experiments for experiments of this type + for (var/completed_experiment in completed_experiments) + var/datum/experiment/experiment = completed_experiment + if (experiment == experiment_type) + return FALSE + available_experiments += new experiment_type() + +/** + * Adds a list of experiments to this techweb by their types, ensures that no duplicates are added. + * + * Arguments: + * * experiment_list - the list of types of experiments to add + */ +/datum/techweb/proc/add_experiments(list/experiment_list) + . = TRUE + for (var/experiment_type in experiment_list) + var/datum/experiment/experiment = experiment_type + . = . && add_experiment(experiment) + +/** + * Notifies the techweb that an experiment has been completed, updating internal state of the techweb to reflect this. + * + * Arguments: + * * completed_experiment - the experiment which was completed + */ +/datum/techweb/proc/complete_experiment(datum/experiment/completed_experiment) + available_experiments -= completed_experiment + completed_experiments[completed_experiment.type] = completed_experiment + /datum/techweb/proc/printout_points() return techweb_point_display_generic(research_points) @@ -217,21 +300,25 @@ return FALSE update_node_status(node) if(!force) - if(!available_nodes[node.id] || (auto_adjust_cost && (!can_afford(node.get_price(src))))) + if(!available_nodes[node.id] || (auto_adjust_cost && (!can_afford(node.get_price(src)))) || !have_experiments_for_node(node)) return FALSE if(auto_adjust_cost) remove_point_list(node.get_price(src)) researched_nodes[node.id] = TRUE //Add to our researched list for(var/id in node.unlock_ids) visible_nodes[id] = TRUE - update_node_status(SSresearch.techweb_node_by_id(id)) + var/datum/techweb_node/unlocked_node = SSresearch.techweb_node_by_id(id) + if (unlocked_node.required_experiments.len > 0) + add_experiments(unlocked_node.required_experiments) + if (unlocked_node.discount_experiments.len > 0) + add_experiments(unlocked_node.discount_experiments) + update_node_status(unlocked_node) for(var/id in node.design_ids) add_design_by_id(id) update_node_status(node) if(get_that_dosh) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_SCI) - if(D) - D.adjust_money(SSeconomy.techweb_bounty) + var/datum/bank_account/science_department_bank_account = SSeconomy.get_dep_account(ACCOUNT_SCI) + science_department_bank_account?.adjust_money(SSeconomy.techweb_bounty) return TRUE /datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) //When something is researched, triggers the proc for this techweb only diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index 04f66bcdcde..0dcac24bb57 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -1,21 +1,41 @@ - -//Techweb nodes are GLOBAL, there should only be one instance of them in the game. Persistant changes should never be made to them in-game. -//USE SSRESEARCH PROCS TO OBTAIN REFERENCES. DO NOT REFERENCE OUTSIDE OF SSRESEARCH OR YOU WILL FUCK UP GC. - +/** + * # Techweb Node + * + * A datum representing a researchable node in the techweb. + * + * Techweb nodes are GLOBAL, there should only be one instance of them in the game. Persistant + * changes should never be made to them in-game. USE SSRESEARCH PROCS TO OBTAIN REFERENCES. + * DO NOT REFERENCE OUTSIDE OF SSRESEARCH OR YOU WILL FUCK UP GC. + */ /datum/techweb_node + /// Internal ID of the node var/id + /// The name of the node as it is shown on UIs var/display_name = "Errored Node" + /// A description of the node to show on UIs var/description = "Why are you seeing this?" - var/hidden = FALSE //Whether it starts off hidden. - var/experimental = FALSE //If the tech can be randomly granted by the BEPIS as a reward. Meant to be fully given in tech disks, not researched. - var/starting_node = FALSE //Whether it's available without any research. + /// Whether it starts off hidden + var/hidden = FALSE + /// If the tech can be randomly generated by the BEPIS as a reward. MEant to be fully given in tech disks, not researched + var/experimental = FALSE + /// Whether it's available without any research + var/starting_node = FALSE var/list/prereq_ids = list() var/list/design_ids = list() - var/list/unlock_ids = list() //CALCULATED FROM OTHER NODE'S PREREQUISITES. Assoc list id = TRUE. - var/list/boost_item_paths = list() //Associative list, path = list(point type = point_value). - var/autounlock_by_boost = TRUE //boosting this will autounlock this node. - var/list/research_costs = list() //Point cost to research. type = amount - var/category = "Misc" //Category + /// CALCULATED FROM OTHER NODE'S PREREQUISITIES. Associated list id = TRUE + var/list/unlock_ids = list() + /// Associative list, path = list(point type = point_value) + var/list/boost_item_paths = list() + /// Boosting this will autounlock this node + var/autounlock_by_boost = TRUE + /// The points cost to research the node, type = amount + var/list/research_costs = list() + /// The category of the node + var/category = "Misc" + /// The list of experiments required to research the node + var/list/required_experiments = list() + /// If completed, these experiments give a specific point amount discount to the node.area + var/list/discount_experiments = list() /datum/techweb_node/error_node id = "ERROR" @@ -48,6 +68,7 @@ VARSET_TO_LIST(., autounlock_by_boost) VARSET_TO_LIST(., research_costs) VARSET_TO_LIST(., category) + VARSET_TO_LIST(., required_experiments) /datum/techweb_node/deserialize_list(list/input, list/options) if(!input["id"]) @@ -63,6 +84,7 @@ VARSET_FROM_LIST(input, autounlock_by_boost) VARSET_FROM_LIST(input, research_costs) VARSET_FROM_LIST(input, category) + VARSET_FROM_LIST(input, required_experiments) Initialize() return src @@ -83,10 +105,14 @@ if(host) var/list/actual_costs = research_costs if(host.boosted_nodes[id]) - var/list/L = host.boosted_nodes[id] - for(var/i in L) - if(actual_costs[i]) - actual_costs[i] -= L[i] + var/list/boostlist = host.boosted_nodes[id] + for(var/booster in boostlist) + if(actual_costs[booster]) + actual_costs[booster] -= boostlist[booster] + for(var/cost_type in actual_costs) + for(var/experiment_type in discount_experiments) + if(host.completed_experiments[experiment_type]) //do we have this discount_experiment unlocked? + actual_costs[cost_type] -= discount_experiments[experiment_type] return actual_costs else return research_costs diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 860164f8617..7c92f140d71 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -10,7 +10,7 @@ // Default research tech, prevents bricking design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", "basic_electrolite", "c-reader", "desttagger", "salestagger", "handlabel", "packagewrap", "destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "bepis", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", - "paystand", "space_heater", "bucket", "sec_rshot", "sec_beanbag_slug", "sec_Islug", "sec_dart", "sec_38", "rglass", "plasteel", + "paystand", "space_heater", "bucket", "sec_rshot", "sec_beanbag_slug", "sec_Islug", "sec_dart", "sec_38", "rglass", "plasteel", "experi_scanner", "destructive_scanner", "doppler_array", "plastitanium", "plasmaglass", "plasmareinforcedglass", "titaniumglass", "plastitaniumglass", "plastic_knife", "plastic_fork", "plastic_spoon", "conveyor_belt", "conveyor_switch") /datum/techweb_node/mmi @@ -62,6 +62,7 @@ "dropper", "defibmountdefault", "surgical_tape", "portable_chem_mixer") /////////////////////////Biotech///////////////////////// + /datum/techweb_node/biotech id = "biotech" display_name = "Biological Technology" @@ -69,6 +70,7 @@ prereq_ids = list("base") design_ids = list("chem_heater", "chem_master", "chem_dispenser", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "medigel","genescanner", "med_spray_bottle", "chem_pack", "blood_pack", "medical_kiosk", "crewpinpointerprox", "medipen_refiller", "biopsy_tool", "plumbing_rcd_sci") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + required_experiments = list(/datum/experiment/scanning/points/slime/calibration) /datum/techweb_node/adv_biotech id = "adv_biotech" @@ -76,7 +78,9 @@ description = "Advanced Biotechnology" prereq_ids = list("biotech") design_ids = list("piercesyringe", "crewpinpointer", "smoke_machine", "plasmarefiller", "limbgrower", "meta_beaker", "healthanalyzer_advanced", "harvester", "holobarrier_med", "detective_scanner", "defibrillator_compact", "ph_meter") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + required_experiments = list(/datum/experiment/scanning/points/slime/easy) + discount_experiments = list(/datum/experiment/scanning/random/material/meat = 4000) //Big discount to reinforce doing it. /datum/techweb_node/bio_process id = "bio_process" @@ -84,9 +88,11 @@ description = "From slimes to kitchens." prereq_ids = list("biotech") design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave", "reagentgrinder", "dish_drive", "fat_sucker", "griddle") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) + discount_experiments = list(/datum/experiment/scanning/random/cytology = 3000) //Big discount to reinforce doing it. /////////////////////////Advanced Surgery///////////////////////// + /datum/techweb_node/imp_wt_surgery id = "imp_wt_surgery" display_name = "Improved Wound-Tending Surgery" @@ -121,6 +127,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) /////////////////////////data theory tech///////////////////////// + /datum/techweb_node/datatheory //Computer science id = "datatheory" display_name = "Data Theory" @@ -131,6 +138,7 @@ /////////////////////////engineering tech///////////////////////// + /datum/techweb_node/engineering id = "engineering" display_name = "Industrial Engineering" @@ -140,7 +148,8 @@ "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "welding_goggles", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "oxygen_tank", "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt", "electrolyzer", "adv_electrolite", "pneumatic_seal") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12500) + discount_experiments = list(/datum/experiment/scanning/random/material/easy = 7500) /datum/techweb_node/adv_engi id = "adv_engi" @@ -149,7 +158,8 @@ prereq_ids = list("engineering", "emp_basic") design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "rcd_loaded", "rpd_loaded", "sheetifier", "HFR_core", "HFR_fuel_input", "HFR_waste_output", "HFR_moderator_input", "HFR_corner", "HFR_interface") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + discount_experiments = list(/datum/experiment/scanning/random/material/medium/one = 4000) /datum/techweb_node/anomaly id = "anomaly_research" @@ -377,7 +387,8 @@ description = "For the slackers on the station." prereq_ids = list("comptech") design_ids = list("arcade_battle", "arcade_orion", "slotmachine") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3250) + discount_experiments = list(/datum/experiment/physical/arcade_winner = 3000) /datum/techweb_node/comp_recordkeeping id = "comp_recordkeeping" @@ -493,7 +504,8 @@ description = "Efficiency Level 127" //dumb mc references prereq_ids = list("basic_mining", "adv_engi", "adv_power", "adv_plasma") design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter_adv") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) + discount_experiments = list(/datum/experiment/scanning/random/material/hard/one = 5000) /datum/techweb_node/janitor id = "janitor" @@ -501,7 +513,8 @@ description = "Clean things better, faster, stronger, and harder!" prereq_ids = list("adv_engi") design_ids = list("holobarrier_jani", "advmop", "buffer", "blutrash", "light_replacer", "spraybottle", "beartrap", "paint_remover") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) + discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = 3000) //75% discount for scanning some trash, seems fair right? /datum/techweb_node/botany id = "botany" @@ -517,7 +530,8 @@ description = "Highly advanced tools." design_ids = list("exwelder", "jawsoflife", "handdrill", "laserscalpel", "mechanicalpinches", "searingtool", "gene_shears") prereq_ids = list("adv_engi") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) + discount_experiments = list(/datum/experiment/scanning/random/material/hard/one = 5000) /datum/techweb_node/sec_basic id = "sec_basic" @@ -541,7 +555,8 @@ description = "Unlocks new RCD designs." design_ids = list("rcd_upgrade_silo_link") prereq_ids = list("rcd_upgrade", "bluespace_travel") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + discount_experiments = list(/datum/experiment/scanning/random/material/hard/two = 5000) /////////////////////////weaponry tech///////////////////////// /datum/techweb_node/weaponry @@ -551,6 +566,7 @@ prereq_ids = list("engineering") design_ids = list("pin_testing", "tele_shield") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + required_experiments = list(/datum/experiment/explosion/calibration) /datum/techweb_node/adv_weaponry id = "adv_weaponry" @@ -559,6 +575,7 @@ prereq_ids = list("adv_engi", "weaponry") design_ids = list("pin_loyalty") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + required_experiments = list(/datum/experiment/explosion/medium) /datum/techweb_node/electric_weapons id = "electronic_weapons" @@ -599,6 +616,7 @@ prereq_ids = list("adv_weaponry") design_ids = list("large_Grenade", "pyro_Grenade", "adv_Grenade") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + required_experiments = list(/datum/experiment/explosion/maxcap) /datum/techweb_node/ballistic_weapons id = "ballistic_weapons" @@ -631,7 +649,8 @@ description = "For when you just aren't Gundam enough." prereq_ids = list("adv_robotics") design_ids = list("mech_repair_droid") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) + discount_experiments = list(/datum/experiment/scanning/random/material/medium/three = 5000) /datum/techweb_node/odysseus id = "mecha_odysseus" @@ -821,7 +840,7 @@ prereq_ids = list("datatheory") design_ids = list("nanite_disk","nanite_remote","nanite_comm_remote","nanite_scanner",\ "nanite_chamber","public_nanite_chamber","nanite_chamber_control","nanite_programmer","nanite_program_hub","nanite_cloud_control",\ - "relay_nanites", "monitoring_nanites", "research_nanites" ,"researchplus_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites","debugging_nanites") + "relay_nanites", "monitoring_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites","debugging_nanites") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) /datum/techweb_node/nanite_smart @@ -935,6 +954,7 @@ /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/melee/baton/abductor, /obj/item/abductor, /obj/item/gun/energy/shrink_ray) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + required_experiments = list(/datum/experiment/scanning/points/slime/hard) hidden = TRUE /datum/techweb_node/alien_engi diff --git a/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm b/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm index d0ad4963046..2a4573938f9 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm @@ -99,6 +99,7 @@ for(var/created_thing in resulting_atoms) for(var/x in 1 to resulting_atoms[created_thing]) var/atom/thing = new created_thing(get_turf(vat)) + ADD_TRAIT(thing, TRAIT_VATGROWN, "vatgrowing") vat.visible_message("[thing] pops out of [vat]!") QDEL_NULL(vat.biological_sample) //Kill off the sample, we're done diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 2e8b3152fb0..fa2b5d579ad 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -165,28 +165,6 @@ current_potion = O to_chat(user, "You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].") return - else if(istype(O, /obj/item/slime_extract)) - var/obj/item/slime_extract/E = O - if(!SSresearch.slime_already_researched[E.type]) - if(!E.research) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 3, -1) - visible_message("[src] buzzes and displays a message: Invalid extract! (You shouldn't be seeing this. If you are, tell someone.)") - return - if(E.Uses <= 0) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 3, -1) - visible_message("[src] buzzes and displays a message: Extract consumed - no research available.") - return - else - playsound(src, 'sound/machines/ping.ogg', 50, 3, -1) - visible_message("You insert [E] into a slot on the [src]. It pings and prints out some research notes worth [E.research] points!") - new /obj/item/research_notes(drop_location(), E.research, "xenobiology") - SSresearch.slime_already_researched[E.type] = TRUE - qdel(O) - return - else - visible_message("[src] buzzes and displays a message: Slime extract already researched!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 3, -1) - return ..() /obj/machinery/computer/camera_advanced/xenobio/multitool_act(mob/living/user, obj/item/multitool/I) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 428d5fcae28..1789609da15 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -16,8 +16,6 @@ var/effectmod ///Which type of crossbred var/list/activate_reagents = list() ///Reagents required for activation var/recurring = FALSE - /// Research point value for slime cores. These are defines stored in [code/__DEFINES/research.dm] - the actual values are updated there. - var/research /obj/item/slime_extract/examine(mob/user) . = ..() @@ -94,7 +92,6 @@ icon_state = "grey slime extract" effectmod = "reproductive" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_0 /obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -120,7 +117,8 @@ icon_state = "gold slime extract" effectmod = "symbiont" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_4 + + /obj/item/slime_extract/gold/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -150,7 +148,8 @@ icon_state = "silver slime extract" effectmod = "consuming" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_2 + + /obj/item/slime_extract/silver/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -176,7 +175,6 @@ icon_state = "metal slime extract" effectmod = "industrial" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_1 /obj/item/slime_extract/metal/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -201,7 +199,6 @@ icon_state = "purple slime extract" effectmod = "regenerative" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_1 /obj/item/slime_extract/purple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -221,7 +218,6 @@ icon_state = "dark purple slime extract" effectmod = "self-sustaining" activate_reagents = list(/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_2 /obj/item/slime_extract/darkpurple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -245,7 +241,6 @@ icon_state = "orange slime extract" effectmod = "burning" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_1 /obj/item/slime_extract/orange/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -266,7 +261,6 @@ icon_state = "yellow slime extract" effectmod = "charged" activate_reagents = list(/datum/reagent/blood,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_2 /obj/item/slime_extract/yellow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -290,7 +284,6 @@ icon_state = "red slime extract" effectmod = "sanguine" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_4 /obj/item/slime_extract/red/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -311,7 +304,6 @@ icon_state = "blue slime extract" effectmod = "stabilized" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_1 /obj/item/slime_extract/blue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -332,7 +324,6 @@ icon_state = "dark blue slime extract" effectmod = "chilling" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_2 /obj/item/slime_extract/darkblue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -356,7 +347,6 @@ icon_state = "pink slime extract" effectmod = "gentle" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_4 /obj/item/slime_extract/pink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -385,7 +375,6 @@ icon_state = "green slime extract" effectmod = "mutative" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/uranium/radium) - research = SLIME_RESEARCH_TIER_4 /obj/item/slime_extract/green/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -410,7 +399,6 @@ icon_state = "light pink slime extract" effectmod = "loyal" activate_reagents = list(/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_5 /obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -435,7 +423,6 @@ icon_state = "black slime extract" effectmod = "transformative" activate_reagents = list(/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_5 /obj/item/slime_extract/black/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -457,7 +444,6 @@ icon_state = "oil slime extract" effectmod = "detonating" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_5 /obj/item/slime_extract/oil/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -481,7 +467,6 @@ icon_state = "adamantine slime extract" effectmod = "crystalline" activate_reagents = list(/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_5 /obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -515,7 +500,6 @@ var/teleport_x = 0 var/teleport_y = 0 var/teleport_z = 0 - research = SLIME_RESEARCH_TIER_3 /obj/item/slime_extract/bluespace/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -548,7 +532,6 @@ icon_state = "pyrite slime extract" effectmod = "prismatic" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_3 /obj/item/slime_extract/pyrite/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -576,7 +559,6 @@ icon_state = "cerulean slime extract" effectmod = "recurring" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_3 /obj/item/slime_extract/cerulean/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -597,7 +579,6 @@ icon_state = "sepia slime extract" effectmod = "lengthened" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_3 /obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) @@ -620,7 +601,6 @@ icon_state = "rainbow slime extract" effectmod = "hyperchromatic" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,"lesser plasma",/datum/reagent/toxin/slimejelly,"holy water and uranium") //Curse this snowflake reagent list. - research = SLIME_RESEARCH_TIER_RAINBOW /obj/item/slime_extract/rainbow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index fc1db4510fe..e3ca964256e 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -75,6 +75,7 @@ */ /datum/proc/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_UI_ACT, usr, action) // If UI is not interactive or usr calling Topic is not the UI user, bail. if(!ui || ui.status != UI_INTERACTIVE) return TRUE diff --git a/icons/mob/inhands/misc/devices_lefthand.dmi b/icons/mob/inhands/misc/devices_lefthand.dmi index b84d8a8978ce970ba5d227d341def5063b6d9cd7..3c52a437283469f845104a346dc263b8d516d6f0 100644 GIT binary patch delta 1377 zcmV-n1)lnj3&aa0iBL{Q4GJ0x0000DNk~Le000310002s2m=5B0NbBPVgLXDw~-}w ze^OFX4C?9t{{S#DEjl_nmzS3t8yjfFD zZ*Bkpc$|%ryAHxI3`OVWDQal4AUnMNp0*53$ZWpWiQ?lV zx2tl!+1X;dF?VF480^w6#uJl0s7`Gc<};JENT)V^f+R@Tl_L)#< zfpnWeyav`+bl8`L{xDsOLAQBckx3kc@Y_AN<*pe1(HpHcs}`{HXbb=V1LjFYK~#90 z?cD2j(m)i3VbmTK&!KoqK&2>w9)v0sz5nYnfi8v2%$_}IFsXf?wywoy=9`(Fgg>sf z)dBzj0001}-GkP{JDFXPM=N`Ge=fT+`v-^F*KRhc&OQpL2J(jN9~>O)SFzG9vXAy` z+q72$`9tXcWuH+@{BF60Cps1UPq(WJ$pw62& zos+kl+st0&Mdc#J+2KKTHy~p+AfsEum>nKe^CQq%bzrNs+P1y{?z=oB2mk;800000 z?yYxK4G#>e(e_T?hfQ`5e^&;5P?bv2=DZhP1x_vz6st<5Xmbh;NRmXqMj|vo6BNg` z2H1+hlquORx6hFD`aOLIKDvh{A3ynn;?K4Q*owh)DM|0s_8F2vzuzCISLqL2XIuyQ zI^fu2B@IxGGIp8t27^IQy~@COk=H@q2AtZernB|0RR9100000005LU91hjhYO)(<_{FlzVOHH$w#oAAy-~M<<#jpsqgK`c#i;13 zr2&>&8H$|Y7i+nq253gr+<=z-q}4pUsubHVcvth=3q5d zWXuL+bn6?lLxZe$K=-_>ZNOKt0eO(30cqh8NP`-Xx*q{We^B5pLAAItE|Xc2Igc0`RF5m;GMN?GVb0Zn#@_)~*?oF=xOoP% z;^8`Ca8MoApH!Qd$*lNH*Zk29HT}z3sVo`*000000002gZGQ73RlEV(=mwfER$pR8 zA`A@+s>}6!K3~qS#fn528WvQSC jRHWI$(2yVi0Cwy*PG+^ZK#G9;00000NkvXXu0mjfkl1`9 delta 1322 zcmV+_1=ae*3yupViBL{Q4GJ0x0000DNk~Le0002s0002s2m=5B04?*H(*OVfrI96e ze*pggQc_Y3>gq5uEti*#xrs}orU{Azh}+Yae}M^^&CmKQ``OObzC2X5Dvp(WU?dy7+Nteg zDaF&8)Qw`ZmZC#@?b1h3f`nt30TB+3du37>8)>SOqKz=%6tBLZM(0=v9qJUr4Rp`4 ztpn=ZG!lz82s(Hci(qVEDY91&4&%ROyw!YXq!e_2xqHjInT;EW{EE(}vfvLhf2Jb* z!g5vC#rzp>;dh+=t*#=^000BZNklCCz+qdC#ONs&&g)w70BJ^y@a zxn8O2DaNc?n|__ zNw`zme|L{juivvzc&$D)y1p?t>i#Y`VAQ+W-D5Q9_xl6u_5Fb= zL)yrc&>T_L<7NM^SKg$wkul({{l#OYfGgE#;H00000;0^ILQY&FJf0vK1flLXbxqSQ# z)rud@<>qIoR`_V{5MBaWohA8tQnTaX>iRynUIH3MbLl4TBmpJ0JT!egy$5q{qJ)6u zk$u6;&$rk7^*K;+Uvds29s#{}1^@s600000qv3F9UG>wuWWzs_T?~_IQN7D1kK!$$ zhb{+iLR$6|(0tD5fBzr5C4b~e{5`y5+%K`BA(_pEWs$rfPg2`BV&x@E|4GT-FR}8{ z&7LVM00000d;kD%&1&_qk{@trk>^lZRu7L4(gX6UqJ`qfqvFXcll?b1aBDf9W0;Y`MG>8kBauVe@~07*qoM6N<$g1L8a$p8QV diff --git a/icons/mob/inhands/misc/devices_righthand.dmi b/icons/mob/inhands/misc/devices_righthand.dmi index 47e3260c6ef6ae58c934e3626e11131306ab2d99..e4c57d5ec555aa443d71e529107ddb8006b07e15 100644 GIT binary patch delta 1404 zcmV-?1%vvL3*QSRiBL{Q4GJ0x0000DNk~Le000310002s2m=5B0NbBPVgLXDy^$q$ ze^OFX4C?9t{{S#DEjl_nmzS3t8yj0&TXS=B$jHd|_xIxB;#XR8Gcz+{Vq!2bFhxa0 zO-)Vz|NlciMT?7+3knS{D>JRFwMm}cmxcZ?U5i1td0vr89E9-OJ-6kq82-^4tv0I`u=8jP000B~ zNklLPwPF`E?0B4Hkgi0v7bCkML>izry000000002Me}mE5WA*Q# zrFu@f>fb>t(p*(rwJv2xJNx!5c89p~TN!Z!wsK`m&e>VJeI~C?icQtF_0191#8xMv z7=Wc*8Ix=7pR@Mcx6)f6ElnOFUf&*JjjY1}+KvmfD=jq+z_Ok@!WLQmOQ5YBfawKe zThAR)rZ)fp0000006-MIe^aizc4|Q1+|0g7Z(@3VtH&?-|XHKD<43JkR7Ym#pUO{Ue7SE*s{Lae|4vRmJi@_fRG)l z*5&1~`4wYZ-|RY5HSYldLUy@Z2LJ#700000000n9zu)(-l!w$#zyC!%fG@VEsR$`( zbri+c4+xj~W*;LsZkMkB@g<_LR3!}0a_T0DSp!ZZN$dQqWf)EW)?ed#TbmL`u7uWygAMqUlC zJJ+J#GoAw|)}-AH92aO;T524CWj%L?-UG_n1!Y_&T@7+#I(Y}QT9X4Bi- zf6G?8Q&ziSfBOz5X>M(L`=fNVJ7u*Su<4L;*Y4iyZ?ATztan4T99Hhy$p&DocBia& zL$w^%boOK=xq0uOfUVk{vfd5YbwK%7ujozCSnW=!_Z_h1QSDBV=K}x$000000Dyg) zuYbIX-67)mD$EzzmtV0vB;70D;J)3>=kw+K&ac=VPI8y*m2Yt0mW##W=VIws><(Eb zd-c5q?tZ4EcYvkX9g^*q?{MFi%jJK<8^B)d4oUXJCjbC&2>$~bqPN__2Ce@90000< KMNUMnLSTZ5+m3($ delta 1325 zcmV+|1=9N83y}*YiBL{Q4GJ0x0000DNk~Le0002s0002s2m=5B04?*H(*OVftC1yk ze*pggQc_Y3>gq5uEti*fFDZ*Bkpc$|%rJr2S! z429?96j8e){#F*$3U#1DTmZR=OQWUfAIEi#7;4covIbY+xy}R}T*3zh=DEd}pK-bbq;f%e$G48;Jahf6k|} z;14sVBK*Q~Ro2D)8E@ftoc^t@BF_K-1II~3K~#90?c8fu+CUJ1VOpvdwKvP9wk2AN zq97OBBklkHWlaJimfgt=WRt*opIUp)?qqhxkbYne)@lF%0001#>Q(J^MUn(jf0L>} zl0fPQhw-1IkV)R^6A7V)EdMz=e>m8-K{3hOy1F(Y)R1M(QEcOjvy(KAPqaydP$^5} zSbIPKr;U1D-QdZ)_x3Ew-Ufx`rSakP4X3pr=QiwpPYH_pqRySLJ)@2 zg-|I=x%~kE00000003TS28^zPrm1FIbQLsfmb>DMwq<#tm41Z?PBl|oe}@~>tZ27e zt+qZo4%SB}nw^-TK~K0b&9nBGcI*6HdsmXs_zKGbRcJ7#j7~zW4VL~AZ5bOhyr2O9 z00000fL-y`xGwD!z<&5Qp6ZNk!O9mD`&mVZcv=7B_lfD-n_KT{LApj{fhRjFL%YP+0URjS4&59 z(&3heuq5JKZ9bwawxGPpb2ZBd5&!@I0002M{_zdl!VcjIEj=vttPMe!yv?Pd=^dUVFC`LpZnQjp4ITzF12ViSVFp{0vsA!4Qm} zUfVuN(Q^8bGYytz?;8XF000000I+-d{r>im`Xq(x_ixn=-ul`wBq^S$!R?cjz|de0 zNnW~JeluNROQJ7Le~8?$zrmnZ8w|7^x`T~L3UxOa-Vg89wGCsg2Hopba5uQ`-0N%G z#RhG6urus98|(~ks@h;m{R}#TjY$f1w_pn2G6?_x000000ARn3(yuLpE`r2hq}z0qhgF|03-aPN#`&;Ml6M6V4nCe6vHf8W>M!Xz}lLcRWcgnMf| zopuw`>Gk174GaIvez?uN>hkd13tUJM(l!v}1^v_Gf8ua&Ie?30xBL4_U{3*2AgPHxEDNC67w;pGIJv-{`;S7>bM{S=ZWcGb0&((JQ zZAN*nwg>N{%5$~(ZW(puMxLw9cS|TMKk{5{v0Hpu`H|;pi{0YO%8xu(TkMulS8n9F j+CJPtajwS14G7~O+KQHyxdEs)00000NkvXXu0mjf9^{0M diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index f9b9286c062ef0a774d0fee86c71d2090fdb94e6..46007b1adaf1fe0d4c6344f81c8d8c4554c5372f 100644 GIT binary patch delta 20325 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 delta 18992 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 B#v1?t diff --git a/icons/obj/machines/experisci.dmi b/icons/obj/machines/experisci.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9db58dbfbf7fb587b6b110e1c75e0c4c76cc83df GIT binary patch literal 4239 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 X1o7@Os>}``Xa{ZEvNN=PGd=5H8UCyg literal 18695 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�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

T@sd5cHfz6t)z1IdB`-YY6eZW%QI}xb0$OOsu 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
+
@@ -53,7 +68,7 @@ export const TachyonArrayContent = (props, context) => { {activeRecord ? ( - +
remappingIdCache[id]; + +const selectRemappedStaticData = data => { + // Handle reshaping of node cache to fill in unsent fields, and + // decompress the node IDs + const node_cache = {}; + for (let id of Object.keys(data.static_data.node_cache)) { + const node = data.static_data.node_cache[id]; + const costs = Object.keys(node.costs || {}).map(x => ({ + type: remapId(x), + value: node.costs[x], + })); + node_cache[remapId(id)] = { + ...node, + id: remapId(id), + costs, + prereq_ids: map(remapId)(node.prereq_ids || []), + design_ids: map(remapId)(node.design_ids || []), + unlock_ids: map(remapId)(node.unlock_ids || []), + required_experiments: node.required_experiments || [], + discount_experiments: node.discount_experiments || [], + }; + } + + // Do the same as the above for the design cache + const design_cache = {}; + for (let id of Object.keys(data.static_data.design_cache)) { + const [name, classes] = data.static_data.design_cache[id]; + design_cache[remapId(id)] = { + name: name, + class: classes.startsWith("design") ? classes : `design32x32 ${classes}`, + }; + } + + return { + node_cache, + design_cache, + }; +}; + +let remappedStaticData; + +const useRemappedBackend = context => { + const { data, ...rest } = useBackend(context); + // Only remap the static data once, cache for future use + if (!remappedStaticData) { + const id_cache = data.static_data.id_cache; + for (let i = 0; i < id_cache.length; i++) { + remappingIdCache[i + 1] = id_cache[i]; + } + remappedStaticData = selectRemappedStaticData(data); + } + return { + data: { + ...data, + ...remappedStaticData, + }, + ...rest, + }; +}; + +// Utility Functions + +const abbreviations = { + "General Research": "Gen. Res.", + "Nanite Research": "Nanite Res.", +}; +const abbreviateName = name => abbreviations[name] ?? name; + +// Actual Components + +export const Techweb = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { + locked, + } = data; + return ( + + + {!!locked && ( + +
Console Locked
+ +
+ )} + +
+
+ ); +}; + +export const AppTechweb = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { + locked, + } = data; + return ( + + + {!!locked && ( + +
Console Locked
+ +
+ )} + +
+
+ ); +}; + +export const TechwebContent = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { + points, + points_last_tick, + web_org, + sec_protocols, + t_disk, + d_disk, + locked, + } = data; + const [ + techwebRoute, + setTechwebRoute, + ] = useLocalState(context, 'techwebRoute', null); + const [ + lastPoints, + setLastPoints, + ] = useLocalState(context, 'lastPoints', {}); + + return ( + + + + + + Available points: +
    + {Object.keys(points).map(k => ( +
  • + {k}: {points[k]} + {!!points_last_tick[k] && ( + ` (+${points_last_tick[k]}/sec)` + )} +
  • + ))} +
+
+ + Security protocols: + + {sec_protocols ? "Engaged" : "Disengaged"} + + +
+ + + + {d_disk && ( + + + + )} + {t_disk && ( + + + + )} + +
+
+ + + +
+ ); +}; + +const TechwebRouter = (props, context) => { + const [ + techwebRoute, + ] = useLocalState(context, 'techwebRoute', null); + + const route = techwebRoute?.route; + const RoutedComponent = ( + route === "details" && TechwebNodeDetail + || route === "disk" && TechwebDiskMenu + || TechwebOverview + ); + + return ( + + ); +}; + +const TechwebOverview = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { nodes, node_cache, design_cache } = data; + const [ + tabIndex, + setTabIndex, + ] = useLocalState(context, 'overviewTabIndex', 1); + const [ + searchText, + setSearchText, + ] = useLocalState(context, 'searchText'); + + // Only search when 3 or more characters have been input + const searching = searchText && searchText.trim().length > 1; + + let displayedNodes = nodes; + if (searching) { + displayedNodes = displayedNodes.filter(x => { + const n = node_cache[x.id]; + return n.name.toLowerCase().includes(searchText) + || n.description.toLowerCase().includes(searchText) + || n.design_ids.some(e => + design_cache[e].name.toLowerCase().includes(searchText)); + }); + } else { + displayedNodes = sortBy(x => node_cache[x.id].name)(tabIndex < 2 + ? nodes.filter(x => x.tier === tabIndex) + : nodes.filter(x => x.tier >= tabIndex)); + } + + const switchTab = tab => { + setTabIndex(tab); + setSearchText(null); + }; + + return ( + + + + + Web View + + + + switchTab(0)}> + Researched + + switchTab(1)}> + Available + + switchTab(2)}> + Future + + {!!searching && ( + + Search Results + + )} + + + + setSearchText(value)} + placeholder={"Search..."} /> + + + + + {displayedNodes.map(n => { + return ( + + ); + })} + + + ); +}; + +const TechwebNodeDetail = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { nodes } = data; + const { selectedNode } = props; + + const selectedNodeData = selectedNode + && nodes.find(x => x.id === selectedNode); + return ( + + ); +}; + +const TechwebDiskMenu = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { diskType } = props; + const { t_disk, d_disk } = data; + const [ + techwebRoute, + setTechwebRoute, + ] = useLocalState(context, 'techwebRoute', null); + + // Check for the disk actually being inserted + if ((diskType === "design" && !d_disk) || (diskType === "tech" && !t_disk)) { + return null; + } + + const DiskContent = diskType === "design" && TechwebDesignDisk + || TechwebTechDisk; + return ( + + + + + {diskType.charAt(0).toUpperCase() + diskType.slice(1)} Disk + + + + + Stored Data + + + + + {diskType === "tech" && ( + + )} + + + + + + + + + + + + ); +}; + +const TechwebDesignDisk = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { + design_cache, + researched_designs, + d_disk, + } = data; + const { blueprints } = d_disk; + const [ + selectedDesign, + setSelectedDesign, + ] = useLocalState(context, "designDiskSelect", null); + const [ + showModal, + setShowModal, + ] = useLocalState(context, 'showDesignModal', -1); + + const designIdByIdx = Object.keys(researched_designs); + const designOptions = flow([ + filter(x => x.toLowerCase() !== "error"), + map((id, idx) => `${design_cache[id].name} [${idx}]`), + sortBy(x => x), + ])(designIdByIdx); + + return ( + <> + {showModal >= 0 && ( + + + + Select a design to save... + + + { + const idx = parseInt(val.split('[').pop().split(']')[0], 10); + setSelectedDesign(designIdByIdx[idx]); + }} /> + + + + + + + + )} + {blueprints.map((x, i) => ( +
+ {x !== null && ( + + )} + + {x !== null && ( + + )} + + }> + {x === null && 'Empty' || ( + <> + Contains the design for {design_cache[x].name}:
+ + + )} +
+ ))} + + ); +}; + +const TechwebTechDisk = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { t_disk } = data; + const { stored_research } = t_disk; + + return Object.keys(stored_research).map(x => ({ id: x })).map(n => ( + + )); +}; + +const TechNodeDetail = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { + nodes, + node_cache, + } = data; + const { node } = props; + const { id } = node; + const { prereq_ids, unlock_ids } = node_cache[id]; + const [ + tabIndex, + setTabIndex, + ] = useLocalState(context, 'nodeDetailTabIndex', 0); + const [ + techwebRoute, + setTechwebRoute, + ] = useLocalState(context, 'techwebRoute', null); + + const prereqNodes = nodes.filter(x => prereq_ids.includes(x.id)); + const complPrereq = prereq_ids + .filter(x => nodes.find(y => y.id === x)?.tier === 0).length; + const unlockedNodes = nodes.filter(x => unlock_ids.includes(x.id)); + + return ( + + + + + Node + + + + setTabIndex(0)}> + Required ({complPrereq}/{prereqNodes.length}) + + setTabIndex(1)}> + Unlocks ({unlockedNodes.length}) + + + + + + + + + + + + + {tabIndex === 0 && ( + + {prereqNodes.map(n => ( + + ))} + + )} + {tabIndex === 1 && ( + + {unlockedNodes.map(n => ( + + ))} + + )} + + ); +}; + +const TechNode = (props, context) => { + const { act, data } = useRemappedBackend(context); + const { + node_cache, + design_cache, + experiments, + points, + nodes, + } = data; + const { node, nodetails, nocontrols } = props; + const { id, can_unlock, tier } = node; + const { + name, + description, + costs, + design_ids, + prereq_ids, + required_experiments, + discount_experiments, + } = node_cache[id]; + const [ + techwebRoute, + setTechwebRoute, + ] = useLocalState(context, 'techwebRoute', null); + const [ + tabIndex, + setTabIndex, + ] = useLocalState(context, 'nodeDetailTabIndex', 0); + + const expcompl = required_experiments + .filter(x => experiments[x]?.completed) + .length; + const experimentProgress = ( + + Experiments ({expcompl}/{required_experiments.length}) + + ); + + const techcompl = prereq_ids + .filter(x => nodes.find(y => y.id === x)?.tier === 0) + .length; + const techProgress = ( + + Tech ({techcompl}/{prereq_ids.length}) + + ); + + // Notice this logic will have te be changed if we make the discounts + // pool-specific + const nodeDiscount = Object.keys(discount_experiments) + .filter(x => experiments[x]?.completed) + .reduce((tot, curr) => { + return tot + discount_experiments[curr]; + }, 0); + + return ( +
+ {!nodetails && ( + + )} + {tier > 0 && ( + + )} + + )}> + {tier !== 0 && ( + + {costs.map(k => { + const reqPts = Math.max(0, k.value - nodeDiscount); + const nodeProg = Math.min(reqPts, points[k.type]) || 0; + return ( + + + {abbreviateName(k.type)} ({nodeProg}/{reqPts}) + + + ); + })} + {prereq_ids.length > 0 && ( + + {techProgress} + + )} + {required_experiments?.length > 0 && ( + + {experimentProgress} + + )} + + )} + + {description} + + + {design_ids.map((k, i) => ( +
+ ); +}; + +const LockedExperiment = (props, context) => { + return ( + + + + This experiment has not been discovered yet, continue researching + nodes in the tree to discover the contents of this experiment. + + + ); +}; diff --git a/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss b/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss new file mode 100644 index 00000000000..b4265b1fba5 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss @@ -0,0 +1,85 @@ +.ExperimentTechwebServer__Web, +.ExperimentConfigure__ExperimentPanel { + background: #000000; + border: 1px solid #40628a; + margin: 3px 0; +} + +.ExperimentTechwebServer__WebHeader { + background: #40628a; + padding: 2px; +} + +.ExperimentTechwebServer__WebName { + font-size: 18px; +} + +.ExperimentTechwebServer__WebContent { + padding: 4px; +} + +.ExperimentTechwebServer__WebContent > .LabeledList { + margin: 0.25rem 0.25rem 0.25rem 1rem; +} + +.ExperimentConfigure__ExperimentName { + font-weight: bold; + border-radius: 0; +} + +.ExperimentConfigure__ExperimentContent { + padding: 0.25rem 1.5rem 0.25rem 0.25rem; +} + +.ExperimentStage__Indicator { + font-weight: bold; + margin-right: 1rem; + text-align: center; +} + +.ExperimentStage__StageContainer.complete .ExperimentStage__Description { + opacity: 0.4; + text-decoration: line-through; +} + +.ExperimentStage__StageContainer { + margin-bottom: 5px; +} + +.ExperimentStage__Table { + border-collapse: separate; + border-spacing: 0.25rem 0.25rem; +} + +.ExperimentConfigure__PerformExperiment { + text-align: center; + padding: 0.75rem 0; +} + +.ExperimentConfigure__ExperimentsContainer { + height: 100%; + display: flex; + flex-direction: column; +} + +.ExperimentConfigure__ExperimentsContainer > :last-child { + flex: 1; + overflow-y: auto; +} + +// Required for the time being otherwise we'll end up coloring the tooltip +// by accident when we color the tag. +.ExperimentConfigure__TagContainer { + position: absolute; + right: 0; + top: 0; +} + +.ExperimentConfigure__PerformanceHint * { + position: absolute; + width: 100%; + height: 100%; + right: 0; + top: 0; + color: rgba(255, 255, 255, 0.5); +} diff --git a/tgui/packages/tgui/styles/interfaces/TachyonArray.scss b/tgui/packages/tgui/styles/interfaces/TachyonArray.scss new file mode 100644 index 00000000000..2aed9f94dcf --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/TachyonArray.scss @@ -0,0 +1,13 @@ +.TachyonArray__ActiveRecord { + margin: 0 0.5em 0 0.8em; +} + +.TachyonArray__Content { + overflow-x: hidden; + overflow-y: auto; +} + +.TachyonArray__ResearchFooter > * { + width: 100%; + text-align: center; +} diff --git a/tgui/packages/tgui/styles/interfaces/Techweb.scss b/tgui/packages/tgui/styles/interfaces/Techweb.scss new file mode 100644 index 00000000000..684267185d1 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Techweb.scss @@ -0,0 +1,78 @@ +@use '../colors.scss'; + +.Techweb__NodeProgress { + margin-bottom: 1rem; +} + +.Techweb__NodeProgress > *:not(:last-child) { + margin-right: 0.4rem; +} + +.Techweb__DesignIcon { + margin-left: 0.25rem; + margin-right: 0.25rem; +} + +.Techweb__OverviewNodes { + overflow-y: auto; + overflow-x: hidden; + padding-right: 6px; + padding-top: 4px; +} + +.Techweb__HeaderContent { + background-color: black; + padding: 6px; + border: 1px solid #40628a; +} + +.Techweb__HeaderContent > * > :not(:last-child) { + margin-bottom: 5px; +} + +.Techweb__HeaderSectionTabs { + margin-top: 8px; + background-color: black; + border: 1px solid #40628a; + padding-left: 5px; + padding-right: 5px; +} + +.Techweb__HeaderTabTitle { + border-right: 1px solid #40628a; + padding-right: 0.5em; + margin-right: 0.5em; + font-weight: bold; +} + +.Techweb__HeaderSectionTabs input { + background-color: rgba(255, 255, 255, 0.05); +} + +.Techweb__PointSummary { + list-style: none; + margin: 0.4em 0 0 1em; + padding: 0; +} + +.Techweb__SecProtocol { + color: colors.$bad; + margin-left: 0.2em; +} + +.Techweb__SecProtocol.engaged { + color: colors.$good; +} + +.Techweb__DesignModal > :not(:last-child) { + margin-bottom: 0.5em; +} + +.Techweb__LockedModal > :not(:last-child) { + margin-bottom: 0.5em; +} + +.Techweb__ExperimentDiscount { + color: colors.$label; + margin: 0.5em 0; +} diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss index 03fd832d574..6124d863dee 100644 --- a/tgui/packages/tgui/styles/main.scss +++ b/tgui/packages/tgui/styles/main.scss @@ -45,10 +45,13 @@ @include meta.load-css('./interfaces/ListInput.scss'); @include meta.load-css('./interfaces/AlertModal.scss'); @include meta.load-css('./interfaces/CameraConsole.scss'); +@include meta.load-css('./interfaces/ExperimentConfigure.scss'); @include meta.load-css('./interfaces/NuclearBomb.scss'); @include meta.load-css('./interfaces/Paper.scss'); @include meta.load-css('./interfaces/Roulette.scss'); @include meta.load-css('./interfaces/Safe.scss'); +@include meta.load-css('./interfaces/TachyonArray.scss'); +@include meta.load-css('./interfaces/Techweb.scss'); // Layouts @include meta.load-css('./layouts/Layout.scss'); diff --git a/tools/ci/build_spaceman_dmm.sh b/tools/ci/build_spaceman_dmm.sh old mode 100644 new mode 100755 diff --git a/tools/ci/check_changelogs.sh b/tools/ci/check_changelogs.sh old mode 100644 new mode 100755 diff --git a/tools/ci/check_filedirs.sh b/tools/ci/check_filedirs.sh old mode 100644 new mode 100755 diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh old mode 100644 new mode 100755 diff --git a/tools/ci/dm.sh b/tools/ci/dm.sh old mode 100644 new mode 100755 diff --git a/tools/ci/download_byond.sh b/tools/ci/download_byond.sh old mode 100644 new mode 100755 diff --git a/tools/ci/install_byond.sh b/tools/ci/install_byond.sh old mode 100644 new mode 100755 diff --git a/tools/ci/install_rust_g.sh b/tools/ci/install_rust_g.sh old mode 100644 new mode 100755 diff --git a/tools/ci/install_spaceman_dmm.sh b/tools/ci/install_spaceman_dmm.sh old mode 100644 new mode 100755 diff --git a/tools/ci/template_dm_generator.py b/tools/ci/template_dm_generator.py old mode 100644 new mode 100755

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 b+%(>p44$-O0~lMu4sRp?*jcXS;Q{^!1`jyO literal 0 HcmV?d00001 diff --git a/sound/machines/destructive_scanner/ScanSafe.ogg b/sound/machines/destructive_scanner/ScanSafe.ogg new file mode 100644 index 0000000000000000000000000000000000000000..afc7c91f3ac7cb6dbd2b18bd846bb41482c3ddfa GIT binary patch literal 95555 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 z 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 literal 0 HcmV?d00001 diff --git a/sound/machines/destructive_scanner/TubeDown.ogg b/sound/machines/destructive_scanner/TubeDown.ogg new file mode 100644 index 0000000000000000000000000000000000000000..18690dd44220acc91b4610fc02d6971aaa9b49c6 GIT binary patch literal 135532 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 z zpB@!;a)FknX52Ln%uA8)xMS&0$=ZQkllDpF+VGcAcE=rqZFIxzp*)4qd&u09r?L;AikG4CN43iL_Ym{uZQ z-ri|v+s2-btB=pt4v+Y?nq7?xX)WMzWK(vSezB0-QrF)#DHV4Q2zM+qxbos~ks%gK zMbTigm@+IBFt-a1+gnv$Wc$Ob701qfI*h=y$B_|ubU&W#N$q^d)4sGMGVhvjKmd2- zvKXquaOkAmp6X>!?^SS5QHwieO5~jea?IB;)QFk82CQBtes!U0Tk#LB;S87 zdK{V`bj`&wpxp!zaK>QF@~>IFS@^7u_qtilFS9DM`fe*$QCCu(z5Hh#X3f34W-+T) zxUKTJ*sR~mQ0gB0u_Sw|H9VnYg8n4-!QF*{7z!>j z(;Tu|sD+GvDV|k`^$RmH@<4?J1>3b%h4{mdkZlv=ub*qgGT~ap5T<^S=>ENy6C9#% z52pYQ$ev_47OvknYFTTISA((Y%cgPH^$#`_TMwqgdGvjwU7emUmtipPIAf)@2D^s$ z!w(hsj2~)?+Fw92`RL~z&RqCo&WNAaso@u}-_AVZ>3aH+JOFdk<`=}Td94{q4v)Cq z9D`y+0~l;HQ~vRjKqaU1-ukIO_N(o%Iq}0uSwg^}_X>hn8#_F-WWAgDucyEwsiRx} zFuZoS+SvG?$uI80A@K>7VY{r}qav3HzlWp>)q;hBs>=LLYv&nB1O}v1`FnvC9#?Q7 z-cZD$^c`}RvWybj1#CSsx`il|#$|9u&ODm-HIyoGRd#l*^+1S#!VP(qmEybztu`T_ zA{2XQ-4I+_bT1F_F_-`hwbaq~)~p;MibdUq@Op_Mi%bCA0)eE90cvr2v_1C8k{1iL zNjSJHNtF$YM0XzaF}U}&eI}Xw(Tl$-eD$qa1GObL?5T)wOqf)~-y6wJeY&gU?(h!u z^+%~xZIumz>s|N12zzg!0Uc5qVMlI@8B!8WA;bo>uRA94bV*aL-2yw>Tu#WXuG`>$ z&)6l%iiUKeoviM2ePv|dV#Tu#bvJsB^joYUhCfiT%q+j!on_J|tTO4VghO%EfP!v3 zMy|xmD?{Yf?{O%M4AZL4Wux?H+Dtzd6-z}^CUj9+ls2hTa2r2HX1-U~c!NY>nZp(m z#eDX(JDGF+lB@HZk+UfyZ}!X2$IyeG_OAKOrBm9*vlTE}Ih|5$AK)^U?#cg4zaqD@ zc~Cps!NgtbNb9dLe>y!$l9%{jbBh|4`$oyEiyr@K(V|n5>=M>k*sGN7_;VTtJ zV!XNT3U{Nm>wfttbI@W>)n(}wVAb>sov4T`Lf~C+j1hw31Mq%Ot*-BrSSl^8u~@Sd zMv`5WNTuen-q0zL%$#k1kWtCn6J8X9^uTI}xr1Z zl?V_nz3yg*FC3AI+|IqhemQqSeT#wO>dgVW%?22n{Nvp{y{a;c5~+P`S!~=jq%rJ| z5i~_4C#c75+;L9nb>)pb{p~_4CHwcNp3!9o)OLqT9)?YrOo{gfC7nDvc?N9!UAEQZ z>+B!)Cgio9f4LJsP0t*s?*jSjS5BLW!dpeR5i@bGOtYCvtM`WLY;{1^Va#Yg2g3hL{Rp$$8ZGA@(iL# zB5)GnZA1D=Y&yMOwOz)b1}9mX7{bYdHm-@7C*y&0!XdCQBYvg-iDI8yfPPfwbeeR4Ov0GYTcO6I_ub zK2{zst8_NNA#hFF&XaM5*49lC+Kld=QM-U39V61)Ke4WBqb{$CDj47Ov=a%qTIz`D zsq{EFx{zHM9tms5w7q$MR1kvE5{AgwPJRiNM5qPHlLsQdqO$j!OWwb5x^ygb>g1)W z#9#MseO&lw;;+)Ues(Kf#;(6ipSN!uVEE%S_3%m6o`6dmV=uRKe46+* zwp{OaPso#tX&2YL{H1Eiy`da=8vZZoM1;=c37x^Ir#DnqpDPy+JcfJ65|=F6`z4fb3;MuH1<%Z0qMmP8P7_2Q6?R?YxN| zPhTxnqoe?vJZ*NRG8pB7t;g$+@G_n_a^XcHfe;}i#3gDGa4rege@n~PFji8is&qBg zAfUjvaUFbDq<%H_95~=NsUeaWM)nKvAr4Q5G*offrys+LmbmO;RfV^AduBgs=X^ zn)hMP)YC_nGWRD>>NbH%tx2{sf~+42Za;Mtt6PR=9UF_MYx^lwdW}e;>RpWdN&2nO zQBNOf(IhQA5)x4^7Z<6)o$iJ<7THc>0j-cCh>x6{mP|LpyH$vJlLYPo2_xwSbc~sV zlu97YDerU+ZmO~Cnom@L#5i&Z3Sj13;GswAq&9>!=Wj+tk1g=t?+ z6uN8bL;x7F)R>9@r@l^_pBV^eWk>X{IeMbcFgKeu`sR|nBkfO!e+^t>4FlScqt1*W7vs21CrF}!6u@0RJuYb6(jGOtqt7YcHyUS^Fs}yJ;j?F zT^CKQf5IH#%R>_jUZj4id3;XbwQ=Xi#)x+3MU!T48m~O#BiZ6r_MHXTk6i_|KbgM! z^T5oE%K8Gby!1i)?fq4M=|z_4zBz-s3d`}_*0eM2mgZ%xihDk9A9ZOR+)V(k1_mfw zzyuiPArE+HUdN*!ghxBBd`7-*IB8M4$bAIGR~EqbI7fr*?bn3H@5iiE@#n)lAEaoE z$3$gC*!!vT4n&)=88HTnJpC(F7QsQC_BHf;FIS_9PRe* z>-)T3YL~!)x$de%uWc9Y$~{-*^^QGoddCy&vqxD#@Bm*13otK!fDk&gf`-Gh0V77O z>|RXK-kw9ZlzT6KvG_2yAjh&X*uZ#a+B@C6`P9eM@d*vD;*wr94XP%%XtyPYFOkN< zMug!^{m`4o(s`HuV%e_g0mSH4Kl*S0NVoI`fepw5&-_Y3gBMn3;-#XDL6iYV zV6q~Eiy$!+^GxjMOlok#*U4puCP*Ri9D8wR=AGp~@28K%>7#8z>W&_^$3zHBCl0|G4oU?2e=7l+{wwX7k(>@R>(R1)?HF@6Oz}D z>vDwDtJ3dz6U!-})-6CL6cIW7aqW{LglAz&rwN+SrPFRLf??{pvLtlU$nR%xVH;1r zIu~ZX{@|8wE{j^vbLx_a*b{YPkpvh0S$Q$2Rm3K{p=nM)9M`X&2(t0FLgdAs7l;Rj zqfD+PjE-*4Rj#!O(utX{$#`4Y`?2lLRO-4*Tf#d3*s45YVzRvqZiGxuj5=-liy!hq zMhEBl>Rj=AxLxM>0(Avn#?9@C!(!C{MO}-lUxDOX6Ww6c2ElZGEwZ`9wEjYEyaXJ& z(xAvaPtC_B4`16Dc-MV%U7u+Al1nyX=V!LWgsT#3>oVucx4L)l-W}}D+L1;a(CH&v zS`N&-Z!dusVIjeDLQ3KV$mOR*hR%~5?XlaPhIvIr@etN{36yaztM~T6K)dX+Kqb!6 z4I9815qZMzdHY%aYWcOk^$#Uu^NRDYHvU@Ma@I;Kq}AHmki}}v9Fg|^@TJl6*rnnv z=)H$GZ2uCgWB!t4j#bjRzKpT?ifdd_9>W#=I(rxWh-AV#7{mra(jK6j`Hmc z`i56%*=F_>W_|Uf(}G{O|KUs~L}!vKLvDl6i1U*Z^>D|fz7G%o<@ckdRQ3A0HO02S z3GuL&)oeYp;`~HSRs0kU@0kPbWwW^v6P>1I(`xC~m}t6Ui)87FGNC>3?y}&+u}Q%~ zyUMb%1cv$>?9gXtEe6y>B?gRIg4tAHV`_@m!@=(E ztjfwNw!N&)+?@GM^$u` z1>#|LJ(e8O_*3aG2_mP(w!{ty-bvgEqU^O?75&>BXY7yU8sEK_ z>Nv9+I{2q2tC?WoUuDP%SWL$y5ttO95p}@kdCiFqgBB0-NES`;@b@%Z0 z3fTbt&w)VJtaSEt&AP@@=&OIY(;hqxcGEhxaaqkwa_IU{D%Wn%QB?sQ^DYv_jR>Vk z>62jNA4iFt02ao?P3AfN=+n|om}MWwZj2mqlaLmJ=_&o@%a0aKX! zi}|+UFxde2*u($EJxUVlh`Eq3dx8ZxtazX9X$G-c0e_0}_=oDa-sSCf?Yuf=TqsS7m6q*t}YEiSC`ZWiay8*@*@xEaF@a~0ovmQx$8Z5da634WkT6*scZ{9 zP4n*^J=9br(81Ok){@+UnK$ZGYo!=1QJhm3S^m?q!)!Z*A-av*)aUdIZAp%B<^8(j z$n{h;tP!<<9Y0%%DiM{BeyTXd+qT>Em7%=&VfKrJJ9`%+AiKGM$HvNzsMDaIlS3zg z0;48FuEk`HUyQ$a&bw4_{IM@0t1wvY_i}*An61>9HQEwL6xJBLtSYdZxhZ8_P$iBU znrgd_xm_2b&hILFtZli;(8?S$W#8B!>$-BJ-?H4)J*#f>PJXY-W=_pdnjc}BY~O;k z<)%LpV9%qy9m1@+2ZD8UbPgIDlbUi;8hssXEurJ3eZxGt;pAjNb7of_R#h)-+B^i+ zrz^MX_awJUo0WE`mO61b^#DnVe?CqW-~$SC`u|*g0wM6IS_0?scwyld-#I^la>BI=!?Z_zAj5C>9EcqB`T~ zYis*nMy4Tzoi{-d;eP1e!GN^|!mh5gJu2K?Z=Nye1~zf!%%<_;t!9c2V>YnKV~{^L z>09|$wI!%N2#4!kb>G+i^}Yd4fd>YU{~Xx5X3I|}gR|7SMcwXR4yl%Fhigm0mu~$< zyp1hC3>isMHhUB${892z1v~uqVk7ZrvkP_w0&TO+&Nn6#VF>^!Bq<`|6t)HOfg|Gk z4=G#2>hj_Zxe=lwXO4^~YK*XIy3VW5ke|Tgh+J*rfH0<gz@?qJ-AQzpU#QChgWX zTVa;nEs`=B1yVvdqZ2wWCe>;4v=PFwiqhW>{&M`5-gOHJ2_MBSg(*nkmiwUWhJAZEnp_5<)8XTx;%?E^{lQq7aHyDoLtO z7u|hNzwhrme~f?pad!4Puh;YScs}2H^1d;zHk85@;Pvd_6)ZgaYRM7VGlwqp%JPA; z>i4HRkG(dDh+Ro)o8KAS6P{Oo{a&4j1Of?L9E=96rlJLFu=Lf3B5Ohd*5vp*E1c@h z=UMEh=v9qG@0BL?=HKl+^}o~d3yh|Lo@Rk|@o1hlpjw2J_O}ran;WJn_s~0Aiqg(y z-Qe`N(T zw8{m{3C!C)OHt%fR_a>U1%m{BeEDwhM0k`T~)ZTf#vJ0k*&7`|g%jxu)OX8kI zYa~Av-Z4=WZnXV&$~S>O1Q4P@g0fO6rX3FIv0!?8%S&zSfJvldD}nlutw25kzTH0$ zr*|4&TQFzR`$z{PGo8(48dh!TScui^@jNm`@xD#?+Zk%mwb$~Iy)FwGA}v#bhhSsle|Gf&~%U@XtPKYo@+pHGO})j z;p-ss$HxV4Uk5?rM9y(9GiZFKik0g}MHsK4b-M~>%kH!ZM8wk=U3`XHs~SGQ(;(;6 z8ae+KaVI=(@l}G{xSf{1e==8~HLHHf(yRDJMERIO`S%=H=1{7TlN#hV=$CzweA|Qz zXN^o`xNGH^^hht~pDPt%A{7J37f=7TE|LnTp^7m60J#DrWcM*)XbU7*f#;3Ej2k>QRzC$(5<%>eNc*y0QAnz~ENNpk@BKuSR-1MbuPk z=n$?NF2l-U39{uP2&hQTIUTRNkm&+LG|R)UvK{|ngMlt21n z@W#@>ogGVq8;9uRKVQFojlU|TPn{X46jp@^28$1coEuH^l240Sntt~{Iu*e2&Vnfl z=6#KR^u!}JiGRzY09x=EqJaCNG?SKU?;f6-;wfCB?XFbQIe0^`M-Bnrj!qWH##tQ* zsWVx(73KgN3)0?tD)-&W+@QvlyBwNy`>*~Mrg08x*+Lv;O|J2u(#x$UBe}f~oLbAx zcQge;i4df-=gtSnZCYH)3dou;Q&Kxe{KZ{A+j85#Fq8eRs!}aqSGBP$>D0I?S3BR? zp?liQ3(tw{Epr0~o&u>Zv6af#g0oZgZz{XPYNIk+&H7x)a2vC>^yu2W-38FxRGg3X zTc6BCcPaaHkpp$B9vt!GGh#KAPn{m}SrZhEiYr+ETq?#fjqP7jVr1GR)Iz zP;aY6!dj*_otAjX&9}o{VYYa2@xDvi<~iqSRe{=l(~EBoZ5m(hnm#Ol=0RbN>itK- z2R!Hsp~1ml%pxXDfrRiUn_xCIF8BqL6PMyT7QV$W8t-F6L9c=WszRvCP`vwo&yV>; z`kxg;VIV7glO?Q4ZvdvDI>`9)l_G> zz>gcV(IbDDZt{-#s&?$mvj;xKn>f7JWou&9G^h1tLc`2~w(NnAC9mZSGP~DN7H2w> zvu9;cg-g-4nh$yD2tK#XXRWAVlBd@qsts)99(qAhku6s^Vpy56`^|Z)qa)KbMu{dr z+GADd2G%!o->tv)*?sIX>Ij5p{`ftAw*Joi4%9wNXv9_r zxnIRsVEqNsr+vO-22uybz%vVXd_2-^#jkP;VAQ%GDQdV#nP&;}ZvZI^A|ey6Zy-mjG*vr5ODcbvf8i(Axr#bl_mwqRX3NyZ_7{E%x zhHKHoi$ezwc#X`g+R~ufizz5*`Wp2;OW~rt$~a~lx4IFzn;Q_eH+iG5wy@vfo`nG& zvYh9Vq%L=+{TI?~`|z}SIl#|ap&US?)_TF{xTa8`SV2&QDV9kL9u7Tpt~LRrh*m!V zjLk_F2&yAwvfXAFVGL+5L_#83_%JykFCdvf@i#2v;I-Keb0ca5T#L96t;1wl>#&*i z^7+_VD%U)!g`k5p3u=G^!Hz;^a&xA#9O$u)2rp^wCkb_(h;FrcAoHc}eeWxDdv%q^ z*5kL$;ICecToNVis7-HdW2y2eE5xhOj0IaLZE<*f_{z(J9l>y1TyLF{biUj5ybVks zn(0)7#jFz+G=kgms%Xq|bVvny`{12C+>U*e!9vO*oX@x`)Xfjy>g z1$gldBI%+!1-ru3=}%yo6KzrZ%$BZ3J+Wv%GUb6O=e{H>Ip)A| zQRz0TSZM>Rd(QqSfM3!jDWDnI{_zU(;hA|OpCq)G8Z2b0D#V4y8>AIjOa@NETVd*% z+g9xo()pU{XJ-1WEhg6khtURgd9;02{g?+(3N#CFRw541kCe)x)$Mz)QT5HL{rrWNfYD!#A97bVVFF_mgY zCpwtd2`Tus6TAYQt8+ zlszTQ`c$%j*IFeabJ+1^ZZHKtka^=SEt-85rI5Ynp#0FH!k0Yvq{Ha{#WSRE2x){~ z|8x?Fo&bpX+yLTo>+-GT-sOhn?B$?k-{pPKPt0<}QOv9!d;vb}pTFF_W;={;-DlnW zMaD$0dZ7=JQ=?U+KqY#!EUjzGy(F9S_MGt#Q&yX?k z1`jLCAl0ddrj*&HSmf*q|3c(D_=K8Y`^pqFI~;Jsk}woFXfm{d?Q9E>0dx@{m1Lsb zNNPA1WV6i#ia{VHMaL6PW2B=&XSIJ8N#gjPIJrZn#Gk9?on43mBOXdxjq8;eGMv^u z113PxtaBDCsECHu!&yJn8J>*}%Am&+vQhx)86_3LO(xhx#RBBQ3WxVt!r|mDhy-}g z?{oMv%_7RWwQHZ6eQHcbNZ!kk%|@S|zWVd(y{Ok=Xv>Ye8H%4BNUQj)IDhHdCvpL9 zHXgnA!y}R#>|M+a3(^Woh&Fanv?_(PFuX^7T5Y;&2+E!{^fw>?FScG)&efo@$XtK2 z1+SH@WZqkQJ5&MqL*@k>p;K}x9FQ~36U^jL?$zc{_N%fIp-{S_7KfI1^6eZqz=Kj4 zx#Mn23bVz61muYbuZ&FFlP@R@dBf9f6_}JuO+F_ZYN{Po!uz_mFlOkAAV+uLE4P~J zZ`)oR?`rpek<7>7T=l(hn3%1!C}nC>!7QFm=b7PGJ*xG!7F7tZEj+jwe{KD-_o(){ zWEgU`Bpq2~Kh(Io!APpHq1{n0Ux*xA0VrEzYNTdYLX*;jp7>q0urga$)6{hplpibGrwPd}Sb;qdRQPuGfxnxKHba5F>(2N88?TB9rU>Y-P z1-5A>nHB5I9@(v>eb<@@#}Gp~{cMTqQ)KQGS(J8P+5AOBM^V40#ZOh-}38KjE+X zc{ouB7l{3M2sdQ!L+e@~4m2}Ohr`okv0SsV<`$AvQd?MBtye8da@H=asZ>4a9DkhY zSeIiKZX>UjMAY*zG_ki;Hyjd}1q!Z)_Ly?-b+J}4C2XzJRG?MHF$Z+{z*Evqt337L z9N@HvyA`=5lxd<5EQjMw9x*%}8p}K%VYuGUJYhWTU5$JE;FfR6F6)7dckRPb*NX*X z)wt&O4JU13)ruL4fYZ}pAmFpk?15~fW@_i)z`s)r_!#{$ci@JqFQp_=(>M_UESNi? zK_4x3xOh8BF0D+pegYxr47Uf#O4=$g4y%45vWQwB7!MUOa^=BhknT2w064+J;gsBT zZD&EVT(lW1|D&m92R!gN?C+0cxR9`_dS>}I3l;~Mqz z#j@c^BnP5l&j>|@;9-wUhK~(~qm=V@(ki8BX22*~+S2dt3G=ka1@s(Du}27)yUNKJ zG(AZfZlfvXI$+LF5ml(@DJrA3 zqG|izc~u}a^+OfZ(lKT40wr|2iyJGtcwX@^FBjx$@W7=CP!F6+s+Qu%=7^vqKmMof zNu}sjb$U;2_+fD&HDp$@ja^ zJ$&vez#w!q(j>sYewQc6rX;b+fNt+;wjO0{GEl87O)9A;*coM8j(dui(Ci>-8N}7g zlc6P#nikkR*BNN?bz3JKwK^fC2>zdpQ%K&;)YYX`f}`Xw_3rDRUQ%X_ySr{_KKFI% zcK-H@@|Hz4J9EN}jiqM#7aJPFcS%$Z8~5UTYAf&YxsCpuhC;}3%Wd>#({P;+b?sWl zG#w&(cpNh#(=#Jp?sjBDz;7|i6PD@ari=h{61?Va{LvMjr-}H8>%c!(jyr+_p~g*f zrSx zmBkshUEC6EkVbvdZH!jQL%id=k#~kAFp+dhr}4IM9mAiStrsAXJUiGYKuChF&s`YU z!9R9$`N_9Jk{TG@Sej7aJ;M8-B(&SB$k*Eher$7ceGWsNAnr;RLarvcX6g#6GW8x-JKL6E?Epq_KBRy?_fC zlF+;^3>fq5A)~*80+_sk7@_n%5nNe--F}l(2tN7)aP=HVw?Xkh_X(R07w=m_GZ-RXFU+x+#nl}4$4D9}W2z&VD(H_g- zn|<#1?KNjZ?xz(#rq}w-u%4N@e0!H+wOXO(rbVR?Dbxbk0+EI6u5Z=azwVQwkw8%p z6dlL_mbSOwr?{|AG!Xz}ED5Gr4t*BHHhqu@|C>&LqodeAQI$)Df$qpPOmCIbId|?{ zQb3ptG_{dU-=8SX^z^u%#oMB;uotckS+41vk(TC3uCe+HCIlJM!|gMfjp4~*np}S_ zDNUHF0C`V{RDFj|SL^L72%WyF2uuc$C$tFc8)~SbAhMntS3U06u~klLk<`kShb9nN z+eL#COOl&P7Q)TUJQXSD%wZKr{I!QiKGafTgkHvWvrW7NEj*Ze2^(c!Kkt>*7%rcz z{X&ktc{ndR&JV$t(?4z7aD3zR{a0DK?9-(YUGF=nwd1$acGGs8di87h^@g|Kb^dHz z+PH7~qiid7ukAXg1F^4K_Z4i6Bz^e3vKfX0$p)W;LN$F?pO0DjfY5uo&}A*-<+Y>K z1IcAwoG%DM9+76N_;C`tH#RW(w)0By@cMMY=!0v4AG&rQ)XSJe>&!D`g-F3T_`FIo za%4|B_tzd-Ij|`qg&Q1ZN*d@cTL16Yw|DqPH&nN;pP)P(?_KPBFp;q4TtuR0L>JV9 zGqCCq`V?7TB|2AB)jQ3G`dmpnKO#bb*7L9>+}@A|f#JPk4g#`GNTU3A8C9)V%aTxe znF4;HgC+w<@qx%^W<;pX2phVP`uVhO_YO+9tmO!6bZ(?B6($7_Jsd~9c@{%4p+Z}4 zt>_u49163ZA4$$BC6}|Ow%KwDx_Vsw{XA8ftvqvvPx5u(i1uW7_R6_?y)j9BWI_t7 zIdFLAA;ph3Y+R?~VZV3w;X9tG=bU)^;EYFsM&F+wI_}?>VlB6q<>2|54QOc4A_NV@pJ3)_ys(bE7-8 zKZI1A)JMX?1F6lE@ADN$W7kcBk0^}PcHQQPl`mjWn}wDI@!nua>h&kK|J54>fulYj z0Dlk*<<3q|F2FB7++w!`=Uvz}7?<(=Qma?v!GfH_?QQA-ns^LD@MJJhWZWAi2Sc~cyC$kz@Qp7I%DLj_t(2`?^D7+*diQCWFYMy6 zNOv!JtW$2_F7r_~+q{)nqv7#&sq^L|ihRfQZKhw>K5kwgI+h(5e>B5t`Aon5=Sa0Z zS44w%o*r3>{khrHbmQQfVE(x2yOqVv0Vgb=zdfL96{9?t9d+Ybg32d@{Dn~&l30vB zlKY(aM+uFERA2!Na_lAavIolFUCWobd25Xp23k&|$WkJSe&U|vcifq6pL9pzAM{#@ zG+ zkm{1rnqG^EBAOx!av-1EPGf`An;KBTkAQGmb0-eKh2%I|nEp&tH6e;tCjXyTAO^=H;db!U)9Bx}nWpDzlps zH*S3NXtW{Iq~pyklMdCAjtJjtyGfyGg)eOPuCJ{DOMeY=;2%m|Dp-S{KM%-yl)QG* zW<~mxp`zC)yo-P;3J7cAmuFoK0CdT}zplq@zH#POWuA|7{L+JYJ#gj6r$1X9S>~-8 zHBhz+WO)sP!cZ)!@vUq-j+!z9AukTs9q8a%M0KYhaECxnkwf_&&cC3VZ~l9sX7XYc z$)RCdO`V2ijoc>&49tWhEJ!uxjp2S_y9^t6Ds^H5iC4LOIgf)gY?~tlWOyNUn6Xf< zv%eY!dyg^RilR9CF<`M!>Tf2#yb<` zw;2uS`Kth4%=BgVK-~yTjPz;Muyyh7*&p<#d(;tj!)p1S?IV^kDhrhZUFrWXkeEQl z8G8K_NMxXQgFVJQq-D->^l~`#6A!)bghZ0~o6d&Ow8?(=5do*>Wzb zu~*tR)XWy&>%vn9 zdtBun3Nxn)<5($(e~EL3zdBHT8OkC_*D+kAyz+}6yzSFb@f2S`q8v*out6Zo}f zyn@6({tL6ae9v^SCJ9+JcV-8Mzc9Z@f&Gm>g#GB|s&Y_VG;T1p3+1IN{+V;2u6?!5 z`2e3B$a8A}GKtXO45d={-QN5e4jh0bEQN@JWXnM0-$>1*SE-NYAH5pBWwx zrRc-!eE8pkEsi)Rcj{Na*M~RMYU2Y=GnfINpW!=`ydErU(s-?Vb6@69d||qE;(e$) z5%b6tOV)a%9>|)ug$#Xp1;>cr@*jlD6 z#>rOwd6T-~dxNvjt8>l{xB&K0Km-S=Oo(sjttBVbj430K_fSZnoL}qDs^>Rj0^kdD zToskR0+t*pkh`M-OU;Jcmu`0!k?Qmv8quDtz$!vjJqDvc!xV<6mv!#3s;j+6 zuU`#M=)Y^%tp%euQ0q*s;v{dVcR0n1Yh?%)B7hkrYX!lubct= zl^+I4u~myo=g)om_{XV3fkE)u@$E_Rlu{bKrgY{!u&im91(ZD$%% z1p3;Ru+@d0#_vS(4oiM%j+NpG#?g{P-0V#u=)l@-21-C`(KG+<;^jlnYFi*K8OkvE z#B`4}JNm8;*n^ayc-gI}Q2JVSU&|a?w6IzksZiyIF4WEtK6SXlwy&CY`TW0 z*ZJbb)*O$a#Pw(PeZ3&;zEmIOc1@|^wE5fFhKJ~T3!U_17nJsgT>c{65ckOR`g5IRNm*K-e^vae_xsBi;lU=YYVGOG z^uoiC-QZ7<)z9BgyWohCzl(Q@n&*E9fnsQu=!HiIsv>|zpW+GsWW!pcDYz{ZltC_l z`-VdI^+SZ_F)sNd>7!-f8cc%x`J(`&XU?ZLWxD*A4`6BEPqcN{2NV>lzA=KFlpvh) zLfC$1PnIY?iso(XihR=dLR{ex*nsshrz@Cp>~=rCqKUx_9(RmNQfA3v_J6s%-zM`# zpC`y?&n^6%$;Ml#0xF~Jo+yrV$t4-S)2xqH=F)&kG+;QG0u1bHW zftke>^4`|c_O=IB@jt!I!VmcNUbV5YisN`Vokt%$zGYQo6kcI@eE+6vc%>8K$l$e8 z3ZD;-H!C;}J{m%?kKD`r+1h#_ciz-%t^B$EngC(H@M8bQU9$zPS(`fvDz>0n*ay#p zo0yykNtAI*xyb>U3-P-Y1eu0UU>3JSlJy?FiauJ`6z#Y4c=^}$0H7twC!#kU)R^(k zR%-eC2%g%%VQtcHVOu@X_T@?dJ*31%IFoOlD~=vKwYOkzN>TA^m#j%u>c0|I=Ee4R z8E#T=I4!z%?ZA(+;^uJ+qeHfgE9%K}b&1D*=c8p|^@1})ui4%a)&cdREUyOdZd)47 z)qIpvr~EG5uS^^!strT6U?^gySq9Z1BK>k|MYlNA&Bhx}I3xy*53Eb6RdN!Yerl6`g(C&974M%iFkkbiL4Sp|PL z6S-%rNs>9$Kss)m|0zdz-PZAa7b|wY?Wo$e_P}D9>YOHIJ;(O7o&7UmqlL&8xI~a(n`@5PkKN`;=Pa%Z6#_gE8u(%@XWJlSNDSsuJYND zK%d|G{!}(hA56IGg2r}KZ@AicKqFpS{y1JUxyz|(XKmi=@4*$HxSGZ>X-To(cUc~@ zPgQRHz1G*jZTgWE-u&NA7#iKs1yY6<>Cye92(CS98;DFzGVdxobogfZA%tPAwpxZW zyDgI@P5DgA-O*AC*Q-r`R38x&>#5HwtE#q7k2$4>J8{~5&~Qr(OIX@B1;Gv`0cTYA zU!?Ua-+z1{@6SW;j>9GDiY~6Z;}sJEp0xAd9b5Bc%j?Hu3qgB-(UmeEbv@{xuSrR% zx>dTquEfr)D~D)MLHxtl(Ta_bAPCDel=7C!vdFU=eB zPzYW_60S>E;WbPM3mk+));IwE}eJLhb}d^ z1=W+#7EhczBEI)r_bN3*YwscpY!;Q@Mu62d{#%5+@qZ`K<*63fYQ0>Qq)L$hiCn<&7N8}{%a=zt~NlsA%u}wLr6yDi*t}iHQ3N zK1O^tW_E46eI@bEv*QN)(wyd{vxCKF(X(|+C$}!0cRl+1&v+>cid)^8WZqtFxA+xf zEgwv+UVmxP2z_Zop`$bP@|SpxpMMiq&pivdc&S;C<|&u71&wvc`Tki(;$y$e{O{82 z8Rv3tX;NaVpz}_E-uKw39(}nG=YU4~3@I>00jG)-JOI924fik{jOW|%Lnfo!Q>}&h zuF2f$ZwJOU&2wa(5EAi+BE9dM zZrVHMq8izxpH|Hmg$1)<%C4UH!xT0WD%aVyPWN|P`vl*6zU0&#=`hZqvUdTpKqXZrqjE%>tFy z5n#X8`^p1M9U#A0@%g?6HY47fl&$dLJ#q%mhyjP~$+%+F%P8%Qd=U*d761VfY})cv8r-Qgve53z4gHQghBCD5;_U5`QS+5;Y0bY;7sf`XY zJq>3%2Q+DRWx^xwdt_f)+xrbCe-*EQtn;=t>MS~C>@Jn*mc2m7+rt{0JKIEX1$RSM zN)mL{P_|{}MHQLf5>`fO${y;>&{TPnBFMC}@^ukptJ*m9o`!;maNJM1{`$F8k6f== z&us*Cr@C6ZxUFdf_gt@DvC|hKo79p|&dsjWnJ^5}QEf8{KKv+y)G-lpwucl@?Oz;Y zy+@GOfByVw*<){1Pk&yoK3!!ay!z(%gCUpCEA}~FJLB8fb^qqd@83xvE~|T?P`|1A zZ~NK%X{{Fz_|R2mE)}W##97`Z7U<{OBqIT%AuCCg9(0leqY4Bu z#iUL?%5UoS3O$zMx&~7i&ZHC!q0CDLM1bM_IvhBL@XBCf|I2);LM zY?VcE{I)1ylAG%r?HA0Xa*xUEG~?UE9?aQLOf<3mZ8j@DcxkuDKbX)OCB<1|Uqvf) z!qXZ{963T%2Boaw1odGb1&xj6&J2k1{iKk7!u{+|?;|cRTK}c2Ig$F*n zINzV}Jw7D{i!UD6|F$|h=2@1h-*h3oDr&`>teA#uMu=6KY6;~%O<=elK{vxT6Zhxn znC~)L^e;%d3X_|=ba2DGuF%)j_oopbE0}@N;fPbO(0k;yB5y&_wVDX%8OV_PLP4Ri zoEv2#I)jM8JZm=&zWE^Wth^1Z_>=@7Q*3YutJm8sxQ1<$C1L9tyoY`! z*tE7oFnCpA9$HBm#aPf#X6x4{`QdRsEj&9zR|K}ZmdCv4;G>SLgO}<1yD?ZTTxDu9dYq13zxf5@&OS@*G3pP)SB8>$(? zaapy{zAM#vnSm~z*3v1juyt$s4ti?v$vZM~hmej(*n}H_SC7TwvI(n#Qf)50PBzSG+(P9#mVE_$(aN*|x~{7zqmjc7uaLB7qX zTARVsx{(u)B^Lo(rt00;JSXC&8@LDP{+&e3m3dj$vV6psg`tHUS{`LlN_~TaXu2tS-Tot3V*mi@RgZ`AkX0IuN zlb*dEBRISTK7t^Jm(KHgcOc&O0YLz-#%vY8@f!cy*_~(C`U)H#K{W>bZlfN%`loyJ z*{tZ7xFIhM0_abHGV@1UErq0Egh0d6b~M*kG0Z{GHP^-6;;@FkWvsRU+0%6(Ab14)QWM@uTP`F ztp2VCKv!}x*6g^_XYaG4YDPXC|8iAJQR8Pd_1)_@RqGXd*&Z}a^2mo%s+aU+Pe^#} z!>={vBPIDhy^8iG{sF|`QY<+;DnumWYZZlO2|Y1-IlnKOgy7+VYLYEt^;{}It_rT4 zEK|N7+MuSuH=vZ^wX8WQ(9X+oHBG}2KI728^X!5m%$}dJt2DsT@61-(LtBkxw=a0J z;Im~IYouHFFbU~2uRk^Av313&5M4w#C4N}7NM8;eDg^V3#nwa8=nEM)2hY1+e;?>v z-?8KSRQ%2-UlSUvZ zhI<|rYvMcF{-y-&+O?-htyX+=_vpF}PA#%ayHRz3TxvqvhnIJh3betqaSIackfu72 zP-uSHzeVC%ivC$2--PGg_l{r4Z(ppE1K{YK2E|?^yY2De9GcIZ#tYU*nLQg^xBXNG z{H1-^&;6uupN318V}bwNR~2Z>+o&7Z)Z{(M@IT+HNTY)_=Q10E%NxcT0wqbxKJ%el zpNQk-&4=3Py^?T<8uzbGjdvP=jm41!c&QozNDi{>-LiV2C<6dEZt>|bn!hqri^_w) z^iGx{ryBpllZqJH&HfTTl?GFnv`mO0^@v$opj)axY(I2WK;>DaJaIlKtWP zwR@~pD~^1eGhjIAx#-1j$crtuKUEpnVM*M>(8u=%!eS6Qryu5w-nsMZWb0zeI(=bs&3Z`F{Qn0fEc`V}iY<7QvIo8Fvw_1FFLTOXM2`?le_y5+hD9rd+gO)ETl z8-0XFYW(J4W>?1_RA@e{Dk*rQBZMD(t5=Z5We3Vuhu!)eP7*C`AOkmw&RpzP{ZiHDfNl+sMaab@u1gHh0J?_8x67B@F{Hrazq!}1!yg?oMQ7!HyaDFkhE;zexg7d%opS2Ev*kJ&Gsu3uBk$W= z?Nk8*yXMf^6^zok%Iu{6#;+j+agERZ zeb;<1%e`0M+jaKF(Xx!EMpd)-i_UFtzPNnhM%-W1r9qoN7w&J2TMGHMG^h|C(iR+g z%T!@kZ$V+Z90D~}%^j@4vl+Mc##4&zy}Gkbek(S~J`}V=b0m8Rb^Tav{`i=jg#J)V zb|hhg^wY0rtG`ErT8z?{Fc>H))7L7*!X$?N-qKBaYO9XhpHaRcI&}~p1g6huINaqX zmV7ybx}pZ8&af>&GF1be>fJ-pPl@s1*m>gYQCIWwNK&)F8l>uD8FgNr%K#n(A5t%F zbqU(9IH)cC%DhDeCJNt=|CsW4#F)Od?bXu0&8IDei>QH@PY3rL{r;X1pK$cA`9_cJ zrm~w~zl8CR=mvif{K_ciuh@xo(Yd!6rg)uRI0}w@a`L9Zz^*(^z-eWBqdbu@-+=j_ z_{~av-h2vzP@mzRt#rcB&+ti+jDk~UaPEv18%Ev zvRIC!gv#cph_%xju6>>0CkL4*u24v>5tGo!<1;-1xDMGZDrJ_v)*VOPuNjaF6Tv+S z700bsH+|Ip8EUSQE*N>2Q5Gkz*rV>|6}lbU7xS>`T$L=)sqh>zYF(_d4zuUT0@ue~ z&8PLR)!MkLgUY$Zls^w9*n49V3c{B@$8FnYo3|#-{{-qo_QtZe{)?)yyxJs?JrX&s z*&z>?{my?rk#PSz?E1cs&xqV*OUF52B}j*E(*7Q_rk0=I4LEqcs@TyHkg-6js0reZ zDL2UiJ`+ChoFlMHwv_;rLZ z6HGQbZF?2;&hD?Lam9O^^UrZl-rUNX=KTl%IBT`xL3u1^;Z#gf2N=3}_ zyoxA_D>)$fZB=F-BMLl%*G?Cy%ER)RE(8*;iEuYfQbwPLE6S@TW1jndQ+2&dw~Hy% z5y;;^g|Du*{#G;@)O4;BF_tHOk_4#RRQ>$4$fwHdw@LV9nAy3W`i19iX^E7C@xgwl zu9yi$zmxY5)v2UsMs0c>yL^)s>(EiK$?Abw<%O?t-P3v32hkTco>^LVt}kx$@@oEt zJ<>Iw&BGD~W*5`ySF0HSYlsc<$>Vw^qUakAM&yVk&aGeVo%*p z=N_a+FopH(pk@G#Tl?_-T66aXBbq!7$V#KIhqqj-+n1!4{}xphl)Nwow?NCH$S~3l zseKB^`R%q(Kbf%OcO?}4ZT5>@p4wg~%91byw@KX{8(zhv#_Zf@Y`mIab$%W#D75J1 zY1a>pe927=frq^Hx`12^_6=@$eb?&!wCe{wMZu*D7j=)n|GR$a>C!hR6Q$iM1?OIV zVRcnGRjJs$l8fFK6OV{%4^;~$qtmV>{rypB(|%$8>hA+CI)TA?rj?F-1iD)eESUpf z6+>eS9AA%14x(VvW0etrMp;7wyO)&$GSyzDP2M_JO(^>u);8{N^a&aW5}>eFIJAz1 z(EsT^EJ1BhCU|K8o^_91%KR$~YfM`YFXPoTv^y?zO(5q!Dwpj`x#z~ITlxX@|09k& zq}Ae>UTT_~q9K&r)H}8gsh3|BdZGnzHKd79ClNg1c=f zMJiZ@!0hZ77;U}bTQ#d)$+MO#&EENe!cn1Qm95uH8enj?s2Y#DOi-}97~-}2^BX?Z zYpS<()FGZ8PRnfi_WsxS)RfH8k4?=VzR)5Y6Zbl0fBUj2?Xp0)v}N8mwD0ZW`I;Yl z(@N`-g)njMwO>!qxrQ7|D86xR{duL0Hb-W+0;BgaYDX7JROB%%Q%4Ii9bha`;9+?y zHw8w|9b=46$4(`dAO-S9s!&Csjt=~J_Uga;&lir_R0f^6{r$U^@2A}-HFsZ&dIBn* z{drRSZ~O#QUo5!!9V?XoB>38`Z)S^_v;8f+;@kG|A87C$4Y&p8-~MrVWn(w1^eo#; z2${^F#YqI5tt99x0x#CZRw9)(V~g}OQ)SOoItT06AAFv&fru@)bP=R%qI%a=JLI~v zg4G6#!_st0XlJ#v@Cn0(PEo_W`cPDIrzJ?uU<&T$BReAuy`;8ngE)q~IVnIvTMo;m zCymKr1f-04{VIpEwJ3D!a6$E3?`LA5P1AyouX3+xr3mC4Z0T~Saw|Opp5eeoAu5`f z0B__b8GU^{?rt0A>C*n-70a*l*SBzmuko)l2*?+y?da;noI_^kP{Vgu>#h3|x$c%p za>&8{@Sn%NFIODj-nTZ$=Xw0g!qsu#3fs|FdXBu`II(Y{B;;ohS!lXZGEy8COJA@& zn^x~M^i$g>z$Ecl*u}di{bH`|0fh~-g)LHx*ZGNb0Fs8>Zfw?qmTGH3%%oG%ij?pQ6Xbl00|Ab zkPjvSk{J#!CoL!b#k|7g53ZJc4ll9XxXnr1v|!~RFN?782nt-GJdusdsf~X)Jl1Zw z>#P#=kJx5Pt&NSO+v8=`LS-Z-$da~o=iKTrH8agYH-*MMfu8bc`FCSV>aKQK#`@L9 zW&4HSe;Gue50-hsb-|gS04FB7f(kO-AOle4?Xr;)R83R)93IAk={9Mk!DX#_dKBFY z8T!uoj^u5$RE#!Q;0o;Y{pXGikhRrMt2k1l-TbQF%yvvV(`3DSE~D$m#OI&q@=bnRzw$uB-YnUTE-3u) z>o9-ugLlnR!5x1r5vkM~sh^>s#^TXSlH6TMC8X3ODmQ_l5uuU41*mw53iA3G~) z*~ZZm2CkCAxkTg_EEqb;18{^%U(vx=7HA-GU3-Io17vSsz{r4f9m+xPBR>w^$c6LI zoLpW5DC^2D%MTksE3lh=gP%-9^1**33~f`S*&NCvL~|4hlCylQ@_s6PuK~T>;!bsH zR^d*P#=lQdRhi=D5x(O0Evwr{l8i|*jM>%2Y^M38C1l`X2Id{hR`!q%GN?0_?$uLN zt(G&M-n6Y2UB(ylodCLKZQH`&2h5_ZwA4q4w<2PxYA{q-6 zCC3-t{b z;OjM+!15^ic^8@L8a_Hz7G-0tUwA71HmmwlbnBK)h#2QUYpcoDXq*740P2b#Bw1SM z8{VK?#rN*6^wY1e#AC%hJlBfd1)jfD{q~M{YPwxnJNH2R)_*Mq=1NQFUIJ4J!KV~z z_q@7MJr06>H?BVOfAy!P?d^sz8=>sF_SGy?s?W97VvU$PRc-Y?Y2QuW)WnzE=_B1H z0pV#yCB-Sd3_!$79&5L zdOVtI{v+v!+kk8|o5k17AHIp_9&RmZ{`pfE7<_p-)k5uL^_1pP*za@t=Z}shHss|U zT7JKJ>cD-odt&VhXLeDW{G*O4`(^mg7q9*k@~%4pkd7?Jb9qSpY~$^#pq#n5`wYAh z9C;xEAP~{<$rJ^~gWTKJ=#mDyOVRpKZ7I-PWD}Cl_nvwA;e@Vi@ORu6k~J0{15VQy zaSq=Z*LRDA3cK%8EGFH8dB8;gqbRHHOSP8U#4?}v74rcv!(dZj7J18@HO25N%y z+yoPVVioLYwLnI85g4cvrXR=UZfzs^v=1lGAfarS!}B3N*w{c=po5+7ORFGPP?zKs zR)J}TK(Eb!URuF=8)8sLI8?G0>V{(TAR#+!3?#+6QcP-%tiM4Dl(IavR$aQ`67I!V z_DdYrdNEieOU%j@g<;u7Cg}vU7M#A$pmKMak9v4wA z8PjZBRxe+}w{+t&Kbc8aUe%tmWAmteL{7oJqmby6qfN`@gq&v0lI`cbnY`myMaFoTW{yVIq(5SsI*y&XdKs8uY?P zuW_5y$2X^3Q{3k2C0$ALx}W7Jph$*j^tDaXAgP6p|TcdiF`IRLdDiGkN-8VWJ{znTA zpxW%Sp=F@q;oP%JY1NEL7CHaXx*CWW0QB(^E+EMRY^q50&S3I|vGOBkenmw|yWDI9 zkgLJX$Yh6_x2rlL$L69~)^YZLCq5&u9*8|92h(r-y9>y^ z6WMv;;$su}k#=@&=VdD{uwjZ7ZkX%aPj~dW(XfbtfqX6zhO*+YzA*K9^kQ?xtaBBM zzoeHbVw|>TO_^z>XB+2{?AC(_Tf%W0%{+0C$Ps#k6rK@Pk;j@GfKp|Q^+5s!6JUhL z!$cm`!5An464n5y(2w{%uz+Q}Jt-$31dtg?uttn0og_yKegswDI<}g= z-FGJz%N&vMC;rv3#0!llLuqp2EK<=O{X5G6uZ-0U>Z^_2vam-A?D zkP3XW_C$cT;`FSY${|!cv4&r?q99KZ2se~8fXhgSGj-Uci7OvU8T&@qTZvz^Jau{P0R<4X0gm|AK^XI(%i zVGyc~RI$+zDnJeMVA#^(E7uzb04919Zf|$ZP-(~pt)eDnaCeyTC7er`!d{E+wBh#a z$3Hm{7$ua64gx|8G+eCkq1G0l&=wj=)n*-nYnXjAwG=lpKO=5ueGkGAVZMcq_0PWE zab9w7zm>3i_nzjxb8AT_k2&>!-aY?KG0+3v{3WW-VunQ{ouYZ|<1uGErMD}QCoFBR{U!L!*qZb^3%y;2< z&3o@wQP>ms>RHvPUyEN1D~tHH=H5$*#d?j`H-zUr*#5*lCRrh0jC?0uTp%4=plVBP z*5}8<`;2(tWCo>QNkz@P&X}Sh(-#TnsUkIn=Q#&J1i~nUu!||8oGy^zT3JbGicb>` zmKkr&yWkH=GSJ1aF(r#iUWL6Z31?+@%&wI5WV=s>grTf!E$s;*_aWl3Wfn&OuS3t=IdZ0vB(J zK-grx4S5-m_}kY71crElZ=!&e5@7b~fFgw0w1?B(Z5I$#OY~hWC<{?n>0ez^&QDJW92f()P4oz(xH|mh+C-^&S~P zXk@i`kDn^sZ>5d{3S{`133zbz$#4Wl*nxC6lpasyTuKM7{_KE{P#8m1(9c=mahFL^ zS-yF+h_VvheK^v#7>}j{sK`2fGOMe%m02)uCi$_I4ewBtP7{rmgr5$vhtz3=OnCVo zfp}cce{}PBt5-E~E?mlMLxlts1$!n}{m9ZxeRu$9rtZdnMyn!*BvN-iT)psSaoyWnZP)BDyXF{Ld;ivx_OBm=8g5m-*-i*+yR;dIJGvzOH15As zhDQ}`=~9q$I5&U^0p#%?9YnuKM^alLp>i-r;2HtC4r-|W{SXi?aya|?pnaU`tQC+K2u%q7J}Y=ZT~kt|6d_W^S=%LKNtlFzX8^He=Bex z0V4Q-2_h8%AUff5a0x^xiVm&`uaCfG`A&5p;A-7uG4)gA!~clo$e995d$zaYc5zAs zI=DyyJfKrS>D2_ik^(p6-ngyj2M zRc~M+w!KQCey$MNcQmvv#y3LI-Kv*Wh&Q1-)sc-wHA!p&Rhf2IxkZkcuq!B-8TExQ zF^d$!FquzaxB_QY8<;FUSj!_f28dy-EBMjzB2X0XyLrFkzm}To?eyav-q}37(wt#Z z!tAD1tV%N{dxSq|G9;6_-)iRl*B^iT_T$UmEwdb{48<|yChJkZV z6JJM@;@nfIdf(eVYE5^}oU)jj`pVQRy!f5->yei)xJsV%>rah;|8i9u`_%l2Qv09i zlZuL~0gLkr-R&~<^z5Azp}xEW&n3`<4xM)B4n2lg%9gyXq7hy(eJ zGc5Gei?@I7JHYEgJ#+yl3KQ(wau@6x1Cozy{Zd*9QM%S2e)G*hQp9bLTNT%`-d(a$ z){Vbx;53z_(>q}VUJqnxlAK!XEAH(4g~Ixt6~iqLKc3@*DOyc#q@-gh!=?0{5 z6_9t9hiD#6;rwM4`6-e!I3c1%iR)S#%7eFvYNaQm0tbwF$b9+YuL7&^OZe}*dX#@w^V)UNVT!Kb?(mm zez5ZGt)W(}*=;5FDL$;KM#!Y}2m2((d`+=q(G;722fX85D_F7M+_ANG+fXBv5aZjA z>N}LkI|6JMz|hI5vBl0u*A&10{ylb#2qXc2Gr8&{QGt2i4sY%Yr}9a2`W(@3PI~tY z3JCrp1o*CZ&+Rn?zGP1H?132j+d71P+sagx&;YF9~Bs2 z_f6S&wT$!XJKM0$eS+9SkqmUT}+Ghp6z8`@HJu6m^tw6O#x7B{xTA2Zk89z|1^ws_PG9p3-ui)$1FF3P zgGziqRL){Ful#wxt$A>LavB30-MRbl$Gy?|httJ^C(q}x z)jM2gA&VE-`4>l@LUo#-ZE$g4D+eCCpWx{)%^mYLdE)~C$gT0RfGIFPEUnNd3XpEN zDgqO2KwiMJ(0m9$g%f}zPF_4fSpevyE|o3i!*AUrq% z9P_b~^}2LXOc{0-#hEf@p7_`5f<%Fpv>&j+Dpp$&7_E>2=CI7{DsJ zK-a$p#K)-!*Y7n7uElT~LV6p~7*by}cS#QbI-v@1TZ3T}b6oR;yhJ1HWTH9m z%Yt*UV5E^z{){;}PVaaS^Q8Q=tQ1_$cmRk?PO}u1LSnogle&ar&AW-?CC9_pQN~iM zwccKOdX%$Q19~ZGS&sUzPnx{ffa$T^kNOCEDRnRHNVhgDyCcslwzOrP+41^daeOD+ z=*%vI@#0103$8yrHGSp{Hd%xjcW$!d2=8!piGU`QkbnJyU@O7!grTE(H`d(?P@0pa z=kZlP0s`Qtz-2Sc%j5+j!O(Hsmcg5ju%nPtDSuI`!XtI^g)Fx5M^gz9AortP znB~Cfm9gg+C8o;t`0kzJy}A?h{WmzB^faLO$?&c9hTG+=RNnTYD9=o8%Y&00U?3&Q zZ^8f5)Pki-yJ1LjuQkFX!C>4#+`>4r%a?A`bw40?Bhy_#G@6w^AlV&R5l$C~2$%HB zDc|<=5wJq70OJgC5hx#uERBn&V^zx3*sLew%~jQv2#XT&_aNpT{(MRL$Z)qSQb~#x zhRNkxn&g>cAKkjsVS+Yvm?M`prch4#tXJ{j{15?;SB@M_!d9e(L`iMS)G>n4YGRb_ zp{N^f>T!kfq=w~^%lA$E{3e+*fAQ8vebB>Y9+w9Qh<}&DAUpld_}!Bt z(JuOAJUe|k^!nyrL`Q}q4IImp4bUj~&97IVKjn+uc2A|b-J6-kAc!A$XDxweK3v5< zsD5&VLZy|@2vqPt@}yJm)M0?WEp|VYWA^Qyn7&5&n)GF%|HG0X&`q z##?V$%eSt1=l1B1&8yz`XJ4?t^Q16m>q_FBctyVIeN*be-mXuI!?n`yamBBn$g$5W zP}F^zw+tKXh0u@edXX}AXhrfHUWsOd>T{p3f}%}$A-0E}0j?U%E05K|Hw@-m_ zu{n;nbag})?ew0KL03#tUFk3=Ljn*3{vZpmri49FPcLbD8v!Y*W!BB_m|Uq^55&6_ z#~Svf)H#Q<_@lzgr6kjEGLScKpGk|z47%0EoBxpbM(VfK`##S2&o4;n_?^GUZ@=fu z*4%==I-$So`)tr^e@mD#eD~{-(Gv%Yh+e+yDIpe4q*GH0f8;xSws-ES2eGx?fxY^p zv?Y;rhasDE?UDCgE=0$F8)?z2x?net(%Ec)vfT*VJwE$|HL$PK-6N5`kL8XMFTRCyqGv zAlQ6}x-Tc^Fj^@EK6^-P#2*688>v9MiDG^vfg(h$Q0eREcP{yx0mdZ8n*VI3G+5L- zHWIka$A6uvw6x=w10n=@Db^(TdsH)fjjD?S5q<(hb^=mx1y_&kWM8zl zM*{0zywoidscnWXutC343o6RPAQA0786EZR&+%c4xJUf_v^g6yw>)m+%mD^xgu^Rx zl}v2TEotKSa*a0~eqmZQ>sKtYnq~Se9-Iegjt=~SfeYdo_}Wa?LeddV4rPnis&{Hl z!gzcsKR9*6TS0DYw^#CQ*95YKvu0q zlgdb4{&MlpZ%+uPOvHE70O5|A`x2EY=6MejxoxxB453OF#S{^M+^8iD_E$RB z#j=rIx)c7^ww#i*)g`>k1H*gouSLwdvIajshA=+XtmT@W0@$>iDJK$r$+dTQ z@dHH8QhOqJYMTdW8!>Ai)-fO`!$)K;?8Wo2xxs|57+}){lE)0-Zi~ka8d+P5r_PYn z&@3W56JoF>8}JD9+;d?WSi=YN)@7&HER#tS1O#TnpgriZPKcuF`=^g1{{Vq&mnAOW zr&#NJF`%yog7{^2)fovII!=XJU>ASgU_0QU*}Rmw9e1_~e() zrVsgkrPU~6=epg~NiQECWVD=7ILiaWjpTd@Ry7go>U!w-8Qi7IG6P1ieCW~$bCFY+Q{kk`gLjcY2l3{UfEyYev>C- zc?K68Ll>={Ibk;AqS*)v_9FOfB!IteS;_&V*Kdq3907cgsh`ceB*p-sPSj#+mILas zAb|rqC|DsHf<&sTwdR6U;)4B1cmw)_!`V@8wd!$OP!lM#b&}A`vhlyb4G`(Bp0co{ zvktYl-qcisG{0vpf^hjvMB5F%miOaEUc#AliFxN3?GOL@sgcF#RJE@YV^6v5vqQl5 z4dfxo)mGZ&uA9|v{NFW?FJ>${IvGhO^4PAO*t;Iyoha_;EZ0|(Slo{H+?Zze5|N1O zPbJ?#6IdJs^lC3g5*h{R6U$g5V4hm`I8u4KfYYd9UA&Y58!|$Jo0DN}6 zCE;GUT|S_3X^IQ2B8B?qo9C{ztPu!n0)EDoKVIcDxjM4@sQb@v*JX2>?a1#Fya?bF ze&gp=?=SDWpNx=nVKwHNGmZmwHMI z>??A9^L@2+*mn~re_k~&q2h8hg}V}`w3Z7pb>+APk@m z0AXZ!b^+oULUw}l*!WtA69UmRO7yh zwr@~}7zAf!SP_mhjQLS?S3w5R5O7&g&>;kzdx#sPxg2Q8iDMWp*n?C$+GuZu*?M$FXw{M{E*qDDSAbdf25qan_^Ab+SAkEQ47b(Z23h>?vZ}w?^S6 z5{acx%NYHJHx7A?kgAZ--=@`8ZuTlcFEYNv%Qq$^jRgP#e!fYE!jouo9lS&)iqWx( z#)%MExDQ6QZ`v2Di;`tF<;ll?B%paO`LM6e6Jn6=?#K&z_v+AoFdq9iXY1w41>x;* zUCcyStX|548EY};1*s#YQpv3%MFJe*$P`&!YSD+3)|Gj3ir{}YQwqmU?uq6xQUS-M z?fv2Vzl{%0t)46|xv{*kw*Snw?NLm(zO04C85j05`Z+DyMkjAmpM~6pU2qOcjyZ40 z621sQiAq*@0pCxNnE%Cd1I$2@mE`)~%PV^jcZUE2!0H$DF{G`a2_3pLPv^41gxMHN zAA$4w>6+tVE>A{W?@4gxysbA)yz^v4DMx}MN5rXE52;((jjM-pDEOd71r^&dluE26>%Fz z6{BoUNzxLy-vnbgfLc{rZ#^}jw-Esf?D6nwDx?k}Itx06_t4=@E*uRQgxIEhwJB;< z4`G9ENpAOGAft5iuenOm(6aO-8+)8ZKGs}Xv==%J&hzuIX!6o=DbF`a!4tXBMQM}= zSPiib4P1FXke3P}@Waxv3y#hv74?@E*@JHiZ$|8^^a#+3u1EU{AXFk=J?ww(bf!n{ z^Ph%OYSGc5GJv^C!=cfeZ&pGzjz$N;sujGW2N^YRM*cZ_)uxX>r{TuK6K(bWrqOPf znCaQ2_?Azd7vCD0+lk%(gX%cQ7J>vBsZD(_*%%ZIJX;X-7~$DEPGL) z&Jf!U)}()#c3C{X$XgWu6Bfj4BH^J7FadclryuP@T%ERsk~am>gc(7h+haZ{kF5(o zvcT$p&EDiryA01*kH9d-O>0(s5qG-VqN*?5cUFBK(N;h^!kzAhus=>i7;+6EC0SR} z3{L{p_66I%m$;gH2{fFJ|B3#jUKTHyd79 zs@#&(sZUR6ko&dZK_4;OGnY$%D07=X>o!jXmcH@YwrH5Do!t9=;%W@pTfFupogV&M zCKa-NlOG(T9K!Kh=>mWJfS>gML1JM-t`Q2vrzAyT-Q$zuxfr)*l;bJM^I@<1C-saC zT^_!L|MQa)DNAc#36a%?}~f%d<&20P`v2^ zKSUQ5=B5o7pXUMV9wb{eR2It4MdWQ|Tf#?*!H|P^loff}l`|Y!0q`HEvpVv~VR&61 zGQFx#glZN#U{;$?PJ4wE)XWQFKskR~bC2^;nP))yD*E9|)98X6v03k9CR zAI|PWkk6>;D74;qp%H)l=7kD;8_*H7C2%h0%ZU4{jzzwQZSv|7FXwhneh|FfqZ0GE zJZn&kd)2X0;Fq|7xp&INS9ibfv^OZH<_j`SZjqn@j{ETdcq>Yo=$Q3|W%5lZeFX4nf^(-GC%(x&jqY%NE~4+y~;&DzM4y zG;%!vkDzAM_(@gj7SgeH?hFk;%-vOFojqPRzT=&iM#XjFkjlpe3eiz<5#n(4vttjG zb(+01rGToar^csXZKyw=O0bcQQ8N4UR4P?Y@f+f^n8jhTYA9>NXXx@i#CGSjDmi&~ zFlYL!LUn3KONNxMt-`(j{@2HbmoNT&u>ZWJO>QblZ0YIf4&VCYThGdgG5Pospxst% zN}1DqBfUOtv{L;yjT5#zV(_1hXH>pt1i0F$i~V6BH=}bd2PfTU0|5jdyF3QFG1vW; zK*_`q8WTJ)AYKYiO9*;6)j|w^BRHCt_wZKbGy`b%7dhL?Gb< zml|ifYEd+6Rp!~mX+~_h^$e@mG{s7?T!rbl?#Y&62=E?x7Vc;rX@!BR4jM};F)@Wz zNr~w8>B+9mJX}gyQj(e_DxD`V=B+;v_?{?2BvP+x6?*CUk+RN%nasq*5&xsCbR@_O zCFqhi?G27O)>V|QFY>J)I?iw(L*0PoWMGtb`#a|1X zZ|lkzg3j2_yck(jP|;S%jJic!JQW`td>Yw-1FgJU01`kd`0?&n5X4LhR4>9L`|xHW12icJp!0K0ktZbl zeSIxO$0R=D2|!eLcINua zy#V)2e(yf`X-<(orRS}YBQ^%tX!H{@(%TpW$!;M70<+@4Lzh{ zT=W~R=Pv;=GWG*>l36}EOfYN5u*f>kW_C%}9LBwHZWvJF|w*P-}34A;&-(}Vr_q_<@5j4*SnuXMjwcE!N$u)W7nH%a81 zuoknTbJMS^03yFxFhAP$X6$8aOJR+VOoPD3k-^YE==%#=Kb(I5M$Ze!hVB0Or0KSe z-EFYxl31GC%zqfQV`OFPVO(;r!0(h5|_SW z!SMF;Y%K7SjX`|0pk=NAE>s77ZKj!ufgj6 z56U!KT|*PU8n-+;+)Fi(%iLDcu*#&V8ffAgHfHiuDU)fs&DX@|`;0Tx-Wd_kb7ME1 zFg4)N3&9GJBU0kA6X0lJ#(KUBY9$M5@KYdemHy+-9pjNg?AEdIHs|8-fQnFHK8un0 zjn0fu0!(uOPFM1q#tzmLwKoxC)j1#r>*~Uipl`97WCkE+i6#W)lt1qB%#$wn$nD zX!*hm$I7?p&rxr}1s1K)Z#!&fi#@lsKmY>_Z~-gYfB?NWAfb+#Y^SsqqYZB@~F)GsJbV?riMD#^MlHRvtjN&iGj zXtPdEl@_G$b<3y5f{(Fhwx9GD7tZhTO#NCab@jWwzTh15v-QDDJ6~(+AKZxVdyL`C z;W^pf1yVqrU_R_>_Q6Q-?pDdi_a}1*Wu+hleDLS&pJxYEFJCXLwJihm79d(hoWvDZ zAi&@RI=Dq5*dZd$)G^?UQ|KCwbCX2)JfEm*WPk?XjYDSvB1-(e?ki+RQ%GD34^tS> zkuDBLT;?k}uj(e8?q(#qHBdx%3)Rg)cuvdd=QdIQ8=H7??ZVXK+1WEe;M&_&@}2I{ zI9a$7k1z?h+iNEBFL*a~lB#G8d~Im)PA}0beyHFQOVb(OLnY2T7e!beg*8U@z6M(< zwO!+0)&x#n8iWll@6K_e!Dxbg=$j0G075IU#x`%iE5cLOr@*~Vi-Nf$-4wAxS@!I{v~NC zvdMmdwsLXN8t|EeU2tH!{n9MZCvH3QAT0LA;R{(wgUiXrBey?3A_crWX>vLGxb~g8 znDXyqr;ho23}CwMH!h!4b(ynGOZhMXRTy_n-I#KV(y{I~m+*KPQ|b8JapTW%vaUE; zQ=+Z%*}l&w3o+2qVw)3yXO@b+b%KhD1@sgnfQw=%!fYiM{TFQ)>IwrGf$ZgRb9ZoL zuDlJ^xQ$nLk6(1O0qCzdnK?Q6A6i{FyPI>6{|{Z@`A3iX9}dGm(dp}#@;`7On&1!G zH$)udAKU`D41OSwA@m?Z_=zCFMvL3>cddB8q4d{CvwNJ;z0!tLE?IeLL4NrIflFUC zZ+f`y-H*}=%8~$M#x&0V%xFIvl*q>2TgtUy|V=Jz#|2N>^k+p1zRL~XWDtEpu!I6g-- z!il^$u%aq?)+9Dasgboo2eizHih{*e7!pJ=^GR%V22j*Mcpr4d%FwVJX@@Fq=d!C& zyQ6+Xj-k*Ub}lekify@%JAcJ7VT@PyziN1)a^ME4?Ps z&R^S8e&1=hcG4>Rsz~>T>RkOZms5wIb;7fihew&Tif>i}->;*xy+~6!^1J7ki$VF} zeLwWmDF3ocf`-=LNvw*@R)JH$tk>BRptk^a={`U*ENDj<0K__;pL#Q{Sd;V0Y9)F0 zVz2c&s`<1Ns$*=d*2~ou3fvyFV{n#3WC{e^2G_|dFM_GD7EqbdYm1qOQ(p?Y;ReQr&L z`6IZ`=V=Uanter^(jk`F9qu4PV}06;)bS6p{*GNER9n zrZ1Qvo|}IC?UrG8Ox1COl+~cNq)$n@9C%D=-8Y*3zulg*3pv_qYCpb(SNd-|y!?C> zqH4b4B+k0L4Se4`=CO`$imj z1*3OGB+EV5j4o`OXFpWzGM1fgzM_5qW#h;QvGcv`z=-KQ$nkiI(pD*^EH3gsk}0V5 z5LDW%N|oVlDQHG_@$MH1+3 zT7HEc%p`lZo;bh<;V8;-1MZVqX1FMOb4^6eI>q)(mZNbL3@Q<%Wquf=c8bat2X)k!D1$EQq}Ar+ofF2a_%bnFVAD=f#A_b>&Wkxd`m5G3=jq zoGq3*Ykpu+2!j2$6>CAhTJ0ZTy~*R{i$~)?N2H}qg+qW0Te70@pIxddAZUi>1js%) z&xUKNb+i+LqZ4vW3@$Bi{GRkxH$0yki$pynOM-IK5ilJpV!VB1%eX|^Bk7pr^-tfp z0fNTsR^D1I{=M5H*%zsiY95v#mP3%`mY!@~*!Xhw!SDSAKF_x_dFQDz_PRRxU^qUS3G%aGOSI?4S!M~PwBxeD-9t|QxX=f(DI&XzkEyCd5dli)>NFj{1hHe+7~S#p<3z_|gG*%Raf|jTaPGb@Tn@M74*{Ms1sK z{%foGlCd?I@~4JE%@UcJ-$SVODg5p#UZ`^7)BcB-mtNUVPLHRqLe`FV^0YLqEkMi7#Gk(xuV61 zhA?a@kx;9ey7NV!396zHQzm)C@b1Z^fhQig3m!Jjx7_oPwUEr*bjZBzyB2JIiIuuT z3P$Z1Xcs!U%jhr}@Dr^<(7~O|5?i)q)PJaM`9|tk})wTzN&Gz~tLnrG9eE z)ZblY+vArd>uTy>Ome6t)@OU_G`G6MrTNK~l^HVBkZkT;M|ADu%J>5Sv}#-iMdY+S zeA=o5j9j%84`4$I<=mBqLsacd4}tINk4Iqyl+}yZI@F=$cXtg)Dn`fAC;TpPkwvg% zKaub)y~kjG$A*rZiNrX2vRo|8VySkq7sC^n1b@gBmfuvjOHD61LYF?OVsDP+Ae^VG zV<(V!2f3CbEX%f5vPtiylqgN06!g1zUlTXr^r5>nyGBQKFyq*rQ);TMqo;3xw1;cd zOc5(fp7t6}&CC3}*Ci{pa~1@AfKxBTLQ6g_bA?UOPkB8Fl^Yp}j}B5tf+a}+0K4r; zPUJG~TA?McHQX}?3w$QE(Z0MOhV3Ym3ixnS0MSTM2pn$j=yEjKvre%066l6FKLWc< z;E`M!#&P8E6?qedue&-{ef|b6K1YYotxk`Q`kUD@!aUN{R{I0z3Aan#q`jY_-%Qi-3 z^LH*Hb?13ryJv0K6zZh@t^bZ*3xJ#?ACSuFYlbbA7dxY?Y=(bS1Jpa_23S` z1>hpNlhg^on+p-TR02SOBjJk#2--hx$KG(2KQ5+Pd~n? zS-Q8uok#PZXxQ;(h8Ul|$8Zh4No&eKLYZrEdM=f5YST|Ff}AgQy+ecD!sk&WJ?%4*oKhQ9%$;voKIt0a zX;73P{w|NUW?g0#%xP&p;khoEa*-*L5;8kfm0Lp*Ruz1S%E#4xl#X!iN`gzKYU~(i z5p7$-6)kMu5SgrL8@W1)o>FKgq&Dm-FGpUUfSjpcl71?9D`wB9DVsWQFR7>~M?+{n zlC)oJ)eq)LuT4)bZtAnm1N5SK=ZWCObBhLazyywpbbF%l<8c|-Vor!K34QoYkH$bv zBW}fBC<0h!3IZCTjErMj4-U{-FpaVZw=mj{0Kmvue-SWc^73XP?X+DEY0labY#tbP zo&GCD3E9}aJ+{;Qh#kHxy-rK8tX+N7gqboW+YpNgzSe1O@*0M`V!IJd`C zb$NW#oH=`0K^#YT7^V~6XA=-b;n!Up(st^?G8|>Ed5AhT7oZ&D7_s6=xtDCPst_i2 zp8LC=J_D_RdAmlGbuX-|aFA6CXJts!PnS%SrA!4PjEOWT>YlM(eAy)0C#o0*lP^P? z9MO_~s@F^eB^R<&Ge+YGtib4hh~^)5(m2;VXuFB5==>7-75nKaLZ+pSn!${nO zf`))WF@m1mxWXQE-y#CShswno9@c4|c9e0pHrbVZU zYjp#5el6#!UwRV6N>Vhb6RNN|aP(a*!TfQ&^qwnMYXj=YTtlxx!D zH(hK~txn&DwN@cirkn6ik|)X2$6PR~PNA|qn+OP+mpqk_9a_l^4=*!jhkkHooX6}? znWl?Nr@4irMUH+fh<{7I59_Y6RNs#q%=H$oVQqN4hAz|gp-VJd4FguGnACOP2&MwlmHJC zJgSgWVzBA0e*$~z-t4*&pQqSRId<0(D_2I(j8t^t->jChaZhdMbbp--OVPdZNHCaU zB5wHUtc!|Un~KoXU0wrR`XymxK)xNiuqDfbJBjqNm>M_J}Ty(|mbXga}*#KXJt zx9d<`jW4{{(})NIOY5TYbfp*0Jzwx%)0bsq0CZF?l|UI5VK+U!MYC$#=Q^Z@R9;FV2^GVZ|pAmkwW;3fz< z1cDNZ@PoXAtfnhRtD5o;;yI~TFitZ9ES6) z>6ju~B$Od58O`rnO;-d6Rpw0bZ5)$TO|n+TPWX@e7L9%3aOLlCj6??@@;s>~PJH;u z1QJfvLr@P%;HAjc^Oo6Tc$q*ie6!VRZ<1nQ1K?bZUv@#x69%lFklB@8<0Cpb1~XL) zZNzaH^OF{r7kk2QNE7*LJ)+e^-dPg-RY!9#k6!y*9DD^Q`>9@ZL#O?2S@Z+1|6J#v zKbuN|#E2+8Q&Jz4_&%loqR~nE;jO{rSF-ULS#IY_8QL+~y}^I(!`0@20Zs}-5x0`Q z7vP&WP3`uNClN3LMG(fhIwk_};WDZh?-+p%NO4JnkpCOeM@YIky@RbkT*6IA6%JCz zpET-nsLcQL98L^aB(NEguV)h-#Qtn+jzgMgd+)5mMz$#g zY8p~F!myJM|C*CKCPyl zQl$sg9Nw_A@&z;KdFqI#Gm5EwVq{rY)Bw5+I<&5AmoK@ABa;$q4@>ji;zhVweKUI_ zTOx73BIVW4Y_!O^?5yZ!$E(_F@9}+@I7IK?O5g0cjfXtkHqTwD1dK_4HT zS7sO~dm`OcS!NT__9#{_fW05vDgluC>~YH|J@r`4*yEIRInGrt)j95hFW?Rr2^o@* zO4WS_F+XIq_24dZobEyf0U>IoUnQ>=m*+=lc8*+yS8*C>d*qYMNV~@e7xFk19{UKf zkzbmg*<{=Qls0}HB){lyF{r0vc}%ljZSjPb2Mf!j8_A-1Do9W3YWEX_t09-A4L$DLATzK@fSf(pXQOHKPLmH^d?vWj@SE>UJ-p{FhEfWjWptod*gYtldatpnOOkE%zv9AjDz z8OWGl(){K~sl>^p=I!=g2eD$e?DY#J1lI3dW5#tw^K|iERls$3bL5+=C(rVpkzG;D zo@)p3Nl3b14)Z4&V8@s0>zEN*rSo-S1JzSLQ>$n+79GBKV%IQN&5*AeNEO?_JYY@) zNdNj1!`V0Bh2OZKdLL9Fs=wXuRVeF*1{Fk@k=V^&>Ui$8^r!mH)nC*TH*Drj+2wRbI=d0hi&t4_()4&HAwIJozYj z$JJ`*cDD>Tl$X}bT4FTYX#fkarRBR#SbKsrRB)5;&a+y!>yI)UTODg6d94=;rj*?`{ic^Pv1XnrJ*0~`m6h>xc# zKs&?V(_k0E=kC97NGvUsOyT@vwmVe2(>3>R7irDzI3XG{W-`>Y#q0b{bNq~?n+?U8 z?5FZJQ=_zoLTRTq>A-Wz^P1MyR&yancPT9rb&fSV#D-%!;H;{mBl%Tv0q=G+%(zJ& z=NpJ>!lLHNp(jD2-OW2LL1eGmbMvM^8owO?ZB}gusU?`|!?pSznZj6vI2vDpKuJ#> zZJsuZz&RStT6)q(0(hg^nV(Rrv~09Ri2X@HZ+3;pZKXnz&tVmfU1PU9(njP3ItbJC zIyR?r7u=%IqIv#ZNUBmdsA^o5rqQE%e$PK7=3ypY5CqIUM{6}ap1s{d-AV!6&-dhU z<`tV|y&U>j3WKp}w_1hS;`qMEbchz|OfT+MsJAl=3^>WU^(a5nZmmDj&a^(zf#~ z>tKDnTm1>mp_DW=5J@+$jATtF_vfe}@#{wMScPdG2qjzkH$MzMtZq%0zFH)DSz)C? zIIw@pBRet3IIa&;m5L8sV3{@GYuzbE=ud1r2aX)DOIy_%@G)dmKF$ev=n zFH%F`;3OO{2J8WgqaoY8k|Z`94H|wuF@Y!j;<%vP1$i~)`^IE|Nd1S@@~z$3*rN&R z&745WDWJyD>c$vsluTGx{|2Xlp=qXfvf}T-c zoFycdp=Ok;ZszY=zWAd3cQMHIESo2OqoEZ%8^q1{jE(dR-(mOEvat7wjRD^0Dzic* zo_4V7(T=~YL_e`hkq`u?c=w2MP<9_qFBcPt9JFQ&XJ0vMA8*bVmg-#Ag3)DKya$-v z&sh{Bca0XAh7=&N!HAe(rUt}=X9(VQi9(8$mM+32Ru_)9>L!bNyU5?gsh?FK?H3Db zQtjvH+&!@Lp1j8Z6*ULqGqoZd=#<%fyIg|e0C)G1#@kk+h_HwEgU*UyNa9!d=fSa{ zf#c)fE{|Q<54->Nrqe3#Rp-`>W%*YPIft3rqqm4=OtH6c&xYW=Z+CS`HZlq!1EH0> zN>^dZ>A}zhbzm#~;p<()8+)6F+>r=kpcV#Rz9<6ss^f!uB_@Po%e!oBoRO6S%0|M# z-;3j*Vrh}72S{7XzrtTgK4xGH?_ACafGJnxbNbzW>3E%YPb?^!Q&Hjfl8=qK`rMC) z0wjQy`f=j->fgm@^sAX^r{=t8UkCJVhkmZ4f3*_>5nwJOd zsPbWCJ12=XUZl00tE2}!lT;o`coVExTgr6z;0;tD;Pj%xJ6HhRiHK(9*?Qthh!i;iL_(4(9C(T-fK9T6F6pT?5?ddfC>C|51-eQm%6x%;z8 z#{xxdDr`oE_sPb^MYTgWqZUO*6_R%hq^WfnHY97FF%BwiNaFLX8w54A$;+p*I9|g3 zX>J@BaYxRe4Vv&MNx;#wVbBz*P|M#iMjLc2vjy0~Adrl`D&9Q3xt%7L1&V%9wAG#EdK@DFY|C3NrZ#q zQxQBL=xOeA_lt*p0Zn7iBc2fpL8q+6sBplHVQ$)gaBIH06p9E6dLt!k~rTr7|P@CZ&E&i^3vjWeB?BIIqIG2Ur=ltgrlS=IGD8RK$9 z++aXuDnObOVwrf&Wk&qSht&7l)@y!Vd+x0Z?)I28fwpRs8y%66>_?ibEPp$)?La_) zYv|Goe#jSlUUod`9?K{(;~4juJg+<934PcILc(IDDIvIYcOFxTp;$_8mw^E#Q6O@g>sSd6{RXl zf;d=b-~1XWLn{f)8NFP^HJIGwBGA*?EzX>baLf$VF{e`8!s6KdEuMCeaU=Bd8i(5e zBw3Dv1y{6sQ~(8rO)5A+nBm7!2@vbaUd@k{-_k@XEu;qxkU1WNJyo>uEeeU>9B&Mb z?djmita{7UPghR!x`SjkV(!^Hp$#Z zl7jV4;^(=&r4s2f-_QTN6vabaiW<6G)HboD*4Xl zw{UfZMGmlJzv&U4A*54)IAuVBZy-naobkQS;prJ_P0luCG}VnODCZ$lwEh{2r&DNf z5N=jaN>FccHfBTmt8r;CzXmF;82kGhw4!2C4ibk$5ETvDjT7x6U4{7TJLh#j@)$rC zBHW+DyH%U{bX53kyGOQpY~I;eSqV$pfm|oeyUf++#=BeF4>!fAg<1>!Trd73(<>B) z8tYZ1(ALIlwzSsfeVz%N2~=nMuLB=t%SKM}jZYbH-ze=IO1(+sO9XKQR8MBUE=jm; zVFFzT6<+?f9>9REYm8R4uch?n%3JA*_>tz`l@hSpd_gQG=h zY3ct05I+A0Kybhw;Gdheju;O75XNCWTsTPPC{4y4WN_3RVh%1nz9fMQ1@J5EzB$z+ zVqE4tafg@fg{tI#2ph|aQi_Y*MN$r1pYXA_4z%CPmy9)6lV_R?4Hn$9c;g;)Y-Pp_ zc_HZZi!+6-x~-#&MPt6(E)2d+c*qq)O(=;+Umrpz&ms&erV?D40pJ`Et z#Lwk`K_v1~m4LP?cENCtb*yzE8UKx)2((phU7EeV=Ez%`3+?FB*#y!PQ65VIj;zVN zF}m!OgI0N^*j83Gg(j(aD#2JOyvZxRT6iB)iQvHrqfer8l6jhPjbiTkkmchZO!`7_ z7uFHUq0@Hwe;nO_KS_v-hT9d*-Q81d-)kVFAF*1%xc&%ooE9pyQxt31P%S9tr=D5n z@-Z6!VV{TXaT_2(Y<)}|6-_On6H{3zac1EXN9ZWK34}|rP5^?8q2fm2P}*bC67cOe zX-ON1Oh@$z@YV%E77wH$uf4F%rR~E;%-;^upG;OUq`*fGIe8LLI7sLPg0HgBgW8v! zRwf^m;8RhO#os{>!jJui13ip0S`S=bzdIR9H z;woo=MVOF;w@DoP5{2~YqC9!mKK?on?szRn2=ObT-QHs>6r=;qsp#Q{R`57v=Q8GB z%X>y4Q_HnNGLxX6Fdn~sJ{ku4h@UgC{ejjuj9R_#^TFT2u1fphtVSS8BU92Lf#bI>F~0`fx^&?Jq|>^)g$pR+l!1}lrsyed<|k+7 z+3;Hh7l>nkdxNz^zj_NUKN0E;@Z#e{04Q;=B?|_ShA(BdZ}!%fo8qtQO7p_31g@cTc$5J?=i-kiO)XgKt#9 zeGS{~;sO%M2DD9#=%Ye?LN7~*y_U9WRa9(Q6YvFnirWZ!?I-tQIv3o4TGSIar;Y*kT=F6z+&;3{$k-C*btKH^I~M#-20zrg)M^dWsCt&7@k*+-Lpvz+^FZZO<%are znBx&37gydIhO|1s4#rLD`O}bKeh#E)QzfGc;6O{w8A8&4+0VYK+s!7e&V5zkjwq## z5BDwAP5~t>i48J}zbK$A-$0XJL1(?RhIalRPS3?Zu`oEj~zRh`fOYiyx} z%fj{r$0n*VgGyF`-naDB$*N}^KFrfTb_U=2ISCghejGg4KRHQzO43LN7e|z`lv7)n zXX;l?Z=Pvztk6WC8v&;ZxeEnaA758|ydr z^IK+_L9r;)7D@F?ZZJ}H#Zx#QJ%CYKg6Q!yOa~})CmhMB1;@P>vMaA9Fl#je`vv4; z*cEei%tDJt$Z|2WKjBWOga+pJU~PSPeO`&SYkb`?Aq;x!o8 zyPm^c-QC?!woztr>E{FrZ~q(>E86t@b6o!k4>!R7!RWx`0i`3H=e_yYSJ3S(EM)-}4=Q8r$gW z?5g|UMSn|+G}m-7CN4wEtG!vPwz$1k$d*iwWg5d>n`owk+rv3vF{J>xK~B6Bp(pOd z^ILa13bbHJZsk0T*bonEI+f<0Vb=}?Od{kkxJNpkNJ0)}t`?RYR=ra-Inl%p@>}{ducui{2hD5sGCd$)Ze%#q@o9(*=i? z9+j7FqSMuIAIbB7ex43EHp#HIVkf#cg1 zxp2joQswlH0#vO&H#BfiY5i5-yb10#Z( zcFRP~=SS(@Mn2pu>t5qwZd_t2qQTIh8&9rQ9+Qp#}_(ZUiwIx2>V_{{G}0*}=O2t{^x{;HUXPrh*c zvjo~UuMh+n`V@p32@IP;)Q@ivpxgj@Va{w8Qp z5Dem-Q`{3qqj4?TGrA)^n||+IW5@+8D|7VGtQ}bZFry8z=vq%M9Luzh*>DUZw7zpR z;j?6Y+tjqxo2<6ho~w3_ti+d>hcw*YV^af~LO%R;6Ba)HPd}KM0y7RPwZoDNy&2b~ zjLm{nkA1ZOHjCR%9hrT0?f97Sn7mt3yQpgq<25QP8v$(;=%geep=oYQs=|uLE1+@N zBr?1~C8mbPEkwC9&F~ISt_sgy;7!R@CN)?uhTO}N)$3`PGSZX(jUUQPQ`F3r7qkJI zofCFl)(W7T71tjy(*;=i!mZ%ByG7Mz-`*MTX~jQZqGxx;tf`Ci`>bcNA`c zk{C~z*~9F`ZNf!l2A!w@ll_>cB!vI_|;1gK!dun82}>j2zQZlu$y&0Js8Ik%u;MnG$XS_@3ex|>=!)<;x@HEY%vfUOP# zC6~!4Uuq^tVb(lw#!9wAr(7*O#|quP)bNZf?i_1S7&xQb@!+@9*=&+Ut<)5!0YGbA znt1E&)EDj=6KuwtWF~gLVKz#nY_fKnEb)}-A$&L`?JHHgs8A3-d&>OOz>Ar#2ur(x zwxXYE%5lxk%Yw4AlLl%H5aEvssT2w^Kb7O%1w4wVJOURfHY|3=7}eT@6BPse?FhER z9qq)_n_R|z`awcQc`C9PG}&Cvy1+VF*rZ-DN&)0OrVH4Z)t9JJh4O3j0dv&Os6s%N zyiAwL?P|;39#B(LOcs65TEL=wO6`=RRp6q+F(&|FQ*Cxk`uzibezz12q=~8DA=FtH z0T6(5P-pJp$o>pHhG_BLK9babS@1hRm3-p^ly>RG-jWUsL7Bu8o~PXy-2%OEui>Nn zxc-t+B^|N^fIcHXflX`sdVe$Z<>(*n&PZnIwmD?u2nY^9YY+gY`D-Q22ipSxjf{f& zFi~VE6cA`ZV|r{XON`Rd((Q~pK?`E0JSAJ?ti&C#%5b(yu`Ej3fOJTAnnQq7w|T6Q zx?+KczFR@$@V}hYwQpFUt1CNmie#`E4C*rdOX61DxX|ov(5>-91`hepuNr1g>fU{H zU9{N$rGrw<_h!8NHY!{s$7;DtQBs4B;G7mG~42yQmT4tlj4hI0f8KgdnR{>6JmY116?cq z?rOe-tZnGsZWccqrPXMteG+%);CSh}MtkI2so};XDY5m5WvSYmt6lq5&Of^IcB=xD zp6a=7l_7;Rkt)9D{xHYuN7zNKT)*E-s;Jm~W7CE4TsF>0!mYTpPJ@%i&7|Vd zRGt!3R{U_E-&GN#hH|l`qFa*&3 z#Ys4|-+h{RpWacWO+`F;%Q^9ZYFHPaue!xsB1rPm;Gx3z-E9+BntD?sR+oM1hw{A~ zuP1&b>ih;Nm5HWPKL*qoDZ(TL{U})qdAaCw)As@h>?CUrJIG`ZXI2+M0i8+$0rpDA z(%gBOBx(fuqIlMHoZZwo+rx2qSPCHGFh=uWdk>VO8Y>H@is~;*Uy8H8gW)Y@OUK2g zR!1n+T3)Qdy|~-0t2QncOfI!&5JiKP4O#aDtmSr9a=`?zVy8T&xM@cFvd<~lM zzwROUfya^Geg@1XbtofJPQ&e1`Zs>_ha>WU>eV1m2y#?~Io$v7NA|k54sR3avv+L1 zCYzn4S$OcGjVy_LviOiymXSpvX4^vW)?R2*B(8aoCoXesS!=kItyQ(%7nX%t z8f@1wc1I_-izO$(re33rS945KNMcBaDgdq*CW`E;O5PKCJC4ynjo3vNZ6#7p1!MqK z3b&c*o*H&mUgLD;zgq2wI9`Bap==J-;p4$%{j9^6eDNf6tH;k4s&AC|c6xm~_Obq} zp)&n}fimHx#F7%@{VQbBF~i_naW{@tftFH~ZvEjoC(k)RRM%JSiKNb*G|P~To5%LT zP=N7q@D!r<@QXt}FwUMf{rmg$M#*)#R0^A#obPEzr+JnP+D}y>~lGtA~UYQ=D(9{zkS=QbW!1Z2Fys z=ZvCAn{0OM42HWP_@fW8HW@kRz8wFa1`Ba;9y1CwkCisgQ&Ln1+(5Z;P(p2IGo zri~)p%>|Lp0`z+DNmIfA9cqI}Q*8U1>p_;~C)E!ZU*<9aJ>;U7>Nj^S$co(VL$)o!9?q2c)|CFpGV$C@EbKRo?Ft0)+_Xla*M3& zjwZfs zuoB~&v?BLwrPb>{i_wKfO?MIh1W`UPdiF27oCs*IO%jdf+%f_BqICkVFGhW{4-Tt8 zu=?X$XLt7oq+8YRV}@bGZxd4`x6G0!1I40_S`o7P_f70jN>$JAyhD`se|_;4GDsW* z;dpy^xDLgApj=DW1Z^C%ZKH{YMO}Cz1P%Lqxfv?q4B2iD zF0pX3v^RfN^j;s%()BHuv;Ps3xYt1(>T`4TMXL+h0a|GPhgaQ=x4|0nTj|jaNRNE^ zK|gbHd{-rP z^0z7rya-viabnGh=61bG<3Q`f2W<~+D=O_;NXOlmPla_C24SAs&Cl#3BXTrF0X_t% zOaaXWYeFF&EW*_pGJ|1Wu`t}q?YA3`(Z4x5wZF|Czlb=q3s-37Ovre|!+C`b0$z#$ zhNI9y=+D>(SAa^(AU{=%o-t8D7D7#0a zQWjN_!P0`BkYpcjV1TSoa$BsJi4?F~llVKaAk!=J}Va(1fwue!b0Ma2DLD0L#>rmzlQ>x}{g`4hOQp`X4A9$>V=%|}K7%fH^2H=Y2-V5`K+Z{>2 zSBVJ6=>?z4Qb#qosykQGfE~!uy-CQo9vly>SYkz;-t1vn%u~}>&6C}~#rY+yKH%6wC)oiNAl#kfi>1^tM`KK9t7fThH|>2OSr>i3j{eMjHt+PHwO}&+*%$=${p9$!h-<3R z|GuGuX(KyPelOe}Nf**#JK2=U#ffh-m)Xiy_tLvB_yh#3&D~yp9{$qvLUF6wwIu!F zln4L;3iAT~n)LQk7(D_L08-ffUoXB7tVA%0S~M`18UR#W&9=GuGLNHP$YC(J z)Xkh9JlWs5<4zy|EzdZ)Jf~6&f^aVT3Tv(}v9CZvUu_4aI56GGMQ>JotQ#yMu)&Hnz6fku!zIM_V-gx^_(+ z^YgrpquN37^>dmy=^Rtcn;K+dxR35w>CM~b&vZ_I)#&z-|1`l*D^>ckm-IZO=*Yb? z@#A~+;@a3z*L?^8yI6A4ikiVJzBbqvh*i()`+BRkaJ$Z@_SUkX zxTeNk{+MoU4{YF0;GZ9%lMnJQb~XkOvQHhUeRk1S5if;grnuhM8>p%m`XOFQDl#Ma z3gW$@)jqJbMslyjs6E%`SORSB?jGfrB+FTIXg;;F3H+|K#zPtL0rqKe z+?JZ`gWtN_F)=?>Tq0^_%%eu(SsZZ)*^2#?SdTYBS%0HmK69S1b_f^0TXl+cSoh3< z+xH+U$8+{{*q7I7A8rLQqR;48ir1|kIdRRch~@R<#h-J${9B zw^5j&^=A&`z&ZZ*#t8Pk*I4e;9t#qnPBUfsEGF@Kce2kXy^hq*AsQVTa>P04Tw#+`51l)0%WVg$ z=Ryp&8)t8<@AYU-oSvAv{XMd|cTLysf|~?f#Gyd3>LgR&RWI$xp7VLM`K{ zd5{0LHC%YK2I~G+GH*5Hb7yI)pqZ{U4{ociE=_O*;0)iJPB(EmBdXBnu+rwXX+0i! z1g4{b8(?YOYMIIpP+) z3nFGs$9tfW+=&s=sj&4huL|f?va@13wx5v!3qi#-gCvv_SfD^-us3)HtOiVJ3y-*^ zNU8*V~f#65&3V1C@Vr@1Xan$l}AmoSMK3rk8V$9G(`M>dEzaAZ9<5cgv!# zp4kpscMT1VNUVvBr3-@&@19a-zWNQ<$M!Dyb2`79!tM|egsLexYQGkB^ti}rV}c-7 z{YC7RdW2;>Q7A!K+6$Knl34imJa&h||FY{r%#mhcTh5qJ$_9`js!|$%`$~$ebQ-5h z+gLge0DiZgzc2YcKlCXhz|WumBU5bhr4AZL-0>+oL-b^(Z3==G4@V zis5qL(_iR%XVDd*r=xy#-x%)#Vk3l!GD=>sy8-P1cEYOT&J6{V(53({3Z2~J)mE9v zR%Y3W2X$1LfeiHM%}ljsuNF2*AwZ1vKCYh!l1yjK)>y=W;#EGt!KECF1RyiJd`gQM znn<~!POmnZC!$SJ)~=UQP5F-?`O1#`qViOlDhc?Pc3JLrf5~4if^xp+N{a^;o$;iXnDAB!~Lp`<(j?E+BIjXeC=5%2hcJmb-uS--P zY2MedRrlrn&sx_&6$?9LpY8WxCHY$~kOON!j^F1T=KUHF#LQ-IUGs{IT5(mCDVV~@ z^yf6E0_5wmeM7Iqw2QQb8x>T9-RNz#Y~Fh3YD#Wg9>K2H6f6*8_K1bowwoe=;j%_P zI*Fy_THMBhIGe)Arl$0rZBCg}*T_X$J(s0Qw2g)9SNO3mHVGgsgdZ8&8J$&+5(@E& zTG(>yQn%;PhsRpK(!ul0nEJ&SnWE%o*$G5%Mx60~L~7bi!zkZzF$G3onhd_poI65!#gG4@5QqV0C0xZa#qD$2M_ zb*hj>fm2|9PP`n0#yR$pPj2!rEg^KI*YM zc_(k$-np^Qx*GlK&+^8;-@8wJ)Y;iR>zGo}&z;(ru`TqV!>Yd>e($PPUHu~BuAR~R zsrmASKSIevXUh}-!jm+aF$A~h*&Zc^(7HnYi!a;h@W8XgE06ETI1P%-9`)?y<#1_r z&ON@8w(%VEv*8%grX%|7uTH2LZ0WCXFi7wJD@Ag&_WyhQ=b4H6@7>-EgE`3L3{a$T zI1PRWu^cW#1m~H45c;A9nwhu*8AwR zO~JDl9an3+*jAi!%SJqGDoHJ>yUfXVoA}XBYx!IE(#Ee>vmGbnnC{|K4l5vAh|vm#eUPeB5R2Q@srSVu^A**1p9;+@(vcg{ma3NQc*P z`9!J<0Zr}QTiI$b^maihEITt|>I^#`oFj>lLDoT(VI;-jR=a3Zs8Ow$hbnlXmYr3I zs}FDVLzC&`<_T01zfg*5`VB89#;GE2nSQahVcn^Oqvk%51a8S>T-;QrjXbCZR~AMU zj!`c)JQjcU&TaXZp~aI_)xN3e7qU*)?;_99Fi!0sd~xXXy6C58(xk+gRvJ{BSCI$O07H)?4b^&pRkH04Y&ECjYy` zte>E8L%W)ItWi(V7N_xRuKi6Dq*Ch3x|nnN#CUzfY9ahzMHP+!nRKi-=+sj$y|!~F zWX%^BzAvW+6vtCQfDjGv?eQTthux@iY{9N?BE=b;Ye$wp5 zvDM4&OHXc`l!E8^PyPe1rBi(qelU!Jk+hg{J?x{xMWm8P1Q#_{$ zyk9X;QROPNgfxh!s%bB3)_iWl92qrDu+S6uAWSCtJs(deSMq>L=N=$#q%W}3t1Yqv zNMuKC#hd-Qmb&kZlBiDLsgu1G@z14a?kj9GH(ef~6vx;q6xBKp-mWQmG-kQ&$>6QM zGZ}-uXmauM#lQMz4^wtxlYG8iOOldWe0b=mJ-C%-VrY=;I!;yp>rv9K@S*R)h#L)< z1<1fu=#4z83^OkO{PwWyX8Rkwmo+o1?8Ui$al5ZkXt&3^e*$*}%$ZI9Itbyf@1?(P zx^q?yAUTzcUw-{vPN9cD5_kyfI*KfH+&xbRUi?h3;`$9Kj|SbL(Y)1v9-=ZiVO;0s zwNE*Sr0>D+hqoUk&Y#9RaBeZPQhqOolS*qQ%ctv}OgtWV{`0BJyqQlMgu^lA1)Z|sOM0quk#84YH2G`Hl$HC1HgGv>YDvQxwheiMY%3y+vAGhsNx zf2PZ8wkC?aYys2cAIZ@e72KeFQMP;|L|WX&aiz3nJAsI81n=N9GV0q$z$Z9~Z5oKY-v^YJ+* zxJf!w!s(NB$;+q}u8~V0JjK)ikDC2&(YlSR93hNqj-Yr|%JAojpN9|LWSnW{n)ad$ zAG;0`2atvjHkuGyVEf_NBY6_uoQ6!I#1BsXl+*ehE8D`?8vN&zlZ#;COfHF&wc)^X zOj_Yuwqr2-q`CNa?5(Ash8 zt1PZwy~nzFz2s0wlqh`)EX^{?BITfr^LS{3xe0vkLJH~0ene)9v+)er3{31w8S@E6 zxW|5`vjk(tBZqB&Y#Fr3b+h3v2|7C%}2=6v-DyV`YO>!Ru{Zn+jl#7il#B(JuIwaL&Pk2TG`_ zWm>D&)DeZV`Vfw`>=9UxS6w~{R^>IRfr6_HDAalMTpH+15@w8?$%`_&eJZUQ(=31p z$-@OpcvWjUH7W#19HG33kaL{M=8}%b6Ot`7+5{D~wO@Q2POrRhaOH#9Rj<9}>>hfI zf_v#<`qa2=@*wqz0W+E@mQ%JUG(WMw(0QPMI_>%spS2B2ZHslD*k`_`B?|#xub8rF z0LU9=T_{(3&5oM}A>znAo>@p>_>qYy=(C*XD?ZMko#L+;UOZihLg|S^4}Dx5@#f$U z{Zm695f+c!vEDW~!AK~{?^0}ic6Mrj;>&kC*w*rlqUw*%95jQ5)f)7f2q;>ucP!G& z|B9ua4(6COW7<>w0{D13vqYZ?c7Thgu_xVnHBhahRFC_0^KAmEdrID;l zIWpA;$r;|=eq-Jb0GJ{}ziWGGIDc2)sL1f=o8z%LsltDxpYfuwdSFfuDLgUwuDLLu z!N9VrFEupRPi)nthSRxQtrO4R%U|B!&NS^+I4Qs-7nf+KNKq!` zGt_i0mWe-dKdqb2O^|s*C6w6bpeeb_#{L(t?v7p`&3&18OS3p5U$=O_enZnXZ=mq@ z4ci#LR%wl2&kKuh8+k|7Mt#5P|Lqh1m#U#3i`Rr4o_^8n|51#;2r>xNy>a{8W3B!n zy4>j#Qvfh0+BHJ0zN<^S{s;kAO8AH_!^lpArJQvJI1ML}e=CnlFE7o03ru4HiTInp z>a>|XP_t~Kqa62GRSid<(T8@N6XR;7~Ky~YTFC@Z=tX}LM{Z{`ay*S$&javLl1X*n~FM+V6XL0$9ad%$uC_Oej zH^<;`&KPH2aiV<|edU|lzqqskb=~uYsm=E@e;`E!c!Ipg> zdoDrFWg51p zr_$Dq>F7=N9EJ5pj`y^?JjP0tL_RFfcVGR*MU7e=jk&P%@hp9ggK7QYNiFcC%E>(?)Zq_c3 z`|b$oCkH~^59tNo80e`BzcFyFG1g`H1dJ5Q1F5?bxBy_CjFtG9plUE<>oj`wmy4JT zDI3<=d4NeF!m8R+8WF^%G`ev9_?CQ|$r9K53;AUmVO{{V>_}tUEZqcXz>9JEc~C_HA=I5+$HUS8-R7 zH~F+ONr?1ql(DbCX*HbmNMO|t<%r-hYngJxePI8LQV**A)7k=c_7R?sQb2P_sWBwW zrWy<++Q)-XJatj=I5KV^!Shq%$}k+ki%-@mlI;Ujip5;0aZE2YiP3S@8ZJ?m9a>bi zq@{`7-SApbX2594!zzDC(k2XM^4gSWp;wS;=jM-X98r%~5FERB@vtj?-4?+HsP=I?5XuAz=^WPl%=zfDhh1#!hqJIURq=3K)u3+{0= zZa;nfdbMLA$;a@s%YQW**~{|NPib3=m_8?wB>hHB(6g-I_|@#nt^BI=4j&(vXAN(i zh71E$Wb`(QSI*Qc-eXS+MXbfu(zPiyqnRhMUGe8$t7|*TF(eiW!UIf8QGWAx+2Uqt zIRp#nz-4I8jdhzk%PG-2wImN+hOK$xl`SU6*4Gi*nCf2g`{7ubc|Fys{O8PG>q=_quK?^9r{eJtpLnbpOY30eBvc zze&yhSb}mW+M2IXZ?w;kJ~y^LoS{a-x!p|PoU0VJtl?_91SEK9tr7Oc3f?N7k|-E; z#IORKxV=!=Zu@A}0Lk0H23@Z}9P?f$-AdTcv#oF^_utJc`&Ygs{S}dzaNyR>e);5c z-9GiaYYjVXXfp3mkJAO+3%A}WHEI~`bA?~qxjekF%b47-1`jU_O?^3aO&3NA_!o(T z{1dNN+KF-RocwmZJ?@O?IMl(240&Nz!|OZKe);fmvrOkJH#AZKZtugjHHW& zA>dQKZ)V=PHz9zS$74WWt!{Qot{<`7LL>b2rj9za^dhdAeNkj z7)f|A90e4Tlz3@(^LAhzNqcSg&Q6U}QzNW{MrIoQ#_91~?k@)4;x!_)+BVkfHP%0< zC{w1o=uM8Lo6=)?>l*LQ72H39^KgmtLj#Jxhh80PB08ou$>kgXxLlQI*XPn)hoJ&# zj-kZz$Or%g#cuwa-h>~4yPI+B*I)eH$U;I( zb+U%a1O>98Z_xgeBZdAjcp7VIMR`h5z>y75FIhPyB*y~D_En)7)nb^H%Kd} zNGjbRpePDT8YrNm==*$s=Y7u$hr>DhV}Cr`ecjjfxjxabvc6sQxZZo)x+-{ru&FRO zhp$@6dXC{z8>+fm{P+`>sHAPWNQUzBrgd!K4Ba<3+5-XECD5!bxPb-x+?91*wsK1K zMm;t1M=1`M^Azo;NNBLYnAVFk>zk!}fCI^eJQJ>H6n@5)Dst zt3HfRJYQ~a%`{AqTGH!q18b5eU_*0h$FT=E zhYm%j5{sqs-lRtMiK{HXb@sT!{#Od-M2hIegFC|1mheES3flJ z1sJJK?@Kdq{u`?wHg-%We}7%_9Z+b~+!Py;`(u+72Fxd*M8=u}d(HZ(X(HeMbj+3o z0`b2jN!kb|NDoaa^yF{uisg?+CDRQsZg-!x;sEl7MR$(kY|!)f7gHQaN5F+bKw)FB z=n_<RWr>9vL6{I*WxG5Z+w_TGoJ}a)P zYA20ajo}*I-HD+zPe1Fsl9Oq8U(3Wq_Q&VNk7CieS_|sqRgWzfqob5jrd~XC!)E}z zcj*8Ddp=E35v*7p@w0rZGBO+rW!T7HyPB6L>?QNkp#aOp(ClM zj8cAl7UAu^{F$HP75VV)oiK~$_Neon`ELgd+g$k!17`TEGysbLpaf`vVmNemAO*gC zcM?!!8x^?W`K0ejh5NX+VXUMScF79XY(WLEol>u|0W1eFK^M$ia>^8FC4phO%3Rq= zuoS>!`GrSf7HhN~%0A8G&aHYK;am%U=nC&%So4v#%n`|enitANPFVxOr8Z$8N%8^S@BNtIYPe zFYQt=#9%j;ER5*wAGS~&b^LR96GA`%k7CV0OvMg8LnW0qX_I?JyM0SX57VD@#9}0< zu>kfmw|OW1HM(NTIE35KRZn8$TFQtNhrX03VW#~OSVMY=l6}7iQ@+XS3P~Ad`|^V? z0Z+AR0rIsWJnwsJ_{;YEDiatdY5bJW9POHWRkZJTj$S%Mv^V;vb`s}ljuv?<(EmC^ z5L9q8uAA4H$qf7HUOU0`kv8^#01`6+sQ2eLhY119>3r9Pw;18)=R;|=b*h11uPu&> z#DWpP?M*iRquP&GvW?EBR_iB~)i?QZh%?fui&&s)pu;7#A99z8Rr5K0W`?E1&r8z* zi<&yg6{FxfSsQC;ZK56%84&BvGNgksl%Gs?M@Q^!=efDN*qTohM3xQdkablTrfqd- z$NpZANsqsAR7aK2SN;5Ul=eDQ_L&^4plWjdV4>O+x&SYNK6>eSa<@fBl*2aex|YPJ zjnaZ5P%)}W>5Yfs?dYYm)H7$vX zjKi&-c^3T?i~`S;9(0MZamP-)BCyw9ltHWa@yrt{g-86c(>J#fPo~Fge2CJ17{{r= z0=IldyNFpXPWQq=69#ly8HVym&~6IN<4zpJ*#S~eKWC^j98j05WGYpt%gf5f#MnG( zVOXp)s_Z+f|6a98_=5)~_%{wRc>hKc3Q!1~g7{0g|0d0IKfxkCL%Bmss zf6r8ZzO}kKVV3PUZu>DHDu#6RmO#^IJb5<3>$o?p>*8eLP;MdJl0`)2hl4qSfMfE% zXFX_5TN`YcbVhZfFh^Mf3X`I2$$tMl(EHvQg4oIEQM9)rW*fM|z-Z#UcEHdo_B}-9 zZ>20*;SHa{z4V%<8K%yuyyU@;L%#zjBWY5;dMk5pw!tY#u+Q&Ip~-yHQ^Uzeb<6b0 zzw8PZG>=4&S_SH>I3EYJboX$};i?+*yKQE63Ki?Dh??*rvxh)F?c`-NnKNlMljZ)#kE+}%fNt2 zZNyjx=y43R_SPJSr60Ev4j5xg01~HN&ZwWdPHPSt$cfP55^+yX!=w16G)^N}IFN-_S%#7`AwXiM_#_E&kt}$!z0`WdT03-1-5&_KBrRJqtj3|X?9j5CAcA5QW z?g(MFAcWc1hy+H|jy5HBRMrp4?z>SGHhB zYQW32!pRBgeGYv{puvud%jC^{*Y0kSaI0JoU=UlAKMR+j;>1Yld5w942BK<%7FK(3 zkT_PZ2Sq~uvn0VXOO+&DVe@t8)`l9!^ZgZJj2%`kt|IZe|NPkY3Dx$sGT~uH1{p?j zlQ6#McvZz6x!ioOq4n`|E^powEnhFCai!vslYdQZ-u|$hs1(j0``wtL)S5aGjJ4UI zVXXvDyQWnR4lqNz%DSZpq_H(Or>WLya!(hsX(SYjkXNmmIj+IVeB{RP$}Lx`=?Um z3w^WoN#MQGHjUpGKj{jKh)@Vpjir5zd`ZcSi!ZHZx~f2I8{rt~6#(`PCLPbPyz&s} zEV``hR&X~$CYtlf^7AoqrYYw3mDVijr zq(!99hjEtj9TyTsVy9oOZ{q-9FU+47eQAYiWyRGNEeZhRpOpC6Bc2FbMk@- zTI}T%9T$w4l8S$$gZi2E^GX7EKh-ODUcKz0G2ylM6eZ2p+!nV8RvOaA+}-_U6hNmr zpSuJh6HY}wpRRjUwvxUkV6!zYTq-xN;jcE%SM6C+!j)U{fg?%QnWrWz79*S04=H^u zQt0Z@-?x^}(ju3oRz*nk;{*0JFC@VGtVC(M9T4hx|F{J{#462tMCUT3M9`1pQ3ik3 zP`Ib@;=w^gsY^;jWoQ1=b2YQ_YW@=-I|i&x%aa4g{e)X zo1V|+gXP0$>vIfylTlyp`+oI)$$NX~kL~Yw$Lk&TKcX9StDdp8CMTC*AzRsqv2+;u zPs8&Yrk738nhbcm3qt3K5rUkg7|>lDAYFUy^@H)&moHaFF8QqpO=eCzfe z*sv@goI8vCzrYO7{}8hOu|q&7YyfYj9Ki*qdqjXaA7P;EBpUop|3?BLn%G-NW-YGl zyE--JhVxF9y6Ule!K5gu`&z5z4Zm%vv>8fKa{nJwFf`b4>%bzBt=Ca8y%{2>;1*b>*F0NelL0TRcWZL$R4F1!5DC>iHST6bLp3#& z9doKYpkbrUNX5My>TGV2dn!6l^+TcobUL*NSJN%I!p30+hauuL4yf9Ih>?;~dxV3z zoFKP>xlK+5JJAwOQiWm@`&y-Zvg&4;0S1N%qhXJuL!PG)H zfr*cNm!$epF&qTR6*r$M)CFkwZ%|p7k85#%DXjn?b!N`X?{Wb=RL(=i&EZF*np>Ym zt0dU@o{LfAh4rC;6yxs8SGlrFjSX~oLscehPK&|`7e1JT zy#%fbni9sYxA*>AI zttAL)B47O?tgX`Jvgo^YHCd9^9Ft@#?@DDZYaFpAJ{~}^qGYm(380i)zYKZy zSlns^$6#M*Q3%<}Vm;NT%?&%3?LVJ2iN$A@5pJuUc*Sk4e8%Typ>eo zCjnkzIo3B+cIY3e8O`y_6Yf4DK4rU1kXQKJ&No=(`n7u-%0?EjFd){O)Bml*oV&A# zcOUwDqI4P%Cq zL&nzGm0JoqI9D~>NeI?~dT70I98X4U&Ka{zF19vd7JX);a|83S_x&^wD*l&lWe4`& zX|?7!i*vgV(iigraqrT7C)D)wv_ZapPPE)gt@LHD+77*!H+QG*&4o=WeF{CVbG37! z;s-4&L8VTf)}qkjSMzlB&KBFYsF;KaQKYV}Oe^IgQ3uE>QgmZb6e)+&dpwINh;>p` zJx~=l!lOhzb_5M-Bks`NloQR1%1~~GnK-VL{!z`kjQ!{3`DsK14Gugau-0u20hnf* zof|8CNJy#f7#8aeL6y8{qOz|)h%$fhXjRzOvLSgHx>ms#<~>}swAiWBWO-@;`l;1y zaz$gu1% zeNem`TfYtW)a>j+d(aT`K(kvumnvd_qodi3iIcMeX92A7G{C#B@(dOxP-iD%pwjk30#co%%JQN4h)V-=ILVL z#Kz)2To4qDOHmY-OYi}7-Gi;2gvb=qL&YL}9My$0Jo!;9q!>Bz9XAP$9_~t><~#Sk zN@G|hxa|Ft|4qC~f1Cmf<_b)2bejlwNF2Q*KfB!rPi)Ua&HYJxT<}Cs`*1Xm6PSPbV9BEXak`ffQx{eZrT8KGWiq zy>(DbNkcM~z1;e`nR|UYxS_DCp_aCMsm4yxLXlnc+oTRD>)XGx`ha2a{5;6(4Cub{jB(6 zz&I&0kXPDR8wqgeGYAh=ws|%uT371ixJzfMnLwbGb`KqpHer%`Ph7c~9cEw4SGv7} zXj3ezaWFaZ`IQc^T%#*8Lk9ir-G7H0(eS$)SIEiQV&-Z>DjCoOi$u`Fs zM9;nXHg<-VGFTC)D_2jR_%!_v7^6!&31pS2gHrlpPd0w7h5hDeZtzI0Ytrz4$)(C= zPh=*-fu3t9Jq(TP8so4r=$06#p=qWq-w}RYmr>60_JxVq3b6-VBwAzb_``Q?K8xF- z>|jqk#gw;Y_`UmSOV{AMOovj^B;s~Q-{cPY{9yAJrVPzOR%^MX*?zwQl?oxn8b1rx ztpf~MjIKaK+9L)*)Ml*}ibHScL4Bo#Vk)e@oWE%{eA8agnw2f>GcYtCuau9+b1<{f zX&~zi1MPDZ?DY!nTy?WBTzy276XE90eOfNYgW|%T=RzBM=XJb?Xe^Z%_Hva7gHDtm zXiYX1!qf^r%MN5glRya$!XfJa&ZJQH!cC2`!s17DlUemXD!>b&wv)#X3!*M^K~PrOozW)p&v_jeur-V4;|&E_$9AbfxOF@ zu-%KqJ3jqJAn%6Mz&V3u45}vuCW$06mp5?RNPp`y=#_6*3ir8YDrI(H7(pd@uQhixg9Z8-&e6*j`&%06LXL zhC*XJTN*~#xb4qoy2_TtG6H1AG9skLwONsFsTQZHhCv$s;((N?e?-;{oKDNYQhN;`IQaw+%r~hSWznKv`6&m9oC+T>0)So4K2}WnE0oz z#K?2K%`ci?$Rd3!!Z@9qM$-5>of{p>ASK-S-L&$um)NAGzW3rKV9SC7wZ0w>XB(PE zKUx0oh2F9)8G^KCO0fbRb5QnqPiVAty?Fx;3N$|o-!YTqQKWt^qc9T|$v_(#hZmFJ zSzxRq;@5^W>!o_z-I6IPd{}qkdKpgbQlJ^DvtUyoUv<>!^#-Q_dE;XRVS=s2^4*&8 zq2msoK1f@C1{bUg4Ye_au^qqEA$QCiZhIqX5Yc8qt7eLu|>KnwJrz8;D@MT^a~5Bb%-NF-Dkx1f|?UN#fFqjhQ-U2 z>UkO^q1oyd$x%+Ysyw=oz-+eM*92mAZ zqQx0LpWID4)l*ZeFE^6eg(`TXBI4Z-$-m)EU8&x$@q07bW@>T8N^^BI@iVj7%gKI* zIU}ouf2Ce37jL~DSb!HieTSNxW@cV>`hBKA{qRHVqyDkDO1Dc(J*BJd`fSNR5R45B znBE4>&NK+59%ycX+u@=Q&p1m^Ef_m}Qe_47+p#Rq`DZI+r+vB=8-|Cuyb|(wcf_`a&1_tyA73#5fbqPh%{TlBHKtO_iKl=G*A4xKAeQU znawfmuc!Q&N}m8QSmX#Zs^u_a^KHtS1Ex>EXS2X#hHzzKCG;Wj4E&C0y#sBG#$D3W z_f!WPnx>2(dmAi)zOjxPE>%onZ;>Lv?aiNaC7{{_wN)zXrd67j@^w@)Go^1Ps*TA% z=x*HsR2C>EY?kwXUlzZf^M*v2MBVnPGI82e0K6r9#ee5Lx{mU$e46C77A5@V^NnWu ztC63=+}{;X+_PW~5As@U>`^`{_FnE@{ntJOmp9Yb@c9coJ6<3O_-}sdv=-%>w6oH5u&-1{GCF)JXP)D)#n$SUnT#+wH0FeP zoFhel*}NFmCiTSrQSr4Pa4s%z+YsyF*$E@vX>(`3Ivmm$QvK9z*GtGih;DAuDd=iY zN2kkU4VwbFE(I}%2Ogn;WmYtbtY&?g_{$ySYOOaCaslzAp{uhOY36X{s>*xAduQ>njV+v;5)OS>4A2to#_G*Xn9Z?i{E+LFtUMDdCTG_Y zB%5U}B+b++f!eOimo+edUnZ5oV(|bG6eD1j%D9W+`bDZ^d(CL+?uQsIQ?S(dcC35~ zuraq4QB{$)o%Xl0dg1x%)X2hQPgi%ybt~tSW9N(rb&aN}@6D5i4MB-fe)Fz&Tc%cf zMY|JDy)Ui-xk2}0&$1L5M#>AU#dJp1Y(HnoTI&GV#KOdd33;Txde%P)Xe=I=NL-_j zZ9xJDTn2`;I5)?ONzuRE4X!1XDvA#$y({aqax)fetgpB%l3dVo!4Je> z$+UU*W7Abq)sDwZV|du-kB!a+bZ?th&%L?LM!L2McgXxjkdHnemM$#+MKz3J953J8 z@!K-Au;3?D>T{=^`@f+{W#r<+=Gg*4wN zH8%ynH&ZwMEARw`jAGTg_sX4@sC)d{=L=6FIv@Xa3e|ifqDWsszLF6d%Xa5o0^j(s zolL%mV~g#Sk6w^(Ew|VwxpmSL2bxb^3SJ2+?3&fU!V2lsQgHM~X!h1c!p3~Wp3~y#O2}obiOl1+f-wZ)tFxhI%*?lI9{fvgEK1o;1Tdz*9J@bk zs_@_NBC%X}+50Oh`czbF{@ke#P$%`x&2iL3o7CzRCFO|X)Bps_s?p*^lbc24-sCTv zs&_01YooIqVrAcWYH;3(TuQ+gbl84;^Eyw0y^anE2LKkN#n>4UPjTwFKLuHme&~JZ z3i@#Y2jqx%p{txRsNK4fs+)*_n~|(}fB$@(@ZBeY?a}0mOLV~Bk$43CU-GeAm8HH9 zdhm>%-5Mv+7_yOEUZ?C$=6~}f0_9)Lta$062>5=kDzm3mu54nsbt9SYw5(-_wiqku z=Xb8yQaeW8Fsr?Czg_OHS&Lho%VnxnJ%D;(ZLQ@;udP5_Dl@q!%AsD zE}6L!He?kCe?k;9#B_9n%HKYcP<{S(ftyu*`-gCPQE-1g-R&d+S4=~D&$VF1Y$I7& zs9%i@ydLF-h<2Xg`J2@Qt;uNzB$)8~k&DgJ* z8)kkHbavj@#tN!+-rrv91S<3S*12-eu~U=_AjO82Bo)}N%Wt1{7TEX95J$3&P zfG-b*Z@9FTr!g^RjV#^&j)xrn+mw|2ZN(!Po>zY&L<(SN7UUqGtf zhslXwY?hUeuD8@Bi)D};nkQ~Ls_AI+c5LlQf!rJp^OPEMZcC|Gq?*cGOEZN^waAfc z{Qh{O7DZnMi!sjM9iA~VGtPyC@TC|-WNU~20ULB}!9WN~zLy;?50>5q8d z&vgSERlZnn7gJ~b@^@p)nMIoiGr}tW4CJh~eq2!jsEthLAEJwVx;|lo8Q2^+tk7VnllT$drrh89(N+0^7 z8|_<5lDT&}q>m>t#y$XR0=A}W<*)C*BKH2gS#+BRc)SQ=%s+3Oi%Va+&tHviP2~f6 zxJ7`Jf=gyOmwT(SK+)pAm{R&fP_XM+)Sd33-R(0ldB^-2^LN=B+PmH+AXAVPfcF}d zUs$y2a@*URm9W=>@ru7uYK*VsoBt+Xhx3@a=F zM{@uw#8o2aF=dqs`gNQKj}-Pa?IXNEpRbH~6ys$2bdrn389M-rbSlzV>!o4$-sCr7 z&Nmimp`=^=K>IzaypeR+>j!MFyuJ{W@=zR&>Q~?1{tdZdw0wp1>Ss^;wDAwuW0AMU z*49UA2VXxf9;sWMqC5AsY#W9UJ^R48+E?av|K6v|4_m#&NE%>xN6z&pOxVmpJ&YmS z@V!)!_xiR4KTK{WW3I4EJ%A;|JBx$i&H(U$r}v38BhdSy^c3qn8{L($Z=t~G&8wRf z-z$vB#82aBKtRGX8UE`G`j{SnoF#zx4(a{cRO}#}rfZH^8Cmjj{PMy_xX1O=@OiLg z8DF_!%gPIV#x5#v8K!c9GeO38h4=Zf?(&vP*WEYnt57ZJaB7)GQfG}rd5v2-pKIE* zvW9}HVkEJd2*8^8FdmF{z1pQDF{Y|%KS;mEqOe%}qJ(^By)7)pI*w3JyPnNi@k*y2 zrhz2PcKR^U+KuE!%JBF*1R^wcwi<>VC25NgiV`Dx_&v)9_@jHl+jwN&+ox4xy0{Ky>H_kTVG8gj{$ z{P$G{N{LAd(Rkxw^SFseVt0HIHAK;3{h>PW-SJ}?8Y*t~xj2WbHP@KesS zX9Qjv<*<}ry7=Hh=(Xs2Ys*@WN*z3ciG{=f{M{0UupIfBy~J(krI-lxZ*03_wOT5` zeVVkyx1Bt)>bFBB?^m7X<=Yp)1JMEy$R8V?CRW_2@_P>7X*jGhUd3N`6E;ls$YCfP zWp?W@cu*j@QtJBjPTz1YYx%@Y^RACJ+G%KQ>?K3Mof2=AI2~v9SGsNy8d1`zfwtgW zk!8`MY1bjsJ4N`YX#aQCYbd}bmqF{oQkC6C#8-XI-~GGv$M|o}qR-w(x8Cw?jh7vU zYcPL4cko&C-9!;xxC!&=v?3=yp4K&BgQhzB^LyClQ`^2CgD!x=K=j2?Y|VoLJ&e_m{~5%uswdpx__22oYr@z(v>X&ycM7kUdE zx&E^4FZy#XA4yraPU=)y7`FCTL0W8uEDCD=hMm8q=HtZ06lZ7 zUQJ}Ey&;&*5}Xr>B++R!x@A#`C6MI7bjfC|d8{}}a6XpSl7O&DpKHT_q3ZCv0CQ6^ zomaLwQhAHDUb>JmRaVp!f(*vMm-;Qju~wRwx!zkaDyH;%By5;%Q2NpqoyD*gzKQX; z&lF{0@*^CgUvKOQrv>T-VXdzuBu2V2X59COm2{LjChQ%*e}2&U&EwNgleXzHTUoEZ zes;ZN@%x|s-YF>R(9%%r^zIa$$BEe6dr|MMfr3RDOtgWK?)i3&)7f{Ejv%B31*5wN zhvf9fHv{KD`lKWqASwWmu9w^;zE5gN*4bBH1Rb~Qbnw{D2R*DYUUlARu!P(I^|N+{ zIS4??vow3kmZ_sabX1U*&D1m}`y}?VuX8tY8}idPQ(1+V+>p+Bxr~0Ch75N^A4Q zw|z`j;n@jrEx{I<0nI#5zJU;#;7ol{5vqArxgz{PoQqr7lSgrGTQ4vDdj2COPKNA| z)92L#*~EHZZ2g9){~j@YAoSM4@dhbn>f_vv+swT4N8dleczrfQuNU)Xu17OpFuc;; z4TyaVVUap_5U_NHFK*I|>wOH9Lv z75uE@&Y=m-aB0~+=wRVhWM?3gqrCTpJo|PBJ)RWDht@$H95(!?9EC+Pkjc-1i3UNt z*t9HKLvOvG%qWB1er1QP$kN8rHR;*~I#F#SOmwaf&jG?r-Lk~U-lhSGj2%hDjp0~t zV%!-y(m9;XAyD+Jhep$RPjj;zAi+>7+T0MdIx7fkoiD zEC0)5q&Db)MF65$Nn;wO-*vccE*I3zz^vr7(+MyVfCa?^p&PcRAf#u+}|f zy#F>tmGpehMT$0LfLdS@~Iw@=Ed37rmTBgW&hgWG@ zVjFn8&mv-`PAOasMd0*|Vc7P&)`yJ&;`wlnE!rBck5hYCg?d-CZN73ahWs97vx8b% z8N|TchFDcPrA|c$TGsnPV(_c%T6{)1(3q>UD2dm^cR^uK=yGo!FJGRD`n8oe_V$8& zbwuR1DCN)lMZX2;TBCL!{H^lNNAw7NiCW&BD)qhsP&bMYCD(Q5)aeN4iCicyTNO$E;}>kKNpiYNw?mbE8{9W?u&kvC$GU} zyAE&wAM#D359FWUj>b!mgg6%!r9Lfkwh8FN|G4edDof->KYw<>wxDR?hQ&~>s zxsa$!%+>>!fzBm@-yI2`298dj7sdb_LqH^q1Ot%coaaMLK;e*7HXq%fOTXdT&Hdfi zj~VWCj4ogK^3VIy=_~P_+Eyq4p-7E52QJS?$L`lZ`BQnX4bmI2|E`M>DCQnwJ^gC$ z)Uafl_)xlM!C$f`1oSs4deKZC$Nl0G?=+qtSZ`q9?I;aNh*OynXlJV%E(xX@|@Q?^n*hbE~V&9RjU(!pT@ zBV3)D@jg7d>t;Z(10)0UXkAl-1I~EuVPJ^#p`Z{^6yUt9VeL5*#VHaMZAS{f+*Pg_7;P+KZ z*mL-!a0Lzr(k4uv&ph~cstellD;_|oK~I>frp|hbd0YZ8Z%i&q5_H5}r%=AUZH*tw z8hXkj7{VNbXM)9$ycd59LI8Z^CHC$Yx2qz}2PWklB8FAl^D5t(^OtsA;BIV?yma}> zB{87v^WlBdMr!QDkq+Xalcz6b$pkb^zh26|8Z9}mac0(vy3)`0QaZj}X{$C%hh)EQ z!C{@1?WP5Z6&Ct1@6!l|-7YUuH}+W2Im{icK+JXryQ`FY3aPRgqP4a&Bm#~ea^$#H zN&Z*w1CqFV(QA0QF^7h!ehuSbLUToN1xwk;&lO>;dC`@QW;TOb>vWn07hS)vRh5un znNGaX3x*M(vfQ|+rS*4X{3MROq*~y|(Os0I68deFAkWWb_&>z4sd~}-4-?hD=+?d{ zIk|fXzIEkkwN>4nmKCxU8rUw(W1EngO!#4+epX&QokQ%6Hf1HVJT~5MqWXF-69%$2 z1r{dNTROAVFUL}A>jj!x@POXuAwM-Pgj>ju{Rf^x?;pk8KloN~w+UCU`j*58K>`=+ z!VxdN5*|K5$!1HWdiPyOJ46`$IKtlzdAKI!O$s<1nDS|4b?^%>2gjDc_w)E3Hrv_y ze61H%JynZ6eWrJBQmth&mm{dT);D6EW3AH527OtbyB6#5k>1c zA$AFDLfn!xoa_+|@{|L|U!nZcnvuQl*hpTTXlCbB6)2HC8={dhRHDjyi<2QTJ2%(g zxB%lpOGaa|wxisXLLpD(<-f;P;m2?6Dd#oDy`)n=82>)KGf|8eLO~%QuxLVaF5ezT_Mc$g07vD`sAs^pU2D1f_10De4{^t zcML>~d5J^bE4u|&FT7&KacckGV)G|S55afD>Ub1fGGpjM{YpMnnzddwXRBd>Xl?6K zTO+46y&+W^JA?yZ6ArR&gZwpg8AyuFTaj)Ju_IR3z*jc*2&9hEJ02vA@gbMueZMS5 zVL>?gX|y6hazco4K#=+&5G*CIkaP99oRH|SLIQ3mnSqrRF0{?H$~nr|5*!Ofdu-T9 zK=Dd?Bx_x!3cj+D$H=#Lh64M(o>ZEAxIHybr(r1k-TrSE-HgHUACI}4Z;sQqmphp} zVCXRY&MDK6_0`)?L!Vdieyrq<{u_k}mf&5pf7!mu{C4`aCAhNBfDlg+INjFO|J*vc z6;LGGZ|cVc(7C^T2(GSy5=rVesU8^!z(vpmaU_nfxB`XFw)d?Hz@?oB&vJ&iv>8!r zjCRD+fKTE)mDvVm4%`~q$U~M9?78&zW%8bQXejyMJX&mp1ru83oD;*EW9+{Sp1;!G zlV`IbeIL9B8tWtxjZs!wUsO~Ztxh64GbiJ-a?5|NVA|a86+9=1`rCYZX){(kFYVAr zCN9{u=yAwdq(w8i(kK!-Syrc9NdTJBlWr7U=q5^G9k1!)DVGr7#yo|T=Wh4MxMK7# zH8}93F+-bIV?6^Ga4dY?63wNuRQXsM-^^haU!ASLD1=IbUs-uZKreAs_arkbj& zzZZ!Eu^;lgAk4i7*NatrMMT+)V*-HQ8^)uZXA%l?7%u9L-wgces^tD)uS-?=Qq!rA z+;V+}ACM>#HKo1kDj0oDP^2t1)iFE40XeLtKo1Hu-~_*y=)n>@#2vS$v8&RO)&Oam zzw2<|1m#zQjKx5R)v+ZGQk=wv8sM+;28>CLuytKb|At38yMm4hjA$*I(t|V8@!C$R zopEj)CLhmCc6N;WmACgEfHRzVzTdgmo2SLN?;I~I22aD zp_EsDM=U&dnG9VP;2MbptScKJR;-!5dHgfyqd23G9utK9WGKV2EB1cTOEoRwB(@&0|$aizAso=)d z)eooJu70`tWByO(z{9Im58udb{-uBVec*4gt?j>C4ZEK(mvY1>#jXD(so&Jnnn0kG zqu$DRokHFG*l~`oiq|A6tT-SOCd_@X%L0(sU%Bu*Vy0uk2M!E`wL!$fi_d_LFn#1d zI1v~i+t&lRlk(vkVl341<(Y^$mvh*7cR`SrDJ_8j(a;{{aR7}p`{q}g=+B2hBP>g5 z%rae2x0lp(p8DKz*wroX$OG?<^TN*l8$9dV1BY`CPtpVL1ky%T$E51?5o0v2#HXui z33+l% z(~y)Ms{mW98^5nyd?=4Ls~A#`8xS|qZB=KWL6(sXV)Vvsi79adzc0=^p9ueaRTf(J zTYgpXsk(uMjo^m#h!2j$N_b`P3% z+)h!&T&9-vDL`81eHGc`O)XF4)NY-SY{zq~uaaa`7+tHovU&<&*a5;+)M=OMK#Q0(OI z--LT^m&VEI`!39y1(@63i~SfqMO0Z^x?0t>m3iscmxih2tZx}N#y9sJEi%-uKy$T3lRIreUHv#t#4#e`-cS}w; zpWKg3>z?uIksozyxPN|M|GcN>$-1`Hx{QEGYgw+k3$rP8BSu|84z}i`bD$+RoR+1v6zKex4>mX349D1 z5zVT{x+Vgt4&bG6q2L{xEQIt_^}*2F%xNDt5}>V_D} z)^>2Lvnen5R-BcfOREY-8jVEGvIZmOKgfR{f4(quG<11^L;m-(o4J0T)Qu6o{IH|f z4@KoRi~re^3ur;HfjtoF{vS2o_83?GsqyZA?q9fm1m1vMa5#P^UT8M(7{5NNto-Hc zgWHx0!YAS7DWd!dm1uyZ<}xAtnHvk~m%4V-od$sc-NHt$KrlLyaUqb~NR#mQ8gXMi zcq#S7?B16%Z?F9NxS56qE~>O+k#dCEQ;vSEqot#yW@hS}e7-OJOU=JKgR0MnerwF@ zGF}F!UY5l4MSZ{859{TE_mhY^LId4L58s3|RyI#MT-OfhaC%FNbbB=`+-5b@pI_;V zEwdxnYM^@o&j>cZh_Vun_buA*r=686DU2&zCc<+plD_W5aEJT4W=H8hMz1iGeDNt{p3M(PG)c6o94%T%8@#7L)YT!G& z{%lkkn2YW=3lXQVz~hw5VOy;fSnr*&$4610psm?+l-w_$&-zC6eq@n5$mR?mu3tL!$oO|LjoVQd}D=MS7+suZ}XkWO%f$Z*3!|)fi_c8r=EmQBU!C z1t3r^bK%OWoO?w&4Jf|LTuz{fvGeibp#wNNK!Ir2v!zir$mRJ zR=v$Mqgau~1GD&W`Oh7zLF+oZP#dk+I`v#<$LfaL;vsho=mFOn7djlhK6CGM$Ar6E zGHVV4-Qx=96p2{w86M>tDC+oggSQxZ-n*0r6d+SFqXPVjS_y0rGSw}VfzW@KV0b{_x(G6pCN=q|R zT3TAVQBXobaf}`zEnU(QBUKO`-5t^*AP9m9s37uty?^I(&X+$JXK;2ncf9WFeqPu0 zcp^-ff!9TI2-&oDNF>qJvF%!Ft%neg^5c)!JsTmCrIMhn?ksva6#y);WSd{F=ggS{ z1VAsSgsK8Pb(Io$U2K7Qx&o{Wp0?QN@80@L`Ukst;`dgB?BDQ?B+V(7R$}RiF|;== z5=*J^9rPwr^IG)0#~!e1;3ppj&KhzaN-wfk1~=&1xm)p)9-1yC938viQ{QZ?G|DkH zIMZR=wP5{-B{NSrDzB%`CEAnFS7#$r#H2CmACRb)7M+1P7gamfMt zMz`0?6AAj)kZ`M%-8m0O19{5ij}&Vb<~}_b!DI$fTHzF03W1EaaR*vD+EUs=Y8Miw zw>Gv-vTEhWcQ*^m&1`I(D+Ln6l|78v%xWI-S=7Dc5e-p}GB@_=&@(kb0@y)$ELvL8 zfKEF5U3O%jEl1MaPf-R#zW9 zm|v0mXzYoU8}H(&ReR5RHoNbya%@Av)ztT4KS~TGT3eSbYtN|KWmSq1Wx)m7;)2#; z6vQzop&rEpw4o*DT>)$py9h+#&Yh(!K`=0V|3oM99l0d&53kV3XI^6AUVO&eFaDH{ z4o#|v zDXY2-nBKJ9bm*1cTjldR(mwqZcc)0^6|n&Ucdc%`YJ)z^P_DP3!}G#qH*_Ao^^1rYQ1!u3a#($z|Q| zFy|Y!+%fkgA=P7ETUuWpoQl#(&nwRss!v>;-a7^jBJ0_y?~O}2+1|TnY?_F(&AF9* zs$~15b!vkmv;8&;%&>KVAbVG}l;?F@vDP~@9?&s7XvYIM#)vflY{YZUmXl-9Hzf`F ziE_`eaoZVwr73TF+rK7c@uo{0{*$+~4{Svm3BzjAiSfltQ_u+LKiaNve?)`QE)>z! z_^jp@uAPpb$6G+68{mvQ2njf8p=Ej0u)#o?yM|k-G`drN2e_W7B+y!3PM6(dcshRU zJ?MYFx#2hx7m4~z)-vgIPMcB=WgLJlT#Hh?|)wM1<<`Y&x2e_rTgu$FVLDl z*TO6(9&hw)Q<7{P0;*G3ScdS@UJ+L*7DYAPfvC@b;Dyk=+Sq~LXxzA{mNKLl0!Bob zl50)ea>C$D@Po%I`s;&VeN*T4jb^~3pAj=pLyr!UN!`x^|D{b{-ZljRr$A&acrOdr z_$=Xf>XE@9mU~5(b4Twz=s9(Nw0@!%fhG-#)7}$O^=yBpRf)w6m4Vl6FvF9Df@SZ& za=c=Fla3xFE1qA`Z_e&Adf{8lGuzTW z#^nALmNGsKEVZ7UP}-ekZW8`x5D(Fk2AGk_eXNg)HBaXqvCS3-C_e7)Xk z@E2ity^H577gI`vLR(qgSh(XPioLaB{NNRh(tCZSvQs%Ol=8iesJ`)wKTEEctL)Ul zQy6Yf&kgE)H64=)zx-+*DlX^O@)Tpy8@V3(v{m<9tT)Lr?sKyIjr>hkp?uqcDIs=; zf()2+hR~*O2!pg(;>YeMO(kF^lT`1JnF3)~Q%Q-5{3nAxzln=Q$v)w0-VXm&#C+#H z*~!1_YOgFIh~21Nh@wJz-iJT}w~!L=-K{17==vIL{`I2f2HL0rJp+Cg6eEWtU)E@o zF3psmduM;iM$~dV5;L+-nMq}{c|o|%vnbtK)Pt|f^O{9iA4)e_8=09|*2mYdIi$Pjvgdo-Z|Eq!N-!)inBCOM_4;Y6OS4(SjLK*jg$+W z>F4SWvq)w z8b|^)nu+O;TQYY| zUI9P$no^e3GrdB8Eox2uyt7fp)i)Kv(s#UC)cwZ)(b^X7?Y~D4LwCH|#RH)SD_ke< zyV+UlGK*OugY0M3WkQr%R>k&SQTw*Tw5DHpug@TW0eKjJvDQ#S=Roxcb9}l$sf%KU6Ay;2Ci9R!N$W*Rv1T#(rHszB_&- zFAB^ItX&-nuNGVJR;BW{cORc!=~YpnlF`-uES2LS(A7ISOyj1@T5fB5>E0Z~Yw>(x zZJ6h}vBq1IbQekwhYUXN_R8yaA5gJ*`jAyVJxYyZ|H0bQ5b=tP{C%N}#GB07zI+iU zgz&ZsXC{8#7?)`33`}shZWO~HQhI(?uS1I@2L3^sUgrtg)q#zi$A$Kh9ll>ve;!#L zSV-wcYo&!SWlx{N-DU~|ZwulBWjR6pP9@~6y~m~K53uF*<$jF5R4Idj9} zq>COunR4sCQZ<|Net6vX(e0tcpgU6!jakDSt(taTm+T>wd~Za;f^Mo&ulET{Ln(ob zn6jgvFT=N4W8{IQ)RdkQ6(A`2%PekAvh#?x#N7k7KWoNFLYxJNe=jdzICtC>2B5(v zlkZ=hJa}aU0n}CKM)$c;xnriy3sZQX;qay}TUAcEhu+Zj?``29+ays zPr#zsy0%G*HHi^Rb1m8i*Y3w8r+2eKsLW9`K*#8vM(wSr=~%K9>%%}6*L3R>^D?^w z@&t~a>1*^T#-;i&c8r_0k*4N_!z(IkN5y3Sw=a0pCMFLlavz)~Zsg}&dPQEmTi7KB zsHtV%@4Tr}cbEtIFarhScSvM|R4pjxOwC9F|ZZE4%}h~P^I17j}}+zdF!<-pASE& z_;2Hg=`Te*>lcvpsylNqUL1-R?e$B#aJ-f?eIM&TI<`sYA%Ds*T z-NlxSPkvtN*BcD7ImCEpY)V(-d4B(9eDngMNx$EjYip9VtH5PVLYK^ zwG1N84hw@vl|&8Rgs7e?tdTZFol2iCwv@7ePGZZAT1boUR^qeUtBE^4bpP5*{+d0K z=N#v1-1GC!t^N2O=p%5OJ{}QTEAl^m{FoOq%(Af}nR38DAQUd2Tc)ZLMq2lNqlVV0 z3Gb=rU%kPNKJ4TsK|%gFF_W3CV^bk?=i?ML53@Y{b3ubl=+c!pq#uP5-*%NsM*1?# zbP&;K`1$33T$kKHmlr-&LQQuG-z>6a|i zOaPl1ENkcx#_fSAuKby>qAG55hqX2k zfMSvO*kX4jA{#W3$vi1qeb+wIDdm)BZoJ5%%59T$QnMO;2!vWDzZ z3{UFF-A^w$*caOcby+z%coK8_Es%N@rZKp3A-!&BO*Vqk6vGzpNa5KlHV{O?FQIKI z)QS}LoTPJmXe2?5g~n9?&R9=Zp?~pfS#L|oj-U@=9Cp^1SZD4Qo--j7TeUs4z* zIp!9)T`py*L7>9XHVVUa=XzS@Tp4czFbna!8X|>l;HK~P+MjWq@L`lt@)@QIZWBEJv9!k1g z^E2$%yCZH(ee_cG|F^Yx=~a9gR`U1Hd(~~vs-iv>r(G{6>iXluSv89*5g~tQE(R}u z-7b@>{&X!~V=}CA+{hT$r$PcCI3o);b}a0GwM7OUthgA-P7$EDd<{x`P-40$vUvtT zkR)(aufrQZ5^eIdna%SNxcSVEl&X=X1eUA-usLfid&LJuA`PuJ^((g1H>TI$of z6!g}JHY&CSjRYy==fhP0zXO#Fd%&rb*J5hAEqj@Ha$fO&yM$UnDd3QLULaYxFl4?h z6_!mOC!ICS7A4awpx4o^I%sVvb8z3xG9fwHD6#!)?vEhd?N(1DLSXwolNQH24G74tzPSnkB^oMJu!d&s=&%EpGAv= zZeq#uw6geRT(f@^I zq7Bv7e&55?ll}O{FpK)z!{&h){_Kh3!m9YjDv^@N`NfMXL`TPSKv5|JK5EBGs#2$5`nt zDooQ~X&vBWaxZK{oo~wv?N7ON9gDNF0t~G+uD05ix2S*IZ%HV{J0-P%WsWb$zu%8@ zkUVGfeW~q{TA?AKpyYRezkmSVRtGtG()un1ZirjzEobuc-aIiiycr-f3cwylT?*=a zb!}{zpid%)!CRzVN=JT#nGK`8=8JEgM|-fIS`Q>3JgaQG%JH$L%%T#q_ylB0iK!K^ zUq|N_Jss_hthWOa`!{VCY^+ORDqt1%HPhVV826PbRVOH26x3eSCdv-g47X;J;5gxpsfEn~+s06J4TBQxeX6g0xI*>;w*FaK3rCRI#6G zE214rOD8Y+D2fZqx@mAAXrD)-k{6L1Sl54HaNTb+2=y7cw+>toZ4 zpM}fw*Vuniq)Q%i8c>z$<=qpnufa=A zJ$5415Np3SG22Oo1Mmr19&o-EhS|mpq*MZ9bp3EIC(A2$_dF9Vm7KZFftF;Cs|{(M z)Ck->YfcWM^fN0L;RJT8DukIZqF0};%2HCRFrl;l{*Hujcn+s+|EoiVv9m1)qtn7s zF-4tp!1-jL1;%QaQwtYk8Er_&{w(%Nu~Swg4CNS+^~*|MPHX0pHFpxaE~^zQb9M6Z z!BOnk<@pQkzeP{}yb*ls>YOxIq%QygR7s8vtD1g+xc>F7+QGl;dG-`-+}sa28prc| zBghkE!&TH;g=E-gf$K8Lg=|1t*{i><)={*?hT)GaG|m8f6g37J6{QvvI1BZAd7AqB zh_d5V64^IyK%?Yo%jHW@ujqBEkR-(zf@(pJFX`VmA;89~{wx>+b2yl+Q+jGM%R(wz zE-lw{U1k~zY)(VRy&vr*m@?~O+9Mcr&Z_?e!bmOI&76mksa^`bv4@lq& z%fyODf5NCM?kL2%v=zGdY}8r#6O3=a<4NQ>(_~1I?aMyKuBEZ<-h(_8Vx(YC_WKgU)$BtWjQQir8L1R;*ClD0UuIQnz( zM>1B<hk!sIL4o??sd3>4&%1V_4#fxH0nyy?`eG-?|(Ph1qo4$r1riIGqPQ>SA6d< zKM}}1N!>c`s7-3H9fHTXRNH9KeU``9@YTdt@sbRI^1Rfipz88gn zV{1&unLjwgf47(xf)`(=N(P75##TjO*BihH!DxGhtW&0lLIEz2UB)r4UiuG8SHOhT z_(x8_?d>TP^YiR{Xd?xjOO99~&+53XWZtbp*+4g_)mxPX$6r74u_4oqzyGEQE0OCz%(n&*o~qE*>OOwSOsa$+(l)_GH;731X7?Q%*X5m$z6qO(;zvo_Ey z$;FGVrdOO33NjB6W{@0hPcovHSb%Bd*pzdp*N(#Bg8|Fhu+9wnwk&CsX=15pjf2z@ zY&dj?F^xecTkW$*)Nn3hPq#+gqd8J!#+r&^ghI|gWA2Z@C>>wCIZi04<(oiuuZV^c zy9&)gUBO75behWM{cDR8*G{Q+r*kLszgFeG+*#~9e)3*jEjK;ja^p|2$?xP>e|^@z zwy=fv?LKmMT`hNf_8T$1R#fuuo7=tB66WX&&po0&gQ*1>pwrtqL2yPT>te(J zF4^-o^-E-p!@+Rnx-)cV;tS9>qX?c6Swp8b#Gneta6X5=YgqdDj`t z*jJC&)$IO(9FV*#eE4*{_ND7hjRU2mRhr-b={fHRj&aiV})8kd$ZA&Tu&Gp63%$*EiBGGBpd;ojy72%m)mUP-sow#Po#G`%)MeenUb`+J~$ZRXu1v3$I~Iy*Pb5 ziZA0kB`3n2ET08K6*`&|F#q6FO_DW~k9fNLhW{GZ%J~nC zy^*_L4FP_%DU2xI%$Pp$hX@O7EHXa>A^n;U(_XdQVMoFsn6Q;&;pZHNy7H(z8ujO- ze1x#(gd@%E>~|{PS9-xV8kD;Vzx~kgk}a#-f+X-zS`MbkifqSGORrQg!uwdVGS^dr ze3>+Q6uE(>k9RVy=J7sc{XQu=Eb&PzD*AaYU&g)-9z|5Ij33_9a)BP4-(CKq?xdIv z_JXK&kJIc$ZylFkR9lcADVdy09;KQUqGhr(3!#L6zdn+RPrF9&Oh4fvR9aRb#VjA7 zB9CP+Eq|Y$*5B}Kktydj7XjQs&QGtb3RH(Yj&P~G51CFmto~fcRO2j4(sA1YJL+rOA7?E)oGtO1Z~H~- zZv8D1R}!oa!`2nG7g`VYZI%EBrli~`{o9n(OPK?79u=7pv2_b~+HEWNSh3w*)<e`N!TS&tBE~w#? znB`|=nnwyp^lrhC$~uU=+d7qp3M*MfpVY@bRV4%)E`n{b`h~Y zBf;-0B)^OMr|N8d_EX)pqfP&Ld8nJ1|G2NG{R_{9Vd`4BI`qnQYtrTf-x*z&diwerbPb*#h${C7@D#Q6wn`3}VG5tC zIva_h%3;l&I+}FDk^=^cU%zyxcZQ|#Ja4kA7dC!`6__ydnGA|8FuBHgsQT#77yIEj z;;6az=cuJ>pZgI&=gY!uf+P`6>0D42t_;tXxwiIAEz*mkn_CsTC&Zs}V-HH=JTvif zYZ!DyEqpRnkgh=bM&fnc3$mcA=6;OHHl`G^&DR*Z5UeuxQ)ix*&#fh@II95okNf5L zyzK>TVbTBY(p-srl0tlbqc&EV+v02#I3f2puuo;)pty}<=_q9NFkZLtJ(U`)DQWeT zv(T4``0pV&JV#{?uHidgiEAgE>xg}p0kTY)H$z5OS%sKx?TN6;rKrT2J?jUiI#5)` zN&OD*`Iz};45G*qdgld-DV2knOc6Ob_*r*-C>CRmq|iZ`n&S=}>L+AROZnmTCM!xS z(^7aC^JoZ?1u6&Kn|%o%k!SL>B{l7)IlZgd zEE`(LWV`N-7f%KMDkI-Lp4-y*_(eNt?07z=e)be$Ok-wtW$L3fYInZ7cI_{EFxNs5 z^u|)JlIcgTo!uOFzKF25`snnV%@=5Df)G@Ty6%*IVBEXE@&bayu^e_-R^S;%2&Fk^ znqm^uP%MPAbFu7GML*U5gpHH`6E>K^fqk&Y$;JeNF;hV6)Y!{hP~eCJ#f@;VCgWk` z{c)s_9$fdGhVcgU$pc)WBs>n@9te_srw`oLx?_wXp>v84_r_N|IZZ-Ds_$L{KMv~` zrvr}ddFL2$m)n!jIX=y!_zXlsnQzTLdPZ-xU3M-89TpIW|_nE%6F z09S1gvyxbD*KS=egiEP_JMzvG@(u8HUwGu}!Rll4oVElOQBy{Ss2opg7fu@n9cVQ9 znlGz+R7xq2EE@rC;VFvqag{-ToYr$TQppJ{v=OhAqT^@OAlRYd1835)!V5I^S3(6) z^2hqxg`BN5E7G<({fOQpAn=8_0w{(V3;wQ78b_1qF%A~*3%QuKXDE)D21ivydLEd5 zmAo)X`TRHi-*p9*sAuPI*T+DGBq=6dWG4uSEcwlZTQZ^{MTvL2)W9}($Vpgg>zrT9y z%|fAYpu$0URcg0o#$&!2pYjTv;TP*}LxbTHVamA{`|I2<>g3&;lK zt@>4z)-rO25N;NG`M)!p{Fdv&!&gzUhs>QzNIU4Vbth+#??BjyGAZDV%GZs`ZZ~l? z@VW353SnKQlzo;JM5ZarnLJ}1m^nb*wJBRfYh)A6WKe0&S0=Ja5Mn`#Cc6@ucyhAL z6`2PV7nz&adOWtITUtnI`@^XO2o-Q=w&o32JNIF4AD7+^?EyFRp30p%fUsDj2h*dY z^pt8_Xsu7|p`E)_TsyrOV$I$RLJFF|oQr=k$TECvmJ~k>Xlid|ww!(P2{;h%grC-SsMp(@aQy}0k)R_umS*hR!e9UF(KU}wuSe<#s8;MTpd8^idAml zDjAwF;5)8Jv4qd@PS3@1Ku!=O&7=5>jonD#7pZ4QnU)O8Z?A{yn36ep??9!~NtrLo zHI3!HEyd8_&yLoH;=$KTEy@KmpO(Lt$YhWlWZ_*|jMM4+m}RL<0bo-P@9oGMe~o0j zrobXY=_*lhvHRezns!I+gN&VDx>ik5#PDMQdolWE|0JH2`AUYIB>%C>8$2H#n5SdE zto=b%N8C+3!qhy8aD2)sQHuR>gvf~)1&7BcwLp>5pX8~ob)x%IS(kKX3$Z_gmQ zN569;ALXY~T#=cJacC;Ib_EYMOuZccCYeC$R%@EcFCfE#5b`#ZH0$evaaD)yD9kHp zS0D#pK-!Ew#Mi^GvdIt3o$v#~x`1AJgO6*XetzJ1-i`VU*5?l>1nEW-!#aI$3A2W1 z1&#Y!xn+HX?5?Y?H16H?J`{;AB2o^Lw%jDeavDHz87YaQ(a0!wID{l-Nm|sd z7kxJ&A%O!Yt}EI`W+fEJBmSvEu*ocet!Jf$))1v9Cs4x(p@f_2xl7vl5-Sz7Rwb|| zs~V`>6s-6Nj}#W`P1ZyobvQ2sVGc9|$bw08>$F-9M}x1;$D7pg{3;z${HL<{C9P9?VYfQF1l1nPIBdkfiM+(E#qP(vOnjs6mh)!k8t(Uz^x-Qk z9hPG9aE)=Y9E!T7MXdwliy1kOkbt9JGQH^+lB57O8SCMnZdwqlQaGpptP1WI%5XNG z5%57E|IuzTo3(%3O$p~>5`*b}FcI!7*AxEE9u>g82@FDzbk!uAUw}xVHVEks3EMOo zOp6Op!NRT1xn^Knk`uhsr|Y9Px9%6(S!bi-Xl$m;3Ky3hB)r{{F2uyWyIfU9?gLqhc7DtveNR^JAo?gNh;3 zamjK<*@`L>Jc@i2RyHdFLcSldE8LbHt({la-|vHNS_T6B4YFA-QkE#1gA5jq9^Z0U*6a4eM7UZ0`k$ zfk_JM2dFFX=gdiyb|yPsvg4@vhdqU3;6)7z%viRF`dpKE-u+3wV^l5(bn^NeA3@D#=Kbc}U$xZ0P$T&#VL_pYuq$ z>9%M=d+rx$ie!gVB9lZ}=;SnPgrsOZsA1QzSRG30j(~R*wEp9duTfYckiKPXStuV~ z@uZoW6?lwJc|>3YHEy(bNdw1I!%x+X?X1Yz1QBHXbg`=&CG|4XFX>B4WO_SOD5%7oC`e2!yw_&-9on}QXfnTbb zOP`-DL40EpAdcVN^LefVYi|{dj?GoBl$cS^1J1?Y^;D>eAd(~C z%F)(=c)~SJQPZXq-Q6LjdWU<j+3q zQu(#%*l&8mFDsx~?jqenIkaLJ0T@Y!5*CA&%<(rB%rJx@SPRljH#0u!5MrEpVj;Tz z2$+sYRgGR&ETeCCRi)f=QMrXrn2SbS8YEe#DVx6;?UiVzIrd%ime>1Ct@?HjuM7^w zDDqqUdb)6ws>SKUNa9$DaX_f`lx4wq{o42HD!WX+LayKHkC*1wFHHYFz4`9@xB$26 zZi zzxsTa0>0J%Z+Fx%zycaWx}R!nMcxTn@*{aSrS*f%Nd8k#PsIgfOA8~;$y3;ea6&5 z0&!=3Z+DzcM750p?PFWMkUXRVO&^^^NsD}qv%U5_*chG&sYAibYyHS>h!7{B(i!Da zC{(a_+se9*Wg1(28KaViC?K%_oj13afC+WM$69D>q#(VUcsR<2)Qus<9E>&7Q^BP} z(m&Ur$eK)&Oh&^S%RdqXO{a>5#2uQJ;V^Y?2s1+HC3F<8<;g>%)a%ku7?UxskhmbP zC(~|=&5j;)Q zej5btAo+uQt=~9%v=6jZQJ2Xv7xiI+4z2HToJ{1?bfpf)| zO>BW+l#qE`8?7(r$I^JrIAC1E{Y?LTE>hik(d7E?| zU=8YEPCs-&lwrL^d>xjC!Kw|vASc?7C1|hIP$txD!u;%cda;^?{K^1)1r7{kp%T0U zvWZebn;6t`si|iWmIt1mD?-*YtOtJ}m7^(aV^%Zmd|amiSgJY$ma>UixZF4|KrVpF z&(eYpWo&AjC@75qj?HQlAb_H%Ia7IgO)O>E3+dRE4{jx+k^oA}Q|}r^K8Om-Q&&&D zn5LI6IgzwMyuPL!ai`zuGGZT=p*U3)Zw%p$4F44M;qTJ-f7|(hH=U6Dx0h0?C6xjS zie%c(*r_L7S6=4InGbEDjkmtIwlqXw?s!usn2-@(LjI}tN|!!xcH}1kf|>(Ez~^(| zW(xDb$1CKJVw)Z6T-YmJ0b8<7ai#|o86)~t`(&<0S24BUws4h(2Q<{K9&Ob5 zm9dAN{C3<9e1|vX0P<9CV=6>c<&0*HDU1%$n@nnEOT|KHR~S+d|D(zx6e70!vnH8F5sBmv zp1mqgbYzwdau2m>{EdH}p+tvv9a=K5b?E^vLN%c2^Z+(um-VYjVzETJ!%T^)`nhsD zk2;x8Ch^VD#=V{Q9_Ldqm=NrDYu5vsYD39?<4D4V+VYf)@yT>H*>+$3!1lVAkhD+k z_{h7rCl>wGOm~!KpL#Ud%^C_fV$m(F0J}TMrvd<#Ui1~BPjJR>fyJX>5#zI5g`?r* zsRJA6hoivwSK7_~uMd^MB`*T|pH9I8=5xTWIxkRa0$(j%CcZF%6btMn9)xRVf>etn zun^-R`29(-UK^6KLu2IXZ<=@r(8FOGoYuEd-SM8^9q$vR@5gNtmx=%D-H;+_7C|ft z6amR&>&S2eo&*AipT8U8Sp(jF$%B2n zh-|UG!gcG}JvRcuq5_{F#DjNE))EemM(R=N`HE9op8kjlra*-^(`vVACk)CH>9Ebh zRN4tz=AXi7Gm~?9g7tXeOr|KZ483&Sv6NBM7#6u1Tu+wNho$s@(`1VfZe2Kx7dR?qu|#x4?pBy zTzqa)3A6vjL<9gcK0PD8wH1dq0G3Jn2{`C~8tvXOlGr$FMYCbfAKmJ61Ow90@3WJx zy*f{!9EK1g@k0aYn_Psj3Eh*C8g9>1SLsq&{YXR{RRvh0E#}t*-2d6i8L2&6CNS}p z{P$riIN=xswm#7{gh6>|>zwB70)Bp0+nvqdCF}Xj$D@6I84zKAp7{Au)6m3q!b~%> zWQ?Y6sdkW$xx-n2fM|j%-o<8#op(vPgEzLHlFzrM>}nDzZ%w-?;|x6|iFO%L+J(;z z>R)CW&IlhcSdoR2cGN6r_qS7HYuLIV3{+Qn04*91xJIwbo_3HMm3A;I6@o@Ohb*?z zXyB8mMAR0a$!w_t8cLF7(64WAgf_)s?JVi^A>~Q(gRWa}7)*9*jk+D6 ztiLtin(pUcgZ6JDsGkmPfSVxy@#$Qk3QsvuJiNo7E3NjdS4&b%LZ8y@uulXs2kLM8 z+s@o?o<$b)jk7IEz0d&9k&|FxjK9V`=u_OBVzqzw0!QwHy03S181RzydSB~}ldWw% zCqt`3uKNz>%dHM?9tgf5u#4xA*I7wHD;q(g!W&B~7p2AKWI3d}EUhrygHMw}fSOW1 zEj!tKpDxHK@rw|ZTt_mQP1-+42sPHzq0(H538 zk@5sAP{-cPKre0CflrYuzHNBZ%8X=Nr%0z%GNggW|7oS@y8a^8Puw^o&*zq_ky9E` zQbz~!!g?KlkCCB{D?#d^T4;UP9f6`&8RZYHU*Ci_9(0SUthR<-A*xDXm*;QAZBK43 zv$KWge2JF`44c!LsHd5doY`1-H^8KV-(@e_AxOyvn+>SGh)K*iPV}b``d4g)sYj#zwx#j(qsWP zKlrI{*T44bKMd=5SF`UFaNoo$W&O=gUwM~*IWYYr+w@h}d_%**jF~-S3QbqPbrOR+ z3$2?f9|cX>Yo^h_@TmG@7LriArtiVcx=!0j_i;wkx-BIiD6mQ+&MG6&->jRw3PXr# zN+|#s^Su=sZCR+BpLqH7Q8qOOaM!h>V^PlNIhcXb&N#L(jHa3ablu)!*JA+q^&xLteb%l77Z#{i)btnC$^1Um0`dQS|s$oT1VHbrzRle=1U)IJ? z-iQc4SYL^_e~vks{7`n@=eBm(8kxLDR$N_IC-NZIz4Fi@f9H{&P7sk5Yl14VSf(!Q z6z*iVsm59}k_8r&lVP2xSD(YdpmCP05Kkxc`|K-p1H`%X(x#VXMUM|%Jj`jDijRS! z&Q6`iNcA>l2T8HgB?mc4|M{kaI|7ItM(A69>>uBCLisz+hhl@-z!s> zs<|2etPnu#N8;{U5t!?fAV(E+mm+SbJxOf%cP;*rQr)se$(O41NnX)C_42Ym`vnV2 zE#6;wnUbPuz1-i@4ON8u!3$@2$Suo7#&hR-Yx5)pgxCeOz2t{4{FgsA91D!-J3U zwK4-aeRG;gVO46MaWTK#>p^tAOr3a$3@8 z8?M;cKOmR-;~wp2YGV3=N9Ot004R`J&3#J*TmR1Q1lVL<{Ch@K3nTy-Az=9L*_HQ^ zh5yZnQ;nrQ%PiTJudAbF1}Xdx9GC;U*bJLEB_CZ+o*Do9DdEFJZ7&#UItXGvn=c(~ zSdUitEH1;6sHlV6byMwJ1Dr>P)Z{Vxjk_>ctsHiHwT>G&*!mU}+YOuFwRD@ni|mF>{6M7$hl`W3J8SG?8t~8;jGE zZvUi{B^CTM;Ma9k(#X9*OZ?0ClrN?4Wsb{+gom2kEj}zMnS6aX!E}7edCz5PXHWju zwN@SC@!WdD_|%-`qsLWw@A?c=mJk1WW%ik_&))L6v|rk#A4-2;z4jX8`}H-0<8rXo zuMe+JBmL-K97U1DJNvz1$MnXD^e{qRfE63fuggvTI0}!M8M>KARhzh>D1n%<9|$nS zcTP`Pt5=+}`I%)^-gSnnan-1OZV;sd`40{W?hNm76w408=MQ0*pGgLQDdJq);@Kbph#RYW*RL}I$wkJt&PVIln$UDrl8gU*Tvi3FAhel}G`SVbQQo{& z!rrBrUZ){WJ;vyF(4nD9@g;4MIKN#r*!lj3wTA0#Sd`yQtMt!NFIY1~l)?paxNj@;KK@a-_h87vi#d35 z3>F!_JU%9~pmJWhr~XxC071PzPI1tAlK7Y(3eW}Cz6r(6wfpg^-+%#NUI)PTi6X&QBKLo) zkDARmgky(1?x`FHTWd0znxuHgHxeK%>+J1fv9R_acxAq^cBbf65S&mRpvDPa-X!Qu zsYY4e`fU1ye`nya`%`)=L-W%&L#MafH*WCN3V+9~EIzd^W+57j zGHKlw%-7?LDYc4QqUzAKlBV-E%VsnYbX1l87-P!g12%#Pw0Ml^FF}bJE7U=G>FLbB zocX2FKPGEP2Q*``wF$aZv38c)j6FCTIw>5Z2wHDTb3&7lQ1?vRR&-hfryvqb3o{M2 zU{cMN0LVH`uk2}2W|(yu2r;N;SDGTa*y6rWk?8-B51_lskvm(|$R{Vs(XHM!`9%Wj zx;1BM0Fan?Z)}jAT_MVd{B#E#s_y*TI8Tdz5yh3Ozj(tw`RB=u@Er1fnu-dYK($Y) zQ_wb35^(Ep)F>Z>PZDs>w*sX5)6<_!4MU^38=Kxo1O8ce3Y@;fgCn15AORCKPKe%d zAU^Ukmrv*{oHQ+rI<4i)zq7_Ce^vgv0KkMy$$MWCU_);QK_BLCquiVE z@nH<@Lkv-8qCMM85@*h5ioNGE9S!;`1q3i2E_+Xr*?Zh|%84|xn0tBh#zovUQ&v1D zPUJXpveoszMaK7zJN7qjuS@FAYnob6Uo{Bmsq^;Gm27Fj2QX@gz0L|;laJG-L_H^3 zFxmqIGkjfDPDg2i<>xQ`typI>%JdbSHE2Wtv{j5KSTm2eX`5M@8CAorku_9W&^m>5 z)V)P!w9cG2DwR=7Ar(yn`sj$V#ZodpmwzeSf!;#FXR}j>mh_^iYWSk?14cn}vl-$U z4-BUFxF)F(`R85rfHa15-I3(puf>-VNMlhf3IL*;k2xyrAS4;3 zUoLZxc2Tz+BrMZrfXKz`FNpy0pd7vPQ~iS7X>;3pC+BTf%xs;)=Ht~MVB-NF3*rZM zQMLY$QVMBb57)H2U(0Ld>m@)`5+o!`;UKql;^&8UUMVkc90vd_&9lIg_|`Bt*WW!;0|4;wJChx5j~uoC)#=f7bmI6zWbG#F}}?wC_n#YmJ-Y(oxcN z#0~~zA5Mew=%ow`sRkvP$q@z>9k{e9RmBFgBPQTjX2|@W>ynZ>_lGt;mjZMZ5Rw7O zB8a2;&pK>Eh808@COh3VJwZAfKc;Qq$4~ESfV6*cqRE*>inA0V)vgrs5iPr7N;FOu zF~Kli*#l)A7bB9~yAG&~`Z5~DZ;NI8*paP}<*Rh6C-KydTdTspb;@~HSYLHL^SZR> zK3}2U5Q>%I9^Q)`;qZC<9VbAapKm=emN{p&?Ok2<=YWE9=-sI5xpkFsX|C*Y( zJ{3G5Bn-B}x+e(Y3vr^reP;0KV)IuXAU@*Pt529e4S%C%e~6eaK+;hmsQ^gAUK!b% z5R^z(<=_Qi?mv$_D^hcLSqTNyI^CUMe=wi9n5xXH62x+!VBEZ^n=1GYV#NGnT92YS z`{KAcm4>|I3;4)6gwp>hJAhB6v=muHcXIkz_=)1wmA4x#H(#@&jPh@IrPv_1ZMOD2z3~lfR-hEi?|LO`4%a zJ0|rZ{&FG}!od6N)4XIaUfi$OR2q46K~IzwcmVN>4X<>zV=4*H`>808y(l=L?ALwn~yYm|e|9s=}TygyHWM^b_=b-N!kdgtmAwzlyw<>su4^a5zT)n&IDCT2uRa62<(f1u{_sXs1Ph6jS9H%=zIk2=lqt%Jaj9lu?5Hx`|qScz9spe z;$i%MiU%wBi~mQ|Sw}VfMt}UXu_4Vs7^6oBBOMK*IARD$m!yu-9Rd=HqZ{cKkdhkG zNXh6f2|>aD1qm@hLEyLV@BGgB{j;+_c6QF5&$H(~_kG{@bu%m@-uCU7qMaanNUhem%nydJ)QpCm;N%A*T4Pvou0iKRaU5jiwmWMWuR9@G!jN* z7p>LxNW#u0v#KlKb(tYTS+%8NJv=J)ysbiyG+JS6e~fLq?dKL36wP8jXLuD> zu{(=RPxW5BI*sq0@?>P2&2uP6X`0<;m19aySHj?K#YKCR7~Vog%cqo6H-boBA~CFZ8ee;saP#BAww-=&1RQTLvZStUZ?C+& z=D=Wf|4--&zU#}5)8W`5_-d$t;(hJcXN6#rdg7EmAbOSFUxu3b*eDtJ|Tl{bx?hTS~P9a(w2V!13DDrK3Z65ZdA2$;&sK@2@X@<`Ke;TX8y;5t9(? zvLh{b+`m}3O_duds2|Yts=iTF#-^rOK^k{EpF-ZVs@l_D9?Z0$1l4hB4-)9%hS0VvXbCp@TCS6vMM2hUtUtyIG-z;21=%H`z_dNCD86? zRx?+O(meBF$LxrTMex_TQcL-zB~s{z zIkxxP_g3=u*zRPUE`=36C_09IZt_+9+B0?UsC)8sw)ukMMmNA>DB~%6bB6YYKL~4{ z0x#wd7y9D<=-%avG`D@WCyVhRO+h|xO`o0Iez@w>0UYf^v;-(soDH?9J@(Ikix$lf zU^YbAzcK1EhT5JObQnN4Y()m@^5kDrSQ|>!`kBI zr?(m8LU-u~o>vJKL{-;@MCDbwGg4P6hhGKLHA-;^dr*zW1&@+I040nmwRd3;jG+do z==vYp34DF>m0UGK9tQ^_P*WL*hs{7Xp{D-*5ZoPBMWz;nYJAx02HOX?P~FOXE6YeYw4D_n^L?a zyeSqs_D^8qf%)0`RAz4F*9S6LR!{1MSsOD|Ato(V$rjA5{z#Y=6HJ0tP9%>%8Bv9J z9XEaoGG0c;rqj1gv<<*2n5fEghB%CfW`HZ%gUa9m_n7~n)sN_wuM@bv*tTH80gF=a zf=b;DAHsEyir4PQ;bHW2$#XSPM5x_3A5*4m6)PRQcJ>1*9|H358j=_AIrazhFD@=9fphXn!{i^~)F?FJ z&J{z2oyAo-B@FbI5zNOCPxfYFNVh`T(%i0nUxmqO@Y9Rk@p(tqm71ddI(f@<-C66S z66?Ku^`LfZH{(&HeZyBP>*VN1rEqF^n~8^ez@F%DEj~P!wc5q74~S5ExoNrswWo!` zuOz!%wwIES;7LoyY#JM~{BoJgb!h--D0Oka3A)G*C-;VMR+sRF8XBM)%L>(Oa-1wF z!Ap(5PUwm2!$~9);)t`Fjd`X@OMx$S^D$*ObGbSOQ02@Zzy=@C9+Mrp3l0o2$S z(<@trJ3ZE+>91->4qjfoojQs<9qj30>3A2sPPO#;xR_UR_*c8D!LbKt=z#Q_Z;ySp zDaB8F=eIX#4fH%gFRlW@=cn)9*$;bpoltIU$1Kn`1WHxpMd>U-8^KmV;&;FG{reeg z$&G`Yg9OFNcZf;;|H3RG=a;$dNl~p(Ey!|8Vf8uP_Pro4Wq`2NQ&bK-{Qiv^P;r?A zI0h+Xdh4DwxPZ9qH2Z6I^nyazMxq5}zn5=Z>WlTcXp_43udvLs%*}KBE?KkMFDh_2 z{^!f}5Rtz4;zUv!Vu@CEfj9{Qa|bYdR<0qM0Jh zL#(n=4XKgUvcsj`RFO=i^oD`OY%o}Xnj0zZoDyM0m!1VdQ+Aues-YrO4tx||+RVn# zQ3QlSl+ZQ{j=&{L0hA_8C{tFoIPhEy#h$ro1dLVUnra15VFVL_?q@(Pj6pR!MR<*> zzHAnWY5Y`msmY_c8;k3~^W}{-!rY#^Qw!)sY4Y5GnEA!nL*QV(XGZ0D=i|=sqUkgA zVc6-uA1en3NB&mt%J#v@ADiv1g<$N1`$t=X{%reSuZNyg9uMgP@b|s7wR(|uQ~Gr> z^i4@jOilE_S2T!(;6uW#?+Q9~pJYY-rdp%IARgKS-^c&F0We)z;cC0h7sq126-&w2 z8VZBw!82z4=ar@u`d|oBU%F=paS8@sw%Hq0p`3G-COC4#IFHM{4sZIb`sNOJA zD)vPR`>R)OzqOml&lP=JwOC<*Wz4ItYI$$@i;IP?E@C$8?Txhi@0{fZrDP}g#&Q!~ zk@P7Y)$ ze`FL=91DcNt<2f$5HiWB73Rn&T>_kFwHp%^ppMt5<_Fcb&6njLC8&ZaFUM@&g=G2W zvBEqcf{Tq*Zl+R*F++~*Wkx=`oXX2Tbn<-}f>k&=O$sF%s+@V&9_eM@#~qGcT$R3D z(iN+6p2v4JHrabijQ=QHLagg2cXDc{GSngP=HmLd?(K2JgKve&2et3>ZC*X-MbJi+cgHf5-x)pb(cFBmzM)7Z!X8Q5k1NdG(cvh1qDh-O#1?Ao7~7H1mxdyk0HbnaVs zIfK%Aat9amd?Gp{rLg(m^);%BcW!_&!nSOnOLug-`F*v(~^ z2Hu{`$}SgAp%9{sCqbTFMoQ;%q=&aWEN!h#5@&W4qbc)sw4p(TL4i2ARdQX-Nc-B@ z{j5s22S?mPJ#4*?FFuhe|L=G?w^n8r#@hdC6VBY_Pn1`#9bYt`s`4O1^N(lgfuIk- zJVBH=!qR6m>QKDX3k3A7W?>3Uo!3t-PFH!4d1-aNx0}g}Yevpe?mqvCClP#=-wvu} zJRBxRfVg_W_O3V}E`fRe-$%HJ1`D8(&DeafuS*u_6iq=4ei5&G-qSNsAR}$iC#>7z zC-eZIY9meh_B1Teq1CM_LH$x1`SK3z%-nzPU+NWkWw-8VwOr6a&t+4dp&*{hYF?BX zO>}g`?$lpQ2ET4!Q<<#Ns&foyH9xeX*LIxM*|XmFW5Uvj6VYe_pr>E0S0##9r;s;O z9g4$M=KcWNf!ZPf!(0@THMiCm?1T6cBNCA7p}oprl!??v<|ZtX;fk|Y;>g+{d6G}` zu-bgMXr(AizlDjf3(U8}#K^%^3gE zX0A?M&enN%rqem#;>JCjMeoqITzqO^qJdBuaDTaJ-K9~5<42b8V4N)XZZn|G>}e78 zU-tCP%@6?YF$8^YS<4Ag1{1E{%js0?P5^*Ft`Tw>@>P(j7E6XEO~omMCz%Tr!L4cu ze=kAE5_Z#M`lg+FdTpDfbgoU?{gsSx-Nacd`FxpuBoa4SGU7 z>;f@m_u}Kv30X?u#VcLLL4Gld+y>EFPX!O#=<+NEk-#>oI?Lq`@fg%cPqnI9`*D1( z83p)2QiQw1*VO0NZ$AA^JYAh=cA!0?)15zC`p_L)JYm4OtoEQU$va;^ zTL!?}7{VhlVsyXZ>u0IY!^f^sBZJPLGM6k*PX?9zDl~CCd{DB;#*#`%_AJq{iT6Yk z$d0&B0V<7ick;4-e7AkvbZ^=Ze)am=1%arj3mB%-EcLg(| z&k)$IN+uRlwM(TO(T)lLxp=}qj40Wajpwq2BcF>aV-O(yItMN@geXZzXavbh`J_}F z867heK}xs;itM@_^|Zol6o^1rLs;qIWkHRNhBj1*FhkV1Ki+go(OATXicqtl`?AW# zR5?-*RbpX|i0Z@9B>UjB09Jq*2$QUuP7l3fF7r~1y=JHVvDs^f_yo7nw6135ZOg|; z*Jpb9Hp|BJUUhA68a%0XCWMvn$3XqgSL6;}%&aSOvyc4S|1g;u4Q=#0GNBfj*S;`t z24mnKIW~ScOV?g}a|$Hr_pn>x*)fz?DTC;a0|u5Kc4N)Rp;Tgnp`(C*i|WB6>+Q~e z)b`|M|Fb!|TKwV`fsU~BA3ON}1c%`N7aYhvoqz+2&LEsDGI)?tocI5ChG`htW)Vtm z35mUHsS!chh4W{0e>KL}kCrajnx1uU3w~n$J}F9}1XA;AB6KBN zN}k)0Jus;3sezci*V<(3A#yiR`$YFxQMElPQwJ# zgVI?nLl!KbV5Kf(G;u5fahqo0Y9C_z$}ijQb#{Mcy@U4isvxnb+O+um?B~Bw36f=B1Ew;+I-{baWswhkpjsZcjH zz6W2RbIiCY-#>+thbl`k=%PCfXuXYHRLOsrm_;?k-m*9h^IwM|r1XKnVqxi*M=egz zK0`anLBggCS~k4%AkkU-R;8=EzxveLO@XYJ+92jR6udt~KF9 z9JSJckqNpw3P)~{Q5Z8&tyN@ITpaoeqeh7t3GQylf)$`mj1c7zrwUrAp`v~5f<|fr zM&%Ex2XkS>1VkNw0tl-?GFNBnx%-5kP)!A(z%1B=%>-zKl_ns+j{J$zEK?#S~-Q8D_eL*DLMU}Ednn&k*$?gN`3 z`R{UTWCGRkYepgEhTm{f6yNb`-8*(|Yv+84;KD*WvqHlhJ!jomeR_T(mWfz`n~UcM z!v$!j$IYU}8z?$T>p4on;0bUzypifMoHp0ATk8dj*sxEta`7EKy-f@P_BuV+<$zU8 z)w6;EB67={NU07g8-ayL5Qqwz(H$+Z^V-$dA>;+3GJfR!tD^tM_o--!#Bc5ItT1mw zzHRJR{_G~FW2*_gp^r!>Dt{{`E_!FlfdSP*Mc&}X$FB6T>YTH ztC`&3A#j02v&Usxmez$hY!bgYCU3~JQcWQJbz7Pd!0Af_0ZCPcH3vE-R6a;-xFDod zn+AFtNn$vFsbQ_Iz)+gu)<@#gNiML+krb(QD2sb0*SFjjyAb^h2ojUHLo1?B9ZeU0 zO*O<=mkrOv*^n?Yaxt zb-#uvs8bYtujSf)_uK#A;h0zcOc(suyR)Iz2M;g)x=%iXJ@4wOwmY#b|GIAi5}dTT zJE1Idv@8!TnDn{BcpCeK9Z#XWLNy|goTVbDn zLh5paxyOa29cZ-Ej?%_MZ}u>9dJ@C*pY2`-RLN?baf#;d$&5#%cIL48U(-xq94oB5 zbnEWXU<`eU4o3J#^o_EOYHdRnwR&}VR-(wHEBKOm9jW~7ujslmMX1v zm+SH7_Gkok?I*P?_>fs6zGNvAElmaOi!=0$WTW`SQHjP(&{!1mw}I;;RB^;=w<-i+ zv}lYH7}pZ{@UlXx)nc!d(D*w97DXl2PZ&}f<=A9tzl_qmo?tkk_$U;=D;!gr=-Pa9 z@@?~L|Mb1QHOKt1v%UWP;GHd%zs2)DRtNNdSpr1F={|Qj>yE||9et7(8%5Fb-%y_bO zg&gue>EZ`YABXg3;TlAWY>afwZ%>=Hlg}u1qxnyeUyC>d!$9Z zTyw4%Pll+s%H@%wx;X9L*__lVf+(P-4aQxcCsj4G&AQ}IbHhSiuD)v8wc_;)5mkQk z@F;J@vdiG>^Nl)oQRizj`-S@N$CL`Wf@p+7En?fBJx}j{Bp+M4oz$)SRYfL{w61%< z4fVAna&165m={2cX%GZ3Z&dl^ygbfAa70oh9pQl0gz*WT^w*!EIk!B?XHs0BWU-jv z_J<(y*$>2I`m?J;h^*B#M>N;j&XtWdSD_l}ywvGEE=0Yz`c`bT zw;WcyUFp9uLz6;ICR7>+x0;*|ch)_d*xb9V3L@nwJu6jCIbR1nPvEnJOzkXGNJbM; z9~Y`Pu=VB0*B`SZIU+4ymo%kuI}xLFLYl4Ak;4qpVEh|@m-U2FLs|k(7Y1qK5&)C5 za;3$m-B}|-q%?p*x@b$U1-yi9%D#RcQF;}-FAXVGl%-T1+%=Z4;P0x5 z(@b-WG4~f?Mq+Poa~MdqLeg}>z>9p*owc$bw!+?C*w}uSwijJX)8~$DD#ywOH_sYk zpLYST&)A%Q_8oxpSEkg@oEdLiL}^ohz8M<4^wcVU^Y?FMFSh|Y(}QzUy(Kg^7z%0)I~5nW6n29fp8_S7g#DojBD*Y@Te&IN-)i% z+0&Uk3L$wmaQGGZPE-7TQchI8j&sPXY?T!a_%nwIHE_frgx@Ag!{yocw|xD# z`*)%2w50yJdCj=2?*yty21juN|glRmT*^0q3Jvx(hFhxuCAl%e; zss1iB+JbE6zDi&gFx>5fQUhL>vA%TFhTs^qi<5+oDMM)nP1;xx5cFJOf8tTplfMuC z#hsq32=)kH93Jl%U*|NY-*&wsbKN#+``rca$tMv)QQ>y@{ZNXHMf&a60!x9cnaSO^ zi<|YhFLl`;cpJQZdGNFyy|qe@#yJS`)wzgkxOlXJya=+=_^Q@#;{*UX`}sz%_sFym zIa{?MLw>U;-2u$j-v^@oZ1+A6UDzwEJtH%XxK1uVF#$-{@WU6tNyn!PFmQL2E}ZK8 z((4~~VnPjhe0n;Mk+!wO%(4SGgbW=|!0Wy(z;e2o&*hRc1}_%2L`#9G^Sz7wg+dny zU=c2Bubs)A;Ed34e38~5L!S{k<*~~CmWNL}yOmrY9#}B5Sf;?DSVbrca}$ybMPM>W zi_4CP#nYt5Wed|#vsz<*3;}VA72&r&oRi}sR%6C0A+H96OT|&aBmgZDlq9T9=(n*u zF=DJ{4GF6%K5@os@%jRu+v2WNHJrB?0zdV9 zaV-_OGB#)`;Dwe*Je? z=aa*O2X{`-#mqZsa@$`r4*weAymR799t$&WnO{lrqUQpTFlmzKax(x1XcwVi2s{CF zmfm3jqwv}K&HU4^YxJ-g@EJ%3CS^jVZ)zw~{yL5}COoovL_0rGnD*QqWqg>;2HEt3L`fZBzfG$$tM+vMF6;vL6RV&xPx(Y4d|raj zG%J4t+_d06V~DS=wknVSWA^~cOI;wKlGToM3w%YLnO-CaHp8F5uc^@j0a30jlM;|* zK2WmyD#BhZR-c~^786C~uCSJCsK~&#`o-uP<+V{4X>MlD^){f!jEQrPNeaXAQAb%s zV9|C3TT~j9cvWiM_^RciANR|0(at>;dO`YAx!^uNSHhQKuUtD5y8CYbe)=nnJv2Bx zEn1IpI;Y4K{_?4X=ekVZsVsV(;t-Hod2RVlZ*lW!W$=03MYl70rTZ)$v$WEt^7hK4 zerC_sisPX;T7I*lY42+ZFh-=4X_r?o_}$fN!_Y+%VrBJCfI!d_WAeY>OKS zS$c#y9DlIOlplTe_~hvN#in;I<)$zB6aObTRR6!=KyGCPHl~(m5f`pxi6Q2~oeb3s zB>Nj4k-ZN77giVdHxwp)N-+BL)px%gB`Bo_O!B%&e)|K92gSVEW2r5P``JSHP*oPz z=J}}d^Xq)_w`m+1xhzfY%i3>t#@MKxdNtB9G8(&YxK<$!Q=#%@zQAip zV39=8LJ~zZhy$t`<#d89{u=!DgQNU>lx3!Ibdg1B1Vt7PY0QvSOhUZ9%S2XQE&*j^ z<9prC!r{R)a$ml205N|Rqq@3KH}2?%iW4vyqC=bPfA9-=VYxt|gqbd1is?3c{;#Fd zAbnv~eFk(bJVWg9Vf|T?b4b3RveNY*POJCXLJ;SzjxGY$p&|SCy+?b!F6wG6)=bYN zy(gSXR=IvJEj3_Bdpf_2!P-opMLkzu(J1ufQSi6mkEWe~TS4 zX4K{58U;YO>TEV;r=ef-Wz4sS_3i_;guYIbh?Y#%F`LgG#!uEt>GaGUES|W!Qx4pn zM4PcJYA(egb<9++PqS9s5X;mckehrhxYQ`EzA$m8p_-+h%flI#0C4{LG589kTy~Ww zPj4C=%c|E0OoL*^3a4DnPX@a~W;erwgJPR=dE#GO=qQbh6ouEv4*~CIr0gf(zC3#8 zd3=^l1VBJ{Q}_B1l7>JA5?&*v57Bo-H~cyCm+UeWd2guwvZ~iv{(@@-j5W_4oHrMGDOmQ&!%4s#Th(Hw8-lXK#~qc6*?&rhysr2*-8Q_$v46Rzrq*iG*n3-6 znqAbSw&zhYBEjN?gcJ)w0=aYBEXhJ#(h(BXbW6w_jX;++UZTTMXR+?Wh{jBVRP>QP zQPfZ>a9JOL-rOuMN;d%6zy%~mOIg^K8ONF2i?7n+$2GVBsdSeWf2_}k3fn>_G_s0Brv3wc+&xh-h;` zyP28NqqWJl#~F75Rh=EBZrI*YeX3+gx$#wN%+1jg>Hq*tA2c++%pBo~WYIy8?#Lbk z#(l>Fn1{3sJrUg!h=${iE1OU<(30o!z@KAqiUEP4oDGf{@m%dD?VOtBcA072l zZgbT@h`H5#Up&U_5}DOJ*|D%tKk&HY-)HWCEwuyvUxWtq_YPTPvx@bAWE z|4p|t93neu+68+*Ymm#)HUFscWtRA;U(%w6sV+q{UtEO@1biE!ie*TZQWK&w9G{jZ zjL@i0(4^838YOhhqM(r&@MfFnV_s^KbksAwat;!clwcM!8VOW6ufJVtRSZ(N+`kKIGKwlpC zD=#N^OzU6B1y9L&It?DAyNPko>%C#{Kwawoewf#-nLDH@cw3r(F4j%nT$3mW;bPk8}IxpMuEJL+bqaee7rZ*S);w)K#gw(8e zY#s2?*+L5~qrK5{Qw`>{Ha<%9P*dvrrC@R$07pml@(w3C5>HlF;VZ*m6H_;TvtRPC z!M)M^qCDz*jCX-*^tL9SBuKx@Kc07Hoyo2vFLftN?P|t?Q=mWkog&Na1}&Qi`8Ze4 zhL0?7#^ZXHEh)rxNe#FPb(T7WS*?j#tJNZo4i$0DVZ5!6fjg#+&R8u9+aOAr1QjAt zJKC#>q*fZSsP>iKzFf4h9GE;Gfp%QoECIx2s{>+D9ICCLt8Ukbe0VoHoLsYE^H)uf zx`LKeA2O~mGm6?u5WuRt#47TkMl7^MF56gRE#4pkZRphQI7#X5K26`yDCZ z><+(M(G@+lY@Q#-8$E|}-v}Z4R11^VOiz+>VQPUtb+u(lP*~Zm0*3 zu6>&cR%pvjgy@dnx&Jf`HlHd8Bu)v_gUK^L`s|H?il&&-Yec!#X>l2giY~a!Y zE!hS+(33V7CBF548VK>+q_p^zSnT=W=A)uAR8`5BA3lhR$6+a|l)#1p*L%ZR%KDt> z!gFs$(j0OL^Ab+0wBDt-7!ik5rtZ0ax(|C7;@GpY-#u_du21@aOri#k@B@o zZatYd3mZo<9f9&m$+lf-@Y{3y(!?aCDkCoE#xr-(QFjcCXl*j2QWi~AV%Dj zP{lZ9x^ZMT)rvGA2+w-PWeGqlVTm=hrCPeOOgb&9eCB*RZmIO<@#sW(AS;bdUkfJH zXxNwj<&Vdz?E~+shxc{7_RhREKCf`?-m?9x;&b%DV_L@GWM%UDK*NW>23~r-7)G>I z{jFD_ym;!J-z%4bICt*+H1P-7{+spY0koJ=GS+7-txx*?UR?CBU%HDSs0vNX7Zx~# z-SrO1oHNZGg5#(G3M$HPyaWU+aswiaWM{Xm@I4>t?PRwy9>n{e{k;O__txMiml+l4 zKqv)y)!G~;rH32nM4#aW-0m~QwXQbi2#xGCT>mS-8WflsvC(cn+3-zH&ishX3L@D& zw!WO>=5L>rF0q@=fnOP#Ta@!3IIwZkNw$*uh}H9RFZvp7_Oq0(T8Ef&OM*6%>hi5D zCy0>gj^DD`;v%AfD#9F+lLD)~8tF-5aKK4C%MbMU3@e%XkzJgpCxyBkphFrt^ohZS5^Si=NnG()L z(*>ojWTQm7s6N*(-#s-ukizbBlek31@ZrDsUMO8;P|qk&EA_p3Gf#b;GiG6uJgYu5 z_toUc{lFL3{`y}Cc90uXKRbE zJ=buUlHhUrrnF&yR?C>tpNIMRWx|04Kxo9L@avq3b#IOsT!Ua$pYW%@g3s9qZYU$)=4leQLpy54!bAQ+6j-K~>kPCk8nOUPhSgdQ{;?*LfiR@0+2@K? z&Trb0yM^A8FFPN+oAb6jQK_j(#A&k-gNGC%2&4lh20fN&s&&-KY?npK*q&--JgJRU zP)LTRssv`lBajJd9?<`i{o|poMuRoZMHQ5YOcdGgs;cMw{No+1Vve`K)PpS^d9d`2 zkdxWB&7HwPJb5#ZX99B0GjiBtoD5Y=IgMxRLh{)+0!Hsnpr{Yk0D3_)?=`#bXum6W zY9{uFAKg_-Vsmi7+A3`E*=mywtzg)o8q*O#2~-$*w2USKE`SEOAnob|PaDhl$UJMT zT&vBVmB!5DlZOjV1?4l-shfP@R|;G}i68^&$)fb9mt7x_+L5m4C7$iVuWy0r`91W6 z%PqPW1MP0|Ixop7El^b7JFW6QUZ-a`Pu|JzXgWxFe_-;<=y9Q3>*U9(#&##ZYtj$C zK5)AK`|QS1$=zBLjqPz4a|67Tni1`_qyj(O9hwga)&=W*@*snIqwRF-0T_ zH?bx*FPe13zgpPj48f$DwARm7D!*w>%-k;6b=+8s*)H+--Qw;R$cp3+-d)o@rMYFM#*HOl}3E5@;yP=%^u4&8LOH&HSYYJ#S zK@L(jF9)^{iMFbtRuQW;MrPesT|5F*D^I2k#hKC5I7%+7cy{%LDYZRwJ4ZdGS_-c4 zfp3NKl?!aLNS(|$W-Uv0kg}SlG*ZNvnYtV^Y{)K-1dJt?vMIwDI$zvj^8GR%yJp>2 zVyo<25Y~B`+2PlnZ7R?qJFhpdKL2axS;B{xKYXtjRO<5v<%4h;vYZ^pa?gajsy<#U zy~W$?D^0?r^Zf8{nwGI|}i zg@|u<3oc!z0?-61j9alQzP>{|2MKM&{`|nxH~me&tPp9 zL?A8+;y51>gx2JPV_IxRF6Lh4741enyG-N!Tl(xIFO~3+V_SdilVmLK_Pd;oueLuY zfk}q|Z-XDN+%s~u$u7dm&q_+_o}x!Zo7cLZ+7|EzNUc1$#u#d{-n?z6=>P&dv##YC zs>`6ZD?%x2(44vdL;-*uO(hUnj>wS$NcFE>4o#x@dZ*LeU&WF27P{q9C zEg+of6FC4Cg~`jvIL7j?jxn8fDTC4Zwa76izaQ&|jkz|Op#>>#Pn25w%NDD?$y1Tf zZg}j01ZM2FCXZWuUSkmFz;L>;%!puRfIVlEndu@-d{9fG#exQF>Tgjt=PI`30_p=N z$dfo|DbYJG-)(d7;8is#P&EWcfWk-%cJb{v2Oq1+g*}rM1Io(` z0g=_76o8pMn##e9k-nm&oesv1V`??zPn^3mING789+7C=ixB%7C7@sKr#4QCfW*bO zrFv;e+~Q2e&slO{hHDCo9385zpYGq&L;25`hi+M&?KcvIa&!b-Nv>^f;G<-0z#{TB#rZ5(P$s zGOyx5WXvQjs5Z)m!WhH~;9_!qrh2;S?xc9cOgR@%sDJxC_ka`l<`i6g=50-Vi4&-| zEzqv&(-7-E&;8mcWSbE>tpx~y0SRy@8mbz1XT8Skl@3i?twToi7ngm+$V>1%0UY-vX?$Vy35 z3!&g{EmWG;S_oZazoFo0UesF0fr5C7i3nH(MkTm!rzwjXuNd#=088L+58vTty1h;W zsU`xczEx1dm^cjK^WXtj3^u*iRc)N#kj9kBgpQRp=b8V5oR2|fY>JgZ7&EiW&*KJC z^OT-pxw>Td*5sGcEg$G{_<7@eD1JUM4&9Z+o%H{cXZf=;y>@Ya=7OUMIaiMT^lQE_ zFZk997*q;iG}fqAi-~Yu_C&|2A047bTd9)sPZ(v=(W=qp~>KW@D@MWBe zpa0oYE3OE>G{8iOh1r(j`4=ZBnSyC7xW=;UrAx}0c#@$k>VpldYXn! zRfjDYM>zh}20c(FYIPya6fCUJwf0lye7!5`w7@O!rqX~6MUD`U6yX0oIyA?A`}tV) zX>9w6(G%&|`Y);mjE`c9Jy97x98SU|?!U8nYBy4<+b<+(`vn|87K#GaNYLv8@}BPd z$V!5;yah$fkw+E-He|3^!}nJ1_QE?ZWmi@yz0;;Ylu#3?^UMvN*k+1tK}`$&TGhzv zs-|>lbTeH^qpwNcs774lC}e2my(9@CToocT9%=SntxQo&86+g15JV4UWqnEC(O1z+ zkq0cIJ@pg5lmX9%Grswf7X6+QX+50x*=N7wjV*Ge~F9l+SrHX@Mno2W$+8)`My7hF*(K-~htg;YmDs zl`&XMNQ@F0kpv+ANY|kB#hvL1TETwdNU1b1>9iS8k>?Wh(d8cOz%wX!wGE19=y>`q0xa`Jl5AuILTD(kUz z%)FNT1(1UL1Y!+qyq&9+gOdZZ07ZUETvaK4R!5Y|XAdzaY-q?N9=`-|Oq8&4sxQP5 zu(74@4PBu)AZfX+lu@DvS=HF6YK&svyh{_};iI#s2rME5zlnk(otdrjcVIMecd>>L zyT)>~2#p{W>!6gzfQGL{!rNy-KH!NO8%g$h6%g=IlEgD&eDCr469X~FyQ|#1NAg^M zk(;pwp>;sXLSp|P=cv4n%bE>aV6xm$9)G2dA3-CHwgSP&}waM zrX$u6T}GZ3x1KGL&c6m|uVSR;GBMFUpL+Hio21`edvnR{ohSq6Z=%ZPmT%gVFVW+9 zykQ$RbdOhWHXlE!+<*X@We-9q0Ry9dU#g2Y%rFn9uHIZR;9>N3i8RG2wz1%Xc^U7LjLhz5d65YWI4cj+ zS^T}`WxQU?e6Dewrs{#;Xr=2=%V@uNzPWgVldF?grsqVX_@d@s_7Z!v8QQFthLV*y z3*Uk^V<_&rH1v~JD=QW-Byu5q?xg3KI8b;anI>TL4yjdP+V#$OR}mVHVIYYlUQvJ!QhkXv;b#1@TEEJ zyKI2^nW;cP7(%Fj?5O9{^wD46?)OPEg)#qj89FInEuRnlTk{UX#rWS5dS3Hks`ydS z*w;%xi?x4eydcM@P5Xm;C!Ms&TWepz!{5d#u9)AKWK)!)FPHBzuGN_ac>si|HeNm* zvn?BVI21?$rRtre`BDMjC^IYpL`zx`CD3pKke8oyk+72l&slUD8WiZROMlKg-ToNs zQCCRcJ;29m>0lIB6%)vLV>=h3{;yDeP(fq8jvi!?8%1t`MMnQLHQ0TuwZxN1{IWy9 z67d$EL!^xs+2yyEb#Rj^UCzt4*RWOO@oy31P1_`;%kkp^xlcj`brqJxS zK!YjG1mH_<4T#%SaZErpOMKGv$_0CdUBQ0;>R3nG042v?G!& z!jWp+&9TzN(j*UyDp3^>AokBvfW^)EIPHR|9RXzUPd^yA5$ZIKdVZ^{g5EZ3gj z#M-`l1X1?txunv#cBgLY+c$;W=X+}kVXtC#|Bh?pknO|&?tIOaIC}Sdr+xcU2;~oU z(%5y3D`b(cC(nW$JXrjva@og*Z~p1&nC{p_#mAYbe| zIFR}(8ALc^1Avk5$DikaSF!?8AmHN_5i9;XScDyeLbn|hDy2858GQr;w(8P^$d3j%a z8@*wCs!ARW*ceGLrlUZklh~BSjPGjE22k0JpwP+w&EKE;mHuq{x$AVaa+Edg^hO)> zkLyv4M2^(O4z1sc65Oh7!81GVDq^aLE3N_o#tE3}tp@p^lwt~__~3&aX1nF8wBy%K ziLpI)DqgyzPeNA$*nfk5aaChH##$$3eY2je%J_u2I8A$2 zQ`z)uN*6;NoPG&vRoKNkRZVA3(kKlRU@Gm(0I;U?rfc5^s(k+O;sk_efJ}hIhPNEQ zJR4^uk-(6wY1DvtYEE=B110m9veKHbr-$A?NtCO1(7Z<`aYpG=JITw9L%R$``X(zimFynu!51?)w)!dE_m~Fmai)FP|Tgw~6P{g(Wf=tliBd~pCo|UG zCKJmpSSFqy+8>H$(|%;V-v#M1hqutXlntJW2*;C~{acJao|(3LnW`Zb{mA@Pa{pi{ zh<<5-^Q)&sjoYfIc|hqRp-S?_TD3omLa7l8R^xTJ9o|(==4odDnX{zA1m$wbwcWXF zL{g1ec?9%nfU~&(IZ)13K!xhwTmsR;`S$KDD0c!8YlMybLsVxXie|gNS|q~F>X<$i zcz^WN72=TMkd~U- z1PbJw7!YC^q8Xw#n$3kcA!?~E8{l4#g z&sk@!%|EPl_POtU?|toS?_Gnp0xTq+u_dch~k5Y&^ z#mQH$+vDPz4OOE43fUkYU{linZHQW!be6y7|4E~d{Z#f&D2Hw@76sXnt|RRkVo{ZNeW%aU?hq$=?=@pk0&RZctk+Ma$1iHU_z((^+>Uu)yW z)u8V`=Pz*i|F`P|+cN`~<_7hXLw%R~E%OPA44Fm!o;8>?oQ3_K1!m{W!e?z}_5PbR znl&okG*}POxH=|ubFXlk^t7!Nr8bZBO9fCaMxsZJh@h9>*%GDU#c^;+xCl>X9EWr4 zyI84W;xkD6f^bIgK|7e5$MWiRF6aUV_$gmcgv7S*ZQ(}me-+95G^QTn=E2bmUD0S@ z$dF{gX&@{=@UK1%c{cj8E`^|1KiB@KN6u8ntpmS2!QRXIU}b=3%x8fO7r@K-XyYw&5JtoT`~( z_)Vn)(s%2Aya8?A(To^Lz60$&XCMb0lyr zL2c^un)LH=(vV;Jc4Ni8CwtyyAL;J)C;>>q0gL{0EXOCt>HTTX;Ku)+`7NF)e+kc} zVqJky2ka&y@T1{$DEYBF@Fn&)6lv%H*QbV2L;XwT+nkatO60ti4}W#4WD3@;p(jC98l_DLR&VGrCfw78@z~i+O7Ta#)ZC z5uFxt^{CI!4nBjGDp#`r;L7Cz*8C>ZEzg`*jwQbn6^+0$QTKd*s%3lb_zgxxtBd1B z8#a$b`uc1m5k8g-(|Xc#b4Suo>;kK&>OJ&qmH0}Yrc-DkT+r$*+?*rSS=1zk4K|OI z8F5|U*5GD^D#^s;ymmi2#>)TDVwT}~=fyip4KAqA0yv|tU(AN=+qrW-{nhQ=J0mCk z%q0BDoew!S=gT`uXczrh42lhO1C7tSKh)Wqp#A;ndH~?B+_m@QzM|`e7svN={5P6! z7`WX?`0{7F#P+=7cERf%Z)-V5>)+ls4$6d(zsB+%y1ZV@I7N1>NuV8iy}AJ0o9?NV zPktJpyMJ&w%~B!|7$NF)xaA4MkHh;;ypkt35= zbcz_59HTOYbPGy8Woy?x@4f=V(`W*X* zPx!6A>2_Ikl>|v-(`{XzRZWQYOzbbEveoN!s7*`mUdB6JDbJ(6xBE z``XtImtjhw+KXF2g*8ld{IGiOiU4+8>Bl%L6&eZ?(`zUFRFx9aYhVhXq3yp!jwy}5 zWVVfD2jGA_v`0JW>uA<|u3MYB_EbhA)o5?5|AJPw@gXa?)=HaMu})t<_&&7fJZQ5b zq61PIcwu>?btLcTrUad53a(ww8y27}lbaiaclAQ>E-nnVnm2e>M8|8oKrL(Kcvt06 z1$5&=&XJOuKc6f<<}Y}m3j^djprS=tQe-H#=+r;B+&6}b!PA^8czX)J4QzOjQ zoPp+cy#TbOk)<|5lg)1u4<<~OaKi@5@SSZ;PpPA~_wAWKxX45re*Y?)>v6f?+%&uv z4HJ`Z)JxdA^Ab~QB_=6E$yx=#WL2JUd&W#MiL491$@y;pVV7f}8e-y56zJ+SMf!Qy ze~mHCav>v`J|1sF4TVXza52coX#%WYy=6{{Mn+&@z!68cIVK0LSEar3E_~Ir9oA*= z;r$g?z$Ax2jJ4%vLU2F+t4^b~R->%hAy%zfO^wrCc^fp?0y2d_SE`pD|7D^`1Y&Lv zv}OJ)X>8+P0fp`9jcuvzJ;4*>-RO_-u#?e~e!j-8KQSB*quo$p3T%54`}Ed^ zbS`5TiBNKW)w`_e=67D3>eLdXL{G!&A11cRWZ&+cSqs~J%(mYzYF_OHCrlIt2fOiM zW@*o^kh!5R;~Z2KHPv!2l#botYEd8~qF!(Fuo3@r^eWiU;N#WxD+{wQ5?J&8LdN3f z5+{PbdlPD_f|h1Jh(-L#`x&%&pR6*yuPsCa=Qnn;15Cw3wRt1JnTS zudqA)e&>H=d4A;3-JbZ6po#Hu(kt*`mIvqa@=xUImVo&&L4i_$fn!7JN8))+?f36D z^qZjI=(-_}3&UtYm98Kwc$FL%sR|TWG%wk3ho6$nk8o)vO;d`n+gEQt_$GT!y7;NP z7`4VFEM>=^YgKhSzdUoi)}I)62OZP@ai8nM#P+QhTQ(GtBmAwd&MoBgGv`@(O7NJY znwzhFUmxajl5ok7N@u^j-3&8+7qjiv#S2*z4{Mn(MW4-)#%~OmDFH9Pb~~;wtWAn| zHu84P6TNBd?%k{l2-_viaKkElw5#QbHsd2&2rza#G^VQ_#eYYtZe4ivxW}Zl#4oVc zEV)@2GBF+)n(uQg1E$HyATBapv}79y^kQ0?RI0>0^&6#h@u~Q=yLz)7i4be7N4#b@|IsoAL7=;AUPNa9GueKAi`qMLgc9f zhs6u<1@o&aizhZ)IdAJD_5auVP4$xLg_I)tpf4?mFkyp;L2dVzGc#mlMMcLM7qcE> zGK167D$wYp6ouFLq2$2d5yFtF$$z3-GtteAqc@+l{)#{Jud5fmglD?;t~(5KkDg1YIR_x-ufoqke5O&|?l);R;>p|HjrYm1 zrdzfIZY}nAabQk?YSEUS7%toeDnzCcsCjYu8ct|{c8t)nn1SxZ)p?ilSRVB%4oVAV z%ZYgv-8tZ+}e$~ZTr_4;_54J8x%_6TM^iWbF1NHc}?%PXiE|kzLljyi; zDb`)e6+C+SU*+3HL}n*4?ajA8dI|9>k9ccW!bsbrA8q<_^UgL#uJ#`m!a2M9bh)w$ zaFwc5yk~toe$;8K^c>LsP~gC*3!3=|*>j25IPKKrj!7{q-Rd!A=`f*}ez(0neYLNT zkBM#XsexlfiKDB)vq5k!Ti4qwPO21Frlr+bi{o1Gbp?qQHPvUO)uYKx)hhcEF2K>K zq+Ir(>W*{X_elTZBK}3~3Y)s1mrN0P+pDjnX5NbTU-z$DMWFRpI1Y)_5cm~^5Brq! za%pOA^8K|l*Qd0uroZ3C4z!rk8)PCny=VF%vh~SkS3$M;OEnya;GE+m7gP|4dQhp? z1E_l@GH$Q7{3lWw2-}3mS>KW|ru}w52d`Y}_e0#V$(gu~HFvd%7;7BWML_a-Lk|5 z7c2JDSW8&~ed$sK8Kpzo_}fGd3u*Ns_zVF)Pn84RadQ+HJ272~{tfkLOwjaJ{S*IY zj_icjotQUa^eJQT5+2e<=36lkJqPi?FO0-1T(Tn$$-L z!_?-(0_Bbtb^wPC(RdD)QN%{aEDpXTyHBjV7Rdc#kGd?M41)TWy*nOVvSNS9Dnjq& z?3&=0N31v9HJwwm!A!w#5EKyGBQwGtZ_Zi80^?+jmoo6j1lAosak*)MhGzg(YXrj`h*8z&=byn=l|?mescl@i@Bs6OIN@%G*_*E^ zpa2iuzX|0+F7VX98FC*< zQM6O!dX`u;(Np^DA*8*@&L3q?&#uS|yzhQTHm*3#er4{WXY!SRWG3k^W7dnCRYFFN z6e>X~6)i)Tw!i@?Er|tp_m${}ZVaT~2!-|ilVto%!LSNMHP(mp4UM1v}%QRx)>Xeo$ z{)bvC?2>JP6G!B^)?pqF2?;ZYKy4@y*h;yVn4auiuf!(}8HI*SdgrRD&w58S;Y_hf zV(|DV6<2txWLZ!{5rRtXvT+^lzjb3{VrvCd230ZdCXJ3g{5jF~tKG9t=F!E(*%JSG z=yAEgP$MpVwsG6;k`((?#11pegJ_3hvHi7lnatszf71`N+F z2^6dWkVmc?@^p?u2uuCodw#GhjONVc4E|3&OVIy<9&^Fh)$QAK?tv-Y!uS&OAheM7^+AJ((;4(v{qpf^gf4L3rnVDUa?`Ix9hV>f(5^;aI!Y9loP z6#ZMqQ}>si0{@W1iROE$qc!b>A(xcIMAU=(SBwZl^!g}GbHcEruqoC$X^6#kZ)fAM z(fwp_)L+WMUA5SQzcmUx3;RftLItTC@JY#Gt1ge_ogePU3V3~nhEO45X?G4m14!_+ zL0;wsW>Vpz*F(4097BHFdM3{h2~z!!&385N`mv|i>|$zjs(sfhsl<**!*NpOJi*g2 z*vLB6yM*Tj@n$xd>;wNurc5sYtlH|Aad?W|@x{*9Q4&TMv8Uf@UV$E|4cd3RZS656 zbL}HX;RWnNrJ+QcRv@dlf$OE?i78%2z=5)IwE5Qch6RYI4>(`*h0kx`EKrS)5$0Dn z?rCecVXQS43WeH3HMSmUf`l|r&>xju*9kS6;o8AwP1y`ll_rjhD^;pupZL|p3YD>{ z0&mOga87H79b%ovo-Xkc@a6qx>H zZy~iydE+^&2J6Xp{*(>-UhRe-Y6~i^p1%&b_2B6yOZSKtie5Arpd^ENzls)>Qy(Z_^usuWx$=Fq$peKjfjZ`FUy#W1X9Tx}EBFoCX3ctHaPPml)kF+O>U-&-7WC=lyWI@D(W+dTw^)87V{v zBOd4AJQ_IrK%?*?3cNS%4QVbi5W)l*4BK^v_kUzLGPAfT8TcfiT`A*qsyKDosvWpN zAuZ<(yxDu?;z`kXQxQ%QItNZVLHyxop0Oxv?O90x^y)w5HcxIPbNVb-1)Lpev>z0f zU%u;RcUK%>jMsanAR!C$MQ~0VSfVX2Zz;Mo$JAiSi(}-CYP%1e^p4(L3y@Lt>K^vp zyI9ao51=>@OiPW0TA{XQsvG-vzvy`N*al%!brw%qpvd+L4Y3SGp)7IEglxPfszEGa zvNSv7j)a2n_h&Y5zTmhwUx2Duje7Yj364D(;83(PQ08ZLtm*m9>1zJ-M!T>9?CC07 zvrH1Sl}tz#4_NVyEjM2rndv;RF$TXXu_L7aPXJ&tU*j8vRSP13HUidq=bimmb&%1}V@f;h?7w&P(8tU*|a=U-=&+9D) zK8r2~GN!r+c%#X=xBIYSn87I<}6 z5}cC+)|jcvm-=os7TNfhSaZTpm;2~9V{GoknD|~@@|sc>rUVr^0jh%|j|SnB7TRc=d(tQFlD2J>G}bL1bW{ z%(o@ja`71oMjWF*w_jF9$#xt9+C)2KG98(Rcw>)Yt8*(TQiE);v5N{iM7rc++vs&* zci{71`X&Ftwajx|JbWr~>#`e(4IbWlh)=gxKHVGgE`Z7^02~z%Oz{fy?BErW4Q0_)0@Wx}8{Js)m;TFM`!58_b2^#DQS7aVJ~QJ~!+t6X0nlkHo^QyPhjJQf}P zYjqTKsje+tO-vJJKq};{3>k#p=6^&#sAM9->C>frC6~kD^w)B*-wz$W$+1k1rp8%H zq|!ba*&-RxT+eLY$X$=S6Qs^UN?S<;)a6qmPYY}uA{suaw{q?G)j9dF0d|(vM&LUW z+Vn60u%M^tLu>Fz>nI6Ix$wP2bMg1}wc;#@l3i%S}hh~1u<~cD{CeEY# zUw59`_{;X=@PYSpjlM&&eX>l#f9;Rs&u#y2&w+!f&Tw`E1n1h7?Nyu{6v**X@qm1u zT4lj%KxhH)Thm3(J?1QP7F4cR8o%cj{?$HZz9Z!9GfRNl<*>bE&v-X2f0!kw$}8F7 z8$E;$1lxr4zgukKq9i?xrb#pWXk^qztQu9FIy>V%!>yCqWIKT)>C8;f&Ms~R!MQRp zD3A73@Hjh^!Q1Z*ZX?h!S`k1!6iEJ4eC^GtKc!VR?*oqhQ6DT1IR0XdzgqN2PC^1A zP@xECvPj!?{`8{P8&6A&pfVBLwo4D_t2nmir^)pa7?sUxU^G77i4YY1kt&%rO${QG*-_GB1fw-7<|m^@)nN3S6{CM;VNyPMP|5D?>m zW_uw066tv7Gq(${W=d;{TIhUz{;k@3mnMr+HqY)Ynic|Vhs#Lz#Q4%Rxi2juj%EDY z1KIH|A)6k4S^|Lq^Z|>w7gp=E{r#znQN0L08*ekyp&>>2oyUPA!XU7pOI#Oy+~EIz zh2_-KX$F7-;tt(s{0s{A=}6*m@`Uw5-Xa%T0XNQBCBt*hsYN(oUkr*#%QJ?v=!0Sc z4*LPfWSUc!+!SXRR(a!YM~wX7Sh7ij7dKtcLbqmq0^FJP8Y!Nk-^#?-v*<1&twPC# zcuJLic&+M>O6^}z!Wg=nBE0pyp>!DJ5&(4So&Nmd*aBVy6U}TOa_fajEr=jc%Zspa;wjUr&_=%Y z#%S8=Ks9CLs1U8se<-CqOc@J36uI}`?p=P{Pj?qaF6baIYOImZUO%#W#EL)@v;wuB zP6Z~ZsZ@_JY({CyaxAwq^}HeWBsk3z>UqZem*84jHT9*)r!a}Oz=6(5;Ta`0QkxwKGt14 zAZ}^#Ku?8fEV#7Ly6iCSfC=Y;9E7h9$(VRHTf^1RSXdg+Yyl2OHzbp(9lN&$w3O7l zX6F}kz{8yyw+|ZPzkl0=k!76(IV6jCF7mqj>s=1^%ZEneK0$uFM1`~f`hhLgGPB3f zSXvZX;K`(C-Xt2Z=sBWh5)<=mXnN0}xpki9+3&A7c$v(Vy8HSS zsH@i6tG1Ao3)dn85Up8UOFPxOU}_6MnwI{0e<$IKejnE4Rwf|`kAac8g8`c+fz9r- zk^2hcvIHKWBQ#n+mw6tmZHHF&zT5ipC)LUYy&eLTFGt99R=L&Nh9hf;i+!}8^~nEeID)hGwjg)4!KYkn|QRKgvZ04Z17a`v31!6Tq8?el>_$9x&<;USa|@x zAEHl&$Sa+H@V*7T1*xjw!xH0s>wNW`Q!tk|Wi5J5e?5ABy)Bslr(%pF?_$2LZbAAX zF!^_%z9y}_y)Vx#X zj!T(&`TNBm%nX0z715bKvbw<9zk4_nFR+zX@NoTkL&#yp8rSD0kx!Wx=}XmPb5C!K zSh&Z`Z_h##c{)|XieR`P6$C!7#mwTs8vznG zP~eT9H3K0H>sb>J;;=vcwm8>e{k(-I?OyfNgnIti)16#YdIJiqWv+0|VGBWku+~Z& z=_|9%)in{fgA)(|OfiuBUOl56CC(@l<0v+4`LXz@SdZ9j+n&mydg73KeO?yFvOc|f z2LcNVa8bt@Y7c~1ez{6hNeTokPjcYrw#?y@c-fo$dzh4!hhsM0Aw~T=u=L zS7r3Q9xAOcBo7T$B>y^zm?6WKvysjJ9z@x!S2(JegJK32<6MmaWQG^zS(MA=;a1Sv zcr#h^I+eFU=jT9?OyZh|gttjxw!0?R?iZXrcg2?cCpa!`;(KiDv9i8(2UjAw`Vx%G z!X(F#RydQ6q0*Ie4aPtqBmZ<)4=f*unqr$TD=0T3LK>$m3uy_pMfT8gb9XB+yOQg> z1q{IsQ+|{)AR@f$bWv%m@lJLtPC*RoDf zmN+7WdG}W3s*QA|UQ7Hy`Ha6E>#(?_{lhq^B)IKws7^FpzPtJ*0%*~sWDEbH+)&(^x-%fO!zwMX?OG1diPkHLXJFV zo!s91#Oao4)co9CMVgD0$UXHl&jz=$`R5uTNqge0muz@`VqH2U>rLu`J5CsgM*VI; z)&1pBD=J+QV1=N4?M;GS6;^I*utk>G2#5aG&NEtpLjq2-tQJO#f$g;2)} zt*fm$ORV9wG|M@w)jVE{)&bOnyQZNT!Q)@Vv>=)lFr7+B6%^=rbe7~`OL+OenF|@E zo9%4%3f{Ogo00S*FZ!Q2ig?6KJJW0yE2qstlTng!$j#nLHfzr0vS-yFg= zQUW0))`74B?0d!IIFrGnnxn39o#A>UV;huC-sz(vPH5--1`2^2is-zOo|VOyBfa0S zu^D3e<-$gTUtkqnM1RNYUzavreiE{rR;N-Gu;@4h9<|xDox+DeA`&Nic7C{}NR5AX z^J5AILt|SbyNOEP8k;0NY~bYmt?OtE;fab_y73J+r2t$;K<1^d!#9lKC*t=$pH)%w zmaZB*bad-^-sr<$ce=@+F6iu%`-N11G%zNRG$ybSr^Vn&T0c ztVQKj!RIi}@!}Y8bqgO2(o*Vs?QYXP#e$RH8QhH~c+&UgBf52O?i9El%K)hu`p=8m z<(kqA*dkNYCEzkiuIHgU6|IE4>!&#GuIi{!fvqqWj~|d%<6A~L5-jVZR(cqr7|z@X zwMr@#=@f=a3plRuB-3@yDKd z@ZVR_PMp1@vG@Gpx~HH(FOic$NMg0fh?y&}}H$8N~sFal%`rEJQ zBY~9rWzx=a+x38>)_QaI;1baXXb;-0{-2OayL$ISx6NM-c<4K2ni6uN@=x69fddu8 zqjCl#<$bbI-Jqu{T2rm!jS3j`e5Hkgo3c=SVrZbjT|MH@0MN;awM2)mI$W(oUcZt6 zM6if|f+^3e{c?v|Y3MHG*=^TjJH z@oEY4?%RnpYtxP#OVwWa=iLDy6v_MEn{5CcZB@6e4O?o`^8S~-baVN|69CM>`^kZ9 z-hyd{>1zk9FZs){#8<-3Y<2b-w$IJjjJInxE>d50wgF1)<3IVwOWJ%!AHG^~g6K}t zgTsyhH=^Pb(S9`OOhRF`#~X+NZ}YM}rGnBYg%3`BaQD@rzp(pK@44wVf-NEF02DYFa|;!b8#U>jd1B9Xa{-pQ!8+{be5$bQgOy}n!aaA}H;*vDR9u@I3*IxMvv-FY>5Ojr4 zj9X*W=hwtKtrPI2>QLjWNA9O99k7V<7Gomjc#+JBOoCm=Du6@1orO0 zW*Gwd!~;Q|H}tkr^+S)-UnF7lQ`=H$Nf-Cq3;h04a|$yuU`ya32?;eSoB<#k#K2a+ zPjPMa&c4nwf<4fZ#c>IqD4@7EXbEZwX3`)OL&Wnw8|kTf>tJO7_JbZhxc{Y zYoH_|K03}tg5V_g*Jd1l9(GJg5+HvZna_c|%kq*+86J{Pb)N{lHi-nu-}v@b#A??0 zF*ln-3#a$2KX{&F(RM>3LRZgyG@gH|>K5z6WQWPB4 za>uW0cDptB-J-mW3@is_C>eLXw>rq9@r4<^SqiaaXoD|W9sRL!u?!uqG&DFODZINX>xPph(3Tui7{rl4(3nT;%4tgj6_nIz z(;xSVrm_+}>qb7H-h#-b;6Ab18`fy%;{CEcVe6FFt+@@uNA%66vs^ipmByflsVy2V zoFkO4Yq-w=Nu+~ay#%!7-l>!}xtFG2Pb0qDaiz9I9IKO8^I<4WLTqjpUm;f$*&G(z zQ$@5E(p(&CE_#~U6SNY!$Q60bCd?J8WWCo$r<$+|$M%qYi9^WNWhv1Wk()v8z(4)n=~DMD&pL2^SI zz^o%`By^u{s!iZ{@!O0`yRI(Xy&Exz@RTh7cpdJZ2TRrw-P5w(DnBDD7b4)S-(P;s z)+c+Uyh&j_?_P*|r9)<(-2i{C_&4692C#O6fT`&ytLU&z^9gm8p>7kw)O>>^RE3^?p#>L_am)sBZIc#rFx&6jEd3hZiaQ z!l7gjK8#p@>8rtLaZ|*4_68U&eEmd8WFGoSn5y94P$`gVT~be6*n+eKwWwzRPQwA@IEIyi58}` zIVs;0F|jfr$=n&FoUZeH;|0yne74bS+$e!93Sd(r1dBW9V|U(105L&R`wd$oKC{Uu zDS6lLwG$|(gI|8hirG8ueQwD%l7mCI{b`f!T4+s?U7yG)2nuNA*9&yUp%1#odU5z@ zS*chj-_b%14e10=Re{`wEH6;3#!NOVyU0R_l4l0NRA2FnNpYHx^I?EiVTyCky|(6B z^py{Di}tDdj~r?!o%%NW;!sZYrgM?;L1P;-AVva=|9_J%hrAaV!wDF7XyvMJ{YF*A z%_v&}w2%v>aC#a3CD&Dl`4Pk)$m=Zn`dU;Y6zRo7N zbyIZHz-iPLVERmz>4$1(t+O4fGT^+?ow*wzm(V9ZK|P7Z>(hVv>NR8~=0AI;7i9+y z)`=2#1o#yOZTYL46oXcg`>h>wIfT8@8Af`^+fE%`kMUweVa-)(=az)(>ucE0kqwye zP^6O%>9}JZs2~b2sX&S(54pN%DDqQAW&I6Jt28x)C_$nVmw{XDYSiA~p5p215{kv+ zA!t^T1F$q}g1{C-mlBUVgLJVBUL8NFzrvIaiN@oB!FYBWK;D{vY1hMUWj?cU-&eQ8 zh6))WL*}>uUeFYHhN)?IHx)g9w9bvhqox9(d(MA2*NLyjLua`Uo zvc-VvlV4G(Z95k00NH}3F5rbhj{68Bpl$=#CmWZ%Umqf71eEhP4z5g$$)-!PzTMdC zbR9bRM-uO`;)}NlS06%*i7J0&;z`>`Ed1w~_HtNZ8P4yKZ0)5|`iHts=t|?~8xxMb z(>WH|MHCzf1ptpJBf4hsl+hAPmoQ6hM}xSM@ycc4$T_Fsk&}~gWl#mVQd?H*!1F@e zUWC)|x73wF17)j$2$Kmfa>&>O^@@qWVj{3D&F<5NZvCD zzZ)9s?+=1imlTF%J}uu+Zb)thBM&uJi}vR*B(Ktul5Oy3UEl~*V2c3NBk4f2nY!CH zp)jS7JU^;s!J~MTvBIRH{g4sRh6Dr`KJRynxhBZ;gc{W>GcNsS6w#2`6NB_;=o=J1 zD!WB=V%=~@jSVNqVIYoukG>Nm9szhH-|%v?* zITtjD3}*t^XPP|OlIhgugByOQQ+Y{_(TF_aiJmHSf#yhnjX&-YhKQ_=z*LG70hvd9 zU_`JP00)U89RYkF14H!mV``6czJylKNw-HYUp9d{0pkKz`+)`rpl=s-hH`ryDQ^qC z#YKoEJ@eUB3%O=_c=K74>IK2hcbA3?Rob@RB`FsnvRfsW*T}!MGd9 zz8{`I#U=RvseXaS6#g%8LINH3gCE9Tz-QfO!~U#UTatu<7oGER`n-N?)Ongaa#K=d z_Q?YnV$iEvZ6x+w=yp&47FAKyhOmWzB-R7x@qTJ>Oib4EZk^#K5A+T-V5ya&ekI@2 zkKxQ4t#D8&W1WP=8ih*8K1G(QsCvdfh|sd(`-_qqgfu{Fad7Lg{pX)u_D)fLJw#rE zMgkJ%UKfrAAo(HCBtoEvoXfJ5@y;5869YQh>YoK=B+zx`}Q?6&yh?&q)N5Zk<4pKO!J$HkK_t>1kspKRZQKMsAoS`xY>U=@9Vhth$ zjxl8ri0+P2<0Nz_A65aS9-1oA%zv(@HtOR#q5UB>IePJz-Gm!xm8;L9J%sS_?#6t> zu%kQK-3!YdugIHMRD}4hCNN{TM%0b_$A1XU{l{B-H#F+}*vga-H`gypd(cMFO%MFp z4aNyys1J9%W^+r*v7d8KHg1{7om_ggXs(V0d5~XT?Sldu!_(o{encxyrJddz90dOp m&3I)(GYcgQ7a2}L1(P=b>j(u{2s?W6X&-egb+=nQ8U%q8`if*inz|*voH&p7*}*d++nz-}Bt(d%l0}W@l&i%$iv%#yj@bfBL|08kE4labufn=qm3F6bIv!JxjpCB8403U^{oUZwgYq}-`e6!bJ zFPMJ+dEx#}{QX_7^`l8g5Rwz08aIDs+IoU8UJyQmh~Q6faVEPsyEwZN>{ccv$ET*n zq{k#@*z17c&fq6CGflW8E+Zo~ebIsi8#iv8zd0o{BU2DFKPn|@!A5>YRNS(xC0@ZU zjF3!!DlOB0mlgnkMM+>AOK2$@lZ7e#Xu=`_;qNBar=-kZFI=#Z?aE;C3Cq)BqT@5B z%gF>MLVR*YS_&a4Gd(_PI?E@1J;5&}EjgXwKU0tzlNOtjmXuDQW=6-SB=a*f;x`dC z#%IJ4W*XvW#An42mV>xcz$(;?jI?+G2$GTvjy5VLIX#A8_jf0v(qd+yr#lJ)&reBP zzu+fO`U1h`1#a`57uXZ1X&Le98H;AR4i29GA6RDwPjGP}q^D#iM-yUVV`HK+(!oB* zClfN_VhGWH4?H$r7(-x8KbEH?XMi*z2>IzTX#_zGKZ!sHo2gBosZ9u)E+Ea6kO--9 zGhi_pQU40$%TI~{2^E&H8EkT<2Epe)H#L*xISrS@7Ycu({1;>aF+$~s`49F!ydZr*f3Y4`N0w0ux z^)VTQq?EK60%2ul8X<%a4q|02fx(Z8@kvQZBoG$;ErZj#6bohx!0Z`$0x_mf3q<{{Y5;z+ow|85{X&F(7yR0C?8+hPz_@?VBqb>^9d_`c0=a&V@CVg&KTRF?sOs2f-~G z3ji=cWT#u&_|QM$lGl3tywbFKulN<7tppt@^RAa}|6jII$t~S2iOHAjZ4d?#aL}az zD1MfCn9%8mKw_DX2OkCIX+xH+d(-qB+Umu6E<=QzAeSdiyH+fE($-kI=&4=z6(4=4 z?yCVoK8We&CH5^fX<$=7hD88G;4lH- za*V$cb3ti-am0G%YZBAgeZ-X>#tLSGSLT{kSuxkLGOuNAkEqFuJi0yNXkO%G-kSG$ ze0=`T`@{A-@2BsXp%WlLy_Hw>ANDe$sqCJYOe;6P6ADC6lZ2pKLA0-E^lynxI2d2o z6W7s`bm0)`!Xe}g2DRDy%00pGw*$w7rH(1j{tB zbY>_#1b{rHgpxFAZocVmXVVvhw{HgRTxHP3w?VW1X2LYv0f0g_*K9C92T~){X*A7! zRr-=^>A}}PQcP3i|9oZ7$O||S%YCuc2_l4R8GnW>BCuI}17bPy2PP0e(r}+pd!_cx zMK8nJ2lefky3xKuR^7Z~?KO2X928zM`2*yo{rNqb`aM@_(=YiWYny+hHXGIHbhTdv z^GqJ?H5@eIgK+UzYjxVMbHKV0S85-&9m9aB!pgdNs$;Al?fn#s_O*L2^?Cgc)+oGD zmv~Hf4Vd~Ez4ygM-RZo47at19H~u7kaG#j4y;NI(v23y2H78@I;jVh}kbTpfl2S%M zdrnBG$-L$a@yy5x0FaBCk>bA}Got)Mikm8=4(II-54&6-O+PvZE-ji;44{@H$)FUI z+(9WWQ9azBe$dM=u~{|2b!@H-4X|(ip-~`H3DIR#ZIc-#$*)N}Z{G@P#XmFdrS)aB z#mGP1mtUDPjcmYs#KkGhbqSlrUX_&;u{-nTk-RmNnRl*jzjLi*-R%5-7p#A14ge}m z?u<@W3W~{R_vWnd(fz^TzcptA=4`q7xpM2kL)O7pNf%$ct$gD)VoYbc1&3kRj9@cI zaWP>YYewB;M%gjrSuxjpVj_=hkLdZSFhA7h&b7>c(wu1(A$pbm;a36s56!8!E4}Ag zYUN*H9Z_Msxq5wJZTp`6PugXA|E4){($*Sjt3>)pQfgON9bZ^0KPD5NKR9*#zrFvV zIlgJu;0y004T+kbyJv2s6}aJk)(W z)QQbn@_*JCuyoulc+?FfY!v{Q0KomGma#2{MuIZ0LTVhsUu~{gz39o_#?{3IWmXLT z=ayl^D443|ihmwv>>fA4BAr!K(iQDTb?O-mwS3T~15SGgpuq$%JPR=o)-n$S-Mg8~ ze-sGDKrR|juM5Gecf^fiyo6#*|MB`idxD7Em@x4E*$jwigasLK`-uz0((6j6xPg}B ze}4TJxR~ycmH&i`;ucI{1^>@6{cj8ZOM(BE0-%UP48af1r@_(@D)NK?1%FT~2>vhK zL{Skh7jH5RGQP{fEuK}YGy1o7fCl!p+om~-XSL{-xy{@~ap;8Z^^0Y_Vnp#^z2gT-TC5-MCiQap)8hvn zF94teb-gMkLi_IY+aVGF-0g(`gkHp=b8UwZX2C~a0vOXnL_h+{LNPyp+>DGe^3iMH z2l@C}Mu&zv*f;C>IM`H$QvI5nLR|u!nyW+MmQ@u2?S!V#PNT`t!H-$p?~ zFG%;y7?Y#Z=9{Ds04q}gz(K*!%-tnZ_JW2EI&Cj=$q0MU=hC)pLizaF=av1d_(Mcs z9TDp13dN(C|1-5g@1IvK|FM4gznPlkCU&X90sN&rElNagiEF3zK5VJ>Y|}$V074h! zI#oh`Y+YFq5P^Br_M8Bh`%e-t!VR))^hMa;O!;8JwjQ#Ar* zw=xv0mj~kb;X8u_(F1YJ6a;`vR*aACkAlhy5U%-W0f-1}|7QV+2yEs@4KOk7f>%w$ zPA6ub?b9jn^~du^K{JR5%>0oxjR<`G+1?DI%20#^~JaZ zQD$@&T%n>Y( zg_=;Lz>%C$O!oD9!16hZ2d8W?0BE6Ij1d@0b~Y05r1+IV0X==B#Q>c`nQz(HTb~-_ zId7i_7*~)CqY5P&0=dD|&Y?w1q=Dye1BR|l`kgo`nyMAMpo=!Kv?qH}r=u1C;0=5L0KZU? zL=yMVbJ60Z6dxMHFCb_|2sph#W-K8EfFKY*7M#=X2*i&)42suGePDVIW7;g9O-@Q9 zu!2|keYgB>6ciNn-T2$5Pv4Ec1K)MNoqM z7w8;sCl=*ecT%1iu=Knj6^;1hGigI6Wf+ZOW1<7Sj2Q?I1JoR<<|(RC9;mj1`zV(4okT;#}&A;sPF10GXqE2O=-;pxDX2C5@A8}(QS~nKF^cqY@qIdJHGWj zq}qA2c0HmOi+XUFbfAOHWMfJU(c?sUn}eL)m7ok)ZCU$#zcVeI1u4a-W2Bz49}BeZI(#yJ%$C|^*y(dE-fa@9=?W#?dD#?PkPnE0)b#SXzwm?IiJ``9d{TsMbk@|Y{vvAiMvXX zz~QpZgxvyzKw7IzDef}Pk^Fg_Hg(K6XHpbSx>Ek@(wGMUn@8mb5?T+2T85q9?qVnB z6^*ptZR5vp*xG%|f48el^q56qDSgb7z1mL%IeV2%Xrqespd6)klodhH4M-(qfrT7T zQ*xZgj{5xCk!qRq+hFyYjl*wVJ!jlMwZ(k&<@%PBFI-X{%#B)IdcFdwNQ|JSFJXG*Db~#}Ipr5{ji# zcaFOhTUK`W61x|7QMQi7V~{wy{;7_(B6Y*mEd%tYj{rn zW#kz+KyrwWSDY`K*E01Zg)$z^yu2lmj*2W_2+&Yb%5V%>F+Y5yo}*%*&{S%lX$b7* zA~w31VM$Zu|1wwh#HpoFFkV~g6Qw0&K&o@AK1~4!ZpUJH{+#wRhA*FN7nQ6|1;zk7 zoo&oHZBnt^*dm;o$a0h=7%)KNDad%-%h{@G|F!zGVXrt2%TzErIIW4mY9n`D>!PZC zDH|ikFl8i0*6CA`U4_tU{IOV2PH9RR8&2=mGwqX2nvTm%9VL%Ljy=7GDM3v35G9O# zmF^bbu)TV123IiJkLjdeeq(ELgv8LKn0srgI%vy6-f6k zc^A*3vsp^0fSR20CUeT+&E-MgF19Ds+b(mf?1)BcYxZr!K6BK!7la_ok%W1<%TfoO z%eLR?fc6UB&I+G$-;-Xaqyd>I9iQ_yH3r<|eUi>K*S&{cZL2Lg^L`lX*LlkI`Zl0C z#>+>W-7Tflu~9UV!=TKGssz@`pRs8ErmM>|yB)l-%nI$<(XVF9Zmo=T@KsMw3~IHx zy2dlFFbwVL4H7|$MTa3f;?ZI1ez(pD-gtGsdxxan!z4VZCjnwBxaC7<@2j7ju#f8$ zU^F5bGlT^{_x1Wb;1Q{$HKBw~gK2dR-96|jHFGz)`0RFeRk6@tV^UOkzbeTA3L_Cs zM?~;i!}hxD5SLKBCpq~+AG;oFd=LLM(i0c{{kNyl-8t6ZR143kE?*eg^jFqpGf&DE z-{<&VH8(M&LEkT(2)>2-HMB*5t1v6a*LCG+2|j#M6CaEiT=_$G!!(puW(}d;4gf^*2B$dge+7lVTGk_7AlZ$o24EG z4HhNIKsBIH-Dod~pX4ODISG3e*X0~;eYGG58|c^)Ol)a$9|fjNr@C=WCplhUFPudm z2TUW;ZTd<6!l!z+a}CcO zz48Z#|Em@N)8h7ZtSjF#qB#-Tt^OrAyOOd4&p(NAYqC*&wp`i_P>_;1nqZ%4=WedK z*~2vBn2Ue7yv$r@Z6P}|#Bda7JaCj7Z)^a}RQU6z8)vTG`TX!$D&KXtp5 zyB)^R8IX^98oxv1Em8-dMk_X^@(M6I1*}qug}E2Pne3|E1g<1S(PLtfY*_I6 z(22?F=ta0}6^_y=rI+`d*?}9pxmdS7?ZDH^?7F+s+v~JV;eB#Ee7T$d8|o6@Lse9| zmL3CE{Yd9Agz&JAfV!WSATwG?LvrbTK(Cc`5G@%OzwmqXnFV7As5TYm2|xa5Ue9O0 zBArb*^@5v*Lk}Cb{I+~MYL{Hoj%OKE7T5*5TnTth*;R}-4 z-Ma|OH}-hK(7kcJ3~WgW1WDXv?L?!0YZaio1tA#puiu)!ANcy6^xJ`gs51p75!Vfk z+vn2^P)g^qs|+lXO+zQDdi2Bx#@FQ|Aolc##P@L#O#d*_UP$hv#ORwz8z*~Tosi}{ zT=kR(kjQ)WbLZ?aJ?T`-VYjR1lsqe(pJznx(38+Zl&VGG_Rrdu+DVI zd4XMf!N)wGXhu>*Y>QJ>PE8JYFL$ur-!9SA>^Te4gcqXWBq9kDUA2N5kA?*P8Zr{y zxu-=cuqRe0^!2ovvV|C`GZ&3PhqTu_Ebq8kxz+s^-Q}D&`?hBP{oeh!ZT`E8KU_hh z1+QkGssFNTRsQ{R#0Sz+_Gh#WlxKywj`gcObAAqIk9M693EE#>fEjF zUX+q!C68mV9UV-^dFU=DqEvKWWxgGrv2nLZlGuNl{P{_3 zRqG#bHhUYUf8DU{%za75I!cTL-X$k%1E<^7qP)-IkwrtYx&S2S=q!9!&inj|0M$^N z9SKsGlLLx?uf2M>^ot#RG|1a%HYf*JwP}<>iY1e2odRZ<5IfM%2vjCy3wZHjsW?e# z$Zk{xcWq$W`1V+rd-I9!Pwjf!^aX8i)%nHtg*{yqG;(je<{Scub0>O??KX2lH3Tig zs&P5!5di0;SI^0jcB|(7S$#K#Cgmn4c@5ycSRK=zRc*4`rpn!(*@acIBe8HMFLy*w z1cP953^5@TwTw7nk7GykO+@sDS17_T0pdqcoZ{Ig={U@4pgd4UpaJ~t-4Y0;nlj1T zzMMMOT)!AXxv-(q1-KGPamIdGomDbV)*jz37u+&}&w2W`hVdEBs#(5o&S=~jk=`49 zjI`6Ss0{}agagvU@ScU_%`MBkJ$oj-LHi(*xQCM`xKRd?91d1rb)6BWaAWEZ^d5IN zLx**mZR3o7*S-JLadA5S+&!_}OSVr@d`xMacH z1MW~6oe4t~aZqNEqI&G2sS5?P#d}zx`G!VT`^9W1M1;4_zX~Ovd*zI*IStSf6$wR9 zoP>K=jZuf7$1qbec@5Yp8K>^zF7cD(O1ct~x(2m@Ime5Uc^*)w<%Wi982LVC z+0~XhXHd~>M)Pp-t-iiKrZgu<%Q(eQU~f1a^vn+20vCaDDUmUpg97yjs>OW5#Mp7H z5{!>2k}t-RSZsqnw=uOE15+gj+%wo7c;RSeOvi~DSLQ8MExpc7m`oS^mRMt0(2L=_+!|6imY@Y9Eh9mz4m0?^Lx1N1+WbY zA!Lp7QqF!-#^(XCqZCfbkcN}w;5x8HaeSRZ`}Q8UGQTc;BWSs1QI)oA>=VTZP7GX! zSfcdy4ARlj!5JI-J&@FB__5rRp#MP3*X?=tuI0w$zj`@xS!x=d6Z`OC+@5Jv0bL6CA#8ftcSe}6kaEW<2Xy;*&OV)R2wf38VpJ^bU?C-h2nQCDXd6U?W(DvF6@Uh> zU;;Qgl|8~@vWs{*w`AFH^L&CO=dniKeDILzwM~8fev(u;9z&q;%Jg%oo-}`9WU-Y3 z4cvxDJ5PqsMxX5G(6A-dYp3LB(2bFouGPAFL0eSfWC}Oaw|9Aw2;YizApjAE#R?rB z=eG-MDsPaI=$>7#H=kh|ggLygCTRnZngQKez|t|uomKTbx)U>m%w_I!{3=k&WKwM> z&_9t2kxiHA*1jgAwRwTNN*czFN$%T4aSxB__uP50j^t-^_io%G&nCgWB%`82w5zeF z=k#1$INq%a8x<%`ao)mbWF#x7vxOeySlyD>=1%V7PsVX;5=;|##0lCs28B&@#uqsi zT(Up#ZTqs6A~wK8v7^X@v)5DZ?e&HD98w{~1SnTQRrJNdX#jAAL+#&tB>VU)%PiQ7 zQ}dRaucJEy;aBW?GULo_S9ObFMIGB8&JVvez84(^4|J4yv~$?lC?-}Tm5-P@$;S0S zArVcOQWLGlyq|2Eh5Xg9_w%ad3sah|6bp@iCH;{wLM&cbm~!H@YUSnkrxg1kEPF&n z;$JrQg9jD$*zfrV+ATHpXzA)=8-yv8(o^zNlQ#;bPH5v0@)&BI6XMQ*zkHCvdJQUD z8-p@>ym5sGC4@p#XkQyre)XzGo(O;;)Q_DVwAn16J>lAFH0wpvq50f&i{RFf16KXr zyEq1Q^;yA1U;oGx6s2x}M{(#QfQT9*ERs{H`t|h)nK3%YGI?~!3#OJm^(m0F2@>^D zR0W|7;Uc%)G}=&0cV`* zS9S01-7@K($?QGX`JjBTiaAl^oG3^~b&W@jfJ^Rb=cukL62`AGIy@$?%GqdIh#5s8 zkm0l);w3T-aN#`;t(DhbG8PhbnEU2#Hv&ql-yhWOO&m&tqdVi=WKxM;SMo>9$Gh>HYlOX_Hqlk_U##{OWuAfw}MRR}=s0Nf@yM z1c_jXL^6qk13PN>x?TUY@p^9%&O3NTt?=s!A>RNYWFn}0N?~pi%WrCs+(|v>7 z4mp}eOQb+HojQB@w+~Z|3ms;y-8r<{-^i;pE1n;z)draAqh6wV88k2y6UF|z9cFLj z=ioTDgt08!6b*)tn5rcufJ^klPm1)-MRWzHqis=%L{Fe@lQGfoxP$vtxl!C)`kn9D zv_qGcq)1qPMt{0K+w45w$8LH2GFOMk!9v*Wop!gsc|)XB20~!s6SWx<7I`WxZw13m ztOwfUT66fGMaGEoeXsI}zSNdWFrVo4C-q|wp9#)NP4%NcD2)ECiFTSGa1~KGOr61l?@`y!qy0o*BGIwW!-` zi`R#1*B?f|Dr#7y^RUTy|9Q|S>jR^#*Q8Fij*Bvg3@pvLO~j=;bxATu`yJ#4G8KSF z#uc-LqONyO-ia12Gn@B9Px5O3*7~}{?ffI2=6%VL@OWL3N;634%*)Hec2Xigox(1T^5H z=eMe3Xe+K=w2|1EV$`O^K3Q)oj(^sWxC0I6B59bewkl7@$6q!NzsYqC|JwIjsguUV z7A2I((N1;_b{si(l29#azl;irIUdcec|36QW%t2ZuJLU+|9LItS+2D*9Yycv|K&3kwc>%&l%sHX|(!ddQV>CS+Tpe zdJ<=+j&s&#vB$G2OX`M*^N|f|86EXJv}vxSe&H8r#HONw%5(Y(aE20yrBZo3KAh~N zRO7Vu9C&S5RSW0FRc+Cwo}JYx>*wa3efHP)0(g^^Xi4(1Yg z?XTzz3n+X@xxmG>N#=o}AM-X!zYk8J8cA3dS?8QuJ$xJ74MI6n*2`ufbeE)It$ zjjzdXZf}kE&BahN4QRI7}Z@ zpbTASz&_`7$BH9`d{{+F*g+(S;Y=qk-N2UFVtU$PmiMnI*DP=gmvydt-uwuC^7l(P zEtw=7KKZg!OUyaK>d;P*)z`}=39R}i-dTJpvV1|148!zz{OR&4 zE6CLLhcr*PIcN4keb};_*Dl%aSn(VRL&UEsqr_ohaC&Q-WDR{H^eV$D90r2{x7+tx z&-I>#$SX9T*t56E=tuIMZGubTaHkWN3%&FS(n4|2@zpmEMW=X?597&XgfJ;e=;e)YBZ~hk>(uI#i!~e@Oh>aYDzDSBvyIUb0BaghSg0ZNZV_wJ>*0{2t;@CGDI$O zKgK~JE3F<5J=H8Qi8zA(lt>-3GWtW7aepV!>}mjzq2f$#uO6>UV~R<2Z9RMHecDH@ zImh=Jn7k-ji*dS2vY1I1tgUpqYW{`jIa0nJtII;0s=Umxvg%VT2|0yZlV#j+BY#2Ek+JfsZIR!`i9 zJ*GG#w9%1NQV$brkb4l)<*{_?`t0QUZ?~z;4-f|*k4YG)y6V~9x7{WuJqC$aOFumv zhnEhluK9Z9c{On5<+Bq#Y$`pGhKda96bbYQ5-J9pQ9lwNg`$UK*l`j&5@r#dYYj@0 z5r#(V8PAS1cgD`P$+>Xu)0@*#Tjwdu{Vuog4(nPk-(ms46a-6so*Gv!g`?LYU^_An5TCajM!-gO| z?oMxw+Ch-+&Q3iole{84XRKSJPB3lZE8E24%TY8Nx?0nAR6;1q=1cezcm3t=EHC65|U(Pbi zY8RB_kaAbI?AE-GK+@Mc_a8}7v8{;Tj7~nQ+|=9h_4Jdm9S;|mFP@wq;ce|1IOppV zt@F~{MmD>|4&NsLmfkQoKskhT!^`XQ0hSTY=kV6G?oIYbUrR)Q%J66kZG$9!idHmo|v<_-%5j<%Ge7yZ1}y zLvT6n_}&wFU8^=1*e==G+fZTP|7{#b4i8ZPrnACE8=g{7KygwRQ$Zx^$zMTlf5r!` zEjaXkE|v;VP+jgfzM;B!Fu1d}&;U2mj_(c6ltHWzk5O>UR033DDX&QwSMYIy0%5wCYiPcJlDRfZhim`F-2x${uAIQH_%8=U2zj;80suWr}n z;}u#ys7WRTWo8Wl_J4X-#kg(7(b6G!?wU!@>de+c?Jby1tf+0n?ooOhp#rCU6UMW* z=Z5cj9$lfn4BA{26N@fllLf+TZkY0%?Nm5vEQAbp4z6E^)bB`$uO;BCZ6`F{y%d%7 z=_?39_Lw!oQK2K+R))CMGdpD?h{-29ch_&#AxEwZdCrO6V^ay zR%aR>hcgq7loL6tOxaUxh!*P6_NE!;W;W^`dbP^B1pE{l+0g)SUF1o2ONR> z6f{Y;>A3(M0uQ10DqPwor0gySl}u2~M6S(%f&|*@omB9ySFh~v#7iu|3w&_bZ#cV# zQ|!4C9c8KJ6o(o3f*M262U2wl&=oxEJlKcavnq(A2bW_yLGNs@4ev6o24k=1YBSBc zB8-D*opM}}b`ggiGQtC+@#u<_4|{o5iU6$(mm^(U5t*yBaPa-wob>M}F4>;|QkT?Y@nf|hO4-*o;UL$hKdUo)_=^AxrPgbcibfDP3|!dFLjjLI8pj>sZ`int zYhzM_n;@~-XbLm{ey@7&b@!DI(=97*kzurkIH48BZOg@EmsX!o{T0avVhU;-1Fcyl z4)xUD{H=HxH{VU!xa+q|d*08Ie<19g1+hlNoD@IX6xf7yECzj=wV#CLj00#I&u)8< zr17#2(fK4wFQT>WBI4Z>%Coyo>bDu6GT4Y4t7>@~s16UA!i6L0&KeXFnb=|~!dmg@q<~<^hpU z>AppHpidwidy0^jDrp9Ey5-c|JxCEpBg2xQPM{H7<({v}Mu%D<6TH60oU!gpuPYS) zNg6mfA>y3ruQTm{Ktd6NggB($Y!ph-&SaM)2qUe+i>1&9O0;>lMc%_@Z=WV*1lH_* zfT)5i1!SB;5Iono3)~V5s=9ROBc&F3IB<9S)d-Kde!KYZ;Lqca)mRK;baVttmSKCS zI+X0{H2BPKF=)-v-ezGzTfHOQlSnP6_TgK)O86;q_H(2@sVh>|-3^^^B6UggfEKYJ zxR-^ZH6|$S00(Kf3aIBIi4wTmWNhF0wd?4!Moz@8Nl zp38f=M#WRWsYO1TkEd4#!{$Qze9Qp1aHWLzBvKt*=FXwf3viIS-$ZRY^T*Yu`^?9uTf2ji+w6E}ODTx7iz zo$oHdpn8cqs=3d_WfUK&0We4IW>l~v8%H>s?@*#{SXU1^!Lw=aqS6UjejD5hEkeB{ zh2+D=u~|c)c;P*=aO&I62Hpb`n1Swu_+X(?P~bp6ONB}7=}xH0&m8TQXX8t>Er=W~ znZo>wit_&bSxHal$rCQe3f$HO9NHv2$+yCHbG3-SZ=9{|RLyN5;z~pi7*>cTnQF8Z zB@+245vTjQ>#L$jtO&b;cs3acPV1YGSa&`r=`6Is@E@S{^%uc`%D(g$J+%g zr#6RtK0hbVlHnnRo<82mw(e*O`Kv8UvTBb?8eN5v&lxwoZRW#dO+}l~=BL7;?dIU5 za-R|uwD){=P2u$?_J)QZ!9%+gwJ9kG?nGT`n89SwrS8gZVD zh&#Ij5HM-jL{fb~^k&%6U8a!*;2{z?K;}?7;;?84g1G%dixm-7TD|1vvpott%@N7)!y z?tRhUx#O8DTdJiz3N!aIN+;l~aOtQhf$w_oBr9N-P@8XxE8-|zI|XRn1a6S~u%}9r z8K@FBv)xHueC}i%hr>~#%#^XlIKi#{P#V0Cp&!I%_Yve$LYtgXED6`})MA7OP_Hc6 zmJ8F%!Ipq#HSp8Mu8-`2LQTo0))dyc4{dWXMka>@^%9wbAb7)TMsZwMn^@Yn^*UQf zr3m3<)3HC6yC4CIBF?!qlA5q4dEQ^a(AlGS!pHsA-(4vpzny+d9xZ`f*tM33v``a# zw_JTB2WV3#Yl+(yI_uGf(`Vm}ojYZRzfdr;p$*{DneGAY%C+v?DMz9yINeH%R}?%X zeC{rLu$$O8+5jKg5i#_7fql}>(Xi$;>$}bt5(_nWf#*tU3N64Na)`zmXtN@X7&~wq zqjcy|#5&|-2QVEi?Gvav(wGz~8=UKVx-n=HSCWteC7zNV%fl+*sBtk);c?V*c7y@j zO`Jq)l$?Ke(27*gboLnR4^UoSyzh#qvy?|sF|2w3UQvBqFsdXf!j8K07mLru2M=cI z%>N|Wuqx(b;M{eryRQ#j9-Ai-#Vp*hq}@_|Y2Uj`zJ{dK{jH;iJb5Q^tIyFM)zvI3 zIv5)BYN!P) zt$j;obVC<2hTI2z*{n=TMWusLsSSP)a*d3QqXb~E{PBY&QAWpC?w@HUCO_b?3-K z)#=R~e~Sqv>_YIRIv?&X)}L7uJ)W}jPa!pRel8F-Lc|a@D3yBUe-hOIVm0$bgm=e;79Di-NcK&gxOMT}$Z^pIb;|68V?3`8u z#sm2Q*Z-QZ2MD`XZ#0P8HSfizlXcqx4AHUL=9j7qf1N+VPt(2~-xQDBK^++W?eE04 z!m-436MX63r5f7}QZ2GFr>168Z0ww%awH%*6)(C`wC~iof>~5Dc|(p!NF;>2D@*e( z*5JaE4k=jbP&7)JoWr+oX>dD8EERT3<&YdDoyw%Lgs3aL2UU@AXeF7a<`qM^RKWLe zd)&wKSJ=wOy`sK0oW?;sC=ryON&3x*oOIe4?c@O-Oa1CJdhZY-cYL++{n(r5hyF~5 z*!SLiK}%S%aEdtBL;sm%!J)?6Pq-X&J7}!BA&1~bh89uwJ@sOo?>W%#0!2XEnWa(3}q1DJGlFLGR z=5%Tco|L6i09TiKR&C1id*H$^BlVK@SAkx?uuH(hXL+>YwK=L-X}o@*8L6us>xkq> zw%_=@o=>B9%X#QiiT2svTG_xn=;5gBu+VP-V1)iupBN}+q}}^G@6Y#VYcHNI>6+Zq zSTEpVmac8}v3~+xAo@ToF3CY5Nl(M>&jr@_`izq5%V7SHZ}G*M$a`AY#1Gbki?laT zHMPI{6kT7!cF+;%_!>foOVxJ%!^1&s@*pVCr#P%hSg*WcneXn{!qfEAoM6gsfrg=E zj>|=$jml&?8?ea+sy;cq#tvW7hr?7!I9Eqt!ajTk01M;>Y|Z*(s(-_?&$s`qvlShT zpNi}(T9B#I@(S>21E4&#(*07`5%anJr(U&r_mqn1)Es7sQqvjM>N4)y{!kToLkzRS zX>myt4%;d`G8OjopZ{LewlL(byx=km`P4Q6*EZN4H4=Puo2ptPT1SaEO*PPI?5=+?r0N+FxB5sNbiJ zqO)Pw6H4~EBLoxQw;<$whX~qQ(0kRT-cM5RtTIJc3ivRBPz$I(3sgLC({tvs_yv@f z!Dz;%udjQ`&K3ATt;(VxfNe1qg?Mh9gSVv4MgTr`v8J7aGzYWVr4AxX+BTcn4ljYF zH&2cVew$cOKDk%R(0}8}L==74BonHwKLCHbJdA4lLiKJgG~I4f8KO|WAYf6rHh_eL zz`n(0sOIfKr)uqFtmBr=A|>B-VzLg~mJ5JKdzARn*p6K-lSLbSm_8^5s*URm@M!Al zwSp6|V{OmIJ43>rbtZ6xHrd&eB7U54tIODe`LtC}t~Olj3Oph++imLL)23|`NVK8} zjT+)!%JqQds^n*Rtw~!BItQ*9J*22^UaKpC9;8D7A2h>GL4aM4zYY~5!;8zo1HQc; zs5UcyYX|EfJ)xO$Eg9ckDT2e$?XiFG`OaB%wZeL{djr|$*)I!iCSl7FMh#aU!xWGb zC)_~?e?W_u8?m9`ioTB#&w2mT2Q0*cD(JrXZVbL|DlAol*}OO+2?$@zFw%9iYcvkl zv-&8@VSc`J^!%d($5#yu7yy~s5C~~#9fR;mKA@!qPAIFlT;!RNl7}7y-MgBoeS)`P z`TR9PN8-kf$8)R-o;X{e0|o3bdq#ciAgD@ODy93FGaX4L1uK);W7=k2QnnJKb`zr9 zgVaX)VV#^>r~@v)+1(j#%<2>bqp6ip^wn+1YdPk3tv(ZSA3vbDagj0!+HYSjZ0(Q@ zS&?L*-76ETpdL7urETt+?Z}>7v63C7h@&^^g$t=b$Pt?XoKQIlo-xT7VnFSiH)_$J z>|5HmXU)stCv62`Y2AbqJD52K8h9NmQb#`zBY&NU2jjO*1gDv7PuQ&j*Ff;`69$^}2o_z&| z6vvSSR(l9j3+@d`%@!B-=6PG{@R+}Ru)3G(nHjHrx5)oFMl51z37qXXiWLw?hiHqI zPj6y8{(62hZ62VDLHIp0L|2=+&$j=)%96t)<$2oatb%^gcD6whyYmP>FIJBdd+`Q< zHsLP_v@L9LvDPiTHJzrH0|&H3Mle0Lp>tUmS3z^`=Y)+?XMy;C&v zm-Th#KcWe+lmXE71h4660vKll6ens5^uEvjZVv_y7Jpv`%2TV&IopzFsH4X!{a3eo zozpH68XrBDI`U$kveoFOxn#3+IcdMqfwllLbUf7t{8dPT>M+xLl!hD~RQLDSa-;?V zi-CSQKEXg3&tcQpPS_45h)YMeh^zEjB3`o%KXQPaMeu;Ek8g^IDq)Tg(w7oo_*C zp`28^URIpRylggoUq;-wSuP@=w*&N?+={66aSgzEeBNv$=z|IcIr)jqmN2K#J=VietnfNusQXaJFxz%57kPPXy1TTMxK@7iY9ll>J1L4Ag5^ z9+St|`~_8qnjQ34TKwMdr>L-(`fln1+|Qg=&$EeVKD7KL?(OlCE5Xow^2tLZx4)&8 zQR`DQ3;KN$C~auq{?apcb49)(@UrDF-KBnupUz3lWBf^Q*FxfUZc%d^Mz#{&wbs4m zDv}Hh)q=x0xU*RHcr&6qvRWEqdU)i+HBv!5IQdAq8bx<<4qK%F9|M@MU}shV zxSvMT7fbLS;#y)oCk)A>0*Tr3-V?ik!$sx~^`^LwgUk;c#+7~B+Z;}Ko&5HG4g#ph zqO|b(f-7Qc5mo@2hDSgeA%{-s*5ffbK8d6pAFnIyA}AgKBLp&k=hon>Mc@gJJT1>T zkhA^4P_cwMo((Ag!!mF{7f7=MWMt$RmL-rgh>rySsaweSdC^L!mKDy4;Aec>VAJ{6y?6C|tMRmP zJQe&I*+#a*m~HIV3x*=Lve8H*`(iESwWz^pt*DgmSq$ z?0~y@b(>j*U#nkVNP75pV$QE4Kz)YS+|&CA+xXcrBw1S~@snfyM|=}-I%eD3Q!sbb zpa)4^{p!X}A35<#PbYl#sX4;Lg^3sIy31XYU_9Qldq8 z(ex~9rz6W^1U*eDj;uoKV$zLe71eYRq7-T|ChJOBWDr%!sh5VhQY#%bS<{wL7#PKo zlWCx2F|w=zN^uk`4#L0yJt$U9uX4jQKq;1;o|WhwW_Q5+Q*_;3Jwz@|A@YjbmcqCMb!e8AP!)fGVBe0+Sc3QO}*a{vGU z{XYMnefHT?zx;Cj2LJ$UZUV$alPNnD!`cK`n+6~Y5T8G1!q?~LKS}@?C6}B`O~pi! IuARV_0IcX``Tzg` literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index f13ce032382..da87f450d9a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -55,6 +55,7 @@ #include "code\__DEFINES\economy.dm" #include "code\__DEFINES\events.dm" #include "code\__DEFINES\exosuit_fab.dm" +#include "code\__DEFINES\experisci.dm" #include "code\__DEFINES\exports.dm" #include "code\__DEFINES\fantasy_affixes.dm" #include "code\__DEFINES\flags.dm" @@ -2049,6 +2050,19 @@ #include "code\modules\events\wizard\rpgloot.dm" #include "code\modules\events\wizard\shuffle.dm" #include "code\modules\events\wizard\summons.dm" +#include "code\modules\experisci\destructive_scanner.dm" +#include "code\modules\experisci\handheld_scanner.dm" +#include "code\modules\experisci\experiment\experiments.dm" +#include "code\modules\experisci\experiment\physical_experiments.dm" +#include "code\modules\experisci\experiment\handlers\experiment_handler.dm" +#include "code\modules\experisci\experiment\types\experiment.dm" +#include "code\modules\experisci\experiment\types\explosive.dm" +#include "code\modules\experisci\experiment\types\physical_experiment.dm" +#include "code\modules\experisci\experiment\types\random_scanning.dm" +#include "code\modules\experisci\experiment\types\scanning.dm" +#include "code\modules\experisci\experiment\types\scanning_material.dm" +#include "code\modules\experisci\experiment\types\scanning_points.dm" +#include "code\modules\experisci\experiment\types\scanning_vatgrown.dm" #include "code\modules\fields\fields.dm" #include "code\modules\fields\gravity.dm" #include "code\modules\fields\peaceborg_dampener.dm" @@ -2688,6 +2702,7 @@ #include "code\modules\modular_computers\file_system\programs\robotact.dm" #include "code\modules\modular_computers\file_system\programs\secureye.dm" #include "code\modules\modular_computers\file_system\programs\sm_monitor.dm" +#include "code\modules\modular_computers\file_system\programs\techweb.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\contract_uplink.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm" @@ -3016,6 +3031,7 @@ #include "code\modules\research\designs\comp_board_designs.dm" #include "code\modules\research\designs\computer_part_designs.dm" #include "code\modules\research\designs\electronics_designs.dm" +#include "code\modules\research\designs\experisci_designs.dm" #include "code\modules\research\designs\limbgrower_designs.dm" #include "code\modules\research\designs\machine_designs.dm" #include "code\modules\research\designs\mecha_designs.dm" diff --git a/tgui/packages/tgui/interfaces/ExperimentConfigure.js b/tgui/packages/tgui/interfaces/ExperimentConfigure.js new file mode 100644 index 00000000000..22993558c1f --- /dev/null +++ b/tgui/packages/tgui/interfaces/ExperimentConfigure.js @@ -0,0 +1,237 @@ +import { Window } from '../layouts'; +import { useBackend } from '../backend'; +import { Section, Box, Button, Flex, Icon, LabeledList, Table, Tooltip } from '../components'; +import { sortBy } from 'common/collections'; + +const ExperimentStages = props => { + return ( + + {props.children.map((stage, idx) => + ())} +
+ ); +}; + +const ExperimentStageRow = props => { + const [type, description, value, altValue] = props; + + // Determine completion based on type of stage + let completion = false; + switch (type) { + case "bool": + case "detail": + completion = value; + break; + case "integer": + completion = value === altValue; + break; + case "float": + completion = value >= 1; + break; + } + + return ( + + + {(type === "bool" && ) + || (type === "integer" && `${value}/${altValue}`) + || (type === "float" && `${value * 100}%`) + || (type === "detail" && "⤷")} + + + {description} + + + ); +}; + +export const TechwebServer = (props, context) => { + const { act, data } = useBackend(context); + const { servers } = props; + + return ( + + + + {servers[0].web_id} / {servers[0].web_org} + + + + + )} + + + + ); +}; + +export const Experiment = (props, context) => { + const { act, data } = useBackend(context); + const { + exp, + controllable, + } = props; + const { + name, + description, + tag, + selectable, + selected, + progress, + performance_hint, + ref, + } = exp; + + return ( + + + + + {description} + + {props.children} + + {progress} + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosTechweb.js b/tgui/packages/tgui/interfaces/NtosTechweb.js new file mode 100644 index 00000000000..a7ff19c8f02 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosTechweb.js @@ -0,0 +1,13 @@ +import { AppTechweb } from './Techweb.js'; +import { useBackend, useLocalState } from '../backend'; +import { createLogger } from '../logging'; + +const logger = createLogger('backend'); + +export const NtosTechweb = (props, context) => { + const { config, data, act } = useBackend(context); + logger.log(config.AppTechweb); + return ( + + ); +}; diff --git a/tgui/packages/tgui/interfaces/TachyonArray.js b/tgui/packages/tgui/interfaces/TachyonArray.js index 7dde7e98990..87c3395edfa 100644 --- a/tgui/packages/tgui/interfaces/TachyonArray.js +++ b/tgui/packages/tgui/interfaces/TachyonArray.js @@ -6,19 +6,34 @@ export const TachyonArray = (props, context) => { const { act, data } = useBackend(context); const { records = [], + is_research, } = data; return ( + width={550} + height={250} + resizable> - {!records.length ? ( - - No Records - - ) : ( - - )} + + + {!records.length ? ( + + No Records + + ) : ( + + )} + + {!!is_research && ( + + + + )} + ); @@ -37,7 +52,7 @@ export const TachyonArrayContent = (props, context) => { return record.name === activeRecordName; }); return ( -