From 3b19ba1790d6035a9e246f5d4ae627bf68778606 Mon Sep 17 00:00:00 2001 From: damithc Date: Mon, 25 May 2020 00:58:18 +0800 Subject: [PATCH 01/44] Add Gradle support --- build.gradle | 46 ++++++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58695 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 183 +++++++++++++++++++++++ gradlew.bat | 103 +++++++++++++ text-ui-test/runtest.sh | 0 6 files changed, 337 insertions(+) create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat mode change 100644 => 100755 text-ui-test/runtest.sh diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000000..b0c5528fb5 --- /dev/null +++ b/build.gradle @@ -0,0 +1,46 @@ +plugins { + id 'java' + id 'application' + id 'checkstyle' + id 'com.github.johnrengelman.shadow' version '5.1.0' +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.0' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.0' +} + +test { + useJUnitPlatform() + + testLogging { + events "passed", "skipped", "failed" + + showExceptions true + exceptionFormat "full" + showCauses true + showStackTraces true + showStandardStreams = false + } +} + +application { + mainClassName = "seedu.duke.Duke" +} + +shadowJar { + archiveBaseName = "duke" + archiveClassifier = null +} + +checkstyle { + toolVersion = '8.23' +} + +run{ + standardInput = System.in +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f3d88b1c2faf2fc91d853cd5d4242b5547257070 GIT binary patch literal 58695 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..b7c8c5dbf5 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000000..2fe81a7d95 --- /dev/null +++ b/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000000..62bd9b9cce --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,103 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh old mode 100644 new mode 100755 From d6b14560250a8b3b842e03bf494bf4a1be46c610 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 19 Aug 2020 17:38:52 +0800 Subject: [PATCH 02/44] level-1 --- src/main/java/Duke.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334cc..9b1e2a046d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,4 +1,7 @@ +import java.util.Scanner; public class Duke { + final static String LINE = "____________________________________________________________\n"; + final static String BYE = "aight imma head out\n"; public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -6,5 +9,12 @@ public static void main(String[] args) { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + Scanner scanner = new Scanner(System.in); + String input = scanner.nextLine(); + while(!input.equals("bye")) { + System.out.println(LINE + input + "\n" + LINE); + input = scanner.nextLine(); + } + System.out.println(LINE + BYE + LINE); } } From 49fdaf1e582a8ffbfef057aa80938c952cf9cf2a Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 19 Aug 2020 17:42:10 +0800 Subject: [PATCH 03/44] add greet --- src/main/java/Duke.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 9b1e2a046d..e96c2e8659 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,6 +2,7 @@ public class Duke { final static String LINE = "____________________________________________________________\n"; final static String BYE = "aight imma head out\n"; + final static String WELCOME = "Hello! I'm Duke\nWhat can I do for you?\n"; public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -9,6 +10,7 @@ public static void main(String[] args) { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + System.out.println(LINE + WELCOME + "\n" + LINE); Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); while(!input.equals("bye")) { From 52ff3b30f0b48df2b88c70294607592d8272e665 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 19 Aug 2020 18:40:34 +0800 Subject: [PATCH 04/44] level2 --- src/main/java/Duke.java | 42 ++++++++++++++++++++++++++++++++++++----- src/main/java/Task.java | 11 +++++++++++ 2 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e96c2e8659..5a8a301125 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,8 +1,11 @@ +import java.util.ArrayList; import java.util.Scanner; + public class Duke { - final static String LINE = "____________________________________________________________\n"; final static String BYE = "aight imma head out\n"; final static String WELCOME = "Hello! I'm Duke\nWhat can I do for you?\n"; + final static String LINE = "____________________________________________________________\n"; + public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -10,13 +13,42 @@ public static void main(String[] args) { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); - System.out.println(LINE + WELCOME + "\n" + LINE); + print(WELCOME); + ArrayList tasks = new ArrayList<>(); Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); - while(!input.equals("bye")) { - System.out.println(LINE + input + "\n" + LINE); + while (!input.equals("bye")) { + if (input.isEmpty()) { + continue; + } + String[] words = input.split(" "); + String command = words[0]; + switch (command) { + case "list": + print_tasks(tasks); + break; + default: + Task newTask = new Task(input, false); + print("added: " + newTask.toString()); + tasks.add(newTask); + break; + } + +// System.out.println(LINE + input + "\n" + LINE); input = scanner.nextLine(); } - System.out.println(LINE + BYE + LINE); + print(BYE); + } + + public static void print_tasks(ArrayList tasks){ + System.out.print(LINE); + for (int i = 0; i < tasks.size(); i++) { + System.out.print(i + ". " + tasks.get(i)); + } + System.out.print(LINE); + } + + public static void print(String str){ + System.out.print(LINE + str + LINE); } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 0000000000..acd8f03580 --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,11 @@ +public class Task { + String text; + boolean done; + Task(String text, boolean done){ + this.text = text; + this.done = done; + } + public String toString(){ + return text + "\n"; + } +} From 48f8a1e4a4d7fc37838e4b445bb070b0afc803f2 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 19 Aug 2020 18:46:22 +0800 Subject: [PATCH 05/44] task tostring for done status --- src/main/java/Duke.java | 2 +- src/main/java/Task.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5a8a301125..ef0be31cae 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -43,7 +43,7 @@ public static void main(String[] args) { public static void print_tasks(ArrayList tasks){ System.out.print(LINE); for (int i = 0; i < tasks.size(); i++) { - System.out.print(i + ". " + tasks.get(i)); + System.out.print((i+1) + "." + tasks.get(i)); } System.out.print(LINE); } diff --git a/src/main/java/Task.java b/src/main/java/Task.java index acd8f03580..9fb1a50724 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -6,6 +6,6 @@ public class Task { this.done = done; } public String toString(){ - return text + "\n"; + return "[" + (done ? "✓" : "✗" + "] ") + text + "\n"; } } From 1c9189f566bd084edc74f4871ed33807b86bdedb Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 19 Aug 2020 18:51:38 +0800 Subject: [PATCH 06/44] mark task as done --- src/main/java/Duke.java | 8 ++++++++ src/main/java/Task.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index ef0be31cae..dabb0549f1 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -27,6 +27,14 @@ public static void main(String[] args) { case "list": print_tasks(tasks); break; + case "done": + int i = Integer.parseInt(words[1]) - 1; + assert i >= 0; + assert i < tasks.size(); + Task task = tasks.get(i); + task.done = true; + print("Nice! I've marked this task as done: \n" + task); + break; default: Task newTask = new Task(input, false); print("added: " + newTask.toString()); diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 9fb1a50724..d4213066b7 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -6,6 +6,6 @@ public class Task { this.done = done; } public String toString(){ - return "[" + (done ? "✓" : "✗" + "] ") + text + "\n"; + return "[" + (done ? "✓" : "✗") + "] " + text + "\n"; } } From d91440c6a8f9a815ee3e0210af58a0d0889e7b45 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Thu, 20 Aug 2020 17:23:04 +0800 Subject: [PATCH 07/44] Level 4 todo/deadline/event commands and classes --- src/main/java/Deadline.java | 14 ++++++++++++++ src/main/java/Duke.java | 26 +++++++++++++++++++++++--- src/main/java/Event.java | 14 ++++++++++++++ src/main/java/Task.java | 4 ++-- src/main/java/Todo.java | 11 +++++++++++ 5 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 src/main/java/Deadline.java create mode 100644 src/main/java/Event.java create mode 100644 src/main/java/Todo.java diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java new file mode 100644 index 0000000000..ae99a3a99b --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,14 @@ +public class Deadline extends Task { + + String by; + + public Deadline(String description, String by) { + super(description); + this.by = by; + } + + @Override + public String toString() { + return "[D]" + super.toString() + " (by: " + by + ")\n"; + } +} \ No newline at end of file diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index dabb0549f1..00b9f05412 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -23,6 +23,8 @@ public static void main(String[] args) { } String[] words = input.split(" "); String command = words[0]; + Task newTask; + String[] subst; switch (command) { case "list": print_tasks(tasks); @@ -35,10 +37,22 @@ public static void main(String[] args) { task.done = true; print("Nice! I've marked this task as done: \n" + task); break; + case "todo": + String text = input.substring(5); + newTask = new Todo(text); + addTask(newTask, tasks); + break; + case "deadline": + subst = input.substring(9).split(" /by "); + newTask = new Deadline(subst[0], subst[1]); + addTask(newTask, tasks); + break; + case "event": + subst = input.substring(6).split(" /at "); + newTask = new Event(subst[0], subst[1]); + addTask(newTask, tasks); + break; default: - Task newTask = new Task(input, false); - print("added: " + newTask.toString()); - tasks.add(newTask); break; } @@ -59,4 +73,10 @@ public static void print_tasks(ArrayList tasks){ public static void print(String str){ System.out.print(LINE + str + LINE); } + + public static void addTask(Task task, ArrayList tasks) { + tasks.add(task); + int size = tasks.size(); + print("added: " + task.toString() + "You now have " + size + " task" + (size > 1 ? "s" : "") +" in the list.\n"); + } } diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 0000000000..c69a764b2a --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,14 @@ +public class Event extends Task { + + String by; + + public Event(String description, String by) { + super(description); + this.by = by; + } + + @Override + public String toString() { + return "[E]" + super.toString() + " (at: " + by + ")\n"; + } +} \ No newline at end of file diff --git a/src/main/java/Task.java b/src/main/java/Task.java index d4213066b7..718c7b3e67 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,11 +1,11 @@ public class Task { String text; boolean done; - Task(String text, boolean done){ + public Task(String text){ this.text = text; this.done = done; } public String toString(){ - return "[" + (done ? "✓" : "✗") + "] " + text + "\n"; + return "[" + (done ? "✓" : "✗") + "] " + text; } } diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java new file mode 100644 index 0000000000..c60c586bb8 --- /dev/null +++ b/src/main/java/Todo.java @@ -0,0 +1,11 @@ +public class Todo extends Task{ + + public Todo(String description) { + super(description); + } + + @Override + public String toString() { + return "[T]" + super.toString() + "\n"; + } +} From 28ca00aa3fe7f2af45b74703bd1c97a19e0ea33f Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Thu, 20 Aug 2020 17:58:29 +0800 Subject: [PATCH 08/44] automated testing had to compile in java 8 due to runtime environment on local --- text-ui-test/EXPECTED.TXT | 19 +++++++++++++++++++ text-ui-test/input.txt | 4 ++++ text-ui-test/runtest.bat | 2 +- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e7..d56d0095aa 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -5,3 +5,22 @@ Hello from | |_| | |_| | < __/ |____/ \__,_|_|\_\___| +____________________________________________________________ +Hello! I'm Duke +What can I do for you? +____________________________________________________________ +____________________________________________________________ +added: [E][✗] project meeting (at: Mon 2-4pm) +You now have 1 task in the list. +____________________________________________________________ +____________________________________________________________ +added: [D][✗] return book (by: Sunday) +You now have 2 tasks in the list. +____________________________________________________________ +____________________________________________________________ +1.[E][✗] project meeting (at: Mon 2-4pm) +2.[D][✗] return book (by: Sunday) +____________________________________________________________ +____________________________________________________________ +aight imma head out +____________________________________________________________ diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb2..39b7cbc45d 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1,4 @@ +event project meeting /at Mon 2-4pm +deadline return book /by Sunday +list +bye \ No newline at end of file diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index d0facc6310..3dd02fbfa7 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -7,7 +7,7 @@ REM delete output from previous run del ACTUAL.TXT REM compile the code into the bin folder -javac -cp ..\src -Xlint:none -d ..\bin ..\src\main\java\Duke.java +javac -cp ..\src -Xlint:none -d ..\bin --release 8 ..\src\main\java\*.java IF ERRORLEVEL 1 ( echo ********** BUILD FAILURE ********** exit /b 1 From b2c3eddfdcc3555cd323e64871941849fd646e3c Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Thu, 20 Aug 2020 18:14:09 +0800 Subject: [PATCH 09/44] filter invalid input --- src/main/java/Duke.java | 103 +++++++++++++++++++------------ src/main/java/DukeException.java | 5 ++ 2 files changed, 67 insertions(+), 41 deletions(-) create mode 100644 src/main/java/DukeException.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 00b9f05412..a8eb612b0e 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -6,7 +6,7 @@ public class Duke { final static String WELCOME = "Hello! I'm Duke\nWhat can I do for you?\n"; final static String LINE = "____________________________________________________________\n"; - public static void main(String[] args) { + public static void main(String[] args) throws DukeException { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" @@ -18,42 +18,63 @@ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); while (!input.equals("bye")) { - if (input.isEmpty()) { - continue; - } - String[] words = input.split(" "); - String command = words[0]; - Task newTask; - String[] subst; - switch (command) { - case "list": - print_tasks(tasks); - break; - case "done": - int i = Integer.parseInt(words[1]) - 1; - assert i >= 0; - assert i < tasks.size(); - Task task = tasks.get(i); - task.done = true; - print("Nice! I've marked this task as done: \n" + task); - break; - case "todo": - String text = input.substring(5); - newTask = new Todo(text); - addTask(newTask, tasks); - break; - case "deadline": - subst = input.substring(9).split(" /by "); - newTask = new Deadline(subst[0], subst[1]); - addTask(newTask, tasks); - break; - case "event": - subst = input.substring(6).split(" /at "); - newTask = new Event(subst[0], subst[1]); - addTask(newTask, tasks); - break; - default: - break; + try { + if (input.isEmpty()) { + continue; + } + String[] words = input.split(" "); + String command = words[0]; + Task newTask; + String[] subst; + switch (command) { + case "list": + print_tasks(tasks); + break; + case "done": + int i = Integer.parseInt(words[1]) - 1; + if(i <= 0 || i > tasks.size()){ + throw new DukeException("invalid task number"); + } + Task task = tasks.get(i); + task.done = true; + print("Nice! I've marked this task as done: \n" + task); + break; + case "todo": + if (input.length() < 6) { + throw new DukeException("The description of a todo cannot be empty."); + } + String text = input.substring(5); + newTask = new Todo(text); + addTask(newTask, tasks); + break; + case "deadline": + if (input.length() < 10) { + throw new DukeException("The description of a deadline cannot be empty."); + } + subst = input.substring(9).split(" /by "); + if (subst.length < 2) { + throw new DukeException("The due date must be specified."); + } + newTask = new Deadline(subst[0], subst[1]); + addTask(newTask, tasks); + break; + case "event": + if (input.length() < 7) { + throw new DukeException("The description of an event cannot be empty."); + } + subst = input.substring(6).split(" /at "); + if (subst.length < 2) { + throw new DukeException("The event date must be specified."); + } + newTask = new Event(subst[0], subst[1]); + addTask(newTask, tasks); + break; + default: + throw new DukeException("I'm sorry, but I don't know what that means :-("); +// break; + } + } catch (DukeException e) { + print(e.getMessage() + "\n"); } // System.out.println(LINE + input + "\n" + LINE); @@ -62,21 +83,21 @@ public static void main(String[] args) { print(BYE); } - public static void print_tasks(ArrayList tasks){ + public static void print_tasks(ArrayList tasks) { System.out.print(LINE); for (int i = 0; i < tasks.size(); i++) { - System.out.print((i+1) + "." + tasks.get(i)); + System.out.print((i + 1) + "." + tasks.get(i)); } System.out.print(LINE); } - public static void print(String str){ + public static void print(String str) { System.out.print(LINE + str + LINE); } public static void addTask(Task task, ArrayList tasks) { tasks.add(task); int size = tasks.size(); - print("added: " + task.toString() + "You now have " + size + " task" + (size > 1 ? "s" : "") +" in the list.\n"); + print("added: " + task.toString() + "You now have " + size + " task" + (size > 1 ? "s" : "") + " in the list.\n"); } } diff --git a/src/main/java/DukeException.java b/src/main/java/DukeException.java new file mode 100644 index 0000000000..82e0af5346 --- /dev/null +++ b/src/main/java/DukeException.java @@ -0,0 +1,5 @@ +public class DukeException extends Exception { + DukeException(String msg) { + super("☹ OOPS!!! " + msg); + } +} \ No newline at end of file From 17f4128f75191ff33670f1cfb0fa0dc3bacc3d92 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Thu, 20 Aug 2020 18:25:19 +0800 Subject: [PATCH 10/44] Update Duke.java fix indexing bug abstract number of tasks message delete command --- src/main/java/Duke.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a8eb612b0e..d372b71f05 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -31,13 +31,19 @@ public static void main(String[] args) throws DukeException { print_tasks(tasks); break; case "done": + case "delete": int i = Integer.parseInt(words[1]) - 1; - if(i <= 0 || i > tasks.size()){ + if(i < 0 || i >= tasks.size()){ throw new DukeException("invalid task number"); } Task task = tasks.get(i); - task.done = true; - print("Nice! I've marked this task as done: \n" + task); + if(command.equals("done")){ + task.done = true; + print("Nice! I've marked this task as done: \n" + task); + } else if(command.equals("delete")) { + tasks.remove(i); + print("Noted. I've removed this task: \n" + task + numTasks(tasks)); + } break; case "todo": if (input.length() < 6) { @@ -97,7 +103,11 @@ public static void print(String str) { public static void addTask(Task task, ArrayList tasks) { tasks.add(task); + print("added: " + task.toString() + numTasks(tasks)); + } + + public static String numTasks(ArrayList tasks) { int size = tasks.size(); - print("added: " + task.toString() + "You now have " + size + " task" + (size > 1 ? "s" : "") + " in the list.\n"); + return "You now have " + size + " task" + (size > 1 ? "s" : "") + " in the list.\n"; } } From f74aa3c5ae2ebf1d4d5b89fd0fd6d8f01a47ff60 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 14:54:39 +0800 Subject: [PATCH 11/44] abstract out Tasks class --- src/main/java/Duke.java | 35 ++++++---------------------- src/main/java/Tasks.java | 49 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 src/main/java/Tasks.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d372b71f05..724ac2c32d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,4 +1,3 @@ -import java.util.ArrayList; import java.util.Scanner; public class Duke { @@ -14,7 +13,7 @@ public static void main(String[] args) throws DukeException { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); print(WELCOME); - ArrayList tasks = new ArrayList<>(); + Tasks tasks = new Tasks(); Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); while (!input.equals("bye")) { @@ -28,21 +27,18 @@ public static void main(String[] args) throws DukeException { String[] subst; switch (command) { case "list": - print_tasks(tasks); + tasks.print_tasks(); break; case "done": case "delete": int i = Integer.parseInt(words[1]) - 1; - if(i < 0 || i >= tasks.size()){ - throw new DukeException("invalid task number"); - } Task task = tasks.get(i); if(command.equals("done")){ - task.done = true; + tasks.setDone(i, true); print("Nice! I've marked this task as done: \n" + task); } else if(command.equals("delete")) { tasks.remove(i); - print("Noted. I've removed this task: \n" + task + numTasks(tasks)); + print("Noted. I've removed this task: \n" + task + tasks.numTasks()); } break; case "todo": @@ -51,7 +47,7 @@ public static void main(String[] args) throws DukeException { } String text = input.substring(5); newTask = new Todo(text); - addTask(newTask, tasks); + tasks.addTask(newTask); break; case "deadline": if (input.length() < 10) { @@ -62,7 +58,7 @@ public static void main(String[] args) throws DukeException { throw new DukeException("The due date must be specified."); } newTask = new Deadline(subst[0], subst[1]); - addTask(newTask, tasks); + tasks.addTask(newTask); break; case "event": if (input.length() < 7) { @@ -73,7 +69,7 @@ public static void main(String[] args) throws DukeException { throw new DukeException("The event date must be specified."); } newTask = new Event(subst[0], subst[1]); - addTask(newTask, tasks); + tasks.addTask(newTask); break; default: throw new DukeException("I'm sorry, but I don't know what that means :-("); @@ -89,25 +85,8 @@ public static void main(String[] args) throws DukeException { print(BYE); } - public static void print_tasks(ArrayList tasks) { - System.out.print(LINE); - for (int i = 0; i < tasks.size(); i++) { - System.out.print((i + 1) + "." + tasks.get(i)); - } - System.out.print(LINE); - } - public static void print(String str) { System.out.print(LINE + str + LINE); } - public static void addTask(Task task, ArrayList tasks) { - tasks.add(task); - print("added: " + task.toString() + numTasks(tasks)); - } - - public static String numTasks(ArrayList tasks) { - int size = tasks.size(); - return "You now have " + size + " task" + (size > 1 ? "s" : "") + " in the list.\n"; - } } diff --git a/src/main/java/Tasks.java b/src/main/java/Tasks.java new file mode 100644 index 0000000000..d0d0f94557 --- /dev/null +++ b/src/main/java/Tasks.java @@ -0,0 +1,49 @@ +import java.util.ArrayList; + +public class Tasks { + + private ArrayList tasks; + + public Tasks(){ + tasks = new ArrayList<>(); + } + public void addTask(Task task) { + tasks.add(task); + Duke.print("added: " + task.toString() + numTasks()); + } + + public String numTasks() { + int size = tasks.size(); + return "You now have " + size + " task" + (size > 1 ? "s" : "") + " in the list.\n"; + } + + public void print_tasks() { + System.out.print(Duke.LINE); + for (int i = 0; i < tasks.size(); i++) { + System.out.print((i + 1) + "." + tasks.get(i)); + } + System.out.print(Duke.LINE); + } + + public Task get(int i) throws DukeException { + if(i < 0 || i >= tasks.size()){ + throw new DukeException("invalid task number"); + } + return tasks.get(i); + } + + public void remove(int i) throws DukeException { + if(i < 0 || i >= tasks.size()){ + throw new DukeException("invalid task number"); + } + tasks.remove(i); + } + + public void setDone(int i, boolean value) throws DukeException { + if(i < 0 || i >= tasks.size()){ + throw new DukeException("invalid task number"); + } + tasks.get(i).done = value; + } + +} \ No newline at end of file From 73ecf65dee034645fb7be3c18ca7fbcfae2e3dee Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 15:03:22 +0800 Subject: [PATCH 12/44] serialization --- src/main/java/Duke.java | 11 +++++++++++ src/main/java/Task.java | 2 +- src/main/java/Tasks.java | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 724ac2c32d..d73506624f 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,5 @@ +import java.io.IOException; +import java.io.ObjectOutputStream; import java.util.Scanner; public class Duke { @@ -71,6 +73,15 @@ public static void main(String[] args) throws DukeException { newTask = new Event(subst[0], subst[1]); tasks.addTask(newTask); break; +// case "serialize": +// ObjectOutputStream out = null; +// try { +// out = new ObjectOutputStream(System.out); +// out.writeObject(tasks); +// out.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } default: throw new DukeException("I'm sorry, but I don't know what that means :-("); // break; diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 718c7b3e67..454d99e7f8 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,4 +1,4 @@ -public class Task { +public class Task implements java.io.Serializable{ String text; boolean done; public Task(String text){ diff --git a/src/main/java/Tasks.java b/src/main/java/Tasks.java index d0d0f94557..d27762ae71 100644 --- a/src/main/java/Tasks.java +++ b/src/main/java/Tasks.java @@ -1,6 +1,6 @@ import java.util.ArrayList; -public class Tasks { +public class Tasks implements java.io.Serializable{ private ArrayList tasks; From 9d526f182245760d4bcb11770e3d2db63132c7ef Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 17:22:36 +0800 Subject: [PATCH 13/44] data storage using java serialization needs work handling non existant directories --- .gitignore | 2 ++ src/main/java/Duke.java | 3 ++- src/main/java/Tasks.java | 55 ++++++++++++++++++++++++++++++++++++---- 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index f69985ef1f..e2e8f62820 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ bin/ /text-ui-test/ACTUAL.txt text-ui-test/EXPECTED-UNIX.TXT + +*.ser \ No newline at end of file diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d73506624f..bef6040609 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -15,7 +15,8 @@ public static void main(String[] args) throws DukeException { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); print(WELCOME); - Tasks tasks = new Tasks(); +// Tasks tasks = new Tasks(); + Tasks tasks = Tasks.read(); Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); while (!input.equals("bye")) { diff --git a/src/main/java/Tasks.java b/src/main/java/Tasks.java index d27762ae71..dfd236a072 100644 --- a/src/main/java/Tasks.java +++ b/src/main/java/Tasks.java @@ -1,15 +1,21 @@ +import java.io.*; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; -public class Tasks implements java.io.Serializable{ +public class Tasks implements java.io.Serializable { + public static final File storage_file = Paths.get("tasks.ser").toFile(); private ArrayList tasks; - public Tasks(){ + public Tasks() { tasks = new ArrayList<>(); } + public void addTask(Task task) { tasks.add(task); Duke.print("added: " + task.toString() + numTasks()); + store(); } public String numTasks() { @@ -26,24 +32,63 @@ public void print_tasks() { } public Task get(int i) throws DukeException { - if(i < 0 || i >= tasks.size()){ + if (i < 0 || i >= tasks.size()) { throw new DukeException("invalid task number"); } return tasks.get(i); } public void remove(int i) throws DukeException { - if(i < 0 || i >= tasks.size()){ + if (i < 0 || i >= tasks.size()) { throw new DukeException("invalid task number"); } tasks.remove(i); + store(); } public void setDone(int i, boolean value) throws DukeException { - if(i < 0 || i >= tasks.size()){ + if (i < 0 || i >= tasks.size()) { throw new DukeException("invalid task number"); } tasks.get(i).done = value; + store(); + } + + public void store() { + try { + FileOutputStream fileOut = new FileOutputStream(storage_file); + ObjectOutputStream out = new ObjectOutputStream(fileOut); + out.writeObject(this); + out.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { + e.printStackTrace(); + } } + public static Tasks read() { + try { + Tasks t = null; + FileInputStream fileIn = new FileInputStream(storage_file); + ObjectInputStream in = new ObjectInputStream(fileIn); + t = (Tasks) in.readObject(); + in.close(); + fileIn.close(); + return t; + } catch (FileNotFoundException i) { + try{ + storage_file.createNewFile(); + } catch (IOException ioException) { + ioException.printStackTrace(); + } + return new Tasks(); + } catch (IOException i) { + i.printStackTrace(); + return new Tasks(); + } catch (ClassNotFoundException c) { + System.out.println("Employee class not found"); + c.printStackTrace(); + return new Tasks(); + } + } } \ No newline at end of file From dea5581bc88db47cbf4fb22656045102271bee00 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 17:41:27 +0800 Subject: [PATCH 14/44] implement LocalDate for Event and Deadline --- src/main/java/Deadline.java | 9 +++++---- src/main/java/Duke.java | 22 ++++++++++++++++++---- src/main/java/Event.java | 9 +++++---- src/main/java/Task.java | 8 ++++++-- src/main/java/Todo.java | 2 +- tasks.ser | Bin 0 -> 229 bytes text-ui-test/input.txt | 4 ++-- text-ui-test/tasks.ser | Bin 0 -> 238 bytes 8 files changed, 37 insertions(+), 17 deletions(-) create mode 100644 tasks.ser create mode 100644 text-ui-test/tasks.ser diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index ae99a3a99b..bd41579174 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -1,14 +1,15 @@ +import java.time.LocalDate; + public class Deadline extends Task { String by; - public Deadline(String description, String by) { - super(description); - this.by = by; + public Deadline(String description, LocalDate date) { + super(description, date); } @Override public String toString() { - return "[D]" + super.toString() + " (by: " + by + ")\n"; + return "[D]" + super.toString() + " (by: " + date.toString() + ")\n"; } } \ No newline at end of file diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d73506624f..6a42219d02 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,5 +1,7 @@ import java.io.IOException; import java.io.ObjectOutputStream; +import java.time.LocalDate; +import java.time.format.DateTimeParseException; import java.util.Scanner; public class Duke { @@ -21,12 +23,14 @@ public static void main(String[] args) throws DukeException { while (!input.equals("bye")) { try { if (input.isEmpty()) { + input = scanner.nextLine(); continue; } String[] words = input.split(" "); String command = words[0]; Task newTask; String[] subst; + LocalDate date; switch (command) { case "list": tasks.print_tasks(); @@ -59,8 +63,13 @@ public static void main(String[] args) throws DukeException { if (subst.length < 2) { throw new DukeException("The due date must be specified."); } - newTask = new Deadline(subst[0], subst[1]); - tasks.addTask(newTask); + try{ + date = LocalDate.parse(subst[1]); + newTask = new Deadline(subst[0], date); + tasks.addTask(newTask); + } catch (DateTimeParseException e){ + throw new DukeException(e.getMessage()); + } break; case "event": if (input.length() < 7) { @@ -70,8 +79,13 @@ public static void main(String[] args) throws DukeException { if (subst.length < 2) { throw new DukeException("The event date must be specified."); } - newTask = new Event(subst[0], subst[1]); - tasks.addTask(newTask); + try{ + date = LocalDate.parse(subst[1]); + newTask = new Event(subst[0], date); + tasks.addTask(newTask); + } catch (DateTimeParseException e){ + throw new DukeException(e.getMessage()); + } break; // case "serialize": // ObjectOutputStream out = null; diff --git a/src/main/java/Event.java b/src/main/java/Event.java index c69a764b2a..c1ff59416c 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -1,14 +1,15 @@ +import java.time.LocalDate; + public class Event extends Task { String by; - public Event(String description, String by) { - super(description); - this.by = by; + public Event(String description, LocalDate date) { + super(description, date); } @Override public String toString() { - return "[E]" + super.toString() + " (at: " + by + ")\n"; + return "[E]" + super.toString() + " (at: " + date.toString() + ")\n"; } } \ No newline at end of file diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 454d99e7f8..783898c8d8 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,9 +1,13 @@ +import java.time.LocalDate; + public class Task implements java.io.Serializable{ String text; boolean done; - public Task(String text){ + LocalDate date; + + public Task(String text, LocalDate date){ this.text = text; - this.done = done; + this.date = date; } public String toString(){ return "[" + (done ? "✓" : "✗") + "] " + text; diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index c60c586bb8..43b4dc9211 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -1,7 +1,7 @@ public class Todo extends Task{ public Todo(String description) { - super(description); + super(description, null); } @Override diff --git a/tasks.ser b/tasks.ser new file mode 100644 index 0000000000000000000000000000000000000000..1cc2dec922d4843bb5da1ef8e6176e6ddf232560 GIT binary patch literal 229 zcmZ4UmVvdnh=DaEu{gW9Ky#muuCitY69c0U18WILsDwe(Co8cmQNOe#Ge_UCs3@`0 zC$qT3x}pH6OBf`h2a?f)%TzR8lAU=xaV|3hqbCDPab{I&MF9f?17kT0hy+>XT9%qu z6379&8m;Qe_E)5X7FG#JqI<;F6-uymae|A_f+a!$OwtK2UMgyorf{DT;w5 zB|k6Khk>OewW6eup^kwKXnqL;e?d`xR%&vILT+km2~ckd1E+6(o`R9CNkMJ}0C8JK Ar2qf` literal 0 HcmV?d00001 diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 39b7cbc45d..7f7636dca4 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,4 +1,4 @@ -event project meeting /at Mon 2-4pm -deadline return book /by Sunday +event project meeting /at 2019-12-01 +deadline return book /by 2019-12-02 list bye \ No newline at end of file diff --git a/text-ui-test/tasks.ser b/text-ui-test/tasks.ser new file mode 100644 index 0000000000000000000000000000000000000000..f1742b064729575cbaf0a3783ec3a4cc92621c98 GIT binary patch literal 238 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG z7?{dgKqOETt7})w`ZH5JXMVWc&))hqz zEFp=-*&)k!AE-EL-o(Vf6ve=jlAo9A!@yFKT2WHSP{+UwG{1y_zn~~TD>b=9AvZO( z1gN)!fzvlXPr*pnq#ze)DThmHVoFYCUTQ$>{D)t}|IUNi3o!vivH(rtE=nyaEy`0! S%FoX(VPFd`%}YtFtN;MJAxew@ literal 0 HcmV?d00001 From d3d481dc87969c0c735fca689666967fb808005c Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 18:03:36 +0800 Subject: [PATCH 15/44] OOP UI refactor input/output and messages into UI --- src/main/java/Duke.java | 44 ++++++++------------------------------ src/main/java/Tasks.java | 7 +++--- src/main/java/UI.java | 31 +++++++++++++++++++++++++++ tasks.ser | Bin 229 -> 0 bytes text-ui-test/EXPECTED.TXT | 8 +++---- text-ui-test/tasks.ser | Bin 238 -> 440 bytes 6 files changed, 47 insertions(+), 43 deletions(-) create mode 100644 src/main/java/UI.java delete mode 100644 tasks.ser diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5adb5f8058..2cb27517aa 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,30 +1,18 @@ -import java.io.IOException; -import java.io.ObjectOutputStream; import java.time.LocalDate; import java.time.format.DateTimeParseException; import java.util.Scanner; public class Duke { - final static String BYE = "aight imma head out\n"; - final static String WELCOME = "Hello! I'm Duke\nWhat can I do for you?\n"; - final static String LINE = "____________________________________________________________\n"; public static void main(String[] args) throws DukeException { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - print(WELCOME); -// Tasks tasks = new Tasks(); + UI ui = new UI(); + ui.welcome(); Tasks tasks = Tasks.read(); - Scanner scanner = new Scanner(System.in); - String input = scanner.nextLine(); + String input = ui.getInput(); while (!input.equals("bye")) { try { if (input.isEmpty()) { - input = scanner.nextLine(); + input = ui.getInput(); continue; } String[] words = input.split(" "); @@ -42,10 +30,10 @@ public static void main(String[] args) throws DukeException { Task task = tasks.get(i); if(command.equals("done")){ tasks.setDone(i, true); - print("Nice! I've marked this task as done: \n" + task); + UI.print("Nice! I've marked this task as done: \n" + task); } else if(command.equals("delete")) { tasks.remove(i); - print("Noted. I've removed this task: \n" + task + tasks.numTasks()); + UI.print("Noted. I've removed this task: \n" + task + tasks.numTasks()); } break; case "todo": @@ -88,31 +76,17 @@ public static void main(String[] args) throws DukeException { throw new DukeException(e.getMessage()); } break; -// case "serialize": -// ObjectOutputStream out = null; -// try { -// out = new ObjectOutputStream(System.out); -// out.writeObject(tasks); -// out.close(); -// } catch (IOException e) { -// e.printStackTrace(); -// } default: throw new DukeException("I'm sorry, but I don't know what that means :-("); // break; } } catch (DukeException e) { - print(e.getMessage() + "\n"); + UI.print(e.getMessage() + "\n"); } -// System.out.println(LINE + input + "\n" + LINE); - input = scanner.nextLine(); + input = ui.getInput(); } - print(BYE); - } - - public static void print(String str) { - System.out.print(LINE + str + LINE); + ui.bye(); } } diff --git a/src/main/java/Tasks.java b/src/main/java/Tasks.java index dfd236a072..8b68ef14ab 100644 --- a/src/main/java/Tasks.java +++ b/src/main/java/Tasks.java @@ -1,5 +1,4 @@ import java.io.*; -import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -14,7 +13,7 @@ public Tasks() { public void addTask(Task task) { tasks.add(task); - Duke.print("added: " + task.toString() + numTasks()); + UI.print("added: " + task.toString() + numTasks()); store(); } @@ -24,11 +23,11 @@ public String numTasks() { } public void print_tasks() { - System.out.print(Duke.LINE); + System.out.print(UI.LINE); for (int i = 0; i < tasks.size(); i++) { System.out.print((i + 1) + "." + tasks.get(i)); } - System.out.print(Duke.LINE); + System.out.print(UI.LINE); } public Task get(int i) throws DukeException { diff --git a/src/main/java/UI.java b/src/main/java/UI.java new file mode 100644 index 0000000000..a2983499a8 --- /dev/null +++ b/src/main/java/UI.java @@ -0,0 +1,31 @@ +import java.util.Scanner; + +public class UI { + + final static String BYE = "aight imma head out\n"; + final static String WELCOME = "Hello! I'm Duke\nWhat can I do for you?\n"; + final static String LINE = "____________________________________________________________\n"; + Scanner scanner = new Scanner(System.in); + + public static void print(String str) { + System.out.print(LINE + str + LINE); + } + + String getInput(){ + return scanner.nextLine(); + } + + void welcome(){ + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println("Hello from\n" + logo); + print(WELCOME); + } + + void bye(){ + print(BYE); + } +} diff --git a/tasks.ser b/tasks.ser deleted file mode 100644 index 1cc2dec922d4843bb5da1ef8e6176e6ddf232560..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmZ4UmVvdnh=DaEu{gW9Ky#muuCitY69c0U18WILsDwe(Co8cmQNOe#Ge_UCs3@`0 zC$qT3x}pH6OBf`h2a?f)%TzR8lAU=xaV|3hqbCDPab{I&MF9f?17kT0hy+>XT9%qu z6379&8m;Qe_E)5X7FG#JqI<;F6-uymae|A_f+a!$OwtK2UMgyorf{DT;w5 zB|k6Khk>OewW6eup^kwKXnqL;e?d`xR%&vILT+km2~ckd1E+6(o`R9CNkMJ}0C8JK Ar2qf` diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index d56d0095aa..0195388c1c 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -10,16 +10,16 @@ Hello! I'm Duke What can I do for you? ____________________________________________________________ ____________________________________________________________ -added: [E][✗] project meeting (at: Mon 2-4pm) +added: [E][✗] project meeting (at: 2019-12-01) You now have 1 task in the list. ____________________________________________________________ ____________________________________________________________ -added: [D][✗] return book (by: Sunday) +added: [D][✗] return book (by: 2019-12-02) You now have 2 tasks in the list. ____________________________________________________________ ____________________________________________________________ -1.[E][✗] project meeting (at: Mon 2-4pm) -2.[D][✗] return book (by: Sunday) +1.[E][✗] project meeting (at: 2019-12-01) +2.[D][✗] return book (by: 2019-12-02) ____________________________________________________________ ____________________________________________________________ aight imma head out diff --git a/text-ui-test/tasks.ser b/text-ui-test/tasks.ser index f1742b064729575cbaf0a3783ec3a4cc92621c98..91297dca4d4b580b9b9ab4d7296110235f4cbd91 100644 GIT binary patch literal 440 zcmZ4UmVvdnh=DaEu{gW9Ky#muuCitY69c0U18WILsDwe(Co8cmQNOe#Ge_UCs3@`0 zC$qT3x}pH6OBf`h2a?f)%TzR8lAU=xaV|3hqbCDPab{I&MF9f?14}szhy+>XT9%qu zvO_N5z@3!lcCb}UNtGoGLJ)g$67$magG-7s^U|#=iWpcx4ih`FPIB2rA4etz<|qc1 zl>EF@A0U-jk_vZSNoH=UzE6H~VvY+?*cvEZl3Gzx$WX_?2DBb%D=*loAZ2>NsYO#` zTXsn+d2HfgV5lf4XJ=+$V1LZRSW&{jUr>~vm6}|lkeixX0(1h%mmDssi77dmd8se^ zm`jg5@%Mtc8Dcz$WM?P_QCu*in1Duc7p0bz7Ud}<<>zM?fTdZ{RAILeWDqZ!N(}QV E06i3ja{vGU delta 168 zcmdnN{Em@j&07Z6iB@_NOyw*L3=B-gMGUO2WvO{3fox$eE~~BWCpM_ohb-THpyH@` z6B7ed6a!02eqO2%14~J2MM)t;9RqVk0YeD`e?d`xR%&vILT+kmNoHPp2?M8Zex8Dn zu1P^I&`b`O)WnpW%)Hcq*!d5?i2t3(#K7poz?4)8F#$xf08Qa8N-ZfZ%2P Date: Mon, 24 Aug 2020 18:15:42 +0800 Subject: [PATCH 16/44] OOP Storage --- src/main/java/Duke.java | 3 +-- src/main/java/Storage.java | 43 ++++++++++++++++++++++++++++++++++++ src/main/java/Tasks.java | 45 +++++--------------------------------- 3 files changed, 49 insertions(+), 42 deletions(-) create mode 100644 src/main/java/Storage.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 2cb27517aa..8a2d3ca175 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,13 +1,12 @@ import java.time.LocalDate; import java.time.format.DateTimeParseException; -import java.util.Scanner; public class Duke { public static void main(String[] args) throws DukeException { UI ui = new UI(); ui.welcome(); - Tasks tasks = Tasks.read(); + Tasks tasks = Storage.read(); String input = ui.getInput(); while (!input.equals("bye")) { try { diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java new file mode 100644 index 0000000000..dacbebf70d --- /dev/null +++ b/src/main/java/Storage.java @@ -0,0 +1,43 @@ +import java.io.*; +import java.nio.file.Paths; + +public class Storage implements Serializable { + public static final File storage_file = Paths.get("tasks.ser").toFile(); + + public Storage() { + } + + public static void store(Tasks t) { + try { + //noinspection ResultOfMethodCallIgnored + storage_file.createNewFile(); //creates file if it does not exist + FileOutputStream fileOut = new FileOutputStream(storage_file); + ObjectOutputStream out = new ObjectOutputStream(fileOut); + out.writeObject(t); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static Tasks read() { + try { + Tasks t = null; + FileInputStream fileIn = new FileInputStream(storage_file); + ObjectInputStream in = new ObjectInputStream(fileIn); + t = (Tasks) in.readObject(); + in.close(); + fileIn.close(); + return t; + } catch (FileNotFoundException i) { + return new Tasks(); + } catch (IOException i) { + i.printStackTrace(); + return new Tasks(); + } catch (ClassNotFoundException c) { + System.out.println("Employee class not found"); + c.printStackTrace(); + return new Tasks(); + } + } +} \ No newline at end of file diff --git a/src/main/java/Tasks.java b/src/main/java/Tasks.java index 8b68ef14ab..766405074b 100644 --- a/src/main/java/Tasks.java +++ b/src/main/java/Tasks.java @@ -1,10 +1,8 @@ -import java.io.*; -import java.nio.file.Paths; import java.util.ArrayList; public class Tasks implements java.io.Serializable { - public static final File storage_file = Paths.get("tasks.ser").toFile(); + private final Storage storage = new Storage(); private ArrayList tasks; public Tasks() { @@ -14,7 +12,7 @@ public Tasks() { public void addTask(Task task) { tasks.add(task); UI.print("added: " + task.toString() + numTasks()); - store(); + Storage.store(this); } public String numTasks() { @@ -42,7 +40,7 @@ public void remove(int i) throws DukeException { throw new DukeException("invalid task number"); } tasks.remove(i); - store(); + Storage.store(this); } public void setDone(int i, boolean value) throws DukeException { @@ -50,44 +48,11 @@ public void setDone(int i, boolean value) throws DukeException { throw new DukeException("invalid task number"); } tasks.get(i).done = value; - store(); + Storage.store(this); } public void store() { - try { - FileOutputStream fileOut = new FileOutputStream(storage_file); - ObjectOutputStream out = new ObjectOutputStream(fileOut); - out.writeObject(this); - out.close(); - } catch (FileNotFoundException e) { - } catch (IOException e) { - e.printStackTrace(); - } + Storage.store(this); } - public static Tasks read() { - try { - Tasks t = null; - FileInputStream fileIn = new FileInputStream(storage_file); - ObjectInputStream in = new ObjectInputStream(fileIn); - t = (Tasks) in.readObject(); - in.close(); - fileIn.close(); - return t; - } catch (FileNotFoundException i) { - try{ - storage_file.createNewFile(); - } catch (IOException ioException) { - ioException.printStackTrace(); - } - return new Tasks(); - } catch (IOException i) { - i.printStackTrace(); - return new Tasks(); - } catch (ClassNotFoundException c) { - System.out.println("Employee class not found"); - c.printStackTrace(); - return new Tasks(); - } - } } \ No newline at end of file From eba4197f1492b6977328a5727fa834056136a11a Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 18:25:13 +0800 Subject: [PATCH 17/44] OOP Parser --- src/main/java/Duke.java | 70 +---------------------------------- src/main/java/Parser.java | 76 ++++++++++++++++++++++++++++++++++++++ text-ui-test/tasks.ser | Bin 440 -> 0 bytes 3 files changed, 78 insertions(+), 68 deletions(-) create mode 100644 src/main/java/Parser.java delete mode 100644 text-ui-test/tasks.ser diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 8a2d3ca175..67e0da2948 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,6 +1,3 @@ -import java.time.LocalDate; -import java.time.format.DateTimeParseException; - public class Duke { public static void main(String[] args) throws DukeException { @@ -8,77 +5,14 @@ public static void main(String[] args) throws DukeException { ui.welcome(); Tasks tasks = Storage.read(); String input = ui.getInput(); + Parser parser = new Parser(tasks); while (!input.equals("bye")) { try { if (input.isEmpty()) { input = ui.getInput(); continue; } - String[] words = input.split(" "); - String command = words[0]; - Task newTask; - String[] subst; - LocalDate date; - switch (command) { - case "list": - tasks.print_tasks(); - break; - case "done": - case "delete": - int i = Integer.parseInt(words[1]) - 1; - Task task = tasks.get(i); - if(command.equals("done")){ - tasks.setDone(i, true); - UI.print("Nice! I've marked this task as done: \n" + task); - } else if(command.equals("delete")) { - tasks.remove(i); - UI.print("Noted. I've removed this task: \n" + task + tasks.numTasks()); - } - break; - case "todo": - if (input.length() < 6) { - throw new DukeException("The description of a todo cannot be empty."); - } - String text = input.substring(5); - newTask = new Todo(text); - tasks.addTask(newTask); - break; - case "deadline": - if (input.length() < 10) { - throw new DukeException("The description of a deadline cannot be empty."); - } - subst = input.substring(9).split(" /by "); - if (subst.length < 2) { - throw new DukeException("The due date must be specified."); - } - try{ - date = LocalDate.parse(subst[1]); - newTask = new Deadline(subst[0], date); - tasks.addTask(newTask); - } catch (DateTimeParseException e){ - throw new DukeException(e.getMessage()); - } - break; - case "event": - if (input.length() < 7) { - throw new DukeException("The description of an event cannot be empty."); - } - subst = input.substring(6).split(" /at "); - if (subst.length < 2) { - throw new DukeException("The event date must be specified."); - } - try{ - date = LocalDate.parse(subst[1]); - newTask = new Event(subst[0], date); - tasks.addTask(newTask); - } catch (DateTimeParseException e){ - throw new DukeException(e.getMessage()); - } - break; - default: - throw new DukeException("I'm sorry, but I don't know what that means :-("); -// break; - } + parser.parse(input); } catch (DukeException e) { UI.print(e.getMessage() + "\n"); } diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java new file mode 100644 index 0000000000..274e3431ce --- /dev/null +++ b/src/main/java/Parser.java @@ -0,0 +1,76 @@ +import java.time.LocalDate; +import java.time.format.DateTimeParseException; + +public class Parser { + Tasks tasks; + public Parser(Tasks tasks){ + this.tasks = tasks; + } + void parse(String input) throws DukeException { + String[] words = input.split(" "); + String command = words[0]; + Task newTask; + String[] subst; + LocalDate date; + switch (command) { + case "list": + tasks.print_tasks(); + break; + case "done": + case "delete": + int i = Integer.parseInt(words[1]) - 1; + Task task = tasks.get(i); + if (command.equals("done")) { + tasks.setDone(i, true); + UI.print("Nice! I've marked this task as done: \n" + task); + } else if (command.equals("delete")) { + tasks.remove(i); + UI.print("Noted. I've removed this task: \n" + task + tasks.numTasks()); + } + break; + case "todo": + if (input.length() < 6) { + throw new DukeException("The description of a todo cannot be empty."); + } + String text = input.substring(5); + newTask = new Todo(text); + tasks.addTask(newTask); + break; + case "deadline": + if (input.length() < 10) { + throw new DukeException("The description of a deadline cannot be empty."); + } + subst = input.substring(9).split(" /by "); + if (subst.length < 2) { + throw new DukeException("The due date must be specified."); + } + try { + date = LocalDate.parse(subst[1]); + newTask = new Deadline(subst[0], date); + tasks.addTask(newTask); + } catch (DateTimeParseException e) { + throw new DukeException(e.getMessage()); + } + break; + case "event": + if (input.length() < 7) { + throw new DukeException("The description of an event cannot be empty."); + } + subst = input.substring(6).split(" /at "); + if (subst.length < 2) { + throw new DukeException("The event date must be specified."); + } + try { + date = LocalDate.parse(subst[1]); + newTask = new Event(subst[0], date); + tasks.addTask(newTask); + } catch (DateTimeParseException e) { + throw new DukeException(e.getMessage()); + } + break; + default: + throw new DukeException("I'm sorry, but I don't know what that means :-("); +// break; + } + } +} \ No newline at end of file diff --git a/text-ui-test/tasks.ser b/text-ui-test/tasks.ser deleted file mode 100644 index 91297dca4d4b580b9b9ab4d7296110235f4cbd91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmZ4UmVvdnh=DaEu{gW9Ky#muuCitY69c0U18WILsDwe(Co8cmQNOe#Ge_UCs3@`0 zC$qT3x}pH6OBf`h2a?f)%TzR8lAU=xaV|3hqbCDPab{I&MF9f?14}szhy+>XT9%qu zvO_N5z@3!lcCb}UNtGoGLJ)g$67$magG-7s^U|#=iWpcx4ih`FPIB2rA4etz<|qc1 zl>EF@A0U-jk_vZSNoH=UzE6H~VvY+?*cvEZl3Gzx$WX_?2DBb%D=*loAZ2>NsYO#` zTXsn+d2HfgV5lf4XJ=+$V1LZRSW&{jUr>~vm6}|lkeixX0(1h%mmDssi77dmd8se^ zm`jg5@%Mtc8Dcz$WM?P_QCu*in1Duc7p0bz7Ud}<<>zM?fTdZ{RAILeWDqZ!N(}QV E06i3ja{vGU From 68f0af736d77760d5d3bf092162c4d59557886ac Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 20:49:00 +0800 Subject: [PATCH 18/44] add message on successful load --- src/main/java/Duke.java | 4 ++-- src/main/java/Storage.java | 1 + src/main/java/Tasks.java | 1 + src/main/java/UI.java | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 67e0da2948..d74e13ee76 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,9 +1,9 @@ public class Duke { public static void main(String[] args) throws DukeException { - UI ui = new UI(); - ui.welcome(); Tasks tasks = Storage.read(); + UI ui = new UI(); + ui.welcome(tasks); String input = ui.getInput(); Parser parser = new Parser(tasks); while (!input.equals("bye")) { diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index dacbebf70d..07145ce14c 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -28,6 +28,7 @@ public static Tasks read() { t = (Tasks) in.readObject(); in.close(); fileIn.close(); + t.loadMessage = "Successfully loaded from storage. " + t.numTasks(); return t; } catch (FileNotFoundException i) { return new Tasks(); diff --git a/src/main/java/Tasks.java b/src/main/java/Tasks.java index 766405074b..8fe0275719 100644 --- a/src/main/java/Tasks.java +++ b/src/main/java/Tasks.java @@ -4,6 +4,7 @@ public class Tasks implements java.io.Serializable { private final Storage storage = new Storage(); private ArrayList tasks; + String loadMessage = ""; public Tasks() { tasks = new ArrayList<>(); diff --git a/src/main/java/UI.java b/src/main/java/UI.java index a2983499a8..ed026ad7ad 100644 --- a/src/main/java/UI.java +++ b/src/main/java/UI.java @@ -15,14 +15,14 @@ String getInput(){ return scanner.nextLine(); } - void welcome(){ + void welcome(Tasks tasks){ String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); - print(WELCOME); + print(WELCOME + tasks.loadMessage); } void bye(){ From 92603f8da21e0d7bc235551ceb5d70e98589d46d Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 20:54:35 +0800 Subject: [PATCH 19/44] fix serialization bug, rename Tasks to TaskList not necessary for tasks to have a storage object --- src/main/java/Duke.java | 2 +- src/main/java/Parser.java | 4 ++-- src/main/java/Storage.java | 16 ++++++++-------- src/main/java/{Tasks.java => TaskList.java} | 5 ++--- src/main/java/UI.java | 2 +- 5 files changed, 14 insertions(+), 15 deletions(-) rename src/main/java/{Tasks.java => TaskList.java} (91%) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d74e13ee76..022412e95f 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,7 +1,7 @@ public class Duke { public static void main(String[] args) throws DukeException { - Tasks tasks = Storage.read(); + TaskList tasks = Storage.read(); UI ui = new UI(); ui.welcome(tasks); String input = ui.getInput(); diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index 274e3431ce..962c5f9bbc 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -2,8 +2,8 @@ import java.time.format.DateTimeParseException; public class Parser { - Tasks tasks; - public Parser(Tasks tasks){ + TaskList tasks; + public Parser(TaskList tasks){ this.tasks = tasks; } void parse(String input) throws DukeException { diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index 07145ce14c..8a64fcd874 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -1,13 +1,13 @@ import java.io.*; import java.nio.file.Paths; -public class Storage implements Serializable { +public class Storage { public static final File storage_file = Paths.get("tasks.ser").toFile(); public Storage() { } - public static void store(Tasks t) { + public static void store(TaskList t) { try { //noinspection ResultOfMethodCallIgnored storage_file.createNewFile(); //creates file if it does not exist @@ -20,25 +20,25 @@ public static void store(Tasks t) { } } - public static Tasks read() { + public static TaskList read() { try { - Tasks t = null; + TaskList t = null; FileInputStream fileIn = new FileInputStream(storage_file); ObjectInputStream in = new ObjectInputStream(fileIn); - t = (Tasks) in.readObject(); + t = (TaskList) in.readObject(); in.close(); fileIn.close(); t.loadMessage = "Successfully loaded from storage. " + t.numTasks(); return t; } catch (FileNotFoundException i) { - return new Tasks(); + return new TaskList(); } catch (IOException i) { i.printStackTrace(); - return new Tasks(); + return new TaskList(); } catch (ClassNotFoundException c) { System.out.println("Employee class not found"); c.printStackTrace(); - return new Tasks(); + return new TaskList(); } } } \ No newline at end of file diff --git a/src/main/java/Tasks.java b/src/main/java/TaskList.java similarity index 91% rename from src/main/java/Tasks.java rename to src/main/java/TaskList.java index 8fe0275719..80d364015a 100644 --- a/src/main/java/Tasks.java +++ b/src/main/java/TaskList.java @@ -1,12 +1,11 @@ import java.util.ArrayList; -public class Tasks implements java.io.Serializable { +public class TaskList implements java.io.Serializable { - private final Storage storage = new Storage(); private ArrayList tasks; String loadMessage = ""; - public Tasks() { + public TaskList() { tasks = new ArrayList<>(); } diff --git a/src/main/java/UI.java b/src/main/java/UI.java index ed026ad7ad..fcb55c17b9 100644 --- a/src/main/java/UI.java +++ b/src/main/java/UI.java @@ -15,7 +15,7 @@ String getInput(){ return scanner.nextLine(); } - void welcome(Tasks tasks){ + void welcome(TaskList tasks){ String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" From 54597feadeaf6c45f409143f73762e9be392a3c2 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 24 Aug 2020 21:10:12 +0800 Subject: [PATCH 20/44] fix styling --- src/main/java/Parser.java | 4 +++- src/main/java/Task.java | 7 ++++--- src/main/java/Todo.java | 2 +- src/main/java/UI.java | 6 +++--- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index 962c5f9bbc..9d93e720fa 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -3,9 +3,11 @@ public class Parser { TaskList tasks; - public Parser(TaskList tasks){ + + public Parser(TaskList tasks) { this.tasks = tasks; } + void parse(String input) throws DukeException { String[] words = input.split(" "); String command = words[0]; diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 783898c8d8..f74db11f7b 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,15 +1,16 @@ import java.time.LocalDate; -public class Task implements java.io.Serializable{ +public class Task implements java.io.Serializable { String text; boolean done; LocalDate date; - public Task(String text, LocalDate date){ + public Task(String text, LocalDate date) { this.text = text; this.date = date; } - public String toString(){ + + public String toString() { return "[" + (done ? "✓" : "✗") + "] " + text; } } diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index 43b4dc9211..7524bdfe92 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -1,4 +1,4 @@ -public class Todo extends Task{ +public class Todo extends Task { public Todo(String description) { super(description, null); diff --git a/src/main/java/UI.java b/src/main/java/UI.java index fcb55c17b9..1c3977aa3e 100644 --- a/src/main/java/UI.java +++ b/src/main/java/UI.java @@ -11,11 +11,11 @@ public static void print(String str) { System.out.print(LINE + str + LINE); } - String getInput(){ + String getInput() { return scanner.nextLine(); } - void welcome(TaskList tasks){ + void welcome(TaskList tasks) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" @@ -25,7 +25,7 @@ void welcome(TaskList tasks){ print(WELCOME + tasks.loadMessage); } - void bye(){ + void bye() { print(BYE); } } From 24f53189dbd8c9c4306e3c2c114a508a168b5490 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Tue, 25 Aug 2020 18:02:59 +0800 Subject: [PATCH 21/44] A-JUnit --- src/test/java/TaskTest.java | 14 ++++++++++++++ src/test/java/TodoTest.java | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/test/java/TaskTest.java create mode 100644 src/test/java/TodoTest.java diff --git a/src/test/java/TaskTest.java b/src/test/java/TaskTest.java new file mode 100644 index 0000000000..a70042390b --- /dev/null +++ b/src/test/java/TaskTest.java @@ -0,0 +1,14 @@ +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class TaskTest { + @Test + public void dummyTest(){ + Task t = new Task("test1", LocalDate.parse("2001-09-11")); +// System.out.println(t.toString()); + assertEquals("[✗] test1", t.toString()); + } +} diff --git a/src/test/java/TodoTest.java b/src/test/java/TodoTest.java new file mode 100644 index 0000000000..2adfd1658a --- /dev/null +++ b/src/test/java/TodoTest.java @@ -0,0 +1,14 @@ +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class TodoTest { + @Test + public void test1(){ + Todo t = new Todo("test todo"); + System.out.println(t.toString()); + assertEquals("[T][✗] test todo\n", t.toString()); + } +} From 9d2e2e4c9e0fea07b64708073075c03683db80d5 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Tue, 25 Aug 2020 18:43:09 +0800 Subject: [PATCH 22/44] Create MANIFEST.MF --- src/main/java/META-INF/MANIFEST.MF | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/java/META-INF/MANIFEST.MF diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..9f37e4e0aa --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: Duke + From a7ae636c97e47bedd7b351c6f450bd67dbf60200 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 26 Aug 2020 11:48:07 +0800 Subject: [PATCH 23/44] cleanup TaskList add private constructor remove unused store method --- src/main/java/TaskList.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java index 80d364015a..67013d6341 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/TaskList.java @@ -9,6 +9,10 @@ public TaskList() { tasks = new ArrayList<>(); } + private TaskList(ArrayList tasks) { + this.tasks = tasks; + } + public void addTask(Task task) { tasks.add(task); UI.print("added: " + task.toString() + numTasks()); @@ -51,8 +55,4 @@ public void setDone(int i, boolean value) throws DukeException { Storage.store(this); } - public void store() { - Storage.store(this); - } - } \ No newline at end of file From 8dfb1792e02d805c60da86cc8bc35c116a808ab3 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 26 Aug 2020 11:52:12 +0800 Subject: [PATCH 24/44] A-CodingStandard Empty commit: project already follows a coding standard From 99b108fe83726a7a19e5138390d5147f274cc3f2 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 26 Aug 2020 12:23:18 +0800 Subject: [PATCH 25/44] Add javadocs --- src/main/java/Deadline.java | 10 ++++++++++ src/main/java/Duke.java | 9 +++++++++ src/main/java/DukeException.java | 7 +++++++ src/main/java/Event.java | 10 ++++++++++ src/main/java/Parser.java | 11 +++++++++++ src/main/java/Storage.java | 11 +++++++++++ src/main/java/Task.java | 10 ++++++++++ src/main/java/TaskList.java | 30 ++++++++++++++++++++++++++++++ src/main/java/Todo.java | 9 +++++++++ src/main/java/UI.java | 18 ++++++++++++++++++ 10 files changed, 125 insertions(+) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index bd41579174..71e3e93372 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -1,13 +1,23 @@ import java.time.LocalDate; +/** + * Represents a task to be completed by a certain time + */ public class Deadline extends Task { String by; + /** + * @param description Task description + * @param date Deadline for the task + */ public Deadline(String description, LocalDate date) { super(description, date); } + /** + * @return String representation of the task + */ @Override public String toString() { return "[D]" + super.toString() + " (by: " + date.toString() + ")\n"; diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 022412e95f..d9b6386dfc 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,5 +1,14 @@ +/** + * Main class for Duke program. + */ public class Duke { + /** + * Entry point of the duke program. Read from storage and creates a UI class instance. + * Serves as intermediate between the UI and parser. + * @param args + * @throws DukeException + */ public static void main(String[] args) throws DukeException { TaskList tasks = Storage.read(); UI ui = new UI(); diff --git a/src/main/java/DukeException.java b/src/main/java/DukeException.java index 82e0af5346..5c714f7078 100644 --- a/src/main/java/DukeException.java +++ b/src/main/java/DukeException.java @@ -1,4 +1,11 @@ +/** + * An exception class used for errors caused by inappropriate user input. Displays a message. + */ public class DukeException extends Exception { + /** + * Constructor for DukeException. + * @param msg the message to be displayed. + */ DukeException(String msg) { super("☹ OOPS!!! " + msg); } diff --git a/src/main/java/Event.java b/src/main/java/Event.java index c1ff59416c..a173f4fea1 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -1,13 +1,23 @@ import java.time.LocalDate; +/** + * Represents a task occurring at a certain time + */ public class Event extends Task { String by; + /** + * @param description Task description + * @param date Date of the event + */ public Event(String description, LocalDate date) { super(description, date); } + /** + * @return String representation of the task + */ @Override public String toString() { return "[E]" + super.toString() + " (at: " + date.toString() + ")\n"; diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index 9d93e720fa..4fa4e62d57 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -1,13 +1,24 @@ import java.time.LocalDate; import java.time.format.DateTimeParseException; +/** + * Class that handles user input + */ public class Parser { TaskList tasks; + /** + * @param tasks TaskList to use + */ public Parser(TaskList tasks) { this.tasks = tasks; } + /** + * Parses the user command + * @param input input from the user + * @throws DukeException + */ void parse(String input) throws DukeException { String[] words = input.split(" "); String command = words[0]; diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index 8a64fcd874..d1fbd4c405 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -1,12 +1,19 @@ import java.io.*; import java.nio.file.Paths; +/** + * Class that provides file storage utilities + */ public class Storage { public static final File storage_file = Paths.get("tasks.ser").toFile(); public Storage() { } + /** + * Serializes a TaskList and writes it to file + * @param t tasklist to be stored + */ public static void store(TaskList t) { try { //noinspection ResultOfMethodCallIgnored @@ -20,6 +27,10 @@ public static void store(TaskList t) { } } + /** + * Reads a serialized TaskList + * @return tasklisk read from file + */ public static TaskList read() { try { TaskList t = null; diff --git a/src/main/java/Task.java b/src/main/java/Task.java index f74db11f7b..5983278735 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,15 +1,25 @@ import java.time.LocalDate; +/** + * Represents a task + */ public class Task implements java.io.Serializable { String text; boolean done; LocalDate date; + /** + * @param text Task description + * @param date Date of the task + */ public Task(String text, LocalDate date) { this.text = text; this.date = date; } + /** + * @return String representation of the task + */ public String toString() { return "[" + (done ? "✓" : "✗") + "] " + text; } diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java index 67013d6341..c1e4c64872 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/TaskList.java @@ -1,10 +1,16 @@ import java.util.ArrayList; +/** + * Stores tasks and supports various operations on them. + */ public class TaskList implements java.io.Serializable { private ArrayList tasks; String loadMessage = ""; + /** + * Initializes a new task list + */ public TaskList() { tasks = new ArrayList<>(); } @@ -13,17 +19,27 @@ private TaskList(ArrayList tasks) { this.tasks = tasks; } + /** + * Adds a task to the task list. + * @param task the task to be added. + */ public void addTask(Task task) { tasks.add(task); UI.print("added: " + task.toString() + numTasks()); Storage.store(this); } + /** + * @return a string describing the number of tasks + */ public String numTasks() { int size = tasks.size(); return "You now have " + size + " task" + (size > 1 ? "s" : "") + " in the list.\n"; } + /** + * Prints the list of tasks through the UI class + */ public void print_tasks() { System.out.print(UI.LINE); for (int i = 0; i < tasks.size(); i++) { @@ -32,6 +48,11 @@ public void print_tasks() { System.out.print(UI.LINE); } + /** + * @param i Index of the task to be returned. + * @return The task at index I. + * @throws DukeException + */ public Task get(int i) throws DukeException { if (i < 0 || i >= tasks.size()) { throw new DukeException("invalid task number"); @@ -39,6 +60,10 @@ public Task get(int i) throws DukeException { return tasks.get(i); } + /** + * @param i Index of the task to be removed. + * @throws DukeException + */ public void remove(int i) throws DukeException { if (i < 0 || i >= tasks.size()) { throw new DukeException("invalid task number"); @@ -47,6 +72,11 @@ public void remove(int i) throws DukeException { Storage.store(this); } + /** + * @param i the index of the task to be set. + * @param value Doneness of the task to be set. + * @throws DukeException + */ public void setDone(int i, boolean value) throws DukeException { if (i < 0 || i >= tasks.size()) { throw new DukeException("invalid task number"); diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index 7524bdfe92..1d41e6c332 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -1,9 +1,18 @@ +/** + * Represents a to do task without a date + */ public class Todo extends Task { + /** + * @param description Task description + */ public Todo(String description) { super(description, null); } + /** + * @return String representation of the task + */ @Override public String toString() { return "[T]" + super.toString() + "\n"; diff --git a/src/main/java/UI.java b/src/main/java/UI.java index 1c3977aa3e..266a0b7825 100644 --- a/src/main/java/UI.java +++ b/src/main/java/UI.java @@ -1,5 +1,8 @@ import java.util.Scanner; +/** + * Class for reading user input and user interface + */ public class UI { final static String BYE = "aight imma head out\n"; @@ -7,14 +10,26 @@ public class UI { final static String LINE = "____________________________________________________________\n"; Scanner scanner = new Scanner(System.in); + /** + * Prints a string of text surrounded by a line of underscores above and below + * @param str text to be printed + */ public static void print(String str) { System.out.print(LINE + str + LINE); } + /** + * Reads user input + * @return input from user + */ String getInput() { return scanner.nextLine(); } + /** + * Prints welcome message and current number of tasks + * @param tasks TaskList loaded from storage + */ void welcome(TaskList tasks) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -25,6 +40,9 @@ void welcome(TaskList tasks) { print(WELCOME + tasks.loadMessage); } + /** + * Prints goodbye message + */ void bye() { print(BYE); } From f143e677b962ff76a9c986b9db54fe62a7a8bcf2 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 26 Aug 2020 12:40:20 +0800 Subject: [PATCH 26/44] Level-9 add find command --- src/main/java/Parser.java | 6 ++++++ src/main/java/TaskList.java | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index 9d93e720fa..1fa899b478 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -70,6 +70,12 @@ void parse(String input) throws DukeException { throw new DukeException(e.getMessage()); } break; + case "find": + if (input.length() < 6) { + throw new DukeException("Text to search for cannot be empty."); + } + tasks.find(input.substring(5)); + break; default: throw new DukeException("I'm sorry, but I don't know what that means :-("); // break; diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java index 67013d6341..e6906f1ae8 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/TaskList.java @@ -55,4 +55,20 @@ public void setDone(int i, boolean value) throws DukeException { Storage.store(this); } + public void find(String substring) { + StringBuilder sb = new StringBuilder(); + int counter = 0; + sb.append("Here are the matching tasks in your list:\n"); + for (Task t : tasks) { + if (t.text.contains(substring)) { + counter++; + sb.append(counter + "." + t.toString()); + } + } + if (counter > 0) { + UI.print(sb.toString()); + } else { + UI.print("No match found!\n"); + } + } } \ No newline at end of file From 42e88306db4073f27a8efe3f7e96acdb3b714457 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 26 Aug 2020 12:49:24 +0800 Subject: [PATCH 27/44] Update TaskList.java Add javadoc for find Refactor print_tasks to use UI --- src/main/java/TaskList.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java index c9f25056c2..ca800fb3e8 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/TaskList.java @@ -41,11 +41,15 @@ public String numTasks() { * Prints the list of tasks through the UI class */ public void print_tasks() { - System.out.print(UI.LINE); + if(tasks.size() == 0){ + UI.print("There are no tasks!\n"); + return; + } + StringBuilder sb = new StringBuilder(); for (int i = 0; i < tasks.size(); i++) { - System.out.print((i + 1) + "." + tasks.get(i)); + sb.append((i + 1) + "." + tasks.get(i).toString()); } - System.out.print(UI.LINE); + UI.print(sb.toString()); } /** @@ -85,6 +89,10 @@ public void setDone(int i, boolean value) throws DukeException { Storage.store(this); } + /** + * Finds tasks in this tasklist that matches the provided substring, and prints them. + * @param substring string to match + */ public void find(String substring) { StringBuilder sb = new StringBuilder(); int counter = 0; From 3f2e05e81ccc09fe1ee7419a3e9fae020902d117 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 26 Aug 2020 12:50:34 +0800 Subject: [PATCH 28/44] Remove redundant code --- src/main/java/Deadline.java | 2 -- src/main/java/Event.java | 2 -- src/main/java/Storage.java | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 71e3e93372..40109691d6 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -5,8 +5,6 @@ */ public class Deadline extends Task { - String by; - /** * @param description Task description * @param date Deadline for the task diff --git a/src/main/java/Event.java b/src/main/java/Event.java index a173f4fea1..3fc9673349 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -5,8 +5,6 @@ */ public class Event extends Task { - String by; - /** * @param description Task description * @param date Date of the event diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index d1fbd4c405..6463843111 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -33,7 +33,7 @@ public static void store(TaskList t) { */ public static TaskList read() { try { - TaskList t = null; + TaskList t; FileInputStream fileIn = new FileInputStream(storage_file); ObjectInputStream in = new ObjectInputStream(fileIn); t = (TaskList) in.readObject(); From a75fceeb74708da6ac524c08ef526d38e60ee56b Mon Sep 17 00:00:00 2001 From: damithc <> Date: Sun, 30 Aug 2020 00:37:24 +0800 Subject: [PATCH 29/44] build.gradle: Update version to 8.29 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b0c5528fb5..20c0521cc7 100644 --- a/build.gradle +++ b/build.gradle @@ -38,7 +38,7 @@ shadowJar { } checkstyle { - toolVersion = '8.23' + toolVersion = '8.29' } run{ From d24d4250d33d97422c9ffad1074621688a4906be Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 2 Sep 2020 17:07:23 +0800 Subject: [PATCH 30/44] Update build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 20c0521cc7..46095dd3a8 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ test { } application { - mainClassName = "seedu.duke.Duke" + mainClassName = "Duke" } shadowJar { From 6de3764c6688a4d6a85bbfd6e3201d0f96a9c5bf Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Tue, 8 Sep 2020 21:13:37 +0800 Subject: [PATCH 31/44] Update build.gradle --- build.gradle | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 build.gradle diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000000..7ca35f7ce2 --- /dev/null +++ b/build.gradle @@ -0,0 +1,59 @@ +plugins { + id 'java' + id 'application' + id 'checkstyle' + id 'com.github.johnrengelman.shadow' version '5.1.0' +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.0' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.0' + String javaFxVersion = '11' + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'linux' +} + +test { + useJUnitPlatform() + + testLogging { + events "passed", "skipped", "failed" + + showExceptions true + exceptionFormat "full" + showCauses true + showStackTraces true + showStandardStreams = false + } +} + +application { + mainClassName = "Duke" +} + +shadowJar { + archiveBaseName = "duke" + archiveClassifier = null +} + +checkstyle { + toolVersion = '8.29' +} + +run{ + standardInput = System.in +} From 9933b7b722daa0ceb976b59e32f9b40a7a1fac3d Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Tue, 8 Sep 2020 21:19:25 +0800 Subject: [PATCH 32/44] Update .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index f69985ef1f..57badee30f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ bin/ /text-ui-test/ACTUAL.txt text-ui-test/EXPECTED-UNIX.TXT + +gradle/ From 6a8c20a87a90bc1493a6ce25698c7243bff1850b Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Tue, 8 Sep 2020 21:19:45 +0800 Subject: [PATCH 33/44] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 57badee30f..bd5b2b45d9 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ bin/ text-ui-test/EXPECTED-UNIX.TXT gradle/ +gradlew* \ No newline at end of file From 0a4bb4822d15c3af16778acf52d92a2d6bd7e604 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 9 Sep 2020 18:10:39 +0800 Subject: [PATCH 34/44] add assertions --- src/main/java/Duke.java | 3 +++ src/main/java/Parser.java | 1 + 2 files changed, 4 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d9b6386dfc..980f7c50e9 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -11,10 +11,13 @@ public class Duke { */ public static void main(String[] args) throws DukeException { TaskList tasks = Storage.read(); + assert tasks != null : "error initializing tasks"; UI ui = new UI(); + assert ui != null : "error initializing UI"; ui.welcome(tasks); String input = ui.getInput(); Parser parser = new Parser(tasks); + assert ui != null : "error initializing parser"; while (!input.equals("bye")) { try { if (input.isEmpty()) { diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index bb0e5a2da2..c71a1c705c 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -20,6 +20,7 @@ public Parser(TaskList tasks) { * @throws DukeException */ void parse(String input) throws DukeException { + assert !input.isEmpty() : "error: input is null"; String[] words = input.split(" "); String command = words[0]; Task newTask; From 02bc264036f953d00e91ce9d05f72ce3ed25a161 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 9 Sep 2020 22:36:48 +0800 Subject: [PATCH 35/44] improve code quality --- src/main/java/Deadline.java | 8 +-- src/main/java/Duke.java | 1 + src/main/java/Parser.java | 133 ++++++++++++++++++------------------ src/main/java/Storage.java | 18 +++-- src/main/java/Task.java | 12 ++-- src/main/java/TaskList.java | 2 +- src/main/java/Todo.java | 6 +- src/main/java/UI.java | 17 +++-- src/test/java/TaskTest.java | 3 +- 9 files changed, 105 insertions(+), 95 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 40109691d6..41e30985ad 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -1,20 +1,20 @@ import java.time.LocalDate; /** - * Represents a task to be completed by a certain time + * Represents a task to be completed by a certain time. */ public class Deadline extends Task { /** - * @param description Task description - * @param date Deadline for the task + * @param description Task description. + * @param date Deadline for the task. */ public Deadline(String description, LocalDate date) { super(description, date); } /** - * @return String representation of the task + * @return String representation of the task. */ @Override public String toString() { diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d9b6386dfc..df04a07f96 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -6,6 +6,7 @@ public class Duke { /** * Entry point of the duke program. Read from storage and creates a UI class instance. * Serves as intermediate between the UI and parser. + * * @param args * @throws DukeException */ diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index bb0e5a2da2..85e641e2d8 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -8,15 +8,16 @@ public class Parser { TaskList tasks; /** - * @param tasks TaskList to use + * @param tasks TaskList to use. */ public Parser(TaskList tasks) { this.tasks = tasks; } /** - * Parses the user command - * @param input input from the user + * Parses the user command. + * + * @param input input from the user. * @throws DukeException */ void parse(String input) throws DukeException { @@ -26,70 +27,70 @@ void parse(String input) throws DukeException { String[] subst; LocalDate date; switch (command) { - case "list": - tasks.print_tasks(); - break; - case "done": - case "delete": - int i = Integer.parseInt(words[1]) - 1; - Task task = tasks.get(i); - if (command.equals("done")) { - tasks.setDone(i, true); - UI.print("Nice! I've marked this task as done: \n" + task); - } else if (command.equals("delete")) { - tasks.remove(i); - UI.print("Noted. I've removed this task: \n" + task + tasks.numTasks()); - } - break; - case "todo": - if (input.length() < 6) { - throw new DukeException("The description of a todo cannot be empty."); - } - String text = input.substring(5); - newTask = new Todo(text); + case "list": + tasks.print_tasks(); + break; + case "done": + case "delete": + int i = Integer.parseInt(words[1]) - 1; + Task task = tasks.get(i); + if (command.equals("done")) { + tasks.setDone(i, true); + UI.print("Nice! I've marked this task as done: \n" + task); + } else if (command.equals("delete")) { + tasks.remove(i); + UI.print("Noted. I've removed this task: \n" + task + tasks.numTasks()); + } + break; + case "todo": + if (input.length() < 6) { + throw new DukeException("The description of a todo cannot be empty."); + } + String text = input.substring(5); + newTask = new Todo(text); + tasks.addTask(newTask); + break; + case "deadline": + if (input.length() < 10) { + throw new DukeException("The description of a deadline cannot be empty."); + } + subst = input.substring(9).split(" /by "); + if (subst.length < 2) { + throw new DukeException("The due date must be specified."); + } + try { + date = LocalDate.parse(subst[1]); + newTask = new Deadline(subst[0], date); tasks.addTask(newTask); - break; - case "deadline": - if (input.length() < 10) { - throw new DukeException("The description of a deadline cannot be empty."); - } - subst = input.substring(9).split(" /by "); - if (subst.length < 2) { - throw new DukeException("The due date must be specified."); - } - try { - date = LocalDate.parse(subst[1]); - newTask = new Deadline(subst[0], date); - tasks.addTask(newTask); - } catch (DateTimeParseException e) { - throw new DukeException(e.getMessage()); - } - break; - case "event": - if (input.length() < 7) { - throw new DukeException("The description of an event cannot be empty."); - } - subst = input.substring(6).split(" /at "); - if (subst.length < 2) { - throw new DukeException("The event date must be specified."); - } - try { - date = LocalDate.parse(subst[1]); - newTask = new Event(subst[0], date); - tasks.addTask(newTask); - } catch (DateTimeParseException e) { - throw new DukeException(e.getMessage()); - } - break; - case "find": - if (input.length() < 6) { - throw new DukeException("Text to search for cannot be empty."); - } - tasks.find(input.substring(5)); - break; - default: - throw new DukeException("I'm sorry, but I don't know what that means :-("); -// break; + } catch (DateTimeParseException e) { + throw new DukeException(e.getMessage()); + } + break; + case "event": + if (input.length() < 7) { + throw new DukeException("The description of an event cannot be empty."); + } + subst = input.substring(6).split(" /at "); + if (subst.length < 2) { + throw new DukeException("The event date must be specified."); + } + try { + date = LocalDate.parse(subst[1]); + newTask = new Event(subst[0], date); + tasks.addTask(newTask); + } catch (DateTimeParseException e) { + throw new DukeException(e.getMessage()); + } + break; + case "find": + if (input.length() < 6) { + throw new DukeException("Text to search for cannot be empty."); + } + tasks.find(input.substring(5)); + break; + default: + throw new DukeException("I'm sorry, but I don't know what that means :-("); + break; } } } \ No newline at end of file diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index 6463843111..a780bfb841 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -1,8 +1,14 @@ -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.nio.file.Paths; /** - * Class that provides file storage utilities + * Class that provides file storage utilities. */ public class Storage { public static final File storage_file = Paths.get("tasks.ser").toFile(); @@ -11,8 +17,8 @@ public Storage() { } /** - * Serializes a TaskList and writes it to file - * @param t tasklist to be stored + * Serializes a TaskList and writes it to file. + * @param t tasklist to be stored. */ public static void store(TaskList t) { try { @@ -28,8 +34,8 @@ public static void store(TaskList t) { } /** - * Reads a serialized TaskList - * @return tasklisk read from file + * Reads a serialized TaskList. + * @return tasklisk read from file. */ public static TaskList read() { try { diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 5983278735..be9a3e779e 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,16 +1,16 @@ import java.time.LocalDate; /** - * Represents a task + * Represents a task. */ public class Task implements java.io.Serializable { String text; - boolean done; + boolean isDone; LocalDate date; /** - * @param text Task description - * @param date Date of the task + * @param text Task description. + * @param date Date of the task. */ public Task(String text, LocalDate date) { this.text = text; @@ -18,9 +18,9 @@ public Task(String text, LocalDate date) { } /** - * @return String representation of the task + * @return String representation of the task. */ public String toString() { - return "[" + (done ? "✓" : "✗") + "] " + text; + return "[" + (isDone ? "✓" : "✗") + "] " + text; } } diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java index ca800fb3e8..3c73a9fc17 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/TaskList.java @@ -85,7 +85,7 @@ public void setDone(int i, boolean value) throws DukeException { if (i < 0 || i >= tasks.size()) { throw new DukeException("invalid task number"); } - tasks.get(i).done = value; + tasks.get(i).isDone = value; Storage.store(this); } diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index 1d41e6c332..79efa3a6fe 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -1,17 +1,17 @@ /** - * Represents a to do task without a date + * Represents a to do task without a date. */ public class Todo extends Task { /** - * @param description Task description + * @param description Task description. */ public Todo(String description) { super(description, null); } /** - * @return String representation of the task + * @return String representation of the task. */ @Override public String toString() { diff --git a/src/main/java/UI.java b/src/main/java/UI.java index 266a0b7825..40d7d47d78 100644 --- a/src/main/java/UI.java +++ b/src/main/java/UI.java @@ -1,7 +1,7 @@ import java.util.Scanner; /** - * Class for reading user input and user interface + * Class for reading user input and user interface. */ public class UI { @@ -11,16 +11,18 @@ public class UI { Scanner scanner = new Scanner(System.in); /** - * Prints a string of text surrounded by a line of underscores above and below - * @param str text to be printed + * Prints a string of text surrounded by a line of underscores above and below. + * + * @param str text to be printed. */ public static void print(String str) { System.out.print(LINE + str + LINE); } /** - * Reads user input - * @return input from user + * Reads user input. + * + * @return input from user. */ String getInput() { return scanner.nextLine(); @@ -28,7 +30,8 @@ String getInput() { /** * Prints welcome message and current number of tasks - * @param tasks TaskList loaded from storage + * + * @param tasks TaskList loaded from storage. */ void welcome(TaskList tasks) { String logo = " ____ _ \n" @@ -41,7 +44,7 @@ void welcome(TaskList tasks) { } /** - * Prints goodbye message + * Prints goodbye message. */ void bye() { print(BYE); diff --git a/src/test/java/TaskTest.java b/src/test/java/TaskTest.java index a70042390b..80008ea4d5 100644 --- a/src/test/java/TaskTest.java +++ b/src/test/java/TaskTest.java @@ -6,9 +6,8 @@ public class TaskTest { @Test - public void dummyTest(){ + public void dummyTest() { Task t = new Task("test1", LocalDate.parse("2001-09-11")); -// System.out.println(t.toString()); assertEquals("[✗] test1", t.toString()); } } From aedb32345dc79a8fa6a30ce28e40e4943d56a110 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Fri, 11 Sep 2020 17:43:31 +0800 Subject: [PATCH 36/44] move tasks to package --- src/main/java/Parser.java | 2 ++ src/main/java/{ => Task}/Deadline.java | 6 ++++-- src/main/java/{ => Task}/Event.java | 4 +++- src/main/java/{ => Task}/Task.java | 8 +++++--- src/main/java/{ => Task}/Todo.java | 4 +++- src/main/java/TaskList.java | 2 ++ src/test/java/TaskTest.java | 1 + src/test/java/TodoTest.java | 3 +-- 8 files changed, 21 insertions(+), 9 deletions(-) rename src/main/java/{ => Task}/Deadline.java (79%) rename src/main/java/{ => Task}/Event.java (88%) rename src/main/java/{ => Task}/Task.java (80%) rename src/main/java/{ => Task}/Todo.java (84%) diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index b1fea7b36e..fa6f7edc58 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -1,3 +1,5 @@ +import Task.Task; + import java.time.LocalDate; import java.time.format.DateTimeParseException; diff --git a/src/main/java/Deadline.java b/src/main/java/Task/Deadline.java similarity index 79% rename from src/main/java/Deadline.java rename to src/main/java/Task/Deadline.java index 41e30985ad..c41283910f 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Task/Deadline.java @@ -1,3 +1,5 @@ +package Task; + import java.time.LocalDate; /** @@ -6,8 +8,8 @@ public class Deadline extends Task { /** - * @param description Task description. - * @param date Deadline for the task. + * @param description Task.Task description. + * @param date Task.Deadline for the task. */ public Deadline(String description, LocalDate date) { super(description, date); diff --git a/src/main/java/Event.java b/src/main/java/Task/Event.java similarity index 88% rename from src/main/java/Event.java rename to src/main/java/Task/Event.java index 3fc9673349..30744b34a7 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Task/Event.java @@ -1,3 +1,5 @@ +package Task; + import java.time.LocalDate; /** @@ -6,7 +8,7 @@ public class Event extends Task { /** - * @param description Task description + * @param description Task.Task description * @param date Date of the event */ public Event(String description, LocalDate date) { diff --git a/src/main/java/Task.java b/src/main/java/Task/Task.java similarity index 80% rename from src/main/java/Task.java rename to src/main/java/Task/Task.java index be9a3e779e..8651e39102 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task/Task.java @@ -1,15 +1,17 @@ +package Task; + import java.time.LocalDate; /** * Represents a task. */ public class Task implements java.io.Serializable { - String text; - boolean isDone; + public String text; + public boolean isDone; LocalDate date; /** - * @param text Task description. + * @param text Task.Task description. * @param date Date of the task. */ public Task(String text, LocalDate date) { diff --git a/src/main/java/Todo.java b/src/main/java/Task/Todo.java similarity index 84% rename from src/main/java/Todo.java rename to src/main/java/Task/Todo.java index 79efa3a6fe..7a5d310e26 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Task/Todo.java @@ -1,10 +1,12 @@ +package Task; + /** * Represents a to do task without a date. */ public class Todo extends Task { /** - * @param description Task description. + * @param description Task.Task description. */ public Todo(String description) { super(description, null); diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java index 3c73a9fc17..faf0033eef 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/TaskList.java @@ -1,3 +1,5 @@ +import Task.Task; + import java.util.ArrayList; /** diff --git a/src/test/java/TaskTest.java b/src/test/java/TaskTest.java index 80008ea4d5..5924bc5be6 100644 --- a/src/test/java/TaskTest.java +++ b/src/test/java/TaskTest.java @@ -1,3 +1,4 @@ +import Task.Task; import org.junit.jupiter.api.Test; import java.time.LocalDate; diff --git a/src/test/java/TodoTest.java b/src/test/java/TodoTest.java index 2adfd1658a..704e80a4b5 100644 --- a/src/test/java/TodoTest.java +++ b/src/test/java/TodoTest.java @@ -1,7 +1,6 @@ +import Task.Todo; import org.junit.jupiter.api.Test; -import java.time.LocalDate; - import static org.junit.jupiter.api.Assertions.assertEquals; public class TodoTest { From 41238c8e50cd93c22600b3a8bd99a902ab5198df Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 14 Sep 2020 19:19:11 +0800 Subject: [PATCH 37/44] Fix imports and remove unreachable statement --- src/main/java/Parser.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index fa6f7edc58..c18d348609 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -1,4 +1,7 @@ import Task.Task; +import Task.Todo; +import Task.Deadline; +import Task.Event; import java.time.LocalDate; import java.time.format.DateTimeParseException; @@ -93,7 +96,6 @@ void parse(String input) throws DukeException { break; default: throw new DukeException("I'm sorry, but I don't know what that means :-("); - break; } } } \ No newline at end of file From 91324764a7c5257221e2963253543a9f672a29fd Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 14 Sep 2020 19:19:31 +0800 Subject: [PATCH 38/44] Update .gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index bd5b2b45d9..c254956646 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,6 @@ bin/ text-ui-test/EXPECTED-UNIX.TXT gradle/ -gradlew* \ No newline at end of file +gradlew* + +tasks.ser From 1467d91474a94cc54bb1af0aec12354dc0c53ed1 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Mon, 14 Sep 2020 19:54:15 +0800 Subject: [PATCH 39/44] C-sort --- src/main/java/Parser.java | 3 +++ src/main/java/Task/Task.java | 24 +++++++++++++++++++++++- src/main/java/TaskList.java | 21 +++++++++++++++++---- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index c18d348609..9b1beea69d 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -94,6 +94,9 @@ void parse(String input) throws DukeException { } tasks.find(input.substring(5)); break; + case "sort": + tasks.sort(); + break; default: throw new DukeException("I'm sorry, but I don't know what that means :-("); } diff --git a/src/main/java/Task/Task.java b/src/main/java/Task/Task.java index 8651e39102..801341179a 100644 --- a/src/main/java/Task/Task.java +++ b/src/main/java/Task/Task.java @@ -5,7 +5,7 @@ /** * Represents a task. */ -public class Task implements java.io.Serializable { +public class Task implements java.io.Serializable, Comparable { public String text; public boolean isDone; LocalDate date; @@ -25,4 +25,26 @@ public Task(String text, LocalDate date) { public String toString() { return "[" + (isDone ? "✓" : "✗") + "] " + text; } + + /** + * Compares this task with the specified task for order based on date. The task with no date is considered greater. + * Otherwise, the task with a later date is considered greater. + * + * @param t the object to be compared. + * @return a negative integer, zero, or a positive integer as this object + * is less than, equal to, or greater than the specified object. + * @throws NullPointerException if the specified object is null + * @throws ClassCastException if the specified object's type prevents it + * from being compared to this object. + */ + @Override + public int compareTo(Task t) { + if(this.date == null){ + return 1; + } else if (t.date == null){ + return -1; + } else { + return this.date.compareTo(t.date); + } + } } diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java index faf0033eef..198c060de6 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/TaskList.java @@ -1,6 +1,7 @@ import Task.Task; import java.util.ArrayList; +import java.util.Collections; /** * Stores tasks and supports various operations on them. @@ -43,15 +44,19 @@ public String numTasks() { * Prints the list of tasks through the UI class */ public void print_tasks() { + UI.print(this.toString()); + } + + @Override + public String toString(){ if(tasks.size() == 0){ - UI.print("There are no tasks!\n"); - return; + return "There are no tasks!\n"; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < tasks.size(); i++) { - sb.append((i + 1) + "." + tasks.get(i).toString()); + sb.append(i + 1).append(".").append(tasks.get(i).toString()); } - UI.print(sb.toString()); + return sb.toString(); } /** @@ -111,4 +116,12 @@ public void find(String substring) { UI.print("No match found!\n"); } } + + /** + * Sorts tasks by date then prints the new list. + */ + public void sort(){ + Collections.sort(tasks); + UI.print("Tasks sorted by date.\n" + this.toString()); + } } \ No newline at end of file From 7b2962819e742e536f942c1faac1f65ff7854477 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 16 Sep 2020 14:30:29 +0800 Subject: [PATCH 40/44] implement GUI part 1 to 3 --- build.gradle | 2 +- src/main/java/DialogBox.java | 41 ++++++++ src/main/java/Duke.java | 112 +++++++++++++++++++++- src/main/java/Launcher.java | 10 ++ src/main/resources/images/DaDuke.jpg | Bin 0 -> 7674 bytes src/main/resources/images/DaMith.png | Bin 0 -> 58123 bytes src/main/resources/images/FTEA0910.png | Bin 0 -> 123716 bytes src/main/resources/images/FTEA0910_cr.png | Bin 0 -> 74486 bytes src/main/resources/images/download.jpg | Bin 0 -> 5744 bytes 9 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 src/main/java/DialogBox.java create mode 100644 src/main/java/Launcher.java create mode 100644 src/main/resources/images/DaDuke.jpg create mode 100644 src/main/resources/images/DaMith.png create mode 100644 src/main/resources/images/FTEA0910.png create mode 100644 src/main/resources/images/FTEA0910_cr.png create mode 100644 src/main/resources/images/download.jpg diff --git a/build.gradle b/build.gradle index 7ca35f7ce2..bd1d69100b 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ test { } application { - mainClassName = "Duke" + mainClassName = "Launcher" } shadowJar { diff --git a/src/main/java/DialogBox.java b/src/main/java/DialogBox.java new file mode 100644 index 0000000000..3e8fb94ba9 --- /dev/null +++ b/src/main/java/DialogBox.java @@ -0,0 +1,41 @@ +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; + +public class DialogBox extends HBox { + + private Label text; + private ImageView displayPicture; + + public DialogBox(Label l, ImageView iv) { + text = l; + displayPicture = iv; + + text.setWrapText(true); + displayPicture.setFitWidth(100.0); + displayPicture.setFitHeight(100.0); + + this.setAlignment(Pos.TOP_RIGHT); + this.getChildren().addAll(text, displayPicture); + } + private void flip() { + this.setAlignment(Pos.TOP_LEFT); + ObservableList tmp = FXCollections.observableArrayList(this.getChildren()); + FXCollections.reverse(tmp); + this.getChildren().setAll(tmp); + } + + public static DialogBox getUserDialog(Label l, ImageView iv) { + return new DialogBox(l, iv); + } + + public static DialogBox getDukeDialog(Label l, ImageView iv) { + var db = new DialogBox(l, iv); + db.flip(); + return db; + } +} \ No newline at end of file diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e9c97024e7..8e4eeedf81 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,8 +1,28 @@ +import javafx.application.Application; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.TextField; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Region; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + /** * Main class for Duke program. */ -public class Duke { +public class Duke extends Application { + private Image user = new Image(this.getClass().getResourceAsStream("/images/DaMith.png")); + private Image duke = new Image(this.getClass().getResourceAsStream("/images/DaDuke.jpg")); + private ScrollPane scrollPane; + private VBox dialogContainer; + private TextField userInput; + private Button sendButton; + private Scene scene; /** * Entry point of the duke program. Read from storage and creates a UI class instance. * Serves as intermediate between the UI and parser. @@ -35,4 +55,94 @@ public static void main(String[] args) throws DukeException { ui.bye(); } + @Override + public void start(Stage stage) { + //Step 1. Setting up required components + + //The container for the content of the chat to scroll. + scrollPane = new ScrollPane(); + dialogContainer = new VBox(); + scrollPane.setContent(dialogContainer); + + userInput = new TextField(); + sendButton = new Button("Send"); + + AnchorPane mainLayout = new AnchorPane(); + mainLayout.getChildren().addAll(scrollPane, userInput, sendButton); + + scene = new Scene(mainLayout); + + stage.setScene(scene); + stage.show(); + + stage.setTitle("Duke"); + stage.setResizable(false); + stage.setMinHeight(600.0); + stage.setMinWidth(400.0); + + mainLayout.setPrefSize(400.0, 600.0); + + scrollPane.setPrefSize(385, 535); + scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); + scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS); + + scrollPane.setVvalue(1.0); + scrollPane.setFitToWidth(true); + + // You will need to import `javafx.scene.layout.Region` for this. + dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE); + + userInput.setPrefWidth(325.0); + + sendButton.setPrefWidth(55.0); + + AnchorPane.setTopAnchor(scrollPane, 1.0); + + AnchorPane.setBottomAnchor(sendButton, 1.0); + AnchorPane.setRightAnchor(sendButton, 1.0); + + AnchorPane.setLeftAnchor(userInput , 1.0); + AnchorPane.setBottomAnchor(userInput, 1.0); + + sendButton.setOnMouseClicked((event) -> { + handleUserInput(); + }); + + userInput.setOnAction((event) -> { + handleUserInput(); + }); + + dialogContainer.heightProperty().addListener((observable) -> scrollPane.setVvalue(1.0)); + } + + /** + * Iteration 1: + * Creates a label with the specified text and adds it to the dialog container. + * @param text String containing text to add + * @return a label with the specified text that has word wrap enabled. + */ + private Label getDialogLabel(String text) { + Label textToAdd = new Label(text); + textToAdd.setWrapText(true); + + return textToAdd; + } + private void handleUserInput() { + Label userText = new Label(userInput.getText()); + Label dukeText = new Label(getResponse(userInput.getText())); + dialogContainer.getChildren().addAll( + DialogBox.getUserDialog(userText, new ImageView(user)), + DialogBox.getDukeDialog(dukeText, new ImageView(duke)) + ); + userInput.clear(); + } + + /** + * You should have your own function to generate a response to user input. + * Replace this stub with your completed method. + */ + private String getResponse(String input) { + return "Duke heard: " + input; + } + } diff --git a/src/main/java/Launcher.java b/src/main/java/Launcher.java new file mode 100644 index 0000000000..6d7bc95383 --- /dev/null +++ b/src/main/java/Launcher.java @@ -0,0 +1,10 @@ +import javafx.application.Application; + +/** + * A launcher class to workaround classpath issues. + */ +public class Launcher { + public static void main(String[] args) { + Application.launch(Duke.class, args); + } +} \ No newline at end of file diff --git a/src/main/resources/images/DaDuke.jpg b/src/main/resources/images/DaDuke.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05aa2d05178cec5240b053d8597c3a5f9b212a2a GIT binary patch literal 7674 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/DaMith.png b/src/main/resources/images/DaMith.png new file mode 100644 index 0000000000000000000000000000000000000000..e87db85810af9596cd5b44ae2b21c329b0e04aaf GIT binary patch literal 58123 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/FTEA0910_cr.png b/src/main/resources/images/FTEA0910_cr.png new file mode 100644 index 0000000000000000000000000000000000000000..68f8c819072b55ee1a91eead865c1afb60a009f0 GIT binary patch literal 74486 zcmXt;1yGdV*TURiDl`f7I^*r zXWp3`GoO2&XYSm4X3m*&zfqr66^Zca@Bsh-k@7;{{3G^OLr+Pe&xcN{y7}}kO;Pw$YE#0GKTbpp?;(44L$F1lZ&Z-S9oya=2lf!hqPMA(XMl6g zJL%t;2JEm`iw|LsWnT9$F}bL0lL;^!LH+ka(P(6+fxwO6tP2c{3tN*CBhvzpEu4dr zy-kDrX8{CeHq`<6_LF@;oJVp`kIDBvLEP|Gomw^dKXlbI7ebvpBE{6lGcl^IlUyQ} z-}$=sdv$`-o}G>d6Rc+jiPNb18@NyMh+3W%{jeO7Y}n5Ny;JgP!&p`*JlMgKv7cbUT8FpaZ=+6jR($C^O<6A{x`g5UH7 zBz-wYS)unAiD-?*X@ovxo-WY?^9g^*{c+b(fS}PYFh@DA=$C-;J=`m-RJ9u(385z3 zL=C|71tzyL8HbK`-$uQN%nux8GDcKU9Di?6oy>w4Y&;lb?EV5p@C%dXbXv)JD^wzV z2uD91GxF``adt}eSmZVQCqYOp*uZ^?vJNMfY>)M0@Vn;lQ(yh<(tv(PKi%R`ozuy2 zSx;O~C_MjU=I4nbfDxVF*emR}v+7-4kDI^{#Tab~)?f(AQtA0rW*>u`)9);@E-*Ld zbe?Q1xM9mJ&%rq<=p!yS>G}mGJM%NSBY*FD@T(ZvPODw)XZLO7pBbNLQIq;SufyaV z$gu*f_HoJH)gS%(Ou%?S+&+**#f#>w;Ab->+gU=W1-X`phUw1KFR?II2gYb;88^dq=SADNU_I>m*{SBZ>7%rA&wc|! z3-V?SaSSF6C9;%K9c32Da?PxuNa^rv@QD zc#i|halxtDx#b$4|6&ixcfo$Jojkn2(0M=r&A1fpte%~KZ-Nn;vs<(Z)Jh4as;3%q zfU)~8x72sv;@D@Ej`8mCcsBhsWc@7ZRQV?lyF!_EUQ|*u!%h1>sA=v^ukkWAt34)w z2XPq47c!L7Uk(TT);S^b#OV&TO>ZCoG0DJTz{;VBSvU6lvBT>Z2dEbWoV$cR07f+T z7vq|Fd8A6BRPB5M78#R~p7^^)y4d&EDWh{*w zEF24fJcye?ZrU#LZ4E-fm1|eQd&skRmmq!#%T!cX2*-4s^X|o(Q7+_^d+$JBr<3{} zHVS*OppybQnL9S%IQh|&1(`@{Uy1mB*ZINw5{=Ok0k~Nbg+ktOor3+%5K!@$EpQm2 zj{X!xWwqvs{>BhnLOuH)Y5b1qUJzHP|MoSOe5U+56BqKrcLIwk(1_-_GISTTr2?Qh z)gbiQx;^NYOvit

QK=_BlTW>pNgAo0!T0@(l867~|RrN!mH+y)HU3n`O^0t;XBe zx@4KSU0EtlJGJFS`gD-%Q1ZM+IA-*OTnrj5sfLw^$Y9+%Xl*E1?inVOE@-u~oC1zs zeX~5H3hU8x_A_mM5{9vtZj&;2k}UZ!ElU3K2zubU@ojC0yq3N2@d67e_VaM`3y-j(5h@YHZK9_iD-6bJ!Wa`bP)7Aa7~nm6zI{nz8&fgFfz z%Wl6ujx(u3mx4|04UTb%AIG@?1yuG+K@;?{;sfd?Nmdwm-7$=2A38j-6QPPj4QVms z>m4KOKEo?MNtXl+o*&Ski(UCM{@xrv=CjdYeaG*M4f-8wSJ8o8L?%A(JRkrQ+KqM!G9Np@g*!TWe0Pv@)g5#IXn z92r*D-0g|a9(*lO1)tOuFW+8CmOCHqb9p(NqdLrSF7g8}QAem_K;T(YOwb#o`5Eaw zt3sO3y{NvxtTbPfk<74F)U~S%7GOL`G3~Jpr^cnr)|JH(`20D}kUvqgomuIHP@li+ z4Mk_R2IY<0bDc4~J-oxE&&ROVel={B$G|rhl~?HSw(n}((_+I8mh*7g7%8=Wp5eGZ zJW9qZw7oN$H&GqPO_fSqVzw(y0=ZhS2QG=4>7+nlrx^J%Pn(C(xQV^$jXMstZ_uln z%b4u>7u-6=$6$la(ij*J-9KFH1vh4|z}T2X1(`iIs)W_%C_r8b$4XfKg5k|=Xcv8) zWNiT6ibUakFiD-_*Vf<;QQ7TvQcjZEDIyc-ug-+Ad;Ne9s+VfM*f&1k;=snl#yQbq zcv32VOFemO58}8*3U}N3PD%bny9I$q}KLFE0hknhRNqAA7lpQ94e6RDM(&dt?gG zn^KlRANufv?eXcy=YhpfO<)rH`;4Bf+(AsrM<<1LhhSyDjh7){O1JlySSx8)E0dgE z`!(H;SDjWnlltbp`P|?4d!s2>GNfUD&R-grDl4$lmV~BnHwCidTaf3r?mjyq--YAn zo?C+`f?%#CSm7ZaPFy;?Exm7uEt+G<{4!fyc#<$X522y19u0j5aS>V`a+wWAIub4E zTb_d-B2s+GQSaV+3r!XrcJCGxPe$;N)J6!h;{R6bK|6un=Dr^{l^;4Wir@As0yoGu z2%ohjgmxv!5}>gL2A;5bL0mJk%~B_Z>e%xMC?K%!wy$0jb{aSAj!^|$(3@Gy40rr- zRH{g$nX)Uqtz2OnQl_na_TpxnZH(DFy-hUY`^*weeB`7BI3$iBzAL#)K|qc5xlRxD zOMjPXHC}8;i)^1&wSQ7e*!Szyx{d*313=B?>QddID#6}GSN@oyWk9evLC!a02`Zm) zz;BXX*;g7JS$exa?qjVzBhIrYL}5hJZpe03`UJ)ql3qD|gat)GF=p$N z`=NE3wOd-Ao^|*A?Sfg2@+_I{q#KV|i~WsIlE}OXnaCj6UUqC&oCDY~)(*Ee)G6`W zee1;YFB?Vgy;x9-f$c!;)-u4@Xgf9UH z0XO1b;2B-)hcWkziD%Ydfaz@mLkXBn8YW4>ZvnQzUoPan=eI75>zjGZx!yg$x7hox z^Y+wEm&Cn1zr#Eg7oZO6Ft&P=z&zEj(_TFHolX$B$JdyVJ)pV!KeBPH%SzaA)1Kdq z@L94eG^ONQwxpsCGoF+l3B^iGqEuie(B`^vK$wH}$Yd?mQTf=bhsS_bwYQ9tD zjlh$aFP{nNfu z_sxio)Hc<8gF_S87YHd%vl9rFq`oam1W~>{M$%d?Qx{>ckugBX^A7le19BvvOO6k@ zSC_HQPpo)-bo%Sz6w~`QvOYVZ;7p2U?=^r;51+1xXXjdU;&+jwjHzToCP1t zYlV@Lm(SDdc3BP|Gu|!N8C?DWY(O{J;b(snLM7dQm|C(=>|x)$A+CK|jVS`*^={nJ zu3;hboxoPaU|n&<$=&T@d{KWkaN6`Ia?nZAiW)=QXP7Oz_NWksdEA>O>0RpGfW5}} zvPH8hP3O!~srSm)GAR#{p5gJwH~ggjg6U-w_}eqQfnYOhGck>vlRvSl{SQ{_;U>z*I*${8o z2OBC(Lno65SyJV(drebot?Hi+S}3O@v8$W;ictj5F8cTV5HJ^?aIpr2OaH(OwnW8c zvWu@7+wL>$4Qo(#gGv-XuZm4Z9GK9)Olg81Y2b^je}$ZAHK2~`Nc0YR!PFKy>w^Pv z$SLJ5WQ5h53JFs@1E}LRuT9P?tA|llbuI>izu^;~7l+tog&gp4F`GI@%gaGfzW zpp*ZgpM5+YHttwRq`m6YS0yx$rW&b|=_Cav6XzSBslx)VTq+ky{$6j`;e+qS0xyga zV|bmjzB};*E7DD8erH}I8OlX#lO7t2AXdf5!3L<~x^lL=^CFceH<(=IwlVazS(S*c zK%9`__-@fd%Vsyj5gurUJc_ngnTM~%N!i}syKmyKpX&qwYLE?3Eb@CR4|v*ykp}MQ>DG@m zrV^0&B}cfmPDdc~K7DM|AHL)K(lboa3y)Ag={e74mdS`RIN|t9rn)UMJexA>STRWR zN9!EU4-C4SUlyHQ28X!sQkK0ov$9_FgN)aI2xe_2gOSqq zqNU!+?D2$jG&1-LAN{o)3{`|LM43#cX>`(BYxnF@Wr?|RD!U?m(;N0F!@+!pwu`(` zJn^^_@s^G=5pc+P!i-P7r>i?gq5uAlLr?HUrh!tHTaIpb=}v8C`+E~SpORPgwf*M8Doa+?>#~* z;e9nYtW6`953kG>mm4+*JIq~pGp&~6z^QMuVJzTH>;MT*5u7g`%8LzAMEwZ_Om$#g z)S&E_J=!&9Y-t{n?N4bA{rv6F87Dd}B*uqpD6Rmp%igivG#`B-xhl;}Yq;&24`D}L9Fqc zGvP}`W^^9AvZZiUfP@};S zo0TH{1QF5Yy`Oa1k5*9%Fa3vk#e=B_RHRQ4XI&A|& z_4vaa(SwqHs(?XyE(Dxrwo&7R()_Hzbo1|RRz;b>PicuDPb9r3E~86o#3x%v9OyuT zNu7$GwQUQ7^UK%fJMj;5Od%2Ho_F;C=ub288SvGr{p#XyJG$i$L@TwM8NMp@RNn_;}g-tmC=R>L{H7|Rdu<5 z6^wRb9<@Dvwc;M&aX&J~m|(V@Hr4jTV03em*YhZj3dz@Z!5tJGNu*=&6&+JEZ(WMC z%RKoVV6trWWxUAJ;E$hZy3&)GS&q)6U*KX-9|xoCYq1-P<(|9?9n@rSL@AWbo8cy5 zwOgr#?{-Q;tVHnU;952bGh}x8_H54?aMZQC0(l1=ilv{s+7u;luZ`d0{EM09SLS8b z;YbjAt$&(+QRwPuBb!evAb0^8f~w#-~2WNgXQ5s*z~ri$3-m% zg?MlAU{j<^K?$U!B_m^`BBP{bjrkcC7WPg-;ng$zhQW6GnR#Vlrsk!H)dm7HmnYHl zqo<1pltWHJ&&-~>^vM9hO~}TB^o!j@oZcHi z#dW1p!p%No1_+l zEKiSDz<1Y_!fTT>epxC;C}$KU;kb4`BW)D0{%xc4TTVKvM0x;RV`^q*X1Zf)YHGG) zy0g7)X1cviu^SaNa)uY3zId}=`u$tury}*eXH>RJYu@+YeAG56Pz}USR~vrd$Be*; zoM@=tD~wXk2nMhPFKr%BV2l}7?dbvelAVVkB!F53*6hp9Qva4BVw&w3^asv+9*kdA z-sEC|*P^2suN-V+)gq1$G^qj~lAm|EMl2>Ul1^_c&H@O>!#A`Y$s4A)8W0qO_gH1J zR%LHU)n`Mn{G$aCD0o~P)4%FkWg}EvfdwL@2ZZZC>wvbmmU&q@wlgyPuAiz50U5wp zo~^2e!GoTDB9e@3vRVK=PnRV%+Tmdliksk9D3%cFFH=*!ZZcA0Vr8Cxo4N05ZK2gv($m5B=I&yc_lf5@brFcE(}V^GR#UyiTe!lC+>sQR zex@y#2}{&K{c=SOvFfM_GCn8CnKTA=W_>t$7#0_1Y#4jnX$EfihR@gu^L#?EBJc5x z=NItcPm`FvPZYgR_xNv4#|H$wS`y4i4`A>emrf;uoQB?r<83aN{rHYJu>GEuAqVA+ zd$xRbvvI7I8)(hrT$~G!iZwbWFV3}Ia#3Y#9(K9?hxdt3=;>*$YU6fp;kE2yL4H09 z+Ts3wWaO~pXwdNRhm23ybfnzL?*^Wd9?zWW&KxPupQG_V=i?AEWM&DAOd1@5j46*+ zFg9PsKHf2%LXUr`eu`A*o?PPo*sOZ~orkYFEtja?*L~{Z9ZnAyN}@mMv|R5{I2vkeAiHD0|4hvlQ0$@A$a z_&!2&rl3EX5pmI&nr3JcGIW6nayPP57D-880t0+~B^()kF(HQ7U&^4#%x*p5dv)rg z{RPyc84eDaszk;qN5;mFyveMQ^rpQzIFTW2De}~dkD2& zy~xq03ej8d^twSxT)4U-)y2XfAc--6P@lp1IeO2(1lfNS08U>I&Ghw+{rW(<8E^-D zD-GyO^X+cz80GA;GnJ(qS$bC@^@i5G&2`aoGXT*M6XFJ!SuLE+%unzxs19t^OC3*wff+#R#e4VmIS;333g95H$W{6#O5}i4YdGrl z!SiSG%Y3w#7+kpdtHi?IX8&C2A+jY=o9?mvcu;tW~3rn`Lh1V?3Cq;{aFS_!XG;usK41E zx0LcAO%EI|y3ZN+&{Ss(3d5a-o;Rt*9+g#JkTEiCPh(OG8oQg2{@!Fc`s)w5Ny-Qa z7n{BBA$h!n`bYMlF7QWM`C{>$vqvso_EOBi%_)Cul*y(IHNIS)7A5E=5ay0=Ra08# zk%GS%5^+6so@A`o#?*0jN)@bwy5{>gviB-syhKe^)lFrcynu zDX80c#pV{p(>9b_Jy)Vh^NUKw)JfM=E1X}i=#R`n!eDUF-WzfX{JXH4Ze2V}vg!Ws zZzYcya8allLQnSlU4fXY*mBYbP)oYscgCZYPL z5J!Avm=XIenU2JHFZ+dZb;f3DsYbduH8`0oVdCi;Q9uo#{NrAHu{on|YSxJ7B$`>s zS4_oYg2lbb$ssPjd|`$>E#>@l4zlYkCyEl{5nOd<1(IzN%tX zoH5sgm9WwN+I%oiN>_jNn1m~#Ga%ABRcl#ghDz&&K5dhK`dh*sy!f=2L%HY6hFhh# z99HmtV?bJMfL@dtukw@35Nc?=lZh1cuy%juLDE?`K?5BRcJQ`$ylV(Jta%&(W3x-$ zLP~HTZ0IZnL0frSdA*Lk!VIT`B<=4}@n3rEes4%`pU|IO#ou|q?~-%`4(u~tc_iHW z@cH`fJWBmuXS05MdB0nB<4CwI=8&e4<8kVO;>(_nU}#GJg)~{xgAc^4PAlW&Fa5tM>lSBf|2yZ<#wq zv{n^_8``wha~U=BS@we85W;$l!g@@Vb?e_O+FO=UwIi-2UjhmY14N9vMhYd=E4y?- zPG$Pnc43b)N!25jJfBpe6H?F)XE_z*6J+LCc*HojPs>~=dLG%gWr3Lyaekg&hVBGY zNc^uSdoL2K`#J<4O+-<@Uv?a@PVfB7=CT708v@R2LMQ^x5(4mJCo$g_V@D|BM1-TG zJ^jhG8ivuGFDrIp46JvX7@b6xSS`*-!Vl<>?tN~*?}O&o9Kp=ogXtv3;e>$Bd)%w; zv%W_@{AL|le-aGG1Xq z<>ZRxp6E^qRWQs@fxOlU-%B!F>?a{->NO;Qqg;owo1cqKNEMX+xmcr0u)^c74GCqD zLFss_Zb47O=#9DEd{*2NXvJm2e!{y!u*1*C9x|VOt>+@%{I_$-+;7^p)v%&NJ?T+J z>9FYIT9x<1vG>D-?u^G=xQ0bW$HjDIIi_piRDG)siXs6R#4yV$$z25z7Dcr@joH!# z!nVU1HZg-A5yh`h`h)riHFu9BHpN74zdrpo!iM~FE=!b|M$pz-Ufxz;@8)JM`=$r+ z-El~F5VP7zVu{u88qm>$sG~i6jVWB82_11QU+d_BC4nm-hrrtOIXyh4Jwp=Tw@3I% zrjrtywa4Evdpm9&$}pCNoN`d zPxl4tF559mi#YSQt?MK48;P?Gpw9<-O24P}1`~<+o@puWd&G@%CGeuI|3ZK!CS-v3 z(LX;p68^syK(21Ia4jdI6wEziP&LxoGj!<-Iyg>+d#pHjxc|L^kDP=r5+$v437km& zMrKbQi#iBr8C3~O+rM2cg?7$;4{q&P#w>R%8geX}bj{~7t5V8HeW_T#)5{*-F6+f0 z1{t2&FrgjCg(MTE+I9)G;u8$a@cBJpw{n5LL<5h9qv!M?Z1m)%R1qL|&k=%75 z_5z~uZZ1=wA~6A?U#U%Q{f7r-9^SzHrQvrn*IUFg>w>!nL%lEe+5C6LWN>!_uW`{6 z787o~-+x~8;RD!iKScI;U~ZiZ05)+rFaQqYfMDs~+7lyYEmufkqP^kN;PtOhIDD2H zlDoN8bjUf(?M)(Hs!te;eo})w8}Iw#H%^nE@%Y!eDKVrcA?2+Xeqh&m)K*7%N?+dg z*kpMqghsG)l8?ofaTncDP-ak92-wdbfvW|3mTc`de$F)skenh`^xo9glm-NtY^mHZySu^nP^PIT)Ty!aeA#5*E_IRSgn0&8r4>nDCl8`n*rs6|*P2AE9c>s)6sx zAij8sX!vb%If(!^mHWG{XLw$H^Lv=Yt6JbIXW*+dAeRU574SR9{&Lc_ zyT;^-%D0;N3}!t0xvc7itm}~W-Yr4qZ)i(3?js>5SrF?tK$=}kJ z*PC+lnfvn6Q=r5%JZD6f`gDDcZ=y8b-?3MyFl1u~u2-%IMRcU>yq z1RqI|0iP>^6r%@}rCnSk&HTxIU$&Ea1u_|8r!TwQK*(;^qhy$lPDZwr6=8D6T_U0s z`KR!4tfwK4vu`5WST|9x5rE=B061KTr|#%*yKcA+JmlvDYrIVQy_tdA%)u}9v|&{( z`EXcK(;H4{WrIxpmhkJKMzd(+#~TSd{;subtn&4S4&&UW!T_TvJEJ7CfT&~RvIm){ z`_E-Zju|^2itaz8ThmpIcWs{Z?VN7q z;N@1!`juT88HIKTVIBUbUie2d%%j_q@9tSju}9{MS{Q`GtC7^v|b%wmI9UeaUL;tUT@=W@{VB zh@_@YLk&njGTE7;=3fkSt3PB!#~xkX-B%Ft3S0K9Wn-LPBY2vRYcN$;uD^;9YcG>% zixF$L#?OioFNmsDB6AFn#M|cmTI(E)+!k``uREfR97g?`d5&(|D-~5zkBElGu8Md5 z-gUjppud=jiL;60=MxnbO?v#D^f#pXYmj;bATi$;tLpS7meMC#z zI31NvQh&<3{#dLfTVE?!oyR)5dqsV_?o{SQaJ)^kh*o?Wd_;I9!<6b(ektR(D|s?@ z>+yldmjh!OH-V|fz5_^VIYy)O*M{cj$<6#ae%Li4HQwNqTkoJBr z>zc7L zM{OkpOjl6q;R}$Y98PK#8dZ(8&V2W*o4>R1Lv~bo8Fb+LT&I#SRMN?8R=^`FvK60~ zgA{E*iu9fA^PUNU?Ia7AEvarT&peKKd|Ozl0|TaQgMJ41q#QV>JZiT2dzjoUuQrkw zu&HGH`jz{6Q?=(sDiYVceqT>IJCoLpv@NffU~_7o@6MgbrQW%AaDvBFA_nn9rY@BD z(p5>F1pSTN1HH>ROTH6MbwWeCDsXM_IaXnR?&;}cZnJz{#EZc>sn&ff+BX~~OsKc9 zH&p0%moq;_#AG9^ic@R-FUbDXR7XJ(XFZ~jr$f5?5yA5*$+v%rVtue9`fz-@>}w!f z9wavgT~c3LHkST+bV3~6iN(aQfuP6=jNm@Pg=96h-E8=+Pt(xp6{d**PT8dg*n#_#@GLAlnCD(e$ zGE|%~R3U+7NMN-)Q?)Y#=h24VYF7iP?h}l@>UuuCdco4LYNAuULi#JnsrF^lR3*>+ z4*_+pXoYv>@3VgX!ZhTSc!BQvbO4HJC_pkhp9IgW^&d?E^#c-Jv$j6sL&M*|iKz&5 z2yPBo$7q<)P6}YR`B`(GY&YhATTAG#uip&g`CNMJ$R?d6my63x68zI+$X25$f`XLF zug7STZ@d%{hwQyYPlo_~h`)P+?>QmV6P;qck1Tupj&ANR8iF=LU)M2gV+5_?#gepcn2{nA zF%$94*6qKZh&Sm18L2F%U)qn(F>)$NYL$2CgZzC`9-WfUuGoG+nzKp7oxSx4?sa4C z^kh)Vz=)4PV>n5QcYNwSaoT-?Hg^2Njq1FY+T059*Go9JUr)*YU~1+450w`BxU?Tv z8=A%7s!hV(M)2_P{(Mt-|1K;df}MS=V_gyeVlV}0)UgkDyt^2p zfu1BdD$pjF$ck=k0%f#)d_I4vOoSiK}$i* zTb)3;SSQ@QN2PzSK-1pjO44ueuGWF+mxS@&zVh}p&|`NmefI>HUZUJ(=^I-RZpkq) zG+?s|iX5`?fi*PUGT8ZtHUn!W-G46<2fZ0k1~&|lpa}>4om7>c&J5;V$JlXF>H7(A zk*hpog#tP;o+hf-g?go4yjacsw3t{WrIYQQuX8W2H59_OGe)%Mk<}n&3k5EwoY-`T=f5)6}iY&>3NwL+IW^^`O+t3RG%Tw%_>o^a!u>q@W?>NVvT?uXd zHE65TcK*7H)5N73X`F{NcREbT9QRR46`x3rII0(Or@Vr5A31P)04qFzHE!zSF!AP5 z7t^?tEVl>9LNk;7oxR!8B>z~rsfLEVrJt&08*9^QzQB>DHAj?Xk!i{|m%@I>+|M4R zB4#1qtUpC5Yq46ZlmD&bJ8w;|t*sr7tW6`~RU=smzXg=|eAw@Nd4ui~%HZ{>*?5s9 zx=T++^$z;nO8#4Ti-PNPU=CUP2s8EZs)(5cp7@0aMYrKU2@(d|@U9x+$Mbb*+1L`& zMHbY8X}X;27F#JJYBp1;-kDg}pkIZxNQ(ctoLG*YuvoIRt5;1a{FtgZ zVvg@6S1cyVYhaM~b>T1tt1QYos?N<)@CJo3*q)qn_r8Er9+aJ@#rm3@oMJnlg{9~2 zP_3m$`qpW@@2I_WTfKs9RiD~nQ3v`yJg^tB_f^#!zZ|zTHs9KiC)o>i&3Oy13&1@c5~s*tEZD;sGQ`IgK#xuAxtLi_cmZ9w zArI>cNzRFppmO`=#2yti98QX}5FhIit?B4Iyd@S&;#kIHnyJ=cpNe023mQONCk_@3 z-Ui%Vfa}#Mv(6jC4)9a-QyHjJXsDA*KO{m1IVrZeI0upZV`arZvsNmMnrA%_74%)5 z*8>Mt>~sXpsd^QaVijUjh1%)A&N;j8zN;Xwf5g-X!Ho2h{rpm{)I(?){Ov5yC-cWy zDF5td=@HCuXBKL@eWY`i=24}3m;*m~UiD8gK@3(QQPVtbP70SKve7QIH_vrcC&Y>( zOaC?+mm`kJ+zg(1B6dR_iAjO1%KyZK5SnCo*8YC2m)Y_CCP2}<7Q7#CtmZuXEpU(J zG_nOeeB9)*nb`maV3$Fh88z<#=;KF{c=sIuuHYOV%|nwlsbT-!fL`clD_Vg1iRB=p z(KhhRd2#L5X|~Q=>zL{BRLvq|)TV$_!q!65Q%BcSUo~?&v-p#0;7^9)kBKRk#kQQY zVBM4ld6)GggSj=u%$n-gVk_w@y2Tqg;BG#>hV}BL#FTbn>5C5;w>nzLE&j1b)TPEd z>$Gxy-dURXv;!pN5wSLns#ccl6Tx({#-GF2b0g7<`=!!P2MI0J*_d#w2BpI;1KD<; zj^J}*Km+62Ktw%?P1q^4F~STw4s<(BXXwm>#Le={eqhbpG>dXgrRc)Y zMRTuCLN!<4hr1DynF31I zr<;h670n;O)8?w8x~cx9B6dcG%Xy~qKcbw(bHC5dAN-_qi=rpufZ#VJ%v%L48m%=~ z?AoLtKIC{OXmts&`+-F5RGRDR+A*Q_>=pR~1LK)5V_p>Vb6bQcHAqWexwav6$`G1G zX9`Vi%emTYL+m3v$vZnN0|Prd1t33OY1LZ*2J^W=r)7+w9D-N~!A0L&@gnO0E$Y%% za&L>aw_Su0UPz>M?IcwM@tWK>hU(;gg%4jT0fAqya{C3QNl3@OVPC58$0+K9@fVA6 z@5@Xouk9Eda4@?45)H8#PG}Br&bVE@`lm4#j}^|4%4)6spa*<_EazKgF1#O$s#l{x`i0Ak> z)ejA9IVoOmJxD*HLVyx555>S+@%29*_0y^}J=A9=ksEngi0kAK0}=u4Z^EM4uO-aT`!1w6-} zqV_z$EccOLsTkyd$?v45QIshKeu%>=X#jyWB3PUM~JvDQCwSiT05@OEvFN)J>?Diuiy*k#GX)`-5_%A zw3b~6>@vt4odQIB6AcZB%=FZrYD;gx>#PV_5o>m=tCRR~p`+_cn*RwU9=^1^HqyEN zX2J;z`HV}N!4AX0;YeM}+oHd@KXzh?Q=|S974m9m6vf$~S`%3Yoo>;lWGEY5)63m3 z|0tE7cAhUfQ^#K8&~arFf{@GDlZ(3R;CyJ&`lhJNeILUWG3I=oX4&+NmgJd*Tt<%! z%)NTn+}|kKschY`eaN?YxwA?pty*f6WUqld7HkuyZ>V0-LsSY$>wzD9L07j!@Q8_1a#X>VX3Bwik+nlc->>4; z?6f;mzxg$-Vwm1JlaL;hAWYI`^s1{%RLYhfFQe0$0;1wWA}%Gk$Kp&NFO0PK0xRJz z)DX@-+t%T>z)dJn<7R-<8T z?H@}hs9qw2T-Fjt zR+6kZi?!@FI!yX^OfA<5UJt|vR|9W>D=tQMjS}DaH@?3GmkBbJzk%1hk%cU(|MJh{ zzu4n6d+Pp4eN?5E<-B3XbKc!5!3U?gdPA|my?lu9oI_vs@466z8~TY-YeSB)J^kmuP<5Yl0_9iG@PFo?+tp#&kv_7Tw8O;#R( z_|ec6u=Id%TB-2i%~|#JydG_;fbklMcp)y6%oO$Xu8$YH%?9u}ckMnn$pPoq`}XR8 zp&{dq7vd?hJkSq_C!NVrfF&_^pz~RL{IX~gMRk0j=DFuFTR% zdwP&u3&Iv+<&a~ScID>%*0Tz z5c4In4?jpwGsgBBR^qu429P*F4mzL7DXSB{#UjfA)&&rTx&P)94~2(XJ!jwCF!?jT zh45Q@+Vc9kvV)|)Hk4>TJ4Jf5RD(L44`y5bsd~khy&X3uQ`fRuYz-Dx^?Tau+Ka0@ zD?3X|U$F}dk7Zi$>0PlU_nH5(vMfI0pXTRxr4?JlCr5gOOgo0#N>rSMjE_216VNBD zzFQ&*%hvVE?T`VU#7s%9fG9fL-?l`E181kmb{S1BB~ETR6se1_9-pBmo2|a8*}ml@ zrnJ`nTX^!SCA*SezjCrux1>j}CZKcqv~lUiR%I`S?V$jBZEE#p@1v4gxY^fuAk=2B zd(F7rAjQ2-$F2L#twlqb!`G4C>gk}hK@9FNRf#Q)!$l+h+Ll^7y~$*vRK1BkCT%^{ z1>Nfu+Upd0;#u=!j!}uP$$lk#M{9eX@pf$_hq1@>7Z@N9NW|w02(ANNy9rDZ5AAO% z$LVKjj#@wWbW$uXj!k0wvMs)Qo*PAMcce!b+$Lc9@$gaE6n0#(Vc6z*m^Bj-&$QMN zaDud3S+HB|EVe!_AJP)k5-chz3d6$kYHQPWp?YEchK^srO$?-+mXnj3S*|=+SX|zu z>!zE@#;sK}|4OU;rC_L-Qi$28d7K!n5htZ?id=w%7F?ZTgN!tXXLHv^I&`QT zM3W$Hd%N2uJvjtF@d=nRFdx^1Uhs#;bZhDFkoU7Iy8 zER*M4auV}+=(1! zvy$bY9fg{Tzmav68@V8AT=Frzc9ZgXLQZADJit<|{?|y4g#ZzcgO%isY$@km$FcRU zm1et@R)6`K!#TGmx0I9=*1@88URYk=M89cQ&~9RWEG{mwnQ5Y{dSCPr4VUZ-5$a3D z7OQF0E1OvkI)GN$XAVjmt$Z<7StT?AH)mgGb$w^kPB9L{lxJx_X|gIKl|CkN?A9xY zR+?!%<1cz)8Md)B1QRGcm9Lx@->AzVbU)lYHi$h_?^$QuoXLtezQ7h_T!dR%c891r zM{c0eEuZF0a5USk{`N1M_E|iz9P;&$K^&zn_j$m5HXAXDgiFoJst z@H8Mef4%at-6M7BdagbGtw{XrWn*gRTGF*+*I(7-Gv|;k+p06q6fd=mE#s6e8PH#I z`S}KJtZo7NF82A(6)pdssmtxrB=!XR)i(dF`>_(epY-D5;-O?OMRhv$$kFcQM|SDTWu9ph-8CSqD~pEa>|%Q{EVu&q?-zQYiyB z?_*L);mcmFlwY}@qBXv}WFJJ29#!b&m-@z-{4$M|!<-{3(A2hGf+|l1@V(%yTSAv7 zA=o2D>C~5y3*duKi)!U03&`RZwSNbY1kT)kwhMq*3F2OKFmH>UGXma!Uy)ye+7k;5 zXZ$S4JIdYP1+{l*z~^hDdAiKc*F|?9WE4%sBEpVKsB+hYPy5%ME(Tk~bL=?mxF;74 z3&piE&g82Q>xbi3DtE#Y;n!L9IJw3S6Fmks0d@1|l_Rrt1-)LTplg&pY-^}_qAek_ z(qZ1xt+L_qbIx7i2)^a9mq2>QXt$r60XL;X3#G)`FSn*X$2!gnxu!?+rbpv26OXbj znWnRU*Wj3PyMEW1Gk@5fnomvdJUI{3sZ1sGvwZ*ly{hGvIfL}K3tCzF7Z~hDIpv}R;SEj$5X&w3SsG{o13q4!$ z{&{lma_Fx@5l`|c0usPYNJixV03ZNKL_t(V zp$1+8JCo(~uOG)E2^kqfM2uC)V-@ky^0?^41erWODj_~v5f2MlVnU1}K1Plr98C|$ zzyrWn;AINHjQqw_P$$M}lH*CkdvDCD#e#~ODC&iDY$ za4?u8(3+pBa|vO0NlC!;03{&=c((2wf$(&Wc;AotK8*Rg#{AvmgWVH>p2s#jP?22orT&H<*Aoz((X5A zzFKeY+*#PUz2s4Y;YfDM7Nfe^oZ6U~yveHGm#5p2ow27dvn5x%Cok=2QTmNK!>jdK z?b{1pY$=2m|5{!4m1^_16`9|ZqyzB#^R@f(wZ}^{4wvcolp0zq&8=1DBW0O*v}8N1R?uT9Alj(m z@hAgIxmqa)nrbyEsTx&As#=$>&d_NM8RF)Nxv|IAkEd{E>McT{NX;0P|-fqf& z)|B0id$xLWmU2T*>Y~h)^fbc&{C#9P;NR$DAH7}QYpY%r-HTCB&TYWP#M6TX;W3{x-@_b5C!fT z4SFN^bfYl?`z^QwCeM_q*Fy)Eo~}zxO9#sic0j3A0isFCNgU9G*o63)*x0DJ*r?c; z$herugqR3-#m<%d0Jy zS6eSOS}!-{{;;m_a-A7TUzm2hTz|aUe7q*>+^XzjRmOc4##X}q!G`>oTl3#+D|oQ6 zC_P240IowdRVHGnlT)?IR5WXv^i)k+x;8yM6>I<)Iv`@YHWmJ;)nLulNh$D?_&-Hr zVq#LVJTXx&m&eEBM?T}@07zL}OmtjKR6Isxyev{Ki%`TyB*lg&$Av57B2)>HN_nJK z9+jFHtxJjqIQ7ZVh7<~Av{@BxQAS&pGOIGmLSagYvZO?slOv4D5$5D@b5gh|Da@1{ zZcM^8+_5ObEvg8MCTa!XIyKlcJqQX6?ChTKeHaHqJKMdsx6YoI{T+|rzq#}J>9t4q zzPtIunadZBojrBn@WCB>c5T?SY1OLLl@*mmg~d=`K!ws%(^SbyMS>zOCQcSj-*puh z5rz@Ia%I@pVc}s>Q4zAJ$mrEBy;vB9cHNJvadN=`{pr6`eyK*nSM73e4@ zb&ZRQ#V>1vG?qn2#zI7e$3}%g#79TSW#NjLu*8_KWWX{m64~ z_Z-@{Wyf~V+j=BuSwUXD#bPyNWI}71oS2jl2RX^Ux(vUTCM-N0k1vLYtqcqMIwB%0 zGBPYWDqJRufQUgYijIrJGJ_Ex9ghncED{o;q4I&#NrC{g115-^4x&pn39BQvDA=wj z2z81mc}zsSEL;{HmY1$rpR3xKodUwXGh4Z@Ky#wna-b};rBHLUEd5Mb#;M}eqxsr1 zWybT>ITxF%zNs(YQ<&A9sachpT&GqvY7*9`C#*N7w3g_??pX4nh`|5EBM)CdPy($A)X- zBGf3hk*NxZs5C{S4ynn3BrIhBC*WsEK~kENqs&Q&r6DQ8kQA;@4l^W%n-T%bFiTRH zIVH@L5@AtBTGUY%tt=-kt{@|!*q|u4Dyy?K^#$qmC5F`%mJPKzTN(>@t*vO;SbG4l zY-v8dZ}a)XJHI=z_ww0;*DoBqefjkLtLGlwxcKDG<)`<4c=h1=>qocVJiYzy+1-w3 z_uF6GZ-4n| z-m>oW{;g+^?7noe^?Snd)|FHDuAX~%{ z)L8eH8Va=viz2qclzwby^Rt`Z_P)42VtX~(_2BQnjC>qw`)Q(Y(*3sY!Nq46j~&{y zc1wYAwME-#(X^BrF09HqRb|~*W;#)ub-AhF;+nj}m8KmJkbJfMrTqwz@Jut-e^ly4%xh>SH3xL_1j}NzdLpJ`?L42Uwm-$yT^B~JiB-G*@NpZAKrZR=+^5e zciuoez1Q~S-kWE4-#kNT-$FdQ`}XN=SiI(O`|Xq4Z=S&Ox5fJQtEac$VBEo=`>*K^ z{NS5s6!aSa`?hCyS0t0_Lhpg{i_<=Q37VWpKqlb`Fb=xaL>vb~KN<^K4YZcWf=Wll zA?i^OfFDK-+>~L&Vl9`+B4aS3qVX%SBI)bUa6xX4eWMZk2Go@lU<<;+!f+809v*=; zWhF#(#7bHCSF(t&Vk5tbi}cPaJsrE)Ta>=LM8DdamYEorCXe6O-0=9~ z@s4|!`yO9%x7`|e@}2k1oz4pf-yYolYFqP-s>0(r`c{kbWThTZZ?b9+lo+ox<{c_C zfwMc)kbSu+?{q^J{K9R8x&!5g6Ak%Ic{+nKve1xJm#=H8%G$cRxMh9S{%xy{>{@qn z-==R4@A&q33t)Nu+>x7?PTu&G`=KEdmo$8d$; zcH=bwPrnluZy(=!`{X8MK-&|_0|7Zp7YG2Ju8jS6+n(QDK_ft%Ey(5ESh4CGM~y^0 zt>rj~z)lhP3jB^iEW;uq!=TdBmm7vtTbv*dkXsseDojMcnv3lrCQm{EODVdLr%1VjKR^g(?sMubtYtB+{$q6cL;mx@g%i!#nv z8_!f34_BDh=jx7DSkKgE?<&gJTVgm>lLaMzf4N~(e%kh;jD6*%L$%gz#aXA;HXh#C zaQ4uSyWf5D?AGO%_pU+hd`SoaY%e)-H(pTi#l!1>`pXA+eg5#;iwD>E`oT4b7yLd3 zKKW4m>_ZCa_uwzT@d^X~me&IQHy8-{Yl8d@M;!tofBO{f5ZHh;z)W<1%Yrl?u5Vso zynAtHMRYWHs0eW2k=Rh7Cuaf9d?i+W3i{ST#E+0htixAEgnu1Hyo`wsi;WHkI1^$c z3fTe zhe}Nc%S>DI@mK9B&D;-Ouhg(AGxhbRtuI?zj<&47c)In@l{1fSUVM7zdyweo_pd#} zxC+(!Yi^ zq!(aJTnE(OKIV|WL6#HtPj9t7fdIzeVMK3ZK@OzhwJZwZjE@cnca2!a12v;m2~p5urYoY;6J@$&nLb5k1YWX1fm)WMj>*x) zLjAL9qI2+NG_@R2St{^25f&Co3~ECot*S_DNVG9I>9Khk35EK^5_3wWRb7#nT2q|4 zy2QAyGHXM9{^r#sn^%`^YA9^3v{vP&7G}zGv@+;tYK@A`d1;Nt}&+h@=*BSOND4solK%`&5eF^UeSMgn-KCv7DM&My_{naD309B_z znAzec#G6Nq;x`4wZ@zwt{B9$PzkY_0zh%PyJIofFOvH80A;!JsoDXBb5S(&S?E6ivtGp?=7T3=VNWlhPR zb=9p~8V>DTbE0L#>4RI(AKisk_ROJc7tsFP`ToqkYv&)_y!hz$<;Qove{}cC!<(0G zTsnF7(6*gTrFD6!1-f`(f38NhDoa&wPHr%z>?$#CD%5YuOW#wNzPBKCXP$Onf$ms| z=}3k3SXJ(!%KQU01qZ8g4wjj}sm?l6VL4W6JW!I^TB<)>W!YV9Xf$cpTGO`WXYMLA zY|YJBpOv~TFMW4G#^!8Il{)5Lb6w!b;m(@XPttR)l~)|!vHH?C`|ka4_Q{>^0QHv$ zIp;bj_d~)MRUO3u)-Q?WuO2YqufKVCq>|qVj@!}q04}j$Xx|--LHE=O9 zTLTfDt&O&(%Cb^rdAivA%=jXMyu_GPVNq6RX=?LR8;bPMmaMJI+0szBy{UZnhU)!W z8;E6}H_pd&>|HIR}KRf~WZ+>^{^677n?`hp!(^#S})+-|@wJwe z5?umF^!8HYnk>zRZ1whB%?`L`Yq#X4uFXnYo0GYt$g;cC+EQvhQf5A1Z9QFS+EWB9 zPv2XrZz|DTNad}=hy);;s%%%?l^;YReC+kLt_eUcb3IVB%A1^08uVIld+FKq5dbdj}%t@k6nrKe09_p-`9_?P98AJ)c zfE|w;Id1A>grSLEZb4JtIDsD{hsOz20Pm$o@XHgAyeCk-f{;U)6R@$xCv8N5Esn2q zQ-lzH)X1motAxt|_Ou<7wh=DJHN-onj=hekBk(SeW$sCan3g4njO7;U1f_aeMXtK8 zNY`AR*;bR+RbSlGT-M)KHPlsS>}fLfwT%yUP7lAwmlK3@d1`ohdc-_yG|w5)rE_l7 z44Q}4v;vwPU70a0&l;C!O<-cU$$%E;kedN2(zJ1DW&}Tuz{iLJ?avY#f!`c{5RA}$ zZI$&!noJp0%6KItJ%gUYi~qZt_C`*9Bc;5_7f=cWluTA^5hu2a9|xEIGHyZzpHe4d z8Z?|H6}L&w>Qu4bYuN2dW|fFiDWTTOXwWrM8F4Ahge)GVP(aD&lJhvELUuwKFCmrs z2DFi?IW8zZsjS-0DfXvjd6j7!9QmwXKRx;Z{%k1B7YW{D>nOd)A{LKi`}h_hU%-s< zBY@w+?7`^PWg_7r*e4#xH&g(7aJ+5h(dgLITmLdT!i>xfw|V4sOx--~G*3J5l^s?) zvNhD`LhoFgCXhQU(>4q0@!)kj{hdER4;#mLE#NhJe@XGWEATiIFR%cAG zg82X>vLKQXu|yOxvuWev3?%dL()0+5XwVeY!%I_{eUYHmF@B{5NhLW^AHA};JE1^CYB|H;Wq$E~TJ{>5V`B-u0;NNp?$GCNcC?yj zhAs2sn~3z-2GP7h3;(LE81@FvbMSY><;duO85Pjlw@^o)*jR}mk6hBs6ZS{&*8k#f z8~RFa$`1H}G}LQo6JR^>_cr!*sHdE()2_8?K#n{5j1$2IuY=2p$62QZ+1+iK^I$z$ z01{IO7}gLXH#r1{0P4j@J-!-Tngo_ZprvVo?hxE%iC?}vHM0E37#AbxeBi@@d81Qh zo+fnlr6JgrEYm2h)%BkM^~6H58U)3RC&9GTI9<`Kg%nR783vP5?cX zQ(np_uZ0P(G_u%!#DO&SKqk+WC!Q#jkLHScv`Ka1gc=d4UBjxC z(sS7)H9ZDQpUr_;j|_KxJy2)9OJzh$NUzG7(XO1#v$CqwqOxF0##Ri?PhxrFS(bRV zOOvtR*yI@QwV0@e3D3b z8)k1^odEET$7~04JIpxGk)|ALNKgY~C-4Syqa>dps5=qkX@`X%J>#^@5=Ms|g1Xx> z>)x1mZOnN#fc?}EXmN4~Ix7rTi$pzzp-v8CjVwhB4ahO+X?#SGj}h7x5DtG7-O$uA zcw*m-c@tj8;77pOtBntUw8*GkDanm$R;!jZoGTkCPz>q? z9dNBz(yC;P>}0Z<60M-eYT1c8Hbuuu$YjRr=+P;RXa)IAF(-ON!TQ|O{ryw#*N;7+ ztRe@6=clmUB$g$P;TEd)OUixCO&g=1;Nk@HHn?_UWdb*8XxQWU5m_05T#4j4WIK3$ z1HqoK5d%DaYs2jvv!8UVOxh9qDJzb5C&G_l+g2y-$kS6U+|eCqMFP_9wMldoR;S!+ zQ$XE8oB#`)fN7NK79=-puFnE;57d?!4`^e~xiRnFoO`m2cn@M*V`ondE>GhEn|lQv z0vzd62r$Tu=nf&+$jTTnfgd!BEWR>BWH?|RUWFQU5a2xmXjdbX0n!=)9v%^FG%Kvl zjY6@8cF-njG}FWLqrIk{#`Y?Gi8eW%{Z>hPuAn?qke^8?&t#Nma`IC};&U1Kl_=qr zD)ChoGrEu$S0g61D(D?4+-e1@O2LF7zeOi(*YX&q|P!--;>Gaz?y{MOHE5 z(^;exMy!nTR+R9jnjhaKCOLBTzZ-{t8i#(43?3C%1vUCTnRZ91^(b|r(z5-6GN)QU zOXY1Amu(LBZ%!FEri`1@#?8s$&B-C#jL|w{vcft!Y@0R#a=3IsuidiD+AMSE3l=lM zo0#JeZ~Mx)ePzOCp0p!PV7udXzJ}U4ayc^hvjqx!1D9}LXOiL(VfD`0r2!7Vd51cx3QaK4evH75AYX%Z9%&8Tlt89+*u<-4*0>G{ zF)=VZ*zu{g+>ocrm5^1;SBk`Eip0Om692A5dMbyS@4M8rjzIcPy)f^(W8? zFca+@`50w8vN)tVTJgjVgBy^Z#q(N3&PV~l4y32S;+}Qz_guvBmN_rt4Mr!Z6PouS z&4Hfa7zZB%>7nHrtZDoRCt!NejA5@t=pxwQW^-gf8^M@IRwLBG*+{?`6~y?4*pFa~ z6K=+uM=MZY$LtYl410avi0{hyC`3*GoSWgfu^!XMhR&+2Vl7+8d8?p5m(!kVsLzzt zXL8yzIrXW6`b3`RF`EH_vLk0MU_Wc`6tC?XVtaa898okhA%sRyP$Z#t}awt z>(uJk5_zk!3~L<2631FkU~h=kp6V)Jcc*K(&o*a5V;aaj;l$aF`#MT^+{>rjt4OZ3 zN4u{BV2JlAH{uP!K8=uD@CiU(pY~a1d??sa!g~mp!wJ}!^=-^}H|IQ?^WM#Q|K{BG z=By7g9|brzG-5wJxI8t-Dh_`WlZrCz6Lcq4bBVb-Y)Gg>s5~Br9z=9E7pU@X%c%3&bPxVg?w)Qm_*XBra zL~$DC3l;6TlJ-nNe}piPW-N8{9rZ9JJ*+P{DX(y9GqzqP?y{xf^xXaY;^XR?ljfG~(sF-Z@m^`EH@|o% zy8uSTaA`#_ugI^-uqKPwsT@0<=S~)Hu|#$e3=JhmhWdb^(caqZoEmmm=N#)(cvhdm z{d>~22FOt($FO05pY}P; z)>)r*){Ba{C*~O<$%zafLTG1(*QSYX4UC5gz-w5mk?01}sD@$<*?M>lvtK3XBJkL_ z$l?e&tZPur`p03ZNKL_t)61dpb*MHmK$=1uQM z-q*I4rxj}$>D;K4q!$|cQx*N0g7Hj4f0jajs--?pdin3nsK0aH!3lW7k9*0FeVH8d zk{$Dsp8&|Cl{92@IVBq2CP%+uL_g=nzscp1-fP*$H10rJ@<$D0JWIGKQwQZ~4=pWM z6_pporB=RdDK^o;x|zr|lUY`&+NMsk$~1>{bvONe zyHz!Aj_ic1JmG2FEb(z^`Ei}WmtSa261sSDPfA)ymlaT@+107XhPvy%?xW^LXLg~p zxf!^+t@8lewL0ls!{%O__N+~Lp_k)q_aN{yUJTo7nenbod!e;&%(ym)9qe`F@;Nt( zbT|Rn=s>--b*^pKet%20+!A{}`hh|Y|xW8Xu1TcAdyhw-E~f{@P* zt<4Xj6`Pyzw*_e!=&mk|tRk*pXo5HPHxcX$XlDcA$7#PXiq64;$pQshO#prq32LJS z4#fP(%4FZvKxS zFGR7g0kbe6N=AAkPk1Yif6aOKf*JLU_U0Ko_EkEY)S+e?Gq{849Ai3nRL`Hu;dm7GLCQ|QhsD!&i*9#z-6Rp}0S>SaUoK}C&UogR{; z?90+l^@X254eZy{ZPA1wn)s9U61i)1 zZm786q`oFpR&GraxwPr-f%opMS@+gF;dsv)GCJzzIMTt~sDH2HNMD}=@ZQa7Y5_ZJ8Nb!}!;6^Ik(C5A26f+nz(nk!I1` zwMS>80(^{VpF=qU==prCDZY+#h=i!z- zy0J(IPJqd>GzRQ9;J2C?m@{>cbX9khq?Bmrnfy1YtQTp_7rLb9sY%aEl41ur(i#?D z{O*+~?m6wnpJ~tko%QnXoHtL|QO~*2FF4UJlA>O)-n|l%-ez&g^)lvrHS3d(HI~Vn z%n{Aziq?uH?z*&{oPr&Z_Dg5yug2l8{k;bj6)SYMox-$}nHEygNlD4)5AScfy4>2# zy~^rvS&fq=J>jS?gsB0h;vggU!q9Y{RdzrYohK=RWPyvqIV>rGFxVESZYOZgnX+4^ zB19JK^Ht%r+#s3fdza*(bB_xP&nhan)AXBfsk;=mSD)>e7;xJbp`&B=GkA^zO@Y_l z8~Boj{f%$xDBJx+!fyig89#;%Mu)zRU|VMpY`lqi&w00i{rvXU!Zu=$7!Rz?4uQot zpwrI|g1Ie_@URa?2at0ks4>qG4ckOOUBhl(i#U4(ZO$1t5%rNjjBddJ4tBR7i=zVp zI5+42Ft-VR4{F*3x{F5Oy}3AQMeG5&5wVZFf={AxVQK8cXit4lO-6M(J4f_R#|HK< z;RIx|-qgK)_lYBJma0T=UTP_?6mieRG0#Nro~hzrX3(OuSfo@YDV0Iam2dSi+5YmWc#~BX9D9g zJMSpB@T9iZug~8vF5Q!*@5XUX>C#}LAfQY+t8Vz*)N!cD3Q`1n6v0L`-7Qs}w={k2 z9oXfi?lYz5NwU2}p);0sUQlw=-gS|dd(4tKV;C-x^t80}yt2|GQU>B#rzEbI#`Co_ zc($Mg%;KBdv}EW)VScon@EJSQMMz@KpolL4_>#<2ds0j z`nKl5^l%QISZ2Z21MBmH7BDXA+>qhe>$7+$1DvyH1he4Iy^cEf@cP2YW7|fgH*m1y zV#Kn50w0`>t&Bq(wQZ=4#12LdP>q0jlPJ(SYDMf#)`-wKAU27&@S~R|d&m15dkuMY z*@Ap&TsrraF8M_&`$ai9y5}urNT{e~3S`e-WKdqEQ{QMvuapTdmGLjMQY z2`{lim{=>KwkhcSTGnJHXSqOVtyFmGHST)#MzO}4EVM?ET~t;$Lmx;@^`)dt$5K|` zlAQ4jYkZQQExgVxxX8&1re%4=nlH7@VO~mz!u2L32Q#v+TiUK0TQ3c*E|$!f$n(<# z&ScR^W##V^<2N;}XNsIVb)8+ZaEf^&ywf z`L}@gEUZ3MBkFJhKu{z0o3jwq!vGc5jX6}qIoOy(ERo&uq-Kf87;!K<4S;iab0HGr zmcH*vDgt>k=S0Zeh&UC4#-l3LjfGZ7hv#E{$z1 z;r*pCD=y%Nnx|pfZ~4?x*px3WQYPs6uhZDi^H^`XW67VWoH3!gnaVDSA!k!w6(&XH z(q8A#qq1pHS@fs^R%|7YRLvvT2+3`-#32oHE|a%fC~{WIymcx7Z>v<=HJYtxsx_Jt zlFN^a3c_W@eqFkq#XFR0j^t^(vee7+^6R?Vbz=o_I!LLR(=Z807B`^cp1@vfH0XPzkKZbIXiWbSsY4M94E>4DS{wR8P@0C^!J=~bp$i=PPF<9UH+NA@b{1X*L8-F z>66bk@3&0*BSt5Dk80TQVY}mYj=@_anU6@LgrCDXj~$PxL*T=@vo#;EEj&R)5nWh8 zLmLZ2Py=90+Gw38=o*1NkOp(3a{%m7hej(L0wiQ>u=0o%?U;x#C-NM25NrUC03*zV zfU#}K2(m7t8vG5bebGehV7rfQK|yHIXqg?DAMG-|uj#5vtxjX)iK2@6(Gv{ra+1(m zUOAbOQx%m^6-7>a^SXu^)hUi^7sa;oW7>GJt^C-2C3RNMS})+aD#V^DiN9XvYf$(M zDmVe#hP1=7va%Pk$$$C_^RG{1{_W2(fBL_euimK0RAo#;@?V|`{`#yYmV8m)_#b_} zKR$g7==0Yp+!JZqm(+q|W!7y?!*8QwKL&^H-}ku$s$G`EMqzL3(jQve&x@)9Ead@R ze8$mSN;8h-`d`{Qe~gU&Fd4rM8iVrm2RIEf{Vq>!BXRACyo1ux!-{IRGA+OqA8?fi zEXDWQmM;~Jr$rSz;{!h10{Y%&6Wl-T#REJNa{R0ZH}&m^BH*{Tkk<+Dfh{QJF@6L- z@Gth@V+4B$cw3RDhplt)i1Hj9zlk(#MX(8HgN%fs5ovq~P>mk37K~fCM);Th=-)_N zkI1(Wa%|{jMAwEeqin}Jk>6wzkQcadf6e2{Uj$3smS9g)P?k<^<1{CT;QsbxGF@R3Zc7N;;EMh zn$*5})zycF#mwxS|Nif$Wa*+V-w;Ea(q{Ray2E|O-G}KR`#4v2{=vyq_O}*iBbH`a){(hqPm?}O> z6u|(v%alH}bYFM&{4kj=D;iH!S>H3uZgfRHuKFNZzC#xrWaXYWH~X{l+zIS`GIxg} zyvZ&7*3@y7SLRWr`B%qK^G05uCQOe8dxRg!|1TlrzAeB%1B?mBL%i=`>f0#l=YaaI zZE*+KW8?rHIev3tcx!$HgrFj!JV&H4cOY-PgDQogl>XD{X3 ztE66F->lv>WP}ZkWpCp8-%%$x%3(5hma7c6e%$ZqJM8Lr7St^yNqqcN8&g&EB3kt_ zYF(-Ga}|3W*$G{GKoi3uxG1kVuW7ibHF(%EXKd2uJ8B>;^RA`itfDq3P#@DI7c|)g zLlPqM&eL+QTe>bA+pa1N0jl^?n)WrV0I_FCZ&msWZT5aj*6oMR(~efZTz8Zt2{Gko z8vTEcja}EYcw)G|ic-IO(T5xSHoB}scb_409^v1b!zTdwdmC9CirMWg8~_M5uwOuS zw}IUO{{nyyI2N8js&Ar^4K!p$79Ym2hmp${@d;QQwi1)t(g;AcVf+|y1hX~rDiY?% z?g+UNuY}i8>~CVyR>IKB|8hU3i+2c@!@4pGvM&=d*;dAEE2sr*&JCHzyC-_$Xm+dsGA@D<`1)U^T+l#odxa5I1l!>?WIhxR2P-V-h*ea+VVaY$eO&pF&ta%pG zCy?86%8h*GY&0dn5MI)xK@u+{O}TGqxi&O~3rg4DF>EpPEe7|twe6Q-V<@N8mnb}? z%T8$GLz?)2A$h26ylQNF=Xxk12vHw&q%2bXnDWBu@XDRT`A0UDVdx4t(4z zEC~zLmoQ9Z6#s{5^v9>+usZiprVA_?VOaA$X#eswU~s-@$$zV(PMy=F)+Xp&HD@?CA?kBQlntcoAHqH}r1fi~l=w>xZT*cB=- z6}t1Z{BI4d|2a2*QDL}N<{Y#%ZaWw8BtL_AgRQMI+t!%?((E?A&IO1zkDB`24hR{2 zAz%mabBH%)ziVIIu`gowixIDHLEtY8ZQ+nd*l^oMmL(>*2upyC-H*A#>WBaax+8$! zhED@>^AdVXGPlLHCyCf2Q$F#zwtkB()ip&b~_Q@!Ta z`VJ~r^56elof zEEBuR@vPUR4AiJ5Vret7)Fow>@fBq=p6iI`FGVw#*ov*(3V%W6vNXNxZ*SlK{q1a$ z;IOK3zoKcsrgce@Hvc9uK<4?VLQk^zy0Ph|z2mH@#m!fR`HF3}^s2t@pHtHh1A{?j z`h8mAXGP8tTeZhk-Z!>hG`63$b_BIKArk+NrMjcbuXWj9hK#?AOx|_$owC*EEQKq9 z9WE)^Z>o38)M1YF0<5nu`KNL0rmpQat@vDD6j+odssV;#V2?=gCqy=fFJestwqcpt;0m5;{tYuZKyyioB$g^ddc)S zs2lO<4v$8#wH+S_+p-boJle70kJ*<0AdRdHC%|SN+cM*jC+xmrbf9(AfgXu-U~;XF zIoBuQ+*pS`ZW`)0%c@IW#ijn~udILj)1q4IOytj!n4?tIKs?RxE>=Z)rAv5TO?z!p zkeBr=YcUU~dn%;P3X!v1;I5H)8f8mt`T|Slt!Y`5rp-mstqDAPJb&^neMY2l7gV}S zs{0dIGw-O*WZ7v^&3&Kos(awH^}SV=w#k$P_?nO;?X;leez5=HQ{Q2EtsgGsJe501 za@An?*3)~@)Dn{GzUj-pXbTQF>YJ*%-^Rv24-DV+^alCbL#pV4E;*x1Pl_wQ^bh@W za`yh?@V+?XK3Nka^AFT%=PixibiFN>evl;Ep$TsaDsF08ZuF&Bs_a02`;KdIXA?6< z0*lXL&0+Rf?Uq+tB*Ru%wt!4BIoqz~?7~Lbyo9OO#Y+~EL+>b~* z(4)y7arvkd?>Nk(Zp$Pz8q3G__3E09f>LKu`EpKi-k)D6|MZs%Iwkq9e<^RjY&ya%}KVE@FDPBl_D7O-Blt-jd)eh+n@?o#itFTY-qhu zWPQ;U-YN8_Y}LLz)kw>CQP$F?wU^lIe~%qZdQ z%Y>()bDI!RWN6cW5hCqeHaQ*-fpdAxxngo##=-7u{arH|`bD99B{O?2zrZBd4l)F~ z|M4{E^{X+tQu>#t|LuSO-(LJ5|7Y{dcTSPQt;<Mx#rA*U|Wwnw|t8w_i(kVWWkm;^Q5zLr?T23P+hBYZc_5X(zN@= zw)?*RyPlri%)&sj^n|b8VJo%;>f46q^Tw9F(kcsy9UyajBu-GM`T^5ieY2IP2qlTX zrWBrWQcp7qevTP`9UK2TVm!$%zgA`cqA&ZITX~aG>uEcqo{{abVAZ9#RIA$L;+J7c|juH_xV@o)}+G$EYxySDi~ z8!qhgdsx`($ml`f?O51#E(D#Z4gz}=!{2YA+{NZWQ0n9EFWF#Dn-x^Ub$L#G9_6RdVZXR`*Bh;NMgx$wntK;s?sm-YYb9vcX zM$R%vYNm45vT_D!?7?@`);A>0U;f@J5DoL>6;Gp6{{AxQ#cRgD|8<=!4c8mIg+=QU zrIAJ(k&#z(SX+fWTQPU5h-)k7t!D8zv|0;CI>wiWIzJwN9I@w=Z?fc8rgV|U+bJtQ zZfo1iE#2p+uEc4_B3*#3IIFHdsWTka8f?ijUwraDiRXUD*pq24YwFKx>wVfRS1jug zZU^zK!<5V)&7D`(^&1R+n8ZJ)Nds~Ga8B|4`<|~o{dXN7PG$PLl)NAM@*73=K11dw z36Eu&-`hTZZRHqNes2eb2{C2a+ zZU*oW@+P-++OSvax=O!J6|5w%*TnL0b=_HGt6!}1$8io5McWA+CsS}#UUgPpeUw*bBPAbDc!yM> zKaO>-&%3N`IIF35a^&6w_8wJWk4rwzDY~y~-pwko#WQaha$vtr7Mzw2i%k)vz}(zs7AM>;o3 z?_~@Xa|O)KRd__xy9*0;T+q~!V5S>&ZOyEG>KYd-Mw2)z=^671O>b2E$g8+dQSoc3 zX-hmwA33>`!=KK`>X)e7V`$y+OjBCkXl`i-Ta^9hr%g{^PQQw^QQ1zR!k(I8&&^oL z5zJ>Z%y|NhCVz0ACey2k6K_J9!ni3^Tt zVoyv`P?2&~XSl5~1U1<%c%<h-_nb|SJv#ZB^T<9o7}ShXKwCWcmH;h;_}GrjZFIrg6_e|6GZNsy8#W)~{SUd#V;=JutN`8vS{e1Mj`^(9bCspN zuVVUM#Vlx3mNWFd3G|^?v8LDYQ%tV6q-ic$FW&{!G~9IhQGd^h+&#pGDk_xdS2-i zU$O9pVvl3GU`(s3zprooT;J}8c1~soDO^VkV_%4~KaOfKNT1%o2h*d2lM)hBwxBl(TLTaY1uDOMrl>0L3eL~`qEH$jw zo7tk;*Rd_n<5uH1Q*UWAOtCem)T+;0NklUmwCVs~ab4SVUDtYCS#Ke;z2sych2u>Y zT^kH{?HyOG?R)aHQ(5Y{JR>AYy>2wX?e5#~;8}e$T=uS%`V(2&Nk+jxCnkQIo(^Rd zTyWG^OqD;54bA?%zV)WQbzhvmONI$R{J_=zXzu>p*d0zOIwFZrS?aJr_r2}?FUF~x zPo@)1?iXq1QIcw3oO;*ZcGlYLQKbcvga-oURbKJ`JvDVvR)1+|K58)R%?t!RO9X5r z=X}sP56Jg{x@#fm0@zC-_u@Vl6bJ4l5K!OuAcf)4v+~3V4I8mXT^S)?!R+z+uMTa- z-P%mJ86J%YFk1ih0Vjt2{})2Of=>npj2NSJ6l=`AIt~R20Lz49plgaNnvA0^C2>5J z=#y@W@klp%e(k_nRKb_l6VXwSPUWsLmyh>OSsXcimK7GM@Y?6=6wZ$dx zDRuWP9XD+qq0%Z>lHgRN4RMuWecty^{ojWNFPqy#V(q0O?LwY$pvipbegD}s^nKKH zT2>bpr=Cl62Yl^`F8}AJp`Syehw1rWw0RFHMInLqsBZk|eiv4Yw`r!GdC# z9()wGkHUSZG2B!)eeLbN`_Q}pM{=z!001BWNkl2nDTV+_TT zrgxT9bj2q2zlvUysAgm-v++zBH$vcq+TZGC}@DmdnAcQ~^1;>z#C!{3I7!i5!k z0`-L=V^63)ud4n&@adP4q0`ESLy`7MmUhV39H=wzyWZb*eYo%J*;Ql)Xu=R3rb6Da zH0^U!+qI$XP_6%wUV58W3Wwm~WB)HBqYu!|r5X3itaFxXCs}!1-gw>i{;aU}F17fp zzT!?_cBC!%{&DcTX?jOjbV-wZ=cS&|B{$gx-`hIx8k;;^sXw0SPvBf<75;34?$Gyn zXy~ZDCAc~UTv5D3m^&8^uz)=}1i%|7d#V&^l9F1cpKwdhBsVLk$~qH4${ZfYyv^55aqF%(FIz)^*UhcWn&hTOIcS z`*kG$*0g)9*R0a6GWi<}o>?gK)zvLYR149G<1b?;X-r>nshKNp{P!2rG1NJ+dQD$o zp$h_~mAma-D^kr&40S4+IvP*g$jr26=gcPY%~2F*0&C!HV*KBq|Bsh1`DE%0S2_Qd zz81sUk|Nm9>bx*e|as@8DR(S6_k zepi#VOBIG0Qg1vvq|n{K_*UP1UfbwmNOvf_Bf5Bx!oN<-`=zz}p}FH!oBJ)T^h8^5 zT3UVI)B9s|>@v6NLZ100t@uupyZVN9kX`y?bmF+C^*p8Ev%dT;z3eQlSH{pZ@|FUH}M#x{R{`=NgY7$0Ev z`)H0^2w}&=&OxN9Vb^T@$~s<$`ViHsi;`vOP6D)V{hWEX_?O4qTaXh{Za9A3Cz{(g3Y3`b*9LhU*xW= zUnD16V(1I6$yTXquc9hgUbU4Z@KX8a1kR#HPmPKD>%ad+L#53mi+wDKlPL_Bm0y4O zc>S?&FE#gAk^+tlN_6*~9bX4NUAK4pII0jsvQHIz5{0K_HD^`zmsJKYTLE;zi*V~Z z(HDGf?|NuzyQwe)62)-kJ7-A4WWi@JWn=rV?H`Uc*=N$s14Y(#W5>h5;6v}=kv#iK zo%1!T?2x10AajoLD}D}`PAi*^71^KlWuKw(b5dOi{EM2F-Spx;ir|i;x#nt)xT?<$ zO?O>gXAK5BgTI}?@+KtTSJi#4Z@KOMa9ZE&Eh#?qE}D7IDb0gfV+0FKFqBE5aDTb74cf2@|g&zk0EW{V;*AjbY^AS9ru|;c+dp<3YT~ z2;OK#ZiaOfR(uY|{p;h~>tlYjIqtJe0DC{+w~Tu&6Fc^~jh>eAc=|$2;$}Q!@g3Ec zlIAO~gf>4HLp6)#-m2=YqGDqb+mgsx;Ye-uhON>{3ylv~ICn+$Mk3Em=2+sGftrtXfs2dYGc1Q0W#c&tXLG`FQ=IX9s3xf#!g%+UBb- z3@xXPEup+JM?5>2$cNs%%aPyJ8XoGK@2VU9Nzx;#xRw)dG;|k^_VI-C;i)F?w6euR=6_e`{+e5PuP^)F*!t`E=(pid2YJOo zmT-q5I7`p@=fKc)`}<%~m5nD2uZ-;bR}P#@2QF~=A`%+w5bQ9-J2E{%dI?U+A+YzN zM<|ZG%SYaoCvLORi+$`}HF+OB?OikB9bk!#iwj~0vmEshwvO;dxs9C-AC5#ij`vYy z>vimJz>Eu!-!kb3{8-zTiNMy(LT37OG{q911ar+o4Aq%a;4Ch)CQCNhlD*oxgZB17 zUBd=nu}P8n$v`yi;pL>Ap6#ee39X zXnB8{Tkek+?5nd+n>$a6>z!N;N(+|!Qk4^wq#rADj%E5^28VCE2mEa9Hd%PYP@XfC zCv?R=O@3C@?3JW_(-r+zQ1>;z_NJifSK|m=D6ZN%cO}{riS|&g`_J*QUk8jQl?F>p z(oTEr;okZo;cqvBedt*_0`Len&|Svs$}z0Il@sskk>7meUq11z9Q#4$Ct!DoTo1yD zkb7|LT{mIO*x49A_V=g{yZMh)hY$F%%aOCOzcF3#_rx~XdL7x_PlUW>9Pvir#}RJ? z9tA+aI_;Ss9%CfW$1_|Ep)HZKku2J+tM`^wSd)crweGO9zi*3&D)A}UjpZV%6G@Y`12Jn{UC@_Hyv zi)!sui9dmVND+k?(ru3VT&jnpxhku>?(RFvEZa*Eo+YVnlQfqMb$}$?*A@EH3a=E| zzvb2bEUdfAEcxaAhacmnZzDsY^t?lXdS9%*H5mTq+}vermn|k~J2mBed*#TtbnIOM z(#JmFx_IncBIurMubgh1PyJ>nu*@d`^J!oObiA{2x?_IgH4}`DxP^}rR`#!(Fjs;- zn#&McBC(Obk$mf;{`Jvq^kLMty?Bm;&upW3C#VD6F|TFJhXfW!;Qbrp+Z*T{;1e*p zW1DsjbeqWZO}6Mjk>(SqeVN(e?oNL}=_Z})O3U;&)Vp(w7UGkZ_BlvptQo0 zB(TRZEIiq6V~a-hNj~>gOjiDC-M%HWjl1yReAN#PoI7r9=@(^-WO`_ zRN2>x%&;>3dvEWL5#!IX@#EaGV@c{mO3rOY@l{UwKPD%CpPKpS^vr$72QNo?+R%1c z-xf?S-g=k38_z#u$nPrZ9bEN=IMYWG?g%y4hW7iqju2gOOp~26RL6A1Hc1fRs16IN z!-AAw^<}@Lmz_(}&(dc&{WR8c*I$0S!39g=O zFQ5HOE9cwhi*56Hz(6Q)n_|qRP35BcULcVSI_rWpZqK2iJZp?9|4aN8}B@} zZNwN;e++Z<%Ky0IM|~X}KOTS+U>QTCf%?X%kAS@~wzDyT*jvT}8xw(zNnnqB-`+e+ zVR{9M1677cpx7_3IR5b7q0^fan4a8%-KuIx`_(A&Ml97KR_@m}IJ5HB5|ZrXWUnUu z^kc6tyU3j+3YAt~e)<%wXxO5Q1L$wS@ZBW#d1=jAV{5po-cA$kCJF)x+(T{FO#}K% z6n-f}fQ?vISJpo<8L2b)PZL3$A zGxw6R8BIH4%Aot$<$B*c_BNRpU`Vej4BuLNk2Qtf1b&bvJxx+xNHPwT+4}{RK4Hpv zvg)3#f%S+j|Ju-e*VcK_(ClGJ{Uo+KA?d2P?7q3no-EyZOWA3uygJ%E+gZ5`ES>Lw zR)Fp~rh9=3^Tpok)$Z!$?%FxxZN3PuUGA*`_)B1qn>PaQi^Myk9`QX&Z^(HQ5;3k@ zkk`>_neY=nwu}WVW56}AF&?mBPXpb}vB2g;U~>|$NIRR8J7}GP&ArWu-Ob5e>(uVn zG=#r3HFG(E;Yk+laO7Lb;@$G9o!W+Vu4IeG3zS#+O3If>ENfiSS`5vdk-ckZvS~8i zbb*g84pmfL3=D2(l{o1lPfqcETbC<6-x9+NCJMq-G#TC3G~L#>9TZn@Qg}O5ktdF` zmzs0j&qMRT<74lyqo&`cr!H%n zPZgP8w0T#u%wx6w+oypqz5Vyyy#am--1@GPRr_@5Nm|~wj|1O_$9@~1zN&3KNX@_P z>_2Yk+ScTmU(;s(9_y8){1_hFQf51&lS7HZokYV1b}u|04>7&cnGfcfHyMw#V!JW4d);T?AM<75KGhc`e*<-brk#>*nrg( z0GlF%f>}p*fGcPd>am^8anRo8_%2$#054 zRB&s0-!>J3!Zx|@p7l-jxdloGQv}!XtvJRyOR!g3xm{ARN#{AZ(%pK4JvDnXKG{j- zZn1<%hQ_0|cAqjM$W!rZyAfD;go?^+R2 zz`1ArmqLJZYn;#?thR}u4c75}plh255wcJ0+a{sdhr&L&Z=V8%91{nQ$pib;fqfDc zj_Cu(%)VoK-#LBgm<~Ip!p_OV?FDapy(dYy#Sm;K^57J^6)6Wbb-ujf^@L=o!(AON zZAO46^Km7C^z8HAo=|;*pQi|Nl^(JBpt*Ucu4yAlYpL_d)n(Pxv>akRJoLTt!Yo08Mb5 zEDIzG13cATT@!Trn})V+u4<3OKcHtM_&r+QwDZFIu@|l}@#nyzAq+jZqU~au_YTXuVdDHq~{x>m;06r4Z=jnKp& z1rQC|C-&?ZE$~B{z-xpq5Dg=!Xbn53U_Eq99U{il2hOPjC$R$KsY8$p)@e}Kh1NsY zbl5$8=$*A@=vU*D92}{e#95DH__FeLDr>evGN;ThAI={1Tl%o^z5U-68Xil!GzPoLv$i3vQUIL#kwtul`)ya$nK>P}^~qTfLni zI3Np7^hLYX&32X|z|q)}B>uFV_y`lBCv~D*Mu3^$^redEW zIMZg`HFjP$w+GVmAz&_;@?A3jASLIfzT>j0>9(eAUy>Ch3ood$6Iq5`nz2C=SgE2d zj?$JaKPjs5q!)$D43|>FM96CcX^~9c31sDs=lihs&Ll2S^e2nDHbQ z=ItVo<3r#gkk34_pE-0Po%-ei1Kp0y+)#Dhu2c&%7o_^>hwh_}PPm2p*^-^|GJATC zErGQeLvzWsM-5G((rRlWXPd%xk=X}DCE+riX)nAF`BXRmT7)Norp?YiDPZ^wEmLXi_)g+l%h*nR+z8*eRS%V z!O?FWefN!Bezqz^6JIk`XNfW|OBODzIgq9Q$SC<|LG2Hi4D@CHVKn{c{OoU2CCnYbUY7xkaajR-e9b zGcL(XV%r&la83P5TcwZ^ATLWX@Uc~@PsMbrc17B8ou`S{TLj& zDmNSpv|m(NU(~s$vh*)aZQqB6zYGtb#DGJ zpDev(sxIgX__Zgsjp5Y%ht$G<=GXk5U-OVr_M^G;_lb$0L&Fa(9S36FsZg`S5?@wS zeD3`i`p|L}T)Ef-yQ7v5&b~%hI5T$t>NO1ZDCbu%k=8Fm>sNRMJpt;6_VGuHBiO(m z`b&(_eX&OQ>>^lC5+eT;D^r28Sx$OXd0LqCiT#kZl&g+|le9fIa<64z@q|AT|-f!dMaAk)iKUM0#WEMYU6rbzze)fI( zF=F~UGJKRb#OG4RveUN9!fGoT&;^N3`kQw4EgM{gwDT3 zExeRz)n4&$xrBVABlfb*Kkr; zd!@|%nN|8tnR~(3o(px~TDv~CcHXsgh9tTj`14b^9+vQ?uHmq)>1t;QU|*q5zk+7? z;K~&ujRGHA9P9rj>%E^E-|{TM_shnb+3lX$omkU7-Br_5ud1HQ#2X>+z4sDG2!s_N zWD(v<2J2eL~`my!T!Lgh}#cKG)UV)$^C^{YvDk+SrIs+_<{>l98cv&-t8l^_Ap) zn}IrgaRfWS`{s)ht&8>44>rMJNz5Va0lz;Z4WSOz=Q)J;F<|y`5!9lUgFyY<(N9XK z->-kZrnDQ@LnrH?*?T63Jp+TME$X***xf4B+e(D3snyxtzk{P4K5RHdk*!^tJv0@x z^J6+EHeiVljhr!s0Rq#5qleTTnc11d;INI%i;%c(6g|+~78{#5qzg|f(9UYS8%fLb z8dAmq4-oAtTo6WbRpT5KPNd%u?$aL;*zP)_4@vd2gx3?}*V8jOgC#^2o`YP@YYMR? z*Tp;P@0M1Q-3A|tp9d5asN!73-Tb55Cr_^)F9P0YIf??WIgDq5X?zqlMwjh`K9ou(;qf;P%ha+#H6RXrRCE(cg}Y7Y2v2>K=DBHqtYrvFrp*oS;iX zO!51P>6@v!{M3w#DGxT#vS@aoo{;M7x_k08r5$i%xlxKZKo%Zg*{2LiesV5p8a_la z=F8w#4C4gJ+@TAjy5R%B_$qv&jvA?0N|6sPylG2#-eSnaEndl|#!MGMaS&iB^y-z02q$;aIz1^(dss))1d5mZHy0x~}&Udxg zy>i3>N95|$+3^e)nilENX6EO?vv#l#(2Nr_+25@V8U{|;(xWoCvj%%qjgGhXCiE7& zQ0b^596m%I;#o1BDQYm=1WkT4Jw@dQaGZE&_r=UirWo*IM1GLSjkk4x9C*9%IMuBW z5x5z;G)5G83Ecd^(ACJ)&Cpa_)pJ;manzFR)kHgtlJ4$L_L-8V5hqpbsUZ}DAHl=q z=7&f9vNq_pYrMdXPBYo!7;ADPw(JE_ufuM!h%2Pc5$%6);RPDp^JmuI_EfrY8 zlZVj3b6!7uGyUk(@_M$%5}`?wU;}X*W5!_*LmsWCT?6d#!gCBSj^*48j$D|Bu7}2w z;#N;NItnA(%TZpwDEoXq?cYwhUINBvpzaP)KLc3qy{`-yeXo-~AobfR-*(pfHVb$U z5gqdCpJ@%{H$eBNL5TFr!Ow0kbX3%NXk0G!_+Mo_bWit^0D$1W0wI088a`SN9hdM1 z1uYgQ>tXArbI^Q97rkW(cX;x(GT563uoI5Z+oL^e?KnV?&Jbirv&z-m>%=e|SVpi% z8y*@tU&b_rzXGc(!Q z8LwOwBlA;Ci66wgKHbIKOv*CkCUVmhfgj6^w{)J5Oy(_PUSYGN0uzBz0<|O?0JXCp zbb)ijP_()GxC{fG2Up=wk+f{DG1qUoG!94UvQRBChhQaOG)Dt5)z|OkC;*}nkm$Ze z9HQtUjVW#%&5X|2o4cP@pj-^u5t=#w+Xn$@OG4Cs`Ykd7cwbAgm0?nn=1;2|cc2!Q z?-p0XEJd6s3{rqXm?JH{o?1#418II1#f~*FZZx_Npzlo2ydRqilZ6R9D}rUa$?Vj` zK-T>t>wTT|#Jq*k001BWNklmLPaXIRQ$cXhBLVZS{`A+bH3?X{Ovq6C{m>%;;!P)oraK2axo$YP?UVOzJF2!=RHb19>mfK=s!VJV@$A zxBgN)aHSs(bDCULSbrVp&{#K#bFLq_&<(yf3?+H0a2+|1;^a{*FUb80WumPU%6nj! zJVg2AZJx$%SFq^mEYHJ>6FaRmK}F1?eq6{H=vy{4bGHo^5jZEj||^l^qT z&z6SC{Jh0q&;8ryU>?{3l@9{!KLZTm4Vf}9 zE|&-$F5(?JUIv7YlxPjf_zHj%U>O0OyNEr+=2K9sA*j|u#W{fa*To1_YvD8KvZ!M# zurcTA=y_F#e?wxvh7tB)L>rYG9~g{{Puf~Kfw0>M47XNyAZy;PKpms0{vMrQ(|-sf zI%{!<<#2~c9yXZVYR!HP-cwIH139fpeK|ROJ~`!)w|McaAWa-;?kvpBXD4S|TzP~5 zT06&qV?}y;B3gruB{{9c1nS8rWvGCpC8--oY6l#^Iai=#^&|kK7t74{8qWL71^rNf zA#+yZya3Tk>?xL+>N91v=7M1;B2+u8Nl6qlg=9Hv@Ij$GrR#U&Sz%z-VB~n4HqmMJ zE4po>mW^*<+tv6JG;8?}HJg8|4GEg#8nc}!NOKhhert}Q2r{Gv*mGMMR+G)g!~+W`At6XwpiQef$ieBa~|A2555Jc=Yu;Jq3tgK(qRbQ<|O`rErwqho>29tWD9B=Nm?W>#msef;G8lc!!;s~^Ym;kgNQcXnzjW*I)lFdcPR zYX!=Nrzf?Bq`~55$$-_0z!;7)OjzEU(3+CH1{+CmQjYQ0lkL?wJBE?$F{FBoX}!h8 zZ8`(Mg^rn?&NVT+=D{WdDkSAh*Skm4P^i8ftW z*|S|wefu4JrxJV2Yg~HJu=G!5$#(7St+5;R#tp!$C9>DAD5u75bK z8@8j^pclBgvdqYM#xxRQ$!?_W-z&O5D50SLy=CO5&5ch_p8f!0h`24q5XZ^fh*0)^ zVdmQR<|4QQAsu{s5!?pz%fNPV^0`8wc1m>_diO;X5cF&XLhcL*@@mYw8arEw7jcb% zx%D%OHVC;mcxYRT7w572NpZb6N!T|MwvD)bJz-ymM%zXbJhXv_U=ga6Ycqbh>@}J9 zX?z<^_>Rb0s)WC*!yeK30AO#gZimF$DTf{48Qy*a5b(na^gf>9)SGOr-KQ{;A47Lg z*y)j>i%0YRc8!z3j8b`SA~SCqyjge*(w9f9vcbrw73ip}C1$h)jYEeBs;i!0twQ@b zqO8u6?zgxZVmm+xMzdDo0*dyi&II5;r3#PAP~JKcK-7k&ruz&z!{GJsctqarf|0{m zmLJ19!!l9^^VRhH$N4AcrjamPekpB#FKf?m6)8nqZg|Kgkb5ezfofc+xjouvIpr!h zzpOrZh@H8bgCM#f?3vGz#GM-S0gWB(*7`bncQMq%D&z@`8!(s;*y7!Cs->FZSK07nGCmgM{%44j_a2x z;#%`gJ@w_+b+5m!-}t)jfF|;_>qq`r16=+4t!LNMkCW>D2t^V@b0W25Zw(P-wj2G( ztzq;=KMKO$VGZ#VPDz;uFXt9O2Z=Hpuh_~0L7c;IA`P^wUc>F+_YfmA@mL!q4~}iN&9*dLI{E|X)ECeF*O0< zx0!;TT~C3sgW57)6Pw>2*zY_%s4kv(8^Y_SSi<5+Oy>t zG;UU-fw4cT!#{`N))2VETC9UFjrQq%t(yIM0^s^Flke3T54e(37}3ra#3m=)9U3Q& z9>j6{B4u`BGCe$Qql*9|opppm1Toy!6Yth1JGHxj;x$+gobp!O$o%HPG!l1KPw>@~ zj>}MX8b8`&i0dsLX^S03N|5+rA~&ZsT+J^O9zPDNy22FUIjb?rY>bJO?`P+37ZyLR zuAUpmLUidlyD7_TbdmT#@NXY4fjx0EF(2VTch}!aI|>4ITGV_wJ{HqxqeNboA_~cy zGx|XXisOXQ_A0Qm|5Wyp%yTt%PuCG5ow}R(r?>M`mgyfpqlr&y@Ufo$i|I$nUW==N4vYnec^6nd=rT9r)*nWvzc-D192ki(CGmQ4 z3`X%|spq}g>*MvS#C{>TT?lPo0pKB)7sv3si^#hxfO>Jfia_;6%CVM$5G?}iST9YI zPN>q(&v1fuXQ@i)0#MgepXV9pdd9JtaTM2G8)+AK7L31cg{{(t$a-I-PS*~lO)nqR zA6KDvDv(dVt$A7pY5s|{$)o8%Yit4L?g(^TsWLn?d?sjgBB^$+BsMweXz6ew=?)ml z&5=b6mQau35KgsKVb7{CXJ}edqtEsjvhCWV8vJQB4(u3KJ?!tk{hIcNKRRK=Ae!k$ zF+)<-#mwBr)J(WV6TmSuba8~l&l@b4^9vvmgcO}2sxZrv#hKEG5c+i0_1wb8rImtt zJOca_r!miI@{b@leHPUCio><6ehjZFN2UYB>!erp|ESwdrrNrs7OWjCT zI|Q(gbsOvr)L^4JVHu6~nq5SG49U303EyLd7Z_fSAoye&zOzhxZyC+B_W{{RA!x1| zY)sO4^?33&xpx_cNM8uw)BUQ*@*>^;0z8C0z%>KaTIL?zH85r%L`$^^umn$K!BYTE z*H#8XcN2{F0$Hnt=*JbJ{HA5~$G zDlm4AB%(8iHM(Os*;9iDubl(S%=DXbJ-U>-=dc2ET#Y+Gkh!pi-~Q&e69h6~bCxBK zGGx)lHURU*>};T=3t*q7OG0Gfh0y{`;^pFENZA=7i@=p}R%4jg^nP~!YVPsv!qc2_ z#7~waDAEi?>PK?|%^m5%@$W6{sTg%XK7&QfF1{!GAYT`w=@ya}Q z_hj{aY~GILxu|@QT@%K^h*%wjQ7*B(YrOCrCx{{#m+G$T!SO5eP{BCpMzf&rbqbp6enMtL%?igA-o~%A- z^#?GLqXvIgfjYx8BU)obqYKL0cE3YdQ8W)th6HrZY6^hR*E>7g0)5T#jFWaXryj{9Z z9u##RVtfgHi29%DUZnmmgnjVv2>|;t@Ujqmk@o=U-YBVe5oQ44dKMx&AU#B1Fo!k@ zn0Piyi2k|{Ah6vKTLUx(YMLYyeu4yDZp1V&JA zj89D2L<%PcU{CROXxv824u-K`jyxo@z2?Cqx)8djwhHYOHU$k9Pp5XL25+swomOC+ zG(lo`G&?pKYwdPp*&ZU-h6nC%;C68#VgPE%$uXrVhCC)|xty5FPE6Y+Dr+4ufOKmm z&M$2NSjPHHPL3RS0#6OmT}`r9W0qxho03C zB1Ha;cKD)aFl88V@RVRnT`=XqH>5?aaY5^+B`D?JK3)zscOR9Z!*X>>KbY1Jdq~0% zoO;Vs0K!1gs!Ci>;uOXiqu^(yoVK$wOaHiSCF{^BMmD*WbWqC)~u+zOj%_p>7E z_tY=$nCAfLY?1W2`wg_254?!Hc?^ubi^BD>#79JywW$>tx*e%}n?&;)O~IkzLo&w- z!|&B#?agftt#KPgIj#UcpY1UZ>{ED0RhaE^_?b{1F%5=+UB@ybc(xD42+3N{XXY;F z=0mE^07DdINZfc%T5Gs?ycq26b0Fz)pw$gDFM$i4{pq210S?Mh(4kNzCL~eiv;%3a z#V2YxtH6XnoNFMv>xmiQ#!aKQ#-a1pK2Py?Fye5Aw}#}SiqZxPbnMe(_9K{y2HFJ@ z`huiD9qB^VSr{Dg^Bcoe_;@|dFIQU|Xn|UCu%3KYhJJ}>yuIH|7M=5&-;3KWWF0X<%k|*cho@`T^G`x;{d<*ICrudB55;wZiPqi(S8*rr z`qb3@eT%lx*!{!Q+|Msw{^{AXpO@DXimog}oaf0?jjG$(*&FNgtN89!7_|KD!e2G} zzfixV`AR-YNU3At%7vt=b^&I6y64>c{L=TV2><52_?M&}nnPSKG8@7>3)NPx*z(iv zl2mL#7eK&6&jRY_idUY8U)cxy4}rYX1rCPrfW{3E3IkPWg0H1LH#3(Uo^VkG2?{@mWrrGD^D}eV znHj&hCBc-(XhJKN9@X^628XSZ=93C6K-5=5^n!G*HN|uTE}`-SzznB?;1_9ZD*%8E zLqVlxzY^=NCxK94uf?a@dd>mw4MUlBt*4q4gi#}Kn!Ao{#c@JC`e=_asWIA6Ot79T zYQDRIn2@ww42<{`t+sMhw4Mz3>PE0)b(CZS-BE#evE(O$=GSoA3pn+#3~NU)^18wN zz(jszCcsgodCFT^*Nvbp!&M~|owxH(lG@>5kNFhMI;tmydUW~G=}Rb8wq7-Me^O~b zDtfP*y6$=me|o<4%f=?aKC3lF@tg~$IKdR(jE>!IuU{v2i=Dox{6(+}#YrLhSG;eP zk>qTIN`P+UphWaKKCyD3g9{?urSCap@gU%f*h9=NDnU`+i>h8+Ea6>bd8UYZsm-VF zZ6Nfwc`vl`oW|HKhubjJeJleo8@Ttt@W@*_?^!*@-qm-e>fEVDo>rp|>u@0Gd-~1W zX!=1VdY{Ph3|NlYVlS5E#<7CxuFTY2Y-r3u<^t^fI95d2b~!trotkwCngbY?8&27) z!-cw`n|53>wY3VHgwudxhj6TO!$49$;FGpOx5vZjUqsm7mH z5%w!F(U$I1|3F4RkZjX>t4Xm2S`>>+8XjYEM&jDkPX6IF1 zcT;m|lf{al_$$$V5K`duXe||JhP@2!tBhz`U+1@}7A;`W4YNE0Aa(41I@TL&m{Y?6u&r<&mT8#dRy#&`GBeqF! zY7x4(iK1zua&ct?9h|)9*}1pK^?M%&F+S}sY5u)^E8=~ReaX+4yk4nFf)DiIJoF;4 zKDAW=KZJf#7P0jZ?on&}14CYe@g;)zvH|by=|5An?NlOwncoAd+u3K;^lxKmr?rGL zhA1>Pb}Cl-(M&If9%}8*%|40`jyi~(2#(``Q@mnj!aN+-4;;~iyJc`I_!9&*)n`nb zhQ0DOYc)0wrv&TBemwi!Xh|9@PDzWc3Ky=YTFbG1K~qjYbZ#8Vnud;03>Td0MKG-h zdRAw?o|?OzeRMT6nPfKI2vy*<&TyL}e8tt|49MJtxy5KpUsBL=E9-nO?Z}8)ZnWl~ zS2jK_K8?s!G0;2s%2OB_m_&aa<+u#(l(f3F!`mqK^KW1vUqo4oAg8e~{pfsbE@vL| zG2~IaDBZvg!x+wLVu&fbHjQOa$h2PR*%im~ld zysm}SDI=;y*!D)Ef`{T09&F9_UWMPJ-Rs33zj3eOpPPM={gCg=-9NQeL>&@?Vzk@L zmM$n>a}jxU*sb3Fw$56E0Raz~J5Ou3y{+p&*tlK>+d$wPz5V+Ve*_8E2?$iVCEmm%#OalFrz&{^zk8Sn@8 z8iEZ;Pic(_!=O{7JgG)UU=$DZQ8xx4J-EyTUL!O;N0$W2{A{=OZsGCW;?wt!7QK8$ zkSvH&gmxSUvWkxuZx^3jjZVk;s_Vw~J7sT9-U$rj-P~f~@sq;BQliTk<|qo1_S>ee zyhMG~WB7S%Fy_GV>{Y}hoRLMaV{jH|F2H7{4I{qRULT6(rwB766Zz@cv}x3hWXF)K0$y-S z5MAH}S4`oT}k-V*HS^>*}Z6WMEJur&VtXAngXcz2tN>F~n3&3qO?tS}1XXm&RR(C1bWi{HE2|%# zEZsd_4#?XBR3UH-E+RkOZ+gG9@?mMEFg6`z%P+*Oz=xlU+Y>?+5cZqJrJIGNWWUA7 zkmmWV*OKjLrB7oCt;Ip$gMfNt`Hh6L=~8NYp%TRcPLPhxB5Y zX=Y=HB=WFiz{f?kL(#@gR~0eUz_@Gxse$dR#77(3W59*<8iHhz55-LO>67NMh|%I_ zHzwfBTfE>SL3~3J=h2)W^p+pSXMdQOyBnGE6Szq@6=0uaNvt7^=P2K+NR$D`9bS~_iLh8<0} zi<;u&lcAB(W2VRsTrpeh864WB@j*KPk--NKXG zr^_K_SC}G7&?FulC!x{ZJbrSw@br3gI?Rw?3R`c)>I-p4jIX+#n)|T0^nU(n#ysw# zh*E4tp4*&YD>LG@kB=VT&d%RV%=jr{KbqzwaMBb>f+z~mrP+zO)cBmg$Gr6rbyQ1C z(Hp}A;a)k$qwGv*1}=LoArvQCN6j>_0JQdMf*a4h7@kZIjrkd}5SHy^h@<+UhN$c&<#O?Uh_hU1O#`b6fC4e9~>j}xu?!w9XRdVky(Js1M zYV)PZ4e0kR0+goS@5Xgpgr_Ot@!6E=Z39_=w5py;Pn*n=|UDN7RW zGsXJNRx00GOZ1?bVWqn8XudE%@0Y5hG|8nvmEo&WvX;Ue2neHorZhp9UjawWZj3jz z-%c-F&n#TeE&63`fRVsMSnJ7NadT>LJZm0Jbs8KnN({wH0c?lQjUB4ZfOwc9Q?4|@+m}zXedcOERbx^oJ z#k)VtyN=xR9`brUN?HpKrQ#zSS#Yg_s#i0*8j0;vf{;}H=85hm^t!0_>z{Gm_$y&A zO}0vgzhnkW4Wc9oc`$mPrEF{OSX?)OWg~G;IHJVxSZsJKqBn128P6WVo-?@%7@}RL zvnpCo5R`*@{3%xg0-mk4`*kgLuL^Ta=lKUf?-yEYu!rR+yGRk%ntVO_cW}xXc(w{_ z?GF5(hI%>4Ih`bnvpG2~} zbtEr|2l9QY&z#f`o>9feK_!Ef~4b@>G^+q_Ts;9Z~tj)Gt<_0!&Mdps;pRb zGe30`*uIYM6?wn=+3xK@72Sh)-`7O#l~WWvbTc2-*F@1allzolq$!!TdrQWf;Hwgl z8TaSDUP^s`*$0pTES=bwynX)uNC#TH2)}kc9p0(KISI@|Jl)gYotm7AjZJuabcYDa zK7zC>S3H5^j=MDnJlSqJ@@*O7kSzjM&ehiQrVe{ti8-b6yhif@m48x+-77~q#mx!x zP<&w6PT_}fY%iMT5jACJ=JN9k9d<+MA^rlv&Y;+l z2KtT0cw-*DH4R^BOaT}zi)3BES?LBwppJ6WrT>0l{Nw0s6r{~Ej1SASfy`2g0Ap`u z001BWNklrA+%Sco=aIPCp^IPtkx_)Wy{ZXO0YUzF7 zKk)A_U;g{+w|{>5`gUqI&XQdTl^L%5qO132ckLE9zQ3TpdjrY-Ua9MUp;gj)RkXfl zS~Cv;1i;in(>4-%nkdbTTGz|*%fO4wy_?(k^^`sbT7U;aI$!GXMXw2 zS*XwGRcp3uu+aNA6uw(;KBNm>Fp8~#8fw>MX6N$Lb8eP2MB(}I94B9%ou10i&4YFj zAh7MA;Wf4qyVSHyLE~FfuzRhgj3^iY7WUxqS&E&TA@>Wr5`L9MsgaXub!F!djiRd z!04_T(q)$(WHTVV={Bvi9PLApZAgl@iUq4IMXiu9qPUHYCStShf@#Is7&%ZK#`6gF^q?)Dx}d(Q!ecHBVTCC4Dj;j`*MKEJ^lmMO!ef~ygaiAD67&Q;lR6Q+#V_g}B zuJprKrqP(Z{0;d9nh=Dc?r#Wi~NmXaI&z$Wah_~yk zRRloySUnw#j&fYOrRPEi{;9FF#%PC;T~+9_dP1;{kKME#9V!(Z!cSb&jcU*HRrcK~z6rrwGDzWM>s2B39+b zrf(iSDh!Ti1g)PGy+5h?KFKwCw(_Q}_tW^?r%B-Ur<2MqFR=O;hOeF&mnpAzS8p>% zpRot1mq-uE{ug3ebt4M~uvY@!3((qTYIhTrhbw!cmt2QlW?k!f*Lv=AQvZCa^Q)i# zHQhm#@ofAGKiDXR$ZPweYI#XBCKT zfn=8}c~_2p^ALV0l)L+M&UVcnoNRBP+WC#4$tjyy35=K%%Lw-ya*q~LL!&k_H%8?7 zQFI51A2kmK`i=Vt>RAo$qzW5uYz2KWt+&{TJa09GeWZ@;#j^qSz$;kc)JPpA1!MSY z$X+D%TyFuIpEnGL8ru&mu)aE~yPkGXjSIB(hV+9m-Ow3{A40Rvsge{`9K>?3dra4( zlZCOVOVenGD#>!1u6U{(uQ^JW-I_-~EFW3MPhvb}495fx*I9*k!Kj&DbI>sQ zjwpCnhIv+oSS52#nmUgfXdV>PMH5}kFWx?0y?eBLF)$9aJ%nUO!GEuwYDLiFy?U!a z;jAae@LV@lm>nNKpP2bL_c$eLyI?79D6$)@Acx^6@Vp<#r+ylp{(0unopIQYVI@#> z;6;LD&gIO=U2OL{wpa3Z#ZC_ae;wQXLcwil6QLTJ4P9cKv4x>kG30Exf>z^sF?tnx znFGMzAM0*>PVo0<`1c#4IR6~{fZ#tXJ)8AxoQGfUshZw=SO4Mx>>ZvF=+Xw-x_!!y zx0T3)3gn9l#9OK28IG~>RqY0axyz9p)({Tsi0;Vlh8n1# zv!0=7alI*|Guy%If?*ZNq6|oMJo(3&+3)8Uzh8WEIWQWgOY>alqd6WT5A^%o^rQ6T ztVg0sGG*5y^@X%8!EOF9I{9g7`NNZyo9RcOO%!D99~4~$c~_FBx*MMOd1d|Qjc1=$ z)>HD1JX!2xh<7V7XK-3XYj$-TUpG+SJw$JO+wg`VIac?&dCfi~6X;OhJp5sC`DX4( zqJQuZMggrPiv+EN?Wv^%6lz~*zZ1*OQ>9)4FV&~d%|E`JeiUOih2gYIyx=`Sd`*;O zQM?~D`hT66|F@Zie;%DnOIi~RlpKZ?Y#?V^+umEZZc_(E$f0Nl@g8i2*xnaCjd;D1 z(k;Oacd{mR;uZm-iB&h%#wvI>^WGO(&-2njUJ?7PUuk`RYFm5{_t(UqFJ*n`vaP)T zdGciSfWow)$ggTKr!s}3t;^Hd12lZ^JJ@Lj`V95X`>~lQrwK&)b6#_REKIcZUd%4$<`zK&57ERIg4PR(Ixc9w8=wAhb?wvY`iDnP zB4Tx3*6~59xdGS-^)Y^7RzGc-w@E!&3?-8fF%Fzjsae_co1e~8}v zW9=I}=S@?)qeXLuWVsQnps3}1a5C0qNazN=0+pwnkcYE@Bk@*|oP1f#U~$tV8Jajo z7DXhj@!_$QW$dEEn1Hix2*MwU(jQ5Z0#0D#gZjeK&6_qzO)BbWk3g%WNa?k$9N1nz=@Xq1ybl3gI`NCnLvbvW>_-<4U3yOTb|AcK1E6LcJ@4 z@07vc5Egpc(I1 zV|}X5glX8{)NZdthe5Kc#(T(|n9&^44IJRvAo875u)vhtv2+)KogJA@SSG9_p$Ex4tEardvlrNs6Sd}$DLbhn@0Ot>ZN0$R zfnS2fW|6J`g7g0i+Kj+3TI&(O?}rax;O`e2#J;zb1&&(&}ZRY~zt)L~xS7oHFKRsRs zfc?C(_F;57&TGDusDZpEnDQ{VYp=6yhqQ zB+&&;eo2*ualCY6`}^VP>#^C}$@y?&R{%!MqB#y=Kar%E-h4j&$R|?!F+4w(yNzM3 zikr8%GM~o$7DhU(z*zC@Y`-PjGmz2`JLxie6(I>H2vW_;(z^bxZnO(R9+_iuDs)$ve8P|I+43nO>*dZ zKSZ`~69<3Q?4ijQy$V8?1luY?tN3tW_ZIu8!6E9^B;%*&!awgz{`IV_;ChmFKPxf2 zME7$~DcRp^z-OHdcU;*#Xn$%vy zfL+{tREhD!Db9LAq)C+@o6L+)xg;t#Ft>P4q_z9@G4$h|F8eyfBB#P@jw1; zS1s(gM_YKhmNiWJn2H#qIm1+C47&G$7kBBS`)CJHk3rZ&ydUf34|TEn6?hdFKB&Tb zM;TYEykFi(|GX#u(@E#0XE_7igmdrn|BCdV6}}|+o)Yi3&WpUijJ~!%vb-vTzkC4O zAu)YAliy%=w`)#`EI(aj1!BMwI!vZFB-WcM)LT0Dw7Y+sE8T(G0n#RJ4)hxQEj|0S zcxx5@l*;p%EC);x0DG?z?NF%W6Vt)AJ`b9nqzOV4LAK9uv#^k#d*qg?e0a8x!1l{p z3X6~5KYa>7@{@RJnkY^Z0+S5FeWcHHhG7P(3BdgO>d7uN{i4To-fy|k4tvF{oBwAFq6WaeS9Lyor<;U-bD! z(%;1PzZmbP8{24F1!1CtY8_-2mN-AY6#aQm`ir$M=Uz>_i*L+BF>gJ45BaZe;oM6- zH1`y%v>Uuzm*H2tO_JR*_}hvGXH$!#t^2g4{WX$w3@5mWtRpzd(X6&>b=zq2JK*>v z3cGpmoj|@{joGb4xuq?k9=)%%XAju^YV1Cl?KTV?^BZjliVaEit2L?lg+PbSjb+AZ zf*?hZ*ALt*EM6=;@km+%cy<8C^suG5@u~dCWVog0xElC;lD~#%L(w8SBk+JuB0pM3 zE}*$F@KR!!?|V!)y1_fsa6zpN){%1v)+LgYMX=&%=8eX5uC*k4%{Da4U5yXJXddWy z$=mJ>BOgp-w>nFlA&b>h3J7)q!HvV{Ns90TP-9R-(>b*+R87jGm}wZ@2lhIdX=`e+ z%GG<7SXT{o2SxX22j8mu^}nxpQHwvQBRW9W{|*@kkpXm#@!3q5AJnY=wwPF z29rnJ;;SJ=5R3qlK1<{L!~gMr{@vgFhljuUf8byK7WdWf%76EdtUrFWjpusJ6OrNh z?Cf0Oc>P26;4XVoLb{~(_mkM}ZLEm>qFJC*UGHW*g*wiw;cYe4sFx) z9LbswV1#!KL~Co8ZD4SlC)umTzb!|c3L9Nr+OwAKH#OMfTHF~!7#SV4HMTm?bSIkO zQ)}YWv;K}g50;sr2}30QrNMIj=+On>J-5kIyc5e#2p!8}@M)rM*y>@QI41e_khvhMmUdF@bAKWwE4 zZB;lBxNX(=m{?UX3>moVH~8=V zX$wI*YiiHDeR7xHy#vM`XnW+{EvVQ%@b?7-Kek`Qez57Wj%}adrRSKRUP}J$o%G|W z9$5O6eKqY|xj)Kvl_us3%&F-(BHN7or^LTu@I zYtLo3&M#1SiywY~evg{OO&JH%rV$%O;D-);Sdj+02gS%~3^|RtptmHIoz5!gOOKOq zdI*GU6ur=A&S*db9y(=6_8y=>S3a)5`k7Mbmx=p8rx*+|n>OxfcD`=*Y3TuTV6yYq(OGXh`no3ASV%l|E@`9@j)Kv?|^ zyYg$oH(%nv`x5=_mu3I$AEzskJ8Z^X>}BZ`?&gq z-25!{r|0~C-ILzD>q#8Urfo|(=W5Qi2Bf}pl>7PZ`HkX9eu?o#hhM}VYW5%qK(%=u zd9~l6I&2`k!;+m{-PX2lV9=gbA`UB&r`4D@WiW?awJT9>&3BBc%#COyZK;n-#w#*@k&+v2`nd7d-rV$K(9mzxH$BmX4@QHX%u%2>`=cft6 z2=ud*BUb~Xw`0@i-G(rRbwQI{GGri4CHYO?PtSdroV%S}hyiZs zyV=E0vy1sILyRde@Km?_mUDhfO4Ryse(~eel^>VZuZE|i^hOXDZ^i9tfhwtJKjKOb z1(H*#>h*UGJ73rDAgG@9e!%|GTHMpJhC?hPLKHy1lq^zSFD}Ig$AhhX)@ot^=s^uW z+|n899gvsT5Wf0{4&=i=OhpUqfvDmecKKJN?|zT__V=Xk{_yp0|4VmOtyLHW-Aj}6(hWSGzfd1yzh~*H#I0Fn=TA#ZKP|0*jCV6Mkzhmj$$yZxUy9XvMaR#} zt3N$i{j|KA)eQy+yd+%$T1>o2{qgbA_e*O(JY7FGjm0>MD^c5fap#4kBO`79wD|PL z<&B@$w?51)fW&ws@3<4U=Y*|UMORqUw@qStIyG-#q@8c-R==v;<;hM|-BVar*YCdF zWe7cZevl-xV^~qOHlQ6y7=~OpuD2HNg^^Chie@-cR{NEnP_03hX;5Vy@CQvb-!UKl zf$;6`v0s0Q`{wsw|Mu@2k?=rA=lSmZb!_`OvIBU33jq(h`|fAd?{~oa`2PF&!55d0 z>A$=d|Ld+ax-2-D;@B1?-i^-CTT9|_HfvkTy4JFu^}Ofa*q5*`5*@JrSt-irKAU{7 zeieJ;m@4DB3(9r{?!4n+ow4QWG<+;JXAdnqYq7N%k#}r;zZ}D~M4jU-e8o~*T znCaGKw59~`gE;nS4L(3*b>eWp`RWh22M^E4oGe3n#cfV98gt$K*9(i+j~2p>?Qy2; zN~q3>T63zdpI4TDUS9cSWBq1iBE^*7$~tZvy8)2-X3dYwtDl~%{H@5YI}76W zl&tN1WPG2>@ptq%&d$E8ZEwRkW{BZRCFN#_T?Q7->P8W@+$sFfAD+icVFVa{j&P^zy0zb|9$|6 z&%KzqjRW38*hBEgcHiHdyAtCeo@_pCSi zZZvhWkcE_gJ?}2vk-eEM3V!~tz|MbGen9&3BJa1w{H^b5j|9^A=vaJw%%N0U2`pf> ztazqfBu@+s`g*imDB|04bah$nmcJq}G_~HyxwtJ`5ws5Zk-89hKGZ z8XNt*#w=ZYC2Wl`XBx*nNKvlVyJ z_B(0Eg;0I2?EdNT@{fx^6;=!8u^>s9p-Q7vNszC&d-V9z^4bqetMA9=QbKh>-gP7I zD#*Ih;?_@(9{;eu`DtbA=FxJHr#k00-*TGs?B*o1@p@$3E>qdq;-J=GC-8z;?jeSG zsMb8Ai*;XDHT~i1eZKq%`igDxX$>LWu8SLo5?b?VJ#DJ0UW=_9rPhv7U}i$C7E{@U zc-RjAt^@I%xb|Ci#UI#}zh_l_MSSpwKm6wJYyaUNJriAb$+y?x?VHHElBK_k?cS6+ zeSH5mesBkozR3Gu-bp==7<38nVFf{iB;YA%^#V4EUO9bH-MY=>1&od-vuD}KOt#Ijy!@o?H z>@pQcOw}$;woDM5=XtJt#b>_gfz3M$!aat6h!yPPg)2zbQFi{C#Xd;ptmN6I1?n|& z$|OS;&b#4m!d{6$@}tJ|@gX z+bPK=e4LY>tS2Ujl7EpQe@(^4$g6Xt`v%K6AO#w$mRzn5d0m-wb8Bg+G>WJmbCCe)KPw z7aQaOf(*c&?YhF6rj zSvYka!&!vWH(1g$XW@~}bLI(brR6Na89R8v4o0oCJR5-?k!Ow|n6n7xBvmwFu+%C< zB`LT%DZWOGt>j}XgxCrZu0~7@aZ!F2vVZ|I5aLqtaVmVgmXN5xCGb#hBimnP zmdn+5HygdzoBe;#eGroR7~P@k4%B|=53q&-@DXrjf$M0LJ6*>stRkfCH(0414Gb75>xZ&V$*uCMvb<6?{RPxn{{-HClVHG+@vM;H1tt%#1p7 zDc8Q}^7OLBLs-TTg}an(-UM|aR6L=~>S7A|NbG(%aY3sG*v}eryTZEh(*OV<07*na zRME5n7-fJV2H20M8^^KC1u}np=yyVoaM^*BgLmxRoiy=5?!*+kWEuX zd(Of=Z)hny50w9PENc_XSwI36%{|KZ96P*AQtcv~2F(8sj=RH@Tv-b)o!%=?a4*%g zieev<#76|t29CGRkls4Hw=Vy^uXxX3n}e3-@m6r$X*BB~#{sIqwI_0Bb}ynh+XTTO zQM6AKucEjoM%%eFaGB@5GP%}C&=}DTQF2X^?xDFyO8uq3WJ#IXlZ>BKr4JzJLon)) zB7Hi~Q;T7hClU0?@FuZ*oUNEbFk6u1Vm`56PV7phe$Y}sq)|Flq-F)72J{0dsWOFF zCc=5ysBB`q8W*R;#j6MjD(o9E`jwWAm~75Fo~=D!>AYU=`2+h{jo^+*pl2iMjp5 z|KadYmO4%s+xkN$AB$8c5KkJ+Q*v#8B5ndf>`lOoQn_oUyg8$JBsHrw3I85Oe2-%; z=h>lMc}0O?vHAmB*iYj2!pW0qS&L@dRFP-HI8IZYL;&_q)_*;X*T z9WI#?sX%p~;mCG*1gcFG`-CVyAP9G9qT5{8jm7f-F@_egk?jC^;y2}nxw2a~$X-p?Mt}~P4D!*t)oW6_Y zpOI3|$&xJ`Z(Edl<&SP#?R_x9I9J@y6m`Bte4z3svu({3LFCtDCmL^pBWKgiCCNlH zF1a!V-ykP-sA=74)E+H$P{-)YpuW{mI@9RQsq_XFImksCNC`?@oCN(^fsfCiBx~>q z3Tk3^N#^lH`Q=i_<@yH@@NS+h9>jQv_jgdeAA)!fyxwq#2^c>TW)jV52NBlMp(;A0)k7v$gS*Ekh6Itf>1a=pd^8wH7LsI5JzW0Te z^IYRJ{vw4xEm3Snix+L~8Jc(rV9%9o1OWD>6MV%qmN`P^FXa}jIlYtOw7~@29EvfG zr0wM79)dq1!#s_m?-K;O;QyVGa^onx$akMPiWV8tH7xspC;;T%Vx-)ABUc513zKt4 zq6K2Rj~7FmW3c>HvIso9vU;xay*n9}X&7xC&0a>b#u6zD;?#Y!^B6RXdjT(8MRInr zf=#SoCW*e8qCIu^PCUUgw|_^WUqLcHBdwtDaWqhw#_?8<@YAx##QNE2y*)? z zmzGv8!I&v9G2*od9j7J3vKR;rF;PKGX!oj4MoKOgS})e#UvBn60S`ib2x>b6&uR~N z53IlsLt*w%1TdZsupbU{0Pn{j-ls0MS=W1ucE>6XrW<0jHLbC9*ZPe8$-n3h^@DcM zP8Ob9+u3r*&F1@q>8iG{*2ICQ{_>M25j}6PZadtI0On-k01OX;z@$LFV$7e$?i%n|_- z?0o_sV86?i-+O~MzVM~Xf0UKC2%~|%a!3$wVtLCr&S}2u#OXV6cz2Dq86;~J!&!&c zWHOexvOVZ|(N$q+ovT^Ja`s5VL$Y*}AUH}j+=fc;qZRjMl|UP|IEo9g_C}&R6=v+F zq+do$PJ$&1Dt+H;)QCVbAW^se0(*<0b<4E=U*VMuUfRnz%K!Tx*_gyUD%?(o*Gn*+ zYC=y2b;Lj)%B1${nEhFtK|QA{lhKvIs*)4UbeItNN`QQwNrh$6;c1j46(KQVYt-!=ba@elaH%@Xtxf`6go1Qh<57#z+vgJQAQ?_Fy%v=`FN!uV8FypJ!cC9~fp z;6~w;cZs+KP1dr`yk@YDvZQZcVcx;XeGI`U5n!KxP*T2_S1?Hv&5?Q2>h!HpbT-R6 z0H;nO82xC*tSNsn-!;OLjKZm-Sk{W!zE|K|ROvwoT);ACse-M1=Z@PuqsbbBQ&w@n zpfNVox*LD^+8@63M^<>ML%!x(sXvitU1a5cYiS1I{%b?aoxkKjoOYwhzSEd4G}*^0 z{im9`k4?=_jZIf2mD`f669AzoeMhL>OE+JXR$N!sd}?Yv$u2mO>Mm7=YlRW~z^%pk zrKR;tYulIRw!6~mL%IG|YkthIUZq(M)y9YFn(LZ6U`?j6tZ5o=-kSFo%V>LrtY`2& z@u+&fq!5O~{$KyMD)~h&Ik}JlYm{PJ~VSoGG;ynuhQcE<+xfgbcxc;h7QVovUU zN%@@FHcViTp=c8l^^&t_T&?d*CQTt|11QEqPX3z1J1$U-0ds(10_?Y4{yBBlU=nEx z^bD@-z#BRWMOL%S%Vfb3SFz5L?;0(4HFbB;p39mY8MFZYN?|;e=`W0V-#XgAwzvP@ z+;$%+JCtPJYE6&n*6URBi6-Z3UE|m0_Rj#t%DNqe@mOX!ljwFu+8tH)MQP<_dDX|} z)|0%VBc<^=&2ptN9jkNB%>`fD+CFu3eQxh~tZh6}<=kZCKI&{&X{H0E{;sU*y0&hw z(7!+v&k)(5myc=n-7s=3k?Dv>mNB{IC`$I9e&WCQTQ)w?&w|yapj+kmcN%iPjyi2+ z4;h*7Gidb+Qlpkxt)P@kh}q<10qkWaCCSP`=de*aI#NZ1*%ajUxB16oC8zUE7pu>* zKL8c`9mwK6i~lWjKLoI6jz$;|{7}9Jg3q6*l*~3|t-UMQ9Sk2$)gI3_KhM&h{JX_u z;9okw*naw52_Wo2M>&|R+3fbsH)YRO$_Im-XeK6$9xp+>kS6`CLcB;tzDP&EDPWQt zB$7^9YDEIB`wi)B9N{g21^oY%Mz>Pn9aZak;iM55d0MJjDJYss%N~M5XPb_}sSDY8 z;0MN1Qb%Ew5fpPlpSR%-%qg=bzz@)bn?Q9dYtG9nHuQOGw3K526-Tv`X}+qgzN)AO zxqL^Gd8IPks0?Qi_W560n!mQS|K8T|SXy-~)!n6<9@4B=D$}vb@TIo#TU+Os){e)T zrfp^RiBx|f&Ds}gw`IEP;>wHCn#YzlkoET!`YVn3N^L%p8;>({Kee=h?gH9FZR5Ve zaHGk2O0`_8O}moJn{Wx>{ZS~o#8%AVxeJ;41xLYqJR4viPQnGTlpu-}`0-83U;bvm z#}{*v)glP{w;Ixro;Gde_8Zv!25x%>qdARHs~|^37%KxV!M@31zzTTS95vKABz zC2_gkv_B9$nXbQF?z~#>x!LUd7xuR?>fi0gupfyqplAoVJZNlZyi_n#tz2w1u6KL( zMoIyLkLQ{plMkSs|6b-#zRUi1qQ|grKmDWLpUgGwk5;U96)ZHQ_xgBwVz?mrXKCWk zCj4tVInGH=D5NKP7)f?&f`bxY#DeEy<3o5<1rFDSqVy$^Cp4KWuEJ?WCQ$5g7r zUAKFt)3XQQ~ZXtR;(KH=Bc73M#@G;&NZ}0x@OIg zw@eqGN-}l@sXOV}0Q<|bs zeAED_%qQyXFSYgGTHC+2wtcK`-dCAU<%TPn{!pB;Bg?ujuDB|#xo>C&*dI!>?$kN= zO5=&#aG*3i)i!*rZTi^I@>JWjpOSSh%)Cv}Ux;*@Oy!k303_rrTDmAoUBGb`WvNS^ zq9y{XQz&~!F@$RHlK^uvyd7pEKf?DZOGd0aUYLYTr9R;t-ZV5=y@K@d4~TE zU?02r0hD>j;)Pga5#|^a@B}k8s-;%bMt9NfNZH|Z-O*gr_i??2=Vaf0@`v)D{2}!x ziyg6R+v$AU;Y`E!P-OkBZ7?d!WG6D?e^er0<`CXEsR>2&L?0v3%Sa3|;a&#JLrV;? zVU=P`odRE_BDRpogURISw5)ZPcT$!<2BQoo6DMWbC5LA+%{T}nPr|7KFw$an?zTTV zXULr*@TQ2I`E2WMY1LA;ZJw60#1OA)4Ocbw7uB_^*?IFc(V;MPhpX9D8?Q>M&-}%Q zF8?f5vP}>jk)Q)Ax7qT0Pw>GTee^~yEbeWB@SHBcAVVwOx5(lfPv9<4cJD8}EsAc^ z<$GlD5k(5^$OO*L>OL$8oD_z)GjdnZykoNDf-K!9rmSIjm-eCyckrSxd|eb?AxU;{ zApJvmatX!R*IUmDg9mQ^6jwfxOqpN^XDzl`GH2Le9imHX@r+WIpyD;c@l%`;8&}Rl zRr66zGHiD`Y0}J`wsHpatp03XuYuc^%BWG&d;*+>mZUe^8kW86O&sr=f97@p)CsX?18yI~*=0%}+`cDo=&3M#VR7!@xEB=3C0Vjh6t3g> zHwC_1Pv{yXKu6IEQ3#!!j1z2OxbtY{p4q-{D>`=iceC>5k*q_K_?j#|CV_Csy#v2h z6ul{m-1;IL48%OJzdBJ6a9dZW{_*Y7)-syU0vJ~X4VJ@72}kmf@@U;yI%Smb#yA7IZK zk8&qU1kj95je4$0zt&~n?hoyaR|7U5%{POL2T(tq|Cj7P!{2fGZ2BOh*Ss@QHql^p zrBa!RKM9k5PDj7A5Z~B|Z`{P+I0lrwczl{n0 zcg-ISu}8xUVE0DDknE2}*<-~#p!}1S(z%Ar)sFm~K0gR-fcilBV_>%eXZO9jLpT3o zKO_m~i!DQq4ub^GO8Oa;c{S=+BmR|{_{K?z^U>o=c**5Fc!dBoM3e;!Fq1$J2r`nR zJYp3Glorp!Rl795sUZ4^Qa_-6^6 zDVAj2QM7C?d{5$nGBHl(ZP^QV3j-@@IWutD4xYP-X01_$S5E(#!+Y)yEVH2PZAS#* z4wkz~72Os19}B}zg`pd(XAds~I6+5RkfldN(MM14v$y!OC-}(|+M!4eiNY&l$`L`l zj^>_aJ1$(I3wzPIrEnQ106K9_k^tr3!0>M@1^2$_U18|aAKgvS?O^$!Pn?mZ+Zg^{ ziuN{Ga_Nn(>vJc7Z^g6Q$eedr#;h@aP-AF*gR7@;s&EV&EGfW)j9#-8JCI2oH?gMk z1v57Bh?PHJ7IbB@LAq;7rB*A*em*XjiOiwHa#;vF=md1Q3LEEE;K$3QOU;>^?;VH3 z#piR4*Q;H(o4wDm{@L!`?+oAW4g;^pf_#4TS@zjuQ67kSlOX2Rs+Za<+uh!Sk&>h7 z`WW!7P@s>6x|3)4|B!v~PEQHtjgx4PGn_>>E zMu4c{!D>YCDgmOLiwHB5!)%zJnH1q7yewE12?vNitu?HKqvL8FbPfZFyP!91MoX4* z9aALU8eKd^;I0^Rw*rw>o2MVc8i7$qsDib8=eo-`#FR|IsIz4LKHxXtR$9(9oVJPQ ztYJATRMCYiaN_ixxr6f@`67b8i|4PSInctaJoiO`@7f(ax4Jg5T%g<6B*{53Wfv#7 zbrjtPO7DD;TbF->EZ!vuP6^_Df@m4ZKFrEJEes#qy~ozVd7NMa$3G&b?0}+qaqK zlZkE^){q=mB0x7taLsbuhjj9knLT0RjG6h94r#AR*rcX4t0|2dQl*0I6JQJZ7$X&) z&q6pkNCyY4CM4QrnDJ7{Y8$Y7&XcjSi-nf!wYRsM{kPkI?!!>q9f~!m-qRtM7lo4E zXoNKeG{00dTccWR&0gzv?GBe5PSpYHemdX!-Q>p{{^|El&~7x-+IB1yw0TL^!Z04*>)}z=pe- z$rWVW1c5WH%vcSE$5QpPWWgk$ex`9f7@mb*aY&g&(R&jJ)AEc}y9cEF0W@?5<|tLL z;qX8^FDb$)ICYvN*s&LG7lsznjN@?H3Klw=WuCx0&i5QT3Qs-31-@zx!#t#jcE~AP zEcrvQ__3n;b9L=wxa3%L{LvTQWyy}oDHjy^Avt9k z%|6yyE`o#~BWe9f_&H4`KzB7Ke*{fiMAD~7g7ti8y&jNIAOph$&PHCr zmM5@~Zkj;SwrHYFM#`2X^|rL)uA=I$x^5@Kav(~(ROnA6x;=&Nsj}vCbL-cpmQUri zCvyEms_C=V@|bG6R2jZi*Z#A${U0FxH@2MW@^93pk7?%n)SQEq^qa!K$A)H*`$5}H zvm8saZWY;=>YROf)}6=ywYBqObK9q;*2}{1p)Bhb{DEoK3#IWm-Snxh;iX3M+d2#$ET78_qGM7Jn#bt$+u4S6`5xm+lpaY%+tf+36O zoq^w##cs>sL?pO~1n*!V+#Ga~0PEnO%nXDa6YtAlZ1;H2XX~$5I-)urg?{<6O zZa0Sgcis=*?~VKrtMQD{C~K^kJ6S52tya#r7}nnb;G+i+@KC-#UT8V_&U^zKZIANx{HU-u#W9^kW+O*KERTH$5TBO043;YDI_!F|t7fZ%#qJRbe~j zn07g~U5*1iphbphl%UH1_B=!p3uYp}DZ;`>P_z+&Y{Bj8=PL%1h`ou#QNDc1Svak; z^ukH=NZM!;VIftw>F})O*hkTfSrl`O#9MKAfc5J~(k3v>S+?{j7(FSi+|G9|LK#oJ zCraJb7#^x>?kj8WYa92B_Jb7dwL*U;%h;1?A1iBPqcJTXD{4!m9D zx0<@&I=cSR`S$nb_Dj9}Mr#JxKcJS=N=tbfq>P$@P~m z-o6NkYEZe2le5kX2Y;1XI?Yyk1Ur5pRlGuY3{y3I9uGTLX zMP_u?4={=&37JKVFB2lVG^7?8zFkh}%VNyg#Y-Ofh($P>C;njMcIsFi8SH=v8x&z& zY=naWx3LhQAI&tL%r~Dx(XRD*lIC)?^J2Agd#Y)?Gg2STwPo;S6gV^f zCrd!Khm%NSTq%HdAv=EnNu5E^2a<`?YTdHk zGiS05V42gvF%h{NuEL$7zzhg@RM8w;b{r}>t*YH|d6yZI6QO3Guin<^@1Ym!G(0r5 z9#{$v#A(+u{kbgjK&pMJr~*X%+|&xNKUNs-(@bA8@}2F|LG<>PRDh$e_PVr@hah zkD7%;IfAkLlnI-3)F%0m&1=!n8kLmd6ns7)Jssu%Zl4Crp(JWaZ@Nm1ciTM>*js(i z-X6mK8Fk3se>Zv%??+>dpQ#4G8#dp$pfUXMs^giuqxnXF`uS4(#Y*SVV*5~&-<`(K zV!{=u7ioxJ47gW$q_{$QLJ=#Wh?x-LBo_0NL4+&gC)JDL)j~KB{6-P7LrJKUpqk{U zw<=tRn$V%fzf%)B75FwKFtONrDW+V6@-q^hlmtC7E(aCgpG+7_Q7;q}_VVR@350rB~&D|qG#ofY^`Ebav~XPYQEAxS_G0O9c1V7>H3jy=Iqj=YyA9puP{P^@XC z?y#h0BT_yl&B%HE#>a+7IPj*}qMhC>Mn@WDz*GCx!vFvv07*naRLmd9;g8#7(+=5? zMckLeZ%w1usmLW#d;tgP=Ad%O2|3gx9U(rA_-3@xezW=EerND`>h^XQ8pykgxx84h zAHLlKz(dskVX{mFfL{bs|JJ$NA3B<-KAUMeTWGmlX}ehK*qvzs9wFi09%~O)A7nt?h#Q8eqakP z*q}=;-GNJ2@Twqq;qb2!p!9!1mYz|h+c?3Q&U_OpIroN!x$<6-yqh8VkVxvM3fAqu zbx*igmYMPT*DwcJDMDAJpgT3BUIXi02EE(B{$Sva=ZPn6l3}axJ@9&|)aF!DAqVbY z!iu;kI}2{4B&e~kQ)x-vRr!}IU3Ys!&#UupW5CBqAIo^V!{4p`-tZ4|)yjnyJ*e@! z1EJ%|>Wifo=m7P(mieCY)`-=Y!S{)9#X@9zDzQ&b`;bLxQDGY8s2VZ6E(HOwZ;_$^ z(Sf0Bl%N3KAiOn6(apf$iIFWp>NUhBDHc$_OG9W?VC%)G205l#if$BRDut*hH#x|L zIcUis4H|K8QeiJ!VYnF(;R2yaUCso7y+9RA3FPbk5S01^3V{7QMX;#W?N?N-6%;Me z#p^WDyg#z%PJQ=aRqKl(LP_BB{?%F|qtB_C;u zC#w7mFS=J7zj}*5dBUIE(ew1&T{QQClyX6q91%p@Wbs{L=-v~)cLwhZg4;w92={js z`6V>!C%jI}c?gwW`6FX|<&Z+#%a#nmC?62ixoq32!#|Q?F~Sp~9C(!o-J~SE(*oWz zd$JgBb*vsEuUF3n>>tS!^=9)LRg||Gv@$UU70?MN5q^LSEqEUiuRbcAGND$VmfX)kGO)2O$1*S!cZjoTRQc109 ze7geQ33952*rLETK+z6WBSMx7;88Zr&q{RB6P?r~6EQv={Tg83jwa5jbeoalX`^+5 z$X#HFq4(u@L!05~gh;haQ21Fi6JUQ@7&>2Xcpfx5 zOO>9{q&qnNZNBR%SPZ(w$56>3KlPF%d7vq7X!2u{=ti0Kr7-fTF#Oq9dalpk`HsEx zkRV#e3vLPmH}1%dCv@uytdXTV1V~QK$t(n)DXu${K4@S~|-MTJY)MuroZ0Y#}^mdhElvZkzzDGOuL%oxd`_h*ut<>-1Ds#$?;SK`_g zm?j0LCI#p`yj6l~hiDCy0NEtLbf^doa$K8|_*PANmr80@;2Pz)Dj_PuP7X4Yy^JI~ zIWCU^tWA6t_O%TDt0eK4HWYDQler!#p3Kez;cb@8pA;##e330*cvPr@-g}6o&1teW z3Ih|e^jQ$@5wv9>1Kz-{!!wS9mS-&?>D$KqD2CQ8QZ7=(TR83}jyDb-njL!ufkRJl zS(LVnWbWblfc*Bj4Bw$54H?*z z`NEN0@t{dGo+lZxir?!w9qIHYHMupFRIk96h)@AO(n5#p$O!`Y3s)LzXQb+Gr#}Yy zaBMth@caGuXcr^>UQF|QBKlG-DNnM7nlcHM{H~=vCs!oDzmSI5WXp-W9=0k~2 zhOHJLK`Z9Mz4SykHNj3vut8G)Dh>5g4*!*#@H6?v->MO~rPR#zPojD8@9LwvwjbD-7&Ay%Tuu6pFS;Q)7P=>b4-T zOHR39DQ>yyQ`aQi&A6BZ%M zB#72je2;-PXkv`yGRAGZ(R|*ZncbJo?lm$7a#-Uw!Bl~y-@^M~V7|+wH7KyPGEBRM z0K8i>_$SJ-pq#gr=4RB4nKeUBZV)*svfg$wNF38qsUq>46Hc{2eHgyICYN5&nMA-jC=F?=bzpa*;{P+ zzA$x>BHGJ!T-MZG)zs}~+xI}UQ|Pah*}Fo`ZMgWUzWJfC<*~eGU#`E_n4Z$D_vw~% zmEl`O_3s^>zjt>2*4cGq@!X}EzhvZo$;`jiswXBr7HU=GxxLJ zey7VnRvNxm)qaJ>3ZX-nfYm>d>+iJI+f>V`%5;)x{o34eRbJJvNL{cyXY^L!^Jnq= z0R(N^;^<1(XTV-Yc!+it94Xa~^qTY&xekjan)~TPbmQ zw0JWu*+7byAYVjGDF>6a_q)(^?e`H}Xy)eMvVR+Md4Ts1yCXkTDlzpMT&Ioo^7?Yv&1uvwJ$ule(rXrWWY8Nl@5?WLc(K|tQPb0k5 z;NPl=?=+-XX@}@uDMVKAku_pWg#hhiCb_5y4pO{>5^p8OWny1xkiV)Czse9V7;pZL z`Qchz-!%Is^6`C~@@eR|%RCg*E;)$d(z|JnKWpB-;+^NMcL z%%3y!zhv2Ow3fR(_dh#2fF%5*t?P4r^NA+=qYixKc+}gERff-1)!*7XzqNOKZR@4Cm0Na@h+`-h2UX#>Sqq3&wMKJvppe zIk8?%=`nKN12>?el*@3%VoaF?-~S}Ia4cr{ZF z={WHDIlPv1dJC{nN?fr3X=fx^=t(+if`**X70J9_?YPVx*fTOIkmk@mqr8OWwi+t~9C?xIt;=#k7g#Y1M!2R)-gf~}R4Ix-mbDsq_^TbhEc zlo6X!sa;vD_Eb^_r1PW}C80Hy*r6dbD)3Q0qL7{Jq$Rj%Nlr?F8UMzFk27Ll8*#5Q z&@a+ZFEl{sVZZR=e?8BG`F19 zHf*R3+bn>6`WE=gWWTGdy{@g>&2<6nPgBy*QZjbfnzMY*eOdK&xctl)U1qCxN#b*= z?360s#fz`a&WC8lLvh7Zr2JHCJ!Px!#F_VEXbIj`n(0ej!w1xC%rNYazz(r~XWeB^SM>v{!X-*dawf4BY2{=o+*;0@jWF@*!7|M!eHU}lfm z`JfHwvLdaFVaL4 zRMEP}zZ0#1wlh+NQ&i!a&2>^!yI&Yw1@bOPU1Li3%=woUHG9#j8NOzPDA=P*<}s{| zG~0Dv@I-u8_QdO)A!Z-OLySBz<25jEYW3KST3;ZAnEPm_?OxFcmBvj zu=v3j-j`?X#M1vYMS4UOAF}25{_veA_*4|R_e3`Fq7$;@hAIcYyMq;68>~;>=u@!d z&L2J2xPwOW2V$}hjp995`q*Ip$g=?aFl6P7*m$#U$(WTrYGKXTg$o|( zOrdJnChatEE99hF0DLCvoq^M$rG$k@KMzrsf~$}bK-CY6F+l&lTxbS1pOR?Azt-Vj zr(<5|u)k&j1CM?QQo9EEQU?1)ob(Ip%}<1%|APG6pOXLjzZmg-&Cq$lE9fHa;Gx0SHs2gHuo4sxCr7tUAW>Z+$ybDR2w!K z(nX4J&Fa{%tXa=>%~J#$6!9dCzM7G}?+R?XgToxz6r8$-V^1U#*OVDYF7J^ixSna5 zLDIMIJP`9%k*q_7?%o@@Ebv_v1XkDz5d1Dkk_(DtAIHBp20>0~JRypo zXo`;v)dfX%#!`IsM?MFN!B>yo@E%!mNtHg(<+n819*%dNY5MGseh!sA`l1)vwta%& ziYB>bC@+AV5JhKB*JOsVC!RFLSFJgUR&qW4^pxH=`2Ga4{^hUv z*n<|{1Z4Ci<95lsTe;*>PrFp_^sKj;v_=J?Oo%KIAUtfCjug*@|K!i4AB;q=*SfBt zRXPCmfoGEsO8))cAT*{60S~#n82d+lm~;q7Z2Vy>zt_m@HFKv66>~oAuv7IeM_48& zmdJ_ka>N6Wh8>@cW|2ROuZ}{+X_PU?@(B!n?HWuR+jhN4wwG=XD2x>%7ry42yeC2!EDx`g+H2~vIy$E zFKyf*nRLh|3*;kKUbmjnp(R&{kwGrJkdtJjCJ0e40vWXZ;pol!+uO~aSiK**iH+ev zX+9?MG3t*zK=2PiKEL0{dZ(j-P5f$%09XgfJR6Zbk5{Zg9z3+?4!$*=x`{^?Jszy68v z;?InPzshkxS@~~@weSubVIs<$DQ5$&j~BDYphW}Bf5TtO8g|orW%AWfWI~rSLgI~+ z_`_V;Y9O-g3yt#RlQ`Z8nl+=hEP8yy4DmFYIfkaMn{B(k&~keA41&IdWltuNH&pu5 z!r+n1w;EM&0cAy9H-b#LSO=Rg&x@=J`r8|z`P&2knz4O|X?~3B!_P+V;W^(oN>DX2bW0kg zL&q7+SNEA@9Xdg23Lz}U_vI-MD+;!}nX5(GUX!p&Nel{6MSPTti*|63Ih2G9;u|IM z1wY|O^2@&vUi=sR_1{?WKeChlE|pWV+hOmfM-owoimQYKAK<{P8mYdXAR~>w||VD zGK*$SKrgs(?iB`C)cOSkZ3W8$V6V#44+?|(g`vf?91s+jaGddE>a0k!=ML?=16xM> z6p8^fe+SQ7L9y29DVGlKS%Lr57gvNk^4aLg{^QM%{wHe zT#=y_o9lSthSfeM*37^d{d7o;*qh1Z9PdMa#If8y8Zy=l5qQO^+5kW4@#Yi-g-lXDRm09`wW2IMXT>$(0 zt^WI+|1qKm&E0*U!iixI$^H)^4lKY!S1TEv25FaG)|ko$oDT9ZgI48Hx&5@PV9%%D z4e0yKqJS8eL5R;HCS?#4Rp>Vg^h+83jT9dzz`V}jpmKyLkCs$nqP031JznNmF=wib zH&M!-Eags?aVE>SlcoHL68=Onf3gHL-b4v_!UJtQ_8dH!EaQ!Z+1)bnbiSuQ!`PCH z>qU^?p=skr>q3EdNT3`?(MIvmMx0fbcbqAnBe2J?tR<6ur7$?JHBBLDOE~TriZLfm z+j9qY3&RWPreV+_2)r2-bBe3n^@I++kpqW!iI#G}k)Lu@fb{#a^pDlGk9CcAjZOPD z&o)PXqcUDGK%w z3W-0C=WJP>`~K*mKia8CSH=Aj;3PLF@O4UJg@QC>;Y~Rti$2X_Fn!sdvEkKPw>SE*Kl-pY zdcQw*zaP8qK_7p}CLzKSW_^aZCRJD>Wrjth`ZWG()c)96b<d2pK&@DEl&(>)c>eX{~s#sIZ)yn5; z6|>M)HCL+!*ZJ62^L5I(IwiQyf}0xf1o}8vt?bWG&Nz#v?CxHcXpAl%p^6u+j*U>s zOltN5Q#!{}ZhAv&zQ`m`xx|)_(?v^puGLV3;Cf=n|JL>X+uQCh@48PzWxGn_rO~;a zVV#ld_MP5Oo$o%s>;C%o{e5M_MULxpzW1BW`!ToZ)?5Is<$B-!&z_$D?(4ttK+F4o z&-eaj_uX3y@7$sP?(O|&clSRB27Y_rePu5EY$^IJ&-XdkdzzJZ94+2-dUs@*XX)lG zS>|?5{zZNBMRn7lz0gF(m#Jv2I!?2W*P!E1xYcXLSxe!}`G{ey(z0G^S_)>(`qIao zsv(>Foq^Y?W0fk%P9ec2B)C+Jp0e!2iRy=)eu&uz6OTuePsdXqk0u|Fr=E_dpN^(J z9#8+f9Zmnx=d*U$jirXP7KeU3YTxfD|2Wb8+f?7vK-+0k@kML#_4~^0M*l)b^m23H z)7i|o%Z1Npvv&t$w>!fZ>peH?AI_KB4kjx0N1_Kqf!zV`PJiJ}uV<&v{jav&>)!5j zZ9jkPkF`F}E@=JFKjw)&aqaZGcKh550oQJI({5eUinD0dn75K`+bga*>3FwQ6xqpv z-Y#(3*0EpRxM^}8THISXj?Na#YVA6-2kwhX z?gAAj-s1bWJ&%JUABRTIN@}lz75Aa4he-8Jr0T!NC;z{>`TsM&`0%#p+*kHcTz3_$ z*m4IqL&XpML!ZYczl=?N>KVL^)PDQ_t0eQEHjXHc=Pzxgs#Vh}m8vRIsTwL$peYJT zTBsuq7XldH2jGifeBcX$uRUiy-rezDULU*b_0``yb`mL(K6?7j_xtAQNi)y3+J9~d z&;A0do2t*Ro?mpLu}&-w|8c_gSMtUdhX3Og|I(pHqxwa(n@Hl6d*MLOx7C+B;&Vs+ z=?3lmm)>>WFFmDxT_=B8D?eUtIQAKrFTB37{_rd3&)@o1e(*f`KD7Gd)r+O#>*d@1 z)zsflGLDtP{#thXx9s-v+s&oev!BAhKRR0aX7};e8;`zR`R8+`ER5mz{^dyYUP2H&PgUx?UyL+&53!83TBVcbE^>Eb*gl)d4TSIrY2 zas{{}FS@+e%eP9dz`6s1%P(O6BHp{b)5~{KItNYzvM-{BqP#C6r!s1>+$r9oi=^m{ z2<{L(@xx<(H&-z4D&~Eqlg$ghGs%D6_JnanpLkI!tK^GXzNn^i$amHWC;E{@FC0?? z7e=vcy{lN2>abeVlW8p&#nB*==!E0iS=_p>%&Amy)y^;VNE}D~U<~;qYA&l6N+=u^ z@ot_Ff9&JKQ8`~KhtC7Mj_2!HJgh|CG@>px>20M$Tq;N=y=1~mCw+9%OT^uk z@X=l1;Ksd|I@w7c?}QItr-FxUIjZqI9?$>)0cc4?K~!?3u2}20iM~YkC3=ob59E36 z%gllgVjwXOOvITYFa@^DQHIbQOX3JYTZFhy6=b)eA;F2&ncCg4sbNL~Wz?63UD4EA zrq(o6&Qw@KVFxl};E9X6fc_lDP%t00{Hgw=M`d(|=!2#qqFxjB8q}aco3Ld|vdI98 zWUM9}De6#cTQqCaz@(Uwh^Cr0Q8kN$77d0pX8|~o)v>JDNE(pywlNDW28;v|n`1?_ z1vF%vHVX}s>C^}V@)JdyDcZCx4;jvEFh-3s>Qt{vSX^t!Bb!GS6#6yFYA|CGj45Cf z?370{B+n#erl_MPZ&P4GbC?m$;T@)uJeAcco~dXyXpLAn1ue{o;U)-86=i}XyzPhv z_@aqLTh?0ws8!o^U1bTqNex xS(PAVb;PNuO^5o-?$1V;0p`EYnSBK7{{ebUH)u=kMhyS}002ovPDHLkV1m#_Z@B;f literal 0 HcmV?d00001 diff --git a/src/main/resources/images/download.jpg b/src/main/resources/images/download.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea52a86ffa137daef1bde6cedcb75d3362409b86 GIT binary patch literal 5744 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 I#lzhH0E&#SZvX%Q literal 0 HcmV?d00001 From 29d63f0dfad1362934b00dabb67ea3baab448aa2 Mon Sep 17 00:00:00 2001 From: nicktohzyu Date: Wed, 16 Sep 2020 15:28:20 +0800 Subject: [PATCH 41/44] refactor fxml --- src/main/java/DialogBox.java | 54 +++++--- src/main/java/Duke.java | 145 ++++++---------------- src/main/java/Launcher.java | 2 +- src/main/java/Main.java | 30 +++++ src/main/java/MainWindow.java | 55 +++++++++ src/main/java/Parser.java | 156 +++++++++++++----------- src/main/java/UI.java | 44 +++++-- src/main/resources/view/DialogBox.fxml | 16 +++ src/main/resources/view/MainWindow.fxml | 19 +++ 9 files changed, 307 insertions(+), 214 deletions(-) create mode 100644 src/main/java/Main.java create mode 100644 src/main/java/MainWindow.java create mode 100644 src/main/resources/view/DialogBox.fxml create mode 100644 src/main/resources/view/MainWindow.fxml diff --git a/src/main/java/DialogBox.java b/src/main/java/DialogBox.java index 3e8fb94ba9..60636ac988 100644 --- a/src/main/java/DialogBox.java +++ b/src/main/java/DialogBox.java @@ -1,40 +1,58 @@ +import java.io.IOException; +import java.util.Collections; + import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.Label; +import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; +/** + * An example of a custom control using FXML. + * This control represents a dialog box consisting of an ImageView to represent the speaker's face and a label + * containing text from the speaker. + */ public class DialogBox extends HBox { - - private Label text; + @FXML + private Label dialog; + @FXML private ImageView displayPicture; - public DialogBox(Label l, ImageView iv) { - text = l; - displayPicture = iv; + private DialogBox(String text, Image img) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(MainWindow.class.getResource("/view/DialogBox.fxml")); + fxmlLoader.setController(this); + fxmlLoader.setRoot(this); + fxmlLoader.load(); + } catch (IOException e) { + e.printStackTrace(); + } - text.setWrapText(true); - displayPicture.setFitWidth(100.0); - displayPicture.setFitHeight(100.0); - - this.setAlignment(Pos.TOP_RIGHT); - this.getChildren().addAll(text, displayPicture); + dialog.setText(text); + displayPicture.setImage(img); } + + /** + * Flips the dialog box such that the ImageView is on the left and text on the right. + */ private void flip() { - this.setAlignment(Pos.TOP_LEFT); ObservableList tmp = FXCollections.observableArrayList(this.getChildren()); - FXCollections.reverse(tmp); - this.getChildren().setAll(tmp); + Collections.reverse(tmp); + getChildren().setAll(tmp); + setAlignment(Pos.TOP_LEFT); } - public static DialogBox getUserDialog(Label l, ImageView iv) { - return new DialogBox(l, iv); + public static DialogBox getUserDialog(String text, Image img) { + return new DialogBox(text, img); } - public static DialogBox getDukeDialog(Label l, ImageView iv) { - var db = new DialogBox(l, iv); + public static DialogBox getDukeDialog(String text, Image img) { + var db = new DialogBox(text, img); db.flip(); return db; } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 8e4eeedf81..17a7eb706b 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,20 +1,14 @@ -import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; -import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.control.TextField; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.Region; import javafx.scene.layout.VBox; -import javafx.stage.Stage; import javafx.scene.image.Image; -import javafx.scene.image.ImageView; /** * Main class for Duke program. */ -public class Duke extends Application { +public class Duke { private Image user = new Image(this.getClass().getResourceAsStream("/images/DaMith.png")); private Image duke = new Image(this.getClass().getResourceAsStream("/images/DaDuke.jpg")); @@ -23,6 +17,7 @@ public class Duke extends Application { private TextField userInput; private Button sendButton; private Scene scene; + /** * Entry point of the duke program. Read from storage and creates a UI class instance. * Serves as intermediate between the UI and parser. @@ -30,119 +25,49 @@ public class Duke extends Application { * @param args * @throws DukeException */ - public static void main(String[] args) throws DukeException { - TaskList tasks = Storage.read(); +// public static void main(String[] args) throws DukeException { +// TaskList tasks = Storage.read(); +// assert tasks != null : "error initializing tasks"; +// UI ui = new UI(); +// assert ui != null : "error initializing UI"; +// ui.welcome(tasks); +// String input = ui.getInput(); +// Parser parser = new Parser(tasks); +// assert ui != null : "error initializing parser"; +// while (!input.equals("bye")) { +// if (input.isEmpty()) { +// input = ui.getInput(); +// continue; +// } +// parser.parse(input); +// +// input = ui.getInput(); +// } +// ui.bye(); +// } + + TaskList tasks; + Parser parser; + + public Duke(){ + + tasks = Storage.read(); assert tasks != null : "error initializing tasks"; UI ui = new UI(); assert ui != null : "error initializing UI"; - ui.welcome(tasks); - String input = ui.getInput(); - Parser parser = new Parser(tasks); - assert ui != null : "error initializing parser"; - while (!input.equals("bye")) { - try { - if (input.isEmpty()) { - input = ui.getInput(); - continue; - } - parser.parse(input); - } catch (DukeException e) { - UI.print(e.getMessage() + "\n"); - } - - input = ui.getInput(); - } - ui.bye(); + ui.init(); + parser = new Parser(tasks); } - @Override - public void start(Stage stage) { - //Step 1. Setting up required components - - //The container for the content of the chat to scroll. - scrollPane = new ScrollPane(); - dialogContainer = new VBox(); - scrollPane.setContent(dialogContainer); - - userInput = new TextField(); - sendButton = new Button("Send"); - - AnchorPane mainLayout = new AnchorPane(); - mainLayout.getChildren().addAll(scrollPane, userInput, sendButton); - - scene = new Scene(mainLayout); - - stage.setScene(scene); - stage.show(); - - stage.setTitle("Duke"); - stage.setResizable(false); - stage.setMinHeight(600.0); - stage.setMinWidth(400.0); - - mainLayout.setPrefSize(400.0, 600.0); - - scrollPane.setPrefSize(385, 535); - scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); - scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS); - - scrollPane.setVvalue(1.0); - scrollPane.setFitToWidth(true); - - // You will need to import `javafx.scene.layout.Region` for this. - dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE); - - userInput.setPrefWidth(325.0); - - sendButton.setPrefWidth(55.0); - - AnchorPane.setTopAnchor(scrollPane, 1.0); - - AnchorPane.setBottomAnchor(sendButton, 1.0); - AnchorPane.setRightAnchor(sendButton, 1.0); - - AnchorPane.setLeftAnchor(userInput , 1.0); - AnchorPane.setBottomAnchor(userInput, 1.0); - - sendButton.setOnMouseClicked((event) -> { - handleUserInput(); - }); - - userInput.setOnAction((event) -> { - handleUserInput(); - }); - - dialogContainer.heightProperty().addListener((observable) -> scrollPane.setVvalue(1.0)); + public String welcome() { + return parser.welcome(); } - - /** - * Iteration 1: - * Creates a label with the specified text and adds it to the dialog container. - * @param text String containing text to add - * @return a label with the specified text that has word wrap enabled. - */ - private Label getDialogLabel(String text) { - Label textToAdd = new Label(text); - textToAdd.setWrapText(true); - - return textToAdd; - } - private void handleUserInput() { - Label userText = new Label(userInput.getText()); - Label dukeText = new Label(getResponse(userInput.getText())); - dialogContainer.getChildren().addAll( - DialogBox.getUserDialog(userText, new ImageView(user)), - DialogBox.getDukeDialog(dukeText, new ImageView(duke)) - ); - userInput.clear(); - } - /** * You should have your own function to generate a response to user input. * Replace this stub with your completed method. */ - private String getResponse(String input) { - return "Duke heard: " + input; + public String getResponse(String input) { + return parser.parse(input); } } diff --git a/src/main/java/Launcher.java b/src/main/java/Launcher.java index 6d7bc95383..11dbf00c62 100644 --- a/src/main/java/Launcher.java +++ b/src/main/java/Launcher.java @@ -5,6 +5,6 @@ */ public class Launcher { public static void main(String[] args) { - Application.launch(Duke.class, args); + Application.launch(Main.class, args); } } \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000000..b3cb403ea4 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,30 @@ +import java.io.IOException; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.layout.AnchorPane; +import javafx.stage.Stage; + +/** + * A GUI for Duke using FXML. + */ +public class Main extends Application { + + private Duke duke = new Duke(); + + @Override + public void start(Stage stage) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("/view/MainWindow.fxml")); + AnchorPane ap = fxmlLoader.load(); + Scene scene = new Scene(ap); + stage.setScene(scene); + fxmlLoader.getController().setDuke(duke); + stage.show(); + fxmlLoader.getController().welcome(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/MainWindow.java b/src/main/java/MainWindow.java new file mode 100644 index 0000000000..43ee34b481 --- /dev/null +++ b/src/main/java/MainWindow.java @@ -0,0 +1,55 @@ +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.VBox; +/** + * Controller for MainWindow. Provides the layout for the other controls. + */ +public class MainWindow extends AnchorPane { + @FXML + private ScrollPane scrollPane; + @FXML + private VBox dialogContainer; + @FXML + private TextField userInput; + @FXML + private Button sendButton; + + private Duke duke; + + private Image userImage = new Image(this.getClass().getResourceAsStream("/images/DaMith.png")); + private Image dukeImage = new Image(this.getClass().getResourceAsStream("/images/DaDuke.jpg")); + + @FXML + public void initialize() { + scrollPane.vvalueProperty().bind(dialogContainer.heightProperty()); + } + + public void setDuke(Duke d) { + duke = d; + } + + public void welcome() { + dialogContainer.getChildren().addAll( + DialogBox.getDukeDialog(duke.welcome(), dukeImage) + ); + } + + /** + * Creates two dialog boxes, one echoing user input and the other containing Duke's reply and then appends them to + * the dialog container. Clears the user input after processing. + */ + @FXML + private void handleUserInput() { + String input = userInput.getText(); + String response = duke.getResponse(input); + dialogContainer.getChildren().addAll( + DialogBox.getUserDialog(input, userImage), + DialogBox.getDukeDialog(response, dukeImage) + ); + userInput.clear(); + } +} \ No newline at end of file diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index 9b1beea69d..e1429586df 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -23,82 +23,92 @@ public Parser(TaskList tasks) { * Parses the user command. * * @param input input from the user. - * @throws DukeException + * @return */ - void parse(String input) throws DukeException { - assert !input.isEmpty() : "error: input is null"; - String[] words = input.split(" "); - String command = words[0]; - Task newTask; - String[] subst; - LocalDate date; - switch (command) { - case "list": - tasks.print_tasks(); - break; - case "done": - case "delete": - int i = Integer.parseInt(words[1]) - 1; - Task task = tasks.get(i); - if (command.equals("done")) { - tasks.setDone(i, true); - UI.print("Nice! I've marked this task as done: \n" + task); - } else if (command.equals("delete")) { - tasks.remove(i); - UI.print("Noted. I've removed this task: \n" + task + tasks.numTasks()); - } - break; - case "todo": - if (input.length() < 6) { - throw new DukeException("The description of a todo cannot be empty."); - } - String text = input.substring(5); - newTask = new Todo(text); - tasks.addTask(newTask); - break; - case "deadline": - if (input.length() < 10) { - throw new DukeException("The description of a deadline cannot be empty."); - } - subst = input.substring(9).split(" /by "); - if (subst.length < 2) { - throw new DukeException("The due date must be specified."); - } - try { - date = LocalDate.parse(subst[1]); - newTask = new Deadline(subst[0], date); + String parse(String input) { + try { + assert !input.isEmpty() : "error: input is null"; + String[] words = input.split(" "); + String command = words[0]; + Task newTask; + String[] subst; + LocalDate date; + switch (command) { + case "list": + tasks.print_tasks(); + break; + case "done": + case "delete": + int i = Integer.parseInt(words[1]) - 1; + Task task = tasks.get(i); + if (command.equals("done")) { + tasks.setDone(i, true); + UI.print("Nice! I've marked this task as done: \n" + task); + } else if (command.equals("delete")) { + tasks.remove(i); + UI.print("Noted. I've removed this task: \n" + task + tasks.numTasks()); + } + break; + case "todo": + if (input.length() < 6) { + throw new DukeException("The description of a todo cannot be empty."); + } + String text = input.substring(5); + newTask = new Todo(text); tasks.addTask(newTask); - } catch (DateTimeParseException e) { - throw new DukeException(e.getMessage()); - } - break; - case "event": - if (input.length() < 7) { - throw new DukeException("The description of an event cannot be empty."); - } - subst = input.substring(6).split(" /at "); - if (subst.length < 2) { - throw new DukeException("The event date must be specified."); + break; + case "deadline": + if (input.length() < 10) { + throw new DukeException("The description of a deadline cannot be empty."); + } + subst = input.substring(9).split(" /by "); + if (subst.length < 2) { + throw new DukeException("The due date must be specified."); + } + try { + date = LocalDate.parse(subst[1]); + newTask = new Deadline(subst[0], date); + tasks.addTask(newTask); + } catch (DateTimeParseException e) { + throw new DukeException(e.getMessage()); + } + break; + case "event": + if (input.length() < 7) { + throw new DukeException("The description of an event cannot be empty."); + } + subst = input.substring(6).split(" /at "); + if (subst.length < 2) { + throw new DukeException("The event date must be specified."); + } + try { + date = LocalDate.parse(subst[1]); + newTask = new Event(subst[0], date); + tasks.addTask(newTask); + } catch (DateTimeParseException e) { + throw new DukeException(e.getMessage()); + } + break; + case "find": + if (input.length() < 6) { + throw new DukeException("Text to search for cannot be empty."); + } + tasks.find(input.substring(5)); + break; + case "sort": + tasks.sort(); + break; + default: + throw new DukeException("I'm sorry, but I don't know what that means :-("); } - try { - date = LocalDate.parse(subst[1]); - newTask = new Event(subst[0], date); - tasks.addTask(newTask); - } catch (DateTimeParseException e) { - throw new DukeException(e.getMessage()); - } - break; - case "find": - if (input.length() < 6) { - throw new DukeException("Text to search for cannot be empty."); - } - tasks.find(input.substring(5)); - break; - case "sort": - tasks.sort(); - break; - default: - throw new DukeException("I'm sorry, but I don't know what that means :-("); + } catch (DukeException e) { + UI.print(e.getMessage() + "\n"); } + return UI.getResponse(); + } + + public String welcome() { + UI.welcome(tasks); + return UI.getResponse(); } } \ No newline at end of file diff --git a/src/main/java/UI.java b/src/main/java/UI.java index 40d7d47d78..44eadd0fc6 100644 --- a/src/main/java/UI.java +++ b/src/main/java/UI.java @@ -10,43 +10,63 @@ public class UI { final static String LINE = "____________________________________________________________\n"; Scanner scanner = new Scanner(System.in); + private static StringBuilder response; + /** - * Prints a string of text surrounded by a line of underscores above and below. - * - * @param str text to be printed. + * print greeting content */ - public static void print(String str) { - System.out.print(LINE + str + LINE); + + public static void init() { + response = new StringBuilder(); + } + + private static void println(String message) { + response.append(message).append("\n"); } /** - * Reads user input. + * Prints a string of text surrounded by a line of underscores above and below. * - * @return input from user. + * @param str text to be printed. */ - String getInput() { - return scanner.nextLine(); + public static void print(String str) { + println(LINE + str + LINE); } +// /** +// * Reads user input. +// * +// * @return input from user. +// */ +// String getInput() { +// return scanner.nextLine(); +// } + /** * Prints welcome message and current number of tasks * * @param tasks TaskList loaded from storage. */ - void welcome(TaskList tasks) { + public static void welcome(TaskList tasks) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); + println("Hello from\n" + logo); print(WELCOME + tasks.loadMessage); } /** * Prints goodbye message. */ - void bye() { + public static void bye() { print(BYE); } + + public static String getResponse() { + String responseToReturn = response.toString(); + response.setLength(0); + return responseToReturn; + } } diff --git a/src/main/resources/view/DialogBox.fxml b/src/main/resources/view/DialogBox.fxml new file mode 100644 index 0000000000..e433809947 --- /dev/null +++ b/src/main/resources/view/DialogBox.fxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml new file mode 100644 index 0000000000..435f3ce0d8 --- /dev/null +++ b/src/main/resources/view/MainWindow.fxml @@ -0,0 +1,19 @@ + + + + + + + + + + + +