From 0c6a23db836640711c5b98d239714d20dde25ac5 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 11 Apr 2022 16:25:38 +0200 Subject: [PATCH] Train route Titles - Schedules now display stops in their tooltip - Schedules can now be given a name through one of their instructions - Fixed Display boards rendering cogs on the wrong axis --- src/generated/resources/.cache/cache | 32 ++--- .../resources/assets/create/lang/en_us.json | 30 +++-- .../assets/create/lang/unfinished/de_de.json | 32 +++-- .../assets/create/lang/unfinished/es_cl.json | 32 +++-- .../assets/create/lang/unfinished/es_es.json | 32 +++-- .../assets/create/lang/unfinished/fr_fr.json | 32 +++-- .../assets/create/lang/unfinished/it_it.json | 32 +++-- .../assets/create/lang/unfinished/ja_jp.json | 32 +++-- .../assets/create/lang/unfinished/ko_kr.json | 32 +++-- .../assets/create/lang/unfinished/nl_nl.json | 32 +++-- .../assets/create/lang/unfinished/pl_pl.json | 32 +++-- .../assets/create/lang/unfinished/pt_br.json | 32 +++-- .../assets/create/lang/unfinished/pt_pt.json | 32 +++-- .../assets/create/lang/unfinished/ro_ro.json | 32 +++-- .../assets/create/lang/unfinished/ru_ru.json | 32 +++-- .../assets/create/lang/unfinished/zh_cn.json | 32 +++-- .../assets/create/lang/unfinished/zh_tw.json | 32 +++-- .../AbstractContraptionEntity.java | 2 + .../logistics/trains/entity/Train.java | 2 +- .../display/FlapDisplayRenderer.java | 3 +- .../schedule/RunningScheduleScreen.java | 10 -- .../trains/management/schedule/Schedule.java | 20 ++- .../management/schedule/ScheduleEntry.java | 19 +-- .../management/schedule/ScheduleItem.java | 31 +++++ .../management/schedule/ScheduleRuntime.java | 122 +++++++++++------- .../management/schedule/ScheduleScreen.java | 80 +++++++----- .../destination/ChangeTitleInstruction.java | 56 ++++++++ .../destination/DestinationInstruction.java | 80 ++++++++++++ .../destination/FilteredDestination.java | 89 ------------- .../destination/NearestDestination.java | 29 ----- .../destination/RedstoneDestination.java | 29 ----- ...tination.java => ScheduleInstruction.java} | 16 ++- .../ScheduleInstructionWithEditBox.java | 69 ++++++++++ .../command/DumpRailwaysCommand.java | 2 +- .../create/foundation/gui/AllGuiTextures.java | 1 + .../assets/create/lang/default/interface.json | 33 +++-- .../create/textures/gui/edit_condition.pdn | Bin 25300 -> 0 bytes .../assets/create/textures/gui/schedule.pdn | Bin 29646 -> 0 bytes .../assets/create/textures/gui/schedule.png | Bin 3319 -> 3368 bytes .../assets/create/textures/gui/station.pdn | Bin 11918 -> 0 bytes .../create/textures/gui/station_assembly.pdn | Bin 9584 -> 0 bytes 41 files changed, 719 insertions(+), 516 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/RunningScheduleScreen.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ChangeTitleInstruction.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/DestinationInstruction.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/FilteredDestination.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/NearestDestination.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/RedstoneDestination.java rename src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/{ScheduleDestination.java => ScheduleInstruction.java} (66%) create mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleInstructionWithEditBox.java delete mode 100644 src/main/resources/assets/create/textures/gui/edit_condition.pdn delete mode 100644 src/main/resources/assets/create/textures/gui/schedule.pdn delete mode 100644 src/main/resources/assets/create/textures/gui/station.pdn delete mode 100644 src/main/resources/assets/create/textures/gui/station_assembly.pdn diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index e279ea4cf..afda9a349 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -543,22 +543,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 7fbb25c577025ff61388c54c43401d8bb80723dd assets/create/lang/en_ud.json -d19d6fb4534f1a3cdc05d98e2368cb622cb0b35c assets/create/lang/en_us.json -b23660c03917a455183094b16eee6574790856cd assets/create/lang/unfinished/de_de.json -6afa96843a684ce21a1d86b1f92741a9683ee4b9 assets/create/lang/unfinished/es_cl.json -9d8088da986e4d2a16cd68f29db9a72170868053 assets/create/lang/unfinished/es_es.json -0b4738efc913fdee63681abe73b2eb0f30b7248b assets/create/lang/unfinished/fr_fr.json -b42daac1a01bfcbdc1b029f343175211cc6efdbd assets/create/lang/unfinished/it_it.json -0b73ce20763075102b6a034dd261796a47bbaf11 assets/create/lang/unfinished/ja_jp.json -973bfaaaffbfc6a1577073262faf3960e4b0e81d assets/create/lang/unfinished/ko_kr.json -18491774d2545653fba5471e166136e8662d8c7f assets/create/lang/unfinished/nl_nl.json -ff022ea6d4d89f0f156bebbe9305f8a114bccf0f assets/create/lang/unfinished/pl_pl.json -df3767bf9e308e77597d173fb88c6c3f113a00af assets/create/lang/unfinished/pt_br.json -ff50da076781c6545bb7dc35898d6ff91bec8952 assets/create/lang/unfinished/pt_pt.json -ed7386a57b1758cda9d43ddf12236e56f3394649 assets/create/lang/unfinished/ro_ro.json -3a3e94e9a8ef33a7d75e60404e4a3cd0356ee86c assets/create/lang/unfinished/ru_ru.json -ca9cdfbe87c61b3d0773aaa2360d6ee0a91cff60 assets/create/lang/unfinished/zh_cn.json -8f6fefc6d5aeb0bc180b80dc8229e2c4361bc036 assets/create/lang/unfinished/zh_tw.json +0a3b09db8a3bd71570afc1452d62a1fa6bd22baa assets/create/lang/en_us.json +7ac6b939d4d1b574806ac3fa3ec495498c9c00a6 assets/create/lang/unfinished/de_de.json +58a1b86058fcebf323e2208ba26df584d42f9f97 assets/create/lang/unfinished/es_cl.json +1419151466490bfa42b84a99e0e296b54e1aeec5 assets/create/lang/unfinished/es_es.json +a366bd2c9b80079b9c42572623165497b6d49531 assets/create/lang/unfinished/fr_fr.json +b21c2d0a7cdf713492ab1eb85061df8c73a9d9b9 assets/create/lang/unfinished/it_it.json +9874ddfacd2effec2eb852ea9cc009923e372ae5 assets/create/lang/unfinished/ja_jp.json +0334b52e3e84870e84fce1e485c6153456dc84e9 assets/create/lang/unfinished/ko_kr.json +7f0bd618c72b9743832a7133db0359f546b48f5e assets/create/lang/unfinished/nl_nl.json +f6826d25ea7aca1db76e806a44434f64fb11e6b2 assets/create/lang/unfinished/pl_pl.json +5ff6c067e106418b32dbb97b3bce56a6990eaf67 assets/create/lang/unfinished/pt_br.json +8e639a6e5337e7723c454b3d01dd70e9715318fe assets/create/lang/unfinished/pt_pt.json +763413532441a056bd88bbcea394fcf9e50e8c29 assets/create/lang/unfinished/ro_ro.json +24430fe32f666e6df5fa9185dabedbe9746155d2 assets/create/lang/unfinished/ru_ru.json +9955890700831881c15b3df9d720448c09ae341e assets/create/lang/unfinished/zh_cn.json +7294335fc11c054fb761a251493b17866f01f0c2 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 6340843cc..47f819ec7 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -893,6 +893,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "Clockwise", "create.generic.counter_clockwise": "Counter-Clockwise", + "create.generic.in_quotes": "\"%1$s\"", "create.action.scroll": "Scroll", "create.action.confirm": "Confirm", @@ -1336,24 +1337,27 @@ "create.gui.schedule.lmb_edit": "Left-Click to Edit", "create.gui.schedule.rmb_remove": "Right-Click to Remove", "create.gui.schedule.duplicate": "Duplicate", - "create.gui.schedule.remove_entry": "Remove Stop", - "create.gui.schedule.add_entry": "Add Stop", + "create.gui.schedule.remove_entry": "Remove Action", + "create.gui.schedule.add_entry": "Add Action", "create.gui.schedule.move_up": "Move up", "create.gui.schedule.move_down": "Move down", "create.gui.schedule.add_condition": "Add Condition", "create.gui.schedule.alternative_condition": "Alternative Condition", - "create.schedule.destination_type": "Next Stop:", - "create.schedule.destination.editor": "Destination Editor", - "create.schedule.destination.filtered": "Specific Station", - "create.schedule.destination.filtered_matching": "Station: %1$s", - "create.schedule.destination.filter": "Station Name", - "create.schedule.destination.filter_2": "Use * as a text wildcard", - "create.schedule.destination.filter_3": "Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "Nearest Station", - "create.schedule.destination.redstone": "Station with Redstone Pulse", - "create.schedule.condition_type": "Continue when:", + "create.schedule.instruction_type": "Next Action:", + "create.schedule.instruction.editor": "Instruction Editor", + "create.schedule.instruction.destination": "Travel to Station", + "create.schedule.instruction.destination.summary": "Next Stop:", + "create.schedule.instruction.filter_edit_box": "Station Name", + "create.schedule.instruction.filter_edit_box_1": "Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "Update Schedule Title", + "create.schedule.instruction.rename.summary": "New Title:", + "create.schedule.instruction.name_edit_box": "Schedule Title", + "create.schedule.instruction.name_edit_box_1": "Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "Defaults to next destination's name", + "create.schedule.condition_type": "Continue if/after:", "create.schedule.condition.editor": "Condition Editor", "create.schedule.condition.delay": "Scheduled Delay", "create.schedule.condition.delay_short": "Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 0764a1878..db10b77e0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1514", + "_": "Missing Localizations: 1518", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "Uhrzeigersinn", "create.generic.counter_clockwise": "Gegen-Uhrzeigersinn", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Wechseln", "create.action.confirm": "Bestätigen", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_cl.json b/src/generated/resources/assets/create/lang/unfinished/es_cl.json index 1f5edd36d..870271cc1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_cl.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_cl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 525", + "_": "Missing Localizations: 529", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "En sentido del Reloj", "create.generic.counter_clockwise": "Al contrario del Reloj", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Rueda", "create.action.confirm": "Confirmar", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index b44781058..f94d8ccc4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 196", + "_": "Missing Localizations: 200", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "En el sentido de las agujas del reloj", "create.generic.counter_clockwise": "En sentido contrario a las agujas del reloj", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Desplazar", "create.action.confirm": "Confirmar", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 9a002f3b4..b369c8a0c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1776", + "_": "Missing Localizations: 1780", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smS", "create.generic.clockwise": "dans le sens horaire", "create.generic.counter_clockwise": "dans le sens anti-horaire", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Faire défiler", "create.action.confirm": "Confirmer", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index a1b3995b4..d68626acd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1465", + "_": "Missing Localizations: 1469", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$s mB", "create.generic.clockwise": "Senso orario", "create.generic.counter_clockwise": "Senso anti-orario", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Scorri", "create.action.confirm": "Conferma", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index dcfa086e4..bf9206515 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 191", + "_": "Missing Localizations: 195", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "時計回り", "create.generic.counter_clockwise": "反時計回り", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "スクロール", "create.action.confirm": "確認", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 1f2275d69..9e15aa7e7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 191", + "_": "Missing Localizations: 195", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "시계 방향", "create.generic.counter_clockwise": "시계 반대 방향", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "스크롤하세요", "create.action.confirm": "확인", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index c56108c83..6eeb25223 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 2129", + "_": "Missing Localizations: 2133", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "UNLOCALIZED: %1$smB", "create.generic.clockwise": "UNLOCALIZED: Clockwise", "create.generic.counter_clockwise": "UNLOCALIZED: Counter-Clockwise", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Scroll", "create.action.confirm": "Bevestigen", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 745cb7f4c..fc519ef79 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 564", + "_": "Missing Localizations: 568", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smW", "create.generic.clockwise": "Zgodnie ze wskazówkami zegara", "create.generic.counter_clockwise": "Przeciwnie do wskazówek zegara", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Przewiń", "create.action.confirm": "Potwierdź", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 69d157b79..d3c6d1d77 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1376", + "_": "Missing Localizations: 1380", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "Sentido horário", "create.generic.counter_clockwise": "Sentido anti-horário", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Rolar", "create.action.confirm": "Confirmar", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json index 3bf18927e..42cac3f8d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1748", + "_": "Missing Localizations: 1752", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "Sentido horário", "create.generic.counter_clockwise": "Sentido anti-horário", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Rolar", "create.action.confirm": "Confirmar", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json index 1d0004714..f8a0fb3f4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json +++ b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 192", + "_": "Missing Localizations: 196", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "În sensul acelor de ceasornic", "create.generic.counter_clockwise": "În sensul invers acelor de ceasornic", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Derulează", "create.action.confirm": "Confirmă", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 8f0ca070d..42f0900ec 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 569", + "_": "Missing Localizations: 573", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "По часовой стрелке", "create.generic.counter_clockwise": "Против часовой стрелки", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "Прокрутка", "create.action.confirm": "Подтвердить", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 9afed6624..1d7b3a8ab 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 191", + "_": "Missing Localizations: 195", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "顺时针方向", "create.generic.counter_clockwise": "逆时针方向", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "滚轮", "create.action.confirm": "确认", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index d61c1dbad..7d8c3e2f7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 583", + "_": "Missing Localizations: 587", "_": "->------------------------] Game Elements [------------------------<-", @@ -894,6 +894,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "順時鐘方向", "create.generic.counter_clockwise": "逆時鐘方向", + "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", "create.action.scroll": "滾輪", "create.action.confirm": "確認", @@ -1337,24 +1338,27 @@ "create.gui.schedule.lmb_edit": "UNLOCALIZED: Left-Click to Edit", "create.gui.schedule.rmb_remove": "UNLOCALIZED: Right-Click to Remove", "create.gui.schedule.duplicate": "UNLOCALIZED: Duplicate", - "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Stop", - "create.gui.schedule.add_entry": "UNLOCALIZED: Add Stop", + "create.gui.schedule.remove_entry": "UNLOCALIZED: Remove Action", + "create.gui.schedule.add_entry": "UNLOCALIZED: Add Action", "create.gui.schedule.move_up": "UNLOCALIZED: Move up", "create.gui.schedule.move_down": "UNLOCALIZED: Move down", "create.gui.schedule.add_condition": "UNLOCALIZED: Add Condition", "create.gui.schedule.alternative_condition": "UNLOCALIZED: Alternative Condition", - "create.schedule.destination_type": "UNLOCALIZED: Next Stop:", - "create.schedule.destination.editor": "UNLOCALIZED: Destination Editor", - "create.schedule.destination.filtered": "UNLOCALIZED: Specific Station", - "create.schedule.destination.filtered_matching": "UNLOCALIZED: Station: %1$s", - "create.schedule.destination.filter": "UNLOCALIZED: Station Name", - "create.schedule.destination.filter_2": "UNLOCALIZED: Use * as a text wildcard", - "create.schedule.destination.filter_3": "UNLOCALIZED: Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "UNLOCALIZED: Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "UNLOCALIZED: Nearest Station", - "create.schedule.destination.redstone": "UNLOCALIZED: Station with Redstone Pulse", - "create.schedule.condition_type": "UNLOCALIZED: Continue when:", + "create.schedule.instruction_type": "UNLOCALIZED: Next Action:", + "create.schedule.instruction.editor": "UNLOCALIZED: Instruction Editor", + "create.schedule.instruction.destination": "UNLOCALIZED: Travel to Station", + "create.schedule.instruction.destination.summary": "UNLOCALIZED: Next Stop:", + "create.schedule.instruction.filter_edit_box": "UNLOCALIZED: Station Name", + "create.schedule.instruction.filter_edit_box_1": "UNLOCALIZED: Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "UNLOCALIZED: Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "UNLOCALIZED: Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "UNLOCALIZED: Update Schedule Title", + "create.schedule.instruction.rename.summary": "UNLOCALIZED: New Title:", + "create.schedule.instruction.name_edit_box": "UNLOCALIZED: Schedule Title", + "create.schedule.instruction.name_edit_box_1": "UNLOCALIZED: Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "UNLOCALIZED: Defaults to next destination's name", + "create.schedule.condition_type": "UNLOCALIZED: Continue if/after:", "create.schedule.condition.editor": "UNLOCALIZED: Condition Editor", "create.schedule.condition.delay": "UNLOCALIZED: Scheduled Delay", "create.schedule.condition.delay_short": "UNLOCALIZED: Wait: %1$s", diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java index a1a0acabf..f705856d5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java @@ -321,7 +321,9 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit return; if (!(passenger instanceof LivingEntity living)) return; + float prevAngle = living.getYRot(); float angle = AngleHelper.deg(-Mth.atan2(motion.x, motion.z)); + angle = AngleHelper.angleLerp(0.4f, prevAngle, angle); if (level.isClientSide) { living.lerpTo(0, 0, 0, 0, 0, 0, false); living.lerpHeadTo(0, 0); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/Train.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/Train.java index 8860ba11f..2d7942a8c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/Train.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/Train.java @@ -331,7 +331,7 @@ public class Train { GlobalStation destination = navigation.destination; if (!navigatingManually && fullRefresh) { - GlobalStation preferredDestination = runtime.findNextStation(); + GlobalStation preferredDestination = runtime.startCurrentInstruction(); if (preferredDestination != null) destination = preferredDestination; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java index 30bc546b2..a07468da3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java @@ -234,7 +234,8 @@ public class FlapDisplayRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) { - return CachedBufferer.partial(AllBlockPartials.SHAFTLESS_COGWHEEL, state); + return CachedBufferer.partialFacingVertical(AllBlockPartials.SHAFTLESS_COGWHEEL, state, + state.getValue(FlapDisplayBlock.HORIZONTAL_FACING)); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/RunningScheduleScreen.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/RunningScheduleScreen.java deleted file mode 100644 index 07c593fff..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/RunningScheduleScreen.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.simibubi.create.content.logistics.trains.management.schedule; - -public class RunningScheduleScreen { - - /** - * use the same rendering and mouse handling from schedule screen but add - * progress of train based on ScheduleRuntime - */ - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/Schedule.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/Schedule.java index 927a68362..cdf7c0b0a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/Schedule.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/Schedule.java @@ -13,10 +13,9 @@ import com.simibubi.create.content.logistics.trains.management.schedule.conditio import com.simibubi.create.content.logistics.trains.management.schedule.condition.StationPoweredCondition; import com.simibubi.create.content.logistics.trains.management.schedule.condition.StationUnloadedCondition; import com.simibubi.create.content.logistics.trains.management.schedule.condition.TimeOfDayCondition; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.FilteredDestination; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.NearestDestination; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.RedstoneDestination; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.ScheduleDestination; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.ChangeTitleInstruction; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.DestinationInstruction; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.ScheduleInstruction; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.Pair; @@ -29,15 +28,14 @@ import net.minecraft.resources.ResourceLocation; public class Schedule { - public static List>> DESTINATION_TYPES = + public static List>> INSTRUCTION_TYPES = new ArrayList<>(); public static List>> CONDITION_TYPES = new ArrayList<>(); static { - registerDestination("filtered", FilteredDestination::new); - registerDestination("nearest", NearestDestination::new); - registerDestination("redstone", RedstoneDestination::new); + registerInstruction("destination", DestinationInstruction::new); + registerInstruction("rename", ChangeTitleInstruction::new); registerCondition("delay", ScheduledDelay::new); registerCondition("time_of_day", TimeOfDayCondition::new); registerCondition("fluid_threshold", FluidThresholdCondition::new); @@ -47,8 +45,8 @@ public class Schedule { registerCondition("powered", StationPoweredCondition::new); } - private static void registerDestination(String name, Supplier factory) { - DESTINATION_TYPES.add(Pair.of(Create.asResource(name), factory)); + private static void registerInstruction(String name, Supplier factory) { + INSTRUCTION_TYPES.add(Pair.of(Create.asResource(name), factory)); } private static void registerCondition(String name, Supplier factory) { @@ -56,7 +54,7 @@ public class Schedule { } public static List getTypeOptions(List> list) { - String langSection = list.equals(DESTINATION_TYPES) ? "destination." : "condition."; + String langSection = list.equals(INSTRUCTION_TYPES) ? "instruction." : "condition."; return list.stream() .map(Pair::getFirst) .map(rl -> rl.getNamespace() + ".schedule." + langSection + rl.getPath()) diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleEntry.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleEntry.java index b5f112abf..1aeefc729 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleEntry.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleEntry.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.simibubi.create.content.logistics.trains.management.schedule.condition.ScheduleWaitCondition; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.ScheduleDestination; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.ScheduleInstruction; import com.simibubi.create.foundation.utility.NBTHelper; import net.minecraft.nbt.CompoundTag; @@ -12,7 +12,7 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; public class ScheduleEntry { - public ScheduleDestination destination; + public ScheduleInstruction instruction; public List> conditions; public ScheduleEntry() { @@ -26,20 +26,23 @@ public class ScheduleEntry { public CompoundTag write() { CompoundTag tag = new CompoundTag(); ListTag outer = new ListTag(); - tag.put("Destination", destination.write()); + tag.put("Instruction", instruction.write()); + if (!instruction.supportsConditions()) + return tag; for (List column : conditions) outer.add(NBTHelper.writeCompoundList(column, ScheduleWaitCondition::write)); - tag.put("WaitConditions", outer); + tag.put("Conditions", outer); return tag; } public static ScheduleEntry fromTag(CompoundTag tag) { ScheduleEntry entry = new ScheduleEntry(); - entry.destination = ScheduleDestination.fromTag(tag.getCompound("Destination")); + entry.instruction = ScheduleInstruction.fromTag(tag.getCompound("Instruction")); entry.conditions = new ArrayList<>(); - for (Tag t : tag.getList("WaitConditions", Tag.TAG_LIST)) - if (t instanceof ListTag list) - entry.conditions.add(NBTHelper.readCompoundList(list, ScheduleWaitCondition::fromTag)); + if (entry.instruction.supportsConditions()) + for (Tag t : tag.getList("Conditions", Tag.TAG_LIST)) + if (t instanceof ListTag list) + entry.conditions.add(NBTHelper.readCompoundList(list, ScheduleWaitCondition::fromTag)); return entry; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleItem.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleItem.java index f32df1b6a..a5818a835 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleItem.java @@ -1,11 +1,14 @@ package com.simibubi.create.content.logistics.trains.management.schedule; +import java.util.List; + import com.simibubi.create.AllContainerTypes; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; import com.simibubi.create.content.logistics.trains.entity.CarriageContraption; import com.simibubi.create.content.logistics.trains.entity.CarriageContraptionEntity; import com.simibubi.create.content.logistics.trains.entity.Train; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.DestinationInstruction; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Lang; @@ -13,6 +16,8 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; @@ -27,8 +32,11 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.network.NetworkHooks; public class ScheduleItem extends Item implements MenuProvider { @@ -122,6 +130,29 @@ public class ScheduleItem extends Item implements MenuProvider { return InteractionResult.SUCCESS; } + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) { + Schedule schedule = getSchedule(stack); + if (schedule == null || schedule.entries.isEmpty()) + return; + + MutableComponent caret = new TextComponent("> ").withStyle(ChatFormatting.GRAY); + MutableComponent arrow = new TextComponent("-> ").withStyle(ChatFormatting.GRAY); + + List entries = schedule.entries; + for (int i = 0; i < entries.size(); i++) { + boolean current = i == schedule.savedProgress && schedule.entries.size() > 1; + ScheduleEntry entry = entries.get(i); + if (!(entry.instruction instanceof DestinationInstruction destination)) + continue; + ChatFormatting format = current ? ChatFormatting.YELLOW : ChatFormatting.GOLD; + MutableComponent prefix = current ? arrow : caret; + tooltip.add(prefix.copy() + .append(new TextComponent(destination.getFilter()).withStyle(format))); + } + } + public static Schedule getSchedule(ItemStack pStack) { if (!pStack.hasTag()) return null; diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleRuntime.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleRuntime.java index 34a5deb50..a2825a2db 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleRuntime.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleRuntime.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.logistics.trains.management.schedule; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; import com.simibubi.create.AllItems; import com.simibubi.create.content.logistics.trains.entity.Train; @@ -11,8 +12,9 @@ import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgePoi import com.simibubi.create.content.logistics.trains.management.edgePoint.station.GlobalStation; import com.simibubi.create.content.logistics.trains.management.schedule.condition.ScheduleWaitCondition; import com.simibubi.create.content.logistics.trains.management.schedule.condition.TimedWaitCondition; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.FilteredDestination; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.ScheduleDestination; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.ChangeTitleInstruction; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.DestinationInstruction; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.ScheduleInstruction; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.CTrains; import com.simibubi.create.foundation.utility.NBTHelper; @@ -42,6 +44,7 @@ public class ScheduleRuntime { int cooldown; List conditionProgress; List conditionContext; + String currentTitle; int ticksInTransit; List predictionTicks; @@ -107,12 +110,10 @@ public class ScheduleRuntime { return; } - GlobalStation nextStation = findNextStation(); - if (nextStation == null) { - train.status.failedNavigation(); - cooldown = INTERVAL; + GlobalStation nextStation = startCurrentInstruction(); + if (nextStation == null) return; - } + train.status.successfulNavigation(); if (nextStation == train.getCurrentStation()) { state = State.IN_TRANSIT; @@ -146,14 +147,16 @@ public class ScheduleRuntime { } } - public GlobalStation findNextStation() { + public GlobalStation startCurrentInstruction() { ScheduleEntry entry = schedule.entries.get(currentEntry); - ScheduleDestination destination = entry.destination; + ScheduleInstruction instruction = entry.instruction; - if (destination instanceof FilteredDestination filtered) { - String regex = filtered.nameFilter.replace("*", ".*"); + if (instruction instanceof DestinationInstruction destination) { + String regex = destination.getFilter() + .replace("*", ".*"); GlobalStation best = null; double bestCost = Double.MAX_VALUE; + for (GlobalStation globalStation : train.graph.getPoints(EdgePointType.STATION)) { if (!globalStation.name.matches(regex)) continue; @@ -166,9 +169,23 @@ public class ScheduleRuntime { best = globalStation; bestCost = cost; } + + if (best == null) { + train.status.failedNavigation(); + cooldown = INTERVAL; + return null; + } + return best; } + if (instruction instanceof ChangeTitleInstruction title) { + currentTitle = title.getScheduleTitle(); + state = State.PRE_TRANSIT; + currentEntry++; + return null; + } + return null; } @@ -196,6 +213,7 @@ public class ScheduleRuntime { paused = true; isAutoSchedule = false; currentEntry = 0; + currentTitle = ""; schedule = null; state = State.PRE_TRANSIT; conditionProgress = new ArrayList<>(); @@ -213,56 +231,68 @@ public class ScheduleRuntime { if (state == State.POST_TRANSIT || current >= entryCount) { GlobalStation currentStation = train.getCurrentStation(); if (currentStation != null) - predictions.add(createPrediction(current, currentStation.name, 0)); + predictions.add(createPrediction(current, currentStation.name, currentTitle, 0)); int departureTime = estimateStayDuration(current); if (departureTime == -1) accumulatedTime = -1; - } else if (train.navigation.destination != null) { - CTrains conf = AllConfigs.SERVER.trains; - double speed = (conf.getTopSpeedMPT() + conf.getTurningTopSpeedMPT()) / 2; - int timeRemaining = (int) (train.navigation.distanceToDestination / speed) * 2; + } else { + GlobalStation destination = train.navigation.destination; + if (destination != null) { + CTrains conf = AllConfigs.SERVER.trains; + double speed = (conf.getTopSpeedMPT() + conf.getTurningTopSpeedMPT()) / 2; + int timeRemaining = (int) (train.navigation.distanceToDestination / speed) * 2; - if (predictionTicks.size() > current && train.navigation.distanceStartedAt != 0) { - float predictedTime = predictionTicks.get(current); - if (predictedTime > 0) { - predictedTime *= - Mth.clamp(train.navigation.distanceToDestination / train.navigation.distanceStartedAt, 0, 1); - timeRemaining = (timeRemaining + (int) predictedTime) / 2; + if (predictionTicks.size() > current && train.navigation.distanceStartedAt != 0) { + float predictedTime = predictionTicks.get(current); + if (predictedTime > 0) { + predictedTime *= Mth + .clamp(train.navigation.distanceToDestination / train.navigation.distanceStartedAt, 0, 1); + timeRemaining = (timeRemaining + (int) predictedTime) / 2; + } } - } - accumulatedTime += timeRemaining; - predictions.add(createPrediction(current, train.navigation.destination.name, accumulatedTime)); + accumulatedTime += timeRemaining; + predictions.add(createPrediction(current, destination.name, currentTitle, accumulatedTime)); - int departureTime = estimateStayDuration(current); - if (departureTime != -1) - accumulatedTime += departureTime; - if (departureTime == -1) - accumulatedTime = -1; + int departureTime = estimateStayDuration(current); + if (departureTime != -1) + accumulatedTime += departureTime; + if (departureTime == -1) + accumulatedTime = -1; - } else - predictForEntry(current, accumulatedTime, predictions); + } else + predictForEntry(current, currentTitle, accumulatedTime, predictions); + } // Upcoming + String currentTitle = this.currentTitle; for (int i = 1; i < entryCount; i++) { int index = (i + current) % entryCount; if (index == 0 && !schedule.cyclic) break; - accumulatedTime = predictForEntry(index, accumulatedTime, predictions); + + if (schedule.entries.get(index).instruction instanceof ChangeTitleInstruction title) { + currentTitle = title.getScheduleTitle(); + continue; + } + + accumulatedTime = predictForEntry(index, currentTitle, accumulatedTime, predictions); } + predictions.removeIf(Objects::isNull); return predictions; } - private int predictForEntry(int index, int accumulatedTime, Collection predictions) { + private int predictForEntry(int index, String currentTitle, int accumulatedTime, + Collection predictions) { ScheduleEntry entry = schedule.entries.get(index); - if (!(entry.destination instanceof FilteredDestination filter)) + if (!(entry.instruction instanceof DestinationInstruction filter)) return accumulatedTime; if (predictionTicks.size() <= currentEntry) return accumulatedTime; if (accumulatedTime == -1) { - predictions.add(createPrediction(index, filter.nameFilter, accumulatedTime)); + predictions.add(createPrediction(index, filter.getFilter(), currentTitle, accumulatedTime)); return -1; } @@ -277,7 +307,7 @@ public class ScheduleRuntime { accumulatedTime += departureTime; } - predictions.add(createPrediction(index, filter.nameFilter, accumulatedTime)); + predictions.add(createPrediction(index, filter.getFilter(), currentTitle, accumulatedTime)); if (departureTime == -1) return -1; @@ -301,20 +331,22 @@ public class ScheduleRuntime { return 5; // TODO properly ask conditions for time prediction } - private TrainDeparturePrediction createPrediction(int index, String destination, int time) { - if (++index >= schedule.entries.size()) { + private TrainDeparturePrediction createPrediction(int index, String destination, String currentTitle, int time) { + if (index >= schedule.entries.size()) { if (!schedule.cyclic) return new TrainDeparturePrediction(train, time, new TextComponent(" "), destination); index %= schedule.entries.size(); } ScheduleEntry scheduleEntry = schedule.entries.get(index); - if (!(scheduleEntry.destination instanceof FilteredDestination fd)) - return new TrainDeparturePrediction(train, time, new TextComponent(" "), destination); + if (!(scheduleEntry.instruction instanceof DestinationInstruction instruction)) + return null; - String station = fd.nameFilter.replaceAll("\\*", "") - .trim(); - return new TrainDeparturePrediction(train, time, new TextComponent(station), destination); + return new TrainDeparturePrediction(train, time, + new TextComponent(currentTitle.isBlank() ? instruction.getFilter() + .replaceAll("\\*", "") + .trim() : currentTitle), + destination); } public CompoundTag write() { @@ -363,7 +395,7 @@ public class ScheduleRuntime { discardSchedule(); return stack; } - + public void setSchedulePresentClientside(boolean present) { schedule = present ? new Schedule() : null; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleScreen.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleScreen.java index a1f708ae8..19be8f685 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/ScheduleScreen.java @@ -19,8 +19,8 @@ import com.mojang.math.Matrix4f; import com.simibubi.create.content.logistics.trains.management.schedule.condition.ScheduleWaitCondition; import com.simibubi.create.content.logistics.trains.management.schedule.condition.ScheduledDelay; import com.simibubi.create.content.logistics.trains.management.schedule.condition.TimedWaitCondition.TimeUnit; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.FilteredDestination; -import com.simibubi.create.content.logistics.trains.management.schedule.destination.ScheduleDestination; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.DestinationInstruction; +import com.simibubi.create.content.logistics.trains.management.schedule.destination.ScheduleInstruction; import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.UIRenderHelper; @@ -66,7 +66,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen { - ScheduleDestination newlyCreated = Schedule.DESTINATION_TYPES.get(index) + ScheduleInstruction newlyCreated = Schedule.INSTRUCTION_TYPES.get(index) .getSecond() .get(); if (editingDestination.getId() @@ -230,19 +231,24 @@ public class ScheduleScreen extends AbstractSimiContainerScreen p.getSecond() .accept(editing, p.getFirst())); editorSubWidgets.forEach(p -> removeWidget(p.getFirst())); editorSubWidgets.clear(); + editorDividers = null; editingCondition = null; editingDestination = null; @@ -257,7 +263,9 @@ public class ScheduleScreen extends AbstractSimiContainerScreen removeWidget(p.getFirst())); editorSubWidgets.clear(); editorDividers = new ArrayList<>(); + field.createWidgets(this, editorSubWidgets, editorDividers, leftPos - 2, topPos + 40); + if (editorSubWidgets.isEmpty()) editorDividers = null; editorSubWidgets.forEach(pair -> { @@ -307,7 +315,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen list : entry.conditions) maxRows = Math.max(maxRows, list.size()); - int cardHeight = cardHeader + 24 + maxRows * 18; + boolean supportsConditions = entry.instruction.supportsConditions(); + int cardHeight = cardHeader + (supportsConditions ? 24 + maxRows * 18 : 4); matrixStack.pushPose(); matrixStack.translate(leftPos + 25, topPos + yOffset, 0); @@ -418,7 +429,8 @@ public class ScheduleScreen extends AbstractSimiContainerScreen destination = entry.destination.getSummary(); + if (supportsConditions) + AllGuiTextures.SCHEDULE_STRIP_WAIT.render(matrixStack, 4, 28); + + Pair destination = entry.instruction.getSummary(); renderInput(matrixStack, destination, 26, 5, false, 100); - entry.destination.renderSpecialIcon(matrixStack, 30, 5); + entry.instruction.renderSpecialIcon(matrixStack, 30, 5); matrixStack.popPose(); @@ -518,7 +533,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen list : entry.conditions) maxRows = Math.max(maxRows, list.size()); - int cardHeight = CARD_HEADER + 24 + maxRows * 18; + int cardHeight = CARD_HEADER + (entry.instruction.supportsConditions() ? 24 + maxRows * 18 : 4); - if (y >= cardHeight) { + if (y >= cardHeight + 5) { y -= cardHeight + 10; if (y < 0) return false; continue; } - int fieldSize = getFieldSize(100, entry.destination.getSummary()); + int fieldSize = getFieldSize(100, entry.instruction.getSummary()); if (x > 25 && x <= 25 + fieldSize && y > 4 && y <= 20) { List components = new ArrayList<>(); - components.add(Lang.translate("schedule.destination_type") - .withStyle(ChatFormatting.GOLD)); - components.addAll(entry.destination.getTitleAs("destination")); + components.addAll(entry.instruction.getTitleAs("instruction")); components.add(empty); components.add(clickToEdit); renderTooltip(ms, components, Optional.empty(), mx, my); if (click == 0) - startEditing(entry.destination, confirmed -> { + startEditing(entry.instruction, confirmed -> { if (confirmed) - entry.destination = editingDestination; + entry.instruction = editingDestination; }, false); return true; } @@ -746,7 +760,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen { + startEditing(new DestinationInstruction(), confirmed -> { if (!confirmed) return; @@ -754,7 +768,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen initialConditions = new ArrayList<>(); initialConditions.add(delay); - entry.destination = editingDestination; + entry.instruction = editingDestination; delay.value = 5; delay.timeUnit = TimeUnit.SECONDS; entry.conditions.add(initialConditions); @@ -935,7 +949,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen getSummary() { + return Pair.of(icon(), new TextComponent(getLabelText())); + } + + @Override + public ResourceLocation getId() { + return Create.asResource("rename"); + } + + @Override + public ItemStack getSecondLineIcon() { + return icon(); + } + + @Override + public boolean supportsConditions() { + return false; + } + + public String getScheduleTitle() { + return getLabelText(); + } + + private ItemStack icon() { + return new ItemStack(Items.NAME_TAG); + } + + @Override + public List getSecondLineTooltip() { + return ImmutableList.of(Lang.translate("schedule.instruction.name_edit_box"), + Lang.translate("schedule.instruction.name_edit_box_1") + .withStyle(ChatFormatting.GRAY), + Lang.translate("schedule.instruction.name_edit_box_2") + .withStyle(ChatFormatting.DARK_GRAY)); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/DestinationInstruction.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/DestinationInstruction.java new file mode 100644 index 000000000..c2bf5b6f7 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/DestinationInstruction.java @@ -0,0 +1,80 @@ +package com.simibubi.create.content.logistics.trains.management.schedule.destination; + +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + +import com.google.common.collect.ImmutableList; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.Create; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public class DestinationInstruction extends ScheduleInstructionWithEditBox { + + public boolean isWaypoint; + + @Override + public Pair getSummary() { + return Pair.of(AllBlocks.TRACK_STATION.asStack(), new TextComponent(getLabelText())); + } + + @Override + public boolean supportsConditions() { + return !isWaypoint; + } + + @Override + protected void write(CompoundTag tag) { + tag.putBoolean("Waypoint", isWaypoint); + super.write(tag); + } + + @Override + protected void read(CompoundTag tag) { + isWaypoint = tag.getBoolean("Waypoint"); + super.read(tag); + } + + @Override + public ResourceLocation getId() { + return Create.asResource("destination"); + } + + @Override + public ItemStack getSecondLineIcon() { + return AllBlocks.TRACK_STATION.asStack(); + } + + public String getFilter() { + return getLabelText(); + } + + @Override + public List getSecondLineTooltip() { + return ImmutableList.of(Lang.translate("schedule.instruction.filter_edit_box"), + Lang.translate("schedule.instruction.filter_edit_box_1") + .withStyle(ChatFormatting.GRAY), + Lang.translate("schedule.instruction.filter_edit_box_2") + .withStyle(ChatFormatting.DARK_GRAY), + Lang.translate("schedule.instruction.filter_edit_box_3") + .withStyle(ChatFormatting.DARK_GRAY)); + } + + @Override + @OnlyIn(Dist.CLIENT) + protected void modifyEditBox(EditBox box) { + box.setFilter(s -> StringUtils.countMatches(s, '*') <= 3); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/FilteredDestination.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/FilteredDestination.java deleted file mode 100644 index 28a5517c3..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/FilteredDestination.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.simibubi.create.content.logistics.trains.management.schedule.destination; - -import java.util.List; -import java.util.function.BiConsumer; - -import org.apache.commons.lang3.StringUtils; - -import com.google.common.collect.ImmutableList; -import com.simibubi.create.AllBlocks; -import com.simibubi.create.Create; -import com.simibubi.create.content.logistics.trains.management.schedule.IScheduleInput; -import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleScreen; -import com.simibubi.create.foundation.utility.Lang; -import com.simibubi.create.foundation.utility.Pair; - -import net.minecraft.ChatFormatting; -import net.minecraft.client.gui.components.EditBox; -import net.minecraft.client.gui.components.events.GuiEventListener; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -public class FilteredDestination extends ScheduleDestination { - public String nameFilter = ""; - - @Override - public Pair getSummary() { - return Pair.of(AllBlocks.TRACK_STATION.asStack(), new TextComponent(nameFilter)); - } - - @Override - protected void read(CompoundTag tag) { - nameFilter = tag.getString("Filter"); - } - - @Override - protected void write(CompoundTag tag) { - tag.putString("Filter", nameFilter); - } - - @Override - public ResourceLocation getId() { - return Create.asResource("filtered"); - } - - @Override - public ItemStack getSecondLineIcon() { - return AllBlocks.TRACK_STATION.asStack(); - } - - @Override - public List getTitleAs(String type) { - return ImmutableList.of(Lang.translate("schedule.destination.filtered_matching", - new TextComponent(nameFilter).withStyle(ChatFormatting.YELLOW))); - } - - @Override - public List getSecondLineTooltip() { - return ImmutableList.of(Lang.translate("schedule.destination.filter"), - Lang.translate("schedule.destination.filter_2") - .withStyle(ChatFormatting.GRAY), - Lang.translate("schedule.destination.filter_3") - .withStyle(ChatFormatting.DARK_GRAY), - Lang.translate("schedule.destination.filter_4") - .withStyle(ChatFormatting.DARK_GRAY)); - } - - @Override - @OnlyIn(Dist.CLIENT) - public void createWidgets(ScheduleScreen screen, - List>> editorSubWidgets, - List dividers, int x, int y) { - super.createWidgets(screen, editorSubWidgets, dividers, x, y); - EditBox editBox = new EditBox(screen.getFont(), x + 84, y + 52, 112, 10, new TextComponent(nameFilter)); - editBox.setBordered(false); - editBox.setTextColor(0xFFFFFF); - editBox.setValue(nameFilter); - editBox.setFilter(s -> StringUtils.countMatches(s, '*') <= 3); - editBox.changeFocus(false); - editBox.mouseClicked(0, 0, 0); - editorSubWidgets - .add(Pair.of(editBox, (dest, box) -> ((FilteredDestination) dest).nameFilter = ((EditBox) box).getValue())); - } - -} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/NearestDestination.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/NearestDestination.java deleted file mode 100644 index c4a5712a8..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/NearestDestination.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.simibubi.create.content.logistics.trains.management.schedule.destination; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.Create; -import com.simibubi.create.foundation.utility.Lang; -import com.simibubi.create.foundation.utility.Pair; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; - -public class NearestDestination extends ScheduleDestination { - @Override - public Pair getSummary() { - return Pair.of(AllBlocks.TRACK_STATION.asStack(), Lang.translate("schedule.destination.nearest")); - } - - @Override - protected void write(CompoundTag tag) {} - - @Override - protected void read(CompoundTag tag) {} - - @Override - public ResourceLocation getId() { - return Create.asResource("nearest"); - } -} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/RedstoneDestination.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/RedstoneDestination.java deleted file mode 100644 index 9392710e4..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/RedstoneDestination.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.simibubi.create.content.logistics.trains.management.schedule.destination; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.Create; -import com.simibubi.create.foundation.utility.Pair; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; - -public class RedstoneDestination extends ScheduleDestination { - @Override - public Pair getSummary() { - return Pair.of(AllBlocks.TRACK_STATION.asStack(), new TextComponent("Redstone Pulse")); - } - - @Override - protected void write(CompoundTag tag) {} - - @Override - protected void read(CompoundTag tag) {} - - @Override - public ResourceLocation getId() { - return Create.asResource("redstone"); - } -} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleDestination.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleInstruction.java similarity index 66% rename from src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleDestination.java rename to src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleInstruction.java index 70f75e985..9015d34c3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleDestination.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleInstruction.java @@ -10,11 +10,13 @@ import com.simibubi.create.foundation.utility.Pair; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; -public abstract class ScheduleDestination implements IScheduleInput { +public abstract class ScheduleInstruction implements IScheduleInput { protected abstract void write(CompoundTag tag); protected abstract void read(CompoundTag tag); + + public abstract boolean supportsConditions(); public final CompoundTag write() { CompoundTag tag = new CompoundTag(); @@ -23,20 +25,20 @@ public abstract class ScheduleDestination implements IScheduleInput { return tag; } - public static ScheduleDestination fromTag(CompoundTag tag) { + public static ScheduleInstruction fromTag(CompoundTag tag) { ResourceLocation location = new ResourceLocation(tag.getString("Id")); - Supplier supplier = null; - for (Pair> pair : Schedule.DESTINATION_TYPES) + Supplier supplier = null; + for (Pair> pair : Schedule.INSTRUCTION_TYPES) if (pair.getFirst() .equals(location)) supplier = pair.getSecond(); if (supplier == null) { - Create.LOGGER.warn("Could not parse schedule destination type: " + location); - return null; + Create.LOGGER.warn("Could not parse schedule instruction type: " + location); + return new DestinationInstruction(); } - ScheduleDestination scheduleDestination = supplier.get(); + ScheduleInstruction scheduleDestination = supplier.get(); scheduleDestination.read(tag); return scheduleDestination; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleInstructionWithEditBox.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleInstructionWithEditBox.java new file mode 100644 index 000000000..6545643d0 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/destination/ScheduleInstructionWithEditBox.java @@ -0,0 +1,69 @@ +package com.simibubi.create.content.logistics.trains.management.schedule.destination; + +import java.util.List; +import java.util.function.BiConsumer; + +import com.google.common.collect.ImmutableList; +import com.simibubi.create.content.logistics.trains.management.schedule.IScheduleInput; +import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleScreen; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public abstract class ScheduleInstructionWithEditBox extends ScheduleInstruction { + + private String labelText = ""; + + protected String getLabelText() { + return labelText; + } + + protected void setLabelText(String labelText) { + this.labelText = labelText; + } + + @Override + protected void read(CompoundTag tag) { + labelText = tag.getString("Text"); + } + + @Override + protected void write(CompoundTag tag) { + tag.putString("Text", labelText); + } + + @Override + public List getTitleAs(String type) { + return ImmutableList.of(Lang.translate("schedule." + type + "." + getId().getPath() + ".summary") + .withStyle(ChatFormatting.GOLD), Lang.translate("generic.in_quotes", new TextComponent(getLabelText()))); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void createWidgets(ScheduleScreen screen, + List>> editorSubWidgets, + List dividers, int x, int y) { + super.createWidgets(screen, editorSubWidgets, dividers, x, y); + + EditBox editBox = new EditBox(screen.getFont(), x + 84, y + 52, 112, 10, new TextComponent(labelText)); + editBox.setBordered(false); + editBox.setTextColor(0xFFFFFF); + editBox.setValue(labelText); + editBox.changeFocus(false); + editBox.mouseClicked(0, 0, 0); + editorSubWidgets.add(Pair.of(editBox, + (dest, box) -> ((ScheduleInstructionWithEditBox) dest).labelText = ((EditBox) box).getValue())); + } + + @OnlyIn(Dist.CLIENT) + protected void modifyEditBox(EditBox box) {} + +} diff --git a/src/main/java/com/simibubi/create/foundation/command/DumpRailwaysCommand.java b/src/main/java/com/simibubi/create/foundation/command/DumpRailwaysCommand.java index c6c4c7832..2587a1ea4 100644 --- a/src/main/java/com/simibubi/create/foundation/command/DumpRailwaysCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/DumpRailwaysCommand.java @@ -112,7 +112,7 @@ public class DumpRailwaysCommand { .replaceAll("_", " ")), runtime.paused ? darkBlue : blue); if (!runtime.paused && runtime.state != State.POST_TRANSIT) { - for (Component component : runtime.getSchedule().entries.get(runtime.currentEntry).destination + for (Component component : runtime.getSchedule().entries.get(runtime.currentEntry).instruction .getTitleAs("destination")) { chat.accept(" - " + component.getString(), blue); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java index 95883e477..a80231a48 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java @@ -110,6 +110,7 @@ public enum AllGuiTextures implements ScreenElement { SCHEDULE_STRIP_TRAVEL("schedule", 12, 239, 11, 16), SCHEDULE_STRIP_DOTTED("schedule", 23, 239, 11, 16), SCHEDULE_STRIP_END("schedule", 34, 239, 11, 16), + SCHEDULE_STRIP_ACTION("schedule", 209, 239, 11, 16), SCHEDULE_EDITOR("schedule_2", 256, 89), SCHEDULE_EDITOR_INACTIVE_SLOT("schedule_2", 0, 91, 18, 18), SCHEDULE_EDITOR_SECOND_LINE("schedule_2", 20, 91, 124, 18), diff --git a/src/main/resources/assets/create/lang/default/interface.json b/src/main/resources/assets/create/lang/default/interface.json index 211f37d6d..1a5fa9861 100644 --- a/src/main/resources/assets/create/lang/default/interface.json +++ b/src/main/resources/assets/create/lang/default/interface.json @@ -94,6 +94,7 @@ "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "Clockwise", "create.generic.counter_clockwise": "Counter-Clockwise", + "create.generic.in_quotes": "\"%1$s\"", "create.action.scroll": "Scroll", "create.action.confirm": "Confirm", @@ -557,25 +558,31 @@ "create.gui.schedule.lmb_edit": "Left-Click to Edit", "create.gui.schedule.rmb_remove": "Right-Click to Remove", "create.gui.schedule.duplicate": "Duplicate", - "create.gui.schedule.remove_entry": "Remove Stop", - "create.gui.schedule.add_entry": "Add Stop", + "create.gui.schedule.remove_entry": "Remove Action", + "create.gui.schedule.add_entry": "Add Action", "create.gui.schedule.move_up": "Move up", "create.gui.schedule.move_down": "Move down", "create.gui.schedule.add_condition": "Add Condition", "create.gui.schedule.alternative_condition": "Alternative Condition", - "create.schedule.destination_type": "Next Stop:", - "create.schedule.destination.editor": "Destination Editor", - "create.schedule.destination.filtered": "Specific Station", - "create.schedule.destination.filtered_matching": "Station: %1$s", - "create.schedule.destination.filter": "Station Name", - "create.schedule.destination.filter_2": "Use * as a text wildcard", - "create.schedule.destination.filter_3": "Example: 'My Station, Platform *'", - "create.schedule.destination.filter_4": "Train picks nearest unoccupied match", - "create.schedule.destination.nearest": "Nearest Station", - "create.schedule.destination.redstone": "Station with Redstone Pulse", - "create.schedule.condition_type": "Continue when:", + "create.schedule.instruction_type": "Next Action:", + "create.schedule.instruction.editor": "Instruction Editor", + + "create.schedule.instruction.destination": "Travel to Station", + "create.schedule.instruction.destination.summary": "Next Stop:", + "create.schedule.instruction.filter_edit_box": "Station Name", + "create.schedule.instruction.filter_edit_box_1": "Use * as a text wildcard", + "create.schedule.instruction.filter_edit_box_2": "Example: 'My Station, Platform *'", + "create.schedule.instruction.filter_edit_box_3": "Train picks nearest unoccupied match", + "create.schedule.instruction.rename": "Update Schedule Title", + "create.schedule.instruction.rename.summary": "New Title:", + "create.schedule.instruction.name_edit_box": "Schedule Title", + "create.schedule.instruction.name_edit_box_1": "Affects text shown on displays", + "create.schedule.instruction.name_edit_box_2": "Defaults to next destination's name", + + "create.schedule.condition_type": "Continue if/after:", "create.schedule.condition.editor": "Condition Editor", + "create.schedule.condition.delay": "Scheduled Delay", "create.schedule.condition.delay_short": "Wait: %1$s", "create.schedule.condition.idle": "Cargo Inactivity", diff --git a/src/main/resources/assets/create/textures/gui/edit_condition.pdn b/src/main/resources/assets/create/textures/gui/edit_condition.pdn deleted file mode 100644 index b6ec2c9a85e5443a3fac1d0378b4901766d1e1fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25300 zcmeFY2Xs``+As`)1Z?qMRIXUU1r>FWGkxYDWIWURncgUI$~n_}9|(h8M2L!lfG~O$ zks|d{1!4iBQlhi~5ke6n1PCFdPv-o40=BpO@BRLNec$@ldf&s!p0mq&_TEo_p1o1= zl{Dew{l+vCw#&|f}2=8F4mBSHb^gpqCo7u6)mGLbWg zfJdp-y99bCcvBav0)&T{!7tZt54-%u7R02~YRD2K5~bUjePc8MwVuL75MIiYOt8&r zeQ}i3E^t}wNd)0X6`;!EBX&n3ECL^JqhYOH!!?Lq7|TM5c!V|s7R60`zKWmWAtsI1 zDMF0Ch%v5m2>c2)KjhJ-P_0^oP}H7`zz<86F^@s$2?jE8E<|yE46BS@mBxtclGDa#KN_u=uVbUtlYeX15L$i}G$j;A1d_Gpfm`EfX77`4z5)cE6 zlB|%;lt`o_aR(znqcC7d9Sj+m3cb&QX55Y$no!gv!Kr`? zd>Vh8kqN<=ofR>s_)Jvf^Js+`k;EYvSrTd{YPE#Kx-dH;^1&WaMn_@eW}h4PI-;%= zHAoK7O)RDn$(TZr$>Y!me9EBBrtvz&Ms_HKt9_ObTP0Vpl8OutMIwc(`6DuE}0)^O7(h?j!Ds~9ZqdbD<%h%76p^RrmB+M zw3B3`l2Z(oNnn%Oyl6sCGo~S9DwHs}P@e*~h3!-$4Yp)xK8)tm`Oyd!vg&B|kQ=v1 zBbbm$(p%bz);$CkdFyRwiUa9X>4p%rXSRu08kDa7ZTccPc zrl+MeR77S~QlwO_O2H-Tg&{31rK7l5N*2XN%gC7_VU!6O(@Byv&Bz2S+^~v75!p;K zNTDZ5NC|F+Mz?5;jDSgEF&Zrf5#(XuYHB2|Acf*ax+zZbgws9^&QNN}Axvk{krO^9 zrjJFLWQCqav3t|7nCZh(G^&por`Rd+I6V-uXFLvXJZ&^lSQtMQ=4CP=X(q^H@WVQl z#YIX;$THlN(HRBeBsZGy*%=Ot)JF|?*<6M~q++uuI*NdcN1#YFB}1%Qo`lPC zj0QYpTNq++O5^V+p!$ZqpTJPe}|^KnsHTF0<6JRx12k}^ue5l__S zkH*+B66PWM#J(8rN~LsS3T*OY8YVd*wJY5;mDWHKhjoA-EtHVR;rCN$sDtK(5*eBo zW*W(4F%8TUkt^5~eZo&ld04SDgBdm3Z1fZ*X_g4Rq_or_as_2V7OJG{9f*jmw=vT3 zgj|)TE1Y~(D30rK8m!kbWn9GUP8cG%-;Mb+s8a2>BoQAL;4=`CULMj(_zYYg4bp*3 z`>1*!-9%wxN;Phb(quN87dP1hkj!q8`b}P(O7|pG_Ef;cj0S>GTnpJDe$I{Gz11Jl(BS2wiLWyvk$ByXIa#Ko? z(D1ZSn!7Mx+;8huig;H1#JGp+oMQebAA(E3%M%Zx38X$SSYE{s~ zlprLd$S<|g9B@#W7Nxxbc{EA_sFGnmpDM;DQ5|4U4ueQbvZjmr07)Fw9`tbuQFwk2CBf z-0iVwd}LQF9v6s|9!W;P$ly%eAq%P#G%~{{rm(^SSIi{W7;%#kPqG7ii^|2oJ($cR z%rK%Ey3fsZ#l38n)kM}91a`3>irYvYURrLY;t@3jc!e2up>c-C9;I5iY)nUiMQ~h{ z(m6cF5EBx|5C%go^T9SzMuAEh_CQD{vwM8N!ujmnv^c^Ly7fwi*r-Y9At>SYkm4e- zn90;jO%j$v?!shYK|)RQTOpbj!=VhF?QoLP0+vMX&Bz5lH3?I3oi;vX50EmUq}q;0 zl$H!4%8*$yF7OvNRF93UKRr-XJlzl)J~N;5=>ZSk|@JWojIip(b+zx6X-Tt*k%tf z(5RVYB85UaV=7@((4q{AG@+x$L`HhRCAV=&{*;;Ru#y5OW=2sHWDP_`l#qw6b|cC( zLy4*-PCnDc7qR$EhDWL4@_A8%J83rI4BBH39fhG8EGm_*v`3XK-mr=$YP6?Hsb^zx`>Wk^= zTpKqbXGSvy9^ytcA*o-QQd?qtB}pG+>m5!W)uX0T$ZEb`sBy5OR$oFJA&b;8bxwiNV+}zhtBxXbr}!DNN5{3q$sr*u079>FsEiIlj3(6zVj(u{6lEMFvNg%I z#H3Oh;t0iJ2<)WE5NTZLmg`IuUBnnggb61}rbb*moFb%CB?)B$IHg(%LZMT*N`xPF z2jehRsiwuuUPLN!iqt|%DyqS3Bw(sFb|ebqfE-VH=t-GW1LLSdm=p&xzyoCfdl?U? z$V@9Ty8hU#7s#Xkw<`XLnAEI%;)i={D8^KWAlT2QAn4@MJ^4j z*9M?in5(c#;~6x_MQtLxF&a zsZyJy5=q=f1~h^poS8(Ns&K}RsYFJ(BTmytv~(vTqa}gguT+~*;MT@nPCAGOm?Az1 zB;-N!zt$Eu`@9%8M$K3RevE2^*_aIQ0BUh!T)Q=asKr6KPvSsSVr|Gvwb2tW&UJEw z+=R-XF{r?!P*@CcMS$V)BB)cTN|PW+EN3H5C6lceTd+9ha4>^>Zju>vsiP)oC@N5k z$qZcOPR0{BhQUTmWdimlz?Mi&aler66X?VeBozes4Wc5wlV^3K2{xZ8pn4D%VsUWQ zJTIcNTWFBPp%zKNR<%(s1qy-+KnTKff{GVc`^iqk2`a)&08hFpPBo}2fpAgT%PMt;LTxkq}@5rNDq9 z8ib4Tf&dYkn|r4@QAC1h?b81fcrkKmNeMznTqGWa$NPPax7r0x9iB|6-6}g*F7&6R zDh7zXoJyM0t~RQa0)TtH(2(S(WlluNy@huSVf7;M;*h;-^M<8pxxC+!Qj4CFX*_o()A3N?|6BL^7$AD<)+@X|)cc zVF^c+o`_*AM6ON6YY?7`f<-A#B_dOEm8m}6B(V7zNiI*81P%YCell`-KwSv}JO`8(>$!kt zh#-PEa3-k4`)~p(3^7?6lK|xqL^O5=jV+0p1;y&WperZ}lADGU^*%)<_M{jJHzMQ5 zGtwwcm!V}cd{iI9>1L+PAVAc7Wyr3V#`tc8jf+!KB#KzML0Dzf#raN#6M|T9R4qZ6 zQAp&`#5^=xh$18VXMwcKQhQDNL0j*4P7wn(k8 zs4`BkG^}QZbUxVVGuaWFDv3}KqYObKZZ0nb@xnmplxa6t2r^!=lmX>Zf*BD75%Jjw z9u+!%x0AsB`J;%DWr@0VDqD<7QpMB}HKvamB4je+m6!obGFc8k)gDR8{D7Ci7WtaA zQy@mru)q-$#jIc$hw6Gr#AY!Bl83`=} zd29)>H^X=M+-YEmaD;|ftO_o$2*3r3DRG0!3^ID|U{Vy6rCC(7PlX$RbdgXhEusz~ zdYUK&;4niji6)5(a2F-2cgk#TvztwY^<3Q2IPnwNg2ZtheL4~l?&Z)l!*wuMlKn_ z)m#zq@fi$<1BPL$$S&mbP_ZT?4lwLgF2q+VVG=n8{Je-S&4~JfDkS2II=Eqo1lhvM z49vGUk|a(mR5O~9vo6q#pHm(L+7W`7)fCk2Svs00K7U>sd$nf zf&`l=<U#g>#Zu$->#m#+a z!9Li&D6UJ&czwYFz$G8V1VA?m`snS7vbjkv;=YA9J)JC(@Pp!{6h(sESh6oZ_|u;C z%7{~d=y{Tx^HG2SjdC-HjBB&Y1tvcf6ag7Pq}U(m#!rfY11tOw@eXA1_iw{~3W%q0 zm(Zv6hwXBw5LE$PsP%(TLSYNCVUN({&wxP^H=+tkr7E&s;id^=Nr9FT2O*JCZALAa z9CB&R6u!fY*~K^)=AsZSVi3y>kcHLF7Y9Nv)Q-_m4mdp zgDhHNo-U<)R+!E`7Jh55=rgk{r-D7vI3%#WJ6NtP;# zr4kyE1jN8PTY?cF8^R=k)$M?y)NtG);EN{f;S5|@$ z6YU$Tmf8`LiHzu(7&Ybuz^R#xDhM${9=QpTx-$$)!UlYVOf2BXH8hIO4P+0*j!4Ka zv%$0g$V(XIhzjIV(Xhg5qnq>&n5;zP^t1&=4P*#TX)*>Ol`NzsZEPyVkfB&3HcQw8 zaxy>yl3Wm!>d|P}l|WrVE~FGjLpnNL5!PWUoi-{DLbR}lDh{zt3_p|ZFpzLnfDW+` z12IlKW;$U7mtPDs5u!5o@`9gYHf{d$}9u3*?@7EO-M93g63426-l8_?C4X6}G_z)ar z1;T6z#J9!;lprY_!!wYE9Hi5bxL!<$Jt?J{h4D}=oox&-87v%)qY?y9n0)*+Ef(|G zd0-zxCSanVgn=Pco`H#y5ehe;!+9ikA}XK&-NQ47A_#HB z1iB)W{7qK~9j+7|R*+c~GT=2m{Wo5-(dAB26nw1{D3v66SOh2eYM`y99zT{6-_#F) z(0-8Nqwuk!?<8^G+Go*OlJIzbl7S(>&5B|L@uL=&0M{#v@h9S!Sy^P0URjJk5x3+f z{n;x`fdIJP$I{Cb5cAF`X|h2?XW#qL3)qEUJVQ2Hp&d8)GT>h*K!0;2~U;a;rR^ zR0av*LTR6j==?a0`*Dl2=o?U6Tn5+AkZH(tvkW9!SaK`^$E{KG*X>3ag@Z3h+z*C0moti6pnMm2O0n;nIv%}6CzQZ2@OL`k|!Z02sRY~4~1n1 z9=g?uilL;|frL}$s8$jp8O2N(^@SO1ro)HQf=V;b1eT@5@dP!d$=GEf70qThP^db{ z$@Tb=Bp2wQh}WSOXti>)T`9^~gE3>mBn_Lw>X=vtI~;g~!JyNFes3yB3j_i&R1T7d z5}uzM_o_ryvQ7bOf%l0nc#(sLDJmqdhVOo3?B?vO>3Dx4qY zCrxS~i7tQABh+CSiYldiyG6u@f=V$EClfb?c(^1zV&nx7DVwbjh_zZeBqcNLdJsml zy)G@&nU+Tq6rtCf2)bdJUZygLTud@e=1seJ-iW|rHHqYI1IQ-(B+5j_LDty#jF^H; z!(E9uiAoJgHK@=`7yAVnhb}4N0rfk_1R|;otyFfs!&V>945e4HZ*fuAmQL6$OuMQWuF|j$Q zgh(VRIA{d%7n)S-RI#X*tPOaQm|3SJdk`UT=uy50*pU=7%}yxeQo2(Sa7w~la0rg0 z9yyD|^U76F3}!N!6e&1>q*H?=pO#_whwwB=`a5)aoxH!g@AP%Nhr(^r| zP71{&5XLnS-wtAUekd)_a78wzEtpa&0uc&b6wr!eb_SQC@~7M|iRCabBoVPmfJmfd zx1hLgX)5NhAR-o=pfk+^FC!RDB;4E-=H&$)2z*z{`H(%?BxKJ;{NcCxyo^UkA zqs0y6kO-wn9f$?y`*c2;T%==YNW3UdBmqjB9H+5NNuyVt1{o7P!pw-tW))o|cLHZe zO2JrMWe^XiBc3$m1Q7^=Sc4iBJ&o}a2;@wIe7Z*r$xT2kh`c!u~P{0L~1Gt8dH*Rov!t+htf<7xZF*34yrJcY6{1eSd-)w8#Be zAT|he+~JP$-O*4mia7?|ytQ?E->t4eH}7)|`R)4FU*h08gaV6M9biq880L@m8`!Vk zfC2sQ|08I5@#2@<9gP*YGI;Pk+H@2Q9eZmB7y93-^MXDfW{-jEV9~K6EPzGa_OW2m z2CFZQ0dSG$sS_vO8mf&&+yUp95&oz>81cDne?$j)Eco|dW5LE^S;1umCIzO^F)|yT zJm!BV@W~S=7dPK;$be#5L_YW%0&vxD$nBuGz1aL8h$L0G zi^wkhLqpV^!T$P(dgA8Ix`6=ve@N$>v?!KCipv>N0*c~N?goDYi5dZhsYLSTsc(L^DiK3|X?>}e=Xt?_^Eak?>#;i`-MDpZ8cYr4T_+rxtw`0Oc za5ZA&2ypXe!bl3ZCK^kJFmOq9dZH+U(y3 z@LI&}pu7Gw3%xi?k$IutXQ9FXc;74l_RUFXzfFQ9k(&Uo{|d15PXHN3fcJtX)*k?} z0iZsB>|X(becW1gkO3}_qE0^0^)~@G{|fl8e*(-b0v`Hr0fUA8tAOt<%IaY7H{`xz zaeuLRpjZqm7Jmc9-2?7=5d8efZ192+?2mf#&-ZQrYlYcoHi{Dt`=f5>x?_H8s87T9 zS&mR77y>us+*q_E8js*sJ9ckhC+T;Sa_7y4K8teK&G(yj<<`jGLGqaBxNw-xB6~Xi)iRW#Z$#O zi>UaIFk4jWfAS9oMS*#CV7Eu@)&LoF4g@ygPfVl0{J}_?>kHbwMY0tCezl23|6$0} zpniK1*Z(!OicB{!VD)4F-W4e+S|zaKyWCN()$Vmhg7JW(Bp9;V-LdqLK2#`z4y=FC z_742-;)V3@f7|ds62Fi6`^a6y#jgY(L;^Uu<9DnL83XG5`xCbx0xIqQ<@-J+>r;mn z75xSmp%tJ0MM3G4rm@9ZQDXYUsyMp%S0p)9d@o8*k?eztTvO7wv=OwMbN3_q9{_U~ z=LdcL`i}rbA4nQ_>Hl|7{5z2JV$VoW^nql6ms=p|zk&Sjk06V}*awnb{IDpM{|+Qv z>?ulUAINdw*i)40K9C&natkEmH;~nT0C{^+ z6#qr>1ta^!_x7SZ{bvGL}x`kgTslRm^{jjH;5&A|=~$08BT0lJ6u@82h)MM4#y z{v}0r=p$Y6_rHll*T2ZTMeO%4@@f&KeVkkT>EFM|g?)WRru#R2MRw}zD{{}j=_~R@ zUtf_8{@i!xZ{PuMw3f{(8hr5FabWz$J=M03H950U3l-z;p(v+O9uR- z^SS4?kJmr?kK6un_7Txp-F2Sk(g@xDU55vrS;3nf&RZXTx~lAh$MioQ{^aRh`y5Yb zC94*;yz*u2z=`D1txY$s^iGd8@2KAFIWq2xWb@Ti-Zki&tEVat?6|OypS|O@hrTRX z)idLB&MTb!nc7o1QodqKsDH8bj_WU+IyD9Tk~8g|US;pJe);jwJWncDiZVos_eACzQ z{Z69s#>GQRLQ_Yq?LX~9cG=qfoPo?4rKXPli?Ww?%^d1!*jc%JY1^FP^FG?U;N6lJ z?p|?ez^)GlTt1W=mo02xNO!+8oQBIk+ENpgMD}7!}j+N{=9BV?qWe6Z(^Q_+*mL75Bc8i$xUC<`tp0D>z8kyUAw@yreSX2 z&O=f9@%JnD{u~|iDgENy4{Bm}cX8aD@-25Ae78J(-7yN?_3%39LxuKS-MsL*JRBlP_;d`o?p&i}M9hFZ^y?FlH?)+uX`dLe!So8MIrP-sswXsw0 zqMvRcWaXx&^3}QdCm03izV|=cQ&qO+Q#5zgT|O_fe<5QE5wDw^T>fnH_CrIZqqau( zPxf5=rgr(W6FXKeojB!h%DIiZo!gc;S}*KhGCqIpnjnf|Zw9)Q) zZQshxW|VehY0vAq>XybQ-LYqSwk(-{7IrT##1$9~#+ zeVn=4xAJ28+ol_v7F`EO zU6amL|L98D7aiZ=oVu`T>8D+PYpeJ)eX{%Rj?eTBT?;H7r)OAt7gtSdJlwtUi^LTT zkWjy{qQpT(6V<$^PFd02R?w8^x?I35v%sI#siC++zW&1GGXT2p4pS5J7;(J zHJf{P*B^yWsH$S3qUPQCtKaj#z3JfIwlB~f zcO7S@t3P$RpXO~s${#Y%n=*Rl4N5iRo~^6TEK@XHbkS*lZHKpa9AF|3vOt3tv@hS<6e|U=fdHUS^DZ}@FcVk-V_-oHKZWy2a<%hqc zOQv0yv>n!>>FYNRp;Jd5f^+-Oh1VAx=vf-xwu(1z^qRR{W=G}v{nO*$dbiwTt~z|Z zfGvnE_Cap#$xPP=Xs|lBxN~@Kx#Pi~?%6S^ck6;n*Y_@~7p|#TGXKil4*&IMFGj6j z*Iio3*+9_BG)-7%m=8p2nPSnW4~#M0``KpS@w07i`mmq2#aE7g_rk@`>kn@$o3@(S z41ba#uG6ARHeIOg-ukhqYK6UK&hk;BIiERml}Dd_;-lK@?_XaV8b0|O_l*TFuX(R# z+qJZL=aTt*FXZ#)qiZ%BgSqiR&r91yJC&QjE}HkR*+0FVc3iY%e#iIepLaC*4_;Y0 zf7z^Q!VhY7pH5k`eENLlt+6t|^fYs;R8j?8)F+3jufUU=b!IlgS{ImTV*QJ_NJ&Sai7*{5I;zYiu<>%pq z^>XV3;o0mj(vgL~uSG0nPri}ml>cLGMOSBTMs~1IHK^>`EMk4>V0-oT7S30lWw$-_ z?pGx*p3OddWjL{^k+}ERhj+AaR*a42=TA*7B@_FZ#Pswp6Q0~5Gi{44x2&_h(lOzw z?$raYET8g4!e6&UHrV&p;gWBwzRkHxIbFlL9_*@LkL?{#jN-^OW6x&C6@uF?K2ck^ z@$h5BjSs%$q-qyt-yo&0RdwdZ7GBD(UDDBcU>9fhvwtC4XA_@%e62ciUb-uLW56rd z!3ZMHxr6A=mz~SLS@Qj^?BY72^)#`-xkOz%q2q&0%kE*a>e46YaP(J}ys>`b`_C6D zR(GQL>h4P`7gwI%o}PS`Lb5x;d8{yj@P<^O;|TNa zXXcyx6J4!P1My>K=mnx{ch;7BdxruQ)f!G$e)B2k!N=a+Q~6?U()JXkJuS7* zeCM9R$+Nj#|0G7QY~h?DlJ&3b?19czSCl=MSk{2N)lA&;F#Fz_#8H!$Sf3wy?x&J(x0c_z zR9o>}<%=`3oc5Q_RzKV%JJojMvFVeRc9xx=e(=rv4_>S4Aa-vj8p}T%^=MD;+eZnw zu&A@Hr{A2m%;m=Tm+Z@XH%_ZmRG^0%dy!s=j#%|qLVbMf8^rbw;`!c&Wu>lYbIs0% z0%u|F$2`Z?o7;lF-F%xP^TYOrT~94*vW;s@DlDAUerW)E-F{?RPsfTi)ekPp78-^f9DVThrd6Mu*?nYcWOlZ?D{CqI zg}6JPo15QkYi-_KFfwQE%|7_a>pf4snB7I>FA(m|#s*^F!IBYe8()~2okl>p4q{Y3 zOZz%Ydq0~m>f$GVlqHCL}y^>W&KRs1ZJQ_uHu zZX>#zvzJ=4_0y-&Nt^2LD4c5}y-svpCcf#(_PlAN6wY-JKQ$0F)x^x+>h_K<14aZ- zt0bswDeZr1~_jTF}j2JA^ML- zLGAuc&Cji{4p>FZZ|ul+b`W1yR|Zy$>?Al>cW0*)jU7EXfC!fUt?dLc>;iH8dakCk z+7msot-<;5R|G+-D-f%?)?C_VnA}WTeY%72H51WU#M&F{rIWAHW}fcI&YDB~*i}2V zP%&)mrASUPu!*?3hxkV)n%Ox^*T^sJ_)Bdb0)5G=m8P*v!y{-Sy3L-}XFRNVjA)sAfMo|mQr zO|SxZCtDE++0ij`i1^G&{#D4^pDExnwceLBfnqTxU@Avj;wKy0oRzxVi9;&sBD zC#rwWH?Av`E?;xEJYVuTVJ`%mJF@3H8#XmOcWE!@0&(#i5QdgQZTYkMdoL5DRH3>s zIe9mJMW@^@cet=XRD>?bBVtK0X3NbUQp1Kh_)0~6?Oc3=45 zA$`-X9#78;_9X|t7XGl7r|&(z-JV~zW7$%YA$@tnmgnuRV_)expV{(_Em>j#w0JFr ze);r@GTqoh!!%i4XT$9e@xHldbvJVUY}P*I_xcOo{IZ?P78w(>iOIiy0u^d^cUOfHDH!6ZUq{py3beuP z1hzlh-Al-JcQ*_>+Tr3oKj1P^%Pi0U(^ma$QXOURbfWGxV)E1?OXr7b?jqtJ5G8v+ zgRqm695Q|I1KtM-xZ-|bSAXVQBG$e17hN-TR5wJdb%dNwSE4(m2VQ1Pis9>=D$jOxTWj?VnOLs8y6DI zKV6yKHKF~ru{E2Xz0mf{0AFj4UZ_hK8qQ=zQy)3~Ug@iiy^tu^@ls_dhcyJfg^Hfe zh6~kQ2fNNR5U+p5Ia}VDoJlZ<;kxU%we*_dIca`kT#!Y2j| zy0nofZOt~FYuGl6)JlwKCzTOH-z0!f_TaP;mwU7K{js564^SQcvX_rF60hDjHM{pw zqNlt2&97UkkIw<_*NC;qg35j^W%>GcCh5U><$Z}-Su#I;WJM0@nbF9*F&BrXuA z%P#9T5`ui~YuWl9q3Qc$`25S7cdz(ctGcr7`TA3|MK5RT{fYf!C4LRF(3J1tOyA^Q zoXWmWY#KzgZ@nFerQiT@o*=|uSKq1G!~DWAf7_d2vOaI8xR>oO64SbB^40ZY6<4w| zc3&KD>48Sm*eToD(zBC>KE6Zz#eLY+UD?eSi2WatCjV4(5s)zOO>I1|bj~}h%O}Qn z&lu^mE%NUo9Ie?0d(!!`SF-i1>aRz?Tkc?w-TXwMEpm1a^vtrJBOdZfac5o)4z~6e+NN`h?2Eys?Fo(eaQhIp*xA{wDNkx8~gu+%MIsmdfa59 z^bMln&1($utR`KKCXu;)}l*>_m00_SmUK zvwEwK@0z+eS{>U*wAK?^CMWsP{;?;PzWHKjZg&p=yK#cDrjye!{k9eka9%)auBCcs zGmwlI{DqG{83n?E8~P(nE6K#>p5B`g%X9e>fTeqFIq)$rU-DX8)2w@m#;HuQgqS$0 ziI{Nb13edj^1|9**tREoYQW{upSS08U1i5MjwV9`nNO}P{RGSX)0=mO(cWO?kuzD` zKIPK&53R4Q=mr|O*y;qDVE&jdj&Ga&k+sCw`z52WVau{lPZO^mzq^U~>Z^}TYI{k# zhiLDv7+ruWtS9&Uu=b^u(^YMqoM`*Qw+0NT14Q54JoJaQb-c&VRi_Bf21?y6cpolo z$^P71aV*cd_=R!Ul1J#5XLRQBy`1Kc#M?UVxa%LKPfsnI)Yw4`7%yRf}I4qxB7~+v*Y7&P1ze;+rBUHbX`Bc?riqH!kM|xufJUR4lqDl=ND)dE1oGSInq9$X4}i% zFMw-hRRfA9xWis(ezlf6s<3F*GXxK}@7_PGqx+MNl?~3Li8-x59r`EdV(aXQfrE|1 zKAn5wM@C_^V&Nwj_AhcCjy4`(cqTMF@|tqx)J<2_$?@r@*M9KXMeCKB3pp3tGCSAy zR4sxo#@+R08&9n|@isGS`r_aw+SS%KCRR(n*pvPEN7c~L%Dax-AjanpteJjRe}p*w z@sc@~DNDM$o7NaNIBUm#vU7XWko8j^=sI-b_|ew*)=K0G;MXBTpZLtY0Z(Tx>{~GT z1T?vhl-T}{qo;b-E;~1A*ycwkRQ!}#zk=mmyy+3iiR8(6-Q#09%O`yO{miKkZ!Dj@ z=zwhMW1q9$=$&*fcl5EEsmum+wKA$*nam9@<|FSW2 zrF&EPiam24sgIXmet&Oc>`>QZS7aLHeb4NDuMIzPbxbp)=yG3vr+sTU^KJrb`(W<8 zp+~B_jseV~OI88iIrlmG*pUex59>%*O?5|0wjErvqy5Bz@WD*yxZdt3&tvMW>Diyt z=8D7ZJs0V8#Mk>&{!D4My)fwv@%1Zrf)viC@*nE!Cq7xSh!t!f2+lv+ zLEEtWO9MixiDmtW_FVsg%znhxeFX5<7Fk@iFZowLL@eEQK3jkN*`*hzEj|48Ug^o7 zb`tgVk%qpLY% zLP(pM)yv=B+q3;I_iYd$QNN=x1N7 zo=PF6avqw;BFv2Goy{v+&IEPmayxZVj=!ddFkG6~@btz!ZE2ue|7>%0?-WLP_hL`} z=eiY?8?9%WPUMZdAHDZl#l%APhdHgB?$RTjuhr_#%?%#TS3JG(XO{GHPiys!?7Q3E z-qU^M#-4`WoG0Ho?3=Eys@t6JZ+^bFc3<}X3tzlX)Hm*p_a{E~Yu@V`dx2>0icJ2J za4nkFeR0`xtohWAqdC8!Yo4lo{8{7TY&CW6_|_30ZCX2nh+Hpw?GU?l%(Y;S_^f>H%fxNR(ff&)Y=)Cv zRePVhK%9S_NLTH@1LypOK$zd!u4)s7xw|fY7L@~iov*pl{4w?U7kYQ)d)oTDYsv-J zb1$#iel~XaZ$llyVV5TjD{M$zxMywd4T8FR>Gm$vTY4?Gg!tz<^~4@x%=*&8Bj>AE z_4>@+VPog!edV1c#L)$-NyI&C%f9Dqp78mx_C>3%j)JD@b|1jfbHbgqE0rb3N{ims z;oT)~6ndd+L1F=jkU;A3_hZ24Dl0!+ozIn5o*26I(IGF~eR{y|&KZ7?IPE{}^zeG7 zxVM9t_bLufSc_-Px6YfvWstHzoPQofz%{SCUM4$o`Nt3aSTabw^6}EYJwK!Wp#LfU z*KzPd`gH#RcagvB_kU^eKg;|7L!AH1vDf ze#w7P%y=sH8sn`Ou05FAO1!XT^;P2N!f%Fu``laqPrFth)YO&5i5butSfI1rx{N~D zp%!O4no48}N(lX!rLAM3wXO2`(5e|_QDj>{Lbw5Dx4SbIblicKad@E=ECU#)2m%U^ zj#|*P2^DROBEbz1AjH^wzvR7l`d)}LwzGfiY}xKVd;dw!`Q3BRIlp_}d&#>e?DK!r zU10=}m(*2F3;BzRuz5&OhL0&oEaVn1s+jTX`k8nR>JLb;EP)>@XVSTu{XUY&HXl0! zQ+t22KlaU#R0|3?Jlptog+|Y5Ukh=G<$J9HAG+5!e6A2{xOVo#leIy<0>gx12{4bu zcOkr_Sexo8g?lnr^U&I}s~5mX@bT~Wz7y_1`dzhi-CudZV;wpB;W!*f+mspVL{Tq9 z%m-`Wz(|U6Z4xx{?27zpFA?_1YDdj&C!#Yqy%Tz$RnwWmV!%Sa;a60fU_UpxoXH4? ze%o?p8FdFxSVrC4$}h-;j~H&vIZJRANU5^viESrtR5L=^;ql9fdq4ouo(tiu*Drz( zx3DD5@rFi7e+;WkkWdga9-8};$k>)iHYowrw~Ss6puT1F zGKW?lmsJ}e%J04k*o|1#TYMXwuk>baaKv#Q$J2z50;^00;h$6si~tmCBq6|BpxZm{ruX(8;z7=)y z^~@Jvibo7kTlK$9-1)t6f$jMgfzhZUE& zT0*y{xw3SY(jNYBhwq})Tpn^=R6LNITBqZg<_NF$_77o4Y%no{Ju65v_#iU{GacO68QnaNkI-ZxYa0BUng5@;Y~UYWiF{Gi!*+D%0K|sCZ4AYz76X zU{+G0V(TX3%ntV$1bH#0)!oE2!qtHf>Zu6jO2E)WS+%f{i(m}xWaLn9O?<;M6;G0Qib;20+tY&1kgiN}(RCRP~LoDz_mN9}-SBsV4^xr<% zXuSqEcp1z9m)QTlRS`4Ii8$M?F!L+W`13s)0C%$FhPYY#l$Ur8>ZB)=_`|T9>6DJ2 zfjFZuiNd0rT=-}uAg!K)GUkustJlHARZnKpjxtuO>;myrA zP-(jBie-DE>rZ-vcK4SAzK9!=Em7y&g%(AI9^R#|@FhL`{etf&d0$2pJ`B=-lvt)% zx>CYi2OLa8se48Z6p%;tA34XkCgXoOMj{E`f&N!JfA%0*<$Cf#VlMh;+S7`+20z;} zs0`cI`qVx+U-P$}LG0U1UkhqlehYyx3dS-v-><@FY9=;?sfKzVnd(Yt2%8&rqm4@xdV%*%@`PO5{y%_ z`QQ7R06Ge@qtP}*n^A5ZM8kGQptBtn#b&z(!?{c%XDf!LTy<}2-(tQN;U-z=DK#b= zz99Xy-g(B_(3G8DsQu)bU0pCH9hS?czOrS{iDop?jdEPo)}CFV+Tg7(AMPSg4A`Tb zkOhUK&w6#J5QNo?#Eh=egb|pz7&AB-!$4{aGJ(FxeG}f_on?Ynm*CjP8uq$#<;viKp8F@05+bT6{hn67D`t1VSI@9DsrA6}W6HKT>0$o7; zQD%X`@7y+DFEN4iM);ygL37p)FjyV9j27-&rv%E?!Y1(SUk3)!+n@ROzz!h(l^nBsQp?$sK8NL@q4fJ{hV1!0(%Cp twLnoB{V@7LgSA98KPwr2?`p|$kZo*hYySn+@n1Am6iMQ2m9g9<@FP4m6xIL$ diff --git a/src/main/resources/assets/create/textures/gui/schedule.pdn b/src/main/resources/assets/create/textures/gui/schedule.pdn deleted file mode 100644 index e7a90a5e3dfa67b71f5a5b0c654beb28e8fce637..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29646 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 diff --git a/src/main/resources/assets/create/textures/gui/schedule.png b/src/main/resources/assets/create/textures/gui/schedule.png index 90eb05d13551b8bb56e70764a85512385048f537..36ef10f3f7ed1fa18530b8d82b41f5001a2dcad8 100644 GIT binary patch literal 3368 zcmeHIi#HVN7XJok7^fjep>gJ@Jn|-Ch`gU=@)il>jAn|ODbLFDRw%pM0dBssj#Y`SEdE_-n#&a_6ICtHhktcoJDkRq?1P)-)C@=3-)J!-;kpZdu2SPZ6BN+GNgi?b0Nq!dCi)| z3qJE^BFawYE&F`fXnZ7|kRMT6S*bhA7t{+HnQ3KzI`0DGg`r!O9yCa#voQqozV7tp z88QQ+t*hGsP5N}i(o%`PxiVM$5nhm|0MvFPK&zOoD9FZ~13-2c9AK_Lh5#3RLy!bZ zfdc&(ZvjwK*a`C7sA#>f7eq!8Mw|920*BPuiq?CIRzCv;C2SaQzy}8(IDPu`@n{H! z>Ei0@7!eUc^`oz6oQ87-D*XTKrW`6fv0)nxhR@mVV|gPrbl87?wN)=T!^9U zVi>SJ4^pL-$O~*nKG%C{b$+N@&gw|8jD9N8EZWX2X5pC;z^qsAFx{>Sh_B?+BTf*| zmTCl&5Y-ad%c(?m%Q042A1z|)NptL)S}geEx2KR@<|paxS8Ee{#N>A;kZes{S1(RxRM0cc7^g3c}x=cdv#5epz1{4+)#3)CC+jf(XlTN8=iyN>k8!TlSETqo44m^1*;Fvt#urmG3Hp z7zE7~=z*OmXZb6}@bubsxX_U3(&Al~XIKj}%FJ9R+AJvw*Q zOE+uQGs-N7m-&D&+#r+qD@`{}2^b=^x|$Y66@1_~p#|y*Sasn9@lX#1Z8js|isb*y zkE?Lb*U6rxjz4lySkcyL1^z+IUwu~;PSL-X3sn2y#3kPJpGKsI_&1Lx6RyKyi~k-? zE(Fo+oSYdho57%Dyad(1GrzpKXe+C=Y~B*ohSdSa2%7Y?wA?6nc!N)!Ua8V?B=!bG z@e8VIvQNDiQ%_*ty1*2V%Co8LHv#5%>Cm?uTe;g;7w=onm~YQ#UUL{L?$>&~c2wR; z-n?B}F$ccI!KsN)qY2iLvQ|^45=Z5>#)f*_=fs-_fwpQ>B0elKZnbthT90mO`mm># z&0Xx>J{!jC<4)zr=taI-D8Vm5<}{p@(J(ggB0g=<_iYMqj?*KtT~^sIeT6$>rhbKx-&04{2bD!H}76|qKfy$ z!)C|swq;?SeXgo+lNF+fG1pR{N>bH!}TKBR}N06lsyIrxe0K=B^N2su!h#03LFIu!f@Gvt`HHqZOhHb6WoNGV!IzY(nkb?IcEN29as{H z+I4Q|21W^2lf~_rK=zD}Hpk9&><_^U5}XTy4*W}p2A66?n9UCRX!XYPS5;%fW@0LP zohYMvLt^H=f{w-#0MTkRNREm7+>KZ}sFK7H3A~D5T{fEAZQPh~z%<~I+n2MFmin`- zM33pg29f)^0kaoIn@pp_pUU{!!U~mE*QE+)p3#z5%`MF4hFU_6YF$LC+1`e)`{$YE z(shwbC7DxMD1NFtG#6Q;x3UsDQx)XS)XsUNQOoyxy~oe9TP{9Owjq4-xOxBf2|@vv zW}u9|#^_yJ8X5~yK;zM(SFj7S_ZyQ}wT~^I{#0rq;tP0ETymA#+6STaP0)5vXp)Ph>}rM8e3Kf!4a0Do+^3G zJAE@R>G68ct3+kusx;P%d86gOfTGD5=e)R~!>76N9ImnZI>jAd{kDgZH3U9Z40y)+ z5nCCJhhy&UjiXL4lS?J^R_-Cki;rjF_VJFU;RIHVFokhVf#LNrq6>PDdmUmBr8(s` zi9hoWZCLT;OyXO29!o5ib84UcZ*TAcsZZu4`DX|A*W8DpTNUt2{+~!V!R>MwxMaI$ ZOG&{332%vy{%MDlo$XKBRoY;#{}Z8vwXXmG literal 3319 zcmeHIX*d*GA3xKKk!5siWEs*z6Wtb}kZfJX(j`l_Y$M%lWh7f^PY7=yu`dfw;#`hI?&r}I3&=lp)>eE4tY{Qt=|)@BHClsEtY zVPS4!2LMD!Az(9HxVZ&Czwkp{u`@dfUUVulgaYPcY-J2U6<$K%B_h;fLFO)30Fa{m z0K~sPSquQl6blpMGZ7x_$EQ=I{p4?!HXgl!!VYBW1`Wo$Y&H|~QXe$Yw%xYa1aaFW zCM)HEb#7Ta-DG>&E9<(lo4K50vx*8aph?8ZD#u04X;ZRo1u|4rhCU6?d_9`yZ)b1c z=kC79G{g-osL%`?`bLiGTQ%U;rkR9MN1MB07lE9T12a7117eqo2Q1FG$KSL-PXMp1 zsgaWhD_vY}$V6?eu00!Gx%(K<`V9q);-5i)mfZg!#n;qkS*(jM)eQ}I$^-b#X}d9@ zg=0Vx|LiCr>T7Bu4;(y5Ed~GJ&}j6H;$k(|GIs%{93HgFV~-8jUTLJi!^fAqlFp^9 zUMwZ8tuDE)S)h#A78H%sDDSc=!WYETkM~>U0?LwLaaGEtyCGOso4+}b)2l{p1FfmQ zj(_Fk*Ms=~{0(QTO8q9~|s29&sp{$={&>lFZm>n_5Uh z%N?NZd$#;}$W0oMk(E`3YNat4jInPW+0fGXfPojL^}&<3i^HJL^~E-WnE$pdM!O<~ zdPkOCFnuCoc2`a0qCXj~PKd~bPMw14#0VmSHrCf7%8yG(NX%`c_%^9vrS!sQB*WNW z90GvRhL;q0+Q==3IEz2mG>3q-o4Ozlr7o7aa0f@L*Y_ytoNRv-4;7Va2>?V3Tj-P% zqQ(#KCYV8An?$yOloO9pMuz^o`~a>l^!Vp0`cc=iK3FCU7SvMZ{Vs1@Tgl*>Z{%f_ z7n>1)BH!M=GjSu@b}2L)2<7hf_VziuIXacO_CAFG$+S1r+}Wv5#0Un}vpea5|0XREXJ8)^Sh0US z;cuU=7pc|%001|6GuB7N$*S!A*wK+?>AuSZ3Z^s}o4N|Gd&x8y3k`#-i3Y53ZC?PO zd)#M6~;CVERPE1qN}hq(IZyb~oAjEdaCQ_ck); zM@m!>Mz#Wsr*MeatNMerlOsS!1o)~8U4s7s6_Ska;DV12F>!f$xeci6BpHaw{Ve;B zG5d3M#91ULT0c2adm(+HyWkYrTK!?rj{nT2%wf2?uI`{g$drwqLLvl9mRr3tl%JfT zi|6#uW=h0eR$f9x`+N&pZH^@?vexEn!rEwS^RryFQ7>)D*ploq08kt&VxIw7RdUZCEYvY4H%tZU>GEV1WLz|LJ`OpfjI zbd@?wn>ithRr@-!g(Tv`ix$vk>$B+{wI@~=pYgc4BoV{UOA{6mw1acs+zuq>cz&*C za7WD=TRH0`c3-9PAP+30uTJPcTKL}O^u?(uOVg*HrCDeAwxb{UE;}G?)G2I`^?(~d zUtUr*on!)onrnO)=lm|ZgLlt|RorXNN5yp&4~|Ketm8bIz0Xk)&KX6Nq~x_8Ida6- zPdcq$pLtxGeX5G%Ee*HRCQoE}nuo|5Do z2$ZOw+wL+jT(fPaqz^TM&bfAE`iXv2B&zv>pP!mXN$R*FH$k}vzFw3dA+|P ziWi4@Yq=3U$7en&##GO*XCJHO*CM_$FC8YY3AP*x4>S=EuZE!J zMk4n_8s=jN9)V0P^uB#`v%9g#Hgw!kv&_IEApb_`v0V|!#cP*0qqoxBhpQV=_>lp$ z{H0}K9mb?;XGJ~? zH1#rj&rQ>K`=sE{w7dHU^SS~yX$KD9!mMnhXWQ^zYbaYqx-Uixh)q8VK=Wz35%o|p z^!~WhnkjZ#`YC;Tym+(A?|ma#eNy+E8D%jTMdgJ(lT;4*(*6T3T#Y2Fj6EIQOoQ900x<>}D_P3#`ROELSN`nI z5~za`ouK~dWqNBjQ*~ts7DacGH_gX&y^%6qwd`;IXndY?Ukl=$NyR1762?X2Fi6;j YXa{^fN%Ib-`A3_zFts*$aT0suUoLatKmY&$ diff --git a/src/main/resources/assets/create/textures/gui/station.pdn b/src/main/resources/assets/create/textures/gui/station.pdn deleted file mode 100644 index b70bd961a6583c407d3e89bffbb6029f603c471e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11918 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 MZTy3y1ca&n7yUqN)&Kwi diff --git a/src/main/resources/assets/create/textures/gui/station_assembly.pdn b/src/main/resources/assets/create/textures/gui/station_assembly.pdn deleted file mode 100644 index b26cb90d0a9664d72794e9dc2850375b16c93501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9584 zcmd^E33yc1y-x@v1QF0`Q4|uR7GDRLeKRES+}Sf*W+t;mLY(!^elv4tha^&}eTouM z5tSvrXQ@^cs(>sJ0_7D{z!VfL1dPfOwh&0bA<1O!J9k19tgU_D*M8so>Y2>BXS=`u zdj98sCRIWebJe(<+4c5-%x^&*#WA-%>?$i^usJ2gE{7X+g|ByfmV_gOmz6L}ig8QS zVK=(NE(08KV}Y^~)+{ECJBvqS@?nF;rk9k@wngwT<}aTec18Tw;`#tuR^m1wYHf@r zm!KGcMWxfbM0ymqG-Ou<1V9O&NGK$B>B$jbQt7lb83^Gl8z;L)8_?+K2mpe(Cl=+I zHRLh@O)rY;wb^;S7}3ZC05wYxRD=Mt+@7o#gjr&CvR-26ITnSPh)QM9eC5QmIs)RTB3Z3}2T9aP3+F&;scu8fF)J>Hq?lWbD z=Gn!SYCVMgXBMD{$T%DuNvYB%a@E*k00?o?K3pNN*`q-TN!#qx>9vSK>T+;vXq5&& z&JxS?bOlsDW;NB@r(SM0ZtXg>r2Q&d}gHD zpms2WLAsb44EPjGzC-HZ`D3^{jv*$Cm*U4lQ4Y_Gi!6G-m*@9uj5S7%KxqkEMQnyW z#9?rOPXYDBjw7gzZ-kQsrlMuJL=QKQ(S zmhpg>Ar_mH?rI?N*@7yygN;xD+bkn->XQOF;;o9=aZJX?!cYNfe#9a*)2PCb%H?#^ z_{?OD)mKGlalJYYpmMb=yGJACaCx>G)D*HaENq$;sZzSBp%}Ny#rG?dD%9?E&}2@% z&Qs$LF;Rny;ickC;EChLU?8r93~}u&kKZo#ih@G6imo+Ody;B41_Im~b$}PFWczU% zl4REhC{($dX`}j4wKL31(%Cde+-Ktn6l~m}aM&f3q}l=u6h_Et3TU|!doreu`uW;0 zWQkkJ#so~RJt;K~b6Dt`&!y;gm3k4QHW2>Wa zr_^E)I6ZNZ9hKuo1fgl@YKKr51VWm~%(DYv*8rym*d*$z2ntLJJ<0)qBaz&XFnAF|l5Oq8t?P zWO9=oAa)?MxMemq2C6V1#88GxB$b*4Au+0f^c^CxHHZQV3c`q}N~#A^8W7V+8HGs< z7!ouYd{HeBglQTLq+>)qQV$dW{&8dos*Uq$K+d*^q$GXB$dQrDt2A0qoCXj&K==TO znOPJLKx|>1FiStA0%DR5CZn@R8Bp?%C9^vruMtT-lBF+py97x{#0#uYQBVd_S2mHF z3VCG;4QQ6WAf|EIAsq%#MdU70hAgjAE9BLt*NLI-sUn+RQ0a1-JzA*%_~HRI@Q&C{ z!yDGW6|agb1qtAmiD?QasKyXIqSMIDQkH}dWHyt5 zS2~dF47p22?f{#l@2;E9q)ZTnMBTvq-1*Iq4D} z!ZamK&IAJVQA&b~iV-T81}sjRA`%NQs3x1BvdSE-mcf&!QfP@XHHbHgn-pGzLuJTB zYNf-8MxACGFTi)l#i&xN1HcCWACai^xKm2;v4TD{CJ+ESUt6i>p(Y&-2zm0j$|6w- z*g<|o6+mk|M!QiI(kp?CC&yXUYKK4M(qnpg41|KoxLD^h0&z86#5Ah4A(6mbrBT?; zY)QoF0Ajrekpm#cfPiK3ieZor0v>LW0z6iU%0~R&9DrV?3ZW{!SuKvD2EAM_^wEG+ zPNxBp9#f%Iv4N$kbW->+Q3$Qp3fM-s5U?y#h1*zdsi`;7K-gnpR#T;6QB*+-@x@%K zNGgy4ze$W6l`(^vW0EMS9;OTn00D+DgjN{tLOPefrrv3bIoS!8(aJzn><})B2q+>N zsJ1%2!YG?p#YJ3NKHcJ?({yox459eUDyq}17AHeWuUm%$wUz6zFlr(?iqNl-F>##} zuaaxIp=uxBX<>4G91D~Hp)wiqBn4D5ToNBOhEX|UGsEgv_>G!MRKP)XLZeR<@ae(; zNgyUctQzCeV{txLK(ljrrYhhxV+p0%o}^-8m%tXGNbSl1pdvwP*vvx29vZEhACyX1 zMyJqVv#Gdoi%4t~L`-~&F=mTuYuHJXiH;@{ab_eW5YT`C<;Uf5Itb{J&alZvr&tlX zN1*|@fG@Kt=~dh)*Qa6Q3XO^@;%fN}wGXAs?U9H!YE#z8gi=;DOD>BeA-jvKQPMR) ztqtND1qv)Rfrz>?Ac*rhUTG8$2V^l2c3UF+5M6I|hz+)+k|C@P86Y14F*PY+>7pVT zFvi3hN}MTFB`ItQjMUZy4L~rb*{haV0(>T4hdLNOOu|R_D21!gSnYl$i=hKnaS*Jka!yWeg;cR$JHe1dg&XWtjO^a`f;Es^e5w_SNPqMJX zkLQfe$;r#hz4JzB1({GQ+<2H2W$f4qx&#iF&blta>D=pm0p{~LY+;yYx^8JUvCLP(@X-PkR?GXl2Yd; zl|Au>0oq3&9!U9;4T#)RHCW(H}Oj$nalok&b%CA$p z1LOmVxPA7*I;|t>CT~aZC1~EUW67mV2#OZvzatcVytkC34-pQYY!AD<%oA{?8 zD(OUdUPod~l-#Phx%q`~;MNBmakq0;*n-j?rPbz-gG0jE zyncrh^$vLXE-B6el$F>d;(BX96S4XYG?`EnQ6^YS0Lse9u$g-m>Xp=O{`i}y&`Bz{ z!XfH+R2X~+o}~h@hl#*T{dFQB28IE9M*t_@1jrx(C&3}^4S+ldlm+CC075yg17d7= zX;h;^80v?Cdq#k7zX_O00{`s$z>u+j6nGN3SIMnZcn4YCNmf6H)wuDKVSUqCA;3b8 z8-wG`KVJNJl+2zLB$dfG26V(7_FL++VLf|X)Q7NoM=0!e;01Uj_9z!Dk z-=rd6FR((du&e7w|Kdg&^zhh4h9_`}3JduyzUy65h^!#@ku*s`en>B*^W1c#=i~51 zwL8Y(HcNm8Cr86Dev`?S4*0u70`XxsFR4`WJ0c$GiiIVxKZexQkL#Lrnb84@-|^Sk zLjie^K#9k@al~Ttq9H62uoqzU7MnYqD9oxtiP;^w9D7 zixGq8-w$;%?mMj&J^=flP z2^-fTS>Hk)xB+qu>E!?5#(*oc8)FRVsejA0NxvEk_Z1p;aae^e3tp8?yvEucPDd!@ zu*2!X+}y15X9FB`4h=*a!I!!wVz9R0jbjA6A3~tymO?ui{*Z(Z`|M``^6|rbHd;0Y0i{4PT%u)pw zHy2gRo%U$iyl*ZXwsrHCC9j;(3``k#d-vI$=T@vO-(J3FSBr7lnoquNNi{Y8p2%$d z%R^mPyYA|GeShPI`3E-4n34?l53bugFxcG5@$kAn$n0weLIQPp|01ahWC}eOl%q|nmc*_ck45o zzJ6_LwWXl1sg-zT?UKF$=ArqQI#WdV%UerdB0B1bz2C0gbZMxm^v%yEOiL5#@@LM? z7$Q#nrfct%B=fUN*9Q7)n|tOpURc+awlsWnu>Cjb(xQRbh9k`{QD2>|UNvKoc5h7I zv2;z(%B?+@8`_(Pu9kdK)Ek`GpZ?7^k!RL*tZ6=9w8^WwxP0%SzS2zju`6GF{k1jN z*tqt}muJw|_CK7$-rc-)Yt8(@`&g%-!K<&gT)QDhkeDEFSK^NIZ2Z-SUDX`h2?c z;xNoAVsBIHj#)1f4Lt;Z&z5nix{Ji7!IrO%^3E;nBIqgN*onDMOr1fTYPvH1;p9+7 zVJb5re|3RmcHSX#&YkY{MKkM0ZNGA2V4&vg&I9c`jvP7i-q8z^y~}bk(_fbTiFk;B z|1wy{z93p%aHsRN{f#e%pZd?nA<@|dpA%Mdqx#CBHO57seyWo+@Xqls4UNb_yL#`X zx=aT<5}P?pc=y!>L~qN&NNf@@c(U!_LOS|LroHPbF_}8|p|ZRD`MZzh_BI_&7p1W# zL$dzN`0-HQ#HotZmWtiuKO{a{Ld;RNt~=FK1kuuOQ~HY@Pj}5ddi;K3@EVmkf!2OR zaJCt$t3eF;JL_zYZVQd(sP2t z{4b#cuL6?(ma+ZqA2CX087x(?Yh&=Uf_CVvwU15ynAn~oR-Bmg#2__AEYH-) z_V%UI?j0Jx!Hh9G2~O#Q0_uy?s#h#HH{ zzpdHc-Ai;f7j4Ubh}hNDmc05+n;vgFBq`l7)HJH#m&RWc@4PxF*w}o_{0Y+viJ$SR zw)}T`Q{J_rvO&)r!dRCYoI0sN%!Ou4nlZZvxKKd2${?z(2DPmD8IgOqmYS)dqaH1)gx(5pV zQ44XRoY+$LY12g*;I|m*8N73-BGo%sac!OpO54|eE}m)GvEbuFgDK*23vqzC?pn*} z{&q=!-Q-MP3lTBTnLBru_i9A5x?oRvp8uQIPsty-LbSbkWd}hN=70|x2BZIV<*~Q# z-t66-Z0B73UF{3YsCB<2L+s(Qx|Q_O;>o)j7IdR)i--G8iCnuG)4`)38q`G(_k+*bOequPSf)}yjlDqbX)au}U6Gr7u z8ohJgEu(_@3w9LKrcW9>e$-B)Wx>>)zk2Y6x9sa15AGdF{6`RS(o0sZ2f@7go4Au! zZy4&B(s|^y)eC&fkKDI?J&@-e;jFjKM;E@7|DNCZ#*!RihmABSR`SAT$ zYQHYMX9MdwKeJ<`(Yiavak+~-oY6%+zCRy)~zn7`xj``YEl=*a>9)OA0{ z+;6)tw&vI0dA4EZGHm0}t8=zVr!78w&$AmNxAvAkeyD8P#5T)UyZd{l)x;V{8?9```X#YciLV#@#LW^`v#?Rf7^3^f027~_om+->U=ZRFpuWk{p!(U z$t|yRe{wtePKC)F-tS}d?DB?RcPzOpd16KFI(ERc;A%yE-C^R74O<9!o!v3CuciPO zwwf>Rzu42z`SX1*EZ@6i%c{mzr}gi2*0lPE{M+9jn0fb8>!TCq