From 518d86a85c74132a67fc47b565c6d4009874b3e5 Mon Sep 17 00:00:00 2001
From: Simon Barrett <barretts1@cardiff.ac.uk>
Date: Thu, 13 Jan 2022 19:20:44 +0000
Subject: [PATCH] Uploading to Gitlab

---
 .idea/.name                                   |   1 +
 .idea/artifacts/1218123_jar.xml               |   8 +
 Submission/1218123_SourceCode+LessonData.zip  | Bin 0 -> 18885 bytes
 Submission/CreateALessonTemplate.txt          |  21 ++
 Submission/Lesson.java                        | 136 ++++++++++++
 .../CSSLesson.txt                             |  65 ++++++
 .../DataTypes.txt                             |  40 ++++
 .../HTMLlesson.txt                            |  62 ++++++
 .../Keywords.txt                              |  84 +++++++
 .../OOP.txt                                   |  74 +++++++
 .../ScrumLesson.txt                           |  77 +++++++
 Submission/LessonReader.java                  | 130 +++++++++++
 Submission/Module.java                        |  67 ++++++
 Submission/Question.java                      |  75 +++++++
 Submission/QuizSystem.java                    | 208 ++++++++++++++++++
 Submission/ScannerExtension.java              | 131 +++++++++++
 Submission/User.java                          |  55 +++++
 Submission/UsersStorage.java                  |  91 ++++++++
 out/artifacts/1218123.zip                     | Bin 0 -> 17692 bytes
 out/artifacts/1218123_jar/1218123.jar         | Bin 0 -> 13175 bytes
 out/artifacts/1218123_jar/CSSLesson.txt       |  65 ++++++
 .../1218123_jar/CreateALessonTemplate.txt     |  21 ++
 out/artifacts/1218123_jar/DataTypes.txt       |  40 ++++
 out/artifacts/1218123_jar/HTMLlesson.txt      |  62 ++++++
 out/artifacts/1218123_jar/Keywords.txt        |  84 +++++++
 out/artifacts/1218123_jar/OOP.txt             |  74 +++++++
 out/artifacts/1218123_jar/ScrumLesson.txt     |  77 +++++++
 .../java-cw1-attempt-2/META-INF/MANIFEST.MF   |   3 +
 .../java-cw1-attempt-2/QuizSystem.class       | Bin 5341 -> 5339 bytes
 src/LessonReader.java                         |   2 +-
 src/META-INF/MANIFEST.MF                      |   3 +
 src/QuizSystem.java                           |  15 +-
 32 files changed, 1762 insertions(+), 9 deletions(-)
 create mode 100644 .idea/.name
 create mode 100644 .idea/artifacts/1218123_jar.xml
 create mode 100644 Submission/1218123_SourceCode+LessonData.zip
 create mode 100644 Submission/CreateALessonTemplate.txt
 create mode 100644 Submission/Lesson.java
 create mode 100644 Submission/LessonDataToBePlacedInSameFolderAsJAR/CSSLesson.txt
 create mode 100644 Submission/LessonDataToBePlacedInSameFolderAsJAR/DataTypes.txt
 create mode 100644 Submission/LessonDataToBePlacedInSameFolderAsJAR/HTMLlesson.txt
 create mode 100644 Submission/LessonDataToBePlacedInSameFolderAsJAR/Keywords.txt
 create mode 100644 Submission/LessonDataToBePlacedInSameFolderAsJAR/OOP.txt
 create mode 100644 Submission/LessonDataToBePlacedInSameFolderAsJAR/ScrumLesson.txt
 create mode 100644 Submission/LessonReader.java
 create mode 100644 Submission/Module.java
 create mode 100644 Submission/Question.java
 create mode 100644 Submission/QuizSystem.java
 create mode 100644 Submission/ScannerExtension.java
 create mode 100644 Submission/User.java
 create mode 100644 Submission/UsersStorage.java
 create mode 100644 out/artifacts/1218123.zip
 create mode 100644 out/artifacts/1218123_jar/1218123.jar
 create mode 100644 out/artifacts/1218123_jar/CSSLesson.txt
 create mode 100644 out/artifacts/1218123_jar/CreateALessonTemplate.txt
 create mode 100644 out/artifacts/1218123_jar/DataTypes.txt
 create mode 100644 out/artifacts/1218123_jar/HTMLlesson.txt
 create mode 100644 out/artifacts/1218123_jar/Keywords.txt
 create mode 100644 out/artifacts/1218123_jar/OOP.txt
 create mode 100644 out/artifacts/1218123_jar/ScrumLesson.txt
 create mode 100644 out/production/java-cw1-attempt-2/META-INF/MANIFEST.MF
 create mode 100644 src/META-INF/MANIFEST.MF

diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..c89b75d
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+Lesson.java
\ No newline at end of file
diff --git a/.idea/artifacts/1218123_jar.xml b/.idea/artifacts/1218123_jar.xml
new file mode 100644
index 0000000..5510842
--- /dev/null
+++ b/.idea/artifacts/1218123_jar.xml
@@ -0,0 +1,8 @@
+<component name="ArtifactManager">
+  <artifact type="jar" name="1218123:jar">
+    <output-path>$PROJECT_DIR$/out/artifacts/1218123_jar</output-path>
+    <root id="archive" name="java-cw1-attempt-2.jar">
+      <element id="module-output" name="java-cw1-attempt-2" />
+    </root>
+  </artifact>
+</component>
\ No newline at end of file
diff --git a/Submission/1218123_SourceCode+LessonData.zip b/Submission/1218123_SourceCode+LessonData.zip
new file mode 100644
index 0000000000000000000000000000000000000000..01bcab9f6f423d6503fe3984e02b2d9f18c1b180
GIT binary patch
literal 18885
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
a+EChS0p6@^ASL_^{0!MF3=A%=ARYimP@u5@

literal 0
HcmV?d00001

diff --git a/Submission/CreateALessonTemplate.txt b/Submission/CreateALessonTemplate.txt
new file mode 100644
index 0000000..01b1770
--- /dev/null
+++ b/Submission/CreateALessonTemplate.txt
@@ -0,0 +1,21 @@
+## Title
+Lesson Title Goes Here
+
+## Lesson Text
+Lesson Text goes here all as one line
+
+## Questions
+
+# Question
+Question goes here (Do not number the question, this is done in the program)
+
+# Answers
+Add as many answers as you want
+One per line
+Do not number the answers
+This is done in the program
+If this is the correct answer then the int for correct answer will be 5
+# Correct Answer
+Int representing the correct answers place in the answers above goes here
+
+You can then Repeat the # Question tag as many times as you like.
\ No newline at end of file
diff --git a/Submission/Lesson.java b/Submission/Lesson.java
new file mode 100644
index 0000000..f7d6df0
--- /dev/null
+++ b/Submission/Lesson.java
@@ -0,0 +1,136 @@
+public class Lesson {
+
+    /*
+    This class creates a lesson object along with the ability to print the lesson and print and complete the quiz
+    associated with it.
+     */
+
+    /* Design Decision:
+       Part [1] - Lesson Title, Lesson and QuestionArray are marked as final as once initialised they will not change
+       Part [2] - Lesson + Quiz Completed and QuizScore record what parts of a lesson each user has completed
+       Makes logical sense to store completion data with the lesson, however as code gets larger it may be useful to
+       split part [2] into a separate class as you don't need to store all of part [1], only the lessonTitle
+       in the user record. This could save on memory.
+       It is currently written this way to simplify the reading of the program, reducing the time needed to go through it.
+     */
+    final private String lessonTitle;
+    final private String lessonText;
+    final private Question[] questionArray;
+    private boolean lessonCompleted;
+    private boolean quizCompleted;
+    private int quizScore;
+
+    /**
+     * When a lesson is initialised the user hasn't seen or completed the lesson or quiz so these are set to false and zero
+     * @param lessonTitle
+     * @param lessonText
+     * @param questionArray
+     */
+    public Lesson(String lessonTitle, String lessonText, Question[] questionArray) {
+        this.lessonTitle = lessonTitle;
+        this.lessonText = lessonText;
+        this.questionArray = questionArray;
+        this.lessonCompleted = false;
+        this.quizCompleted = false;
+        this.quizScore = 0;
+    }
+
+    /* GETTER METHODS
+    3 Standard getter methods, 1 custom getter method
+    */
+    public String getLessonTitle() {
+        return lessonTitle;
+    }
+
+    public int getQuizScore() {
+        return quizScore;
+    }
+
+    public boolean isQuizCompleted() {
+        return quizCompleted;
+    }
+
+    // Rather than have a getter and then call .length on it, it has been combined here for readability.
+    public int getQuestionArrayLength() {
+        return questionArray.length;
+    }
+
+    // END GETTER METHODS
+
+    /* SETTER METHODS
+    3 fields are marked as final so can't be set
+    */
+    public void setQuizCompleted(boolean quizCompleted) {
+        this.quizCompleted = quizCompleted;
+    }
+
+    /**
+     * Checks if current quiz score is greater than saved score and replaces it.
+     * This ensures that users best quiz score is saved.
+     * @param quizScore
+     */
+    public void setQuizScore(int quizScore) {
+        if(quizScore > this.quizScore) {
+            this.quizScore = quizScore;
+        }
+    }
+
+    // END SETTER METHODS
+
+    // CUSTOM METHODS
+
+    /**
+     * Prints out the lesson title followed by the lesson text with empty lines in between for styling
+     * <p>
+     * Sets lessonCompleted to true as the lesson has now been printed out for user to read
+     */
+    public void printLesson() {
+        // Prints out lesson title and text and sets the lesson completed to true
+        System.out.println("You have chosen the lesson: " + lessonTitle);
+        System.out.println(" ");
+        System.out.println(lessonText);
+        System.out.println(" ");
+        lessonCompleted = true;
+    }
+
+    /**
+     * Iterates over questionArray printing out each question in turn, recording user score,
+     * and giving user immediate feedback on the quiz
+     * @return total correct user answers
+     */
+    public int doQuiz() {
+        // Initialise the users score and questions answered so they can see how they are doing after every question
+        int correctAnswers = 0;
+        int questionsAnswered = 0;
+
+        // Styling so it is easy to see where the quiz starts
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println(" +  |                     Quiz                     |  +");
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println(" ");
+
+        for(int i = 0; i < questionArray.length; i++) {
+            // Checks that user got the question correct and adds 1 to score if they do
+            if(questionArray[i].askQuestion(i + 1)) {
+                correctAnswers += 1;
+            }
+            questionsAnswered += 1;
+
+            // Checks to see if it is the last questions and outputs a different string depending on if it is or not.
+            if (i != questionArray.length - 1) {
+                System.out.print("Your current score is " + correctAnswers + "/" + questionsAnswered + ".");
+            } else {
+                System.out.println("Your final score is " + correctAnswers + "/" + questionsAnswered + ".");
+                System.out.println("Congratulations on completing the lesson and the quiz.");
+            }
+            // Creates gap before next question
+            System.out.println(" ");
+            System.out.println(" ");
+        }
+        // Returns the users total score for the quiz so this can be recorded
+        return correctAnswers;
+    }
+
+    // END CUSTOM METHODS
+
+}
diff --git a/Submission/LessonDataToBePlacedInSameFolderAsJAR/CSSLesson.txt b/Submission/LessonDataToBePlacedInSameFolderAsJAR/CSSLesson.txt
new file mode 100644
index 0000000..520f260
--- /dev/null
+++ b/Submission/LessonDataToBePlacedInSameFolderAsJAR/CSSLesson.txt
@@ -0,0 +1,65 @@
+## Title
+CSS - Cascading Style Sheets
+
+## Lesson Text
+Cascading Style Sheets (CSS) is a language used to describe how a document written in markup Language (E.G. HTML) is presented. It is one of the three main web technologies alongside HTML and JavaScript. CSS can be written inline, in an internal <style> element or added as an external stylesheet using a <link> in the HTML header. One of the most important CSS concepts is the box model, which is a box which wraps around every HTML element and includes padding, margin, and other properties. You can find the full list of CSS properties here: https://www.w3schools.com/cssref/default.asp
+
+## Questions
+
+# Question
+What does CSS stand for?
+
+# Answers
+Caesar salad, sir?
+Cascading Style Sheets
+Completely straightforward and sensible
+Can see something?
+# Correct Answer
+2
+
+# Question
+How do you select a class?
+
+# Answers
+.class
+#class
+<class>
+@class
+# Correct Answer
+1
+
+# Question
+Which of these is not a valid colour?
+
+# Answers
+color: #000
+color: rgb(0,0,0)
+color: #000000
+color: 000000
+# Correct Answer
+4
+
+# Question
+How do you select an id?
+
+# Answers
+.id
+#id
+<id>
+@id
+# Correct Answer
+2
+
+# Question
+What is the corresponding keyword to the font-weight: 700?
+
+# Answers
+Bold
+Normal
+Light
+Bolder
+# Correct Answer
+1
+
+
+
diff --git a/Submission/LessonDataToBePlacedInSameFolderAsJAR/DataTypes.txt b/Submission/LessonDataToBePlacedInSameFolderAsJAR/DataTypes.txt
new file mode 100644
index 0000000..98a0e70
--- /dev/null
+++ b/Submission/LessonDataToBePlacedInSameFolderAsJAR/DataTypes.txt
@@ -0,0 +1,40 @@
+## Title
+Data Types
+
+## Lesson Text
+Java is a statically-typed programming language. This means that all variables must first be declared before they can be used. This involves stating both the variables type and name. In java there are 8 primitive data types. These are: byte, short, int, long, float, double, boolean, char. These are predefined by the language and their names are reserved keywords.
+
+## Questions
+
+# Question
+What is the correct way to declare a variable?
+
+# Answers
+i = 5;
+int i 5;
+int i = 5;
+int i(5);
+# Correct Answer
+3
+
+# Question
+Which data type is best to store a true/false value?
+
+# Answers
+byte
+char
+Boolean
+Int
+Double
+# Correct Answer
+3
+
+# Question
+What is the default value for an int?
+
+# Answers
+Null
+Undefined
+0
+# Correct Answer
+3
\ No newline at end of file
diff --git a/Submission/LessonDataToBePlacedInSameFolderAsJAR/HTMLlesson.txt b/Submission/LessonDataToBePlacedInSameFolderAsJAR/HTMLlesson.txt
new file mode 100644
index 0000000..7011c76
--- /dev/null
+++ b/Submission/LessonDataToBePlacedInSameFolderAsJAR/HTMLlesson.txt
@@ -0,0 +1,62 @@
+## Title
+HTML - HyperText Markup Language
+
+## Lesson Text
+HyperText Markup Language (HTML) is the building block of the web. Invented in 1993 by Tim Berners-Lee it has gone through many iterations with the current being HTML5. This introduced semantic tags in order to help developers clearly define a pages content for browsers and screen readers. HTML is written using tags which general come in a pair: the opening tag <tag> and the closing tag </tag>, however sometimes the closing tag can be left out. Each type of tag defines how the browser will format and display the content. You can find a full list of tags here: https://www.w3schools.com/TAGS/default.ASP.
+
+## Questions
+
+# Question
+What does HTML stand for?
+
+# Answers
+Help To Make Layout
+Highly Typed Machine Language
+HyperText Markup Language
+Hey! That’s my Llama
+# Correct Answer
+3
+
+# Question
+Which of these tags doesn’t need a closing tag?
+
+# Answers
+<h1>
+<body>
+<form>
+<img>
+# Correct Answer
+4
+
+# Question
+Where should the <!DOCTYPE html> tag go on the page?
+
+# Answers
+It’s should be the first item
+At the start of the body element
+It’s should be the last item
+Anywhere you want
+# Correct Answer
+1
+
+# Question
+What tag do you normally use to link to another web page?
+
+# Answers
+<a>
+<link>
+<nav>
+<li>
+# Correct Answer
+1
+
+# Question
+What is the correct way to declare a comment in HTML?
+
+# Answers
+// This is a comment
+/* This is a comment*/
+<! This is a comment ->
+<!- -This is a comment - ->
+# Correct Answer
+4
diff --git a/Submission/LessonDataToBePlacedInSameFolderAsJAR/Keywords.txt b/Submission/LessonDataToBePlacedInSameFolderAsJAR/Keywords.txt
new file mode 100644
index 0000000..51ae02e
--- /dev/null
+++ b/Submission/LessonDataToBePlacedInSameFolderAsJAR/Keywords.txt
@@ -0,0 +1,84 @@
+## Title
+Java Keywords
+
+## Lesson Text
+Java has a number of keywords which are reserved so that you can’t use them as identifiers in your program. These keywords indicate to java that a certain action needs to be performed. When programming in an IDE you will often be told if a word is a keyword and you can’t use it as an identifier. For a full list visit this link: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html. This quiz will test your knowledge of keywords, for each question you have to find the word which isn’t a keyword.
+
+## Questions
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+continue
+goto
+finally
+next
+# Correct Answer
+4
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+for
+if
+when
+else
+# Correct Answer
+3
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+private
+protected
+public
+personal
+# Correct Answer
+4
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+huge
+short
+long
+double
+# Correct Answer
+1
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+case
+catch
+class
+client
+# Correct Answer
+4
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+implements
+impresses
+interface
+instanceof
+# Correct Answer
+2
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+try
+catch
+maybe
+throws
+# Correct Answer
+3
\ No newline at end of file
diff --git a/Submission/LessonDataToBePlacedInSameFolderAsJAR/OOP.txt b/Submission/LessonDataToBePlacedInSameFolderAsJAR/OOP.txt
new file mode 100644
index 0000000..0578ec0
--- /dev/null
+++ b/Submission/LessonDataToBePlacedInSameFolderAsJAR/OOP.txt
@@ -0,0 +1,74 @@
+## Title
+Object-Oriented Programming
+
+## Lesson Text
+Object-Oriented programming (OOP) is a type of programming paradigm based on the concept of “Objects”, which contain fields and methods. Fields contains data and can be primitive types or hold other objects through composition. Methods define procedures and depending on the fields access modifier are often the only way to access fields. Classes must be built with a constructor, this can set values for the fields when the class is initialised. It can also contain getters and setters to access private values from outside of the class.
+
+## Questions
+
+# Question
+Which of these is not a Java access modifier keyword?
+
+# Answers
+Private
+Public
+Class Private
+Protected
+Default
+# Correct Answer
+3
+
+# Question
+Coupling and Cohesion are two OOP concepts, which statement best describes the way we want them to be used in our program?
+
+# Answers
+Decreased Coupling, Decreased Cohesion
+Decreased Coupling, Increased Cohesion
+Increased Coupling, Decreased Cohesion
+Increased Coupling, Increased Cohesion
+# Correct Answer
+2
+
+# Question
+What is the best reason to use a design pattern?
+
+# Answers
+It will result in code which is more extensible and maintainable
+It will result in an easier to describe product
+You can proudly tell everyone you are following a certain pattern
+# Correct Answer
+1
+
+# Question
+Composition is best described by what type of relationship?
+
+# Answers
+IS – A
+HAS – A
+WAS – A
+DOES – A
+CREATES – A
+# Correct Answer
+2
+
+# Question
+Inheritance is best described by what type of relationship?
+
+# Answers
+IS – A
+HAS – A
+WAS – A
+DOES – A
+CREATES – A
+# Correct Answer
+1
+
+# Question
+When would you use an interface class?
+
+# Answers
+When you wanted to ensure that a class contained certain variables and methods
+The interface class is the main way that a user operates your program
+When you need to store a large amount of data you use an interface class to do it
+# Correct Answer
+1
\ No newline at end of file
diff --git a/Submission/LessonDataToBePlacedInSameFolderAsJAR/ScrumLesson.txt b/Submission/LessonDataToBePlacedInSameFolderAsJAR/ScrumLesson.txt
new file mode 100644
index 0000000..3904107
--- /dev/null
+++ b/Submission/LessonDataToBePlacedInSameFolderAsJAR/ScrumLesson.txt
@@ -0,0 +1,77 @@
+## Title
+Scrum Framework
+
+## Lesson Text
+Scrum is a lightweight framework used to generate value through solutions to problems. Originally designed for Software Engineering it is now used in multiple other fields. In a nutshell, Scrum requires a Scrum Master to foster an environment where a Product Owner orders the work for a complex problem into a product backlog. The Scrum Team then turns a selection of the work into an Increment of value during a Sprint. This is shown to stakeholders to inspect the results, the sprint is reviewed and then the Sprint starts again.
+
+## Questions
+
+# Question
+Which one of these isn’t a member of the Scrum team?
+
+# Answers
+Scrum Master
+Chief Technology Officer
+Product Owner
+Developer
+# Correct Answer
+2
+
+# Question
+What is the recommended longest length of time for a sprint?
+
+# Answers
+One Week
+One Month
+Two Weeks
+6 Weeks
+# Correct Answer
+2
+
+# Question
+Which of these is not part of the scrum workflow ?
+
+# Answers
+Sprint
+Sprint Planning
+Team Brunch
+Daily Scrum
+Sprint Review
+Sprint Retrospective
+# Correct Answer
+3
+
+# Question
+What is the Definition of Done?
+
+# Answers
+The Criteria to determine whether work on sprint backlog item is complete
+The Product which has been produced at the end of the Sprint
+When the developer is fed up of working on a feature
+# Correct Answer
+1
+
+# Question
+Which of these is not a Scrum Value?
+
+# Answers
+Commitment
+Courage
+Focus
+Freedom
+Openness
+Respect
+# Correct Answer
+4
+
+# Question
+The length for a daily scrum should be?
+
+# Answers
+30 minutes
+15 minutes
+10 minutes
+1 hour
+45 minutes
+# Correct Answer
+2
\ No newline at end of file
diff --git a/Submission/LessonReader.java b/Submission/LessonReader.java
new file mode 100644
index 0000000..f291576
--- /dev/null
+++ b/Submission/LessonReader.java
@@ -0,0 +1,130 @@
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Scanner;
+
+public class LessonReader {
+
+    /*
+    This class reads a text file and creates a lesson from it. The text file needs to be a certain structure. The structure
+    is clearly defined in the ReadMe. This class has been designed so that the quiz for a lesson can have a variable amount
+    of questions and these questions can have a variable amount of answers related to them.
+
+    Please Note: If the Text File is not written how it's specified in the ReadMe this class may fail. However, it does
+    have fall back values so that the user will see that the lesson has not been inputted correctly.
+     */
+
+    /**
+     * Converts a text file to an ArrayList<String> line by line, each line being a new entry
+     * @param fileName In the form "fileName.txt"
+     * @return Text File as ArrayList<String>
+     */
+    public ArrayList<String> createArrayListFromTextFile(String fileName) {
+
+        Scanner scanner = null;
+        ArrayList<String> stringArrayList = new ArrayList<>();
+
+        try {
+            scanner = new Scanner(new BufferedReader(new FileReader(fileName)));
+
+            while (scanner.hasNext()){
+                stringArrayList.add(scanner.nextLine());
+            }
+
+        } catch (IOException e) {
+            System.err.println(e.getMessage());
+        } finally {
+            scanner.close();
+        }
+        return stringArrayList;
+    };
+
+    /**
+     * Creates a lesson from the Text File that you give it, Text file must be formatted a specific
+     * way, this can be found in the ReadMe.
+     * @param fileName in the form "fileName.txt"
+     * @return Lesson object built from text file
+     */
+    public Lesson createLessonFromTextFile(String fileName) {
+
+        /* Create the variables needed to build a lesson and give them fallback values
+        if the text file provided is empty.
+        */
+        String lessonTitle = "This lesson doesn't have a title";
+        String lessonText = "This lesson doesn't have any text";
+        String questionString = "";
+        int correctAnswer = 1;
+
+        // Scans in the text file and gives the function the ArrayList to work with
+        ArrayList<String> textArray = createArrayListFromTextFile(fileName);
+
+        /* The answers input for a Question object and the questionsArray input for a Lesson object
+        both require the data in an array, however to make the program more flexible and resilient and allow different
+        amounts of answers and questions these are originally initialised as ArrayLists and then converted
+         */
+        ArrayList<String> answersArrayList = new ArrayList<>();
+        ArrayList<Question> questionsArrayList = new ArrayList<>();
+
+
+        // Array is looped through to get the title and Lesson text
+        for(int i = 0; i < textArray.size(); i++) {
+            if(textArray.get(i).equals("## Title")) {
+                lessonTitle = textArray.get(i + 1);
+            }
+            if(textArray.get(i).equals("## Lesson Text")) {
+                lessonText = textArray.get(i + 1);
+            }
+            if(textArray.get(i).equals("## Questions")) {
+
+                /* Once Array gets to the Questions a second loop is created so that each question can
+                be created separately, this allows for the text file to have different amounts of questions
+                */
+                for(int j = i; j < textArray.size(); j++) {
+                    if (textArray.get(j).equals("# Question")) {
+                        questionString = textArray.get(j + 1);
+                    }
+                    if (textArray.get(j).equals("# Answers")) {
+                        /*
+                        A while loop goes through the answers adding them to the answersArrayList,
+                        This allows for each question to have a different amount of answers
+
+                        Design Decision: Though having multiple loops inside each other is bad practice
+                        it is unlikely that a text file will get to the size where this has any negative performance
+                        impact and allowing different questions to have different amounts of answers
+                        adds to the programs' user experience and flexibility.
+                         */
+                        boolean endOfAnswers = false;
+                        while(!endOfAnswers) {
+                            j += 1;
+                            if(textArray.get(j).equals("# Correct Answer")) {
+                                correctAnswer = Integer.parseInt(textArray.get(j + 1));
+                                endOfAnswers = true;
+                            } else {
+                                answersArrayList.add(textArray.get(j));
+                            }
+                        }
+                        // Converts an Array List into an array
+                        String[] answerArray = new String[answersArrayList.size()];
+                        answerArray = answersArrayList.toArray(answerArray);
+
+                        // Creates the Question and adds it to question Array
+                        Question question = new Question(questionString, answerArray, correctAnswer);
+                        questionsArrayList.add(question);
+
+                        // Removes the answers to the previous question so the array List can be reused
+                        answersArrayList.clear();
+                    }
+                }
+            }
+        }
+        // Converts the ArrayList of Questions to an Array which can be used to create the lesson
+        Question[] questionArray = new Question[questionsArrayList.size()];
+        questionArray = questionsArrayList.toArray(questionArray);
+
+        // Creates the Lesson and returns it so that it can be used in the program
+        Lesson lesson = new Lesson(lessonTitle,lessonText, questionArray);
+        return lesson;
+    }
+}
+
diff --git a/Submission/Module.java b/Submission/Module.java
new file mode 100644
index 0000000..ea4c98a
--- /dev/null
+++ b/Submission/Module.java
@@ -0,0 +1,67 @@
+public class Module {
+
+    /*
+    This class holds the lesson objects and enables the user to pick from them. It has been designed so that it
+    can be replicated and reused to add a Courses class to the program. This is expanded upon in the ReadMe.
+     */
+
+    private Lesson[] lessons;
+
+    public Module(Lesson[] lessons) {
+        this.lessons = lessons;
+    }
+
+    // GETTER METHODS
+
+    /**
+     * Returns a lesson from the Lesson array depending on User input
+     * User starts choice at 1 rather than 0 so this needs to be translated to arrays with base 0
+     * @param choice
+     * @return Lesson object from array at choice - 1
+     */
+    public Lesson getLesson(int choice) {
+        return lessons[choice - 1];
+    }
+
+    // Rather than have a getter and then call .length on it, it has been combined here for readability.
+    public int getLessonsArrayLength() {
+        return lessons.length;
+    }
+    // END GETTER METHODS
+
+    /**
+     * Loops through the array printing out each lesson
+     * Also prints out the user instruction based on the number of lessons in the module
+     */
+    public void listAll()  {
+        // Lesson Menu Title
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println(" +  |                   LESSONS                    |  +");
+        System.out.println("  + ------------------------------------------------ +");
+
+        System.out.println("      Please pick from one of the lessons below: ");
+        System.out.println(" ");
+
+        // Empty Strings declared which will be used to build the userInstruction string
+        String userInstruction = "";
+        String numberToChooseLesson = "";
+
+        /* Loops through the lesson array printing out the titles along with a lesson number
+        that users can to press to access their chosen lesson
+        */
+        for(int i = 0; i < lessons.length; i++) {
+            System.out.println("[" + (i + 1) + "] " + lessons[i].getLessonTitle());
+
+            /* If it is the last lesson to add to the userInstruction String then the String needs to
+               include the closing bracket
+            */
+            if(i != lessons.length - 1) {
+                numberToChooseLesson = (i + 1) + ", ";
+            } else {
+                numberToChooseLesson = (i + 1) + "):";
+            }
+            userInstruction = userInstruction + numberToChooseLesson;
+        }
+        System.out.println("By pressing the corresponding number (" + userInstruction);
+    };
+}
diff --git a/Submission/Question.java b/Submission/Question.java
new file mode 100644
index 0000000..dffb603
--- /dev/null
+++ b/Submission/Question.java
@@ -0,0 +1,75 @@
+public class Question {
+
+    /*
+    This class creates a Question which can be presented to the user.
+    It has been designed so that the question can have as many answers
+    as you wish to present to the user.
+     */
+
+    private String question;
+    private String[] answers;
+    private int correctAnswer;
+
+    /**
+     * Basic all arguments Constructor
+     * @param question Just include the question String, no question number or punctuation before
+     * @param answers Just include the answer String, no answer number or punctuation before
+     * @param correctAnswer Add an int relating to the position of the correct answer based on array starting at 1, not 0.
+     *                      (E.G. if you have 4 answers and the correct one is number 3 then use 3.)
+     */
+    public Question(String question, String[] answers, int correctAnswer) {
+        this.question = question;
+        this.answers = answers;
+        this.correctAnswer = correctAnswer;
+    }
+
+    /**
+     * Prints the Question for the user, the user can then pick an answer.
+     * <p>
+     * Returns a Boolean, true = user answered correctly, false = user answered incorrectly.
+     * @param questionNumber used to format the question string displayed to the user.
+     */
+    public boolean askQuestion(int questionNumber) {
+        /* Design decision. This was a choice between using a bool to represent correct or incorrect
+        or using 1 to represent a correct answer and 0 for an incorrect answer. I decided on a boolean so that it
+        reduces the use of "Magic Numbers" in the code, and it makes the code more resilient changes.
+         */
+
+        // Prints question with corresponding number
+        System.out.println("Question " + questionNumber + ": " + question);
+        System.out.println(" ");
+
+        // Empty Strings declared which will be used to build the userInstruction string
+        String userInstruction = "";
+        String numberToChooseLesson = "";
+
+        // Prints out the answers with their corresponding number and adds it to the userInstruction string
+        for(int i = 0; i < answers.length; i++) {
+            System.out.println((i + 1) + ". " + answers[i]);
+            /* Check if it is the last answer, if so the string that is added to the userInstruction
+             changes to represent this.
+             */
+            if(i != answers.length - 1) {
+                numberToChooseLesson = (i + 1) + ", ";
+            } else {
+                numberToChooseLesson = (i + 1) + "):";
+            }
+            userInstruction = userInstruction + numberToChooseLesson;
+        }
+
+        // Prints out the userInstruction string with all the valid choices a user can make
+        System.out.println(" ");
+        System.out.println("Choose your answer by pressing the corresponding number (" + userInstruction);
+
+        // Takes in the user input and checks if they got it right and then returns a boolean based on that
+        int userChoice = ScannerExtension.scanForUserIntChoice(answers.length);
+
+        if(userChoice == correctAnswer) {
+            System.out.println("Correct!");
+            return true;
+        } else {
+            System.out.println("Incorrect");
+        }
+        return false;
+    };
+}
diff --git a/Submission/QuizSystem.java b/Submission/QuizSystem.java
new file mode 100644
index 0000000..8b340a6
--- /dev/null
+++ b/Submission/QuizSystem.java
@@ -0,0 +1,208 @@
+public class QuizSystem {
+
+    /*
+    This class is the heart of the Quiz and is where the main method is run from, it contains the vast majority of
+    the logic for how the user navigates through the quiz and contains the styling to make the quiz more readable rather
+    than just having a block of text in the command line. This class both initialises the vast majority of the data and
+    contains the code logic for it, a discussion of why this decision has been made is written below.
+     */
+
+    public static void main(String[] args) {
+
+        // Welcome message, shown once to users when quiz starts
+        System.out.println(" ");
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println(" +  | Welcome to the MSc Software Engineering Quiz |  +");
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println("             Simon Barrett (C1218123) 2021");
+
+
+        // QUIZ AND DATA SET UP
+       /* Create a boolean which is used to keep the quiz repeating itself and the storage to contain users
+        completion data */
+        boolean continueWithQuiz = true;
+        UsersStorage users = new UsersStorage();
+
+        // Create all the lessons and add them to the module array to use
+        LessonReader lessonReader = new LessonReader();
+        Lesson htmlLesson = lessonReader.createLessonFromTextFile("HTMLLesson.txt");
+        Lesson scrumLesson = lessonReader.createLessonFromTextFile("ScrumLesson.txt");
+        Lesson cssLesson = lessonReader.createLessonFromTextFile("CSSLesson.txt");
+        Lesson dataTypesLesson = lessonReader.createLessonFromTextFile("DataTypes.txt");
+        Lesson oopLesson = lessonReader.createLessonFromTextFile("OOP.txt");
+        Lesson keywordsLesson = lessonReader.createLessonFromTextFile("Keywords.txt");
+
+        Lesson[] cmt652LessonsArray = {htmlLesson, cssLesson, scrumLesson, dataTypesLesson,oopLesson,keywordsLesson};
+        Module cmt652 = new Module(cmt652LessonsArray);
+        // END QUIZ AND DATA SETUP
+
+
+        // Quiz will repeat itself until the user chooses to end it.
+        // continueWithQuiz can be changed by the output from checkUserDecision()
+        while (continueWithQuiz) {
+
+            // Value set to false so that main menu loops until user chooses to view the lesson
+            boolean goToLesson = false;
+
+            /*
+            Design Decision: The code has been broken up into 4 methods as listed below the main method. This is to
+            increase readability, and make the logic easier to follow. It is also so that when code is changed in one
+            method it is easier to see if and where the code breaks and to maintain a better separation of code. This is
+            instead of having all the code inside the while loop where it could get confusing.
+
+            The methods could also be removed from this Class and put into their own class if the program got larger,
+            however at this stage I don't think it's necessary. It is enough that they make it more readable.
+             */
+
+            /*
+            Design Decision: The user has three options to choose from in the main menu which means that a boolean can't be
+            used for the user decision, even though this would be the preferred option as it makes the code more resilient and
+            harder for the next developer to make a mistake.
+             */
+            int userDecision = checkUserDecision();
+            /* !!! CHECK THE BELOW NUMBERS AGAINST THE OUTPUTS for checkUserDecision BEFORE CHANGING THEM !!!!
+            User choice evaluated (these values have been hard-coded as it is unlikely the menu will change and if it does
+            then it will likely be refactored at that time), having "Magic numbers" is a known weakness of this code */
+
+            // User chooses to go to the lessons
+            if (userDecision == 1) {
+                goToLesson = true;
+
+                // User chooses to check progress, once user has checked progress it will loop back to the main menu
+            } else if (userDecision == 2) {
+                // Create Progress Banner
+                System.out.println("  + ------------------------------------------------ +");
+                System.out.println(" +  |             Check Your Progress              |  +");
+                System.out.println("  + ------------------------------------------------ +");
+                System.out.println("Please type in your name to access your data, or (all) to print all user data");
+                ScannerExtension.viewUserData(users);
+
+                // User chooses to exit game
+            } else if (userDecision == 3) {
+                continueWithQuiz = false;
+            }
+
+            // If user has chosen to view the lessons then this logic is run
+            if(goToLesson) {
+                Lesson chosenLesson = chooseLessonToComplete(cmt652);
+
+                String userName = checkIfUserWantsToDoQuiz(chosenLesson);
+
+                addUserProgressToCompletionData(users, userName, chosenLesson);
+            }
+
+        }
+
+        // Styling shown to user when they exit
+        System.out.println(" ");
+        System.out.println("  + ----------------------------------------------------------- +");
+        System.out.println(" +  | Thank you for playing the MSc Software Engineering Quiz |  +");
+        System.out.println(" +  |                   Have a great day!!!                   |  +");
+        System.out.println("  + ----------------------------------------------------------- +");
+    }
+
+    // 4 MAIN CONTROL FLOW METHODS
+    /**
+     * Checks if user wants to continue quiz, see their completion data or see everyone's completion data.
+     * @return 1 = to go to lessons, 2 = go to data, 3 = exit game
+     */
+    public static int checkUserDecision() {
+        // Create Main Menu text
+        System.out.println(" ");
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println(" +  |                  MAIN MENU                   |  +");
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println("          Please pick from one of the options:");
+        System.out.println(" ");
+
+        // Create a list from user to choose from
+        /*
+        DO NOT CHANGE THESE NUMBERS WITHOUT CHECKING THE IF/ELSE STATEMENT AFTER THE METHOD IS CALLED
+         */
+        System.out.println("[1] See the list of lessons");
+        System.out.println("[2] Check your progress");
+        System.out.println("[3] Exit Game");
+        System.out.println("By pressing the corresponding number (1, 2, 3):");
+
+        // User makes choice
+        int userDecision = ScannerExtension.scanForUserIntChoice(3);
+
+        return userDecision;
+    }
+
+    /**
+     * Lists all the lessons in the module, user chooses lesson, user is shown lesson
+     * @param module contains the data needed to run the quiz
+     * @return Returns the users Chosen Lesson Object
+     */
+    public static Lesson chooseLessonToComplete(Module module) {
+        // List all the Lessons in the module, User inputs lesson choice and this is saved as a variable
+        module.listAll();
+        int choice = ScannerExtension.scanForUserIntChoice(module.getLessonsArrayLength());
+        Lesson chosenLesson = module.getLesson(choice);
+
+        // Styled header so it is easy to see where the lesson begins
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println(" +  |                   LESSON                     |  +");
+        System.out.println("  + ------------------------------------------------ +");
+        System.out.println(" ");
+
+        // Print out users chosen lesson and return the variable
+        chosenLesson.printLesson();
+        return chosenLesson;
+    }
+
+    /**
+     * Checks if user wishes to do the quiz, user does the quiz and has their score updated, or
+     * is taken back to the main menu if they don't want to do the quiz.
+     * @param chosenLesson
+     * @return Returns the username which the player used to record their progress
+     */
+    public static String checkIfUserWantsToDoQuiz(Lesson chosenLesson) {
+        // Ask user if they want to do the quiz, and check users decision
+        System.out.println("Would you like to complete the quiz now? Type 'y' (yes) or 'n' (no): ");
+        String userName = "";
+        String nextString = ScannerExtension.chooseYorN();
+
+        // Decision based on users choice, y = users does the quiz, n = user taken back to main menu
+        // Username is taken in both cases and a different string is shown based on user decision
+        if (nextString.equals("y")) {
+            // User does the quiz. Score and quiz completion is updated on the lesson object
+            chosenLesson.setQuizScore(chosenLesson.doQuiz());
+            chosenLesson.setQuizCompleted(true);
+            System.out.println("Please enter your name (in lowercase) to record that you have completed the lesson and the quiz: ");
+            userName = ScannerExtension.scanStringToLowercase();
+            System.out.println("Record of Lesson + Quiz Completion and Quiz Score saved under username: " + userName);
+
+        } else if (nextString.equals("n")) {
+            System.out.println("Please enter your name (in lowercase) to record that you have completed the lesson: ");
+            userName = ScannerExtension.scanStringToLowercase();
+            System.out.println("Record of Lesson Completion saved under username: " + userName);
+            System.out.println(" ");
+        }
+        System.out.println(" ");
+
+        // Output the username so that it can be used to save User completion data
+        return userName;
+    }
+
+    /**
+     * Either adds user progress to their data, or adds a new user to the UserStorage
+     * @param users UserStorage for the program
+     * @param userName Username give by user to store their data
+     * @param chosenLesson Lesson object data you wish to store
+     */
+    public static void addUserProgressToCompletionData(UsersStorage users, String userName, Lesson chosenLesson) {
+        // Add User progress to UserStorage
+        int userExists = users.checkIfUserExists(userName);
+        // Create a user and add to storage if they don't already exist
+        if (userExists == -1) {
+            User recordCurrentIteration = new User(userName);
+            recordCurrentIteration.addToUserRecord(chosenLesson);
+            users.add(recordCurrentIteration);
+        } else {
+            // Add to existing users data
+            users.getUsers().get(userExists).addToUserRecord(chosenLesson);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Submission/ScannerExtension.java b/Submission/ScannerExtension.java
new file mode 100644
index 0000000..f90d6a8
--- /dev/null
+++ b/Submission/ScannerExtension.java
@@ -0,0 +1,131 @@
+import java.util.ArrayList;
+import java.util.Scanner;
+
+public class ScannerExtension {
+
+    /* Design Decision: This extension file has been designed so that all scanner logic is held in one place
+     and future developers know exactly where to look if there is something wrong with a scanner.
+
+    The middle two scanners are needed to achieve specific goals but have been designed to have a level of
+    reusability and been given method names to make it clear what goal they achieve.
+
+    The last scanner is very specific to the method which calls it but despite the cohesion it has been placed
+    in this file so that all the scanner logic for the program stays together.
+
+    I have added these Scanner extensions so that the user is unable to crash the program by typing incorrect
+    information, thus creating a better user experience and making the program more resilient.
+
+    These Self-Contained methods are static so that you do not need to create a new class everytime we need to use one.
+     */
+
+    public static Scanner scanner = new Scanner(System.in);
+
+    /**
+     * Takes in a string from the scanner and converts it to lower case
+     * @return lower case version of the string entered into the scanner
+     */
+    public static String scanStringToLowercase() {
+        String nextString = scanner.next();
+        nextString = nextString.toLowerCase();
+        return nextString;
+    }
+
+    /*
+    Known Edge Case: For the below method if you type an incorrect int followed by a letter it crashes
+    the program. This will be fixed in future editions.
+     */
+
+    /**
+     * Extends Scanner to include error handling so that a user can only pick an integer in the given range
+     * <p>
+     * Method will keep asking for a user choice until user has picked a valid integer
+     * @param totalChoices User can pick a number from 1 - totalChoices (inclusive).
+     * @return Users integer choice
+     */
+    public static int scanForUserIntChoice(int totalChoices) {
+        boolean correctEntry = false;
+        // Prevents a user from entering a non-integer and asks them to pick again
+        while (scanner.hasNextInt() == false) {
+            scanner.next();
+            System.out.println("Incorrect entry!  Please choose from one of the options above.");
+        }
+        int nextInt = scanner.nextInt();
+        while (!correctEntry) {
+            // Scanner will keep looping until the user has entered a valid choice
+            if(nextInt <= totalChoices && nextInt > 0) {
+                correctEntry = true;
+            } else {
+                System.out.println("Incorrect entry!  Please choose from one of the options above.");
+                nextInt = scanner.nextInt();
+            }
+        }
+        // Return a valid choice which has been error handled so program won't crash
+        return nextInt;
+    }
+
+
+    /**
+     * User can choose between y or n, this will be converted to lowerCase so Y and N work as well
+     * <p>
+     * Method will keep asking for a user choice until they pick a correctEntry
+     * @return y or n
+     */
+    public static String chooseYorN() {
+        boolean correctEntry = false;
+        String nextString = scanner.next();
+        /* Convert user input to lowercase and check if they have entered y or n,
+        Loop will continue until user makes one of those two choices
+         */
+        nextString = nextString.toLowerCase();
+        while (!correctEntry) {
+            if(nextString.equals("y") || nextString.equals("n")) {
+                correctEntry = true;
+            } else {
+                System.out.println("Incorrect entry!  Please choose 'y' or 'n'.");
+                nextString = scanner.next();
+                nextString = nextString.toLowerCase();
+            }
+        }
+        return nextString;
+    }
+
+    /**
+     *User can type in all to see all users data or theirs own name to check their data
+     *<p>
+     *If the name the user inputs doesn't match any data in the UserCompletionData then user can try another
+     *name or press x to exit and go back to the main menu
+     * @param users UserStorage object for user input from scanner to be checked against
+     */
+    public static void viewUserData(UsersStorage users) {
+        String nextString = scanner.next();
+        nextString = nextString.toLowerCase();
+        // Checks if string equals all, if so it prints out all user data
+        if(nextString.equals("all")) {
+            users.printAllUsersData();
+        } else {
+            /*
+            If the user didn't type all then the input will be checked to see if the username has data attached to it
+            Loop will keep going until a correct username is given or the user decides to exit by pressing x.
+             */
+            boolean correctEntry = false;
+            while (!correctEntry){
+                int userExists = users.checkIfUserExists(nextString);
+                if(userExists == -1) {
+                    System.out.println("This user doesn't exist.  Please enter another username or 'x' to exit.");
+                    nextString = scanner.next();
+                    nextString = nextString.toLowerCase();
+                    if(nextString.equals("x")) {
+                        correctEntry = true;
+                    }
+                } else {
+                    ArrayList<Lesson>  userRecord= users.getUsers().get(userExists).getUserRecord();
+                    System.out.println(nextString + ":");
+                    for(int i = 0; i < userRecord.size(); i++) {
+                        System.out.println(users.printOutUserCompletionDataForLesson(userRecord.get(i)));
+                    }
+                    correctEntry = true;
+                }
+            }
+        }
+    }
+}
diff --git a/Submission/User.java b/Submission/User.java
new file mode 100644
index 0000000..ed70973
--- /dev/null
+++ b/Submission/User.java
@@ -0,0 +1,55 @@
+import java.util.ArrayList;
+
+public class User {
+
+    /*
+    Class to represent a User, includes the User's name and a record of which
+    lessons, quizzes and scores they have completed.
+     */
+
+    private String username;
+    private ArrayList<Lesson> userRecord;
+
+    public User(String username) {
+        this.username = username;
+        this.userRecord = new ArrayList<>();
+    }
+
+    // GETTER METHODS
+
+    public String getUsername() {
+        return username;
+    }
+
+    public ArrayList<Lesson> getUserRecord() {
+        return userRecord;
+    }
+     // END GETTER METHODS
+
+    // CUSTOM METHODS
+
+    /**
+     * Checks the Users record to see if they have already completed the lesson and/or quiz for that Lesson
+     * object. If not then their record is updated to show what they have done for that Lesson.
+     * @param currentLesson
+     */
+    public void addToUserRecord(Lesson currentLesson) {
+        boolean inUserRecord = false;
+        int lessonsPlaceInRecord = 0;
+
+        // Check to see if currentLesson is in the user record already
+        for(int i = 0; i < userRecord.size(); i++) {
+            if(userRecord.get(i).getLessonTitle().equals(currentLesson.getLessonTitle())){
+                inUserRecord = true;
+                lessonsPlaceInRecord = i;
+            }
+        }
+
+        // Update or create the lesson in the user record
+        if(inUserRecord) {
+            userRecord.get(lessonsPlaceInRecord).setQuizScore(currentLesson.getQuizScore());
+        } else {
+            userRecord.add(currentLesson);
+        }
+    }
+}
diff --git a/Submission/UsersStorage.java b/Submission/UsersStorage.java
new file mode 100644
index 0000000..3d98f65
--- /dev/null
+++ b/Submission/UsersStorage.java
@@ -0,0 +1,91 @@
+import java.util.ArrayList;
+
+public class UsersStorage {
+
+    /*
+    This class stores a list of the Custom object User to record each user's progress while the program is running.
+    It has been put into its own class due to the need to have some custom methods to interact with the storage.
+     */
+
+    private ArrayList<User> users;
+
+    public UsersStorage() {
+        this.users = new ArrayList<>();
+    }
+
+    // GETTER METHODS
+    public ArrayList<User> getUsers() {
+        return users;
+    }
+    // END GETTER METHODS
+
+    // CUSTOM METHODS
+
+    /**
+     * Adds a user to the Storage ArrayList
+     * @param user Custom User object
+     */
+    public void add(User user) {
+        users.add(user);
+    }
+
+
+    /**
+     * Check if the username entered already exists in Storage ArrayList
+     * @param username Username you want to check
+     * @return Returns -1 if the user doesn't exist, or returns the users place in the Storage ArrayList if they do
+     */
+    public int checkIfUserExists(String username) {
+        for(int i = 0; i < users.size(); i++){
+            String userNameInStorage = users.get(i).getUsername();
+            if(userNameInStorage.equals(username)) {
+                return i;
+            }
+        }
+     return -1;
+    }
+
+    /**
+     * Returns a string to display to the user based on if the user has completed just the lesson
+     * or the lesson and the quiz and prints the score if applicable
+     * @return Custom String based on input
+     */
+    public String printOutUserCompletionDataForLesson(Lesson lesson) {
+        String lessonTitle = lesson.getLessonTitle();
+        if(lesson.isQuizCompleted() == false) {
+            return "Has completed the lesson for " + lessonTitle + " but not the quiz.";
+        } else {
+            return  "Has completed the lesson and quiz for " + lessonTitle + ", with a score of " + lesson.getQuizScore() + "/" + lesson.getQuestionArrayLength() + ".";
+        }
+    }
+
+    /*
+    Design Decision: The method below is not strictly necessary but has been included so that it is easy to check if
+    the storage is working. Removing it could simplify the Program, Class and related ScannerExtension.
+     */
+    /**
+     * Prints out all the data in the Storage Array List
+     */
+    public void printAllUsersData() {
+        for(int i = 0; i < users.size(); i++) {
+            /* Get a user from the array and loop over their record printing out each lesson,
+             quiz and quiz score stored for them.
+             Repeat this for every user stored in Storage ArrayList
+            */
+            User currentUser = users.get(i);
+            System.out.println(currentUser.getUsername() + ": ");
+            for (int j = 0; j < currentUser.getUserRecord().size(); j++) {
+                System.out.println(printOutUserCompletionDataForLesson(currentUser.getUserRecord().get(j)));
+            }
+            /*
+            Design Decision: Though having two nested arrays results in O(i * j) it is unlikely in this program that
+            the arrays would get big enough for this to cause a performance issue. However, if the program was to grow
+            it may be worth looking at more efficient ways to do this.
+             */
+        }
+        // Fallback string, to be shown if no user data has been entered but user asks to see all user data.
+        if(users.size() == 0) {
+            System.out.println("No user data is stored at this time.");
+        }
+    }
+}
diff --git a/out/artifacts/1218123.zip b/out/artifacts/1218123.zip
new file mode 100644
index 0000000000000000000000000000000000000000..0e777110020a12b09f01cfdfac9c980f58809007
GIT binary patch
literal 17692
zcmWIWW@Zs#U|`^2&@IgiE_Ylab;N*yq1>2(L7ahs!O+Oi!qCV#J}a?EAIjFtN-S!v
zPM)F>IXU;HS^mv!xwp6F-rocwZ*S|3-u`3P{z~J^cRxR?PG9?DYWDGyTaAj}cTBc^
zvb4c5fI&e)fnh~#&Qykfn*tad7*brOux6;FxV}tbNl|rioiZge)n&gL1A|=ZGPR{k
zGcukhF3r$LUzR2<`f~b=Z+-G9%a)17rm3vRj22N`v3&J{tQDE6%liBI`x+UZEIpv8
z7WRy9#y^j<AKXv;zkY1V{~Hp|`X`tb7H!(R)O3?sL6KM3)k3GRgCC~)Dr}9=?sV2(
zyl_Uy=D<VYE}lX<Zk^Z9M+fz-mQA>NQp0Zh-CM`P4NLiES|<Nzcwr_}$Z>F4?5cEm
zmZz^z+cMRj&bp(rZ07vy@2t)i-M0PuVD{F(MfG+HKPw}`Y{Wa~)Ly&a<`j0u&q$`F
zNc-u9#yKbE&G^4twzd3)x#5(SZ9g0py<DPa)yH3+bdRU*fTiL3oVcL)(0H$-JKcHu
zujY%Y)-2WAth<eUs^i_2A@8rUeF+RW`sc&_+862hq1)!!9?$MH4GZO{YkhNK+B4}L
znVV!LpA~&R^MV7rEc2@>-}E`h-=11`Yo5k}f9r)N>&j2~_x1Pc`Fl;pzQ5^H`myHt
zmBQ4y&t9t^&F7DOZXD6i)U)Yz>MovJL6%Nx!CPNh{^5Of>SK?(KkM@sQ4@<}?r@tL
zL|k7c`7dc<lEl2V$1h*IWH?VX)@jDtQ=-qLC+<`FHT6ZQ?~k_T)oS)eQGb6%Y<+B&
zCG=)eQ0B&2FZX9eI8AWZ+WgG3`rDC@%DNH->?Km`pO}^Td8<v0UVV4jf~n#@T7A>D
zN!z4}OlC0Wy(I0t?WQ)*j+nF8HC#TFJ$shKm}uR7jOXRwr!%(x4)v39m)Vnkcagb^
zSoY0@rFRR8JY`eZVz(Xn?&Y-QQqL6YUlJuBraiPzFRs*lyZMIw=kmN0b8_z2&l7RV
zTYICqTglca&9tS#Z{ip0<EIMth(zqQ3x5(WQn2;Kq0%qialiQVS%cObsN#GexBahy
zZ~WRfna>Wy*8Evo#~Hm*pm3IDrRdrcsfxS)>lA-qP3R4_Iyc8?)fF+#NA*X8q85vN
zjaw9bcwX|wQ|G4hznyPuImsZ;Uh>iQKMq@;UQGUwSF1RG=FSIMFSlN7(~ENpJUFAO
zR`%FBlYcdJZ+bT_{^3zGi(!wk_43PWYooT_D>k0D&qula-9`P%UdQfDio0g~XZ-5&
zaf$KCsK!|Sl{t4J8NbZSw7*&GJ=ae`RsONcu6Ns}@+9r;vs)Fo@s%9M)uhV{ml*xf
z*jw~%-zF7_#rpQQZ+QIu!MdTW>6ga!?eper{3mqxiQ|b=J|R<%MQof?FsG8^Bp=Ja
zr7653KXRo{J^uUqy0h`T87tOZ<9&SC)3qpT)zlAtai4jo-0Dm8{l@+?v?HfFV`XgQ
zn!{zUto0P5-8+7ql?!v+Jt6c)VdK?E8O60H7<YL%uTqY6n#3ls!$o`B(L=>CzH4F*
z&x)wlyCm^K$XxHhq#TZ?lXN7uF^MnBy~O4yt`_l0Gu3o?vi`y5%L{tVT7z5EOnMe9
z-R~G8tPt79D=<&@OOK<lPBp*Ucdl9GcmKW5Vv#ZWChoq>ygcKaY@LmBp~LwG(IXG!
ze;uBAc$3I=v3ZfF447WCUu0F*syn(oR`5^X$tF{O`<3iZj;N+i|9y&Y$y|qpYxo`K
zzAt7KzPastik7XwP3|Y$O6HOU356@guX+mao4kFE_=0qX;*PdnpQW!v3Ui<J^Avjd
zgxW9OaN8-T^#11CEMi8h`7%R#v$|62yVKskxMsGYf2RD(&qtoPJXMLwoF^KbX}<XC
zx%TkLz9Y+2qjm-*m)kv>^H}l4La9vxY*VhWPo66%@p`>eGjHMc4_z;IzF*T5XlnGq
z^m+%M{<mib3ZgalGsr%@);%LjLdDZp)UTq{=WoP(ExFE1Wp@o0?M~@u@t1DgWIN^3
z6V9%+s_$hN?s+GvBjb3~N?`Y)TEUu~MFIWo3pzFbOYK^0xVh`J!m162)-F}&vzlG|
zQ)<79^t(9~k0ljNCciLF`S-Lg=22bopBp=#OfGkEO8Un7P5q`5pJ0+vBNM})mS5#5
z-CyEUR%aw7<UINzKSg@&u9q!)dw%v--wfD!=4As@>{8ifYgN=TIVK;`6x!(FrKtGU
zSD?QpAS5O<XNl;&s}HtmH9FsODO%H!KRKS~w(f&EcUO7St?7vyCZ4-}<Vo=|bMarS
z6>C%46n`GOI@2K|C8#OY@bt#tKi_SBeeKEj--{>kC+J?|eYWa8bJ_Glz51i)PQ?~n
z;C1`4?}U7l)D4GSK|YP{K|#BcthG{PAG^%k$|of279EkYh1<_NXQn)F)TO{icJ^&-
zdDG<Wjz(4=bW9czEuXZR?X;{{pVr@NllG>_3*R^%Yr1=T$$rfzV%54*=kLUpO*s1h
z%znq`tbAG>g>yMG=4V(kruIf}e)^;I;o_4sxBQanQmVOEv`=ZZ-Rj0-(>n*&J>xnh
z#cjURZFQvIqDdCJSHEA{(Bby3UAb?n`{k+2BfcGV54_H(#~ZqJ>&xJV(-vV<f1RFM
zxBv2yZd3iT7_aGzJ!5yS2sv>0hyPZo9TJ&&$CHY_=p9cD+Ii<s8T;zF5w{%#4`fQ6
z6_bkjpEXM~<G_#pmr}b*pI=?B*3@xMbkn_cmJK$uO$)*dmRkh+y^xuzR~9_$I-gE_
z5z8tS<Jq3N?!~9C=TA)DA*{b(rNc?Bf_%fZuJuV`lHDOe!8^W6PyW2Cr&;IUTK1iC
zI~ljj-C4K2nI&D6Yr=}3N1o@MD!rh8F?^Nl%|vszUh!0!i{}^aGflhk-0n{`S7?mk
zmb{vl2ItmU@=RGA8)tV-J><0aWcKSH+UMDqN4ZQ)h@X*v-92u$Q?z$ial}D!PA|`f
z%&1v$^Y<LR)>fk5adeI16WgEt*_$rz+Y@`n$7P39Kp@Z31gEzFiNfpq#lJJoi+#qf
zBA@I$`Q2gXskz(O7q7M2TEVfQhUdFi>@s$}Sk~WZOZFKqU%=gI@%kLYA=y(WP4CVQ
z+AOv5nDnGLrkC@!Uui2@YO{CVm+wDp+t@eAGdq{?HLB#dP2^Cwwe_u<ccP4aPLQ#m
zeW~Sn2I1xdV(WJB#~<p?UwUJUl-A3dj<d-YschLx?Kf0OzT0Y-l(a!-Ay@R$-K%~c
zKA077&a-q@a8Ajr3E~&e-e%x_Vzg<FRuHq|(<r0D(#cz9EZcgjcD<(Fw$<WFS&QNd
zbJAqo?YnKB$+FKeJ{YUEaL!q&b^a@QCaZpZ_o2z?%DqRt-TG?tUcay^-sHtSXLHyV
zImr$4&V-uEYhOCsb<<_#YLjc?H!>v_$FOYDT*-Pp<IAMl;|1pgB0_$2UR%s5kbC=f
zPv|xm_xsBQ%!Q>F=G6X@-FlqAkg+RvnRd8Sq_Aa~r+?(^xIZ2_8QOxO44j^sZgO8X
zZjKE#zVahJ!KVIwSyQ|M`w97TbC^!BW)&Z3iOpo$eLU?@ZtpDJiIGy_Tz8speg1o6
zaZJ?Y{uu^;I+tuP5RN<lNGI0!#2w+H?Jcf96oY;RDX$Q{BfN3jwPw-Qy~pkzUnKqG
zcj=;A=My*E9+>&9dHU9phNG1``&9Jz+U6|o5a8dJ9mLBeF)v}8=%&arzt_iKEaw)u
zseXEDM3|z-oP{6NDyx;AtW}tC^yuY<Q@7u{p}bD<nEuhQJx+O+)$?Aaze;*4Qqktv
zys+$k%9avUxxHy`nBV-^^Z3{@^(xZ`H!Ana{FF~^Kk-RXNaoQbkB|3Rvz%TzC9$U}
z8ZFpRwfg&p3Tr2gnn0I^_@CF$O|Ct7^HHFRu3?I--|zBI$2MC>aK3%E!#h$tJN@U+
zS3R17+TT_ieeM)o;-(Wlf5JSErxCih|Ey$n+-dO4%_RK#jo0la;XC%c-}pGY@Z%YW
z>Fe$Ha;KM_mybTF+FEfT_j@_NeDTACcH#FoW#WuEOfFmP^^XeafB3lGg{4(4U~An|
zof~dVuJ^4yq!_<Ub5i#*Z+mm%u4ww!_AgVkH_x6R6uNEW+GYA0sot-gel0z`^5&y&
zixh*O))|ZL&;PL{xkKXHj$aqIwd82;ZPvWDTEe=^Z^!m^o7b&d{PH(<ptXwZ<`wTx
zE;C8rl+zPzC!ds4x9R_j_6c{{CvG_>*lG2|q4I7jUwO3fzPsf=8eD#NZTjIL`m-bK
z&p*p6rv-kj)$a}zOS2X|*<;qyZ}#SO9RowDgS>Fv4L8l*{)POLnmg*^w@M#0(_b{T
zO8v3q+9M(n5~cwu-fk^B|8qobU9VtuA}vzBbH-WyzdG?5m-yD6)S8pI<!O_DWz)wu
z)k%VFQ(hkbUeVpO?I+Wr(B)H0J?drdslT4^pzzSfZ<3*Rr`vvh<+Xo@gxPw|#A#uB
z&p(?Tc<TL?uyY%?9^u{FD=yS^!`jBuN_@M`_8*L<%2nkxb1&4La?$y8Xv)Qt<^CTZ
zi?Uuc->cu*|M3g=AOE+HZ_SQ*$;8ay(fpJD?Qdr$MTURw?aV*j|Ae=He*arg(mGi@
zd-DI={TlDJ5?3#%xv8}FWQVuslhqlq8UOl@J1gc-Jg+ad#O)T_0j)(LR}*qg=j9}1
ze+e>@+$pbK-CiGi@Jh8c$CI3yJ7+(B{aBiRZ^ru;Kd%QVo_9XY%C!G#cXrp^Td&UU
ze8#wx{~OC=Mg6h{rA-&)G`d%|Oa62|-;{J`&erF$5lpH}`j6Lm9CY4b*)d(HZI4CQ
zi|o&<zttXC*3bH3cb!nl?X)Mw{O2lj?msT@Ip+I#rE~PbDdtlwTW{#y+piThQ*~eX
zx+xw@QvxIWUzt>O&%JIuA>lA%+^khPnHMMJ+AdtG^oV2SSB+hl#qyMooZtxIJ+t%e
zLf^mdGPf0NnVfXg<A<)sq#D*o7LS#t$R=_u-^6ltSvh~ny{uZlf3uz%-cA(1JMYq|
zMYC=cXDptu$lHD8%obgaM|WqpoJrcaZ)H$tXV~U`wGgLOH;sGyHtVe0b|qZRBDA6J
zp2fFzJ@(+w-vs%@Bvo8JYwe{}4YkepC_OOr&@Q=~Ze1hsHbiInlBioJ)GAxwTZ@Hm
z&2`**);j*C%(V+U552MG$lWNxo^+qx_4FN=8&eMmx&1u%a<&$aGVio%0RiI~8$+@-
zbA6t3m&f#oO7Q2t358KnuXOKEKfYnYn>BZq=YN>`th+>!M{tc_+P|#DoxaL7-De9}
z<;souH3VLMoVor`Vus)u&mS52VpdP?$W5%<vUrYOUcFsk>-8Iavwyxh|1eK@eNP}?
zon@n(Xi^R9u9ky)_jJ8HK4WL#{WpuA-Sf#f8hd<shqt1&daM1?O^#VFO{OQ9>QpaY
z@_50-G^Jw-FJm-0!)7Nvc(*m_+s=;2P4lyNPTtVCYVE>#;fd8AMtX;*N>4rbDv<Ba
zwc`oT%U)HPpOIPWx}?c(A?LfbCILYUB#YKgSs*M~mvgyz?Xmm9anok&_9kiU$T9m~
z@X~`J?814ItIpZ4Z`f?Q88z2!`R(5OhCJC8?-B%yx5OA6{h)X6z=FRSM{jF7<a3`5
zJg)W8MPz!<{jMih=k#VjtY_TmXMf_Ve4K&OH`PTS^K(vVX8BH5)o<8lu<!UL1LZBR
zyApqEu8;U8Vtr<!=;;LY`Ck<}|DCO05PPt?o-@Pe+P}>nE8cJhNWR|8>$pLBk_HR+
zJyj>qxO3;3KU}faF`RW<z<r9F{;C97Ma%XA;{x-#RTk?0FRXs=TYl};zBEI3t<865
zwk8X&e<EvqsZy`pIqq{c$ITzAJVt)!Etfa>&*1$Y#<-~`e1fT`o}YB~+!wC@wa;06
zJMApBf5vf36T76_6}b)3Y&^;e#}pnWdK%R=o6U>-B(yl{ZQr(I0wsa9BFj{Bre68x
zu==3>w8zdeiylqhFw?eeiTAS=cbe68=G<YBkZ7I}bVczCBiqT;3qQghFcr5veNi*%
z%g*gJ{SsXZ0*^?Wt9d?5FVH<AdCgKHU9xF~=grOOw|!1L-BSC_`q%uDBRN9mZrn@^
zA9((~_bS|B?{x6!k&`zc+56iq3f(q$LTJFg?dzkg6crciHfUaqGF26J^5SR~XPMo6
z;errrs)mXE7wg-?|4P42{Jy7dy^+_m&jl~}>*OSsI<fs{{Glo+Jmc}vur)yj8nv6g
zzA*kg^X`djr^^rWCh@Cri+I=x-RIYI;BqoNBe3pR#vJXP$8CzIZF_WpOD2df`NX_e
z{t{vvPgR(`;BC>{|7d}Mlz<Y`?5>Y2`%m&VT4x(At6BUmZ0(L08Pl_7*5AIC)ppW`
z^K|ut+wSl0%{Z0(=&Esb?)uvY9p=yYKezP6&VJ=1zfVWlOuKc(JhI`~>D0Ekdyc!)
zGu?lG(Oy*fd__arHr2&OPsJAP4XQM7>1b~$D*C<DMlxdSx_^(SUM)&n71qd~x1oNv
z_m#ylbF$Yzm(i);-uhx%L+>XWNo)4Md|YxG@nTLs6PrsTt0D`EmitUjvo%P$wBy?0
zwC^fL&w3U`o{lc)w)=CXVT$4jDa|YMZ123W({AxvbXwl)h3*5Bh|23hN0Z;aTQq<E
z`X*!5g}R5hv{f(4&U~8W{y&{Z>s{7{&QlsX>tvsF^RBz<82+=)?Blr&;-6cTi&>I9
zZtr}(@&RlAm!|7;=K1Lde%(1gX2F4q9mhpyn`#`?D}0dUIm6WWzs6L)i{&wn(Z=p+
z_p76gZ3-TkxLx@d>skCirElsrJDr)POjQ9~-ws8dc_|_(eQ@1XgBjO@9&RvA+3E87
z$Z4tM-A!8)g5zQt9j}F)v&iyV=P1#fe9iZdW@}j3k5eb28o6s3?{@ssTdelpbP;=-
zqrx`jeFv6YUaIh^G_5AFJ@EVOwOpNk%4c7FynaBVF?zvH*$qm)&!>C;zVpx5^@yQ#
z_pXH#EY5Aa;yF9o{LMKNwKXqmnlHS0$5j6~ckS=KjOPV1n>{u@RuY-;=F#k>@o&t|
z{prj*JuO|SVqueA&3*Bydp)0S2*15nK92FEy2UZGF3+b`qU?_EKFzWF-CbnPd~UgX
z{FNA`<rO(Q7s$@^zkT6DfcDfov%i1*5vjiZfpCTsTj5e;nN|84p;vVGY5nB2XFa3)
ze|d|#jZyywnY-^Tj7{2EERG5`a&BL;Ea8)U2{Xfy6!D(N4~2OiKa>s-ODgX=^-@P<
z)3Mw8?5jJPiUsvQe~5G3c+7Bf`jXv7hhA!UO<%3z+yA|OE9bP3&^HQ_t3Iva=4i5v
zkFHA+XWh=u^j-IZh@g-M$35=m;3s>h`roOsd%c}0mH+U|4x!`0KlnavPuqJ@gYUwL
z33lJ#JQX;x?ef#b#{#{V92IhX{NhF$;{}C>6J#bB9nqR9=@e=EbX9K_!`9{pbMHCN
zyOWsp<x}!2S)p${Oh3O(tZ~rbEb4G{d6|4kaW%7UZ2z;HQmU5jp%v}YjW=9tKlCP9
zILu6#{(+18c!Bx6N>;@~ReP?^-~XtyzRkNrX!dETG#NcbhYhVeDwtFFPN)@hv%Q{}
z6YMcVFkRigRMb-SOU=f=p4PYTul0_pzi{ry{-v@l^%whEmrrV+yt(siy@3B#sU_Cm
z3|?K&@+vG2=QirhVf33@e_=+Hh@MNO*bGH+#$0Bj#AlP51JZ4>yBD@b?ODa*5&Uto
z?(vqU9hP7AnH;sd5;xnW?y}+f=T2#-`j^XP$k~1JH#VPqa$4(+>0WXAn<r<kKd!%h
z<(V&+@~5jaGi=@)9iLvaw;<#9pA{$g%QwkRI-KivYszo=iY?!r7FjRcfA8DT68C$p
z_iGJ5K6=M$@KNX;uffN6-?=Nd>btGo>hET{HIsj#!ACiM)vcaxSCrBt`Q&5`!qso3
zxK|k7_ucZ6Z=z(SCf`(vT)}lWlp-D+N=xONBei&o-KD0jKHEI_V}Hv&ard&n-n7%f
zZYJLxulPbCnV`#6JAN2HRJ;Aft%33A&6VGi?!ReIid}pt{j5X(>9|5U{<(LKJ2}_J
z?RLo1Z+i4P?8wQ7(~D3364!N$QJDR>`BVK|jXXQ==i5Gbcs!EsGm)*#m?YG5;hglr
zNu~;_y<4~QH=e6rucHwwKGlR(P~ya_%jO!nVdlb{C8kb{n5EErqWs)b{#Kvxn_Tvh
z>jj=avZzo~waomW6DAh@TSsd0o;JUaW{)P{l+osT=6Q6Ii9?#+$(Za}ZA)jWoxUv9
z;b$1mdQ^X#P`D&R78l!Uc7}~dexGa4p4FA4-xDr$yCY@Sg)1|7E5&C9e?OQpRhrpr
z^@e3V;?AOeD>i4%UE8<8Bi3)4owbKp^c08sG=)!J`uuo%Cox`EH?_CfIBV(4l)l;3
z9*0is>x;eQ{Kanh-E8eo;m0$wqQpBrbFJ<?f8Q3TJhQLGW_@S9@L^*go3oEQ{;6z;
z-<kAiR@gJ0>ry+;$ZJ%H9SlmEs`2|^*O>=ZoBW=Zbtj~n^E+?Nd^St&aH|}X=m#IC
zl)7iG$z>)UEh@W99t7A23LTv|W&hE>z=GHUk25k(TzS933OS~(dwS%BWNEQ!>Y*En
z4;DSuyp>^l<F6Cv6Zvne7hCVivUtDu!W6N}!l^nZ7E4Ah_MRP+s5eJ!y?Va>CsED7
zSC#RMCS~^-CwVQ6Jov2p-1$ug9i4kZwx1}oo7lK=htblQ;tk2nmb+pOYHo?l`Shmg
zvW8AD-`*uM9EG+wECN0&PYT(na{ua_%8iMh_s)2|-juYI_3O=|&3BenW!*L~m6<kK
zdFI=fJAK1Wf7>P5dVBtvL)T{-NSNGBk~EGIJIxzfDEoQt)w0(wG*4!B-!x5epKw+C
zwv^`a=uPwGUVdQzIo-QutC9s<NU==CqfWj*lea!;P3zJT6zF!G$=<lHlBaC*u96#8
z#eWmqjDizACKoop3pu&7=gLNlS2fzpw(m}}pS(M3e~yUdUc09^{QG{1@Bi>xrOLeQ
zqIksWi5vDUlK#V!e)QytJ@bAVn7@qo?4MnEU0ciOXzQ7Yy6!JZcHLr}EamDr_j=W4
zY4crY)2zzw^Qo*X;<&YV=?Q~w!@!qaMow9mcj&4tn{}=9+AC(pzuIQgPOUcU<GgXH
z^o^3|wwp28x|c8d?r`<JA*On|TF`7tp6gLdvz76hhIi6rw7zBJomnW>op?czts-bz
z>RBPPu&ylcg)8nXED2d3Aggh2#e@Y_&8s(-<wi)oxVSCcgy*+}Y4weC&eClYUj`{(
z&sI6%vQF@DbdQ*uv<myN%sAsyhZR4qJihYj&sfW=FT~acSJ!@--Ylx{<ehz4@BHH{
z;x1OL`o5##+ue7S4(09(C(a0uUL7)1m$SQd$@{KbN7LGGto3_6<=W{@EEiroxm*Z%
z(O&3no*oj}QIRaMN+bR+;|p%~nX6Y%dM;jJ6|u%$YIdpp6L+PBHO(I;e7v)!Z2!k4
zS0=xo==ig3>5j{;A``m4%Q*aGOAoYfsG9nIg`JsG`N{aq8h6{BqD+VGa*Ms$Ry8Hb
zROo2x`{Jdtj_S(`ZS*z^aq>p3nP^pPZ{?AFLQ3_qiQ4)JkGe1Dvvg-?%JK46-*)!5
z$!DslpK+$=`gPS_UdAw%M%Q!G63;E4nIxlNV!>auL?z$(*O6Zud9&X71kQMRBsE1`
zztTu>V%dQ(y-zM5p4_$)*~9-cE7eQ6_UO$;@BS&gNib-uZAqSByOmSSW#8%zaV=$^
zY_~4GZvIs#J*>{*XX(Y4D^8v;U85$wz3`>ucZ*H6KaCS-wyjR#lHL33-Exs$v+s=y
zGgG51H)$<j{#)s4pjg~{4Y`e*=e~C8Il1A0O7GiODHh=g->hGM@tT=gHH*3X=H0Nx
zA@66*TpQw*D3sk8-L|6S@dUq^a?ws*<w-iM&qOAzvtnMOlXONgwXbcn^wMn;QaJq<
zK6|pvNsrZf9oNFg1-m}=w7)oI5v8Vh`N(sh4Xbq<wb?`WY;9ir|7b__d_(1`#GB_?
zW$oq(-Q#avT40*=>WhhH&$-MaZy%mEJDz8<xU>DOx+%NIua^~XdHO78wdE}<n(XG+
zo~?CFbgm;8XAaN1DH)R_{(d?m%Pt`3ajPz_)Tu9M*Uv(2#<b?*XYAHXrpPg6tK7UE
zng3PO*!IK1n<wKXN;u_B+fxsk6fHP)#^T?(iWs$5+k5`qPjiZtSaV=a<xDdbYeqkd
z-@J=||25z>sR`u$v;X8y?p1HM=1qQ;y!z}s$zu&ipIo1tP!k=pYdNEDz%<?`b3VDu
z4p{!z^tr8Z<IEQQwGWmBtlD0na41T~xlYh0apK`>F^1<)HWr>z4r@KQll|MAze|+G
zne8u`C+>U19my{C!!3quoy%^ixs@LC4p^*QwQ6O}!H4>0+GQ>)_N-XYbo%u18+R8K
z*stAwP-xfT^*dI)V4EKP;^l<c{;TUZw^YicygZ+<pe-Vmb*s?E+wbH5ww_8A*gtdg
zb*DBn`8igZ&fBG1FYJE9yU9xY_8hY)>4|YB%1k<Gi~miQ>%D0A>5b%0zR71MbS-Yx
z>^|MNaT&j7bRJu^p4Mi*HB(n=i73|^WJxwZX?G0lD+tKG(?92UUip#B?TgN?JRto}
z#(J%_+Xib(2~Xj&y<PK{X!XBbwJ_6HfKN>1+|wB`;Rd-cb9XJV6<GcBr(^KhHGTI^
zoVms>8KATG;`Bvg7kV4)(wClUbpL7T_cFxn-AQR{;pl+&72?s8-p3^VDx5Bt*sn5a
z{|oj=e#f=FX-kv*WGnXWxyf&`Yg6T=i$9d^yt<-d^|s4z-Fvb7YXn*fLY|$H_1Kjq
z+#UD2MUExzS3dh{oj-fdFF#nqzExF6-mXzz{WeE&W1iD3rIW5zZ!{)}>rZ;e8=d)X
zQ-9P6tMwD3O4Y)4I88D0`?#TuH+Rm)ui~#}Y`0eap8jIC$$>KVQ@0tk-g2g~xg_-M
zJlC&uUVMpLRPT>4!MqD*kJBA5-k;SSBvm@?rLvFR15rMGCkO7+d71~dy=+%xsMZNs
zlv;OGqL4M7X{phs<yvp#oZoo*^{(3Byvi{5y1<^8d9gn?{EL{!uP%3FezKx~;kS1s
zPQA<JUwoUFclbhavH`Ez)*7~x3PwTqBV7!S%jnh5kAGagUe9Fvu5KfqYtMV8nI%1!
z{9qfhfkl>ee!Nqnyi4-+9ji}CRH>ZRNnNhH;bqb1d!?MKIj&h%U-o*Qk?OJMZ1sNK
zMI39r56$U*HK+fB)$gkC`j%v_y}EOcT%P|>^6@i?3&)oxKG}GxWliF?eXZv_OT<pT
zNPDu#$@djs=9f6>cdjSig`eKn^GWIY>-tPC$v}>%rOTfDlC-fpZvC7u$a2PHakGh?
zvJY&g2zDeKm|9U2p=#z{-L|I4We?*C+eM!_4jqs^chdGw;rSfXBO$Ez*$lJ1IZARj
zE>Swx^Nb_7Rq!P9&B|Tv$DGsFc-v-42kpOlN&MD=F#VW~`SP=UpDbm(Uhcb1|2x-T
z(N=wC4b_%P=c2Q}|LwcZ{UhC0S8nD0P8ME<4V|CfzslTV?{xCSfos=}1RlA2^T@TA
z`)^l<@~Te>y|P|9TTVxZ*}&k9MQw-2MV^O@7ArM5e3~4@g1>5*ESM>(Bl|2PaQ=na
z@;|>$;Il~cTeny!(O%?qKg)}nm)$DaGTI`i)wh(%Es!?~+v(|fr0(`E&(7KAI-0xR
zRNXCjQ#7Y&Zr;-mwefPF7&o{-pLJ7tLGdl-1;%TSt}@)ju3Zwm>+Q-6Z!xtmvop@C
zheT!Q_gxdS{@`-mxZhyuSJ9t&o$_{3Il8`CiHBr%F}&`5*nVl|Jbqo30EX2+3T}Uh
zmdj1D?D^pTf62x2@R=nVi&m{JkvW^ediur1gNGaV)IP?a+8y`1>+$<pj~8_u4u}Z3
zA}(EK>t%P-t4MCG-gA}6{uLK$rp?Hyd*-V2_rwmn{FWWE919N54Q>5gert#S?z=N)
zX06uv9JS)wpTx&q?<`N$Pds#_#X<9Yu?5?y?Wq@!cU?WXNxewt^*)EgUsd%suWQnt
zvVUo-+xy}*Uv=!o#9Nk4s<8}wc)fmqui7Omu}?}FPwI28ES_{X_iWIDGdt!ioN+mH
zpDSyb@$-F?KdoMAG&M~;(|7S3omp>NvP_ldrC3Ssx1PJDVrq+f+e-;Cwtbt^b|&e%
z>nn9myH!`9bFlcr+bdJ<&sP_|JT29AZaMF{t$v1f?rT&+gwBYRC>GoduB_2IyUF=z
za$V|@y&+i}x5eL*)(UxcBGE_Udi$3rnHT04_T6K=Yh}8h@u!`s>0<vE-`$Jb4WB4C
zUV49aR*$FF#>r1#>+L;!s`klTPhC~-yW(%GUxt6~34b-YaOz1#xvbx{98>a3(sz1o
zx~2R6#?hlUCoba_f1qZ+@B;rO=@)v(X3q1}K6KpG(?7DJ{@J_p-v1Up{*zpEQFud-
zgqYEToe$=$yR}Tt@^{tWX0P(U%-Y{iyi?LV-0WTcXSZg5()-BmuLLK5zPfZ-*rEs5
zj$WTou-#hn$z9goM~rK>gkPI?Q2upK)e_r@c{;0iyI6N0tV|bLS#?v^Y0jF5+KOyh
zGsS&Q-G1yaTmGBwBF5Lk-dDB@&sykLS!R}SP0lv5{ol0w>6fQX{TJrnnp8B)@2F1R
z%)=Iuiq@xRoHH%edvpFw@s6}DD%;mwmEAwd<Z_9MTW`*K8`+EB9)#)ty=gp4H#Ov}
zTJ*_?rKwx8<_8r&+TU{XX?k|aimiSxQalqx^R{iA@Rmt|V>4euRnkX=wl)LKbQ3Ar
zR?85zYTkR1Sv$&Q=iYQTZxYWJQ@I<zVX6Gv$9~g%zn^Jc9;qktP&qy5rpa}ehLWb)
zpL3N1r8h73U9n@4zmRmrl{0&v?a=w=WbIQn@us|kSgilF)r&r{CB85Tz0l?Rt!7)e
z>hj2qt3ynq)*sm}zoS;Ga{Hy2W`R`q(|t?ByYF_)T$!7&|EGceo~%Xp^>VGwtY}ln
za+WX)-rexW<L&%?$|>J|{Rv~|tdV{ouc!I^)7vB2B3tFz`{WewH0)hiEmZq~Wd}cp
zGuPvZkA6v1EPu*adE))HzoqkC-26EC)7=hdbkv-FYjAjJ&4(<mxt!@|E+o#G*#FzY
z_}5o~;)l;FnD;BJdpb+(UY7fT#@&4!vYhW0xgYgi<l7Y#y8q%4%k;c2ZQrtMs+zCQ
zU)eQ*d8yXlFJgxSgF^P3&trVf&(dLk{lbpk8|l;JkMlXW&ta~4Dxobtc~9~mle902
z9*g+8K8o)#OwhEbmoWAYTg<-V_`Twr>8c9qH#;ral(*k#47y@HQL%X2>2pom?e~9w
zc;#d}ZK21B*>8lNU6^U)yKbw4$+C@G_D`~y*xV;>p0m!XP4{nMbeH@$n~!^rF;=$a
z9;(U``mVF2KVrUB8k_PAb_K7O$HcZJ2!&5*d-KB4^!YxXAG;KO&U|!_aT8nhsV!d@
zrY#klacGNqufNE&JJAx4cxKOVlw^CEcjY&e{I%6B8Ts$@gFoekuYM!ix_kfB`E6?>
zUs`XvVcjfZlCM|dp7(<zdU3^>3A0YrE<VFx+WypI&avHxeRtF+TH8Onc~fxNA&dWu
zOb<EVo!H>yowk0@)7Db~RVfnhd*3D>o0f9s=$?&R()j1<MOwGH{&rn$n!4x^@8^cI
z(yqJac|LP_Ja^sp^$(?6^5%Ef&3VbkUw?eJu|xUuTibgNB-)!vdA^;s!Esxk|0lQN
zbn~YCM-MU?tx6qFnlD-S)A(QWj|W?K<V0s&TG=VRQFEtVgV{p%4u`98x2+i@bW&!V
ze<+&Yuh~+$tnAwsJN`+|o65gv8<+i)+;~{OWNpBH1@U7>Zj(I}HoE@`vln~B+>~#z
zO)mC*gLwFi2YNU8fB459&R;vrlZlyOM*F|=U2I?7S6KXA?tH{8(knAizV*1%N8b6;
zDNY;#E>C*r8|m<SxK{K9r^<O;(!D<;F1D~rAo%gzoVAA+O!B;VrSizbs@DAb=kD3J
zpHqrkV`BJu?(gg89)Et4lkiq=!IwrRE?&0^xo4J6y&MOBd)&O^5pcVov0S8it%36b
zmxF#?ic&}X?l7iyxGrg&m9=)#v?R^Xp3<jptEF?QZDZ{ZJhn1}%Y)TrztoqLQ~MTd
zxl`*G$R(%U+xuOIS?^`X;*1DY^|v0ME}u?*8GM{?_LY}KGu++?-Egfww&28_*(P6q
z>{<Eb>W8H)YA?@!IQL9QcO~!Hk7umjs(P;C5$-t0{ZwbGz|5t(Zbm}y4^NQJvbmM&
zvQu^KsZTsl&#pQp5`H@D|Mm*yH))?wd#`-#^!-J(Z*EqS&-*rQ-*hQWvlzRF?An|v
zPaX4otwPGq7ryBAnDokMbLLs2uISGXuii-8_VoOr`@CT*&M$D1=xFF^QP=wXaK?(O
zZ(M%fHFlUHU2NLY7&FDZZ52oQSueg1^I3wQ=5CZ*aiJxi;e*yOo+91_wvO8OJ@;76
z_MT{{AY;DcrrEXWmVfosIInDyiSrkbzqc(qICXd5<8RL4S5r1W^m$%pb@kZJ^;1u=
zc(^}ON%mQtZQOaIDOI1xi!H1`rT^WR+PR;ZC!VO@==v^V27{cwzl4VP&2-jq)wGvu
zkJRQ}dHX@+rL@zJ{fY8=6_YC*e(dq6n3S`k(fEY1ATQHHrlM|d@t1BE^BRggjOD&O
zciyj~Jo`+;@BRyp6@{#kchfH&;J&XAYEYK3^=tSs{%^<li!9pr8#T-?Y3tH=s5-AG
zU-IZo-=ZC#+XMcDva%gbP{{O}B6#o5TgS(NMGLuhD6E(v;UUNRD0csTy=|;f$MxjJ
zFN<CMYrP=!hHk_z!6nDbdpgf_7xcKV>{-d8CuHcNypLy*SW(v|HiHWiNg*|_+Yj(<
zPWo_Ti|^*|x85E<^XFviHjesbZKg%v_Btsxt-s8(+nBY%*+WHTFWal#OPBJ$t65q5
ze>ICv?sAKI7AA%V?0^5yT=nly$eby2-pcTv@%eW;WNF8uwnfQo)6x=j@2D@eX>XJ0
zy0QK&LwbjkP;=#R4#A82%vvW;kMD|owbbTVv42a;_ZbawkpX-`n(Le_e_K!Z&GB1N
zd*$9!Cxx5kmdUg(ExGn&S9R$1*V9|yPrtfZg5iVq_Ih*cPYPyBHq>$|-Hi)%+jc2I
z_S%^hwvG0?H6~fFlg*Sh`BgN>_2c_ZJug1hx@%34y2h+?JnLC=op|P_V}(4?k2a?V
z%c!=k?WmRhzn#r$<-C2fR_jf_%5C*wn(KbCr)^W(#P%o!=q#VErG4Qs%aqNV63%Ge
zy>vmnrRv53G3^4y1(lC)D*StEwbe#+x#;!euVrOYD-TaycJR&ARadU*obY<=B|h2h
z)|O+1i~X)&4qg!TIMegoi<_Oc=MC9+vKhY+DOerz+ICBtM!;nk3G=jhDSVv)dJ41d
z%e<^g4o*FO@V)OU(IZZ44UZe^FK6VuZmb&D<2+?H&(tSA+YUYzo_6BYpKSThKTHj7
zMF^ZZ?hvx~%QTZ!9yPI#u6=tO+H0XNIMLAH+Gd-w1=@*O!jpFI-|{!UCvvmb9-VgG
zH=4KOHZJ+P_12A?gUO4&6-tLaO1DT3o8s{Cwrzu4zo@E}QQarud1~I31rkA)mlDFy
zO=n8n{GW$qQ=(<k+UELp)qU$f{!iWi)A+`tMPAa$YXau)UnDSDwb){{{xMDVzo7{+
z!s<Kiz2E8yN7qj|=qGP*Z2yDA{|7|X)18&G?2pO6Y_?@cW_t5X;rRc*KA|ZqWlqa(
z5j$mhYjH~A<XLekA6?bHA6~Mb)1y;Ww%9jiuFw4{ty>jGm&~5s{%+%aPwo1Lzm<3t
zzpC9eSh{@nt*2WGogXgMI&fvO>4ZaTcNAPG)!pmmesA%WS&x+@=5G!T-{ZdS==z(p
z{Ca~~&Q`9IQCZq|>)(P07N5(F139mj$bJz?TWdHanB6am_gAFC^~nm)xV=m@j)(4M
z4~+^|IDW=`{^C>m+pl)(`zA-YKh<&P-<kX5T>8=NT`vw!-XZ<k?);s(EpL)dp53vy
z9MvC@`SRrQl!Zrq*e1sPNllJ8SduB}nX~em@&~q$U-aC6zB7J(>ph2mPVt{tO?-b8
zxt70r6=OGLL-Ciu_G@M=-%HX&z5Qphus2PJ*J|Duyy{lcY;&tJrd5GWcauWz%q<g9
zEYi9VXWb<Cv2EF{l`sCe?XT_;tiEROioave)(p{^>S2K!y>3h}SAVltS0t?NUD%oR
z>8}oC991!6T7LYE@lWAe_q1<6>-*m*fAFmQ>*o6J!hZK#`DfO(Jec$P@rJ{lilws^
zXB=3gT;--%!={#UTD9i!&J%|9N*y<O*c&2Gwa>X$w$mf;rFntfae>*BGpi!z`aWAT
z<um77iBQGnuQ?^0B_AZy^ou+{O{xf*CQ!+$?&oE)NbB@fJ>NOXhfU4hX5HB1cwvXW
z;nD+<D&I<8SnW_vDEL?>I5B&v*HWYU)>GSJUUEiE=3afact;Yu+DpN2mHI61d+P7K
z75!)EACXw%{6svx<;=xN8BKXl-h}vi@VP(COfNeU-IN~Gs<d0(C^phMkkdc?;ey>w
z!4};O62IoMtF8#{pJjY=N!E*L1{W7Gm@B!wS=rVp_xkES)5YICUK&+-+*~zlZ{F7<
zXY!T88KO`59Q(3FX0Ns(Yr&2sS7v7PnCRCw7+ANLy*MuZAWOBl|E+W6>sLANmj^{p
zE#&>*^R?6Ma&OY)J@N7viq!b$ojO{?Y_K|G=bZTaE2E}MvaS2zuFP<!e!irk<Sw<W
zx}VDJ+xMt!Y}m{1bkh8j@#c#41}AyczHZHaARP3o;cA$?pXbw<)<nkEXd@wkWe*o0
zN<YFHxU)!BG_bP4d*QYh(vfF0bc(Jkb{w_&e<LY6{za%wXb%4kYleS+%oeKJC`!rC
zb}j$+Vd{JTUt)U7vp)Q8-sSu6X(ua-6XTEfH{18~ssFM3{o(u9{k~3rOi#}@`Vf9y
z_so5x3Wh(mYaY%&vA=5Cgnw-|jDPDZOa32mX8iO1+_L|1><0CpE&tZu-d`pBukP@K
z4fWq`{|f)Se!sh*-q}jw-{q4Z{NKd)2MPRZvvvMEf4}no&VShlyS|y5SRedf_T$re
znflP875kq$DE!Y}_}l+ZeEh=w_G)^o{!f2(+PksoZ{^qX?y297*X4hyZ~DiN*!bXF
zkr%AusT9t^$iSe&#K546w(-HaC^fMp)zK%lxHvyABsI4nC$S_|ucV@+G|<=khy%}F
z@n7;xdo?=D>klkiaHvV6`s0jkH{U%lS!o>n`d_v2+%l~?2ma5KrhkvSw5q9@bK0pS
z|9jl(EZ?2v<W6Mn)mg=LO|7=AcO}Cv4;xLv3sDaIhghzCu=-&$iQnzUd5goFBI56h
z=)Gf!VES<5`V)mY9QVYpO;vjAxZg}lV&3lN$>$R5XKpEfqh6G?CHwY_CGK|2%aV?y
zOC~y9W1Sb06wp59^LFiZUhV&VPe1xN!}(~H^0`3aX%8d3Y7R5@J*xYrzWDnp&b*{A
zx0g;23&@;XXkzi{$iaf|?TzgRlO_j0waxyy;O(-HM(cN#H_s8;d%;2C*~GW`4hQt&
zb!N=_w0BMA;@A3!psZ=n37*?uaApD%1A{Fq1A`=bPzDD>f)Nyay&><jZyN~wl{@jj
zV1mBx62EWEY>HcMABr&F)I0Ie4fmtFZY<h#?!}W`Ki`+DtG~UrCP(7-otHn~-Mu_n
zU3f>~$;TC2Zsj~+3TyLDj$M&3`I}r~u(Fz5|FOj<S+1S%Va)qr$N6u)hs9*8=MN-!
zDuh>^3*nGm-0G4r@$`#r9Hw74<*j@p#l!jQMbIGzJ%{8+xz`W<`tkB+`=eyW>*n#-
zc4kOVe9FCrwZ?1Kf(8d`57Se!f=e4hUKVn5p0=8>{M5n;A4Rmv#ELZy4jxJ`PB(K}
z?#ue(%~DQ<D{?z4#0yr<>2c#sHjtaP=5QQS)tM`rO&i0G8LzPjOgoS&v0BAwZ&yl!
zCTqU_)&-l++GLrCB{SZaTb|L8x?$PU89i6dpV63dqidVddZ%qA`Uc%~T(xgcRRu(E
zcD~_$*-I@*J^7LBvA-AIo`_stzVOT3H|$%S;(z#t{yf#18K;^l?3$BhsCIFE!~83$
ztz~}GrXE@MS#FQ;Ca0K4yG5yMI=EK^XH^=`{#qOVW&Msdoi^gCrkf{OKFUigOt+fP
zb@=VUg!|S{o@ns2RdXC)EWg$Bk@(8BYb`WS${t<K_+77{f8y22C)Ajv^WTWv(0pL&
zzJ5ift=gCBmEygtU#W;z3+GOA$T^lbo4>8+>?56JY{9y%>$W`aN;+aBTh;HbKR;-n
zSbucWUXJ67_BilPxo2Rn8vA6;62AATb@6@f`TgALXXEC)S}biJ(Gkci=plVi^8Ff#
z6T#(5)6yO@seS(WN3rATw;a2vumALay{~xu!<4J9|4(q}n`A3^AhPr8#*(n-=RWQi
zJ-5taPG``;J3%L`YrB8XOZxXbWqpu`xa})3{Rd}j{!KYh{pr$2?W4zje9Tz8Lvdy9
z{J{A2@rY!6tTQJ#Mez&U0!9V~MP|%o?2=fL7*bh~S`1FcLB82{3<UOaf01YVcByGL
zi`N2^DVNNqPYKe<d0Cm$pSyLFh>3Fk-}ly&%4e&dR208C=~?X=>9=JY${(Ga6)n>8
zx5_`K*L1gRjq)>z1poS@v)1oWuwY{m6S=<d`)lcoujJkZ%Lt#_%&lC(lYDHVUV?q*
zS04$96emX315GCrUwi5sar5ZCye0JIN~Mq2)k^}xnhjwu45sWpb4C7UOvIvikyzao
zQPQbeN7IiS6-s!a_+X9RJElK+=eBxOhBDt<8E<Y~*!^nSH14Kuroy!q{BO0cF!&pK
zE?%_jhr}^9Hu*sF+A~^LS5$qu70-OP<z<fp>x$(ETQ6OR`a3si<+(2hmcHuGt_+Ha
z+VX>cZTpO>eHMHV+||Uy51UQ+ADvw{)j>A=mEJO!xd#|SwdO6lVma67=Z=N;tabrG
zTI})<e!1;;v^@9koL_wG{(YJ=^xfa_W}m&i+%3l3_DF=y)~fKH4M(z^gO;6Uw4JW`
z^Uo1K&fBwu7MjlA?y`0#_pc{;+2{1Xd=%(#>%Vz=8QZUUCSQz>9zS${^Y?3ic#a1~
z7JprH#U2r@3T1i0&!ZZ8Z!<A4u(L5RNTHQZ9wELyIp9(r6tA@*vDvo`L~8k;*x#8n
zeXS1P(%a77Cr<3zBo=fn@bHUh(cj0!CN5Pt`Ss8H@^y2zE<X7!>EZ9nced`cd^E0K
z{7_Lc`Tp7rFY~{BwdeLL-PPQmTfQY|TUKam$Hxq#g`({bbUay#{)zg$Uvj7VQe)ED
zEqPltx30~|joGNW-Sb-Cb;-N8(zi|YzBKKep5D34yUc;k@i(HsCGJX6lU*6ssFg0+
zd2ef|Z|^2snKz+V&au5JSrdG9(N{Uq%(IsQ5^7FqtZ#I={UY|JScaIy&p>gJP*uL7
zeJTDI1J9<ptJ-faoS_?#7*Too@Ro}i>oeLvCX_Ms>PbJ(d>bpS5*8VvXR}%LJQu6;
zG=>vWR_m3GR`4=uZ+)8;dnLs1SqPh`w3x~z$KR(-xD{^HTAckDxkN0}>+zxPbhUN-
zA-nl@*s_Ln?Rr=s5UJ6<cfvzomFvfP)`<$ZY?xu;c*G!WLKJiH;hc!|hDJGylMV&E
z+F-m&-il}Ui5C~Qu4MI^G9&r2((xAp-;V}PwT%yweXJLAE-m(Y>fK6>tmi%_4F2oH
z*HzD8Y|8RIGmZcI&A1Z#D89~TU;clxmixP=ad`>DoNqFV5}41NcYbiGjZep6#i6Ws
z3YT@Am)N$o2Zo!@IBQtP=^w~_aDCDL^S(PC{$rUH^ieb5^5s)2+&uSdv%eKBykBl(
zWq(9_3jZ&D8y(jNx0icNi`@22JU)N<jO*##HP_d@c`9P{<cjZBi)()$CzijN@ANjx
zctu9tr?0<5|5eoU`bll};94Q`u&z6N%0IC~YkT&r-|$Ri+eJB%$698OFB+){SA6(*
z-c)?Ykv8d!CmD>3<38u!SDld1VWrC1UOZPe)G=ticV}2hmP4+#b=idlcTcTc<7}_b
zfBxdbXI|GdFBV08wfQ3#`>s&n_xE)-*vpHYW%NQ5r%XT2tTf&9gsu3&eXItv-^Q={
zAjSRq<-)HeY#Hk9WwW@RP1f}7-!bX)3cosLM3!JL%?lQJu&rH?iGd-Km4QJ5ElYT(
zR+i@%rGN{%tsy)6?ildA<$WQ~;Uj(HL}0Eki)Dk1Zv*2tpOl%~W=uR9*(sO)>FdIr
z_l-wOn%DYpKB=zhpHgmpV={}$RrBgiA7sxPFV~xWDrC3pp96C&56S&MHSIwz8+V~p
zw9f%snQcrnY%TfC6jjd5@VnudCXmm1&Zcqm$L$BE1g<Y&ab3u_IKY2~NuR3bLBo#|
z-b5U}r+q@%;%MI-QQfp3!M7p`bS-?6w%)K(d~2+fwdvUw4tF2h<$}AV@@$V)znJ(a
z;6+Z$`uTSHYtM=_c?tSvaXY_gsAAQ>;^6x3TDw^3`6ClVG`YU5Sk|ULXUmHDB4z<%
z7J=7nK6Z&}$mJdAmig>^x#UgJ*^|2(wm#mddCADkh*N!2qNRD^q%}u$*-xHbU+tZx
zpR8f0`Qon2|1i;}$S`&OiO(DEHu$%H;kqK^u)2BIY?G}OVP7h$qt?8=`rK%K=r60l
zQ?9R@*}ra+wBP=#G+3^0*{;}CQ$nT*W>rs|e`SCCXZs^IuOIk6jmYhu{O<mNL(49S
z<#412A5DE;_F-bMlX`UP%6qY%EBIz~RRy2jCA#d;gpWdJZ)<1vb^7hvpqdbv@Wy1$
zEeF5-vkq!~R(<j_GvLx2%azrQj}un)P5r*;#P#q=meFS}x4+y|*L3!&-h_QE(<it+
zHhi$+LH3&cGka8f7Wv<`(n%DPmMyC9{C{@ppGoKVliaKGrUukJvW&ko|34xbEicUr
zj(f-#Xw1yOaE+aTL6`w`@36mr0H{bk8hSAAv6;YL?hE!j6TG>Xux<O>pj1${F>*`6
zEjEs-=qRb%ca~Z(c}9M{|D9LUvh%5K)$PeDSr#>)@6CRAme=;?lO5~KZtLG!GT-dr
zCjUE^k|)#}#HRn<x9-)eXKi(lC5~Pe{y%xz!@u4Ze>dE;`R8FaX<^B$nJM3&mFG8Q
zzTLNYZRd^7DK8IP>B!&VFZE}qO8@-)Oq(0e7W|*IabDT9*zPU+miAqCytQKye`+pQ
z=apG0MJ~xUxsvL)&#6^E=~11;V%2eYqlL+YDU%x%PHeb7c~_j$qoeCzd@o|#x@U8o
zvFG8p0y`8kcBbFYatvlQ-nEP|@QP>lMxhfdsS1UhLht=dW(lj#R6e~=bnV<u!IQfc
z)m-<<uJJaxRl+cFh5j-F6VF4sLX9zN^@|oQE@Uoy8*oEg<Z+_ahKp;o+P-R>w%|S&
z{$;|ay2p#=+`L=tCF50CSXJ-HDc7&|@#hW&*^?6%<!(Okd~w+1=zk7VE=hd;{&VxX
zd7GD{dZ)NPQ(bt-|5=9EliH`3H5UHes<QKQA<L>=RXPbDjB@7YzS1go*FWtjRPuD&
zx_6c7Y|~4AM>!pMHD%elx}7cCrY$UAwIXPP*n`7GVg|iV1z+D>vamK*n{$03tAa#G
zwx!v@N2Z?_8ukA=kY7`NO07ip%GU?cZ3f?urq+JH!*cGfq4Tb#*Rxq~e%-;ozo&Zd
zxA>pyj>ewe{^Zm1rDxPu?(lMX<~BKFd4~|g-h)%`R{JoQ&f1^yz;W(-nKIWE%S%j|
zmWy6nYsIoEL1<%t+3Ou=Saw9r&DmykVVYz@MM6L{;}M;yUKbXvfAuO~vM4wqG2`OW
z&W*GCW&E1n**{!wm8gF1<P2XY-u63|!MxWiDz|^RQF$msHb3X`C9%H1N6&Uj-k5pE
zmHoE9#;@)d>(<%boBI6omp%9Q=<C0>zklD>_x*q84eb4m8Iv0i?$_SHnta~sl$)f%
zme7_ras}<#>Ti6Ed*^!dR8DTo{?2GG(jLl|o2q-*r?_xdEys+lHnS40I^?gLxvQ$F
zSHEx0-L>1amG`EwImGDLviG#DkT{q7k89d<CM`A7O^WG<<j(uC&3}KOrnh$Yoi_=J
z)urq9{uU2_@6QJn)hqPv^WHNtFjTQIFi4~2vEbyQ(p==;Rc!th1A&_UDgQTI+8ZVs
z@IchjTUF)4$HGPHcbrt)_-YM*eawUV#@X>+mRc<#vDY`2+gMw_KHFAiW|=ozKlX%i
zEW7dNM~7o?Z#kRh{NB<{f6HU}Oxq-7$)d73mk#~%K0M3WvdI7B<r9Yvsw`_RoT=%1
z@Oj~)7qNcVyssGlevmJF{^Oi&2m8W$itSfE&v0iv@qoGZqjQu`LY4N7biOdRO`e<`
z@vl<DGS2DU+?)I<^N~Yy>UHL?a~qaD5m7ID*Q53Q!2Qj<YecW`%lr6vFwH+W{RGEG
znVb(sn^mG1PFnmm{9#w#xs6*(S-y&IMN*PhsdlvU-1&}=k4H)FV7&HX(~^6$-ktmT
zaZZ`X>h14uoas`UQY4Tndb4o3)I|BZ$KfiDzOfGuaqkYjZ6_WXa9++asN_ZSev6;3
zTQ<x%BkO-J^pspeVZSw()slv)k85<29538Cz<!$hiRmTzpPJ8i@$Z>%pwuMnT))}R
zDVEdDP5b(HQ*NHxZQm!Y{a;<!_SJYR*nF;89d*rWwE}0;o>da-RrM0~>{@5GDpyba
zG;_;qwT}Ux)pOeqmhJlN-hJy?7yp|-aff+he+g`P#&yf={J&?JUQa_sN`$n&3mmAF
zENqiGJ!6^EwR1H&6{2sZycauq&*1*m7tPa6ww}%V_*D5@{JMkn7qve9oyK?0e~UYF
z*xjT+_gEtfo}=-PM7v(s|9a8G@rTJNYp=PYH+xz5v7{ee7rwjOi}Tw=EPK#h_@+_*
zaotCK&-E1>lEUNT5ArW}Db>(xcI{sqIQ?5s!Lb{!Ii?-do6OL#*th?23wz_~*&)mI
z3tOYkZV+Kq7k)V{@v&8R)|*%LCO_{rxG&8M+x>lYqe!iT-@Vt7OBV`1|5__~BcVwC
z>f@LHzZTVY?0aQ0zpIE-{?-!a^@V(CM?$afJAGp}-<iGc`?pn#9W=gcHh-td3q!N>
z{x?^6xCe(De?Q86)vv;O(`&_>nhU$tTjo7E(lLKug@FAZzZ2KA<=@yReT@(BW@Hj!
zz<rVh0~jcPNz}Rt>0AqBL$Hksfpjx6fDHL*fNBWNF(PCmv5k%(jC3(VGZJ~M1lbsD
zy;FoS+@`3;p!8LdjltF%LKySN4AmIaz7euHpmGVl35hW0t0k&A$PG$lQ?Rul5T@AJ
spqc`0Paqorat3<wh%jJ*J*oj{g=K&@D;r2L2LlI#9TNk?2`3N_06!=ei2wiq

literal 0
HcmV?d00001

diff --git a/out/artifacts/1218123_jar/1218123.jar b/out/artifacts/1218123_jar/1218123.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b9f9034507ced5418aa5c52de409e4bef95dc226
GIT binary patch
literal 13175
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
Sl?`MzD5}z#7#MyTfOr7>$x68Z

literal 0
HcmV?d00001

diff --git a/out/artifacts/1218123_jar/CSSLesson.txt b/out/artifacts/1218123_jar/CSSLesson.txt
new file mode 100644
index 0000000..520f260
--- /dev/null
+++ b/out/artifacts/1218123_jar/CSSLesson.txt
@@ -0,0 +1,65 @@
+## Title
+CSS - Cascading Style Sheets
+
+## Lesson Text
+Cascading Style Sheets (CSS) is a language used to describe how a document written in markup Language (E.G. HTML) is presented. It is one of the three main web technologies alongside HTML and JavaScript. CSS can be written inline, in an internal <style> element or added as an external stylesheet using a <link> in the HTML header. One of the most important CSS concepts is the box model, which is a box which wraps around every HTML element and includes padding, margin, and other properties. You can find the full list of CSS properties here: https://www.w3schools.com/cssref/default.asp
+
+## Questions
+
+# Question
+What does CSS stand for?
+
+# Answers
+Caesar salad, sir?
+Cascading Style Sheets
+Completely straightforward and sensible
+Can see something?
+# Correct Answer
+2
+
+# Question
+How do you select a class?
+
+# Answers
+.class
+#class
+<class>
+@class
+# Correct Answer
+1
+
+# Question
+Which of these is not a valid colour?
+
+# Answers
+color: #000
+color: rgb(0,0,0)
+color: #000000
+color: 000000
+# Correct Answer
+4
+
+# Question
+How do you select an id?
+
+# Answers
+.id
+#id
+<id>
+@id
+# Correct Answer
+2
+
+# Question
+What is the corresponding keyword to the font-weight: 700?
+
+# Answers
+Bold
+Normal
+Light
+Bolder
+# Correct Answer
+1
+
+
+
diff --git a/out/artifacts/1218123_jar/CreateALessonTemplate.txt b/out/artifacts/1218123_jar/CreateALessonTemplate.txt
new file mode 100644
index 0000000..01b1770
--- /dev/null
+++ b/out/artifacts/1218123_jar/CreateALessonTemplate.txt
@@ -0,0 +1,21 @@
+## Title
+Lesson Title Goes Here
+
+## Lesson Text
+Lesson Text goes here all as one line
+
+## Questions
+
+# Question
+Question goes here (Do not number the question, this is done in the program)
+
+# Answers
+Add as many answers as you want
+One per line
+Do not number the answers
+This is done in the program
+If this is the correct answer then the int for correct answer will be 5
+# Correct Answer
+Int representing the correct answers place in the answers above goes here
+
+You can then Repeat the # Question tag as many times as you like.
\ No newline at end of file
diff --git a/out/artifacts/1218123_jar/DataTypes.txt b/out/artifacts/1218123_jar/DataTypes.txt
new file mode 100644
index 0000000..98a0e70
--- /dev/null
+++ b/out/artifacts/1218123_jar/DataTypes.txt
@@ -0,0 +1,40 @@
+## Title
+Data Types
+
+## Lesson Text
+Java is a statically-typed programming language. This means that all variables must first be declared before they can be used. This involves stating both the variables type and name. In java there are 8 primitive data types. These are: byte, short, int, long, float, double, boolean, char. These are predefined by the language and their names are reserved keywords.
+
+## Questions
+
+# Question
+What is the correct way to declare a variable?
+
+# Answers
+i = 5;
+int i 5;
+int i = 5;
+int i(5);
+# Correct Answer
+3
+
+# Question
+Which data type is best to store a true/false value?
+
+# Answers
+byte
+char
+Boolean
+Int
+Double
+# Correct Answer
+3
+
+# Question
+What is the default value for an int?
+
+# Answers
+Null
+Undefined
+0
+# Correct Answer
+3
\ No newline at end of file
diff --git a/out/artifacts/1218123_jar/HTMLlesson.txt b/out/artifacts/1218123_jar/HTMLlesson.txt
new file mode 100644
index 0000000..76187f4
--- /dev/null
+++ b/out/artifacts/1218123_jar/HTMLlesson.txt
@@ -0,0 +1,62 @@
+## Title
+HTML - HyperText Markup Language
+
+## Lesson Text
+HyperText Markup Language (HTML) is the building block of the web. Invented in 1993 by Tim Berners-Lee it has gone through many iterations with the current being HTML5. This introduced semantic tags in order to help developers clearly define a pages content for browsers and screen readers. HTML is written using tags which general come in a pair: the opening tag <tag> and the closing tag </tag>, however sometimes the closing tag can be left out. Each type of tag defines how the browser will format and display the content. You can find a full list of tags here: https://www.w3schools.com/TAGS/default.ASP.
+
+## Questions
+
+# Question
+What does HTML stand for?
+
+# Answers
+Help To Make Layout
+Highly Typed Machine Language
+HyperText Markup Language
+Hey! That`s my Llama
+# Correct Answer
+3
+
+# Question
+Which of these tags doesn`t need a closing tag?
+
+# Answers
+<h1>
+<body>
+<form>
+<img>
+# Correct Answer
+4
+
+# Question
+Where should the <!DOCTYPE html> tag go on the page?
+
+# Answers
+It`s should be the first item
+At the start of the body element
+It`s should be the last item
+Anywhere you want
+# Correct Answer
+1
+
+# Question
+What tag do you normally use to link to another web page?
+
+# Answers
+<a>
+<link>
+<nav>
+<li>
+# Correct Answer
+1
+
+# Question
+What is the correct way to declare a comment in HTML?
+
+# Answers
+// This is a comment
+/* This is a comment*/
+<! This is a comment ->
+<!- -This is a comment - ->
+# Correct Answer
+4
diff --git a/out/artifacts/1218123_jar/Keywords.txt b/out/artifacts/1218123_jar/Keywords.txt
new file mode 100644
index 0000000..3ccf861
--- /dev/null
+++ b/out/artifacts/1218123_jar/Keywords.txt
@@ -0,0 +1,84 @@
+## Title
+Java Keywords
+
+## Lesson Text
+Java has a number of keywords which are reserved so that you can`t use them as identifiers in your program. These keywords indicate to java that a certain action needs to be performed. When programming in an IDE you will often be told if a word is a keyword and you can`t use it as an identifier. For a full list visit this link: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html. This quiz will test your knowledge of keywords, for each question you have to find the word which isn`t a keyword.
+
+## Questions
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+continue
+goto
+finally
+next
+# Correct Answer
+4
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+for
+if
+when
+else
+# Correct Answer
+3
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+private
+protected
+public
+personal
+# Correct Answer
+4
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+huge
+short
+long
+double
+# Correct Answer
+1
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+case
+catch
+class
+client
+# Correct Answer
+4
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+implements
+impresses
+interface
+instanceof
+# Correct Answer
+2
+
+# Question
+Which of these is not a keyword?
+
+# Answers
+try
+catch
+maybe
+throws
+# Correct Answer
+3
\ No newline at end of file
diff --git a/out/artifacts/1218123_jar/OOP.txt b/out/artifacts/1218123_jar/OOP.txt
new file mode 100644
index 0000000..e421fd0
--- /dev/null
+++ b/out/artifacts/1218123_jar/OOP.txt
@@ -0,0 +1,74 @@
+## Title
+Object-Oriented Programming
+
+## Lesson Text
+Object-Oriented programming (OOP) is a type of programming paradigm based on the concept of `Objects`, which contain fields and methods. Fields contains data and can be primitive types or hold other objects through composition. Methods define procedures and depending on the fields access modifier are often the only way to access fields. Classes must be built with a constructor, this can set values for the fields when the class is initialised. It can also contain getters and setters to access private values from outside of the class.
+
+## Questions
+
+# Question
+Which of these is not a Java access modifier keyword?
+
+# Answers
+Private
+Public
+Class Private
+Protected
+Default
+# Correct Answer
+3
+
+# Question
+Coupling and Cohesion are two OOP concepts, which statement best describes the way we want them to be used in our program?
+
+# Answers
+Decreased Coupling, Decreased Cohesion
+Decreased Coupling, Increased Cohesion
+Increased Coupling, Decreased Cohesion
+Increased Coupling, Increased Cohesion
+# Correct Answer
+2
+
+# Question
+What is the best reason to use a design pattern?
+
+# Answers
+It will result in code which is more extensible and maintainable
+It will result in an easier to describe product
+You can proudly tell everyone you are following a certain pattern
+# Correct Answer
+1
+
+# Question
+Composition is best described by what type of relationship?
+
+# Answers
+IS  A
+HAS  A
+WAS  A
+DOES  A
+CREATES  A
+# Correct Answer
+2
+
+# Question
+Inheritance is best described by what type of relationship?
+
+# Answers
+IS  A
+HAS  A
+WAS  A
+DOES  A
+CREATES  A
+# Correct Answer
+1
+
+# Question
+When would you use an interface class?
+
+# Answers
+When you wanted to ensure that a class contained certain variables and methods
+The interface class is the main way that a user operates your program
+When you need to store a large amount of data you use an interface class to do it
+# Correct Answer
+1
\ No newline at end of file
diff --git a/out/artifacts/1218123_jar/ScrumLesson.txt b/out/artifacts/1218123_jar/ScrumLesson.txt
new file mode 100644
index 0000000..ef35976
--- /dev/null
+++ b/out/artifacts/1218123_jar/ScrumLesson.txt
@@ -0,0 +1,77 @@
+## Title
+Scrum Framework
+
+## Lesson Text
+Scrum is a lightweight framework used to generate value through solutions to problems. Originally designed for Software Engineering it is now used in multiple other fields. In a nutshell, Scrum requires a Scrum Master to foster an environment where a Product Owner orders the work for a complex problem into a product backlog. The Scrum Team then turns a selection of the work into an Increment of value during a Sprint. This is shown to stakeholders to inspect the results, the sprint is reviewed and then the Sprint starts again.
+
+## Questions
+
+# Question
+Which one of these isn`t a member of the Scrum team?
+
+# Answers
+Scrum Master
+Chief Technology Officer
+Product Owner
+Developer
+# Correct Answer
+2
+
+# Question
+What is the recommended longest length of time for a sprint?
+
+# Answers
+One Week
+One Month
+Two Weeks
+6 Weeks
+# Correct Answer
+2
+
+# Question
+Which of these is not part of the scrum workflow ?
+
+# Answers
+Sprint
+Sprint Planning
+Team Brunch
+Daily Scrum
+Sprint Review
+Sprint Retrospective
+# Correct Answer
+3
+
+# Question
+What is the Definition of Done?
+
+# Answers
+The Criteria to determine whether work on sprint backlog item is complete
+The Product which has been produced at the end of the Sprint
+When the developer is fed up of working on a feature
+# Correct Answer
+1
+
+# Question
+Which of these is not a Scrum Value?
+
+# Answers
+Commitment
+Courage
+Focus
+Freedom
+Openness
+Respect
+# Correct Answer
+4
+
+# Question
+The length for a daily scrum should be?
+
+# Answers
+30 minutes
+15 minutes
+10 minutes
+1 hour
+45 minutes
+# Correct Answer
+2
\ No newline at end of file
diff --git a/out/production/java-cw1-attempt-2/META-INF/MANIFEST.MF b/out/production/java-cw1-attempt-2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e6d6934
--- /dev/null
+++ b/out/production/java-cw1-attempt-2/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: QuizSystem
+
diff --git a/out/production/java-cw1-attempt-2/QuizSystem.class b/out/production/java-cw1-attempt-2/QuizSystem.class
index 184ef6c5e91391474331a456e38fe70ad83e6328..c882bd2bbc1ec9358327bd05ae02104a0c9e07e5 100644
GIT binary patch
delta 26
Ycmcbsd0TVCP8MD*1thTf1dFHu0Bvyw(*OVf

delta 28
acmcbuc~^78P8NP01tf52<>q57q5=ScSqMM?

diff --git a/src/LessonReader.java b/src/LessonReader.java
index f291576..c4af75a 100644
--- a/src/LessonReader.java
+++ b/src/LessonReader.java
@@ -46,7 +46,7 @@ public class LessonReader {
      * @param fileName in the form "fileName.txt"
      * @return Lesson object built from text file
      */
-    public Lesson createLessonFromTextFile(String fileName) {
+    public static Lesson createLessonFromTextFile(String fileName) {
 
         /* Create the variables needed to build a lesson and give them fallback values
         if the text file provided is empty.
diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e6d6934
--- /dev/null
+++ b/src/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: QuizSystem
+
diff --git a/src/QuizSystem.java b/src/QuizSystem.java
index 55f1844..b043be0 100644
--- a/src/QuizSystem.java
+++ b/src/QuizSystem.java
@@ -14,7 +14,7 @@ public class QuizSystem {
         System.out.println("  + ------------------------------------------------ +");
         System.out.println(" +  | Welcome to the MSc Software Engineering Quiz |  +");
         System.out.println("  + ------------------------------------------------ +");
-        System.out.println("            \u00a9 Simon Barrett (C1218123) 2021");
+        System.out.println("             Simon Barrett (C1218123) 2021");
 
 
         // QUIZ AND DATA SET UP
@@ -24,13 +24,12 @@ public class QuizSystem {
         UsersStorage users = new UsersStorage();
 
         // Create all the lessons and add them to the module array to use
-        LessonReader lessonReader = new LessonReader();
-        Lesson htmlLesson = lessonReader.createLessonFromTextFile("HTMLLesson.txt");
-        Lesson scrumLesson = lessonReader.createLessonFromTextFile("ScrumLesson.txt");
-        Lesson cssLesson = lessonReader.createLessonFromTextFile("CSSLesson.txt");
-        Lesson dataTypesLesson = lessonReader.createLessonFromTextFile("DataTypes.txt");
-        Lesson oopLesson = lessonReader.createLessonFromTextFile("OOP.txt");
-        Lesson keywordsLesson = lessonReader.createLessonFromTextFile("Keywords.txt");
+        Lesson htmlLesson = LessonReader.createLessonFromTextFile("HTMLLesson.txt");
+        Lesson scrumLesson = LessonReader.createLessonFromTextFile("ScrumLesson.txt");
+        Lesson cssLesson = LessonReader.createLessonFromTextFile("CSSLesson.txt");
+        Lesson dataTypesLesson = LessonReader.createLessonFromTextFile("DataTypes.txt");
+        Lesson oopLesson = LessonReader.createLessonFromTextFile("OOP.txt");
+        Lesson keywordsLesson = LessonReader.createLessonFromTextFile("Keywords.txt");
 
         Lesson[] cmt652LessonsArray = {htmlLesson, cssLesson, scrumLesson, dataTypesLesson,oopLesson,keywordsLesson};
         Module cmt652 = new Module(cmt652LessonsArray);
-- 
GitLab