From cf99ec6565c1190c79711f5b4a75974a6b176491 Mon Sep 17 00:00:00 2001 From: derek mcquay Date: Wed, 6 Apr 2016 20:46:10 -0700 Subject: [PATCH] adding cs235 --- cs235/exam1/Makefile | 26 + cs235/exam1/PolynomialListInterface.h | 68 + cs235/exam1/PolynomialManagerInterface.h | 84 + cs235/exam1/main.cpp | 433 ++++ cs235/exam1/node.cpp | 42 + cs235/exam1/node.h | 19 + cs235/exam1/polylist.cpp | 438 ++++ cs235/exam1/polylist.h | 31 + cs235/exam1/polyman.cpp | 107 + cs235/exam1/polyman.h | 22 + cs235/final/Makefile | 31 + cs235/final/RedBlackNodeInterface.h | 43 + cs235/final/RedBlackTreeFactory.cpp | 20 + cs235/final/RedBlackTreeFactory.h | 23 + cs235/final/RedBlackTreeInterface.h | 78 + cs235/final/TwoThreeTreeFactory.cpp | 21 + cs235/final/TwoThreeTreeFactory.h | 25 + cs235/final/TwoThreeTreeInterface.h | 58 + cs235/final/br_node.cpp | 19 + cs235/final/br_node.h | 21 + cs235/final/br_tree.cpp | 500 +++++ cs235/final/br_tree.h | 34 + cs235/final/main.cpp | 235 ++ cs235/final/test.cpp | 7 + cs235/lab02/Lab 2 README.pdf | Bin 0 -> 235213 bytes cs235/lab02/Run Test Driver.bat | 33 + cs235/lab02/Student_Code/Factory.cpp | 20 + cs235/lab02/Student_Code/Factory.h | 23 + cs235/lab02/Student_Code/JosephusInterface.h | 54 + cs235/lab02/Student_Code/Makefile | 25 + cs235/lab02/Student_Code/circle.cpp | 88 + cs235/lab02/Student_Code/circle.h | 19 + cs235/lab02/Student_Code/main.cpp | 1974 +++++++++++++++++ cs235/lab03/DONT_DELETE.supp | 661 ++++++ cs235/lab03/Run_Test_Driver.sh | 16 + cs235/lab03/Student_Code/Factory.cpp | 21 + cs235/lab03/Student_Code/Factory.h | 23 + .../lab03/Student_Code/LinkedListInterface.h | 80 + cs235/lab03/Student_Code/Makefile | 37 + cs235/lab03/Student_Code/linkedlist.cpp | 158 ++ cs235/lab03/Student_Code/linkedlist.h | 25 + cs235/lab03/Student_Code/main.cpp | 24 + cs235/lab03/Student_Code/node.cpp | 3 + cs235/lab03/Student_Code/node.h | 14 + cs235/lab03/Student_Code/pwnd.c | 5 + cs235/lab03/Student_Code/test.cpp | 37 + cs235/lab03/sm/Factory.cpp | 21 + cs235/lab03/sm/Factory.h | 23 + cs235/lab03/sm/LinkedListInterface.h | 80 + cs235/lab03/sm/Makefile | 27 + cs235/lab03/sm/ll.cc | 158 ++ cs235/lab03/sm/ll.h | 42 + cs235/lab03/sm/pwnd.c | 5 + cs235/lab03/sm/test.cc | 174 ++ cs235/lab04/ExpressionManagerInterface.h | 65 + cs235/lab04/Factory.cpp | 22 + cs235/lab04/Factory.h | 22 + cs235/lab04/Makefile | 35 + cs235/lab04/Run Test Driver.bat | 32 + cs235/lab04/bin/runner.py | 7 + cs235/lab04/expman.cpp | 274 +++ cs235/lab04/expman.h | 28 + cs235/lab04/ignoreme.lib | Bin 0 -> 893950 bytes cs235/lab04/lab04.html | 165 ++ cs235/lab04/lab04_files/labs.css | 13 + cs235/lab04/lab04_files/main.css | 344 +++ cs235/lab04/lab04_files/title.png | Bin 0 -> 62801 bytes cs235/lab04/main.cpp | 14 + cs235/lab04/pwnd.c | 5 + cs235/lab04/setup.py | 11 + cs235/lab04/shunting/__init__.py | 23 + cs235/lab04/shunting/test_shunt.py | 10 + cs235/lab04/test.cc | 117 + cs235/lab04/test1.txt | 2 + cs235/lab04/tests/part1.txt | 4 + cs235/lab04/tests/part2.txt | 4 + cs235/lab04/tests/part3.txt | 3 + cs235/lab04/tests/part4.txt | 3 + cs235/lab04/valgrind.supp | 661 ++++++ cs235/lab05/Factory.cpp | 22 + cs235/lab05/Factory.h | 21 + cs235/lab05/Makefile | 35 + cs235/lab05/Run_Test_Driver.sh | 14 + cs235/lab05/StationInterface.h | 160 ++ cs235/lab05/StationInterfaceExtra.h | 98 + cs235/lab05/deque.cpp | 60 + cs235/lab05/deque.h | 18 + cs235/lab05/irdeque.cpp | 52 + cs235/lab05/irdeque.h | 17 + cs235/lab05/linkedlist.cpp | 102 + cs235/lab05/linkedlist.h | 24 + cs235/lab05/main.cpp | 4 + cs235/lab05/node.cpp | 3 + cs235/lab05/node.h | 14 + cs235/lab05/ordeque.cpp | 46 + cs235/lab05/ordeque.h | 16 + cs235/lab05/pwnd.c | 5 + cs235/lab05/queue.cpp | 38 + cs235/lab05/queue.h | 15 + cs235/lab05/stack.cpp | 37 + cs235/lab05/stack.h | 16 + cs235/lab05/station.cpp | 249 +++ cs235/lab05/station.h | 51 + cs235/lab06/Factory.cpp | 22 + cs235/lab06/Factory.h | 21 + cs235/lab06/Makefile | 32 + cs235/lab06/MazeInterface.h | 49 + cs235/lab06/Mazes/badMaze1.txt | 72 + cs235/lab06/Mazes/badMaze2.txt | 72 + cs235/lab06/Mazes/maze_sample.txt | 72 + cs235/lab06/Mazes/path_sample.txt | 46 + cs235/lab06/Mazes/solvableMaze.txt | 72 + cs235/lab06/Mazes/solvableMaze2.txt | 72 + cs235/lab06/Mazes/stacktest.txt | 72 + cs235/lab06/Mazes/test1.txt | 72 + cs235/lab06/Mazes/test1.txt.orig | 72 + cs235/lab06/Mazes/test2.txt | 72 + cs235/lab06/Mazes/test3.txt | 72 + cs235/lab06/Mazes/test4.txt | 72 + cs235/lab06/Mazes/test5.txt | 72 + cs235/lab06/Mazes/test6.txt | 72 + cs235/lab06/Mazes/test7.txt | 72 + cs235/lab06/Mazes/test8.txt | 72 + cs235/lab06/Mazes/unsolvableMaze.txt | 72 + cs235/lab06/dump_maze.cpp | 14 + cs235/lab06/maze.cpp | 149 ++ cs235/lab06/maze.h | 28 + cs235/lab06/pwnd.c | 5 + cs235/lab06/quick.txt | 5 + cs235/lab06/test.cpp | 45 + cs235/lab07/Factory.cpp | 21 + cs235/lab07/Factory.h | 21 + cs235/lab07/Makefile | 31 + cs235/lab07/MimicInterface.h | 69 + cs235/lab07/dmmap.cpp | 6 + cs235/lab07/dmmap.h | 15 + cs235/lab07/fungulator/main.go | 71 + cs235/lab07/mimic.cpp | 104 + cs235/lab07/mimic.h | 24 + cs235/lab07/pwnd.c | 5 + cs235/lab07/sample.txt | 8 + cs235/lab07/test.cpp | 13 + cs235/lab08/Factory.cpp | 22 + cs235/lab08/Factory.h | 21 + cs235/lab08/Makefile | 31 + cs235/lab08/QSInterface.h | 126 ++ cs235/lab08/QSTestInterface.h | 80 + cs235/lab08/pwnd.c | 5 + cs235/lab08/qstest.cpp | 301 +++ cs235/lab08/qstest.h | 16 + cs235/lab08/sorter.cpp | 109 + cs235/lab08/sorter.h | 17 + cs235/lab08/test.cpp | 31 + cs235/lab08/whattotest.txt | 8 + cs235/lab09/BSTInterface.h | 38 + cs235/lab09/Factory.cpp | 20 + cs235/lab09/Factory.h | 23 + cs235/lab09/Makefile | 31 + cs235/lab09/NodeInterface.h | 31 + cs235/lab09/bst.cpp | 169 ++ cs235/lab09/bst.h | 20 + cs235/lab09/node.cpp | 15 + cs235/lab09/node.h | 17 + cs235/lab09/pwnd.c | 5 + cs235/lab09/test.cpp | 20 + cs235/lab10/AVLInterface.h | 59 + cs235/lab10/Factory.cpp | 20 + cs235/lab10/Factory.h | 23 + cs235/lab10/Makefile | 32 + cs235/lab10/NodeInterface.h | 40 + cs235/lab10/avl.cpp | 383 ++++ cs235/lab10/avl.h | 25 + cs235/lab10/main.cpp | 24 + cs235/lab10/node.cpp | 19 + cs235/lab10/node.h | 18 + cs235/lab10/pwnd.c | 5 + cs235/notes/Makefile | 24 + cs235/notes/game.cpp | 59 + 178 files changed, 13079 insertions(+) create mode 100644 cs235/exam1/Makefile create mode 100644 cs235/exam1/PolynomialListInterface.h create mode 100644 cs235/exam1/PolynomialManagerInterface.h create mode 100644 cs235/exam1/main.cpp create mode 100644 cs235/exam1/node.cpp create mode 100644 cs235/exam1/node.h create mode 100644 cs235/exam1/polylist.cpp create mode 100644 cs235/exam1/polylist.h create mode 100644 cs235/exam1/polyman.cpp create mode 100644 cs235/exam1/polyman.h create mode 100644 cs235/final/Makefile create mode 100644 cs235/final/RedBlackNodeInterface.h create mode 100644 cs235/final/RedBlackTreeFactory.cpp create mode 100644 cs235/final/RedBlackTreeFactory.h create mode 100644 cs235/final/RedBlackTreeInterface.h create mode 100644 cs235/final/TwoThreeTreeFactory.cpp create mode 100644 cs235/final/TwoThreeTreeFactory.h create mode 100644 cs235/final/TwoThreeTreeInterface.h create mode 100644 cs235/final/br_node.cpp create mode 100644 cs235/final/br_node.h create mode 100644 cs235/final/br_tree.cpp create mode 100644 cs235/final/br_tree.h create mode 100644 cs235/final/main.cpp create mode 100644 cs235/final/test.cpp create mode 100755 cs235/lab02/Lab 2 README.pdf create mode 100755 cs235/lab02/Run Test Driver.bat create mode 100644 cs235/lab02/Student_Code/Factory.cpp create mode 100644 cs235/lab02/Student_Code/Factory.h create mode 100644 cs235/lab02/Student_Code/JosephusInterface.h create mode 100644 cs235/lab02/Student_Code/Makefile create mode 100644 cs235/lab02/Student_Code/circle.cpp create mode 100644 cs235/lab02/Student_Code/circle.h create mode 100644 cs235/lab02/Student_Code/main.cpp create mode 100644 cs235/lab03/DONT_DELETE.supp create mode 100755 cs235/lab03/Run_Test_Driver.sh create mode 100644 cs235/lab03/Student_Code/Factory.cpp create mode 100644 cs235/lab03/Student_Code/Factory.h create mode 100644 cs235/lab03/Student_Code/LinkedListInterface.h create mode 100644 cs235/lab03/Student_Code/Makefile create mode 100644 cs235/lab03/Student_Code/linkedlist.cpp create mode 100644 cs235/lab03/Student_Code/linkedlist.h create mode 100644 cs235/lab03/Student_Code/main.cpp create mode 100644 cs235/lab03/Student_Code/node.cpp create mode 100644 cs235/lab03/Student_Code/node.h create mode 100644 cs235/lab03/Student_Code/pwnd.c create mode 100644 cs235/lab03/Student_Code/test.cpp create mode 100644 cs235/lab03/sm/Factory.cpp create mode 100644 cs235/lab03/sm/Factory.h create mode 100644 cs235/lab03/sm/LinkedListInterface.h create mode 100644 cs235/lab03/sm/Makefile create mode 100644 cs235/lab03/sm/ll.cc create mode 100644 cs235/lab03/sm/ll.h create mode 100644 cs235/lab03/sm/pwnd.c create mode 100644 cs235/lab03/sm/test.cc create mode 100644 cs235/lab04/ExpressionManagerInterface.h create mode 100644 cs235/lab04/Factory.cpp create mode 100644 cs235/lab04/Factory.h create mode 100644 cs235/lab04/Makefile create mode 100644 cs235/lab04/Run Test Driver.bat create mode 100644 cs235/lab04/bin/runner.py create mode 100644 cs235/lab04/expman.cpp create mode 100644 cs235/lab04/expman.h create mode 100644 cs235/lab04/ignoreme.lib create mode 100644 cs235/lab04/lab04.html create mode 100644 cs235/lab04/lab04_files/labs.css create mode 100644 cs235/lab04/lab04_files/main.css create mode 100644 cs235/lab04/lab04_files/title.png create mode 100644 cs235/lab04/main.cpp create mode 100644 cs235/lab04/pwnd.c create mode 100644 cs235/lab04/setup.py create mode 100644 cs235/lab04/shunting/__init__.py create mode 100644 cs235/lab04/shunting/test_shunt.py create mode 100644 cs235/lab04/test.cc create mode 100644 cs235/lab04/test1.txt create mode 100644 cs235/lab04/tests/part1.txt create mode 100644 cs235/lab04/tests/part2.txt create mode 100644 cs235/lab04/tests/part3.txt create mode 100644 cs235/lab04/tests/part4.txt create mode 100644 cs235/lab04/valgrind.supp create mode 100644 cs235/lab05/Factory.cpp create mode 100644 cs235/lab05/Factory.h create mode 100644 cs235/lab05/Makefile create mode 100755 cs235/lab05/Run_Test_Driver.sh create mode 100644 cs235/lab05/StationInterface.h create mode 100644 cs235/lab05/StationInterfaceExtra.h create mode 100644 cs235/lab05/deque.cpp create mode 100644 cs235/lab05/deque.h create mode 100644 cs235/lab05/irdeque.cpp create mode 100644 cs235/lab05/irdeque.h create mode 100644 cs235/lab05/linkedlist.cpp create mode 100644 cs235/lab05/linkedlist.h create mode 100644 cs235/lab05/main.cpp create mode 100644 cs235/lab05/node.cpp create mode 100644 cs235/lab05/node.h create mode 100644 cs235/lab05/ordeque.cpp create mode 100644 cs235/lab05/ordeque.h create mode 100644 cs235/lab05/pwnd.c create mode 100644 cs235/lab05/queue.cpp create mode 100644 cs235/lab05/queue.h create mode 100644 cs235/lab05/stack.cpp create mode 100644 cs235/lab05/stack.h create mode 100644 cs235/lab05/station.cpp create mode 100644 cs235/lab05/station.h create mode 100644 cs235/lab06/Factory.cpp create mode 100644 cs235/lab06/Factory.h create mode 100644 cs235/lab06/Makefile create mode 100644 cs235/lab06/MazeInterface.h create mode 100644 cs235/lab06/Mazes/badMaze1.txt create mode 100644 cs235/lab06/Mazes/badMaze2.txt create mode 100644 cs235/lab06/Mazes/maze_sample.txt create mode 100644 cs235/lab06/Mazes/path_sample.txt create mode 100644 cs235/lab06/Mazes/solvableMaze.txt create mode 100644 cs235/lab06/Mazes/solvableMaze2.txt create mode 100644 cs235/lab06/Mazes/stacktest.txt create mode 100644 cs235/lab06/Mazes/test1.txt create mode 100644 cs235/lab06/Mazes/test1.txt.orig create mode 100644 cs235/lab06/Mazes/test2.txt create mode 100644 cs235/lab06/Mazes/test3.txt create mode 100644 cs235/lab06/Mazes/test4.txt create mode 100644 cs235/lab06/Mazes/test5.txt create mode 100644 cs235/lab06/Mazes/test6.txt create mode 100644 cs235/lab06/Mazes/test7.txt create mode 100644 cs235/lab06/Mazes/test8.txt create mode 100644 cs235/lab06/Mazes/unsolvableMaze.txt create mode 100644 cs235/lab06/dump_maze.cpp create mode 100644 cs235/lab06/maze.cpp create mode 100644 cs235/lab06/maze.h create mode 100644 cs235/lab06/pwnd.c create mode 100644 cs235/lab06/quick.txt create mode 100644 cs235/lab06/test.cpp create mode 100644 cs235/lab07/Factory.cpp create mode 100644 cs235/lab07/Factory.h create mode 100644 cs235/lab07/Makefile create mode 100644 cs235/lab07/MimicInterface.h create mode 100644 cs235/lab07/dmmap.cpp create mode 100644 cs235/lab07/dmmap.h create mode 100644 cs235/lab07/fungulator/main.go create mode 100644 cs235/lab07/mimic.cpp create mode 100644 cs235/lab07/mimic.h create mode 100644 cs235/lab07/pwnd.c create mode 100644 cs235/lab07/sample.txt create mode 100644 cs235/lab07/test.cpp create mode 100644 cs235/lab08/Factory.cpp create mode 100644 cs235/lab08/Factory.h create mode 100644 cs235/lab08/Makefile create mode 100644 cs235/lab08/QSInterface.h create mode 100644 cs235/lab08/QSTestInterface.h create mode 100644 cs235/lab08/pwnd.c create mode 100644 cs235/lab08/qstest.cpp create mode 100644 cs235/lab08/qstest.h create mode 100644 cs235/lab08/sorter.cpp create mode 100644 cs235/lab08/sorter.h create mode 100644 cs235/lab08/test.cpp create mode 100644 cs235/lab08/whattotest.txt create mode 100644 cs235/lab09/BSTInterface.h create mode 100644 cs235/lab09/Factory.cpp create mode 100644 cs235/lab09/Factory.h create mode 100644 cs235/lab09/Makefile create mode 100644 cs235/lab09/NodeInterface.h create mode 100644 cs235/lab09/bst.cpp create mode 100644 cs235/lab09/bst.h create mode 100644 cs235/lab09/node.cpp create mode 100644 cs235/lab09/node.h create mode 100644 cs235/lab09/pwnd.c create mode 100644 cs235/lab09/test.cpp create mode 100644 cs235/lab10/AVLInterface.h create mode 100644 cs235/lab10/Factory.cpp create mode 100644 cs235/lab10/Factory.h create mode 100644 cs235/lab10/Makefile create mode 100644 cs235/lab10/NodeInterface.h create mode 100644 cs235/lab10/avl.cpp create mode 100644 cs235/lab10/avl.h create mode 100644 cs235/lab10/main.cpp create mode 100644 cs235/lab10/node.cpp create mode 100644 cs235/lab10/node.h create mode 100644 cs235/lab10/pwnd.c create mode 100644 cs235/notes/Makefile create mode 100644 cs235/notes/game.cpp diff --git a/cs235/exam1/Makefile b/cs235/exam1/Makefile new file mode 100644 index 0000000..ded616d --- /dev/null +++ b/cs235/exam1/Makefile @@ -0,0 +1,26 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=main.o node.o polylist.o polyman.o +EXE=main + +all: $(EXE) + + +$(EXE): main.o + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +main.o: main.cpp node.o polylist.o polyman.o +polylist.o: polylist.cpp polylist.h +polyman.o: polyman.cpp polyman.h +node.o: node.cpp node.h + +run: $(EXE) + @./$(EXE) + +clean: + @rm -vf *.o + @rm -vf $(EXE) + +drun: $(EXE) + gdb ./$(EXE) + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/exam1/PolynomialListInterface.h b/cs235/exam1/PolynomialListInterface.h new file mode 100644 index 0000000..e440187 --- /dev/null +++ b/cs235/exam1/PolynomialListInterface.h @@ -0,0 +1,68 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once +#include + +using namespace std; + +class PolynomialListInterface +{ + +public: + /* + * You must create a Node class that will hold each polynomial segment and will be used to create the + * links in your PolynomialList. + * Your Node will likely have 3 private variables in addition to a Node * next you may have. + * These 3 variables will be for the Coefficient, the Variable, and the Exponent respectively. + * i.e. 2x^7 + * Coefficient = 2 + * Variable = x + * Exponent = 7 + */ + PolynomialListInterface(void){} + virtual ~PolynomialListInterface(void){} + + /* + insert + + A node with the given term should be inserted at the appropriate spot in the list. + A term can be accepted only with Coefficient value > 0, and exponent value non-negative. + If the term is invalid, do not add it to the list. + i.e. If the given term segment is 3x^5 and your list contains 2x^8, x^4, 11x^2 + the node should be added after 2x^8. Your updated list should look like 2x^8, 3x^5, x^4, 11x^2. + + */ + virtual void insert(string term) = 0; + + /* + clear + + Remove all nodes from the list. + */ + virtual void clear() = 0; + + /* + at + + Returns the polynomial of the node at the given index. The list begins at + index 0. + + If the given index is out of range of the list, return "invalid"; + */ + virtual string at(int index) = 0; + + /* + size + + Returns the number of nodes in the list. + */ + virtual int size() = 0; + + /* + * This function should string together all of the nodes and print out the entire polynomial separated with '+' signs. + * If an exponent of 0 exists however, you should print only the Coefficient. + * i.e. list of Nodes = (2x^4)->(4x^2)->(3x^1)->(11x^0) + * printList() = return "2 x ^ 4 + 4 x ^ 2 + 3 x ^ 1 + 11 x"; + */ + virtual string printList() = 0; + +}; diff --git a/cs235/exam1/PolynomialManagerInterface.h b/cs235/exam1/PolynomialManagerInterface.h new file mode 100644 index 0000000..ce14d09 --- /dev/null +++ b/cs235/exam1/PolynomialManagerInterface.h @@ -0,0 +1,84 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#ifndef POLYNOMIALMANAGERINTERFACE_H_ +#define POLYNOMIALMANAGERINTERFACE_H_ +#include "PolynomialListInterface.h" +#include + +using namespace std; + +class PolynomialManagerInterface { +public: + PolynomialManagerInterface(){} + virtual ~PolynomialManagerInterface(){} + + /* + * addLists() + * This function goes through the process of adding your two list's together and returning the resulting list. + * Like terms should be added together correctly, creating one Node for the final list. + * If both of the lists are empty, return an empty list. This list must be sorted in correct polynomial order by degree. + * i.e. + * (2x^4)->(4x^2)->(3x^1)->(11x^0), not (2x^4)->(3x^1)->(11x^0)->(4x^2) or anything else. + */ + virtual PolynomialListInterface * addLists() = 0; + + /* + * subtractLists() + * This function goes through the process of subtracting your list two from your list one and returning the resulting list. + * Like terms should be subtracted correctly, creating one Node for the final list. If a resulting coefficient is 0, that node should be removed. + * If both of the lists are empty, return an empty list. This list must be sorted in correct polynomial order by degree. + * i.e. + * (2x^4)->(4x^2)->(3x^1)->(11x^0), not (2x^4)->(3x^1)->(11x^0)->(4x^2) or anything else. + */ + virtual PolynomialListInterface * subtractLists() = 0; + + /* + * fillListOne(string term) + * This adds a single term at a time. + * This function will be called many times while your first list is being filled. + * You should add the new term at the appropriate spot in the list + * which may involve adding it to an existing polynomial list, the list should be ordered by degrees. + * All segments will have at least a variable and an exponent, however the Coefficient may be an implied 1. + * i.e. x^6 is valid, but 2x is not. + * If the term is not valid, it should not be added to the list. + * + */ + virtual void fillListOne(string term) = 0; + + /* + * fillListTwo(string term) + * This adds a single term at a time. + * This function will be called many times while your second list is being filled. + * You should add the new term at the appropriate spot in the list + * which may involve adding it to an existing polynomial list, the list should be ordered by degrees. + * All segments will have at least a variable and an exponent, however the Coefficient may be an implied 1. + * i.e. x^6 is valid, but 2x is not. + * If the term is not valid, it should not be added to the list. + */ + virtual void fillListTwo(string term) = 0; + + /* + * clearListOne() + * This function should empty your first list entirely. + */ + virtual void clearListOne() = 0; + + /* + * clearListTwo() + * This function should empty your second list entirely. + */ + virtual void clearListTwo() = 0; + + /* + * getListOne() + * Returns a pointer to the first list. + */ + virtual PolynomialListInterface * getListOne() = 0; + + /* + * getListTwo() + * Returns a pointer to the second list. + */ + virtual PolynomialListInterface * getListTwo() = 0; +}; + +#endif /* POLYNOMIALMANAGERINTERFACE_H_ */ diff --git a/cs235/exam1/main.cpp b/cs235/exam1/main.cpp new file mode 100644 index 0000000..39d62d6 --- /dev/null +++ b/cs235/exam1/main.cpp @@ -0,0 +1,433 @@ +#include +#include +#include +#include +#include "node.h" +#include "polylist.h" +#include "polyman.h" + +using namespace std; + +int main() { +//node::node(const int exponent, const int coefficient, const char variable, node* next) : + node n(0,0,'x',NULL); + node n1(0,1,'x',NULL); + node n2(1,0,'x',NULL); + node n3(1,1,'x',NULL); + node n4(1,'x',NULL); + node n5(0,'x',NULL); + node n6(1,'x',NULL); + + stringstream s; + + s << n; + assert(s.str() == ""); + s.str(""); + + s << n1; + assert(s.str() == "1"); + s.str(""); + + s << n2; + assert(s.str() == ""); + s.str(""); + + s << n3; + assert(s.str() == "x"); + s.str(""); + + string a1 = "1 x ^ 1"; + vector v = parse_expression(a1); + assert(v[0] == "1"); + assert(v[1] == "x"); + assert(v[3] == "1"); + assert(is_valid(v) == true); + + string a2 = "123 g ^ 152"; + v = parse_expression(a2); + assert(is_valid(v) == true); + + string a3 = "a b c"; + v = parse_expression(a3); + assert(is_valid(v) == false); + + string a4 = ""; + v = parse_expression(a4); + assert(is_valid(v) == false); + + string a5 = "1 x"; + v = parse_expression(a5); + assert(is_valid(v) == true); + + string a6 = "x"; + v = parse_expression(a6); + assert(is_valid(v) == true); + + string a7 = "morethanonecharacter"; + v = parse_expression(a7); + assert(is_valid(v) == false); + + string a8 = "$"; + v = parse_expression(a8); + assert(is_valid(v) == false); + + string a9 = "1 & ^ x"; + v = parse_expression(a9); + assert(is_valid(v) == false); + + string b1 = "123 g ^ %"; + v = parse_expression(b1); + assert(is_valid(v) == false); + + string b2 = "1r32 g ^ 152"; + v = parse_expression(b2); + assert(is_valid(v) == false); + + string b3 = "123 ^ 152"; + v = parse_expression(b3); + assert(is_valid(v) == false); + + string b4 = "123 g ^"; + v = parse_expression(b4); + assert(is_valid(v) == false); + + string b5 = "5 x ^ -2"; + v = parse_expression(b5); + assert(is_valid(v) == false); + + polylist p; + stringstream sr; + + p.insert("x"); + sr << p.printList(); + assert(sr.str() == "1"); + + p.insert("2 x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3"); + + p.insert("-5 x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "-2"); + + assert(p.size() == 1); + + p.insert("x ^ 1"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x + -2"); + + assert(p.size() == 2); + + p.insert("x ^ 4"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 4 + x + -2"); + + + assert(p.size() == 3); + + p.insert("x ^ 5"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 5 + x ^ 4 + x + -2"); + + p.insert("x ^ -1"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 5 + x ^ 4 + x + -2"); + + p.insert("x ^ 4"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 5 + 2 x ^ 4 + x + -2"); + + p.insert("x ^ 4"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 5 + 3 x ^ 4 + x + -2"); + + p.insert("x ^ 4"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 5 + 4 x ^ 4 + x + -2"); + + p.insert("x ^ 5"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 5 + 4 x ^ 4 + x + -2"); + + + assert(p.size() == 4); + + p.insert("x ^ 1"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 5 + 4 x ^ 4 + 2 x + -2"); + + p.insert("x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 5 + 4 x ^ 4 + 2 x + -1"); + + p.insert("x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 7 + 2 x ^ 5 + 4 x ^ 4 + 2 x + -1"); + + p.insert("x ^ -7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 7 + 2 x ^ 5 + 4 x ^ 4 + 2 x + -1"); + + p.insert("x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 7 + 2 x ^ 5 + 4 x ^ 4 + 2 x + -1"); + + assert(p.size() == 5); + + p.insert("2 x ^ 3"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 7 + 2 x ^ 5 + 4 x ^ 4 + 2 x ^ 3 + 2 x + -1"); + + + p.insert("2 x ^ 3"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 7 + 2 x ^ 5 + 4 x ^ 4 + 4 x ^ 3 + 2 x + -1"); + + + p.insert("2 x ^ 2"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 7 + 2 x ^ 5 + 4 x ^ 4 + 4 x ^ 3 + 2 x ^ 2 + 2 x + -1"); + + p.insert("2 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "4 x ^ 7 + 2 x ^ 5 + 4 x ^ 4 + 4 x ^ 3 + 2 x ^ 2 + 2 x + -1"); + + p.insert("2 x ^ 0"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "4 x ^ 7 + 2 x ^ 5 + 4 x ^ 4 + 4 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("-4 x ^ 4"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "4 x ^ 7 + 2 x ^ 5 + 4 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("2 x ^ 3"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "4 x ^ 7 + 2 x ^ 5 + 6 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("8 x ^ 4"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "4 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 6 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("2 x ^ -3"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "4 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 6 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("-1 x ^ 3"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "4 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("-2 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("2 x ^ 9"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 9 + 2 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("-2 x ^ 9"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("10 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "12 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 1"); + + p.insert("x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "12 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert("x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "13 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert("-10 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert("10 x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 12"); + + p.insert("-10 x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert("-2 x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x"); + + p.insert("2 x ^ 0"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 5 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert("x ^ 3"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 6 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert(""); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3 x ^ 7 + 2 x ^ 5 + 8 x ^ 4 + 6 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert("-3 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2 x ^ 5 + 8 x ^ 4 + 6 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert("-2 x ^ 5"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "8 x ^ 4 + 6 x ^ 3 + 2 x ^ 2 + 2 x + 2"); + + p.insert("-2 x ^ 2"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "8 x ^ 4 + 6 x ^ 3 + 2 x + 2"); + + p.insert("-3 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "-3 x ^ 7 + 8 x ^ 4 + 6 x ^ 3 + 2 x + 2"); + + p.insert("-3 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "-6 x ^ 7 + 8 x ^ 4 + 6 x ^ 3 + 2 x + 2"); + + p.insert("9 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "3 x ^ 7 + 8 x ^ 4 + 6 x ^ 3 + 2 x + 2"); + + p.clear(); + sr.str(""); + sr << p.printList(); + assert(sr.str() == ""); + + assert(p.size() == 0); + + p.insert("9 x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "9 x ^ 7"); + + assert(p.size() == 1); + + p.clear(); + sr.str(""); + sr << p.printList(); + assert(sr.str() == ""); + + assert(p.size() == 0); + + p.insert("x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "x ^ 7"); + + p.insert("-x ^ 7"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == ""); + + p.clear(); + sr.str(""); + sr << p.printList(); + assert(sr.str() == ""); + + assert(p.size() == 0); + + p.insert("2 x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "2"); + + p.clear(); + sr.str(""); + sr << p.printList(); + assert(sr.str() == ""); + + assert(p.size() == 0); + + p.insert("x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "1"); + + p.remove(0); + sr.str(""); + sr << p.printList(); + assert(sr.str() == ""); + + p.insert("-x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "-1"); + + p.insert("2 x"); + sr.str(""); + sr << p.printList(); + assert(sr.str() == "1"); + + node n7(3, -1, 'x',NULL); + + polyman m; + m.addLists(); + m.subtractLists(); + m.fillListOne("x"); + m.fillListOne("2 x"); + m.fillListOne("3 x ^ 3"); + m.fillListOne("4aqkjx"); + m.fillListOne("-4 x ^ 323"); + m.fillListOne("-2 x ^ 400"); + m.fillListOne("x"); + m.fillListOne("x"); + m.fillListOne("x"); + m.fillListOne("x"); + m.fillListTwo("-6 x"); + m.fillListTwo("-4 x ^ 323"); + m.fillListTwo("-x ^ 3"); + m.fillListTwo("7 x ^ 8"); + m.fillListTwo("4 x ^ 3"); + m.fillListTwo("-x"); + m.fillListTwo("14 x"); + m.addLists(); + m.subtractLists(); +} diff --git a/cs235/exam1/node.cpp b/cs235/exam1/node.cpp new file mode 100644 index 0000000..479b987 --- /dev/null +++ b/cs235/exam1/node.cpp @@ -0,0 +1,42 @@ +//Derek McQuay 647465151 CS 235 Fall 2012 midterm 1 +#include "node.h" + +node::node(const int exponent, const int coefficient, const char variable, node* next) : + exponent(exponent), coefficient(coefficient), variable(variable), next(next) {} + +node::node(const int exponent, const char variable, node* next) : //construtor for when coefficient is assumed 1 + exponent(exponent), coefficient(1), variable(variable), next(next) {} + +ostream & operator<<(ostream & os, node n) { //used to correctly print out each node + if(n.coefficient == 0) { + os << ""; + } + else if(n.coefficient == 1 && n.exponent == 0) { + os << n.coefficient; + } + else if(n.coefficient == -1 && n.exponent == 0) { + os << n.coefficient; + } + else if(n.exponent == 0) { + os << n.coefficient; + } + else if(n.coefficient == -1) { + os << "-" << n.variable << " ^ " << n.exponent; + } + else if(n.coefficient < 0 && n.exponent == 1) { + os << n.coefficient << n.variable; + } + else if(n.coefficient == 1 && n.exponent == 1) { + os << n.variable; + } + else if(n.exponent == 1) { + os << n.coefficient << " " << n.variable; + } + else if(n.coefficient == 1) { + os << n.variable << " ^ " << n.exponent; + } + else { + os << n.coefficient << " " << n.variable << " ^ " << n.exponent; + } + return os; +} diff --git a/cs235/exam1/node.h b/cs235/exam1/node.h new file mode 100644 index 0000000..1f97159 --- /dev/null +++ b/cs235/exam1/node.h @@ -0,0 +1,19 @@ +//Derek McQuay 647465151 CS 235 Fall 2012 midterm 1 +#ifndef __NODE_H__ +#define __NODE_H__ + +#include + +using namespace std; + +class node { + public: + node(const int, const int, const char, node*); + node(const int, const char, node*); + int exponent; + int coefficient; + char variable; + node* next; + friend ostream & operator<<(ostream & os, node n); +}; +#endif diff --git a/cs235/exam1/polylist.cpp b/cs235/exam1/polylist.cpp new file mode 100644 index 0000000..31174a2 --- /dev/null +++ b/cs235/exam1/polylist.cpp @@ -0,0 +1,438 @@ +//Derek McQuay 647465151 CS 235 Fall 2012 midterm 1 +#include "polylist.h" + +polylist::polylist(): head(NULL) {} +polylist::~polylist() {clear();} + +void polylist::insert(string term) { + vector v = parse_expression(term); + if(!is_valid(v)) { + return; + } + if(v.size() == 1) { //expression of the form x + if(v[0][0] == '-') { + insertTail(0, -1, v[0][1]); + } + else { + insertTail(0, 1, v[0][0]); + } + } + if(v.size() == 2) { // expresion of the form 2 x + int exp = atoi(v[0].c_str()); + insertTail(0, exp, v[1][0]); + } + if(v.size() == 3) { // expression of the form x ^ 4 + int exp = atoi(v[2].c_str()); + int after_exp = 0; + if(exp == 0) { + if(v[0][0] == '-') { + insertTail(exp, -1, v[0][0]); + } + else { + insertTail(exp, 1, v[0][0]); + } + } + node* node_ptr = head; + while(node_ptr != NULL) { + if(node_ptr->exponent <= exp) { + after_exp++; + break; + } + after_exp++; + node_ptr = node_ptr->next; + } + string before = at(after_exp - 1); + vector previous_vector = parse_expression(before); + if(previous_vector.size() == 1) { + if(node_ptr == head) { + if(node_ptr == head && size() == 0) { + if(v[0][0] == '-') { + insertHead(exp, -1, v[0][0]); + } + else { + insertHead(exp, 1, v[0][0]); + } + } + else if(node_ptr->exponent == exp) { + node_ptr->coefficient += 1; + if(node_ptr->coefficient == 0) { + remove(exp); + } + } + else { + if(v[0][0] == '-') { + insertHead(exp, -1, v[0][1]); + } + else { + insertHead(exp, 1, v[0][0]); + } + } + } + else { + node_ptr->coefficient += 1; + if(node_ptr->coefficient == 0) { + remove(exp); + } + } + } + if(previous_vector.size() == 2) { + if(v[0][0] == '-') { + insertHead(exp, -1, v[0][1]); + } + else { + insertHead(exp, 1, v[0][0]); + } + } + if(previous_vector.size() == 3) { + int insertionNodeExponent = atoi(previous_vector[2].c_str()); + if(insertionNodeExponent == exp) { + node* node_ptr2 = head; + while(node_ptr2 != NULL) { + if(node_ptr2->exponent == exp) { + if(v[0][0] == '-') { + node_ptr2->coefficient -= 1; + } + else { + node_ptr2->coefficient += 1; + } + if(node_ptr2->coefficient == 0) { + remove(exp); + } + } + node_ptr2 = node_ptr2->next; + } + } + else{ + if(v[0][0] == '-') { + insertAfter(exp, -1, v[0][1], insertionNodeExponent); + } + else { + insertAfter(exp, 1, v[0][0], insertionNodeExponent); + } + } + } + if(previous_vector.size() == 4) { + int insertionNodeExponent = atoi(previous_vector[3].c_str()); + if(insertionNodeExponent == exp) { + node* node_ptr2 = head; + while(node_ptr2 != NULL) { + if(node_ptr2->exponent == exp) { + node_ptr2->coefficient += 1; + if(node_ptr2->coefficient == 0) { + remove(exp); + } + } + node_ptr2 = node_ptr2->next; + } + } + else { + if(v[0][0] == '-') { + insertAfter(exp, -1, v[0][1], insertionNodeExponent); + } + else { + insertAfter(exp, 1, v[0][0], insertionNodeExponent); + } + } + } + } + if(v.size() == 4) { //expression of the form "2 x ^ 3" + int coef = atoi(v[0].c_str()); + int exp = atoi(v[3].c_str()); + int after_exp = 0; + node* node_ptr = head; + if(exp == 0) { + insertTail(exp, coef, v[1][0]); + return; + } + while(node_ptr != NULL) { + if(node_ptr->exponent <= exp) { + break; + } + after_exp++; + node_ptr = node_ptr->next; + } + string before = at(after_exp - 1); + vector previous_vector = parse_expression(before); + if(previous_vector.size() == 1) { + if(node_ptr == head) { + if(node_ptr == head && size() == 0) { + insertHead(exp, coef, v[1][0]); + } + else if(node_ptr->exponent == exp) { + node_ptr->coefficient += coef; + if(node_ptr->coefficient == 0) { + remove(exp); + } + } + else { + insertHead(exp, coef, v[1][0]); + } + } + else { + node_ptr->coefficient += coef; + if(node_ptr->coefficient == 0) { + remove(exp); + } + } + } + if(previous_vector.size() == 2) { + insertHead(exp, coef, v[1][0]); + } + if(previous_vector.size() == 3) { + int insertionNodeExponent = atoi(previous_vector[2].c_str()); + if(node_ptr->exponent == exp) { + node* node_ptr2 = head; + while(node_ptr2 != NULL) { + if(node_ptr2->exponent == exp) { + node_ptr2->coefficient += coef; + if(node_ptr2->coefficient == 0) { + remove(exp); + } + } + node_ptr2 = node_ptr2->next; + } + } + else{ + insertAfter(exp, coef, v[1][0], insertionNodeExponent); + } + } + if(previous_vector.size() == 4) { + int insertionNodeExponent = atoi(previous_vector[3].c_str()); + if(node_ptr == NULL) { + insertTail(exp, coef, v[1][0]); + } + else { + if(node_ptr->exponent == exp) { + node* node_ptr2 = head; + while(node_ptr2 != NULL) { + if(node_ptr2->exponent == exp) { + node_ptr2->coefficient += coef; + if(node_ptr2->coefficient == 0) { + remove(exp); + } + } + node_ptr2 = node_ptr2->next; + } + } + else { + insertAfter(exp, coef, v[1][0], insertionNodeExponent); + } + } + } + } +} + +void polylist::clear() { + node* node_ptr = head; + while(head) { + node_ptr = head; + head = head->next; + delete node_ptr; + } +} + +string polylist::at(int index) { + if(index < 0) { + return "invalid"; + } + if(size() <= index) { + return "invalid"; + } + node* node_ptr = head; + for(int i = 0; i < index; i++){ + node_ptr = node_ptr->next; + } + if(head == NULL) + return "invalid"; + stringstream s; + s << *node_ptr; + return s.str(); +} + +int polylist::size() { + int size_of_list = 0; + node* node_ptr = head; + while(node_ptr != NULL) { + size_of_list++; + node_ptr = node_ptr->next; + } + return size_of_list; +} + +string polylist::printList() { + stringstream s; + if(head == NULL) + return ""; + node* node_ptr = head; + while(node_ptr != NULL) { + if(node_ptr->next == NULL) { + s << *node_ptr; + return s.str(); + } + else { + s << *node_ptr << " + "; + node_ptr = node_ptr->next; + } + } + return s.str(); +} + +void polylist::remove(int exponent) { + node* node_ptr = head; + if(node_ptr->exponent == exponent) { + node* ptr = head; + head = head->next; + delete ptr; + return; + } + while(node_ptr != NULL) { + if(node_ptr->next == NULL) + return; + if(node_ptr->next->exponent == exponent) { + node* ptr = node_ptr->next; + node_ptr->next = node_ptr->next->next; + delete ptr; + } + node_ptr = node_ptr->next; + } +} + +void polylist::insertHead(int exponent, int coefficient, char variable) { + head = new node(exponent, coefficient, variable, head); +} + +void polylist::insertTail(int exponent, int coefficient, char variable) { + if(head == NULL) { + insertHead(exponent, coefficient, variable); + return; + } + node* node_ptr = head; + while(node_ptr != NULL) { + if(node_ptr->next == NULL) { + if(node_ptr->exponent == exponent) { + node_ptr->coefficient += coefficient; + if(node_ptr->coefficient == 0) { + remove(exponent); + } + } + else{ + node_ptr->next = new node(exponent, coefficient, variable, NULL); + break; + } + } + node_ptr = node_ptr->next; + } +} + +void polylist::insertAfter(int exponent, int coefficient, char variable, int insertionNodeExponent) { + node* node_ptr = head; + while(node_ptr != NULL) { + if(node_ptr->exponent == insertionNodeExponent) { + if(head == node_ptr) { + insertHead(exponent, coefficient, variable); + } + else{ + node* temp = new node(exponent, coefficient, variable, NULL); + temp->next = node_ptr->next; + node_ptr->next = temp; + } + } + node_ptr = node_ptr->next; + } +} + +bool is_valid(vector expression) { + if(expression.empty()) { //if expression is size 0 + return false; + } + if(expression.size() == 1) { //if expression is size one. only case if "x" + if(expression[0][0] == '-') { + if(expression[0] == "-x") + return true; + if(!isalpha(expression[0][1]) or expression[0].size() > 1) { + return false; + } + } + else if(!isalpha(expression[0][0]) or expression[0].size() > 1) { + return false; + } + return true; + } + if(expression.size() == 2) { //if expression is size two, only case is of form "2 x" + for(unsigned int i = 0; i < expression[0].size(); i++) { + if(expression[0][0] != '-') { + if(!isdigit(expression[0][i])) { + return false; + } + } + } + if(!isalpha(expression[1][0]) or expression[1].size() > 1) { + return false; + } + return true; + } + if(expression.size() == 3) { //if expression is size three, only case is of form "x ^ 1" + if(expression[0][0] == '-') { + if(expression[0] == "-x") + return true; + if(!isalpha(expression[0][1]) or expression[0].size() > 1) { + return false; + } + } + else if(!isalpha(expression[0][0]) or expression[0].size() > 1) { + return false; + } + if(expression[1] != "^") { + return false; + } + for(unsigned int i = 0; i < expression[2].size(); i++) { + if(!isdigit(expression[2][i])) { + return false; + } + } + return true; + } + if(expression.size() == 4) { //if expression is size four, only case is of form "1 x ^ 1" + for(unsigned int i = 0; i < expression[0].size(); i++) { + if(expression[0][0] != '-') { + if(!isdigit(expression[0][i])) { + return false; + } + } + } + if(!isalpha(expression[1][0]) or expression[1].size() > 1) { + return false; + } + if(expression[2] != "^") { + return false; + } + for(unsigned int i = 0; i < expression[3].size(); i++) { + if(!isdigit(expression[3][i])) { + return false; + } + } + return true; + } + return false; +} + +vector parse_expression(string expression) { //parses expression with " " being the delimeter + vector results; + string s; + for(unsigned int i = 0; i < expression.length(); i++) { + char c = expression[i]; + if(c != ' ') { + s += c; + } + else { + if(s != "") { + results.push_back(s); + s.clear(); + } + } + } + if(s != "") { + results.push_back(s); + } + return results; +} diff --git a/cs235/exam1/polylist.h b/cs235/exam1/polylist.h new file mode 100644 index 0000000..69d4bbd --- /dev/null +++ b/cs235/exam1/polylist.h @@ -0,0 +1,31 @@ +//Derek McQuay 647465151 CS 235 Fall 2012 midterm 1 +#ifndef __POLYLIST_H__ +#define __POLYLIST_H__ +#include "PolynomialListInterface.h" +#include "node.h" +#include +#include +#include +#include +#include + +using namespace std; + +class polylist : public PolynomialListInterface { + public: + polylist(); + ~polylist(); + node* head; + void insert(string term); + void clear(); + string at(int index); + int size(); + string printList(); + void remove(int exponent); + void insertAfter(int exponent, int coefficient, char value, int insertionNodeExponent); + void insertTail(int exponent, int coefficient, char value); + void insertHead(int exponent, int coefficient, char value); +}; +vector parse_expression(string expression); //these are included outside of the class because i used them in my test.cpp +bool is_valid(vector expression); //and wanted them not to be included in the class +#endif diff --git a/cs235/exam1/polyman.cpp b/cs235/exam1/polyman.cpp new file mode 100644 index 0000000..eaef89e --- /dev/null +++ b/cs235/exam1/polyman.cpp @@ -0,0 +1,107 @@ +//Derek McQuay 647465151 CS 235 Fall 2012 midterm 1 +#include "polyman.h" + +PolynomialListInterface * polyman::addLists() { + node * node_ptr1 = l1.head; + node * node_ptr2 = l2.head; + polylist l3; + stringstream exp; + while(node_ptr1 != NULL) { + if(node_ptr1->coefficient != 0) { + exp << node_ptr1->coefficient; + exp << " "; + } + exp << node_ptr1->variable; + if(node_ptr1->exponent != 0) { + exp << " ^ "; + exp << node_ptr1->exponent; + } + l3.insert(exp.str()); + exp.str(""); + node_ptr1 = node_ptr1->next; + } + while(node_ptr2 != NULL) { + if(node_ptr2->coefficient != 0) { + exp << node_ptr2->coefficient; + exp << " "; + } + exp << node_ptr2->variable; + if(node_ptr2->exponent != 0) { + exp << " ^ "; + exp << node_ptr2->exponent; + } + l3.insert(exp.str()); + exp.str(""); + node_ptr2 = node_ptr2->next; + } + polylist * p = NULL; + p = &l3; + return p; +} + +PolynomialListInterface * polyman::subtractLists() { + node * node_ptr1 = l1.head; + node * node_ptr2 = l2.head; + polylist l3; + stringstream exp; + while(node_ptr1 != NULL) { + if(node_ptr1->coefficient != 0) { + exp << node_ptr1->coefficient; + exp << " "; + } + exp << node_ptr1->variable; + if(node_ptr1->exponent != 0) { + exp << " ^ "; + exp << node_ptr1->exponent; + } + l3.insert(exp.str()); + exp.str(""); + node_ptr1 = node_ptr1->next; + } + while(node_ptr2 != NULL) { + if(node_ptr2->coefficient != 0) { + node_ptr2->coefficient = node_ptr2->coefficient * -1; // will cause it to be subtracting + exp << node_ptr2->coefficient; + exp << " "; + } + exp << node_ptr2->variable; + if(node_ptr2->exponent != 0) { + exp << " ^ "; + exp << node_ptr2->exponent; + } + l3.insert(exp.str()); + exp.str(""); + node_ptr2 = node_ptr2->next; + } + polylist * p = NULL; + p = &l3; + return p; +} + +void polyman::fillListOne(string term) { + l1.insert(term); +} + +void polyman::fillListTwo(string term) { + l2.insert(term); +} + +void polyman::clearListOne() { + l1.clear(); +} + +void polyman::clearListTwo() { + l2.clear(); +} + +PolynomialListInterface * polyman::getListOne() { + polylist * p = NULL; + p = &l1; + return p; +} + +PolynomialListInterface * polyman::getListTwo() { + polylist * p = NULL; + p = &l2; + return p; +} diff --git a/cs235/exam1/polyman.h b/cs235/exam1/polyman.h new file mode 100644 index 0000000..5bf9e2b --- /dev/null +++ b/cs235/exam1/polyman.h @@ -0,0 +1,22 @@ +//Derek McQuay 647465151 CS 235 Fall 2012 midterm 1 +#ifndef __POLYMAN_H__ +#define __POLYMAN_H__ +#include "PolynomialManagerInterface.h" +#include "polylist.h" + +using namespace std; + +class polyman : public PolynomialManagerInterface { + public: + polylist l1; + polylist l2; + PolynomialListInterface * addLists(); + PolynomialListInterface * subtractLists(); + void fillListOne(string term); + void fillListTwo(string term); + void clearListOne(); + void clearListTwo(); + PolynomialListInterface * getListOne(); + PolynomialListInterface * getListTwo(); +}; +#endif diff --git a/cs235/final/Makefile b/cs235/final/Makefile new file mode 100644 index 0000000..813bc1e --- /dev/null +++ b/cs235/final/Makefile @@ -0,0 +1,31 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=RedBlackTreeFactory.o br_tree.o br_node.o main.o +EXE=main +all: $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +test: test.cpp RedBlackTreeFactory.o br_node.o +rtest: test + ./test +RedBlackTreeFactory.o: RedBlackTreeFactory.cpp RedBlackTreeFactory.h +br_node.o: br_node.cpp br_node.h +br_tree.o: br_tree.cpp br_tree.h +main.o: main.cpp + +run: main + ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -rvf *.dSYM + +drun: main + gdb ./main + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/final/RedBlackNodeInterface.h b/cs235/final/RedBlackNodeInterface.h new file mode 100644 index 0000000..e32f1d2 --- /dev/null +++ b/cs235/final/RedBlackNodeInterface.h @@ -0,0 +1,43 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once + +#include + +using namespace std; + +class RedBlackNodeInterface { + +public: + RedBlackNodeInterface() {} + virtual ~RedBlackNodeInterface() {} + + /* + * Returns the word that is stored in this node + * + * @return the word that is stored in this node. + */ + virtual string getWord() = 0; + + /* + * Returns the color of the node. A red node should return 0 + * and a black node should return 1. + * + * @return the color of the node + */ + virtual int getColor() = 0; + + /* + * Returns the left child of this node or null if it doesn't have one. + * + * @return the left child of this node or null if it doesn't have one. + */ + virtual RedBlackNodeInterface * getLeftChild() = 0; + + /* + * Returns the right child of this node or null if it doesn't have one. + * + * @return the right child of this node or null if it doesn't have one. + */ + virtual RedBlackNodeInterface * getRightChild() = 0; + +}; diff --git a/cs235/final/RedBlackTreeFactory.cpp b/cs235/final/RedBlackTreeFactory.cpp new file mode 100644 index 0000000..4a09392 --- /dev/null +++ b/cs235/final/RedBlackTreeFactory.cpp @@ -0,0 +1,20 @@ +#include "RedBlackTreeFactory.h" +#include "br_tree.h" +//You may add #include statements here + +/* + You will MODIFY THIS DOCUMENT. +*/ +//======================================================================================= +/* + getRedBlackTree() + + Creates and returns an object whose class extends RedBlackTreeInterface. + This should be an object of a class you have created. + + Example: If you made a class called "RedBlackTree", you might say, "return new RedBlackTree();". +*/ +RedBlackTreeInterface * RedBlackTreeFactory::getRedBlackTree() +{ + return new br_tree();//Modify this line +} diff --git a/cs235/final/RedBlackTreeFactory.h b/cs235/final/RedBlackTreeFactory.h new file mode 100644 index 0000000..2ee460d --- /dev/null +++ b/cs235/final/RedBlackTreeFactory.h @@ -0,0 +1,23 @@ +#pragma once +#include "RedBlackTreeInterface.h" + +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + getRedBlackTree() + + Creates and returns an object whose class extends RedBlackTreeInterface. + This should be an object of a class you have created. + + Example: If you made a class called "RedBlackTree", you might say, "return new RedBlackTree();". +*/ +class RedBlackTreeFactory +{ + public: + static RedBlackTreeInterface * getRedBlackTree(); +}; +//======================================================================================= diff --git a/cs235/final/RedBlackTreeInterface.h b/cs235/final/RedBlackTreeInterface.h new file mode 100644 index 0000000..1974303 --- /dev/null +++ b/cs235/final/RedBlackTreeInterface.h @@ -0,0 +1,78 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once + +#include +#include "RedBlackNodeInterface.h" + +using namespace std; + +class RedBlackTreeInterface { +public: + RedBlackTreeInterface() {} + virtual ~RedBlackTreeInterface() {} + + //Please note that the class that implements this interface must be made + //of objects which implement the NodeInterface + + /* + * Returns the root node for this tree + * + * @return the root node for this tree. + */ + virtual RedBlackNodeInterface * getRootNode() = 0; + + /* + * Attempts to add the given word to the tree + * + * Addition should be consistent with the instructions found in the exam instructions. + */ + virtual void add(string word) = 0; + + /* + * Attempts to add the given string of words to the tree + * + * A string of words consists of alphabetical characters, no punctuation marks, + * and white space as the delimiter separating words. The string should be parsed and + * each word should be added to the tree. + */ + virtual void addPhrase(string words) = 0; + + /* + * Attempts to remove the given word from the tree + * + * Removal should be consistent with the instructions found in the exam instructions. + */ + virtual void remove(string word) = 0; + + /* + * The tree should print in the following format: + * + * Root (value & color) + * Left subtree root (value & color) + * Left left subtree root (value & color) + * Left right subtree root (value & color) + * Right subtree root (value & color) + * Right left subtree root (value & color) + * Right right subtree root (value & color) + * + * For example: + * The tree: + * + * jumps(b) + * brown(r) quick(r) + * The(b) fox(b) over(b) the(b) + * lazy(r) + * + * Will print: + * jumps(b) + * brown(r) + * The(b) + * fox(b) + * quick(r) + * over(b) + * lazy(r); + * the(b) + * + */ + virtual string printTree() = 0; +}; diff --git a/cs235/final/TwoThreeTreeFactory.cpp b/cs235/final/TwoThreeTreeFactory.cpp new file mode 100644 index 0000000..aa42b30 --- /dev/null +++ b/cs235/final/TwoThreeTreeFactory.cpp @@ -0,0 +1,21 @@ +#include "TwoThreeTreeFactory.h" +//You may add #include statements here + +/* + You will MODIFY THIS DOCUMENT. +*/ +//======================================================================================= +/* + getTwoThreeTree() + + Creates and returns an object whose class extends TwoTreeTreeInterface. + This should be an object of a class you have created. + + Example: If you made a class called "TwoThreeTree", you might say, "return new TwoThreeTree();". + + This method should return NULL or 0 if you do not intent to do the extra credit +*/ +TwoThreeTreeInterface * TwoThreeTreeFactory::getTwoThreeTree() +{ + return 0;//Modify this line +} diff --git a/cs235/final/TwoThreeTreeFactory.h b/cs235/final/TwoThreeTreeFactory.h new file mode 100644 index 0000000..a9f9af7 --- /dev/null +++ b/cs235/final/TwoThreeTreeFactory.h @@ -0,0 +1,25 @@ +#pragma once +#include "TwoThreeTreeInterface.h" + +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + getTwoThreeTree() + + Creates and returns an object whose class extends TwoThreeTreeInterface. + This should be an object of a class you have created. + + Example: If you made a class called "TwoThreeTree", you might say, "return new TwoThreeTree();". + + This method should return NULL or 0 if you do not intent to do the extra credit +*/ +class TwoThreeTreeFactory +{ + public: + static TwoThreeTreeInterface * getTwoThreeTree(); +}; +//======================================================================================= diff --git a/cs235/final/TwoThreeTreeInterface.h b/cs235/final/TwoThreeTreeInterface.h new file mode 100644 index 0000000..f6c94a0 --- /dev/null +++ b/cs235/final/TwoThreeTreeInterface.h @@ -0,0 +1,58 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once + +#include + +using namespace std; + +class TwoThreeTreeInterface { +public: + TwoThreeTreeInterface() {} + virtual ~TwoThreeTreeInterface() {} + + //This class may use a node of your own creation. + + /* + * Attempts to add the given word to the tree + * + * Addition should be consistent with the instructions found in the exam instructions. + */ + virtual void add(string word) = 0; + + /* + * Attempts to add the given string of words to the tree + * + * A string of words consists of alphabetical characters, no punctuation marks, + * and white space as the delimiter separating words. The string should be parsed and + * each word should be added to the tree. + */ + virtual void addPhrase(string words) = 0; + + /* + * Attempts to remove the given word from the tree + * + * Removal should be consistent with the instructions found in the exam instructions. + */ + virtual void remove(string word) = 0; + + /* + * The tree should print in the following format: + * + * Root (value) + * Left subtree root (value) + * Left left subtree root (value) + * Left middle subtree root (value) + * Left right subtree root (value) + * Middle subtree root (value) + * Middle left subtree root (value) + * Middle middle subtree root (value) + * Middle right subtree root (value) + * + * Right subtree root (value) + * Right left subtree root (value) + * Right middle subtree root (value) + * Right right subtree root (value) + * + */ + virtual string printTree() = 0; +}; diff --git a/cs235/final/br_node.cpp b/cs235/final/br_node.cpp new file mode 100644 index 0000000..bf75779 --- /dev/null +++ b/cs235/final/br_node.cpp @@ -0,0 +1,19 @@ +#include "br_node.h" + +br_node::br_node(string data): data(data), color(0), parent(NULL), left(NULL), right(NULL) {} + +string br_node::getWord() { + return data; +} + +int br_node::getColor() { + return color; +} + +RedBlackNodeInterface* br_node::getLeftChild() { + return left; +} + +RedBlackNodeInterface* br_node::getRightChild() { + return right; +} diff --git a/cs235/final/br_node.h b/cs235/final/br_node.h new file mode 100644 index 0000000..12cda0c --- /dev/null +++ b/cs235/final/br_node.h @@ -0,0 +1,21 @@ +#ifndef __BR_NODE_H__ +#define __BR_NODE_H__ + +#include "RedBlackNodeInterface.h" + +using namespace std; + +class br_node : public RedBlackNodeInterface { + public: + br_node(string data); + string data; + int color; //red = 0, black = 1 + br_node* parent; + br_node* left; + br_node* right; + string getWord(); + int getColor(); + RedBlackNodeInterface * getLeftChild(); + RedBlackNodeInterface * getRightChild(); +}; +#endif diff --git a/cs235/final/br_tree.cpp b/cs235/final/br_tree.cpp new file mode 100644 index 0000000..e9e9401 --- /dev/null +++ b/cs235/final/br_tree.cpp @@ -0,0 +1,500 @@ +#include "br_tree.h" + +br_tree::br_tree():root(NULL), h(false){} + +vector parse_expression(string expression) { //parses expression with " " being the delimeter + vector results; + string s; + for(unsigned int i = 0; i < expression.length(); i++) { + char c = expression[i]; + if(c != ' ') { + s += c; + } + else { + if(s != "") { + results.push_back(s); + s.clear(); + } + } + } + if(s != "") { + results.push_back(s); + } + return results; +} + +bool br_tree::in_tree(string data) { + bool found = false; + br_node* current; + br_node* parent; + current = root; + while(current) { + if(current->data == data) { + found = true; + break; + } + else { + parent = current; + if(data > current->data) { + current = current->right; + } + else if(data < current->data) { + current = current->left; + } + } + } + return found; +} + +RedBlackNodeInterface* br_tree::getRootNode() { + return root; +} + +void br_tree::add(string word) { + if(in_tree(word)) { + return; + } + if(root == NULL) { + root = new br_node(word); + root->color = 1; + return; + } + br_node* current; + br_node* cur_parent; + current = root; + while(current) { + cur_parent = current; + if(word > current->data) { + current = current->right; + } + else { + current = current->left; + } + } + if(word < cur_parent->data) { + cur_parent->left = new br_node(word); + cur_parent->left->parent = cur_parent; + br_node* child_added = cur_parent->left; + if(cur_parent->color == 0 && child_added->color == 0) { + balance(cur_parent->left); + } + return; + } + else { + cur_parent->right = new br_node(word); + cur_parent->right->parent = cur_parent; + br_node* child_added = cur_parent->right; + if(cur_parent->color == 0 && child_added->color == 0) { + balance(cur_parent->right); + } + return; + } +} + +void br_tree::balance(br_node* cur) { + if((cur->data == root->data) || (cur->parent->data == root->data)) { + return; + } + if((cur->parent->parent->right != NULL) && (cur->parent->parent->left != NULL)) { + if((cur->parent->parent->left->color == 0) && (cur->parent->parent->right->color == 0)) { + cur->parent->parent->left->color = 1; + cur->parent->parent->right->color = 1; + cur->parent->parent->color = 0; + balance(cur->parent->parent); + return; + } + } + if((cur->parent->color == 0) && (cur->color == 0)) { + if((cur->parent->left != NULL) && (cur->parent->parent->left != NULL)) { + if((cur->parent->left->data == cur->data) && (cur->parent->parent->left->data == cur->parent->data)) { + //case III left + br_node* temp = cur->parent->parent; + if(cur->parent->right == NULL) { + temp->left = cur->parent->right; + } + else { + temp->left = cur->parent->right; + cur->parent->right->parent = temp; + } + cur->parent->right = temp; + if(temp->parent != NULL) { + if(temp->parent->right->data == temp->data) { + temp->parent->right = cur->parent; + } + else { + temp->parent->left = cur->parent; + } + } + else { + root = cur->parent; + } + cur->parent->parent = temp->parent; + temp->parent = cur->parent; + cur->parent->color = 1; + temp->color = 0; + balance(cur->parent); + return; + } + } + if((cur->parent->left != NULL) && (cur->parent->parent->right != NULL)) { + if((cur->parent->left->data == cur->data) && (cur->parent->parent->right->data == cur->parent->data)){ + //case II right + br_node* temp1 = cur->parent->parent; + br_node* temp2 = cur->parent; + if(cur->right == NULL) { + temp2->left = cur->right; + } + else { + temp2->left = cur->right; + cur->right->parent = temp2; + } + cur->right = temp2; + temp2->parent = cur; + cur->parent = temp1; + temp1->right = cur; + balance(temp2); + return; + } + } + if((cur->parent->right != NULL) && (cur->parent->parent->left != NULL)) { + if((cur->parent->right->data == cur->data) && (cur->parent->parent->left->data == cur->parent->data)){ + //case II left + br_node* temp1 = cur->parent->parent; + br_node* temp2 = cur->parent; + if(cur->left == NULL) { + temp2->right = cur->left; + } + else { + temp2->right = cur->left; + cur->left->parent = temp2; + } + cur->left = temp2; + temp2->parent = cur; + cur->parent = temp1; + temp1->left = cur; + balance(temp2); + return; + } + } + if((cur->parent->right != NULL) && (cur->parent->parent->right != NULL)) { + if((cur->parent->right->data == cur->data) && (cur->parent->parent->right->data == cur->parent->data)) { + //case III right + br_node* temp = cur->parent->parent; + if(cur->parent->left == NULL) { + temp->right = cur->parent->left; + } + else { + temp->right = cur->parent->left; + cur->parent->left->parent = temp; + } + cur->parent->left = temp; + if(temp->parent != NULL) { + if(temp->parent->right->data == temp->data) { + temp->parent->right = cur->parent; + } + else { + temp->parent->left = cur->parent; + } + } + else { + root = cur->parent; + } + cur->parent->parent = temp->parent; + temp->parent = cur->parent; + cur->parent->color = 1; + temp->color = 0; + balance(cur->parent); + return; + } + } + } + if(root->color == 0) { + root->color = 1; + return; + } + balance(cur->parent); +} + +void br_tree::addPhrase(string words) { + vector parsed_string = parse_expression(words); + for(unsigned int i = 0; i < parsed_string.size(); i++) { + add(parsed_string[i]); + } +} + +void br_tree::remove(string word) { + if(!(in_tree(word))) { + return; + } + if(root == NULL) { + return; + } + br_node* current; + br_node* parent; + current = root; + while(current) { + if(current->data == word) { + break; + } + else { + parent = current; + if(word > current->data) { + current = current->right; + } + else if(word < current->data) { + current = current->left; + } + } + } + if(current->color == 1) { + h = true; + } + else { + h = false; + } + root = del_leaf(root, word); +} + +br_node* br_tree::del_leaf(br_node* root, string data) { + br_node* temp; + if(root == NULL) { + return root; + } + else { + if(data < root->data) { + root->left = del_leaf(root->left, data); + if(h) { + cout << "2" << endl; + bal_del(root->left); + } + } + else { + if(data > root->data) { + root->right = del_leaf(root->right, data); + if(h) { + cout << "3" << endl; + cout << root->data << endl; + bal_del(root->right); + } + } + else { + temp = root; + if(temp->right == NULL) { + root = temp->left; + delete temp; + } + else { + if(temp->left == NULL) { + root = temp->right; + delete temp; + } + else { + temp->left = del(temp->left, temp); + if(h) { + cout << "4" << endl; + if(h) { + bal_del(temp); + } + } + } + } + } + } + } + return root; +} + +void br_tree::bal_del(br_node* x) { + //cout << "bal_del(" << x->data << ")" << endl; + if(x == NULL) { + return; + } + while(x != root && x->color == 1) { + if(x == x->parent->left) { + br_node* w = x->parent->right; + if(w == NULL) { + return; + } + if(w->right == NULL || w->left == NULL) { + return; + } + if(w != NULL && w->right != NULL && w->left != NULL) { + if(w->color == 0) { + cout << "case 1 first" << endl; + w->color = 1; //Case 1 + x->parent->color = 0; //Case 1 + left_rot(x->parent); //Case 1 + w = x->parent->right; //Case 1 + } + else if(w->left->color == 1 && w->right->color == 1) { + cout << "case 2 first" << endl; + w->color = 1; //Case 2 + x = x->parent; //Case 2 + } + else { + if(w->right->color == 1) { + cout << "case 3 first" << endl; + w->left->color = 1; //Case 3 + w->color = 0; //Case 3 + right_rot(w); //Case 3 + w = x->parent->right; //Case 3 + } + cout << "case 4 first" << endl; + w->color = x->parent->color; //Case 4 + x->parent->color = 1; //Case 4 + w->right->color = 1; //Case 4 + left_rot(x->parent); + x = root; + } + } + } + else { + br_node* w = x->parent->left; + if(w == NULL) { + return; + } + if(w->right == NULL || w->left == NULL) { + return; + } + if(w->color == 0) { + cout << "case 1 second" << endl; + w->color = 1; //Case 1 + x->parent->color = 0; //Case 1 + right_rot(x->parent); //Case 1 + w = x->parent->left; //Case 1 + } + else if(w->right->color == 1 && w->left->color == 1) { + cout << "case 2 second" << endl; + w->color = 0; //Case 2 + x = x->parent; //Case 2 + } + else { + if(w->left->color == 1) { + cout << "case 3 second" << endl; + w->right->color = 1; //Case 3 + w->color = 0; //Case 3 + left_rot(w); //Case 3 + w = x->parent->left; //Case 3 + } + cout << "case 4 second" << endl; + w->color = x->parent->color; //Case 4 + x->parent->color = 1; //Case 4 + w->left->color = 1; //Case 4 + right_rot(x->parent); + x = root; + } + } + } + x->color = 1; +} + +br_node* br_tree::del(br_node* succ, br_node* n) { + br_node* temp = succ; + if(succ->right != NULL) { + succ->right = del(succ->right, n); + } + else { + br_node* current; + br_node* parent; + current = root; + while(current) { + if(current->data == succ->data) { + break; + } + else { + parent = current; + if(succ->data > current->data) { + current = current->right; + } + else if(succ->data < current->data) { + current = current->left; + } + } + } + if(root->left->data == succ->data) { + root->data = succ->data; + n->right = root->right; + succ = succ->left; + delete temp; + return succ; + } + else if(root->right->data == succ->data) { + root->data = succ->data; + n->right = root->right; + succ = succ->right; + delete temp; + return succ; + } + temp = succ; + n->data = succ->data; + succ = succ->left; + delete temp; + } + return succ; +} + +void br_tree::right_rot(br_node* x) { + br_node* y = x->left; + x->left = y->right; + if(y->right != NULL) { + y->right->parent = x; + } + y->parent = x->parent; + if(x->parent == NULL) { + root = y; + } + else if(x == x->parent->right) { + x->parent->right = y; + } + else { + x->parent->left = y; + } + y->right = x; + x->parent = y; +} + +void br_tree::left_rot(br_node* x) { + br_node* y = x->right; + x->right = y->left; + if(y->left != NULL) { + y->left->parent = x; + } + y->parent = x->parent; + if(x->parent == NULL) { + root = y; + } + else if(x == x->parent->left) { + x->parent->left = y; + } + else { + x->parent->right = y; + } + y->left = x; + x->parent = y; +} + +void br_tree::printer(br_node* node, int a) { + a++; + if(node == NULL) { + return; + } + printer(node->right, a); + for(int i = 0; i <= a; i++) { + cout << "\t"; + } + printf("%s %d", node->data.c_str(), node->color); + cout << endl << endl; + printer(node->left, a); +} + +string br_tree::printTree() { + string tree; + if(root == NULL) { + return ""; + } + cout << root->data << endl; + cout << endl; + printer(root, 0); + cout << endl; + return tree; +} diff --git a/cs235/final/br_tree.h b/cs235/final/br_tree.h new file mode 100644 index 0000000..7ba2bbe --- /dev/null +++ b/cs235/final/br_tree.h @@ -0,0 +1,34 @@ +#ifndef __BR_TREE_H__ +#define __BR_TREE_H__ + +#include "br_node.h" +#include "RedBlackTreeInterface.h" +#include +#include +#include +#include + +using namespace std; + +class br_tree : public RedBlackTreeInterface { + public: + br_tree(); + br_node* root; + bool h; + RedBlackNodeInterface * getRootNode(); + bool in_tree(string data); + void add(string word); + void addPhrase(string words); + void remove(string word); + void balance(br_node* cur); + void transfer(br_node* temp1, br_node* temp2); + void bal_del(br_node* x); + br_node* del_leaf(br_node* root, string data); + void right_rot(br_node* x); + void left_rot(br_node* x); + void printer(br_node* node, int a); + br_node* del(br_node* succ, br_node* n); + br_node* min(br_node* temp); + string printTree(); +}; +#endif diff --git a/cs235/final/main.cpp b/cs235/final/main.cpp new file mode 100644 index 0000000..8322e0b --- /dev/null +++ b/cs235/final/main.cpp @@ -0,0 +1,235 @@ +#include +#include +#include +#include +#include +#include "RedBlackTreeFactory.h" +#include "TwoThreeTreeFactory.h" +#include "br_tree.h" + +/* This main is provided to help you test your code. Be aware that the TAs will use a separate + * test driver that will only test your red black tree code. You may modify this code if you wish, + * but do not try to modify the main to get your own code to work. + */ + + +using namespace std; +int getOption(int max, int min); +string getString(); +void exitPause(); + +RedBlackTreeInterface * redBlackTree; +TwoThreeTreeInterface * twoThreeTree; + +int main() +{ + srand(time(NULL)); + br_tree b; + redBlackTree = RedBlackTreeFactory::getRedBlackTree(); + + if(redBlackTree == NULL) { + cout << endl; + cout << "Factory getRedBlackTree() returned NULL!\nExiting Test Driver (press enter to exit)" << endl; + + exitPause(); + return 0; + } + +// twoThreeTree = TwoThreeTreeFactory::getTwoThreeTree(); + + cout << "Final Exam Beginning" << endl; + while(1) + { + int choice = 0; + if(twoThreeTree == NULL) { + cout<< "Please select an option:" + << "\n1. Add a single word to the tree" + << "\n2. Add a list of words to the tree" + << "\n3. Remove a single word from the tree" + << "\n4. Print the tree" + << "\n5. Quit Program" << endl; + choice = getOption(1,5); + } + else { + cout<< "Please select an option:" + << "\n1. Add a single word to the red black tree" + << "\n2. Add a list of words to the red black tree" + << "\n3. Remove a single word from the red black tree" + << "\n4. Print the red black tree" + << "\n5. Add a single word to the two three tree" + << "\n6. Add a list of words to the two three tree" + << "\n7. Remove a single word from the two three tree" + << "\n8. Print the two three tree" + << "\n9. Quit Program" << endl; + choice = getOption(1,9); + } + if(choice == 1) + { + //Insert the string that the user passes to the program into the tree + for(int i = 0; i < 50000; i++) { + stringstream s; + int rand_n = rand() % 50000; + s << rand_n; + b.add(s.str()); + } + cout << b.root << endl; + //cout<< "Enter the word to add to the tree (alphabetical characters, no punctuation marks, no spaces)."<add(insertToTree); + } + else if(choice == 2) + { + //Insert the string that the user passes to the program into the tree + cout<< "Enter the string to add to the tree." + << "\n(alphabetical characters, no punctuation marks, and with white space as the delimiter separating words)" << endl; + string insertToTree; + insertToTree = getString(); + redBlackTree->addPhrase(insertToTree); + } + else if(choice == 3) + { + cout << "here" << endl; + while(b.root) { + cout << "ah" << endl; + stringstream s; + int rand_n = rand() % 50000; + s << rand_n; + b.remove(s.str()); + } + //Remove the string that the user passes to the program into the tree + //cout << "Enter the word to remove from the tree (alphabetical characters, no punctuation marks, no spaces)."<remove(removeFromTree); + } + else if(choice == 4) + { + cout << b.printTree(); + //cout << "Your tree:" << endl; + //cout << "\t" << redBlackTree->printTree() << endl; + } + else if(choice == 5 && twoThreeTree == NULL) + { + break; + } + else if(choice == 5 && twoThreeTree != NULL) + { + //Insert the string that the user passes to the program into the tree + cout<< "Enter the word to add to the tree (alphabetical characters, no punctuation marks, no spaces)."<add(insertToTree); + } + else if(choice == 6) + { + //Insert the string that the user passes to the program into the tree + cout<< "Enter the string to add to the tree." + << "\n(alphabetical characters, no punctuation marks, and with white space as the delimiter separating words)" << endl; + string insertToTree; + insertToTree = getString(); + twoThreeTree->addPhrase(insertToTree); + } + else if(choice == 7) + { + //Remove the string that the user passes to the program into the tree + cout << "Enter the word to remove from the tree (alphabetical characters, no punctuation marks, no spaces)."<remove(removeFromTree); + } + else if(choice == 8) + { + cout << "Your tree:" << endl; + cout << "\t" << twoThreeTree->printTree() << endl; + } + else + { + break; + } + } + cout << "Thanks for Playing!" << endl; + + exitPause(); + return 0; +} + +//------------------------------------------------------------------------------------- +int getOption(int min, int max) +{ + int input = 0; + bool done = false; + while(!done) + { + input = 0; + cin >> input; + cin.ignore(1000,'\n'); + if(cin.fail()) + { + cin.clear(); + cin.ignore(1000,'\n'); + cout << "Error: Invalid" << endl; + } + else if(input < min || input > max) + { + cout << "Error: Invalid number" << endl; + } + else + { + done = true; + } + } + return input; +} + +string getString() +{ + string input = ""; + bool done = false; + while(!done) + { + input = ""; + getline(cin, input); + if(cin.fail()) + { + cin.clear(); + cin.ignore(1000,'\n'); + cout << "Error: Invalid name" << endl; + } + else + { + done = true; + } + } + return input; +} + +string getWord() +{ + string input = ""; + bool done = false; + while(!done) + { + input = ""; + getline(cin, input); + if(cin.fail()) + { + cin.clear(); + cin.ignore(1000,'\n'); + cout << "Error: Invalid name" << endl; + } + else + { + done = true; + } + } + return input; +} + +void exitPause() { + #ifdef ON_WINDOWS + system("pause"); + #else + + #endif +} diff --git a/cs235/final/test.cpp b/cs235/final/test.cpp new file mode 100644 index 0000000..0c09a4b --- /dev/null +++ b/cs235/final/test.cpp @@ -0,0 +1,7 @@ +#include "br_tree.h" + +using namespace std; + +int main() { + br_tree b; +} diff --git a/cs235/lab02/Lab 2 README.pdf b/cs235/lab02/Lab 2 README.pdf new file mode 100755 index 0000000000000000000000000000000000000000..b3b44dd05e74d8bce27d54019b61439dbbb0d8ef GIT binary patch literal 235213 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 z zbnoxy9Qc3UjhxS>()!F3m&RVA)lIdh?8lbI&l{MVl(tvOl_JxG=Nrtmq_*wNCz_3; z)g=QPxVww?Gg%zQY_0a&%(ZMlDm*>|+sH9&+Nk#3M6A zJYQbFof`1k`YBvYlT~rX44RrB8r5u z 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 z## &VBZ6^^`JfFnCa4RZnax?hyPqJSuSK`kJg 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 KxdQ&n?*9O+k<+;V literal 0 HcmV?d00001 diff --git a/cs235/lab02/Run Test Driver.bat b/cs235/lab02/Run Test Driver.bat new file mode 100755 index 0000000..79943f5 --- /dev/null +++ b/cs235/lab02/Run Test Driver.bat @@ -0,0 +1,33 @@ +TITLE TA Test Driver + +@echo off + +del Student_code\circle.cpp~ + +rem setting up environment variables needed for VS compiler +call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86_amd64 + +rem compiling the .obj +cl /EHsc /Fedont_run_me.exe Student_Code\*.cpp ignoreme.lib + +rem if compilation failed, goto error section +if ERRORLEVEL 1 goto error + +rem cleanup unnecessary generated files +del *.obj + +rem run the driver in another window +.\dont_run_me.exe +del dont_run_me.exe +pause + +exit + +:error + +rem remove any generated files +del *.obj + +echo ----------ERROR-------- +pause +exit diff --git a/cs235/lab02/Student_Code/Factory.cpp b/cs235/lab02/Student_Code/Factory.cpp new file mode 100644 index 0000000..a6bd086 --- /dev/null +++ b/cs235/lab02/Student_Code/Factory.cpp @@ -0,0 +1,20 @@ +#include "Factory.h" +#include "circle.h" +//You may add #include statments here + +/* + You will MODIFY THIS DOCUMENT. +*/ +//======================================================================================= +/* + getGame() + + Creates and returns an object whose class extends JosephusInterface. + This should be an object of a class you have created. + + Example: If you made a class called "Circle", you might say, "return new Circle();". +*/ +JosephusInterface * Factory::getGame() +{ + return new circle(); +} diff --git a/cs235/lab02/Student_Code/Factory.h b/cs235/lab02/Student_Code/Factory.h new file mode 100644 index 0000000..da8c81c --- /dev/null +++ b/cs235/lab02/Student_Code/Factory.h @@ -0,0 +1,23 @@ +#pragma once +#include "JosephusInterface.h" + +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + getGame() + + Creates and returns an object whose class extends JosephusInterface. + This should be an object of a class you have created. + + Example: If you made a class called "Circle", you might say, "return new Circle();". +*/ +class Factory +{ + public: + static JosephusInterface * getGame(); +}; +//======================================================================================= diff --git a/cs235/lab02/Student_Code/JosephusInterface.h b/cs235/lab02/Student_Code/JosephusInterface.h new file mode 100644 index 0000000..8b1c1a8 --- /dev/null +++ b/cs235/lab02/Student_Code/JosephusInterface.h @@ -0,0 +1,54 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once +#include +#include +#include + +using namespace std; + +class JosephusInterface +{ +public: + JosephusInterface(void){} + virtual ~JosephusInterface(void){} + /* + getNames + + Returns a list of names in the order in which the people will be standing for the "game". + Although fewer people may be playing, you must return 20 names here. Do not provide + duplicate names. + + For the sake of the test driver, this method must return the list of 20 names in the + same order every time it is called, and this list of 20 names in this order must be used + to play the "game". + + This method will be called repeatedly. + */ + virtual vector getNames() = 0; + /* + playGame + + Plays a "game" with the first n people from the list (above) counting forward every m. An + explanation for how the "game" works can be found in the exam specs. + + This method should return a list of names in the order in which the lot fell upon them (including + the survivor, who should be last). If n is not between 10 and 20 or if m is non-positive, + return an empty vector. + + This method will be called repeatedly. + */ + virtual vector playGame(int n, int m) = 0; + /* + reportSafeIndex + + Returns the "safe index", the last index/location in the circle that will be chosen when + the "game" is played. The point of this method is to permit someone to cheat the system + by finding the safe location ahead of time. + + If n is not between 10 and 20 or if m is non-positive, return -1. + + This method may be called repeatedly. + */ + virtual int reportSafeIndex(int n, int m) = 0; +}; + diff --git a/cs235/lab02/Student_Code/Makefile b/cs235/lab02/Student_Code/Makefile new file mode 100644 index 0000000..14ac4a0 --- /dev/null +++ b/cs235/lab02/Student_Code/Makefile @@ -0,0 +1,25 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=main.o Factory.o circle.o +EXE=main + +all: $(EXE) + + +$(EXE): main.o + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +main.o: main.cpp Factory.o circle.o +Factory.o: Factory.cpp Factory.h +circle.o: circle.cpp circle.h + +run: $(EXE) + @./$(EXE) + +clean: + @rm -vf *.o + @rm -vf $(EXE) + +debug: $(EXE) + gdb ./$(EXE) + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/lab02/Student_Code/circle.cpp b/cs235/lab02/Student_Code/circle.cpp new file mode 100644 index 0000000..756c0d1 --- /dev/null +++ b/cs235/lab02/Student_Code/circle.cpp @@ -0,0 +1,88 @@ +#include +#include "circle.h" + +ostream & operator<<(ostream & os, vector strings) { + for(unsigned int i = 0; i < strings.size(); i++) + os << strings[i] << ", "; + os << endl; + return os; +} + +vector circle::getNames() { + vector names; + names.push_back("Josephus"); + names.push_back("A"); + names.push_back("B"); + names.push_back("C"); + names.push_back("D"); + names.push_back("E"); + names.push_back("F"); + names.push_back("G"); + names.push_back("H"); + names.push_back("I"); + names.push_back("J"); + names.push_back("K"); + names.push_back("L"); + names.push_back("M"); + names.push_back("N"); + names.push_back("O"); + names.push_back("P"); + names.push_back("Q"); + names.push_back("R"); + names.push_back("S"); + return names; +} +vector circle::playGame(int n, int m) { + vector names = getNames(); + vector temp; + if(n < 10 || n > 20){ + names.clear(); + return names; + } + if(m < 1){ + names.clear(); + return names; + } + for(int i = 0; i < 20 - n; i++) { + names.pop_back(); + } + unsigned int count = 0; + for(int i = 0; i < n; i++) { + int hits = 0; + while(hits < m) { + if(names[count] == ""){ + } + else { + hits++; + if(hits == m) { + temp.push_back(names[count]); + names[count] = ""; + hits = 100; + } + } + count++; + if(count+1 > names.size()) { + count = 0; + } + } + } + return temp; +} + +int circle::reportSafeIndex(int n, int m) { + if(m < 1) { + return -1; + } + else if (n < 10 || n > 20){ + return -1; + } + vector names = getNames(); + vector kill_list = playGame(n, m); + string safe_person_name = kill_list[kill_list.size() - 1]; + for(unsigned int i = 0; i < names.size(); i++) { + if(safe_person_name == names[i]) { + return i; + } + } + return -1; +} diff --git a/cs235/lab02/Student_Code/circle.h b/cs235/lab02/Student_Code/circle.h new file mode 100644 index 0000000..3e580e0 --- /dev/null +++ b/cs235/lab02/Student_Code/circle.h @@ -0,0 +1,19 @@ +#ifndef __CIRCLE_H__ +#define __CIRCLE_H__ + +#include +#include +#include "JosephusInterface.h" + +using namespace std; + +class circle : public JosephusInterface +{ + public: + circle(){} + vector getNames(); + vector playGame(int n, int m); + int reportSafeIndex(int n, int m); +}; + +#endif diff --git a/cs235/lab02/Student_Code/main.cpp b/cs235/lab02/Student_Code/main.cpp new file mode 100644 index 0000000..9930beb --- /dev/null +++ b/cs235/lab02/Student_Code/main.cpp @@ -0,0 +1,1974 @@ +#include +#include +#include "circle.h" +#include "Factory.h" + +using namespace std; + +int main() { + vector names; + circle c; + names = c.getNames(); + assert(names.size() == 20); + + names = c.playGame(20, 1); + vector expected { + "Josephus", + "A", "B", "C", "D", "E", "F", "G", "H", + "I", "J", "K", "L", "M", "N", "O", "P", + "Q", "R", "S", }; + assert(names == expected); + assert(c.reportSafeIndex(20, 1) == 19); + + names = c.playGame(10, 3); + vector expected2 { + "B","E","H","A","F","Josephus","G","D","I","C", + }; + assert(names == expected2); + assert(c.reportSafeIndex(10, 3) == 3); + + names = c.playGame(10, 6); + vector expected3 { + "E","A","H","F","D","G", + "Josephus","I","C","B", + }; + assert(names == expected3); + + // test 3 tests: + assert(c.reportSafeIndex(10, 6) == 2); + assert(c.reportSafeIndex(0, -5) == -1); + assert(c.reportSafeIndex(0, -4) == -1); + assert(c.reportSafeIndex(0, -3) == -1); + assert(c.reportSafeIndex(0, -2) == -1); + assert(c.reportSafeIndex(0, -1) == -1); + assert(c.reportSafeIndex(0, 0) == -1); + assert(c.reportSafeIndex(0, 1) == -1); + assert(c.reportSafeIndex(0, 2) == -1); + assert(c.reportSafeIndex(0, 3) == -1); + assert(c.reportSafeIndex(0, 4) == -1); + assert(c.reportSafeIndex(0, 5) == -1); + assert(c.reportSafeIndex(0, 6) == -1); + assert(c.reportSafeIndex(0, 7) == -1); + assert(c.reportSafeIndex(0, 8) == -1); + assert(c.reportSafeIndex(0, 9) == -1); + assert(c.reportSafeIndex(0, 10) == -1); + assert(c.reportSafeIndex(0, 11) == -1); + assert(c.reportSafeIndex(0, 12) == -1); + assert(c.reportSafeIndex(0, 13) == -1); + assert(c.reportSafeIndex(0, 14) == -1); + assert(c.reportSafeIndex(0, 15) == -1); + assert(c.reportSafeIndex(0, 16) == -1); + assert(c.reportSafeIndex(0, 17) == -1); + assert(c.reportSafeIndex(0, 18) == -1); + assert(c.reportSafeIndex(0, 19) == -1); + assert(c.reportSafeIndex(0, 20) == -1); + assert(c.reportSafeIndex(0, 21) == -1); + assert(c.reportSafeIndex(0, 22) == -1); + assert(c.reportSafeIndex(0, 23) == -1); + assert(c.reportSafeIndex(0, 24) == -1); + assert(c.reportSafeIndex(0, 25) == -1); + assert(c.reportSafeIndex(0, 26) == -1); + assert(c.reportSafeIndex(0, 27) == -1); + assert(c.reportSafeIndex(0, 28) == -1); + assert(c.reportSafeIndex(0, 29) == -1); + assert(c.reportSafeIndex(0, 30) == -1); + assert(c.reportSafeIndex(0, 31) == -1); + assert(c.reportSafeIndex(0, 32) == -1); + assert(c.reportSafeIndex(0, 33) == -1); + assert(c.reportSafeIndex(0, 34) == -1); + assert(c.reportSafeIndex(0, 35) == -1); + assert(c.reportSafeIndex(0, 36) == -1); + assert(c.reportSafeIndex(0, 37) == -1); + assert(c.reportSafeIndex(0, 38) == -1); + assert(c.reportSafeIndex(0, 39) == -1); + assert(c.reportSafeIndex(0, 40) == -1); + assert(c.reportSafeIndex(0, 41) == -1); + assert(c.reportSafeIndex(1, -5) == -1); + assert(c.reportSafeIndex(1, -4) == -1); + assert(c.reportSafeIndex(1, -3) == -1); + assert(c.reportSafeIndex(1, -2) == -1); + assert(c.reportSafeIndex(1, -1) == -1); + assert(c.reportSafeIndex(1, 0) == -1); + assert(c.reportSafeIndex(1, 1) == -1); + assert(c.reportSafeIndex(1, 2) == -1); + assert(c.reportSafeIndex(1, 3) == -1); + assert(c.reportSafeIndex(1, 4) == -1); + assert(c.reportSafeIndex(1, 5) == -1); + assert(c.reportSafeIndex(1, 6) == -1); + assert(c.reportSafeIndex(1, 7) == -1); + assert(c.reportSafeIndex(1, 8) == -1); + assert(c.reportSafeIndex(1, 9) == -1); + assert(c.reportSafeIndex(1, 10) == -1); + assert(c.reportSafeIndex(1, 11) == -1); + assert(c.reportSafeIndex(1, 12) == -1); + assert(c.reportSafeIndex(1, 13) == -1); + assert(c.reportSafeIndex(1, 14) == -1); + assert(c.reportSafeIndex(1, 15) == -1); + assert(c.reportSafeIndex(1, 16) == -1); + assert(c.reportSafeIndex(1, 17) == -1); + assert(c.reportSafeIndex(1, 18) == -1); + assert(c.reportSafeIndex(1, 19) == -1); + assert(c.reportSafeIndex(1, 20) == -1); + assert(c.reportSafeIndex(1, 21) == -1); + assert(c.reportSafeIndex(1, 22) == -1); + assert(c.reportSafeIndex(1, 23) == -1); + assert(c.reportSafeIndex(1, 24) == -1); + assert(c.reportSafeIndex(1, 25) == -1); + assert(c.reportSafeIndex(1, 26) == -1); + assert(c.reportSafeIndex(1, 27) == -1); + assert(c.reportSafeIndex(1, 28) == -1); + assert(c.reportSafeIndex(1, 29) == -1); + assert(c.reportSafeIndex(1, 30) == -1); + assert(c.reportSafeIndex(1, 31) == -1); + assert(c.reportSafeIndex(1, 32) == -1); + assert(c.reportSafeIndex(1, 33) == -1); + assert(c.reportSafeIndex(1, 34) == -1); + assert(c.reportSafeIndex(1, 35) == -1); + assert(c.reportSafeIndex(1, 36) == -1); + assert(c.reportSafeIndex(1, 37) == -1); + assert(c.reportSafeIndex(1, 38) == -1); + assert(c.reportSafeIndex(1, 39) == -1); + assert(c.reportSafeIndex(1, 40) == -1); + assert(c.reportSafeIndex(1, 41) == -1); + assert(c.reportSafeIndex(2, -5) == -1); + assert(c.reportSafeIndex(2, -4) == -1); + assert(c.reportSafeIndex(2, -3) == -1); + assert(c.reportSafeIndex(2, -2) == -1); + assert(c.reportSafeIndex(2, -1) == -1); + assert(c.reportSafeIndex(2, 0) == -1); + assert(c.reportSafeIndex(2, 1) == -1); + assert(c.reportSafeIndex(2, 2) == -1); + assert(c.reportSafeIndex(2, 3) == -1); + assert(c.reportSafeIndex(2, 4) == -1); + assert(c.reportSafeIndex(2, 5) == -1); + assert(c.reportSafeIndex(2, 6) == -1); + assert(c.reportSafeIndex(2, 7) == -1); + assert(c.reportSafeIndex(2, 8) == -1); + assert(c.reportSafeIndex(2, 9) == -1); + assert(c.reportSafeIndex(2, 10) == -1); + assert(c.reportSafeIndex(2, 11) == -1); + assert(c.reportSafeIndex(2, 12) == -1); + assert(c.reportSafeIndex(2, 13) == -1); + assert(c.reportSafeIndex(2, 14) == -1); + assert(c.reportSafeIndex(2, 15) == -1); + assert(c.reportSafeIndex(2, 16) == -1); + assert(c.reportSafeIndex(2, 17) == -1); + assert(c.reportSafeIndex(2, 18) == -1); + assert(c.reportSafeIndex(2, 19) == -1); + assert(c.reportSafeIndex(2, 20) == -1); + assert(c.reportSafeIndex(2, 21) == -1); + assert(c.reportSafeIndex(2, 22) == -1); + assert(c.reportSafeIndex(2, 23) == -1); + assert(c.reportSafeIndex(2, 24) == -1); + assert(c.reportSafeIndex(2, 25) == -1); + assert(c.reportSafeIndex(2, 26) == -1); + assert(c.reportSafeIndex(2, 27) == -1); + assert(c.reportSafeIndex(2, 28) == -1); + assert(c.reportSafeIndex(2, 29) == -1); + assert(c.reportSafeIndex(2, 30) == -1); + assert(c.reportSafeIndex(2, 31) == -1); + assert(c.reportSafeIndex(2, 32) == -1); + assert(c.reportSafeIndex(2, 33) == -1); + assert(c.reportSafeIndex(2, 34) == -1); + assert(c.reportSafeIndex(2, 35) == -1); + assert(c.reportSafeIndex(2, 36) == -1); + assert(c.reportSafeIndex(2, 37) == -1); + assert(c.reportSafeIndex(2, 38) == -1); + assert(c.reportSafeIndex(2, 39) == -1); + assert(c.reportSafeIndex(2, 40) == -1); + assert(c.reportSafeIndex(2, 41) == -1); + assert(c.reportSafeIndex(3, -5) == -1); + assert(c.reportSafeIndex(3, -4) == -1); + assert(c.reportSafeIndex(3, -3) == -1); + assert(c.reportSafeIndex(3, -2) == -1); + assert(c.reportSafeIndex(3, -1) == -1); + assert(c.reportSafeIndex(3, 0) == -1); + assert(c.reportSafeIndex(3, 1) == -1); + assert(c.reportSafeIndex(3, 2) == -1); + assert(c.reportSafeIndex(3, 3) == -1); + assert(c.reportSafeIndex(3, 4) == -1); + assert(c.reportSafeIndex(3, 5) == -1); + assert(c.reportSafeIndex(3, 6) == -1); + assert(c.reportSafeIndex(3, 7) == -1); + assert(c.reportSafeIndex(3, 8) == -1); + assert(c.reportSafeIndex(3, 9) == -1); + assert(c.reportSafeIndex(3, 10) == -1); + assert(c.reportSafeIndex(3, 11) == -1); + assert(c.reportSafeIndex(3, 12) == -1); + assert(c.reportSafeIndex(3, 13) == -1); + assert(c.reportSafeIndex(3, 14) == -1); + assert(c.reportSafeIndex(3, 15) == -1); + assert(c.reportSafeIndex(3, 16) == -1); + assert(c.reportSafeIndex(3, 17) == -1); + assert(c.reportSafeIndex(3, 18) == -1); + assert(c.reportSafeIndex(3, 19) == -1); + assert(c.reportSafeIndex(3, 20) == -1); + assert(c.reportSafeIndex(3, 21) == -1); + assert(c.reportSafeIndex(3, 22) == -1); + assert(c.reportSafeIndex(3, 23) == -1); + assert(c.reportSafeIndex(3, 24) == -1); + assert(c.reportSafeIndex(3, 25) == -1); + assert(c.reportSafeIndex(3, 26) == -1); + assert(c.reportSafeIndex(3, 27) == -1); + assert(c.reportSafeIndex(3, 28) == -1); + assert(c.reportSafeIndex(3, 29) == -1); + assert(c.reportSafeIndex(3, 30) == -1); + assert(c.reportSafeIndex(3, 31) == -1); + assert(c.reportSafeIndex(3, 32) == -1); + assert(c.reportSafeIndex(3, 33) == -1); + assert(c.reportSafeIndex(3, 34) == -1); + assert(c.reportSafeIndex(3, 35) == -1); + assert(c.reportSafeIndex(3, 36) == -1); + assert(c.reportSafeIndex(3, 37) == -1); + assert(c.reportSafeIndex(3, 38) == -1); + assert(c.reportSafeIndex(3, 39) == -1); + assert(c.reportSafeIndex(3, 40) == -1); + assert(c.reportSafeIndex(3, 41) == -1); + assert(c.reportSafeIndex(4, -5) == -1); + assert(c.reportSafeIndex(4, -4) == -1); + assert(c.reportSafeIndex(4, -3) == -1); + assert(c.reportSafeIndex(4, -2) == -1); + assert(c.reportSafeIndex(4, -1) == -1); + assert(c.reportSafeIndex(4, 0) == -1); + assert(c.reportSafeIndex(4, 1) == -1); + assert(c.reportSafeIndex(4, 2) == -1); + assert(c.reportSafeIndex(4, 3) == -1); + assert(c.reportSafeIndex(4, 4) == -1); + assert(c.reportSafeIndex(4, 5) == -1); + assert(c.reportSafeIndex(4, 6) == -1); + assert(c.reportSafeIndex(4, 7) == -1); + assert(c.reportSafeIndex(4, 8) == -1); + assert(c.reportSafeIndex(4, 9) == -1); + assert(c.reportSafeIndex(4, 10) == -1); + assert(c.reportSafeIndex(4, 11) == -1); + assert(c.reportSafeIndex(4, 12) == -1); + assert(c.reportSafeIndex(4, 13) == -1); + assert(c.reportSafeIndex(4, 14) == -1); + assert(c.reportSafeIndex(4, 15) == -1); + assert(c.reportSafeIndex(4, 16) == -1); + assert(c.reportSafeIndex(4, 17) == -1); + assert(c.reportSafeIndex(4, 18) == -1); + assert(c.reportSafeIndex(4, 19) == -1); + assert(c.reportSafeIndex(4, 20) == -1); + assert(c.reportSafeIndex(4, 21) == -1); + assert(c.reportSafeIndex(4, 22) == -1); + assert(c.reportSafeIndex(4, 23) == -1); + assert(c.reportSafeIndex(4, 24) == -1); + assert(c.reportSafeIndex(4, 25) == -1); + assert(c.reportSafeIndex(4, 26) == -1); + assert(c.reportSafeIndex(4, 27) == -1); + assert(c.reportSafeIndex(4, 28) == -1); + assert(c.reportSafeIndex(4, 29) == -1); + assert(c.reportSafeIndex(4, 30) == -1); + assert(c.reportSafeIndex(4, 31) == -1); + assert(c.reportSafeIndex(4, 32) == -1); + assert(c.reportSafeIndex(4, 33) == -1); + assert(c.reportSafeIndex(4, 34) == -1); + assert(c.reportSafeIndex(4, 35) == -1); + assert(c.reportSafeIndex(4, 36) == -1); + assert(c.reportSafeIndex(4, 37) == -1); + assert(c.reportSafeIndex(4, 38) == -1); + assert(c.reportSafeIndex(4, 39) == -1); + assert(c.reportSafeIndex(4, 40) == -1); + assert(c.reportSafeIndex(4, 41) == -1); + assert(c.reportSafeIndex(5, -5) == -1); + assert(c.reportSafeIndex(5, -4) == -1); + assert(c.reportSafeIndex(5, -3) == -1); + assert(c.reportSafeIndex(5, -2) == -1); + assert(c.reportSafeIndex(5, -1) == -1); + assert(c.reportSafeIndex(5, 0) == -1); + assert(c.reportSafeIndex(5, 1) == -1); + assert(c.reportSafeIndex(5, 2) == -1); + assert(c.reportSafeIndex(5, 3) == -1); + assert(c.reportSafeIndex(5, 4) == -1); + assert(c.reportSafeIndex(5, 5) == -1); + assert(c.reportSafeIndex(5, 6) == -1); + assert(c.reportSafeIndex(5, 7) == -1); + assert(c.reportSafeIndex(5, 8) == -1); + assert(c.reportSafeIndex(5, 9) == -1); + assert(c.reportSafeIndex(5, 10) == -1); + assert(c.reportSafeIndex(5, 11) == -1); + assert(c.reportSafeIndex(5, 12) == -1); + assert(c.reportSafeIndex(5, 13) == -1); + assert(c.reportSafeIndex(5, 14) == -1); + assert(c.reportSafeIndex(5, 15) == -1); + assert(c.reportSafeIndex(5, 16) == -1); + assert(c.reportSafeIndex(5, 17) == -1); + assert(c.reportSafeIndex(5, 18) == -1); + assert(c.reportSafeIndex(5, 19) == -1); + assert(c.reportSafeIndex(5, 20) == -1); + assert(c.reportSafeIndex(5, 21) == -1); + assert(c.reportSafeIndex(5, 22) == -1); + assert(c.reportSafeIndex(5, 23) == -1); + assert(c.reportSafeIndex(5, 24) == -1); + assert(c.reportSafeIndex(5, 25) == -1); + assert(c.reportSafeIndex(5, 26) == -1); + assert(c.reportSafeIndex(5, 27) == -1); + assert(c.reportSafeIndex(5, 28) == -1); + assert(c.reportSafeIndex(5, 29) == -1); + assert(c.reportSafeIndex(5, 30) == -1); + assert(c.reportSafeIndex(5, 31) == -1); + assert(c.reportSafeIndex(5, 32) == -1); + assert(c.reportSafeIndex(5, 33) == -1); + assert(c.reportSafeIndex(5, 34) == -1); + assert(c.reportSafeIndex(5, 35) == -1); + assert(c.reportSafeIndex(5, 36) == -1); + assert(c.reportSafeIndex(5, 37) == -1); + assert(c.reportSafeIndex(5, 38) == -1); + assert(c.reportSafeIndex(5, 39) == -1); + assert(c.reportSafeIndex(5, 40) == -1); + assert(c.reportSafeIndex(5, 41) == -1); + assert(c.reportSafeIndex(6, -5) == -1); + assert(c.reportSafeIndex(6, -4) == -1); + assert(c.reportSafeIndex(6, -3) == -1); + assert(c.reportSafeIndex(6, -2) == -1); + assert(c.reportSafeIndex(6, -1) == -1); + assert(c.reportSafeIndex(6, 0) == -1); + assert(c.reportSafeIndex(6, 1) == -1); + assert(c.reportSafeIndex(6, 2) == -1); + assert(c.reportSafeIndex(6, 3) == -1); + assert(c.reportSafeIndex(6, 4) == -1); + assert(c.reportSafeIndex(6, 5) == -1); + assert(c.reportSafeIndex(6, 6) == -1); + assert(c.reportSafeIndex(6, 7) == -1); + assert(c.reportSafeIndex(6, 8) == -1); + assert(c.reportSafeIndex(6, 9) == -1); + assert(c.reportSafeIndex(6, 10) == -1); + assert(c.reportSafeIndex(6, 11) == -1); + assert(c.reportSafeIndex(6, 12) == -1); + assert(c.reportSafeIndex(6, 13) == -1); + assert(c.reportSafeIndex(6, 14) == -1); + assert(c.reportSafeIndex(6, 15) == -1); + assert(c.reportSafeIndex(6, 16) == -1); + assert(c.reportSafeIndex(6, 17) == -1); + assert(c.reportSafeIndex(6, 18) == -1); + assert(c.reportSafeIndex(6, 19) == -1); + assert(c.reportSafeIndex(6, 20) == -1); + assert(c.reportSafeIndex(6, 21) == -1); + assert(c.reportSafeIndex(6, 22) == -1); + assert(c.reportSafeIndex(6, 23) == -1); + assert(c.reportSafeIndex(6, 24) == -1); + assert(c.reportSafeIndex(6, 25) == -1); + assert(c.reportSafeIndex(6, 26) == -1); + assert(c.reportSafeIndex(6, 27) == -1); + assert(c.reportSafeIndex(6, 28) == -1); + assert(c.reportSafeIndex(6, 29) == -1); + assert(c.reportSafeIndex(6, 30) == -1); + assert(c.reportSafeIndex(6, 31) == -1); + assert(c.reportSafeIndex(6, 32) == -1); + assert(c.reportSafeIndex(6, 33) == -1); + assert(c.reportSafeIndex(6, 34) == -1); + assert(c.reportSafeIndex(6, 35) == -1); + assert(c.reportSafeIndex(6, 36) == -1); + assert(c.reportSafeIndex(6, 37) == -1); + assert(c.reportSafeIndex(6, 38) == -1); + assert(c.reportSafeIndex(6, 39) == -1); + assert(c.reportSafeIndex(6, 40) == -1); + assert(c.reportSafeIndex(6, 41) == -1); + assert(c.reportSafeIndex(7, -5) == -1); + assert(c.reportSafeIndex(7, -4) == -1); + assert(c.reportSafeIndex(7, -3) == -1); + assert(c.reportSafeIndex(7, -2) == -1); + assert(c.reportSafeIndex(7, -1) == -1); + assert(c.reportSafeIndex(7, 0) == -1); + assert(c.reportSafeIndex(7, 1) == -1); + assert(c.reportSafeIndex(7, 2) == -1); + assert(c.reportSafeIndex(7, 3) == -1); + assert(c.reportSafeIndex(7, 4) == -1); + assert(c.reportSafeIndex(7, 5) == -1); + assert(c.reportSafeIndex(7, 6) == -1); + assert(c.reportSafeIndex(7, 7) == -1); + assert(c.reportSafeIndex(7, 8) == -1); + assert(c.reportSafeIndex(7, 9) == -1); + assert(c.reportSafeIndex(7, 10) == -1); + assert(c.reportSafeIndex(7, 11) == -1); + assert(c.reportSafeIndex(7, 12) == -1); + assert(c.reportSafeIndex(7, 13) == -1); + assert(c.reportSafeIndex(7, 14) == -1); + assert(c.reportSafeIndex(7, 15) == -1); + assert(c.reportSafeIndex(7, 16) == -1); + assert(c.reportSafeIndex(7, 17) == -1); + assert(c.reportSafeIndex(7, 18) == -1); + assert(c.reportSafeIndex(7, 19) == -1); + assert(c.reportSafeIndex(7, 20) == -1); + assert(c.reportSafeIndex(7, 21) == -1); + assert(c.reportSafeIndex(7, 22) == -1); + assert(c.reportSafeIndex(7, 23) == -1); + assert(c.reportSafeIndex(7, 24) == -1); + assert(c.reportSafeIndex(7, 25) == -1); + assert(c.reportSafeIndex(7, 26) == -1); + assert(c.reportSafeIndex(7, 27) == -1); + assert(c.reportSafeIndex(7, 28) == -1); + assert(c.reportSafeIndex(7, 29) == -1); + assert(c.reportSafeIndex(7, 30) == -1); + assert(c.reportSafeIndex(7, 31) == -1); + assert(c.reportSafeIndex(7, 32) == -1); + assert(c.reportSafeIndex(7, 33) == -1); + assert(c.reportSafeIndex(7, 34) == -1); + assert(c.reportSafeIndex(7, 35) == -1); + assert(c.reportSafeIndex(7, 36) == -1); + assert(c.reportSafeIndex(7, 37) == -1); + assert(c.reportSafeIndex(7, 38) == -1); + assert(c.reportSafeIndex(7, 39) == -1); + assert(c.reportSafeIndex(7, 40) == -1); + assert(c.reportSafeIndex(7, 41) == -1); + assert(c.reportSafeIndex(8, -5) == -1); + assert(c.reportSafeIndex(8, -4) == -1); + assert(c.reportSafeIndex(8, -3) == -1); + assert(c.reportSafeIndex(8, -2) == -1); + assert(c.reportSafeIndex(8, -1) == -1); + assert(c.reportSafeIndex(8, 0) == -1); + assert(c.reportSafeIndex(8, 1) == -1); + assert(c.reportSafeIndex(8, 2) == -1); + assert(c.reportSafeIndex(8, 3) == -1); + assert(c.reportSafeIndex(8, 4) == -1); + assert(c.reportSafeIndex(8, 5) == -1); + assert(c.reportSafeIndex(8, 6) == -1); + assert(c.reportSafeIndex(8, 7) == -1); + assert(c.reportSafeIndex(8, 8) == -1); + assert(c.reportSafeIndex(8, 9) == -1); + assert(c.reportSafeIndex(8, 10) == -1); + assert(c.reportSafeIndex(8, 11) == -1); + assert(c.reportSafeIndex(8, 12) == -1); + assert(c.reportSafeIndex(8, 13) == -1); + assert(c.reportSafeIndex(8, 14) == -1); + assert(c.reportSafeIndex(8, 15) == -1); + assert(c.reportSafeIndex(8, 16) == -1); + assert(c.reportSafeIndex(8, 17) == -1); + assert(c.reportSafeIndex(8, 18) == -1); + assert(c.reportSafeIndex(8, 19) == -1); + assert(c.reportSafeIndex(8, 20) == -1); + assert(c.reportSafeIndex(8, 21) == -1); + assert(c.reportSafeIndex(8, 22) == -1); + assert(c.reportSafeIndex(8, 23) == -1); + assert(c.reportSafeIndex(8, 24) == -1); + assert(c.reportSafeIndex(8, 25) == -1); + assert(c.reportSafeIndex(8, 26) == -1); + assert(c.reportSafeIndex(8, 27) == -1); + assert(c.reportSafeIndex(8, 28) == -1); + assert(c.reportSafeIndex(8, 29) == -1); + assert(c.reportSafeIndex(8, 30) == -1); + assert(c.reportSafeIndex(8, 31) == -1); + assert(c.reportSafeIndex(8, 32) == -1); + assert(c.reportSafeIndex(8, 33) == -1); + assert(c.reportSafeIndex(8, 34) == -1); + assert(c.reportSafeIndex(8, 35) == -1); + assert(c.reportSafeIndex(8, 36) == -1); + assert(c.reportSafeIndex(8, 37) == -1); + assert(c.reportSafeIndex(8, 38) == -1); + assert(c.reportSafeIndex(8, 39) == -1); + assert(c.reportSafeIndex(8, 40) == -1); + assert(c.reportSafeIndex(8, 41) == -1); + assert(c.reportSafeIndex(9, -5) == -1); + assert(c.reportSafeIndex(9, -4) == -1); + assert(c.reportSafeIndex(9, -3) == -1); + assert(c.reportSafeIndex(9, -2) == -1); + assert(c.reportSafeIndex(9, -1) == -1); + assert(c.reportSafeIndex(9, 0) == -1); + assert(c.reportSafeIndex(9, 1) == -1); + assert(c.reportSafeIndex(9, 2) == -1); + assert(c.reportSafeIndex(9, 3) == -1); + assert(c.reportSafeIndex(9, 4) == -1); + assert(c.reportSafeIndex(9, 5) == -1); + assert(c.reportSafeIndex(9, 6) == -1); + assert(c.reportSafeIndex(9, 7) == -1); + assert(c.reportSafeIndex(9, 8) == -1); + assert(c.reportSafeIndex(9, 9) == -1); + assert(c.reportSafeIndex(9, 10) == -1); + assert(c.reportSafeIndex(9, 11) == -1); + assert(c.reportSafeIndex(9, 12) == -1); + assert(c.reportSafeIndex(9, 13) == -1); + assert(c.reportSafeIndex(9, 14) == -1); + assert(c.reportSafeIndex(9, 15) == -1); + assert(c.reportSafeIndex(9, 16) == -1); + assert(c.reportSafeIndex(9, 17) == -1); + assert(c.reportSafeIndex(9, 18) == -1); + assert(c.reportSafeIndex(9, 19) == -1); + assert(c.reportSafeIndex(9, 20) == -1); + assert(c.reportSafeIndex(9, 21) == -1); + assert(c.reportSafeIndex(9, 22) == -1); + assert(c.reportSafeIndex(9, 23) == -1); + assert(c.reportSafeIndex(9, 24) == -1); + assert(c.reportSafeIndex(9, 25) == -1); + assert(c.reportSafeIndex(9, 26) == -1); + assert(c.reportSafeIndex(9, 27) == -1); + assert(c.reportSafeIndex(9, 28) == -1); + assert(c.reportSafeIndex(9, 29) == -1); + assert(c.reportSafeIndex(9, 30) == -1); + assert(c.reportSafeIndex(9, 31) == -1); + assert(c.reportSafeIndex(9, 32) == -1); + assert(c.reportSafeIndex(9, 33) == -1); + assert(c.reportSafeIndex(9, 34) == -1); + assert(c.reportSafeIndex(9, 35) == -1); + assert(c.reportSafeIndex(9, 36) == -1); + assert(c.reportSafeIndex(9, 37) == -1); + assert(c.reportSafeIndex(9, 38) == -1); + assert(c.reportSafeIndex(9, 39) == -1); + assert(c.reportSafeIndex(9, 40) == -1); + assert(c.reportSafeIndex(9, 41) == -1); + assert(c.reportSafeIndex(10, -5) == -1); + assert(c.reportSafeIndex(10, -4) == -1); + assert(c.reportSafeIndex(10, -3) == -1); + assert(c.reportSafeIndex(10, -2) == -1); + assert(c.reportSafeIndex(10, -1) == -1); + assert(c.reportSafeIndex(10, 0) == -1); + assert(c.reportSafeIndex(10, 1) == 9); + assert(c.reportSafeIndex(10, 2) == 4); + assert(c.reportSafeIndex(10, 3) == 3); + assert(c.reportSafeIndex(10, 4) == 4); + assert(c.reportSafeIndex(10, 5) == 2); + assert(c.reportSafeIndex(10, 6) == 2); + assert(c.reportSafeIndex(10, 7) == 8); + assert(c.reportSafeIndex(10, 8) == 0); + assert(c.reportSafeIndex(10, 9) == 6); + assert(c.reportSafeIndex(10, 10) == 7); + assert(c.reportSafeIndex(10, 11) == 6); + assert(c.reportSafeIndex(10, 12) == 9); + assert(c.reportSafeIndex(10, 13) == 4); + assert(c.reportSafeIndex(10, 14) == 6); + assert(c.reportSafeIndex(10, 15) == 5); + assert(c.reportSafeIndex(10, 16) == 6); + assert(c.reportSafeIndex(10, 17) == 2); + assert(c.reportSafeIndex(10, 18) == 4); + assert(c.reportSafeIndex(10, 19) == 1); + assert(c.reportSafeIndex(10, 20) == 0); + assert(c.reportSafeIndex(10, 21) == 9); + assert(c.reportSafeIndex(10, 22) == 9); + assert(c.reportSafeIndex(10, 23) == 9); + assert(c.reportSafeIndex(10, 24) == 0); + assert(c.reportSafeIndex(10, 25) == 5); + assert(c.reportSafeIndex(10, 26) == 8); + assert(c.reportSafeIndex(10, 27) == 4); + assert(c.reportSafeIndex(10, 28) == 5); + assert(c.reportSafeIndex(10, 29) == 4); + assert(c.reportSafeIndex(10, 30) == 5); + assert(c.reportSafeIndex(10, 31) == 1); + assert(c.reportSafeIndex(10, 32) == 2); + assert(c.reportSafeIndex(10, 33) == 1); + assert(c.reportSafeIndex(10, 34) == 1); + assert(c.reportSafeIndex(10, 35) == 9); + assert(c.reportSafeIndex(10, 36) == 2); + assert(c.reportSafeIndex(10, 37) == 8); + assert(c.reportSafeIndex(10, 38) == 8); + assert(c.reportSafeIndex(10, 39) == 6); + assert(c.reportSafeIndex(10, 40) == 7); + assert(c.reportSafeIndex(10, 41) == 7); + assert(c.reportSafeIndex(11, -5) == -1); + assert(c.reportSafeIndex(11, -4) == -1); + assert(c.reportSafeIndex(11, -3) == -1); + assert(c.reportSafeIndex(11, -2) == -1); + assert(c.reportSafeIndex(11, -1) == -1); + assert(c.reportSafeIndex(11, 0) == -1); + assert(c.reportSafeIndex(11, 1) == 10); + assert(c.reportSafeIndex(11, 2) == 6); + assert(c.reportSafeIndex(11, 3) == 6); + assert(c.reportSafeIndex(11, 4) == 8); + assert(c.reportSafeIndex(11, 5) == 7); + assert(c.reportSafeIndex(11, 6) == 8); + assert(c.reportSafeIndex(11, 7) == 4); + assert(c.reportSafeIndex(11, 8) == 8); + assert(c.reportSafeIndex(11, 9) == 4); + assert(c.reportSafeIndex(11, 10) == 6); + assert(c.reportSafeIndex(11, 11) == 6); + assert(c.reportSafeIndex(11, 12) == 10); + assert(c.reportSafeIndex(11, 13) == 6); + assert(c.reportSafeIndex(11, 14) == 9); + assert(c.reportSafeIndex(11, 15) == 9); + assert(c.reportSafeIndex(11, 16) == 0); + assert(c.reportSafeIndex(11, 17) == 8); + assert(c.reportSafeIndex(11, 18) == 0); + assert(c.reportSafeIndex(11, 19) == 9); + assert(c.reportSafeIndex(11, 20) == 9); + assert(c.reportSafeIndex(11, 21) == 8); + assert(c.reportSafeIndex(11, 22) == 9); + assert(c.reportSafeIndex(11, 23) == 10); + assert(c.reportSafeIndex(11, 24) == 2); + assert(c.reportSafeIndex(11, 25) == 8); + assert(c.reportSafeIndex(11, 26) == 1); + assert(c.reportSafeIndex(11, 27) == 9); + assert(c.reportSafeIndex(11, 28) == 0); + assert(c.reportSafeIndex(11, 29) == 0); + assert(c.reportSafeIndex(11, 30) == 2); + assert(c.reportSafeIndex(11, 31) == 10); + assert(c.reportSafeIndex(11, 32) == 1); + assert(c.reportSafeIndex(11, 33) == 1); + assert(c.reportSafeIndex(11, 34) == 2); + assert(c.reportSafeIndex(11, 35) == 0); + assert(c.reportSafeIndex(11, 36) == 5); + assert(c.reportSafeIndex(11, 37) == 1); + assert(c.reportSafeIndex(11, 38) == 2); + assert(c.reportSafeIndex(11, 39) == 1); + assert(c.reportSafeIndex(11, 40) == 3); + assert(c.reportSafeIndex(11, 41) == 4); + assert(c.reportSafeIndex(12, -5) == -1); + assert(c.reportSafeIndex(12, -4) == -1); + assert(c.reportSafeIndex(12, -3) == -1); + assert(c.reportSafeIndex(12, -2) == -1); + assert(c.reportSafeIndex(12, -1) == -1); + assert(c.reportSafeIndex(12, 0) == -1); + assert(c.reportSafeIndex(12, 1) == 11); + assert(c.reportSafeIndex(12, 2) == 8); + assert(c.reportSafeIndex(12, 3) == 9); + assert(c.reportSafeIndex(12, 4) == 0); + assert(c.reportSafeIndex(12, 5) == 0); + assert(c.reportSafeIndex(12, 6) == 2); + assert(c.reportSafeIndex(12, 7) == 11); + assert(c.reportSafeIndex(12, 8) == 4); + assert(c.reportSafeIndex(12, 9) == 1); + assert(c.reportSafeIndex(12, 10) == 4); + assert(c.reportSafeIndex(12, 11) == 5); + assert(c.reportSafeIndex(12, 12) == 10); + assert(c.reportSafeIndex(12, 13) == 7); + assert(c.reportSafeIndex(12, 14) == 11); + assert(c.reportSafeIndex(12, 15) == 0); + assert(c.reportSafeIndex(12, 16) == 4); + assert(c.reportSafeIndex(12, 17) == 1); + assert(c.reportSafeIndex(12, 18) == 6); + assert(c.reportSafeIndex(12, 19) == 4); + assert(c.reportSafeIndex(12, 20) == 5); + assert(c.reportSafeIndex(12, 21) == 5); + assert(c.reportSafeIndex(12, 22) == 7); + assert(c.reportSafeIndex(12, 23) == 9); + assert(c.reportSafeIndex(12, 24) == 2); + assert(c.reportSafeIndex(12, 25) == 9); + assert(c.reportSafeIndex(12, 26) == 3); + assert(c.reportSafeIndex(12, 27) == 0); + assert(c.reportSafeIndex(12, 28) == 4); + assert(c.reportSafeIndex(12, 29) == 5); + assert(c.reportSafeIndex(12, 30) == 8); + assert(c.reportSafeIndex(12, 31) == 5); + assert(c.reportSafeIndex(12, 32) == 9); + assert(c.reportSafeIndex(12, 33) == 10); + assert(c.reportSafeIndex(12, 34) == 0); + assert(c.reportSafeIndex(12, 35) == 11); + assert(c.reportSafeIndex(12, 36) == 5); + assert(c.reportSafeIndex(12, 37) == 2); + assert(c.reportSafeIndex(12, 38) == 4); + assert(c.reportSafeIndex(12, 39) == 4); + assert(c.reportSafeIndex(12, 40) == 7); + assert(c.reportSafeIndex(12, 41) == 9); + assert(c.reportSafeIndex(13, -5) == -1); + assert(c.reportSafeIndex(13, -4) == -1); + assert(c.reportSafeIndex(13, -3) == -1); + assert(c.reportSafeIndex(13, -2) == -1); + assert(c.reportSafeIndex(13, -1) == -1); + assert(c.reportSafeIndex(13, 0) == -1); + assert(c.reportSafeIndex(13, 1) == 12); + assert(c.reportSafeIndex(13, 2) == 10); + assert(c.reportSafeIndex(13, 3) == 12); + assert(c.reportSafeIndex(13, 4) == 4); + assert(c.reportSafeIndex(13, 5) == 5); + assert(c.reportSafeIndex(13, 6) == 8); + assert(c.reportSafeIndex(13, 7) == 5); + assert(c.reportSafeIndex(13, 8) == 12); + assert(c.reportSafeIndex(13, 9) == 10); + assert(c.reportSafeIndex(13, 10) == 1); + assert(c.reportSafeIndex(13, 11) == 3); + assert(c.reportSafeIndex(13, 12) == 9); + assert(c.reportSafeIndex(13, 13) == 7); + assert(c.reportSafeIndex(13, 14) == 12); + assert(c.reportSafeIndex(13, 15) == 2); + assert(c.reportSafeIndex(13, 16) == 7); + assert(c.reportSafeIndex(13, 17) == 5); + assert(c.reportSafeIndex(13, 18) == 11); + assert(c.reportSafeIndex(13, 19) == 10); + assert(c.reportSafeIndex(13, 20) == 12); + assert(c.reportSafeIndex(13, 21) == 0); + assert(c.reportSafeIndex(13, 22) == 3); + assert(c.reportSafeIndex(13, 23) == 6); + assert(c.reportSafeIndex(13, 24) == 0); + assert(c.reportSafeIndex(13, 25) == 8); + assert(c.reportSafeIndex(13, 26) == 3); + assert(c.reportSafeIndex(13, 27) == 1); + assert(c.reportSafeIndex(13, 28) == 6); + assert(c.reportSafeIndex(13, 29) == 8); + assert(c.reportSafeIndex(13, 30) == 12); + assert(c.reportSafeIndex(13, 31) == 10); + assert(c.reportSafeIndex(13, 32) == 2); + assert(c.reportSafeIndex(13, 33) == 4); + assert(c.reportSafeIndex(13, 34) == 8); + assert(c.reportSafeIndex(13, 35) == 7); + assert(c.reportSafeIndex(13, 36) == 2); + assert(c.reportSafeIndex(13, 37) == 0); + assert(c.reportSafeIndex(13, 38) == 3); + assert(c.reportSafeIndex(13, 39) == 4); + assert(c.reportSafeIndex(13, 40) == 8); + assert(c.reportSafeIndex(13, 41) == 11); + assert(c.reportSafeIndex(14, -5) == -1); + assert(c.reportSafeIndex(14, -4) == -1); + assert(c.reportSafeIndex(14, -3) == -1); + assert(c.reportSafeIndex(14, -2) == -1); + assert(c.reportSafeIndex(14, -1) == -1); + assert(c.reportSafeIndex(14, 0) == -1); + assert(c.reportSafeIndex(14, 1) == 13); + assert(c.reportSafeIndex(14, 2) == 12); + assert(c.reportSafeIndex(14, 3) == 1); + assert(c.reportSafeIndex(14, 4) == 8); + assert(c.reportSafeIndex(14, 5) == 10); + assert(c.reportSafeIndex(14, 6) == 0); + assert(c.reportSafeIndex(14, 7) == 12); + assert(c.reportSafeIndex(14, 8) == 6); + assert(c.reportSafeIndex(14, 9) == 5); + assert(c.reportSafeIndex(14, 10) == 11); + assert(c.reportSafeIndex(14, 11) == 0); + assert(c.reportSafeIndex(14, 12) == 7); + assert(c.reportSafeIndex(14, 13) == 6); + assert(c.reportSafeIndex(14, 14) == 12); + assert(c.reportSafeIndex(14, 15) == 3); + assert(c.reportSafeIndex(14, 16) == 9); + assert(c.reportSafeIndex(14, 17) == 8); + assert(c.reportSafeIndex(14, 18) == 1); + assert(c.reportSafeIndex(14, 19) == 1); + assert(c.reportSafeIndex(14, 20) == 4); + assert(c.reportSafeIndex(14, 21) == 7); + assert(c.reportSafeIndex(14, 22) == 11); + assert(c.reportSafeIndex(14, 23) == 1); + assert(c.reportSafeIndex(14, 24) == 10); + assert(c.reportSafeIndex(14, 25) == 5); + assert(c.reportSafeIndex(14, 26) == 1); + assert(c.reportSafeIndex(14, 27) == 0); + assert(c.reportSafeIndex(14, 28) == 6); + assert(c.reportSafeIndex(14, 29) == 9); + assert(c.reportSafeIndex(14, 30) == 0); + assert(c.reportSafeIndex(14, 31) == 13); + assert(c.reportSafeIndex(14, 32) == 6); + assert(c.reportSafeIndex(14, 33) == 9); + assert(c.reportSafeIndex(14, 34) == 0); + assert(c.reportSafeIndex(14, 35) == 0); + assert(c.reportSafeIndex(14, 36) == 10); + assert(c.reportSafeIndex(14, 37) == 9); + assert(c.reportSafeIndex(14, 38) == 13); + assert(c.reportSafeIndex(14, 39) == 1); + assert(c.reportSafeIndex(14, 40) == 6); + assert(c.reportSafeIndex(14, 41) == 10); + assert(c.reportSafeIndex(15, -5) == -1); + assert(c.reportSafeIndex(15, -4) == -1); + assert(c.reportSafeIndex(15, -3) == -1); + assert(c.reportSafeIndex(15, -2) == -1); + assert(c.reportSafeIndex(15, -1) == -1); + assert(c.reportSafeIndex(15, 0) == -1); + assert(c.reportSafeIndex(15, 1) == 14); + assert(c.reportSafeIndex(15, 2) == 14); + assert(c.reportSafeIndex(15, 3) == 4); + assert(c.reportSafeIndex(15, 4) == 12); + assert(c.reportSafeIndex(15, 5) == 0); + assert(c.reportSafeIndex(15, 6) == 6); + assert(c.reportSafeIndex(15, 7) == 4); + assert(c.reportSafeIndex(15, 8) == 14); + assert(c.reportSafeIndex(15, 9) == 14); + assert(c.reportSafeIndex(15, 10) == 6); + assert(c.reportSafeIndex(15, 11) == 11); + assert(c.reportSafeIndex(15, 12) == 4); + assert(c.reportSafeIndex(15, 13) == 4); + assert(c.reportSafeIndex(15, 14) == 11); + assert(c.reportSafeIndex(15, 15) == 3); + assert(c.reportSafeIndex(15, 16) == 10); + assert(c.reportSafeIndex(15, 17) == 10); + assert(c.reportSafeIndex(15, 18) == 4); + assert(c.reportSafeIndex(15, 19) == 5); + assert(c.reportSafeIndex(15, 20) == 9); + assert(c.reportSafeIndex(15, 21) == 13); + assert(c.reportSafeIndex(15, 22) == 3); + assert(c.reportSafeIndex(15, 23) == 9); + assert(c.reportSafeIndex(15, 24) == 4); + assert(c.reportSafeIndex(15, 25) == 0); + assert(c.reportSafeIndex(15, 26) == 12); + assert(c.reportSafeIndex(15, 27) == 12); + assert(c.reportSafeIndex(15, 28) == 4); + assert(c.reportSafeIndex(15, 29) == 8); + assert(c.reportSafeIndex(15, 30) == 0); + assert(c.reportSafeIndex(15, 31) == 14); + assert(c.reportSafeIndex(15, 32) == 8); + assert(c.reportSafeIndex(15, 33) == 12); + assert(c.reportSafeIndex(15, 34) == 4); + assert(c.reportSafeIndex(15, 35) == 5); + assert(c.reportSafeIndex(15, 36) == 1); + assert(c.reportSafeIndex(15, 37) == 1); + assert(c.reportSafeIndex(15, 38) == 6); + assert(c.reportSafeIndex(15, 39) == 10); + assert(c.reportSafeIndex(15, 40) == 1); + assert(c.reportSafeIndex(15, 41) == 6); + assert(c.reportSafeIndex(16, -5) == -1); + assert(c.reportSafeIndex(16, -4) == -1); + assert(c.reportSafeIndex(16, -3) == -1); + assert(c.reportSafeIndex(16, -2) == -1); + assert(c.reportSafeIndex(16, -1) == -1); + assert(c.reportSafeIndex(16, 0) == -1); + assert(c.reportSafeIndex(16, 1) == 15); + assert(c.reportSafeIndex(16, 2) == 0); + assert(c.reportSafeIndex(16, 3) == 7); + assert(c.reportSafeIndex(16, 4) == 0); + assert(c.reportSafeIndex(16, 5) == 5); + assert(c.reportSafeIndex(16, 6) == 12); + assert(c.reportSafeIndex(16, 7) == 11); + assert(c.reportSafeIndex(16, 8) == 6); + assert(c.reportSafeIndex(16, 9) == 7); + assert(c.reportSafeIndex(16, 10) == 0); + assert(c.reportSafeIndex(16, 11) == 6); + assert(c.reportSafeIndex(16, 12) == 0); + assert(c.reportSafeIndex(16, 13) == 1); + assert(c.reportSafeIndex(16, 14) == 9); + assert(c.reportSafeIndex(16, 15) == 2); + assert(c.reportSafeIndex(16, 16) == 10); + assert(c.reportSafeIndex(16, 17) == 11); + assert(c.reportSafeIndex(16, 18) == 6); + assert(c.reportSafeIndex(16, 19) == 8); + assert(c.reportSafeIndex(16, 20) == 13); + assert(c.reportSafeIndex(16, 21) == 2); + assert(c.reportSafeIndex(16, 22) == 9); + assert(c.reportSafeIndex(16, 23) == 0); + assert(c.reportSafeIndex(16, 24) == 12); + assert(c.reportSafeIndex(16, 25) == 9); + assert(c.reportSafeIndex(16, 26) == 6); + assert(c.reportSafeIndex(16, 27) == 7); + assert(c.reportSafeIndex(16, 28) == 0); + assert(c.reportSafeIndex(16, 29) == 5); + assert(c.reportSafeIndex(16, 30) == 14); + assert(c.reportSafeIndex(16, 31) == 13); + assert(c.reportSafeIndex(16, 32) == 8); + assert(c.reportSafeIndex(16, 33) == 13); + assert(c.reportSafeIndex(16, 34) == 6); + assert(c.reportSafeIndex(16, 35) == 8); + assert(c.reportSafeIndex(16, 36) == 5); + assert(c.reportSafeIndex(16, 37) == 6); + assert(c.reportSafeIndex(16, 38) == 12); + assert(c.reportSafeIndex(16, 39) == 1); + assert(c.reportSafeIndex(16, 40) == 9); + assert(c.reportSafeIndex(16, 41) == 15); + assert(c.reportSafeIndex(17, -5) == -1); + assert(c.reportSafeIndex(17, -4) == -1); + assert(c.reportSafeIndex(17, -3) == -1); + assert(c.reportSafeIndex(17, -2) == -1); + assert(c.reportSafeIndex(17, -1) == -1); + assert(c.reportSafeIndex(17, 0) == -1); + assert(c.reportSafeIndex(17, 1) == 16); + assert(c.reportSafeIndex(17, 2) == 2); + assert(c.reportSafeIndex(17, 3) == 10); + assert(c.reportSafeIndex(17, 4) == 4); + assert(c.reportSafeIndex(17, 5) == 10); + assert(c.reportSafeIndex(17, 6) == 1); + assert(c.reportSafeIndex(17, 7) == 1); + assert(c.reportSafeIndex(17, 8) == 14); + assert(c.reportSafeIndex(17, 9) == 16); + assert(c.reportSafeIndex(17, 10) == 10); + assert(c.reportSafeIndex(17, 11) == 0); + assert(c.reportSafeIndex(17, 12) == 12); + assert(c.reportSafeIndex(17, 13) == 14); + assert(c.reportSafeIndex(17, 14) == 6); + assert(c.reportSafeIndex(17, 15) == 0); + assert(c.reportSafeIndex(17, 16) == 9); + assert(c.reportSafeIndex(17, 17) == 11); + assert(c.reportSafeIndex(17, 18) == 7); + assert(c.reportSafeIndex(17, 19) == 10); + assert(c.reportSafeIndex(17, 20) == 16); + assert(c.reportSafeIndex(17, 21) == 6); + assert(c.reportSafeIndex(17, 22) == 14); + assert(c.reportSafeIndex(17, 23) == 6); + assert(c.reportSafeIndex(17, 24) == 2); + assert(c.reportSafeIndex(17, 25) == 0); + assert(c.reportSafeIndex(17, 26) == 15); + assert(c.reportSafeIndex(17, 27) == 0); + assert(c.reportSafeIndex(17, 28) == 11); + assert(c.reportSafeIndex(17, 29) == 0); + assert(c.reportSafeIndex(17, 30) == 10); + assert(c.reportSafeIndex(17, 31) == 10); + assert(c.reportSafeIndex(17, 32) == 6); + assert(c.reportSafeIndex(17, 33) == 12); + assert(c.reportSafeIndex(17, 34) == 6); + assert(c.reportSafeIndex(17, 35) == 9); + assert(c.reportSafeIndex(17, 36) == 7); + assert(c.reportSafeIndex(17, 37) == 9); + assert(c.reportSafeIndex(17, 38) == 16); + assert(c.reportSafeIndex(17, 39) == 6); + assert(c.reportSafeIndex(17, 40) == 15); + assert(c.reportSafeIndex(17, 41) == 5); + assert(c.reportSafeIndex(18, -5) == -1); + assert(c.reportSafeIndex(18, -4) == -1); + assert(c.reportSafeIndex(18, -3) == -1); + assert(c.reportSafeIndex(18, -2) == -1); + assert(c.reportSafeIndex(18, -1) == -1); + assert(c.reportSafeIndex(18, 0) == -1); + assert(c.reportSafeIndex(18, 1) == 17); + assert(c.reportSafeIndex(18, 2) == 4); + assert(c.reportSafeIndex(18, 3) == 13); + assert(c.reportSafeIndex(18, 4) == 8); + assert(c.reportSafeIndex(18, 5) == 15); + assert(c.reportSafeIndex(18, 6) == 7); + assert(c.reportSafeIndex(18, 7) == 8); + assert(c.reportSafeIndex(18, 8) == 4); + assert(c.reportSafeIndex(18, 9) == 7); + assert(c.reportSafeIndex(18, 10) == 2); + assert(c.reportSafeIndex(18, 11) == 11); + assert(c.reportSafeIndex(18, 12) == 6); + assert(c.reportSafeIndex(18, 13) == 9); + assert(c.reportSafeIndex(18, 14) == 2); + assert(c.reportSafeIndex(18, 15) == 15); + assert(c.reportSafeIndex(18, 16) == 7); + assert(c.reportSafeIndex(18, 17) == 10); + assert(c.reportSafeIndex(18, 18) == 7); + assert(c.reportSafeIndex(18, 19) == 11); + assert(c.reportSafeIndex(18, 20) == 0); + assert(c.reportSafeIndex(18, 21) == 9); + assert(c.reportSafeIndex(18, 22) == 0); + assert(c.reportSafeIndex(18, 23) == 11); + assert(c.reportSafeIndex(18, 24) == 8); + assert(c.reportSafeIndex(18, 25) == 7); + assert(c.reportSafeIndex(18, 26) == 5); + assert(c.reportSafeIndex(18, 27) == 9); + assert(c.reportSafeIndex(18, 28) == 3); + assert(c.reportSafeIndex(18, 29) == 11); + assert(c.reportSafeIndex(18, 30) == 4); + assert(c.reportSafeIndex(18, 31) == 5); + assert(c.reportSafeIndex(18, 32) == 2); + assert(c.reportSafeIndex(18, 33) == 9); + assert(c.reportSafeIndex(18, 34) == 4); + assert(c.reportSafeIndex(18, 35) == 8); + assert(c.reportSafeIndex(18, 36) == 7); + assert(c.reportSafeIndex(18, 37) == 10); + assert(c.reportSafeIndex(18, 38) == 0); + assert(c.reportSafeIndex(18, 39) == 9); + assert(c.reportSafeIndex(18, 40) == 1); + assert(c.reportSafeIndex(18, 41) == 10); + assert(c.reportSafeIndex(19, -5) == -1); + assert(c.reportSafeIndex(19, -4) == -1); + assert(c.reportSafeIndex(19, -3) == -1); + assert(c.reportSafeIndex(19, -2) == -1); + assert(c.reportSafeIndex(19, -1) == -1); + assert(c.reportSafeIndex(19, 0) == -1); + assert(c.reportSafeIndex(19, 1) == 18); + assert(c.reportSafeIndex(19, 2) == 6); + assert(c.reportSafeIndex(19, 3) == 16); + assert(c.reportSafeIndex(19, 4) == 12); + assert(c.reportSafeIndex(19, 5) == 1); + assert(c.reportSafeIndex(19, 6) == 13); + assert(c.reportSafeIndex(19, 7) == 15); + assert(c.reportSafeIndex(19, 8) == 12); + assert(c.reportSafeIndex(19, 9) == 16); + assert(c.reportSafeIndex(19, 10) == 12); + assert(c.reportSafeIndex(19, 11) == 3); + assert(c.reportSafeIndex(19, 12) == 18); + assert(c.reportSafeIndex(19, 13) == 3); + assert(c.reportSafeIndex(19, 14) == 16); + assert(c.reportSafeIndex(19, 15) == 11); + assert(c.reportSafeIndex(19, 16) == 4); + assert(c.reportSafeIndex(19, 17) == 8); + assert(c.reportSafeIndex(19, 18) == 6); + assert(c.reportSafeIndex(19, 19) == 11); + assert(c.reportSafeIndex(19, 20) == 1); + assert(c.reportSafeIndex(19, 21) == 11); + assert(c.reportSafeIndex(19, 22) == 3); + assert(c.reportSafeIndex(19, 23) == 15); + assert(c.reportSafeIndex(19, 24) == 13); + assert(c.reportSafeIndex(19, 25) == 13); + assert(c.reportSafeIndex(19, 26) == 12); + assert(c.reportSafeIndex(19, 27) == 17); + assert(c.reportSafeIndex(19, 28) == 12); + assert(c.reportSafeIndex(19, 29) == 2); + assert(c.reportSafeIndex(19, 30) == 15); + assert(c.reportSafeIndex(19, 31) == 17); + assert(c.reportSafeIndex(19, 32) == 15); + assert(c.reportSafeIndex(19, 33) == 4); + assert(c.reportSafeIndex(19, 34) == 0); + assert(c.reportSafeIndex(19, 35) == 5); + assert(c.reportSafeIndex(19, 36) == 5); + assert(c.reportSafeIndex(19, 37) == 9); + assert(c.reportSafeIndex(19, 38) == 0); + assert(c.reportSafeIndex(19, 39) == 10); + assert(c.reportSafeIndex(19, 40) == 3); + assert(c.reportSafeIndex(19, 41) == 13); + assert(c.reportSafeIndex(20, -5) == -1); + assert(c.reportSafeIndex(20, -4) == -1); + assert(c.reportSafeIndex(20, -3) == -1); + assert(c.reportSafeIndex(20, -2) == -1); + assert(c.reportSafeIndex(20, -1) == -1); + assert(c.reportSafeIndex(20, 0) == -1); + assert(c.reportSafeIndex(20, 1) == 19); + assert(c.reportSafeIndex(20, 2) == 8); + assert(c.reportSafeIndex(20, 3) == 19); + assert(c.reportSafeIndex(20, 4) == 16); + assert(c.reportSafeIndex(20, 5) == 6); + assert(c.reportSafeIndex(20, 6) == 19); + assert(c.reportSafeIndex(20, 7) == 2); + assert(c.reportSafeIndex(20, 8) == 0); + assert(c.reportSafeIndex(20, 9) == 5); + assert(c.reportSafeIndex(20, 10) == 2); + assert(c.reportSafeIndex(20, 11) == 14); + assert(c.reportSafeIndex(20, 12) == 10); + assert(c.reportSafeIndex(20, 13) == 16); + assert(c.reportSafeIndex(20, 14) == 10); + assert(c.reportSafeIndex(20, 15) == 6); + assert(c.reportSafeIndex(20, 16) == 0); + assert(c.reportSafeIndex(20, 17) == 5); + assert(c.reportSafeIndex(20, 18) == 4); + assert(c.reportSafeIndex(20, 19) == 10); + assert(c.reportSafeIndex(20, 20) == 1); + assert(c.reportSafeIndex(20, 21) == 12); + assert(c.reportSafeIndex(20, 22) == 5); + assert(c.reportSafeIndex(20, 23) == 18); + assert(c.reportSafeIndex(20, 24) == 17); + assert(c.reportSafeIndex(20, 25) == 18); + assert(c.reportSafeIndex(20, 26) == 18); + assert(c.reportSafeIndex(20, 27) == 4); + assert(c.reportSafeIndex(20, 28) == 0); + assert(c.reportSafeIndex(20, 29) == 11); + assert(c.reportSafeIndex(20, 30) == 5); + assert(c.reportSafeIndex(20, 31) == 8); + assert(c.reportSafeIndex(20, 32) == 7); + assert(c.reportSafeIndex(20, 33) == 17); + assert(c.reportSafeIndex(20, 34) == 14); + assert(c.reportSafeIndex(20, 35) == 0); + assert(c.reportSafeIndex(20, 36) == 1); + assert(c.reportSafeIndex(20, 37) == 6); + assert(c.reportSafeIndex(20, 38) == 18); + assert(c.reportSafeIndex(20, 39) == 9); + assert(c.reportSafeIndex(20, 40) == 3); + assert(c.reportSafeIndex(20, 41) == 14); + assert(c.reportSafeIndex(21, -5) == -1); + assert(c.reportSafeIndex(21, -4) == -1); + assert(c.reportSafeIndex(21, -3) == -1); + assert(c.reportSafeIndex(21, -2) == -1); + assert(c.reportSafeIndex(21, -1) == -1); + assert(c.reportSafeIndex(21, 0) == -1); + assert(c.reportSafeIndex(21, 1) == -1); + assert(c.reportSafeIndex(21, 2) == -1); + assert(c.reportSafeIndex(21, 3) == -1); + assert(c.reportSafeIndex(21, 4) == -1); + assert(c.reportSafeIndex(21, 5) == -1); + assert(c.reportSafeIndex(21, 6) == -1); + assert(c.reportSafeIndex(21, 7) == -1); + assert(c.reportSafeIndex(21, 8) == -1); + assert(c.reportSafeIndex(21, 9) == -1); + assert(c.reportSafeIndex(21, 10) == -1); + assert(c.reportSafeIndex(21, 11) == -1); + assert(c.reportSafeIndex(21, 12) == -1); + assert(c.reportSafeIndex(21, 13) == -1); + assert(c.reportSafeIndex(21, 14) == -1); + assert(c.reportSafeIndex(21, 15) == -1); + assert(c.reportSafeIndex(21, 16) == -1); + assert(c.reportSafeIndex(21, 17) == -1); + assert(c.reportSafeIndex(21, 18) == -1); + assert(c.reportSafeIndex(21, 19) == -1); + assert(c.reportSafeIndex(21, 20) == -1); + assert(c.reportSafeIndex(21, 21) == -1); + assert(c.reportSafeIndex(21, 22) == -1); + assert(c.reportSafeIndex(21, 23) == -1); + assert(c.reportSafeIndex(21, 24) == -1); + assert(c.reportSafeIndex(21, 25) == -1); + assert(c.reportSafeIndex(21, 26) == -1); + assert(c.reportSafeIndex(21, 27) == -1); + assert(c.reportSafeIndex(21, 28) == -1); + assert(c.reportSafeIndex(21, 29) == -1); + assert(c.reportSafeIndex(21, 30) == -1); + assert(c.reportSafeIndex(21, 31) == -1); + assert(c.reportSafeIndex(21, 32) == -1); + assert(c.reportSafeIndex(21, 33) == -1); + assert(c.reportSafeIndex(21, 34) == -1); + assert(c.reportSafeIndex(21, 35) == -1); + assert(c.reportSafeIndex(21, 36) == -1); + assert(c.reportSafeIndex(21, 37) == -1); + assert(c.reportSafeIndex(21, 38) == -1); + assert(c.reportSafeIndex(21, 39) == -1); + assert(c.reportSafeIndex(21, 40) == -1); + assert(c.reportSafeIndex(21, 41) == -1); + assert(c.reportSafeIndex(22, -5) == -1); + assert(c.reportSafeIndex(22, -4) == -1); + assert(c.reportSafeIndex(22, -3) == -1); + assert(c.reportSafeIndex(22, -2) == -1); + assert(c.reportSafeIndex(22, -1) == -1); + assert(c.reportSafeIndex(22, 0) == -1); + assert(c.reportSafeIndex(22, 1) == -1); + assert(c.reportSafeIndex(22, 2) == -1); + assert(c.reportSafeIndex(22, 3) == -1); + assert(c.reportSafeIndex(22, 4) == -1); + assert(c.reportSafeIndex(22, 5) == -1); + assert(c.reportSafeIndex(22, 6) == -1); + assert(c.reportSafeIndex(22, 7) == -1); + assert(c.reportSafeIndex(22, 8) == -1); + assert(c.reportSafeIndex(22, 9) == -1); + assert(c.reportSafeIndex(22, 10) == -1); + assert(c.reportSafeIndex(22, 11) == -1); + assert(c.reportSafeIndex(22, 12) == -1); + assert(c.reportSafeIndex(22, 13) == -1); + assert(c.reportSafeIndex(22, 14) == -1); + assert(c.reportSafeIndex(22, 15) == -1); + assert(c.reportSafeIndex(22, 16) == -1); + assert(c.reportSafeIndex(22, 17) == -1); + assert(c.reportSafeIndex(22, 18) == -1); + assert(c.reportSafeIndex(22, 19) == -1); + assert(c.reportSafeIndex(22, 20) == -1); + assert(c.reportSafeIndex(22, 21) == -1); + assert(c.reportSafeIndex(22, 22) == -1); + assert(c.reportSafeIndex(22, 23) == -1); + assert(c.reportSafeIndex(22, 24) == -1); + assert(c.reportSafeIndex(22, 25) == -1); + assert(c.reportSafeIndex(22, 26) == -1); + assert(c.reportSafeIndex(22, 27) == -1); + assert(c.reportSafeIndex(22, 28) == -1); + assert(c.reportSafeIndex(22, 29) == -1); + assert(c.reportSafeIndex(22, 30) == -1); + assert(c.reportSafeIndex(22, 31) == -1); + assert(c.reportSafeIndex(22, 32) == -1); + assert(c.reportSafeIndex(22, 33) == -1); + assert(c.reportSafeIndex(22, 34) == -1); + assert(c.reportSafeIndex(22, 35) == -1); + assert(c.reportSafeIndex(22, 36) == -1); + assert(c.reportSafeIndex(22, 37) == -1); + assert(c.reportSafeIndex(22, 38) == -1); + assert(c.reportSafeIndex(22, 39) == -1); + assert(c.reportSafeIndex(22, 40) == -1); + assert(c.reportSafeIndex(22, 41) == -1); + assert(c.reportSafeIndex(23, -5) == -1); + assert(c.reportSafeIndex(23, -4) == -1); + assert(c.reportSafeIndex(23, -3) == -1); + assert(c.reportSafeIndex(23, -2) == -1); + assert(c.reportSafeIndex(23, -1) == -1); + assert(c.reportSafeIndex(23, 0) == -1); + assert(c.reportSafeIndex(23, 1) == -1); + assert(c.reportSafeIndex(23, 2) == -1); + assert(c.reportSafeIndex(23, 3) == -1); + assert(c.reportSafeIndex(23, 4) == -1); + assert(c.reportSafeIndex(23, 5) == -1); + assert(c.reportSafeIndex(23, 6) == -1); + assert(c.reportSafeIndex(23, 7) == -1); + assert(c.reportSafeIndex(23, 8) == -1); + assert(c.reportSafeIndex(23, 9) == -1); + assert(c.reportSafeIndex(23, 10) == -1); + assert(c.reportSafeIndex(23, 11) == -1); + assert(c.reportSafeIndex(23, 12) == -1); + assert(c.reportSafeIndex(23, 13) == -1); + assert(c.reportSafeIndex(23, 14) == -1); + assert(c.reportSafeIndex(23, 15) == -1); + assert(c.reportSafeIndex(23, 16) == -1); + assert(c.reportSafeIndex(23, 17) == -1); + assert(c.reportSafeIndex(23, 18) == -1); + assert(c.reportSafeIndex(23, 19) == -1); + assert(c.reportSafeIndex(23, 20) == -1); + assert(c.reportSafeIndex(23, 21) == -1); + assert(c.reportSafeIndex(23, 22) == -1); + assert(c.reportSafeIndex(23, 23) == -1); + assert(c.reportSafeIndex(23, 24) == -1); + assert(c.reportSafeIndex(23, 25) == -1); + assert(c.reportSafeIndex(23, 26) == -1); + assert(c.reportSafeIndex(23, 27) == -1); + assert(c.reportSafeIndex(23, 28) == -1); + assert(c.reportSafeIndex(23, 29) == -1); + assert(c.reportSafeIndex(23, 30) == -1); + assert(c.reportSafeIndex(23, 31) == -1); + assert(c.reportSafeIndex(23, 32) == -1); + assert(c.reportSafeIndex(23, 33) == -1); + assert(c.reportSafeIndex(23, 34) == -1); + assert(c.reportSafeIndex(23, 35) == -1); + assert(c.reportSafeIndex(23, 36) == -1); + assert(c.reportSafeIndex(23, 37) == -1); + assert(c.reportSafeIndex(23, 38) == -1); + assert(c.reportSafeIndex(23, 39) == -1); + assert(c.reportSafeIndex(23, 40) == -1); + assert(c.reportSafeIndex(23, 41) == -1); + assert(c.reportSafeIndex(24, -5) == -1); + assert(c.reportSafeIndex(24, -4) == -1); + assert(c.reportSafeIndex(24, -3) == -1); + assert(c.reportSafeIndex(24, -2) == -1); + assert(c.reportSafeIndex(24, -1) == -1); + assert(c.reportSafeIndex(24, 0) == -1); + assert(c.reportSafeIndex(24, 1) == -1); + assert(c.reportSafeIndex(24, 2) == -1); + assert(c.reportSafeIndex(24, 3) == -1); + assert(c.reportSafeIndex(24, 4) == -1); + assert(c.reportSafeIndex(24, 5) == -1); + assert(c.reportSafeIndex(24, 6) == -1); + assert(c.reportSafeIndex(24, 7) == -1); + assert(c.reportSafeIndex(24, 8) == -1); + assert(c.reportSafeIndex(24, 9) == -1); + assert(c.reportSafeIndex(24, 10) == -1); + assert(c.reportSafeIndex(24, 11) == -1); + assert(c.reportSafeIndex(24, 12) == -1); + assert(c.reportSafeIndex(24, 13) == -1); + assert(c.reportSafeIndex(24, 14) == -1); + assert(c.reportSafeIndex(24, 15) == -1); + assert(c.reportSafeIndex(24, 16) == -1); + assert(c.reportSafeIndex(24, 17) == -1); + assert(c.reportSafeIndex(24, 18) == -1); + assert(c.reportSafeIndex(24, 19) == -1); + assert(c.reportSafeIndex(24, 20) == -1); + assert(c.reportSafeIndex(24, 21) == -1); + assert(c.reportSafeIndex(24, 22) == -1); + assert(c.reportSafeIndex(24, 23) == -1); + assert(c.reportSafeIndex(24, 24) == -1); + assert(c.reportSafeIndex(24, 25) == -1); + assert(c.reportSafeIndex(24, 26) == -1); + assert(c.reportSafeIndex(24, 27) == -1); + assert(c.reportSafeIndex(24, 28) == -1); + assert(c.reportSafeIndex(24, 29) == -1); + assert(c.reportSafeIndex(24, 30) == -1); + assert(c.reportSafeIndex(24, 31) == -1); + assert(c.reportSafeIndex(24, 32) == -1); + assert(c.reportSafeIndex(24, 33) == -1); + assert(c.reportSafeIndex(24, 34) == -1); + assert(c.reportSafeIndex(24, 35) == -1); + assert(c.reportSafeIndex(24, 36) == -1); + assert(c.reportSafeIndex(24, 37) == -1); + assert(c.reportSafeIndex(24, 38) == -1); + assert(c.reportSafeIndex(24, 39) == -1); + assert(c.reportSafeIndex(24, 40) == -1); + assert(c.reportSafeIndex(24, 41) == -1); + assert(c.reportSafeIndex(25, -5) == -1); + assert(c.reportSafeIndex(25, -4) == -1); + assert(c.reportSafeIndex(25, -3) == -1); + assert(c.reportSafeIndex(25, -2) == -1); + assert(c.reportSafeIndex(25, -1) == -1); + assert(c.reportSafeIndex(25, 0) == -1); + assert(c.reportSafeIndex(25, 1) == -1); + assert(c.reportSafeIndex(25, 2) == -1); + assert(c.reportSafeIndex(25, 3) == -1); + assert(c.reportSafeIndex(25, 4) == -1); + assert(c.reportSafeIndex(25, 5) == -1); + assert(c.reportSafeIndex(25, 6) == -1); + assert(c.reportSafeIndex(25, 7) == -1); + assert(c.reportSafeIndex(25, 8) == -1); + assert(c.reportSafeIndex(25, 9) == -1); + assert(c.reportSafeIndex(25, 10) == -1); + assert(c.reportSafeIndex(25, 11) == -1); + assert(c.reportSafeIndex(25, 12) == -1); + assert(c.reportSafeIndex(25, 13) == -1); + assert(c.reportSafeIndex(25, 14) == -1); + assert(c.reportSafeIndex(25, 15) == -1); + assert(c.reportSafeIndex(25, 16) == -1); + assert(c.reportSafeIndex(25, 17) == -1); + assert(c.reportSafeIndex(25, 18) == -1); + assert(c.reportSafeIndex(25, 19) == -1); + assert(c.reportSafeIndex(25, 20) == -1); + assert(c.reportSafeIndex(25, 21) == -1); + assert(c.reportSafeIndex(25, 22) == -1); + assert(c.reportSafeIndex(25, 23) == -1); + assert(c.reportSafeIndex(25, 24) == -1); + assert(c.reportSafeIndex(25, 25) == -1); + assert(c.reportSafeIndex(25, 26) == -1); + assert(c.reportSafeIndex(25, 27) == -1); + assert(c.reportSafeIndex(25, 28) == -1); + assert(c.reportSafeIndex(25, 29) == -1); + assert(c.reportSafeIndex(25, 30) == -1); + assert(c.reportSafeIndex(25, 31) == -1); + assert(c.reportSafeIndex(25, 32) == -1); + assert(c.reportSafeIndex(25, 33) == -1); + assert(c.reportSafeIndex(25, 34) == -1); + assert(c.reportSafeIndex(25, 35) == -1); + assert(c.reportSafeIndex(25, 36) == -1); + assert(c.reportSafeIndex(25, 37) == -1); + assert(c.reportSafeIndex(25, 38) == -1); + assert(c.reportSafeIndex(25, 39) == -1); + assert(c.reportSafeIndex(25, 40) == -1); + assert(c.reportSafeIndex(25, 41) == -1); + assert(c.reportSafeIndex(26, -5) == -1); + assert(c.reportSafeIndex(26, -4) == -1); + assert(c.reportSafeIndex(26, -3) == -1); + assert(c.reportSafeIndex(26, -2) == -1); + assert(c.reportSafeIndex(26, -1) == -1); + assert(c.reportSafeIndex(26, 0) == -1); + assert(c.reportSafeIndex(26, 1) == -1); + assert(c.reportSafeIndex(26, 2) == -1); + assert(c.reportSafeIndex(26, 3) == -1); + assert(c.reportSafeIndex(26, 4) == -1); + assert(c.reportSafeIndex(26, 5) == -1); + assert(c.reportSafeIndex(26, 6) == -1); + assert(c.reportSafeIndex(26, 7) == -1); + assert(c.reportSafeIndex(26, 8) == -1); + assert(c.reportSafeIndex(26, 9) == -1); + assert(c.reportSafeIndex(26, 10) == -1); + assert(c.reportSafeIndex(26, 11) == -1); + assert(c.reportSafeIndex(26, 12) == -1); + assert(c.reportSafeIndex(26, 13) == -1); + assert(c.reportSafeIndex(26, 14) == -1); + assert(c.reportSafeIndex(26, 15) == -1); + assert(c.reportSafeIndex(26, 16) == -1); + assert(c.reportSafeIndex(26, 17) == -1); + assert(c.reportSafeIndex(26, 18) == -1); + assert(c.reportSafeIndex(26, 19) == -1); + assert(c.reportSafeIndex(26, 20) == -1); + assert(c.reportSafeIndex(26, 21) == -1); + assert(c.reportSafeIndex(26, 22) == -1); + assert(c.reportSafeIndex(26, 23) == -1); + assert(c.reportSafeIndex(26, 24) == -1); + assert(c.reportSafeIndex(26, 25) == -1); + assert(c.reportSafeIndex(26, 26) == -1); + assert(c.reportSafeIndex(26, 27) == -1); + assert(c.reportSafeIndex(26, 28) == -1); + assert(c.reportSafeIndex(26, 29) == -1); + assert(c.reportSafeIndex(26, 30) == -1); + assert(c.reportSafeIndex(26, 31) == -1); + assert(c.reportSafeIndex(26, 32) == -1); + assert(c.reportSafeIndex(26, 33) == -1); + assert(c.reportSafeIndex(26, 34) == -1); + assert(c.reportSafeIndex(26, 35) == -1); + assert(c.reportSafeIndex(26, 36) == -1); + assert(c.reportSafeIndex(26, 37) == -1); + assert(c.reportSafeIndex(26, 38) == -1); + assert(c.reportSafeIndex(26, 39) == -1); + assert(c.reportSafeIndex(26, 40) == -1); + assert(c.reportSafeIndex(26, 41) == -1); + assert(c.reportSafeIndex(27, -5) == -1); + assert(c.reportSafeIndex(27, -4) == -1); + assert(c.reportSafeIndex(27, -3) == -1); + assert(c.reportSafeIndex(27, -2) == -1); + assert(c.reportSafeIndex(27, -1) == -1); + assert(c.reportSafeIndex(27, 0) == -1); + assert(c.reportSafeIndex(27, 1) == -1); + assert(c.reportSafeIndex(27, 2) == -1); + assert(c.reportSafeIndex(27, 3) == -1); + assert(c.reportSafeIndex(27, 4) == -1); + assert(c.reportSafeIndex(27, 5) == -1); + assert(c.reportSafeIndex(27, 6) == -1); + assert(c.reportSafeIndex(27, 7) == -1); + assert(c.reportSafeIndex(27, 8) == -1); + assert(c.reportSafeIndex(27, 9) == -1); + assert(c.reportSafeIndex(27, 10) == -1); + assert(c.reportSafeIndex(27, 11) == -1); + assert(c.reportSafeIndex(27, 12) == -1); + assert(c.reportSafeIndex(27, 13) == -1); + assert(c.reportSafeIndex(27, 14) == -1); + assert(c.reportSafeIndex(27, 15) == -1); + assert(c.reportSafeIndex(27, 16) == -1); + assert(c.reportSafeIndex(27, 17) == -1); + assert(c.reportSafeIndex(27, 18) == -1); + assert(c.reportSafeIndex(27, 19) == -1); + assert(c.reportSafeIndex(27, 20) == -1); + assert(c.reportSafeIndex(27, 21) == -1); + assert(c.reportSafeIndex(27, 22) == -1); + assert(c.reportSafeIndex(27, 23) == -1); + assert(c.reportSafeIndex(27, 24) == -1); + assert(c.reportSafeIndex(27, 25) == -1); + assert(c.reportSafeIndex(27, 26) == -1); + assert(c.reportSafeIndex(27, 27) == -1); + assert(c.reportSafeIndex(27, 28) == -1); + assert(c.reportSafeIndex(27, 29) == -1); + assert(c.reportSafeIndex(27, 30) == -1); + assert(c.reportSafeIndex(27, 31) == -1); + assert(c.reportSafeIndex(27, 32) == -1); + assert(c.reportSafeIndex(27, 33) == -1); + assert(c.reportSafeIndex(27, 34) == -1); + assert(c.reportSafeIndex(27, 35) == -1); + assert(c.reportSafeIndex(27, 36) == -1); + assert(c.reportSafeIndex(27, 37) == -1); + assert(c.reportSafeIndex(27, 38) == -1); + assert(c.reportSafeIndex(27, 39) == -1); + assert(c.reportSafeIndex(27, 40) == -1); + assert(c.reportSafeIndex(27, 41) == -1); + assert(c.reportSafeIndex(28, -5) == -1); + assert(c.reportSafeIndex(28, -4) == -1); + assert(c.reportSafeIndex(28, -3) == -1); + assert(c.reportSafeIndex(28, -2) == -1); + assert(c.reportSafeIndex(28, -1) == -1); + assert(c.reportSafeIndex(28, 0) == -1); + assert(c.reportSafeIndex(28, 1) == -1); + assert(c.reportSafeIndex(28, 2) == -1); + assert(c.reportSafeIndex(28, 3) == -1); + assert(c.reportSafeIndex(28, 4) == -1); + assert(c.reportSafeIndex(28, 5) == -1); + assert(c.reportSafeIndex(28, 6) == -1); + assert(c.reportSafeIndex(28, 7) == -1); + assert(c.reportSafeIndex(28, 8) == -1); + assert(c.reportSafeIndex(28, 9) == -1); + assert(c.reportSafeIndex(28, 10) == -1); + assert(c.reportSafeIndex(28, 11) == -1); + assert(c.reportSafeIndex(28, 12) == -1); + assert(c.reportSafeIndex(28, 13) == -1); + assert(c.reportSafeIndex(28, 14) == -1); + assert(c.reportSafeIndex(28, 15) == -1); + assert(c.reportSafeIndex(28, 16) == -1); + assert(c.reportSafeIndex(28, 17) == -1); + assert(c.reportSafeIndex(28, 18) == -1); + assert(c.reportSafeIndex(28, 19) == -1); + assert(c.reportSafeIndex(28, 20) == -1); + assert(c.reportSafeIndex(28, 21) == -1); + assert(c.reportSafeIndex(28, 22) == -1); + assert(c.reportSafeIndex(28, 23) == -1); + assert(c.reportSafeIndex(28, 24) == -1); + assert(c.reportSafeIndex(28, 25) == -1); + assert(c.reportSafeIndex(28, 26) == -1); + assert(c.reportSafeIndex(28, 27) == -1); + assert(c.reportSafeIndex(28, 28) == -1); + assert(c.reportSafeIndex(28, 29) == -1); + assert(c.reportSafeIndex(28, 30) == -1); + assert(c.reportSafeIndex(28, 31) == -1); + assert(c.reportSafeIndex(28, 32) == -1); + assert(c.reportSafeIndex(28, 33) == -1); + assert(c.reportSafeIndex(28, 34) == -1); + assert(c.reportSafeIndex(28, 35) == -1); + assert(c.reportSafeIndex(28, 36) == -1); + assert(c.reportSafeIndex(28, 37) == -1); + assert(c.reportSafeIndex(28, 38) == -1); + assert(c.reportSafeIndex(28, 39) == -1); + assert(c.reportSafeIndex(28, 40) == -1); + assert(c.reportSafeIndex(28, 41) == -1); + assert(c.reportSafeIndex(29, -5) == -1); + assert(c.reportSafeIndex(29, -4) == -1); + assert(c.reportSafeIndex(29, -3) == -1); + assert(c.reportSafeIndex(29, -2) == -1); + assert(c.reportSafeIndex(29, -1) == -1); + assert(c.reportSafeIndex(29, 0) == -1); + assert(c.reportSafeIndex(29, 1) == -1); + assert(c.reportSafeIndex(29, 2) == -1); + assert(c.reportSafeIndex(29, 3) == -1); + assert(c.reportSafeIndex(29, 4) == -1); + assert(c.reportSafeIndex(29, 5) == -1); + assert(c.reportSafeIndex(29, 6) == -1); + assert(c.reportSafeIndex(29, 7) == -1); + assert(c.reportSafeIndex(29, 8) == -1); + assert(c.reportSafeIndex(29, 9) == -1); + assert(c.reportSafeIndex(29, 10) == -1); + assert(c.reportSafeIndex(29, 11) == -1); + assert(c.reportSafeIndex(29, 12) == -1); + assert(c.reportSafeIndex(29, 13) == -1); + assert(c.reportSafeIndex(29, 14) == -1); + assert(c.reportSafeIndex(29, 15) == -1); + assert(c.reportSafeIndex(29, 16) == -1); + assert(c.reportSafeIndex(29, 17) == -1); + assert(c.reportSafeIndex(29, 18) == -1); + assert(c.reportSafeIndex(29, 19) == -1); + assert(c.reportSafeIndex(29, 20) == -1); + assert(c.reportSafeIndex(29, 21) == -1); + assert(c.reportSafeIndex(29, 22) == -1); + assert(c.reportSafeIndex(29, 23) == -1); + assert(c.reportSafeIndex(29, 24) == -1); + assert(c.reportSafeIndex(29, 25) == -1); + assert(c.reportSafeIndex(29, 26) == -1); + assert(c.reportSafeIndex(29, 27) == -1); + assert(c.reportSafeIndex(29, 28) == -1); + assert(c.reportSafeIndex(29, 29) == -1); + assert(c.reportSafeIndex(29, 30) == -1); + assert(c.reportSafeIndex(29, 31) == -1); + assert(c.reportSafeIndex(29, 32) == -1); + assert(c.reportSafeIndex(29, 33) == -1); + assert(c.reportSafeIndex(29, 34) == -1); + assert(c.reportSafeIndex(29, 35) == -1); + assert(c.reportSafeIndex(29, 36) == -1); + assert(c.reportSafeIndex(29, 37) == -1); + assert(c.reportSafeIndex(29, 38) == -1); + assert(c.reportSafeIndex(29, 39) == -1); + assert(c.reportSafeIndex(29, 40) == -1); + assert(c.reportSafeIndex(29, 41) == -1); + assert(c.reportSafeIndex(30, -5) == -1); + assert(c.reportSafeIndex(30, -4) == -1); + assert(c.reportSafeIndex(30, -3) == -1); + assert(c.reportSafeIndex(30, -2) == -1); + assert(c.reportSafeIndex(30, -1) == -1); + assert(c.reportSafeIndex(30, 0) == -1); + assert(c.reportSafeIndex(30, 1) == -1); + assert(c.reportSafeIndex(30, 2) == -1); + assert(c.reportSafeIndex(30, 3) == -1); + assert(c.reportSafeIndex(30, 4) == -1); + assert(c.reportSafeIndex(30, 5) == -1); + assert(c.reportSafeIndex(30, 6) == -1); + assert(c.reportSafeIndex(30, 7) == -1); + assert(c.reportSafeIndex(30, 8) == -1); + assert(c.reportSafeIndex(30, 9) == -1); + assert(c.reportSafeIndex(30, 10) == -1); + assert(c.reportSafeIndex(30, 11) == -1); + assert(c.reportSafeIndex(30, 12) == -1); + assert(c.reportSafeIndex(30, 13) == -1); + assert(c.reportSafeIndex(30, 14) == -1); + assert(c.reportSafeIndex(30, 15) == -1); + assert(c.reportSafeIndex(30, 16) == -1); + assert(c.reportSafeIndex(30, 17) == -1); + assert(c.reportSafeIndex(30, 18) == -1); + assert(c.reportSafeIndex(30, 19) == -1); + assert(c.reportSafeIndex(30, 20) == -1); + assert(c.reportSafeIndex(30, 21) == -1); + assert(c.reportSafeIndex(30, 22) == -1); + assert(c.reportSafeIndex(30, 23) == -1); + assert(c.reportSafeIndex(30, 24) == -1); + assert(c.reportSafeIndex(30, 25) == -1); + assert(c.reportSafeIndex(30, 26) == -1); + assert(c.reportSafeIndex(30, 27) == -1); + assert(c.reportSafeIndex(30, 28) == -1); + assert(c.reportSafeIndex(30, 29) == -1); + assert(c.reportSafeIndex(30, 30) == -1); + assert(c.reportSafeIndex(30, 31) == -1); + assert(c.reportSafeIndex(30, 32) == -1); + assert(c.reportSafeIndex(30, 33) == -1); + assert(c.reportSafeIndex(30, 34) == -1); + assert(c.reportSafeIndex(30, 35) == -1); + assert(c.reportSafeIndex(30, 36) == -1); + assert(c.reportSafeIndex(30, 37) == -1); + assert(c.reportSafeIndex(30, 38) == -1); + assert(c.reportSafeIndex(30, 39) == -1); + assert(c.reportSafeIndex(30, 40) == -1); + assert(c.reportSafeIndex(30, 41) == -1); + assert(c.reportSafeIndex(31, -5) == -1); + assert(c.reportSafeIndex(31, -4) == -1); + assert(c.reportSafeIndex(31, -3) == -1); + assert(c.reportSafeIndex(31, -2) == -1); + assert(c.reportSafeIndex(31, -1) == -1); + assert(c.reportSafeIndex(31, 0) == -1); + assert(c.reportSafeIndex(31, 1) == -1); + assert(c.reportSafeIndex(31, 2) == -1); + assert(c.reportSafeIndex(31, 3) == -1); + assert(c.reportSafeIndex(31, 4) == -1); + assert(c.reportSafeIndex(31, 5) == -1); + assert(c.reportSafeIndex(31, 6) == -1); + assert(c.reportSafeIndex(31, 7) == -1); + assert(c.reportSafeIndex(31, 8) == -1); + assert(c.reportSafeIndex(31, 9) == -1); + assert(c.reportSafeIndex(31, 10) == -1); + assert(c.reportSafeIndex(31, 11) == -1); + assert(c.reportSafeIndex(31, 12) == -1); + assert(c.reportSafeIndex(31, 13) == -1); + assert(c.reportSafeIndex(31, 14) == -1); + assert(c.reportSafeIndex(31, 15) == -1); + assert(c.reportSafeIndex(31, 16) == -1); + assert(c.reportSafeIndex(31, 17) == -1); + assert(c.reportSafeIndex(31, 18) == -1); + assert(c.reportSafeIndex(31, 19) == -1); + assert(c.reportSafeIndex(31, 20) == -1); + assert(c.reportSafeIndex(31, 21) == -1); + assert(c.reportSafeIndex(31, 22) == -1); + assert(c.reportSafeIndex(31, 23) == -1); + assert(c.reportSafeIndex(31, 24) == -1); + assert(c.reportSafeIndex(31, 25) == -1); + assert(c.reportSafeIndex(31, 26) == -1); + assert(c.reportSafeIndex(31, 27) == -1); + assert(c.reportSafeIndex(31, 28) == -1); + assert(c.reportSafeIndex(31, 29) == -1); + assert(c.reportSafeIndex(31, 30) == -1); + assert(c.reportSafeIndex(31, 31) == -1); + assert(c.reportSafeIndex(31, 32) == -1); + assert(c.reportSafeIndex(31, 33) == -1); + assert(c.reportSafeIndex(31, 34) == -1); + assert(c.reportSafeIndex(31, 35) == -1); + assert(c.reportSafeIndex(31, 36) == -1); + assert(c.reportSafeIndex(31, 37) == -1); + assert(c.reportSafeIndex(31, 38) == -1); + assert(c.reportSafeIndex(31, 39) == -1); + assert(c.reportSafeIndex(31, 40) == -1); + assert(c.reportSafeIndex(31, 41) == -1); + assert(c.reportSafeIndex(32, -5) == -1); + assert(c.reportSafeIndex(32, -4) == -1); + assert(c.reportSafeIndex(32, -3) == -1); + assert(c.reportSafeIndex(32, -2) == -1); + assert(c.reportSafeIndex(32, -1) == -1); + assert(c.reportSafeIndex(32, 0) == -1); + assert(c.reportSafeIndex(32, 1) == -1); + assert(c.reportSafeIndex(32, 2) == -1); + assert(c.reportSafeIndex(32, 3) == -1); + assert(c.reportSafeIndex(32, 4) == -1); + assert(c.reportSafeIndex(32, 5) == -1); + assert(c.reportSafeIndex(32, 6) == -1); + assert(c.reportSafeIndex(32, 7) == -1); + assert(c.reportSafeIndex(32, 8) == -1); + assert(c.reportSafeIndex(32, 9) == -1); + assert(c.reportSafeIndex(32, 10) == -1); + assert(c.reportSafeIndex(32, 11) == -1); + assert(c.reportSafeIndex(32, 12) == -1); + assert(c.reportSafeIndex(32, 13) == -1); + assert(c.reportSafeIndex(32, 14) == -1); + assert(c.reportSafeIndex(32, 15) == -1); + assert(c.reportSafeIndex(32, 16) == -1); + assert(c.reportSafeIndex(32, 17) == -1); + assert(c.reportSafeIndex(32, 18) == -1); + assert(c.reportSafeIndex(32, 19) == -1); + assert(c.reportSafeIndex(32, 20) == -1); + assert(c.reportSafeIndex(32, 21) == -1); + assert(c.reportSafeIndex(32, 22) == -1); + assert(c.reportSafeIndex(32, 23) == -1); + assert(c.reportSafeIndex(32, 24) == -1); + assert(c.reportSafeIndex(32, 25) == -1); + assert(c.reportSafeIndex(32, 26) == -1); + assert(c.reportSafeIndex(32, 27) == -1); + assert(c.reportSafeIndex(32, 28) == -1); + assert(c.reportSafeIndex(32, 29) == -1); + assert(c.reportSafeIndex(32, 30) == -1); + assert(c.reportSafeIndex(32, 31) == -1); + assert(c.reportSafeIndex(32, 32) == -1); + assert(c.reportSafeIndex(32, 33) == -1); + assert(c.reportSafeIndex(32, 34) == -1); + assert(c.reportSafeIndex(32, 35) == -1); + assert(c.reportSafeIndex(32, 36) == -1); + assert(c.reportSafeIndex(32, 37) == -1); + assert(c.reportSafeIndex(32, 38) == -1); + assert(c.reportSafeIndex(32, 39) == -1); + assert(c.reportSafeIndex(32, 40) == -1); + assert(c.reportSafeIndex(32, 41) == -1); + assert(c.reportSafeIndex(33, -5) == -1); + assert(c.reportSafeIndex(33, -4) == -1); + assert(c.reportSafeIndex(33, -3) == -1); + assert(c.reportSafeIndex(33, -2) == -1); + assert(c.reportSafeIndex(33, -1) == -1); + assert(c.reportSafeIndex(33, 0) == -1); + assert(c.reportSafeIndex(33, 1) == -1); + assert(c.reportSafeIndex(33, 2) == -1); + assert(c.reportSafeIndex(33, 3) == -1); + assert(c.reportSafeIndex(33, 4) == -1); + assert(c.reportSafeIndex(33, 5) == -1); + assert(c.reportSafeIndex(33, 6) == -1); + assert(c.reportSafeIndex(33, 7) == -1); + assert(c.reportSafeIndex(33, 8) == -1); + assert(c.reportSafeIndex(33, 9) == -1); + assert(c.reportSafeIndex(33, 10) == -1); + assert(c.reportSafeIndex(33, 11) == -1); + assert(c.reportSafeIndex(33, 12) == -1); + assert(c.reportSafeIndex(33, 13) == -1); + assert(c.reportSafeIndex(33, 14) == -1); + assert(c.reportSafeIndex(33, 15) == -1); + assert(c.reportSafeIndex(33, 16) == -1); + assert(c.reportSafeIndex(33, 17) == -1); + assert(c.reportSafeIndex(33, 18) == -1); + assert(c.reportSafeIndex(33, 19) == -1); + assert(c.reportSafeIndex(33, 20) == -1); + assert(c.reportSafeIndex(33, 21) == -1); + assert(c.reportSafeIndex(33, 22) == -1); + assert(c.reportSafeIndex(33, 23) == -1); + assert(c.reportSafeIndex(33, 24) == -1); + assert(c.reportSafeIndex(33, 25) == -1); + assert(c.reportSafeIndex(33, 26) == -1); + assert(c.reportSafeIndex(33, 27) == -1); + assert(c.reportSafeIndex(33, 28) == -1); + assert(c.reportSafeIndex(33, 29) == -1); + assert(c.reportSafeIndex(33, 30) == -1); + assert(c.reportSafeIndex(33, 31) == -1); + assert(c.reportSafeIndex(33, 32) == -1); + assert(c.reportSafeIndex(33, 33) == -1); + assert(c.reportSafeIndex(33, 34) == -1); + assert(c.reportSafeIndex(33, 35) == -1); + assert(c.reportSafeIndex(33, 36) == -1); + assert(c.reportSafeIndex(33, 37) == -1); + assert(c.reportSafeIndex(33, 38) == -1); + assert(c.reportSafeIndex(33, 39) == -1); + assert(c.reportSafeIndex(33, 40) == -1); + assert(c.reportSafeIndex(33, 41) == -1); + assert(c.reportSafeIndex(34, -5) == -1); + assert(c.reportSafeIndex(34, -4) == -1); + assert(c.reportSafeIndex(34, -3) == -1); + assert(c.reportSafeIndex(34, -2) == -1); + assert(c.reportSafeIndex(34, -1) == -1); + assert(c.reportSafeIndex(34, 0) == -1); + assert(c.reportSafeIndex(34, 1) == -1); + assert(c.reportSafeIndex(34, 2) == -1); + assert(c.reportSafeIndex(34, 3) == -1); + assert(c.reportSafeIndex(34, 4) == -1); + assert(c.reportSafeIndex(34, 5) == -1); + assert(c.reportSafeIndex(34, 6) == -1); + assert(c.reportSafeIndex(34, 7) == -1); + assert(c.reportSafeIndex(34, 8) == -1); + assert(c.reportSafeIndex(34, 9) == -1); + assert(c.reportSafeIndex(34, 10) == -1); + assert(c.reportSafeIndex(34, 11) == -1); + assert(c.reportSafeIndex(34, 12) == -1); + assert(c.reportSafeIndex(34, 13) == -1); + assert(c.reportSafeIndex(34, 14) == -1); + assert(c.reportSafeIndex(34, 15) == -1); + assert(c.reportSafeIndex(34, 16) == -1); + assert(c.reportSafeIndex(34, 17) == -1); + assert(c.reportSafeIndex(34, 18) == -1); + assert(c.reportSafeIndex(34, 19) == -1); + assert(c.reportSafeIndex(34, 20) == -1); + assert(c.reportSafeIndex(34, 21) == -1); + assert(c.reportSafeIndex(34, 22) == -1); + assert(c.reportSafeIndex(34, 23) == -1); + assert(c.reportSafeIndex(34, 24) == -1); + assert(c.reportSafeIndex(34, 25) == -1); + assert(c.reportSafeIndex(34, 26) == -1); + assert(c.reportSafeIndex(34, 27) == -1); + assert(c.reportSafeIndex(34, 28) == -1); + assert(c.reportSafeIndex(34, 29) == -1); + assert(c.reportSafeIndex(34, 30) == -1); + assert(c.reportSafeIndex(34, 31) == -1); + assert(c.reportSafeIndex(34, 32) == -1); + assert(c.reportSafeIndex(34, 33) == -1); + assert(c.reportSafeIndex(34, 34) == -1); + assert(c.reportSafeIndex(34, 35) == -1); + assert(c.reportSafeIndex(34, 36) == -1); + assert(c.reportSafeIndex(34, 37) == -1); + assert(c.reportSafeIndex(34, 38) == -1); + assert(c.reportSafeIndex(34, 39) == -1); + assert(c.reportSafeIndex(34, 40) == -1); + assert(c.reportSafeIndex(34, 41) == -1); + assert(c.reportSafeIndex(35, -5) == -1); + assert(c.reportSafeIndex(35, -4) == -1); + assert(c.reportSafeIndex(35, -3) == -1); + assert(c.reportSafeIndex(35, -2) == -1); + assert(c.reportSafeIndex(35, -1) == -1); + assert(c.reportSafeIndex(35, 0) == -1); + assert(c.reportSafeIndex(35, 1) == -1); + assert(c.reportSafeIndex(35, 2) == -1); + assert(c.reportSafeIndex(35, 3) == -1); + assert(c.reportSafeIndex(35, 4) == -1); + assert(c.reportSafeIndex(35, 5) == -1); + assert(c.reportSafeIndex(35, 6) == -1); + assert(c.reportSafeIndex(35, 7) == -1); + assert(c.reportSafeIndex(35, 8) == -1); + assert(c.reportSafeIndex(35, 9) == -1); + assert(c.reportSafeIndex(35, 10) == -1); + assert(c.reportSafeIndex(35, 11) == -1); + assert(c.reportSafeIndex(35, 12) == -1); + assert(c.reportSafeIndex(35, 13) == -1); + assert(c.reportSafeIndex(35, 14) == -1); + assert(c.reportSafeIndex(35, 15) == -1); + assert(c.reportSafeIndex(35, 16) == -1); + assert(c.reportSafeIndex(35, 17) == -1); + assert(c.reportSafeIndex(35, 18) == -1); + assert(c.reportSafeIndex(35, 19) == -1); + assert(c.reportSafeIndex(35, 20) == -1); + assert(c.reportSafeIndex(35, 21) == -1); + assert(c.reportSafeIndex(35, 22) == -1); + assert(c.reportSafeIndex(35, 23) == -1); + assert(c.reportSafeIndex(35, 24) == -1); + assert(c.reportSafeIndex(35, 25) == -1); + assert(c.reportSafeIndex(35, 26) == -1); + assert(c.reportSafeIndex(35, 27) == -1); + assert(c.reportSafeIndex(35, 28) == -1); + assert(c.reportSafeIndex(35, 29) == -1); + assert(c.reportSafeIndex(35, 30) == -1); + assert(c.reportSafeIndex(35, 31) == -1); + assert(c.reportSafeIndex(35, 32) == -1); + assert(c.reportSafeIndex(35, 33) == -1); + assert(c.reportSafeIndex(35, 34) == -1); + assert(c.reportSafeIndex(35, 35) == -1); + assert(c.reportSafeIndex(35, 36) == -1); + assert(c.reportSafeIndex(35, 37) == -1); + assert(c.reportSafeIndex(35, 38) == -1); + assert(c.reportSafeIndex(35, 39) == -1); + assert(c.reportSafeIndex(35, 40) == -1); + assert(c.reportSafeIndex(35, 41) == -1); + assert(c.reportSafeIndex(36, -5) == -1); + assert(c.reportSafeIndex(36, -4) == -1); + assert(c.reportSafeIndex(36, -3) == -1); + assert(c.reportSafeIndex(36, -2) == -1); + assert(c.reportSafeIndex(36, -1) == -1); + assert(c.reportSafeIndex(36, 0) == -1); + assert(c.reportSafeIndex(36, 1) == -1); + assert(c.reportSafeIndex(36, 2) == -1); + assert(c.reportSafeIndex(36, 3) == -1); + assert(c.reportSafeIndex(36, 4) == -1); + assert(c.reportSafeIndex(36, 5) == -1); + assert(c.reportSafeIndex(36, 6) == -1); + assert(c.reportSafeIndex(36, 7) == -1); + assert(c.reportSafeIndex(36, 8) == -1); + assert(c.reportSafeIndex(36, 9) == -1); + assert(c.reportSafeIndex(36, 10) == -1); + assert(c.reportSafeIndex(36, 11) == -1); + assert(c.reportSafeIndex(36, 12) == -1); + assert(c.reportSafeIndex(36, 13) == -1); + assert(c.reportSafeIndex(36, 14) == -1); + assert(c.reportSafeIndex(36, 15) == -1); + assert(c.reportSafeIndex(36, 16) == -1); + assert(c.reportSafeIndex(36, 17) == -1); + assert(c.reportSafeIndex(36, 18) == -1); + assert(c.reportSafeIndex(36, 19) == -1); + assert(c.reportSafeIndex(36, 20) == -1); + assert(c.reportSafeIndex(36, 21) == -1); + assert(c.reportSafeIndex(36, 22) == -1); + assert(c.reportSafeIndex(36, 23) == -1); + assert(c.reportSafeIndex(36, 24) == -1); + assert(c.reportSafeIndex(36, 25) == -1); + assert(c.reportSafeIndex(36, 26) == -1); + assert(c.reportSafeIndex(36, 27) == -1); + assert(c.reportSafeIndex(36, 28) == -1); + assert(c.reportSafeIndex(36, 29) == -1); + assert(c.reportSafeIndex(36, 30) == -1); + assert(c.reportSafeIndex(36, 31) == -1); + assert(c.reportSafeIndex(36, 32) == -1); + assert(c.reportSafeIndex(36, 33) == -1); + assert(c.reportSafeIndex(36, 34) == -1); + assert(c.reportSafeIndex(36, 35) == -1); + assert(c.reportSafeIndex(36, 36) == -1); + assert(c.reportSafeIndex(36, 37) == -1); + assert(c.reportSafeIndex(36, 38) == -1); + assert(c.reportSafeIndex(36, 39) == -1); + assert(c.reportSafeIndex(36, 40) == -1); + assert(c.reportSafeIndex(36, 41) == -1); + assert(c.reportSafeIndex(37, -5) == -1); + assert(c.reportSafeIndex(37, -4) == -1); + assert(c.reportSafeIndex(37, -3) == -1); + assert(c.reportSafeIndex(37, -2) == -1); + assert(c.reportSafeIndex(37, -1) == -1); + assert(c.reportSafeIndex(37, 0) == -1); + assert(c.reportSafeIndex(37, 1) == -1); + assert(c.reportSafeIndex(37, 2) == -1); + assert(c.reportSafeIndex(37, 3) == -1); + assert(c.reportSafeIndex(37, 4) == -1); + assert(c.reportSafeIndex(37, 5) == -1); + assert(c.reportSafeIndex(37, 6) == -1); + assert(c.reportSafeIndex(37, 7) == -1); + assert(c.reportSafeIndex(37, 8) == -1); + assert(c.reportSafeIndex(37, 9) == -1); + assert(c.reportSafeIndex(37, 10) == -1); + assert(c.reportSafeIndex(37, 11) == -1); + assert(c.reportSafeIndex(37, 12) == -1); + assert(c.reportSafeIndex(37, 13) == -1); + assert(c.reportSafeIndex(37, 14) == -1); + assert(c.reportSafeIndex(37, 15) == -1); + assert(c.reportSafeIndex(37, 16) == -1); + assert(c.reportSafeIndex(37, 17) == -1); + assert(c.reportSafeIndex(37, 18) == -1); + assert(c.reportSafeIndex(37, 19) == -1); + assert(c.reportSafeIndex(37, 20) == -1); + assert(c.reportSafeIndex(37, 21) == -1); + assert(c.reportSafeIndex(37, 22) == -1); + assert(c.reportSafeIndex(37, 23) == -1); + assert(c.reportSafeIndex(37, 24) == -1); + assert(c.reportSafeIndex(37, 25) == -1); + assert(c.reportSafeIndex(37, 26) == -1); + assert(c.reportSafeIndex(37, 27) == -1); + assert(c.reportSafeIndex(37, 28) == -1); + assert(c.reportSafeIndex(37, 29) == -1); + assert(c.reportSafeIndex(37, 30) == -1); + assert(c.reportSafeIndex(37, 31) == -1); + assert(c.reportSafeIndex(37, 32) == -1); + assert(c.reportSafeIndex(37, 33) == -1); + assert(c.reportSafeIndex(37, 34) == -1); + assert(c.reportSafeIndex(37, 35) == -1); + assert(c.reportSafeIndex(37, 36) == -1); + assert(c.reportSafeIndex(37, 37) == -1); + assert(c.reportSafeIndex(37, 38) == -1); + assert(c.reportSafeIndex(37, 39) == -1); + assert(c.reportSafeIndex(37, 40) == -1); + assert(c.reportSafeIndex(37, 41) == -1); + assert(c.reportSafeIndex(38, -5) == -1); + assert(c.reportSafeIndex(38, -4) == -1); + assert(c.reportSafeIndex(38, -3) == -1); + assert(c.reportSafeIndex(38, -2) == -1); + assert(c.reportSafeIndex(38, -1) == -1); + assert(c.reportSafeIndex(38, 0) == -1); + assert(c.reportSafeIndex(38, 1) == -1); + assert(c.reportSafeIndex(38, 2) == -1); + assert(c.reportSafeIndex(38, 3) == -1); + assert(c.reportSafeIndex(38, 4) == -1); + assert(c.reportSafeIndex(38, 5) == -1); + assert(c.reportSafeIndex(38, 6) == -1); + assert(c.reportSafeIndex(38, 7) == -1); + assert(c.reportSafeIndex(38, 8) == -1); + assert(c.reportSafeIndex(38, 9) == -1); + assert(c.reportSafeIndex(38, 10) == -1); + assert(c.reportSafeIndex(38, 11) == -1); + assert(c.reportSafeIndex(38, 12) == -1); + assert(c.reportSafeIndex(38, 13) == -1); + assert(c.reportSafeIndex(38, 14) == -1); + assert(c.reportSafeIndex(38, 15) == -1); + assert(c.reportSafeIndex(38, 16) == -1); + assert(c.reportSafeIndex(38, 17) == -1); + assert(c.reportSafeIndex(38, 18) == -1); + assert(c.reportSafeIndex(38, 19) == -1); + assert(c.reportSafeIndex(38, 20) == -1); + assert(c.reportSafeIndex(38, 21) == -1); + assert(c.reportSafeIndex(38, 22) == -1); + assert(c.reportSafeIndex(38, 23) == -1); + assert(c.reportSafeIndex(38, 24) == -1); + assert(c.reportSafeIndex(38, 25) == -1); + assert(c.reportSafeIndex(38, 26) == -1); + assert(c.reportSafeIndex(38, 27) == -1); + assert(c.reportSafeIndex(38, 28) == -1); + assert(c.reportSafeIndex(38, 29) == -1); + assert(c.reportSafeIndex(38, 30) == -1); + assert(c.reportSafeIndex(38, 31) == -1); + assert(c.reportSafeIndex(38, 32) == -1); + assert(c.reportSafeIndex(38, 33) == -1); + assert(c.reportSafeIndex(38, 34) == -1); + assert(c.reportSafeIndex(38, 35) == -1); + assert(c.reportSafeIndex(38, 36) == -1); + assert(c.reportSafeIndex(38, 37) == -1); + assert(c.reportSafeIndex(38, 38) == -1); + assert(c.reportSafeIndex(38, 39) == -1); + assert(c.reportSafeIndex(38, 40) == -1); + assert(c.reportSafeIndex(38, 41) == -1); + assert(c.reportSafeIndex(39, -5) == -1); + assert(c.reportSafeIndex(39, -4) == -1); + assert(c.reportSafeIndex(39, -3) == -1); + assert(c.reportSafeIndex(39, -2) == -1); + assert(c.reportSafeIndex(39, -1) == -1); + assert(c.reportSafeIndex(39, 0) == -1); + assert(c.reportSafeIndex(39, 1) == -1); + assert(c.reportSafeIndex(39, 2) == -1); + assert(c.reportSafeIndex(39, 3) == -1); + assert(c.reportSafeIndex(39, 4) == -1); + assert(c.reportSafeIndex(39, 5) == -1); + assert(c.reportSafeIndex(39, 6) == -1); + assert(c.reportSafeIndex(39, 7) == -1); + assert(c.reportSafeIndex(39, 8) == -1); + assert(c.reportSafeIndex(39, 9) == -1); + assert(c.reportSafeIndex(39, 10) == -1); + assert(c.reportSafeIndex(39, 11) == -1); + assert(c.reportSafeIndex(39, 12) == -1); + assert(c.reportSafeIndex(39, 13) == -1); + assert(c.reportSafeIndex(39, 14) == -1); + assert(c.reportSafeIndex(39, 15) == -1); + assert(c.reportSafeIndex(39, 16) == -1); + assert(c.reportSafeIndex(39, 17) == -1); + assert(c.reportSafeIndex(39, 18) == -1); + assert(c.reportSafeIndex(39, 19) == -1); + assert(c.reportSafeIndex(39, 20) == -1); + assert(c.reportSafeIndex(39, 21) == -1); + assert(c.reportSafeIndex(39, 22) == -1); + assert(c.reportSafeIndex(39, 23) == -1); + assert(c.reportSafeIndex(39, 24) == -1); + assert(c.reportSafeIndex(39, 25) == -1); + assert(c.reportSafeIndex(39, 26) == -1); + assert(c.reportSafeIndex(39, 27) == -1); + assert(c.reportSafeIndex(39, 28) == -1); + assert(c.reportSafeIndex(39, 29) == -1); + assert(c.reportSafeIndex(39, 30) == -1); + assert(c.reportSafeIndex(39, 31) == -1); + assert(c.reportSafeIndex(39, 32) == -1); + assert(c.reportSafeIndex(39, 33) == -1); + assert(c.reportSafeIndex(39, 34) == -1); + assert(c.reportSafeIndex(39, 35) == -1); + assert(c.reportSafeIndex(39, 36) == -1); + assert(c.reportSafeIndex(39, 37) == -1); + assert(c.reportSafeIndex(39, 38) == -1); + assert(c.reportSafeIndex(39, 39) == -1); + assert(c.reportSafeIndex(39, 40) == -1); + assert(c.reportSafeIndex(39, 41) == -1); + assert(c.reportSafeIndex(40, -5) == -1); + assert(c.reportSafeIndex(40, -4) == -1); + assert(c.reportSafeIndex(40, -3) == -1); + assert(c.reportSafeIndex(40, -2) == -1); + assert(c.reportSafeIndex(40, -1) == -1); + assert(c.reportSafeIndex(40, 0) == -1); + assert(c.reportSafeIndex(40, 1) == -1); + assert(c.reportSafeIndex(40, 2) == -1); + assert(c.reportSafeIndex(40, 3) == -1); + assert(c.reportSafeIndex(40, 4) == -1); + assert(c.reportSafeIndex(40, 5) == -1); + assert(c.reportSafeIndex(40, 6) == -1); + assert(c.reportSafeIndex(40, 7) == -1); + assert(c.reportSafeIndex(40, 8) == -1); + assert(c.reportSafeIndex(40, 9) == -1); + assert(c.reportSafeIndex(40, 10) == -1); + assert(c.reportSafeIndex(40, 11) == -1); + assert(c.reportSafeIndex(40, 12) == -1); + assert(c.reportSafeIndex(40, 13) == -1); + assert(c.reportSafeIndex(40, 14) == -1); + assert(c.reportSafeIndex(40, 15) == -1); + assert(c.reportSafeIndex(40, 16) == -1); + assert(c.reportSafeIndex(40, 17) == -1); + assert(c.reportSafeIndex(40, 18) == -1); + assert(c.reportSafeIndex(40, 19) == -1); + assert(c.reportSafeIndex(40, 20) == -1); + assert(c.reportSafeIndex(40, 21) == -1); + assert(c.reportSafeIndex(40, 22) == -1); + assert(c.reportSafeIndex(40, 23) == -1); + assert(c.reportSafeIndex(40, 24) == -1); + assert(c.reportSafeIndex(40, 25) == -1); + assert(c.reportSafeIndex(40, 26) == -1); + assert(c.reportSafeIndex(40, 27) == -1); + assert(c.reportSafeIndex(40, 28) == -1); + assert(c.reportSafeIndex(40, 29) == -1); + assert(c.reportSafeIndex(40, 30) == -1); + assert(c.reportSafeIndex(40, 31) == -1); + assert(c.reportSafeIndex(40, 32) == -1); + assert(c.reportSafeIndex(40, 33) == -1); + assert(c.reportSafeIndex(40, 34) == -1); + assert(c.reportSafeIndex(40, 35) == -1); + assert(c.reportSafeIndex(40, 36) == -1); + assert(c.reportSafeIndex(40, 37) == -1); + assert(c.reportSafeIndex(40, 38) == -1); + assert(c.reportSafeIndex(40, 39) == -1); + assert(c.reportSafeIndex(40, 40) == -1); + assert(c.reportSafeIndex(40, 41) == -1); + assert(c.reportSafeIndex(0, -5) == -1); + assert(c.reportSafeIndex(1, 41) == -1); + assert(c.reportSafeIndex(18, 37) == 10); + assert(c.reportSafeIndex(13, 30) == 12); + assert(c.reportSafeIndex(14, 3) == 1); + assert(c.reportSafeIndex(14, 24) == 10); + assert(c.reportSafeIndex(20, 9) == 5); + return 0; +} diff --git a/cs235/lab03/DONT_DELETE.supp b/cs235/lab03/DONT_DELETE.supp new file mode 100644 index 0000000..c2e5972 --- /dev/null +++ b/cs235/lab03/DONT_DELETE.supp @@ -0,0 +1,661 @@ +{ + Dynamic Linker Bug + Memcheck:Cond + fun:_dl_relocate_object + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start + obj:/lib/ld-2.6.so +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZSt6__findISt14_List_iteratorISsESsET_S2_S2_RKT0_St18input_iterator_tag + fun:_ZSt4findISt14_List_iteratorISsESsET_S2_S2_RKT0_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStltIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStltIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStltIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZSt6__findISt14_List_iteratorISsESsET_S2_S2_RKT0_St18input_iterator_tag + fun:_ZSt4findISt14_List_iteratorISsESsET_S2_S2_RKT0_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:bcmp + fun:_ZNSt11char_traitsIcE7compareEPKcS2_j + fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKSbIS3_St11char_traitsIS3_ESaIS3_EESC_ + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZN3tut12_GLOBAL__N_113ensure_equalsISsSsEEvPKcRKT0_RKT_ + fun:_ZN7BSTTest7initBSTER3BST + fun:_ZN3tut11test_objectI7BSTTestE4testILi2EEEvv + fun:_ZN3tut10test_groupI7BSTTestLi50EE13run_test_seh_EMNS_11test_objectIS1_EEFvvERNS2_11safe_holderIS4_EERSs + fun:_ZN3tut10test_groupI7BSTTestLi50EE9run_test_ERKSt17_Rb_tree_iteratorISt4pairIKiMNS_11test_objectIS1_EEFvvEEERNS2_11safe_holderIS7_EE + fun:_ZN3tut10test_groupI7BSTTestLi50EE8run_nextEv + fun:_ZNK3tut11test_runner23run_all_tests_in_group_ESt23_Rb_tree_const_iteratorISt4pairIKSsPNS_10group_baseEEE + fun:_ZNK3tut11test_runner9run_testsEv +} +{ + + Memcheck:Cond + fun:bcmp + fun:_ZNSt11char_traitsIcE7compareEPKcS2_j + fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKSbIS3_St11char_traitsIS3_ESaIS3_EESC_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_ZN3tut11test_objectI14LinkedListTestE4testILi8EEEvv + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE13run_test_seh_EMNS_11test_objectIS1_EEFvvERNS2_11safe_holderIS4_EERSs + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE9run_test_ERKSt17_Rb_tree_iteratorISt4pairIKiMNS_11test_objectIS1_EEFvvEEERNS2_11safe_holderIS7_EE + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE8run_nextEv + fun:_ZNK3tut11test_runner23run_all_tests_in_group_ESt23_Rb_tree_const_iteratorISt4pairIKSsPNS_10group_baseEEE + fun:_ZNK3tut11test_runner9run_testsEv + fun:_Z3runRKSsi + fun:main +} +{ + + Memcheck:Cond + fun:bcmp + fun:_ZNSt11char_traitsIcE7compareEPKcS2_j + fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKSbIS3_St11char_traitsIS3_ESaIS3_EESC_ + fun:_ZSt6__findISt14_List_iteratorISsESsET_S2_S2_RKT0_St18input_iterator_tag + fun:_ZSt4findISt14_List_iteratorISsESsET_S2_S2_RKT0_ + fun:_ZN3tut11test_objectI14LinkedListTestE4testILi9EEEvv + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE13run_test_seh_EMNS_11test_objectIS1_EEFvvERNS2_11safe_holderIS4_EERSs + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE9run_test_ERKSt17_Rb_tree_iteratorISt4pairIKiMNS_11test_objectIS1_EEFvvEEERNS2_11safe_holderIS7_EE + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE8run_nextEv + fun:_ZNK3tut11test_runner23run_all_tests_in_group_ESt23_Rb_tree_const_iteratorISt4pairIKSsPNS_10group_baseEEE + fun:_ZNK3tut11test_runner9run_testsEv + fun:_Z3runRKSsi +} +{ + + Memcheck:Cond + fun:bcmp + fun:_ZNSt11char_traitsIcE7compareEPKcS2_j + fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKSbIS3_St11char_traitsIS3_ESaIS3_EESC_ + fun:_ZN3tut11test_objectI14LinkedListTestE4testILi9EEEvv + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE13run_test_seh_EMNS_11test_objectIS1_EEFvvERNS2_11safe_holderIS4_EERSs + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE9run_test_ERKSt17_Rb_tree_iteratorISt4pairIKiMNS_11test_objectIS1_EEFvvEEERNS2_11safe_holderIS7_EE + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE8run_nextEv + fun:_ZNK3tut11test_runner23run_all_tests_in_group_ESt23_Rb_tree_const_iteratorISt4pairIKSsPNS_10group_baseEEE + fun:_ZNK3tut11test_runner9run_testsEv + fun:_Z3runRKSsi + fun:main +} diff --git a/cs235/lab03/Run_Test_Driver.sh b/cs235/lab03/Run_Test_Driver.sh new file mode 100755 index 0000000..c292c87 --- /dev/null +++ b/cs235/lab03/Run_Test_Driver.sh @@ -0,0 +1,16 @@ +#!/bin/bash +EXE=dont_run_me + +g++ -o$EXE Student_Code/*.cpp ignoreme.a -g + +if (( $? )) ; +then + echo Compilation Failed; + read -p "Press enter to exit"; +else + chmod 755 $EXE; + + valgrind --tool=memcheck --leak-check=yes --max-stackframe=5000000 --show-reachable=yes --suppressions=DONT_DELETE.supp ./$EXE + rm ./$EXE + read -p "Press any key to exit..." +fi; diff --git a/cs235/lab03/Student_Code/Factory.cpp b/cs235/lab03/Student_Code/Factory.cpp new file mode 100644 index 0000000..3b56a60 --- /dev/null +++ b/cs235/lab03/Student_Code/Factory.cpp @@ -0,0 +1,21 @@ +#include "Factory.h" +#include "linkedlist.h" + +//You may add #include statements here + +/* + You will MODIFY THIS DOCUMENT. +*/ +//======================================================================================= +/* + getLinkedList() + + Creates and returns an object whose class extends LinkedListInterface. + This should be an object of a class you have created. + + Example: If you made a class called "LinkedList", you might say, "return new LinkedList();". +*/ +LinkedListInterface * Factory::getLinkedList() +{ + return new linkedlist();//Modify this line +} diff --git a/cs235/lab03/Student_Code/Factory.h b/cs235/lab03/Student_Code/Factory.h new file mode 100644 index 0000000..3519c6e --- /dev/null +++ b/cs235/lab03/Student_Code/Factory.h @@ -0,0 +1,23 @@ +#pragma once +#include "LinkedListInterface.h" + +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + getLinkedList() + + Creates and returns an object whose class extends LinkedListInterface. + This should be an object of a class you have created. + + Example: If you made a class called "LinkedList", you might say, "return new LinkedList();". +*/ +class Factory +{ + public: + static LinkedListInterface * getLinkedList(); +}; +//======================================================================================= diff --git a/cs235/lab03/Student_Code/LinkedListInterface.h b/cs235/lab03/Student_Code/LinkedListInterface.h new file mode 100644 index 0000000..465a227 --- /dev/null +++ b/cs235/lab03/Student_Code/LinkedListInterface.h @@ -0,0 +1,80 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once +#include + +using namespace std; + +class LinkedListInterface +{ + +public: + + LinkedListInterface(void){}; + virtual ~LinkedListInterface(void){}; + + /* + insertHead + + A node with the given value should be inserted at the beginning of the list. + + Only non-negative values should be added to the list. Do not allow + duplicate values in the list. + */ + virtual void insertHead(int value) = 0; + + /* + insertTail + + A node with the given value should be inserted at the end of the list. + + Only non-negative values should be added to the list. Do not allow + duplicate values in the list. + */ + virtual void insertTail(int value) = 0; + + /* + insertAfter + + A node with the given value should be inserted immediately after the + node whose value is equal to insertionNode. + + A node should only be added if the node whose value is equal to + insertionNode is in the list. Only non-negative values should be + added to the list. Do not allow duplicate values in the list. + */ + virtual void insertAfter(int value, int insertionNode) = 0; + + /* + remove + + The node with the given value should be removed from the list. + + The list may or may not include a node with the given value. + */ + virtual void remove(int value) = 0; + + /* + clear + + Remove all nodes from the list. + */ + virtual void clear() = 0; + + /* + at + + Returns the value of the node at the given index. The list begins at + index 0. + + If the given index is out of range of the list, return -1; + */ + virtual int at(int index) = 0; + + /* + size + + Returns the number of nodes in the list. + */ + virtual int size() = 0; + +}; diff --git a/cs235/lab03/Student_Code/Makefile b/cs235/lab03/Student_Code/Makefile new file mode 100644 index 0000000..cd2c4de --- /dev/null +++ b/cs235/lab03/Student_Code/Makefile @@ -0,0 +1,37 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=Factory.o linkedlist.o node.o ../ignoreme.a +EXE=main +all: libpwnd.so $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +main.o: main.cpp Factory.o linkedlist.o node.o libpwnd.so ../ignoreme.a + g++ -Wall -g -o main Factory.o linkedlist.o ../ignoreme.a +Factory.o: Factory.cpp Factory.h +linkedlist.o: linkedlist.cpp linkedlist.h +node.o: node.cpp node.h +test: linkedlist.o node.o test.cpp + $(CXX) $(CXXFLAGS) linkedlist.o node.o test.cpp -o $@ + +run: main + LD_PRELOAD=libpwnd.so LD_LIBRARY_PATH=. ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + +drun: main + LD_PRELOAD=libpwnd.so LD_LIBRARY_PATH=. gdb ./main + +debug: test + LD_PRELOAD=libpwnd.so LD_LIBRARY_PATH=. gdb ./test + +valgrind: $(EXE) + LD_PRELOAD=libpwnd.so LD_LIBRARY_PATH=. valgrind --tool=memcheck --leak-check=yes ./$(EXE) + +libpwnd.so: pwnd.c + gcc -shared -o libpwnd.so.1.0 pwnd.c + ln -fs libpwnd.so.1.0 libpwnd.so.1 + ln -fs libpwnd.so.1 libpwnd.so diff --git a/cs235/lab03/Student_Code/linkedlist.cpp b/cs235/lab03/Student_Code/linkedlist.cpp new file mode 100644 index 0000000..2292657 --- /dev/null +++ b/cs235/lab03/Student_Code/linkedlist.cpp @@ -0,0 +1,158 @@ +#include "linkedlist.h" + +linkedlist::linkedlist(): head(NULL) {} +linkedlist::~linkedlist(){clear();} + +bool linkedlist::is_it_zero(int value) { + if(value < 0) + return false; + else + return true; +} + +bool linkedlist::has_a(int value) { + // cout << "has_a(" << value << ")" << endl; + node* node_ptr = head; + if(head == NULL) + return false; + while(node_ptr != NULL) { + if(node_ptr->value == value) + return true; + node_ptr = node_ptr->next; + } + return false; +} + +void linkedlist::insertHead(int value) { + // cout << "inserthead(" << value << ")" << endl; + // cout << *this << endl; + if(!is_it_zero(value)) + return; + if(has_a(value)) + return; + head = new node(value, head); + // cout << *this << endl << endl; +} + +void linkedlist::insertTail(int value) { + // cout << "insertTail(" << value << ")" << endl; + // cout << *this << endl; + if(!is_it_zero(value)) + return; + if(has_a(value)) + return; + if(head == NULL) { + insertHead(value); + return; + } + node* node_ptr = head; + while(node_ptr != NULL) { + if(node_ptr->next == NULL) { + node_ptr->next = new node(value, NULL); + break; + } + node_ptr = node_ptr->next; + } + // cout << *this << endl << endl; +} + +void linkedlist::insertAfter(int value, int insertionNode) { + // cout << "insertAfter(" << value << ", insertionNode" << insertionNode << ")" << endl; + // cout << *this << endl; + if(value < 0 || insertionNode < 0) { + //cout << "first check" << endl; + return; + } + if(has_a(value) || !has_a(insertionNode)) { + //cout << "failing" << endl; + return; + } + node* node_ptr = head; + while(node_ptr != NULL) { + if(node_ptr->value == insertionNode) { + node* temp = new node(value, NULL); + temp->next = node_ptr->next; + node_ptr->next = temp; + } + node_ptr = node_ptr->next; + } + // cout << *this << endl << endl; +} + +void linkedlist::remove(int value) { + // cout << "remove(" << value << ")" << endl; + // cout << *this << endl; + if(!is_it_zero(value)) + return; + if(!has_a(value)) + return; + node* node_ptr = head; + if(node_ptr->value == value) { + //cout << "first" << endl; + node* ptr = head; + head = head->next; + delete ptr; + return; + } + while(node_ptr != NULL) { + if(node_ptr->next == NULL) + return; + if(node_ptr->next->value == value) { + node* ptr = node_ptr->next; + node_ptr->next = node_ptr->next->next; + delete ptr; + } + node_ptr = node_ptr->next; + } + // cout << *this << endl << endl; +} + +void linkedlist::clear() { + // cout << "clear()" << endl; + node* node_ptr = head; + while(head) { + node_ptr = head; + head = head->next; + delete node_ptr; + } +} + +int linkedlist::at(int index) { + // cout << *this << endl; + // cout << "at(" << index << ")" << endl; + if(index < 0) { + //cout << "is it zero" << endl; + return -1; + } + if(size() <= index) { + // cout << "this is the index=" << index << " size(" << size() << ")"<next; + } + if(head == NULL) + return -1; + return node_ptr->value; +} + +int linkedlist::size() { + int size_of_list = 0; + node* node_ptr = head; + while(node_ptr != NULL) { + size_of_list++; + node_ptr = node_ptr->next; + } + // cout << "size(" << size_of_list << ")" << endl; + return size_of_list; +} + +ostream & operator<<(ostream & os, linkedlist & f) { + node* node_ptr = f.head; + while(node_ptr != NULL) { + os << node_ptr->value << ","; + node_ptr = node_ptr->next; + } + return os; +} diff --git a/cs235/lab03/Student_Code/linkedlist.h b/cs235/lab03/Student_Code/linkedlist.h new file mode 100644 index 0000000..7315eed --- /dev/null +++ b/cs235/lab03/Student_Code/linkedlist.h @@ -0,0 +1,25 @@ +#ifndef __LINKEDLIST_H__ +#define __LINKEDLIST_H__ +#include +#include "LinkedListInterface.h" +#include "node.h" + +using namespace std; + +class linkedlist : public LinkedListInterface { + public: + linkedlist(); + ~linkedlist(); + node* head; + bool has_a(int value); + bool is_it_zero(int value); + void insertHead(int value); + void insertTail(int value); + void insertAfter(int value, int insertionNode); + void remove(int value); + void clear(); + int at(int index); + int size(); + friend ostream & operator<<(ostream & os, linkedlist & f); +}; +#endif diff --git a/cs235/lab03/Student_Code/main.cpp b/cs235/lab03/Student_Code/main.cpp new file mode 100644 index 0000000..a43aa94 --- /dev/null +++ b/cs235/lab03/Student_Code/main.cpp @@ -0,0 +1,24 @@ +#include +#include +#include "linkedlist.h" +#include "node.h" + +using namespace std; + +int main() { + node* head = new node(0, head); + node* tom = new node(1, NULL); + node* dick = new node(2, NULL); + head->next = tom; + tom->next = dick; + node* node_ptr = head; + while(node_ptr != NULL) { + cout << node_ptr->value; + if(node_ptr != NULL) { + cout << "====>"; + } + node_ptr = node_ptr->next; + } + cout << endl; + cout << dick->next << endl; +} diff --git a/cs235/lab03/Student_Code/node.cpp b/cs235/lab03/Student_Code/node.cpp new file mode 100644 index 0000000..eab6683 --- /dev/null +++ b/cs235/lab03/Student_Code/node.cpp @@ -0,0 +1,3 @@ +#include "node.h" + +node::node(const int value, node* next) : value(value), next(next) {} diff --git a/cs235/lab03/Student_Code/node.h b/cs235/lab03/Student_Code/node.h new file mode 100644 index 0000000..901bc84 --- /dev/null +++ b/cs235/lab03/Student_Code/node.h @@ -0,0 +1,14 @@ +#ifndef __NODE_H__ +#define __NODE_H__ + +#include + +using namespace std; + +class node { + public: + node(const int, node*); + int value; + node* next; +}; +#endif diff --git a/cs235/lab03/Student_Code/pwnd.c b/cs235/lab03/Student_Code/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab03/Student_Code/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/lab03/Student_Code/test.cpp b/cs235/lab03/Student_Code/test.cpp new file mode 100644 index 0000000..a7ffbfe --- /dev/null +++ b/cs235/lab03/Student_Code/test.cpp @@ -0,0 +1,37 @@ +#include +#include "linkedlist.h" + +using namespace std; + +int main() { + linkedlist l; + l.insertTail(69); + l.insertHead(28); + l.insertHead(1); + l.insertHead(2); + l.insertHead(4); + l.insertHead(30); + l.insertHead(15); + l.insertTail(68); + l.insertHead(9); + l.insertHead(0); + l.insertHead(7); + l.insertHead(42); + l.insertHead(3); + cout << l << endl; + l.insertAfter(13,30); + cout << l << endl; + l.remove(13); + cout << endl << l << endl << "removed 13" << endl;; + l.remove(4); + cout << endl << l << endl << "removed 4" << endl;; + l.remove(68); + cout << endl << l << endl << "removed 68" << endl;; + l.remove(3); + cout << endl << endl; + cout << endl << l << endl << "removed 3" << endl;; + l.remove(0); + cout << endl << l << endl << "removed 9" << endl;; + l.remove(69); + cout << endl << l << endl << "removed 69" << endl;; +} diff --git a/cs235/lab03/sm/Factory.cpp b/cs235/lab03/sm/Factory.cpp new file mode 100644 index 0000000..befa7f3 --- /dev/null +++ b/cs235/lab03/sm/Factory.cpp @@ -0,0 +1,21 @@ +#include "Factory.h" +#include "ll.h" + +//You may add #include statements here + +/* + You will MODIFY THIS DOCUMENT. +*/ +//======================================================================================= +/* + getLinkedList() + + Creates and returns an object whose class extends LinkedListInterface. + This should be an object of a class you have created. + + Example: If you made a class called "LinkedList", you might say, "return new LinkedList();". +*/ +LinkedListInterface * Factory::getLinkedList() +{ + return new ll();//Modify this line +} diff --git a/cs235/lab03/sm/Factory.h b/cs235/lab03/sm/Factory.h new file mode 100644 index 0000000..35f2030 --- /dev/null +++ b/cs235/lab03/sm/Factory.h @@ -0,0 +1,23 @@ +#pragma once +#include "LinkedListInterface.h" + +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + getLinkedList() + + Creates and returns an object whose class extends LinkedListInterface. + This should be an object of a class you have created. + + Example: If you made a class called "LinkedList", you might say, "return new LinkedList();". +*/ +class Factory +{ + public: + static LinkedListInterface * getLinkedList(); +}; +//======================================================================================= diff --git a/cs235/lab03/sm/LinkedListInterface.h b/cs235/lab03/sm/LinkedListInterface.h new file mode 100644 index 0000000..465a227 --- /dev/null +++ b/cs235/lab03/sm/LinkedListInterface.h @@ -0,0 +1,80 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once +#include + +using namespace std; + +class LinkedListInterface +{ + +public: + + LinkedListInterface(void){}; + virtual ~LinkedListInterface(void){}; + + /* + insertHead + + A node with the given value should be inserted at the beginning of the list. + + Only non-negative values should be added to the list. Do not allow + duplicate values in the list. + */ + virtual void insertHead(int value) = 0; + + /* + insertTail + + A node with the given value should be inserted at the end of the list. + + Only non-negative values should be added to the list. Do not allow + duplicate values in the list. + */ + virtual void insertTail(int value) = 0; + + /* + insertAfter + + A node with the given value should be inserted immediately after the + node whose value is equal to insertionNode. + + A node should only be added if the node whose value is equal to + insertionNode is in the list. Only non-negative values should be + added to the list. Do not allow duplicate values in the list. + */ + virtual void insertAfter(int value, int insertionNode) = 0; + + /* + remove + + The node with the given value should be removed from the list. + + The list may or may not include a node with the given value. + */ + virtual void remove(int value) = 0; + + /* + clear + + Remove all nodes from the list. + */ + virtual void clear() = 0; + + /* + at + + Returns the value of the node at the given index. The list begins at + index 0. + + If the given index is out of range of the list, return -1; + */ + virtual int at(int index) = 0; + + /* + size + + Returns the number of nodes in the list. + */ + virtual int size() = 0; + +}; diff --git a/cs235/lab03/sm/Makefile b/cs235/lab03/sm/Makefile new file mode 100644 index 0000000..31e913c --- /dev/null +++ b/cs235/lab03/sm/Makefile @@ -0,0 +1,27 @@ +CXXFLAGS=-Wall -g + +all: test main +test: test.cc Factory.o ll.o +main: pwnd.o Factory.o ../ignoreme.a ll.o + $(CXX) $(CXXFLAGS) -o $@ $^ + +# these deps need to be set up to allow for appropriate recompilation +Factory.o: Factory.h Factory.cpp +ll.o: ll.h ll.cc +pwnd.o: pwnd.c + +clean: + @rm -vf *.o main test core libpwnd* vgcore.* + +run: main + ./main + +gdb: test + gdb ./test + +rtest: test + ./test + +valgrind: main + valgrind --tool=memcheck --leak-check=yes --max-stackframe=5000000 \ + --show-reachable=yes --suppressions=../To\ Students/DONT_DELETE.supp ./main diff --git a/cs235/lab03/sm/ll.cc b/cs235/lab03/sm/ll.cc new file mode 100644 index 0000000..61cdddc --- /dev/null +++ b/cs235/lab03/sm/ll.cc @@ -0,0 +1,158 @@ +#include "ll.h" + +ll::ll(): _size(0), head(NULL), tail(NULL) { +} + +ll::~ll() { + clear(); +} + +void ll::insertHead(int value) { + if(value < 0 or find(value)) { + return; + } + if(head == NULL) { + assert(tail == NULL); + assert(_size == 0); + head = new node(value); + tail = head; + } + else { + node * tmp = head; + head = new node(value); + head->next = tmp; + } + _size++; +} + +void ll::insertTail(int value) { + if(value < 0 or find(value)) { + return; + } + if(tail == NULL) { + assert(head == NULL); + assert(_size == 0); + tail = new node(value); + head = tail; + } + else { + node * tmp = tail; + tmp->next = new node(value); + tail = tmp->next; + } + _size++; +} + +void ll::insertAfter(int value, int insertionNode) { + if(value < 0 or find(value)) { + return; + } + node * inlist = find(insertionNode); + if(not inlist) { + return; + } + node * toinsert = new node(value); + if(inlist == tail) { + tail = toinsert; + } + toinsert->next = inlist->next; + inlist->next = toinsert; + _size++; +} + +void ll::remove(int value) { + if(not find(value)) { + // should deal with empty list, and not found + return; + } + else if(head == tail) { + delete head; + head = tail = NULL; + _size--; + } + else { + node * cur = head; + if(head->value == value) { + head = head->next; + delete cur; + _size--; + } + else { + while(cur) { + if(cur->next == NULL) { + // removing end ... + break; + } + if(cur->next->value == value) { + node * to_remove = cur->next; + if(to_remove == tail) { + tail = cur; + } + cur->next = to_remove->next; + delete to_remove; + _size--; + } + cur = cur->next; + } + } + } +} + +void ll::clear() { + node * tmp = head; + while(head) { + tmp = head; + head = head->next; + delete tmp; + _size--; + } + head = tail = NULL; + assert(_size == 0); +} + +int ll::at(int index) { + if (index >= _size or index < 0) { + return -1; + } + node * tmp = head; + for(int i = 0; i < index; i++) { + tmp = tmp->next; + } + if(tmp == NULL) { + return -1; + } + else { + return tmp->value; + } +} + +int ll::size() { + return _size; +} + +node * ll::find(int value) { + node * tmp = head; + while(tmp) { + if(tmp->value == value) { + return tmp; + } + tmp = tmp->next; + } + return NULL; +} + +ostream & operator<<(ostream & os, const node & n) { + os << n.value; + return os; +} + +ostream & operator<<(ostream & os, const ll & l) { + os << "ll {(" << l._size << ") "; + node * cur = l.head; + while (cur) { + os << *cur << ", "; + cur = cur->next; + } + os << "}"; + return os; +} diff --git a/cs235/lab03/sm/ll.h b/cs235/lab03/sm/ll.h new file mode 100644 index 0000000..60652bd --- /dev/null +++ b/cs235/lab03/sm/ll.h @@ -0,0 +1,42 @@ +#ifndef __LL_H__ +#define __LL_H__ + +#include +#include +#include "Factory.h" + +using namespace std; + +struct node { + int value; + node * next; + node(int value): value(value), next(NULL) {}; + + friend ostream & operator<<(ostream &, const node &); +}; + +class ll : public LinkedListInterface +{ + private: + int _size; + public: + ll(); + ~ll(); + + node * head; + node * tail; + + void insertHead(int value); + void insertTail(int value); + void insertAfter(int value, int insertionNode); + void remove(int value); + void clear(); + int at(int index); + int size(); + + node * find(int value); + + friend ostream & operator<<(ostream & os, const ll & i); +}; + +#endif diff --git a/cs235/lab03/sm/pwnd.c b/cs235/lab03/sm/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab03/sm/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/lab03/sm/test.cc b/cs235/lab03/sm/test.cc new file mode 100644 index 0000000..f9a60de --- /dev/null +++ b/cs235/lab03/sm/test.cc @@ -0,0 +1,174 @@ +#include +#include +using namespace std; + +#include "Factory.h" +#include "ll.h" + +int main() { + LinkedListInterface * lli = Factory::getLinkedList(); + ll * myll = (ll*)lli; + myll->insertHead(8); + myll->insertHead(5); + myll->insertHead(3); + myll->insertHead(2); + myll->insertHead(1); + // should be duplicate + myll->insertHead(1); + myll->insertHead(0); + assert(myll->size() == 6); + assert(myll->head->value == 0); + assert(myll->tail->value == 8); + assert(myll->at(-8) == -1); + assert(myll->at(3238) == -1); + assert(myll->at(3) == 3); + delete myll; + + { + ll ll2 = ll(); + ll2.insertTail(5); + ll2.insertTail(6); + assert(ll2.size() == 2); + assert(ll2.head->value == 5); + assert(ll2.tail->value == 6); + } + + { + // test for negative insertion + ll ll4 = ll(); + ll4.insertHead(-1); + ll4.insertTail(-1); + assert(ll4.size() == 0); + } + + { + // test for duplicate insertion + ll ll3 = ll(); + ll3.insertTail(1); + ll3.insertTail(2); + ll3.insertTail(3); + ll3.insertTail(4); + ll3.insertTail(4); + ll3.insertTail(4); + ll3.insertTail(5); + assert(ll3.size() == 5); + } + + { + // test find + ll ll5 = ll(); + ll5.insertHead(0); + ll5.insertTail(1); + ll5.insertTail(2); + assert(ll5.find(2)); + assert(ll5.find(200) == NULL); + } + + { + // test insertAfter + ll ll6 = ll(); + ll6.insertHead(0); + ll6.insertTail(2); + ll6.insertTail(3); + assert(ll6.size() == 3); + ll6.insertAfter(1, 0); + assert(ll6.size() == 4); + ll6.insertAfter(1, 23); + assert(ll6.size() == 4); + } + + { + ll ll7 = ll(); + ll7.insertAfter(1, 0); + } + + { + // test deletion + ll ll8 = ll(); + ll8.insertTail(1); + ll8.insertTail(2); + ll8.insertTail(3); + ll8.insertTail(4); + ll8.insertTail(5); + ll8.remove(4); + assert(ll8.find(4) == NULL); + assert(ll8.size() == 4); + assert(ll8.at(0) == 1); + assert(ll8.at(1) == 2); + assert(ll8.at(2) == 3); + assert(ll8.at(3) == 5); + assert(ll8.at(4) == -1); + assert(ll8.at(5) == -1); + } + + { + ll ll9 = ll(); + ll9.remove(4); + assert(ll9.size() == 0); + assert(ll9.at(1) == -1); + } + + { + ll ll10 = ll(); + ll10.insertTail(4); + assert(ll10.size() == 1); + ll10.remove(4); + assert(ll10.size() == 0); + } + + { + ll ll11 = ll(); + ll11.insertHead(4); + assert(ll11.size() == 1); + assert(ll11.at(0) == 4); + ll11.remove(4); + assert(ll11.size() == 0); + } + + { + ll ll12 = ll(); + ll12.insertTail(1); + ll12.insertTail(9); + assert(ll12.size() == 2); + ll12.remove(1); + assert(ll12.size() == 1); + } + + { + ll ll13 = ll(); + ll13.insertTail(9); + ll13.insertTail(3); + assert(ll13.size() == 2); + ll13.insertTail(16); + assert(ll13.size() == 3); + } + + { + ll ll_14 = ll(); + ll_14.insertHead(9); + ll_14.insertHead(3); + assert(ll_14.size() == 2); + ll_14.insertTail(16); + assert(ll_14.size() == 3); + } + + { + // test enforced by assert in clear + ll l = ll(); + l.insertHead(16); + l.insertTail(32); + l.insertTail(38); + l.remove(38); + l.insertTail(9); + } + + { + // test enforced by asserts in ll + ll l = ll(); + l.insertHead(16); + l.insertAfter(14, 16); + l.insertTail(17); + } + + cout << "You passed" << endl; +} diff --git a/cs235/lab04/ExpressionManagerInterface.h b/cs235/lab04/ExpressionManagerInterface.h new file mode 100644 index 0000000..6140d01 --- /dev/null +++ b/cs235/lab04/ExpressionManagerInterface.h @@ -0,0 +1,65 @@ +#pragma once +#include +#include +#include + +using namespace std; + + +class ExpressionManagerInterface +{ + public: + ExpressionManagerInterface(){} + virtual ~ExpressionManagerInterface(){} + + /* + * Checks whether an expression is balanced on its parentheses + * + * - The given expression will have a space between every number or operator + * + * @return true if expression is balanced + * @return false otherwise + */ + +virtual bool isBalanced(string expression) = 0; + + /** + * Converts a postfix expression into an infix expression + * and returns the infix expression. + * + * - The given postfix expression will have a space between every number or operator. + * - The returned infix expression must have a space between every number or operator. + * - Redundant parentheses are acceptable i.e. ( ( 3 * 4 ) + 5 ). + * - Check lab requirements for what will be considered invalid. + * + * return the string "invalid" if postfixExpression is not a valid postfix expression. + * otherwise, return the correct infix expression as a string. + */ +virtual string postfixToInfix(string postfixExpression) = 0; + + /* + * Converts an infix expression into a postfix expression + * and returns the postfix expression + * + * - The given infix expression will have a space between every number or operator. + * - The returned postfix expression must have a space between every number or operator. + * - Check lab requirements for what will be considered invalid. + * + * return the string "invalid" if infixExpression is not a valid infix expression. + * otherwise, return the correct postfix expression as a string. + */ +virtual string infixToPostfix(string infixExpression) = 0; + + /* + * Evaluates a postfix expression returns the result as a string + * + * - The given postfix expression will have a space between every number or operator. + * - Check lab requirements for what will be considered invalid. + * + * return the string "invalid" if postfixExpression is not a valid postfix Expression + * otherwise, return the correct evaluation as a string + */ +virtual string postfixEvaluate(string postfixExpression) = 0; + + +}; diff --git a/cs235/lab04/Factory.cpp b/cs235/lab04/Factory.cpp new file mode 100644 index 0000000..508b2f8 --- /dev/null +++ b/cs235/lab04/Factory.cpp @@ -0,0 +1,22 @@ +#include "Factory.h" +#include "expman.h" +//You may add #include statments here +using namespace std; + +/* + Unlike all other documents provided, you may modify this document slightly (but do not change its name) +*/ +//======================================================================================= +/* + createManager() + + Creates and returns an object whose class extends ExpressionManagerInterface. + This should be an object of a class you have created. + + Example: If you made a class called "ExpressionManager", you might say, "return new ExpressionManager();". +*/ +ExpressionManagerInterface* Factory::createManager() +{ + return new expman();//Modify this line +} +//======================================================================================= diff --git a/cs235/lab04/Factory.h b/cs235/lab04/Factory.h new file mode 100644 index 0000000..21e6f9e --- /dev/null +++ b/cs235/lab04/Factory.h @@ -0,0 +1,22 @@ +#pragma once +#include "ExpressionManagerInterface.h" +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + createExpressionManager() + + Creates and returns an object whose class extends ExpressionManagerInterface. + This should be an object of a class you have created. + + Example: If you made a class called "ExpressionManager", you might say, "return new ExpressionManager();". +*/ +class Factory +{ + public: + static ExpressionManagerInterface * createManager(); +}; +//======================================================================================= diff --git a/cs235/lab04/Makefile b/cs235/lab04/Makefile new file mode 100644 index 0000000..84e1915 --- /dev/null +++ b/cs235/lab04/Makefile @@ -0,0 +1,35 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=Factory.o expman.o pwnd.o ignoreme.a +EXE=main +all: pwnd.o $(EXE) test + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +main.o: main.cpp Factory.o expman.o pwnd.o ignoreme.a +Factory.o: Factory.cpp Factory.h +expman.o: expman.cpp expman.h +pwnd.o: pwnd.c +test: test.cc expman.o + +run: main + ./main + +rtest: test + ./test + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -rvf *.dSYM + +drun: main + gdb ./main + +debug: test + gdb ./test + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/lab04/Run Test Driver.bat b/cs235/lab04/Run Test Driver.bat new file mode 100644 index 0000000..e49a2ea --- /dev/null +++ b/cs235/lab04/Run Test Driver.bat @@ -0,0 +1,32 @@ +TITLE TA Test Driver + +@echo off + + +rem setting up environment variables needed for VS compiler +call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86_amd64 + +rem compiling the .obj +cl /EHsc /Fedont_run_me.exe Student_Code\*.cpp ignoreme.lib + +rem if compilation failed, goto error section +if ERRORLEVEL 1 goto error + +rem cleanup unnecessary generated files +del *.obj + +rem run the driver in another window +.\dont_run_me.exe +del dont_run_me.exe +pause + +exit + +:error + +rem remove any generated files +del *.obj + +echo ----------ERROR-------- +pause +exit diff --git a/cs235/lab04/bin/runner.py b/cs235/lab04/bin/runner.py new file mode 100644 index 0000000..e322166 --- /dev/null +++ b/cs235/lab04/bin/runner.py @@ -0,0 +1,7 @@ +import sys + +from shunting import shunt + + +for line in sys.stdin: + print shunt(line.split()) diff --git a/cs235/lab04/expman.cpp b/cs235/lab04/expman.cpp new file mode 100644 index 0000000..4588fef --- /dev/null +++ b/cs235/lab04/expman.cpp @@ -0,0 +1,274 @@ +#include "expman.h" +#include + +const string OPEN = "([{"; +const string CLOSE = ")]}"; + +bool is_open(char ch) { + return OPEN.find(ch) != string::npos; +} + +bool is_close(char ch) { + return CLOSE.find(ch) != string::npos; +} + +int precedence(string ch) { + int status; + if(ch == "(") { + status = -1; + } + if(ch == ")") { + status = -1; + } + if(ch == "+" or ch == "-") + status = 2; + if(ch == "*" or ch == "/") + status = 3; + return status; +} + +void process_operator(string ch, stack & operator_stack, string & postfix) { + cout << ch << " this is ch" << endl; + if(operator_stack.empty()) { + operator_stack.push(ch); + return; + } + if(ch == ")") { + bool validity = true; + while(validity) { + postfix += operator_stack.top(); + postfix += " "; + operator_stack.pop(); + if(operator_stack.top() == "(") { + operator_stack.pop(); + validity = false; + } + } + } + else { + if(precedence(ch) > precedence(operator_stack.top())) { + operator_stack.push(ch); + } + else { + while(!operator_stack.empty() and (precedence(ch) <= precedence(operator_stack.top()))) { + postfix += operator_stack.top(); + postfix += " "; + operator_stack.pop(); + } + operator_stack.push(ch); + } + } +} + +bool is_operator(string token) { + if(token.size() != 1) { + return false; + } + if(token == "+" or + token == "-" or + token == "/" or + token == "*" or + token == "^" or + token == "(" or + token == ")") { + return true; + } + return false; +} + +bool is_int(string token) { + if(token == "") { + return false; + } + for(unsigned int i = 0; i < token.size(); i++) { + if(!isdigit(token[i])) { + return false; + } + } + return true; +} + +bool is_valid_token(string token) { + if(!is_int(token) and !is_operator(token) and !is_paren(token)) { + return false; + } + return true; +} + +bool is_paren(string token) { + if(token == "(" or + token == "{" or + token == "[" or + token == ")" or + token == "}" or + token == "]") { + return true; + } + return false; +} + +bool is_valid_expression(string expression) { + stack temp = parse_expression(expression); + while(!temp.empty()) { + if(not is_valid_token(temp.top())) { + return false; + } + temp.pop(); + } + return true; +} + +bool expman::isBalanced(string expression) { + stack s; + bool balanced = true; + string::const_iterator iter = expression.begin(); + while(balanced && (iter != expression.end())) { + char next_ch = *iter; + if(is_open(next_ch)) { + s.push(next_ch); + } + else if(is_close(next_ch)) { + if(s.empty()) { + balanced = false; + } + else { + char top_ch = s.top(); + s.pop(); + balanced = OPEN.find(top_ch) == CLOSE.find(next_ch); + } + } + ++iter; + } + return balanced && s.empty(); +} + +string expman::postfixToInfix(string postfixExpression) { + cout << postfixExpression << endl; + if(!isBalanced(postfixExpression)) + return "invalid"; + if(!is_valid_expression(postfixExpression)) + return "invalid"; + return "h"; +} + +string expman::infixToPostfix(string infixExpression) { + cout << infixExpression << endl; + if(!isBalanced(infixExpression)) + return "invalid"; + if(!is_valid_expression(infixExpression)) + return "invalid"; + stack operator_stack; + stack expression = parse_expression(infixExpression); + expression = reverse_stack(expression); + string postfix; + while(!expression.empty()) { + if(is_int(expression.top())) { + postfix += expression.top(); + postfix += " "; + expression.pop(); + } + else if(is_operator(expression.top())) { + process_operator(expression.top(), operator_stack, postfix); + expression.pop(); + } + else if(is_paren(expression.top())) { + expression.pop(); + } + } + while(!operator_stack.empty()) { + postfix += operator_stack.top(); + postfix += " "; + operator_stack.pop(); + } + cout << postfix << " final postfix" << endl; + return postfix; +} + +string expman::postfixEvaluate(string postfixExpression) { + cout << postfixExpression.size() << " size of string" << endl; + if(!isBalanced(postfixExpression)) { + cout << "not balanced" << endl; + return "invalid"; + } + if(!is_valid_expression(postfixExpression)) { + cout << "invalide character" << endl; + return "invalid"; + } + stack expression = parse_expression(postfixExpression); + if(expression.size() == 1) { + cout << "this is here" << endl; + return postfixExpression; + } + stack numbers; + expression = reverse_stack(expression); + while(!expression.empty()) { + if(is_int(expression.top())) { + numbers.push(expression.top()); + expression.pop(); + } + else if(is_operator(expression.top())) { + if(numbers.empty()) { + return "invalid"; + } + string r = numbers.top(); + string l = numbers.top(); + numbers.pop(); + numbers.pop(); + int left = atoi(l.c_str()); + int right = atoi(r.c_str()); + int result; + if(expression.top() == "+") { + result = left + right; + } + else if(expression.top() == "-") { + result = left - right; + } + else if(expression.top() == "*") { + result = left * right; + } + else if(expression.top()== "/") { + if(left == 0) { + return "invalid"; + } + else { + result = right / left; + } + } + expression.pop(); + stringstream ss; + ss << result; + numbers.push(ss.str()); + } + } + return numbers.top(); +} + +stack reverse_stack(stack s) { + stack r; + while(!s.empty()) { + r.push(s.top()); + s.pop(); + } + return r; +} + +stack parse_expression(string expression) { + stack results; + string s; + for(unsigned int i = 0; i < expression.length(); i++) { + char c = expression[i]; + if(c != ' ') { + s += c; + } + else { + if(s != "") { + results.push(s); + s.clear(); + } + } + } + if(s != "") { + results.push(s); + } + return results; +} diff --git a/cs235/lab04/expman.h b/cs235/lab04/expman.h new file mode 100644 index 0000000..195da1b --- /dev/null +++ b/cs235/lab04/expman.h @@ -0,0 +1,28 @@ +#ifndef __EXPMAN_H__ +#define __EXPMAN_H__ +#include +#include +#include +#include +#include +#include +#include "ExpressionManagerInterface.h" + +using namespace std; + +class expman : public ExpressionManagerInterface { + public: + bool isBalanced(string expression); + string postfixToInfix(string postfixExpression); + string infixToPostfix(string infixExpression); + string postfixEvaluate(string postfixExpression); +}; + +int precedence(string ch); +bool is_paren(string token); +bool is_int(string token); +bool is_valid_expression(string token); +bool is_valid_token(string token); +stack reverse_stack(stack); +stack parse_expression(string); +#endif diff --git a/cs235/lab04/ignoreme.lib b/cs235/lab04/ignoreme.lib new file mode 100644 index 0000000000000000000000000000000000000000..57ddd835486fcfcf65f7e8fe15445c53df0ac3ff GIT binary patch literal 893950 zcmeFa3!G$0Stpu3Jq*L3%mA}G_-wJj0d%O!s_N?IRVUw>l~1~=d%9utkX3c6I%l#n zYcjK@y9Y#MSY>Qk6kn?==;8x(eXR=$hzQI8qbSPa?<$D9-23zHqOz;5crSWa=KjBU zoD*?QoXnHwWJ4m8Gu4%K;{Sc|#TQ?E@x|jreA5fsgPn^ny6L$m^v}}r%BiKb<;Arn z{rRH!b8TsLWsQA**-fd`@sFmiyS??;&tp1x%m!v*1Mhr8>bl2%9@D{NHt?7Y{0p^# z8{VHyJ@)gM4j!|C$86v+8+gnHzT9o#E3N$c`eLr%8}_@-X6JrqU|BCNWHMH{T((}4 zLfYm||Io?xyL~T(B`mEk*qft4r?+q4*X~;RbL$K3ZnwYF9s!xRhNE4};{P&!=ZP6; zw%fzbjy+_AR{rez!p_C^z#a|SozYN|`BnF9;)75IVS=`uYBDGlKh=pQfeR+LVhZozOu4P@w zoQM1gib>ktJlffD9B6PR-0VVs2;mdRL{)g+u99eWxjoq3qoTq9D*fTMRp!;4zH^2C z9<@h~wUoB9fYz@Zjt0qdZWS_ls>j*z%Tir)evSUlz#(}JMQI*7y@UR)Tb4$D;2d__ zJCVR=+P!;-X=czFT|96`FnM9(IiajF=_ec}8c=!ytPqV`F&eBC4JPY*f^3y&+%}@Y zs?lKeXs|{!STh>Tj#vgXAm$b))vB$Dw>jGF^i398JQ(eD+xtV=+O|5oSCTij^LB$b z^!D!EN5j!x$La1y$Q{0)P__OJ+>GP;1hSF#;h~9vuYt9P!_IyWKtqSHnK_?<56Gb1 zk_(E~Vz(`8`JCQSWK!$f?cMFp$Rv;MyQmaV%f9XGn;337&ON)GfvBGCPOm+n`UyBq zpCY#V{cgK^c(HB5`s$qZq`)O|?Vdy2>36$Axu%LlBtQi)RuK7U{*%pf``H;?Ib_b# z$m)ptg@7t_mF+qrq98Vb;DYr@lqJt@*V!>~^eJq&vyVVyX%W!g(Sb97WA1hiDE3et zb2v)%%i$>1Er+92uN;n2opLxz^~vEV)g_0cRBslJQhixCO7+L#DAnJEqf~Dkj?$d* z7+5sCgnE@0I>k@`T2 z@}mJemoZo|_;a84-Rt(-kt2$IXOue{4Euu%Eeu~U5-QUeV87pw)`4Ga9*qzIpo2JH zK)-*nJ+yb7UVm^9(A%9WOfHd(vFVkrW3d5@pNQj>79EAu?)HbnK&EyBk&(w=0R=K~ zp`G4dr`H)>31_Aw!a3c0)Nw|3qumH+<%5LtqOh&qrFnp{{0y)Vp3db6rgYJ{%*Z1^ zI}}w0LJeQk)#;6#0m@;5`mDG!w72_5y@A1=KXx~$beFc6NZz$`Xrp}*(c#-?>-49d-zE>*~?GD$)0`^PWJYbaI){5 zgmZi1iNMGlWsoqDqwJM^z%Y{&Ccu(IO>TJT>~!Ez?;qn|0+{IBOjg`=_KZVfpW{1d zU$))gHqid0z0;6?JW^WxWTdqD$w+DSlabQyCnKfhPew}HpNy2&KN%^lbuv%xQ#BEv)sBEtj>bm>fs&T!b?cW7C`IOliJ>DfvN1I|J#zyz#Tgb7%!5IWYV zWd#z{NSKg8WSEFSWSD?vEyGGjV%E?!i`GMWSPk_0qt4!y8Lc3R&?YReK0;JOi0$h> z`WTQIP`*HX(BAD_Hflpj33PX4lS;a;lVhpQ5M65aXm5|!II*tA7dQv(alSLe+78#2 zc;4B+XcX61r~!=x#F)`r)uzeb`3@nQXy`WlqMw(&$It(>c5p1vqMN zcO9Ed0r~SOY8j5$RT$Bza}e63MxEZ39vq*&?d)MSFkqxC3N(TO^~<4y_F>4(09FfS zQW)(~&u9X^=5&M!gYBce2+BS>Jah&-w0JYQ60zccL^xEVvp;Be?H%kO7`0KUc6DJf zV_BoYl9&-?S{;LLEG#anaGDnx57*ff{t|W%FjKC>7;PJCx?O8!Wv#u44;J|s)=!!@ z8gLOWWU#p8uGwP+8}tWZdlRfhi_nN1Xcd`kAM8)%g$-TE*bS^w`8F^tf=B|*g7^rQ z#Eu7#UAzSzFXPiuB|IH%PsZ#eEKi&9x>sk@ZYNo^78bC4M71bu=8KfQVnkn92`FQ- zRH%U4rk&xtcO1D3=K}Ug(Bc~X%OP-jm$3Q6@>#30)#pNnD^_2wbDK$qfg-0{dHDp~ei7aOuLn=LAN5uSaD zJzKtdMw=%uMoccW2R&&g-u5n}7*}bTB#R!o8N_yKfkixRF`HnbaIGuZC1pr@oFO~6 z$Ca)@sHuiLNlt#McbYdcymgfRYrnXD!iW%?co3k6aRijVVMvyNGUI zoVkyDS}g@_#S?8s+WfQ;rQ6EM38J&mJE57eRlVLxDQjc}2-#XE*?+Eu3WtWW0=tBiJ*z1YrTLmTb*KEfwbn2%Mi}+g49ORnp0IgGp4R@ zwby(e=46&_Ltpc?UHRDGaOLx0tMyV$O;)BF8m3GNwhNI$o9CBug<82;t<}&glpEUq z_@zRjzL6k0Krv6Rh}Hoz*HZXG_H#NxQ0-WVx0vRccMVh`>mRzb^K2 zt=cG63t9F)LWL*On+K|ltxP6gER^dOUPD;cl2%Ljw5nMY8j6BOkUJGVSJYwEY%SZY zY&19rNa0i7YQ3IowK91Wfs&AmKci-|RLHiPIpVMoNNp7xrDncfw$kiH32-j=6hnXK%EszNnLy~P6?BrCTwNWcqHcA#+_xdX4)<&98 zr?ahUp;6CdJq?o*0tR!sRL&JL8wF;@+#p$|FdJkI#N;9zN)zsvQjD)tJ$Wt*SXJGUp?#|4S~KmaC|(oR;ik8WXc&UQ$u;S3Y%M- z>#MEI=4K(U^UPY6av|3&H7n#n$Z}nHF;l4p;TyS1eq*DtVXdBAUp=`7JxEhzb-^^@ zYr@%_m1`AXPFO79HL!MSef2bGd5&NNBV9$#>~F2id8?4G%s#j|!Y6UdASsmRK6jQaTG?8;RH~KGf>89+ zFa@43EB{H9g3D87&oyC+78+Hvo^2N05f5IBTIM?p*H^Isp$lKMTIF)JUN7b~JlY2~ z8XE8=E0=Axn$4>4g`ToVw`eK6WNw9V6`C4jwqzCS)nYkUscBh@O^$}V%T_6m?xTQS zYH1NVS;Y@3c8SzOZIpgfD`Cp=`J`;wDrfU~^b%-UOX=km7}lxNa3l6hmQ z6;EVEax>PlYFXuCX#=e&W38YjQ1Px2pv~ZarfO*;s3jzm%^*dzPO1%6%i!2-Zj=j% z31IIoH+(0n;1{6EmnebUV^mSW_ep%s0_<&KeEW zeTpss85Q3AiLjE<6VF8ubLgZ1)o24a7A0smt zp4FHlw8y?|WwX_Cp;fFhdBKV^RLgDFhMDvFlE=FWpI9uG5Q7%6T@uqZ>#KO{?qVP9 zWZ;aB2H2ptzS=m8o?{^oXNfodFx9f z17~Nnu2e$HsHdED3xrFfrNo@YEi*1e=PgtvuM`UdftMkz~<}ATm1_55npC_ zV-Z#2da>Tf)bcI(9Y%_+*u*0WalvZjHd^Ieqa<@K(7GPx(?Y4;oNE?5SG|?bXH@U0 zwyl~~ZDcSaK=`=6wmCY&-tG~9C0A+Eb*q{Kn^G;S^_5(2umh?ae{c_)dcIz0)r%Gd zijWmRP62ye(tSqVYE;2JTl6vrdNCfLk*8NgYgo-zFV_?TghW}}+VWdsaPK$xk{ty(B$Hd^S^ z-As+JT0UE=)T$*fQ!}hq->8$H;@ps_QMOvWl&M$H+oD>y?}O&ytJQv17qfv_0t2;{ zU<^8A{;h1WSt*yZ9?Xz`3w>-6n!&)6nlS4uxx9M(1%Hum)N&a3AiQL9ik67K(8E*1 zRD}c_HP|S$%6_)`Af`p}ZLU@-7yUSWbcaqVpV_FC^94W78}O8Ta||?#N$){a*fft_ z^365S^p~3KpL6i12j?Dw2-6&dA7z+}@I!)g5{LuB|t)W36?`kupCwbcuB1UV)F3JimwdrbAKt^grLMq zl1XMa*&wx>7L=PMZDlZ@U^iP^nAzB*H^vjqBWF_UTbW#~xmmDVnKQFtS7~e&N`)CQ zYqkoF*@*^jXEIyOnaF16_}k?PSL<;~3ER?R=N+8wv1bL1iIz>#-JQdzoGtCyC1-?F zYy3`hGsCvNVCMdu#v@JZi04-Lf-IwD@45Sz2eTP;Om>da?!%kuZcZ96v1-I#z!$mT zjbuT&{yGxi3p+JFPbEYs67_3#5yO1;B@lbFe% ze@T^s#y=rN@a;H(lHG+hI+lVjEZdddn5sR`icXUr{u-rqdYmJn?28bUSm_NrSpQcP z9aluT&SO^&_b$5(Bd(TZuz66Fu-?80G3dYwIxQ^OWq1*rLnVud>t~X-mDsjgiEXPj zY-6((mg0-FtBDQ@3PfwH^3#SUSiq)F`;4;>&0;sVsZGg}ibGMf^?px>B30|Sn3*sm zI^T8Z)ls+k#j%R4sIBvZ_N;h`?Ng*X<4!8tu*ZD}PF~?JgeNLOhAkJvF;UyWFB(N$ z8_srh=^8MXjdI2^6I-EXd34Qe)Xet|NJY<HUMl zHa4gwmXvLh6IQx2Go}dNNaZYs^SBz194a#)ufN^CjpLPgprLv5I_fZwSx{8rSPb!E z{Mac*0zSgAhnLX7_=Yx|=VT1$N#`Q*Hw7TTsLx)rn7}aM%yh4s@C{mN zzVj5vp}0~+4k-DNDLCrG3lwBYV(ycoaZMmfr&2;bct=Ck059AoR|lQoVu0})-1i+A z8Fj=%7EDrfdP8U6DJo_m-H6AoiVhR+C|yJDj5oc#rZr;fe(VNT%8@f7(ftvbp}Emv ziIKaQ0}LGaR#|0F^98CiWi#=Tb>~W_Pp}SPCd$Zm4Y1_TwLiFBDhWDErN|9T781N`CFKY^dL=X*mEu? z5d|;F#w!SGo~JoP|L*;3TWd)I`kJuMOn+}MDZpnW&kiWrqyhEw~_lt zdPu8MXtnf+>=SE;u&E)ICF<=S-pLlEIx@;%dE^+>Py$<^g5LG3*nN9$NR>hc+ z_gKw`KQ(5vRT-BHe-(Op?-acW4PA>@qtiR=LF%C0>9H4>7imAM*YQ)oD`RWyGN2ep zP0q`gp%&JCgqZQ}_eS9A4D7=}|MC^iB_c1itDSzX&0m6q+*}tOD1Ji5;zcs(E+Hee zN~TwQ!pz-LtVWy42i`COnlzA6Ueu-mm5foQ4eRAQ&e-^P));PrvuFLxykiN=27UaM z;>4n!npRYK@<61h>)>$s+1)*4_dCt zoEul_*sK-h#OA@h-tMna4CixC;*TgLzCCP-(|Jo$ z1&Pg8@svrVbNd-{y#{+Io-g}1m^h}aL9kMSVB!S15~_`59h=9PQpV<~C?hrxO=pAt z6}e{>O~}_!D3Lv4+46KVB(^ZTKsx`}%mO6~8cZO+ASA#gwmgB%VsrA#WMebWzN4Rm z<<*qyUh#;YE*d-vd0NHGqN-=Z^Q^sz1D|lC9@f$94(5UBIzD^U-jAAJY#k}u_9-AX zOPtPTP+e?xT*8QYPne6M4Y%ROW_gYDkjz$Mmqt;IYACV!8MG6dS9B9en1!MQZXdDv zU5nzMwHp}2PjVzh?6$Cb)J2h(69)ydg1IJ-rwB|j&n`nsjV5-PStcw)wjWW?Gd5S6 z$>7o|lNs2Fi`@%57u`EeFJL87v?-mF%h`BZ$RF2gfhGdBR{^5{g-L9sFx`Tws^};}#Lf`*EVL=b zkIjn7?iYNlWm7@p&)iDE&$44Alkj4aV?hJPMc3)ZmWgXXorX)s3gg;jvVXwe;t~B?G(`mzP>pLE!lrz=B+~|jQLT$h z8JndXE3;E+O+}2&nOoB|`q_2%Y}!o6-MjGZqF(d6-|%r3p9@*F643D6T~79MZYx7(F5K_WJ?h!@heykM&S-hxPLO_maMoucd8Y? zw8{9o{efJbi_PxZdp~1+!s)b+x+BHeQGM`O)~_mG#YT03(esV1JZ93a&-2TjjIC0| z^Y1;4x}IY{sW^$)wZvMEIcSK@Q~F4u&vUrpfo=L1UQ7|2nu~nO*B*S}gfcKmX6juG zWty3cu^G9Q$faxV?$Vx4ypFN3kfY64@iukvYIIc?pAkPy-raw|Zu?;8x$+PwiF7lJ zJ6J(!Qy)31*h#S3mmVZ9si=n}jCjoH)`KS-cBH!O*~JcG!bL&ERtRIPu#e5i zXGK!B;2MCIBU`2oVwfttEir+c8zyZn3+CaLYZ9ri7POlga8s6z&EOV=g<^j)-a2rn z;>W+o$Ca$BIvGQ*a`FC+j57TKAL1$@NF0*8Of|8hyCCw;y+;lLV_X2F6cfew#uFNA zeb+6Pt79`^gHP2m;D;Q&CS)roJt*8{WubEqA6%r>ux^xnm6&7Q$1*+CzDZiYvIkQ9#z%vW3U8E+ z4<1-)e1Y$T*U)e;khrSFm5z6b8z=yg4<(o`MDH)TC*VO>Jd#Wr^Mz!P<*_Y zymJq$?1|N`s88yZQzxr2P|u+aX&tRB?%XaFGZWxaj(b&Efo)|1K+96nm6r^~h|e=# zo{@r3UPDw_ROH^c00-Ko;a>M=hvRrohC7qoyWsR!gOz?=jK_Ua<3QkegJ~v7D0Si% zFtd;-Xt$ow?tn&LPYcc*_zLUNeQ6Xk%5cY5!Z{w@xRTEQctnaCF$kw)rg>ln6BRT( zrW+rGhtS0hEe-4<#l#_WGZcd>V@zPldt`$kaRWh()x?0n^Yy5}IqbuOzJCV6o^oAf zFt*bY6NFaK=a*Axh2nk*gjP#|h)FpGMrk?5&`L>H0;fP=#9ip5h-gWVdOY4~Y;eUe z9mf{YzbwXI#v@v*JI{Ac;s|l>YPpLD^R(#cy^utoexS8A#BTC5EL^@a{UQu`4#9^n zqOF7%890g+)sXR|EJP$ntz^c>xVR@Vxel;_h3OZ}=Gu0XEQPwm*eup)wIQ@PVP}0k ztD7P}&Xb?VyN*laVg%b+SOz~2G@QXa2BJ*v*n%zbNXS!}8+4Bi)+tkdDxab(mo&CC ztmg!^=L3?lQf6hC#Id<~YKk>YB76?>vV~-Ri}AoMF#g4&3Dt$;ir~z|^pk-+wq~wr zm1$C6n6l8Ws~4p<(9dJ3{bIi)VX+PLUkb&h+myxNY|;_Q;vNu>Aj)XYL=<-n<>wVC zJTMW>N`QzXIKK#Shi@LA84PqZX4(w4Oc@ssON=oXmWg`oAfBFb?JbJ=tns_OHKMq+ z=jRp4d`v_M1)$5o7junP1IHuh@P?9d3EfhzR?XFMHLXS0=BWw!d=7VX^GeS^9Jra1^-;}P@_rXR@K_ZMz(5okMx8b?yzmNT2-s&ODJTTkPMd* zclAs2(&b9E)v7l^;ZLa7inw(aH$kHyzKi?P)jV#!F5zR%m!j16X;r zo=X@-mE(xxmLiO2B$bXMp0z++L6Ig9O$r7%B#JRb5YB9jEC`0Y;f6Qm5Y*QU`ZoV< zjpms=wHV|2I=_g5etudMrzDOuZUttvYb9MbX_2tB=3bzwnXI^X zaxG&mv)eUIiOS`h6Oto#CH~7U-Nq8d@W&CyHM=mLk($6b;#mt6u`z^+6t_hL`OTnN z7@2Bq!;cu(K>S!^EAfN$rsAgZ#t@!Zq;P#ITgSDnhNgq3({d5`=nciogIE4|%8=fl zYsO_YMYGUolC=hx6)(aVzs?tAeM0l%kD;1W_L-SH3IbjROHWTW@bnnFPMa(i*X;VMmd9A$vdQw? zHBKakjb6CDh$*Kt9z_%@Gg8H^=m4`wmS&`ynFtZBEg(c(ds7(Az~Xdnn$5XM9#zX7h0UZ%sQJ-okQ=PtHqboV0N(99Oru{woH z!6BD(yh_b3gT(+h_G(C)A7^D33UxcbiK0&2xs)!`<+eV2?EJ6U(i<1ExOYIet<9ii zU}2pdrvhc?^K37KU8EOjXT}`sgww66;;@YXGy1cy1nuU9J_zW}< z{l;;2TRC#n{6}2<)Muv5?F&3@07;iB7m{I$w5&29%z7qWo zz0jq}Gy^xoSi{?TZv=@hUI^~@D<-_Srk+u_&XILBsvd^8ns)A64(`y4e=dsD+ml_9MDZKtV+Mx0Jo^LO?CtELmCb`xe0+7rp+Mk^E03(QGw!vwbGsv%bzQ>3 zHgT^lg~{%|y6Mihp|La?_qeg1=sG54G=Gs8^WbXv=1N4N)~(Ji%`3P)Ui=`8#dLz* zxcc-(KN`hcX~--nyoA;v&@hR2|Dq)G-E3Jco$aCLOAzRs$1UqHnh3Rwh=Ap&QOsj4 z`vjfiN)(ccZ8kJ+@OIqLoRAkj;xBr@J#`p9S!MV$i_I-9UIsUcsZO&fuc>R92Qgz= z#uk)$1uf^;tXu&P51k%GM5-4KTk}9}UVVEztf;f088{3dZ0xGU6qGv+ZM?{v41*g7 z18>s-5)oRo$cD}NXf&~v!1SpVDj6%~EfubjxN7B>qVKd1+dG}nT+hAJw4z-lKfBX) z+5^K)>*v|r$WH&@us!h43{Gum*mF!FJ=quw_SpHRx>d4D74eUENvRnfY`DHAMlU`F zL1~=$iX7N=rJ<4}G$pMVv3Ute*$t2LE-6iS(N(CBbJsEYVsaXu`=h$yZe%=3Y~>kj z0r|ydCtYqx;euvn$Ug|0z%{nChRkF0@?_lU9N?Jh!#>@n!$!SYJWI}mx%XXn(NXPh zv?jrPfC*eo)9@tsAlqg2EZbu1Q0_v3Uvc`u46f-Yn{_ zS@dnTT-9qIP*36?4iS#c6UB>Vc&EGDx7joi2BX(7iW!VwIH$5T=eSN0$gvY9=2Uh3W#f4jZk`(i zUwDM(Mi=`>!**|XXbJ4EO_Hs2aX5}||?zKBzwz4=)9LCzE z*V@O$wuDL?+wOIePxaAs4~^8>WFJKrvtladif6@+ritw8k|Lq83JJ!cRF#CrMxX;) zlAW@nz)B38=o&M4m`NR8?Cf832Cad!V;Q#>)0&Xo$g`s0+|!u^^67Jn?skPtYF)C` z`f@+!U>lqErqm+6RePR{%gv1{1bY}em$&*Yv@Covmzp-hBxoMIgG?{8$)^skICUkT z_yz!5koFDxCqxFA4q;=4PH*T8ysY?U$*HGAmAQAmWxF%X;&%Do4&0H^LP%G3BbldW z^)k$L`zV1q7h#7SSabGq{ew{&j+=!vwf?1XS@0GyY+}75g3Mi#xOq70;L4nFT$2lq z_00XzMc3eBT7jH}KWJaJhn@TNrMZMcdfgP8=vT6c5c?Peo8PF$Ane?(#~+yfVz_0#8{5Po)~*fm^ql1(jms!{iZ7LsMRKu*Q}8R}x5prjU?mMs~4JW@r zlPiZuL+W)0r_e-QaPVfnn^BDm(`|6FRZTw3x~I43gQ$aYiyLS&ZmKu^2Mb z904ZHXgPr|Ee)L!Eiq43Uvjn~zsOEw2a9-9RV2kMSkUl(c#&Rb>|NQJwlHLTyek$X z)+vUQ8bvbit#wt&SScNW97+m7V?-H74$0&L^<0M-z9P@D<8>wNckgrRA<;O^Z6%$R zESK5D6{dyU=0zPG{2KnnL}T;-%$>$bAQE3vQH9~MO#kw%+g-coU{l|ieL-OqxeI97+QeEzidx2i~ZGOwj9jFI*(#cwvpW&^>!0X*M)M3 z9S|{NzJ#~M>Gd1lXeTa?FxzJSOA_vkt{mcSP&s)6(`U(-hx^XRW6WLK7^lMNc>v)> zRF{X?9~PSn)(dG1oNXVphxb@k!`aXGkG8vxg-7tTU2FMNyM21Ky}G@&cWSM@xaU6K za~9Q)_k2%%yeOZqq!-ie#nrvENOhmDEibR6PcE&cch**RPo=TP9r=!&db`)&$C?FR zNgnkFS1fCjHl>^!cLWit|EA}j&_7GdE2oy$mKWES^yiD>&y%N5E-ka~FT3gbR4UcF z{kqf}-g#Xr`~DkJdFv}vA3dH*9asLlE=B(xXa9QNRK&IaJ~>}cLccVg{FFjC|9{8u zgns0IoI?MX(!4w*Pf5Y)b>75Lf5K5RCqIAhZ=RP&E5FfiLV3A*-^|ZFtmN+Jz!5Ul zoP$g~#&V~BB^R0E{pKnBZ;sc~)O0UpHs3sL=-*6QkaFlqdMclIGI6YYuKvDO=%{>y zI44Q6yA59 zi;m?vd9qTfCyAFE(ekozsp&6HC1pI8x?Z8Ar?PEwgvTrXH_pk^smz;xdpgt8Wev&S zlq$bVdagB2CriqIOKq5B_Ne(c&e_xNI9d}w^D|jCbLzOKyoR`JCLGs;Op&EA|5i&S z%SGj-=aPf8J(;8A#PvctC#1^BZ$+FN=gWDMjGT(o(Rbn_^Wdrcsb`NKhu}A&lrnG) zT$fs3Us%UJ5Os2!0wfu5;bsp$iLcJiFR^_uLBilGC2R~Ckyo+-h`$60xw(slf#N4* z?CCBcBelk+SA4?E-BPSZTh9TWY4ien@z)&>@VGr}N&=@WviBy>EiJMW`y?43#fMR$ zWU8%V8EH|P>opb@qw1N7deXd1X40ZqzX;O@iZ2ACeTy_bfrfhu!zfW9Y*VUFX^Z@T zO9nIx;v?|tSF(#YP4h*}SkcbusM%#gMDSM@gzOWKd z7YHZxMa!Qu7BcV#Y-hT(=M~#J+;+^SHRu{%(Z)T9*PpY?dR<@$HeuHw+zOcE|Jb}1 zaWsTr0mb_ZJ+{ANg$yDD$Fl}@v87~Xm5y`<#U&#XWzAtDsg1ombe^2rpRp{-7~G1- z4rtP|3L;bW&N9GxS7vTOB`F08CZ;WRf`O>uK(;{w&W#BZOcZYAY6C%6QpaYkC?_@#-nGxY2KhM+bF0DZxjEM$JLY0e)yE@rU4d9A*%?{7lQK9Y4vTI4 zOd+gSRGMcpC#?6ebd-I#3l8-Nc?8c?TH(meTo{0r!25QAUS`o`w#Ii*b!yjfyY+-nTbpElK1xgk)m_U9(NPtUhc>j z=BGr1pBK7%HRZZjQD2J&k3ybS@v^Au+3-ATZ|>lgxPgr~f!)(l>`{9^YJRbGq-fix zfY>ZCrD9NBY<672h8hQJ1FxUXvm-r$MCT>0m=Ug=gE7hPfk_E82S&e5BrRO%LPx|k zlox_9>(PSy#v~c*|A|zVk?yq#_wYaxSj=^*OkyjAsTxdGMMn`Lc80KLp-riS*sPfB ze!<6DHWf7fT8$L^>;c{$rK*d~i@S%pzJ-EaG#|TwOH4iKC5vy(hsB@m(P;$sPXCZc zy=2JJ>hYca6u%ZtQ2_;1y1?l9##SCPY1ilZMZWb1D@ed;4)#$1) zJ|l{C*gg_2o_ECn4}s$CnBvmSFz#Rs<$VaTt73`8br_oPvhMWRBga7)fC5e9A!XGS$RtG3J$mOpS}e zNycWvrVrHi5C7_5lro8L>^8*=5!9ZKNXE*Ij;Y&;rjukDUNhMvS4C&!4BB`*)0%MX zScowHU}PPOWX5@g zy+IV@vc%8N@}!yc4w6@kNz0w=FdI}DJNe6#oGWnR(GiBao>pm|4)_pC>CF;29aGat z%Fcby#kIEhWhGwx$T>~tQyt#pX-;o#T&gj37qncD6(7;WQ&qtJ6G`G)q&D($E7q>{ zcW|bCA057@$OuQDDb8sQ5ApIULe{A`QqW7_$KH|IBpdvB9I4KY>hxa?XI4HxhMxoy z{tl++?hg#}o_rt~%jdKCDdZO8FgT_1Ikno^OyBrGJ%=_VcP%mHN;8_{L*U#>q1Unc zU1t-kp##fe;+Od`n(K?>j_FYfx`{m=POjg@5K=PW=3+eOSs_&B0O9;-p1^A#T!#um zxxrdxQ4yn8oUiNSfEISv?bz&aoXAPKHctev@3A+X-e_=z<>4J61y4KX6g#CXG|5K` z=q#o+@`@g`XuP)DyEY4cwak>!sR`f}i#d5-D6iDgu{(nSh9W!tT}NR~2lAg2DR|{` zpU!lWgCIU@NAH5-;3>wBMJkdX9h85BYm^bo`m-dai>`vk07-O30+LOt6*s%6Su+!n zS?gIU@l$|;OCoA2kjgD(aMT-h4jh}QLD7vy8wT=}KV&8q-re<|)nB-3&zb>hy$8!RScrOzt(gmx!`Cd~ze(It}&)L)QdMwu$| zm2i${hFnQEqtE5IH1j`o8Q*8`L2Ufb3KE;p^BF$mA?u9$D zRm@;qr>V$4jMEYmjG~~=FQ-uyiu)xnidr&^qPSs=8$v1VKQM&i)W!jnLZ%Fl0>dB9 zVbZu~$(@7nHwoi7Wzs%_NK7JmX~n7e1~E$c{R0>!DL5L@5=~4cTF^6#W-A_ zX`UHdb<{O8rtTmH9EG~4n_m-U=5NWZgf~LqXpRDfaHlFxN`*(RXOS77yNylWI>`>i zW74n+vtGg`EHYA_BnBYo-N9_G-8rc;Zh74~@$CA7K7ouI7udC3>siArh0QKPM3Qe_ zgk9gxF2q~U`aD2H2SOZPY-juZu8q2*b5L;E4C@yB3?rIaIKzCb!G0DNmu08_uZJ>- zT^+0|0`)Z*2s6233%10=Xs^W4CJQK2epP~^ESEI4G}l;7NtzQgRj4V62WC79GvHBj zE!@@l*ts2c=Q*6ISUEC~&u5k4bVg6=3sV-FUu`j#ejZD05SvehB{KYQ7nFqHxrF0uEF_vMY4DkQ9=Q7mc6)`YqT2K zOgV>DHq2guJt3dZRf?rT#zHWm@+uVS8<}FI zYOSC2B{YkzYA#bmCIt+8RGM5G`k6;!7pjXlCjVx@E1O))T6w zY90J?mZLwfL)vVnw1GTwzC0S)LL-;WRVb;dQKhrcR-=~9P*U;GmzK}hHa4l@s7btB%a7dNL!Xr`w=$W0u~4pC%j>JlTIMUYW@aOsujVbfEKEyUE#cFuW?=!aCYT2bM3#^% z>ac3ImTgux8k{-A_gT_vEz@c?Y9(v0-5vU}sMm9?RwhqP4^)uNC*EqaiP~(zaFMhS zNNp7xrDncfw$fCa#G$Rpww9}xH|qJODEKO?bf0)@`D%e$Q<<`G#h}6}Eo-fqD}h(0 z;(=DySJFOAzFBED%LNNb;3Z|!`IK^vasighq+Mb~_BGbEay?&Y=CDA{ECDj1vPrTH z`qyWbYxN9ju!?5d>0!~dqqme(h1N!`T-hjD=$qD8ciO{|Ci3ZQt6FH(Gg(jnq@sZF zo-UPhh0I2QIRoA}m`E^GE>cji(=h2=wOL^n2^cRb=dNnx^hUMWgs&-Di%c0(YgAy} z?VPSwtIguZMiau4`R8Eg)B<_61&kiT1zj{5!e)o#DHujz}Bl~So#%{HyQ&VA1M>S6b22=v8)r$Nhe1S44dDspCjYx3o+YBpcbqLo-|jc$D* zU*Ez%%}_1ntwO$%uQ&5lRpf+u6`^Eq?Jn_0WYWkN6R4_2@>UbQOSW04T6`XGa+U?F zltYJ{qa1}*k|Jf(VK&Pf5G)4I(Tu35%5z`C$`-9GdaP2dgfjN8&;#yXl)c*MXQ2Sr`UNb2q4kiaB%YaYJPwwJKKO(F zrX27r4IH%&nW4%tm$eGzRufA}IdqiLSXfge4$J}4bIuwK)P0IHDmr24Hvoh~9;Npb+M$|#J(sB!3pos!q?3k5$fR6di+IS>7p0Qz zF_172PAw|f<&WEP@>w+NYCUhkQ;haHm$&+r9)2;rv4|>hy;yH#YWWuY4kK-G9#M!3 zRwK93D(4y{nR5YQ+YxrjhElsZ*DQFhdMlsLsNPd;TQ#fN$Y2bJfOmaub998eY)3pk zQkrz#s^-9^RLg38CD$A5fa=EYSU^+H*9)zB(W1~6vbvo)>~%@^8Fi~s1$PX>+zf(V zOmx8d;H_abi{*R+t(a^B6EZL?SPRQhDM8b!=vbWm9A(^NK+bHJY zX=)V#10OT2(QH)nxr~6p2?#UQxm63L%ti~Hx|^vHR?BB=m0GprWom}i>Kk?PQ=A(z zHOf}2mooJVdRtTr_kGYje6`xo>S8t!OJE?|5{yA-%)gZ_HY??F)`J=HZ=sJZLNl0Z zpeD>ZOD?Y-vcX^E8?_vUYKUQ(oT4S-FZA%#FjXM|M-4U#t+Jo3KJ02y5S^=)%0)j; zAH|}R%4aqz<$S@9^M+`My2Z}LD3e{Zv4k(H+8SZp`6d&;NRwV+gfkEXt4%^9{o(kR zfoLlTZT6_JwSLQ{vtxPm_XqJR4RyA=Bw(GU3d| z$P&UYs4s1rp7t#2+09_O-pEv&w)Z2(P2c-VV4TMHgM8EZ{$&5OzCS%Uy&puFruqFS zeY)SD>fdRmR)k?mz)v1r8t@^`EaKQ_e^ISd6ev;>EXJ<%hue5bnXRR0DG{BEi6)9) z389PIf(`5CcI;f|r9sZSg^VTC)!(&!Fua znQ9Kej~M3#{8*za@PmB*z@O~z`26WU-{4OUI*1^`6ax5Bx~uS~8vKPH5_B3ag1d!~ z9FSNfhcZ>G$B@h5fbeu$E&?CjWq5h;W-y*IB--Vgaam2_AT*j}e!*qMi!i1K=e?3o zXkPp=RFleXX#5aqW^JDHGBow{j$wu6N5wzF(%JIkSMXF06xU`8@xD-qk@&Uh42+KG`W zuBir?MQSTXs+oxpvAqO@h}&WmMp~Oup3k7w=-jk+<0g%3IWEZ9cHC57>v5m^+mD+N zY%5BVskOMtdV6sn8(NH;7Hl&ti53Rv2D0;r2YB1zbvfmPBh3nL9_`RF-i)|yWw2|; zZnn0te`nLOmXpbsNv&^Xa<%4W!ER;F%!Xa1u~jG)X2h)7Dl}#%8n~UwY&B;ho1NM1 zAC9c>cN6gvXx4C)Ge2<0&RxW^TxY-Mjv->%7h40dtBdSKNxaRByTTILtK>&^Yv-Mv zfwPCriFBH{VLBCOGA*-rv4Dj1xSe;7-%g}ci|Do7*zG0F@8PqtVcE`aqNo!OaY&c5 z(4r3?JO69;qL~mAD_yfN9cDSjy@L_B&7hCM8$h&#!mf+Vvp00@;^EN@nX{RC5n^Ci zIQa}fTp6{T#+yl*b8c^wwjdv!jk&zM%*tPKMs!)FFXG+Iu-C)^J*Ty)G#&bMZbdi- zmv#o)n?6S^3W!eL$Bms~o{%cg>=j$WbaBzkeP+yAp5{u4Lq@P| zNN-WoPdmWOGW;|_%APi&n{yWu_S*MR+@j<<;V@#RlnT_xU$C}IxO8%7dV03ZDP=eu zIEk4I`j=EG5Xes%cu_}YH|#1u<;^aEp*`w@=iI(N&uXD6?Gf@Gv=1Tg#9oGVY$0Ux z*V(AjmT`>`4S!KeZE7cdCr*5TOQr^dCQ6-X<(hOT)Uagcl8y3FUUA!X0@^ z8+LFgqTb zxW_FXh96PdBW>Z}tr<6y)0o8y4*#jk6__iBK*X&D5pO76V|^C0$>K;5>H!3;W}nAvKb(j*>pFvz4{OL)81(TL*m8R(8i)G-IWx;*=X{?Q@kHRnSr z-o2k`_o!2_GlS0PB3|j}?AW70yE7VEIZ@wiP9_{CZpq=CuLfX25UrvHKW0BHc%wt(1xPnbn%>hL`^u=U-N9fKJAP{gS0Ph zvy?vKj5Blw%wf-Q*NWguxU@}7<PCiuiM@q%E9|q zXP1@+Z1vo1FUl6F2^QIyHPB=a8y6V(#T;p~09UZnq8>J$Ra3_qAv2N?in*#*v!HNo zTG$k*xcT-qtd`F9uzHnXuz0@fBwnY>ib18|6~SVR6!T~?K0)W$AY4f?28BmT~)U#Ycf8W zE%`Hx%}p-C7>lJYper{RX_*HxV_C)))E9t2!LeDn0v=NM7_b`O>`nU+vpHm5i42yX z(uippnjFS2>MgGgXS=#|4VcsD^BS=g?P|7awsCY6sdz@)Jkaq{t?^^PW%bRLw`v&I zgtIh^*)n$xWASrP<;;wj1Jn9+Owq*A%G(j@oT+JNqVv zn~rnOZf79IIoq9H8`rr_cIVqTQM}#76uSxQ8$9jM(c^?u2T!!$fsCH&R00xp4SseA zm)%R~w9MLv?VZjj@g_6uH(;l>?|A&?Hfp5u3u(Jf+glI9qGi~g1TQ){U*_waJB(Cc z=VZfHwvHQ~DyaM2u2|%M8ffIGbN$=lF+&*tF>5I%hLF7;E~XLgEnwiGKSmc8*a@VCEg$@fk#j%}YiY zUkZ{^yyD8qw!Ru|fNGWh$mJBiZdz~m+WVN_#p>3GF51IvQQXcE z^VaBU+&BMeJB!{^>^jD=jxv5@mdLF(1WW}|{0#o2CzD8Gn}xx|kY8+ea{LogxL^Y^ z_$O4jeWwX#H;xXJ>!uYRQOqxh2^wDz6EwXbCTMs;OwjCt zn4r-GF+r0HVuA)2#00A=hzS~75EHD=ASP&NL5#u744^1d8%)f=DQIAp(Y*Thq;9Y7 zc6)uB?c1l5t9g#vVin=oUYB^IV?Lp<+qcIjQIF z+u;}*<*<m1W*azNH70*gW@CpgA1dd^BwLc8B&*?!^i?Xg)*&w%_ev!ie9uiVZ~!G+{@Br0-wL9 z+_4Apa3aT0jEN&&^18;|*(JPHLF?a!u0|*!6u||?+#4G-qFZvrqJrDQM%jl??>Z3! znoe={eY@6gQuew-!)3j&}EJu&=#JAi!Sb_46JF8?`7{p`qznM z!=S`SYnudQJM*Ur*qJwDt6j`TjvH4ID)G2#ufsM&@s0yUp0t`KW;*ve$+yBlp;fWj zfzO!Fim8}@pA|dmZN;7m!P01yvQuV-VuM9ozQF1~(5!s(%Y2`1(B4?%-0Sw+k$1N3 z;ku`bZfl7AvXj`=LY*?_z^w2ByGmU)tx3%2p4iN}^b%WI!)vt%w5Mvycm&(h*;4F2 zjyjRVk>8nQ+5%EZDf+uy69YHERV9 z&x6PGvuaSry3?7n6~V_Mi}|hg^&n^RIj`Pv05p z>1HqKN70x?>6j!Z=Q8%Sgyy59hUTJRLh|T1JFBawLo-p6LvsOZhqmE_X+%qp#wA2r z9Efn#rB~K`>*ntAl~kPohDoF*hYF;ELgb--k%j3#dE~pwQk*cHTuhyWlMAYoaB@*~ z5>76xPQuB>)k!$Hz&Z&h7g;Cag|ubfoRMKfF=lNVC8Z% zj=SkNKfV%hfa7Fr2P?P(yv2+oi^M1v@ssj!$+~l;(MV0F}^dhG*eUqQ#r7;yzRnIl^*{ z^t=J8WQ7E^r`2Sv^i?{4t$Yc*$8z8dhuHW|!#(4h$OoOCt+b^;xU4mm30SSMOu%Z* zMaLT3vjPdWy)Yqz$S@Iu$S?uT?HT@XBwh%s8Q%9k=(D3*jDZEMjq@M*#zGI=!s@Hn zAK6$)L$Z+>z173!wt?&H;WdYuoN6zIEMYSBG4wRdL;1qOK09P<(rgtJH9(ZAod`Q& zK8U$Anjqtc=bAXcrA>b>h{y7f_C1KxOIZpS!GwtjNhr^Oe( zTOkiWJJI9IwF+_QqDr64O}m*VW;4r<16%k-ck2}xlQ+@d7~u zBoFyQZM-&$zJyJAYD^MaANLZ8*<7=RO4Ieq>daKpFn?)>^rbgh@{XRsVgRo=2UXKL zWo%Jc!_=}(#!88V#ZuJllr+b2^o+_%0TQApw%weJVd}j)(pbc{fNAK>msqgP`GfXu z=dv-PRZ;?zhBSgz(tT5fEOnQ{EomSV7XfL=JM9`E&Dafg`N8o)@5!9sz&#_;4cew^ z&0gQeHx7CH=G$OhX)(i)J=)vDdJByMczBFL;Bme)#0k-Sd?21<^*l-#kAq-)yJGW% zf21b2NvIgM!9sn&hypehN;;$%m0q89>o7``>vn*{oepNII(wZcZ{QAb#z%k8Gu$Z_ z=h^D{9>Niv^MwWK4X#uJ!`Lx@cn*~7l=`8ujn0r>u4h3F$?W4eBbk*fM%cB3S8sCI zqc4n;mU)NHNc9_2sGqzC4zr+fG=I$ktmqA{sfh;?AvTL8Xge4CmkPAbF@tFYw)tTQhNuxXxl!?*n&6u)Am~B6cV%kn$+CIu zOf2NP^nqyyLw4NgCnEW@t!r3udK5YDDJFL(j+?zHVT~eLKzD6oLtoKi3_Oe+5*Kx@ zM;*Q*&vA6&N_tP{@DiI;p45(e&gCR7sNcQMsXOL@J#FY?omhg#ST3_6?hu{P)UJjF z87{eY$Y|6U#ol1szF9Di?#}J8D87eh;XPp3W_hgz)AnHBAR(Sw_~v0%7%t276R702 z64Z|?2o!NmO@Q^Yba5;8?^?@v>jRNUj7b+ZUrfW2QG2`V$dx;7lU>@bV(c`+`7Q1_ zL>I(sYV@$x9*nS8fF4mmQ@D%?A{!jc=6WK$dS?R)%dG%p&Vil zC)upd5nhepqr^breL+2Y6MHAxc;miym+i{OWR|l(z$skp*uFMhby{6m%vjcFu*ADp z?!(968w(ixDR6oNWISAFPxwo?$A+Bk`8st@@(pd?p+|C({51zjsC7cj^D>u$WNe=U zKg>DHcU>r`u{Zc2+MJFUaD(dhGL0^$j(Yg`%p0g*rqC-k7c7}m>}2P**4OPbi-0phJjP7$!ukK@m zd@OARtjuai*;^H3M&4sJAO6&s%~oYxF7`otc#mZ@oc(t`JQ~le#_@8>BV$=adj^(QoZLpjIsOo3UbBA z{d;YBc_n>vX)V38wz7LFojPcDda0Y9``i=SXK8um)Y97W;@Xn-_{5_4bH#oBvYWOt zTL@6|gAVp*+|l2@J7suJf;|_=v!hOTNDrPXb2)ih&t++G@#M*qCr&J{Eu~jk(#vkz z{hq%|edTw)wDm(Psnp+GmtvngcCku2y3gT%rBc6*FYkVa{7d}4>6X+TyUzB}{=%kA zc{jdXd8Yh}|F%-MWbfD>4%MemQ2!9$UzM`nd&gk6J!*T2*W>Hzw|IZkH|v%~%a1#T z=cfa>Ta38pMZ`TnBJKqdaW9OBdr?H(dPJNR5toUG%SOcIBI5E9afJvtvX^227ql0` zZA8R1BI3?O#GQ+Xdr3sxcSOW(N5t(#z)^d10*>VS z`2a2`AK~5-0Y`d%YXE01$1g?1{aOSZ$@jJZE?5qd@9hDcS-y8h#Qk;z9Le{-0M0Dm z`vW+$d>@R6`@IM_lJ6q{oLRm<4B*W2eJmpGPa@z*zCR1#%<_FQfHTYYsff70h=3#c zJ{`cB<@?J3&Me>mh=}{U2so1O9|AbDeE&}XXO{1uBH}(D0Y~y(cRT)3KGrQ}`Hly0 zX89f;5%lhMBKTExR*r4eMdyxc0}A> zMBLpGalMGRK}6hr5pnlN#Jw^i?$r@--xC2x?fm-!xL`Xc+|>xU8-e@&0L}``Ur}85 z!vUPxZ~WVcxSx!O`{{_dpN)unYed{HMa2DDMBLjV;@%Mv_wIL0Le;dG=+wbQBICJ~`-w|=CXCZUt zW11f)zj1v;+>H@&Ul9>^OGMnQ5plOg#C=^v+=+;|g^0M@BjUa_B5pAvZY3h_R7Bhh zBI2xwxO_xhIU=qW5!Z@{+lq)g9}#y~MBK|F;&vnAE=I(4BjOGt;zkj1mm}g{5fS&Q zh`867a3k!LRea~;@cp&Gy-r{$emil?;>+$Z;C{@<&xE@b^gjvQuL&$IuQHrro%3NI zKjz1M`EG;$5#XNvY<$7z2K+F7hx)qdSK#>`Fav=*j=ved%Q}wa`vG8nR^X_-rhJd^ z{8xba=I7uGKI8JWfw@QE#^w7UFmDvNuzYjK>n*_imB3Ly7FOP;d}}K84fvr?SiZL) z?FGQp1THM!ec;Xk^VDgchYbKn}4yd}G51gaq z8>W{BfO)-wWBK~*fZ~^578p%FU%pR9;@g4ypuoEJ?8DJkflmPQs2^vr)2H5%N_``K z=o40NB;N}Kh5_*pD~B&%lCJ>VIe`t6?@7Sj?c>Mv=i^86T#kSvelL%JqjEe5+z$$D zn13OD|1JW*rvmp25pd^$dpB^mJ{Mo`arI)TkK2J+5xB7WpmuadU>HOEW2z4lZ5y~B z5LmaohJ1eln4cH8uzX2>4-3q=e18RrzYpB~iyZX?{9^TM$oG$d`INwg<@*(&|GdC( zj^_4z6B2J)k_i6Wx&`9^pIsdw=~m#rTVNlLzr*DF5HKGTxG?!hFMlU6JXf=P zg!9Qqed0d@cW;_=BmQCXy$_f_5V&#j{k6bwj%Iryz5G3JFI(oQaeDcAV18ZT#^w7* z0u#u0;mVGDMke*Az&(D2KN;80JQtYf3*5MTF9?jx!)+f6S9awyva2?52LkK1%iNi* zh4Zo?FaRYL#NWvRTh;<;u@{x?SJQ+2;ypUbu8}aq;Pf z^vYJ@OlGTj#?BYAXG?aiaIR2$AtCdHV&-gZt5(TA@9Evn_RitK$oKT`GoQ~LqbN9%lo|k&TlaFnuQh$`X z1sV76JLdkbcXkH-VSjIQ;`TGoIzgvu9(3-<2I>@cMV6@A&HLNj6Yl=Dw+J_*f-)2a)eLBPwE7IF z)&YA8es0B2%EHf6@$;|na~pn0F3S5=_<1IN9(eT8NB;~ztN2c0uo^}7D=6jh|NZEr zfAIP7X-qGm<7K51$scNG^h0H#ABxlIha{jMQU^&wB_icYZO}8)!3q3OQP_t7_=Mps zq`eA1p#bU!Ed0DGm3l8Rc@lo;89pjc%2)kc%3|U9tMGFIKlG89zm$J`8>GKJ^?ld9 z_Si#zfAa+@X6oR{1I;Dlb1= zelWjaUHy3Z>Q@rw)qg6#ZfoK8N2&f&;@KXkPV7DSiiM|N-C8&ylWGfAdHMH0&2e`v z9F`w=xMe>?ObRT&Z@@Rw`SmFZ%=7FSxp)4oh;KReY!ly#LPA6W_)C6DczT?bg?}UM zWZ1K(J?;9`O)F1I-SmbV4he1Hhx}xgrG}UCA7v>&vHV_EPAa@xBBp?Mk*;g6!{fc@ zd}8l8|3rmUt? zU&ksUbM@nytDn32zdlW*N-?f}?CM9#4>IdzNmu{m>POg@^3}T*7Ry&hu*<6-C|~WO zWDh)i!hVPfayKi;x8U18`$jdx3->~N<294Tx979eD!y&7Z}^hhr+>uf9z5kH$-hxy z_Smyyx89h#br(Ndk5ApYazpCY^eu-w-C+ui?RF;KyKV>e(f2<8{ja={{r$Suv3K_H z2twY@+BFsFEX$P|AOH4DeB(0VOG=Eu>1*o9m4tsINk&|f>!I*0-0N?CRG7Q)3epQ+ zpCSccVOd$55D;4bc>cj-55D+%K_E^2A=2PWA0qG0bwnVxvt-($L>w(&!(0KRlW zmmhpFXYs-7pPYJ#yaB9iv~UYKz7v(JpF?S1^PflG$SH3tUtOyI>-UasEMNUUSiO{8 za~i>dK9swSx~cMmFTdr3*MDP*+ZZz|4Czzc4O76yg~68;jicn}XI!Q5Z={qrbEVvT zL+a+;$ER+Fsob1?;-RPqCjQlr4(+~eDF9~3o3-VS}#W$LCMcAyE*c2 zl;bb)97Q#_-VwDf{bBj)C*DO!QST4D9Ch%x+STKKeY|!RHt=2aXZh+^|2696Pek+N z((z8?U1S^|WKGg#K{P1E&7u_hREiSQ+Qcw;^exgYB6%sAk;*FR3FK&9&pK#M7 zzw=ut)Agw`zP*EeYr43X;M;HF+2c}eeB%_ZbG!hcA7`@Y|nv;u*u6Qf|u;M*S}8<241AuRfJD_OURHso-#3unMQn zjjQ3S@r@Vi+wkoXR(SGeTn%17lXr2{!FtAWfWPGDcikfMZ&c(D@FELiF&31BQDui| zj4!CqG{)C`g7WfeC-2QQM5f@Ce1yN`=VNZk`8O*0f7VJKs9qYkPgQCa{6(qWKX(hs zzfmDSsTGnsr+2YVNc6eyd@X|a{Ohvs`ZQ@u7_QqxQN{l?7+jzFT6}vM`}TBv`z!X1 z!o2^^zTr#ix%7|tdD9iCyY)-z9fu_ zTqJ!6qf=3Rgi-xEk>EoZor<&dLmM}UM z*>xDzNkK&zor;2}FsgHciZD7A^%7xJM}mqlI@Qf%sD4;b5k{w?&ND2pcL*xN=u|W$ z52N~XK}8syiekhtoBy1kB8*N&ts#txf-CwEMyI0iCyc5rs0gD|QB)m9ZQZ-dW)bUj7~+-br{v}2`a+qR8Jd2MShe%gwd&JR1}uilgOpvLl~Wk z{Jv)!Kf3t%ON8K`+XWS2bgHi#Lsb)0gwd(KehgJlP!UF_qA)Q`!Z!#i!st{q?-fS% zc0olLo$3Uml79Z`BTx86Lh#R@3o63sRNsUrp5~qXcfZ4<`u_wKVRWjeGb+)LQo80( z3K0mSQ+@Los7Ff8ZnYY6vRA=v2?f6E82K@u)_EiZD7A#ZVrV zUdul&s0gD|ed`#i_XsM&=v3b}hU(LTiZD9W9b>4TN`VGGgwd%e8Vs{}jDXpPFgn$u zMy0o}zMvwEPPN3S%q`{hf{HLY6^)@h3Ez3@Pu@rf{`pNoMHroGS)pRG+l(d4`wQPYWu-=v1c}mAPCW7F2}Msh&56>a&81Fgn%q8I^D= zDc$#eJ%z6L5JsnZ0iJj|Bn%<=Co8B3qf@;QPr|4=f{HLY)r%OF)Q0W>eppZuMyH~M z3okF-dfzRm2%}S38kKInpAuAr(Wx>Tm2Mk1P#}*FVRWi2o_L;(FofWrML|UvohpYX zUb+6}_P2e&qdG6B2%}TwH7dPauMkv((Wwd=m0qql3o63sR7FN*uCL!0RD{u~N?Km$ zZrM3c2>$u3pdyS;Ro19<32&pp5I%&_sVaEl=}>Q#FA`LQ(Wy2Vl`I$jz(-1WQBV;^ zr>f$KmzVBsen3zWMyIN2RC>AICa4IbQ`I#pyW(Wz`LumAVc<+l=of8Hpl2%}TI3{N}>Z~duT{>h_yzn~(FPSw_^ z9(nJ}|Eov!mx78gI@LC#lI6l5_(%zFeG>nhFgn!^o_G?z@cga+&ZByvpdyS;wX0Fx z`?+7rdQ{tjiZD8rqf!0xTRyb!Q9UTA2%}T&X;g>b^~*ovQN2x25k{v1Yo%Pe@BLFj zMHrpxqDH0n=ARc-gwd%w8rAcESPVx~ zHGkWak%$jrbgKLC#M7a!`4My2<#|6WiLMyL9IjY^LX9}!f9(WzdiQRyw^Zv+)#bgF-&QRyw^N&gCo z_z*^?dOeq1r=d*svp#-^fBz+f{HLY)f+S_Ju?3uK}8sy z>W4HcJ?{N^K}8sy>W4Kd{DF_O`S%Gb!st{#f+wCoeA^Q*{k%u@=YonbI@OOds_XGD zee_!XXF)|6o$AN%#H%m8mY?}m#3_{`j864$@x-IjYq=$;2%}T|xJISd@+$-tVRWjW z(5UoUev6zDQ^^1gwd(~y+-wp7eDn$ zUS1CgD#GYgZ`P;|f99EA=TZHopdyS;^)njPr;7Dc9@SUfhD3Y_qf`AXo_IR^f&crS z1&``Qf{HLY)z4{E?|t1*9C}n8K}8sy3XM?7>s4R7`hR*o0j! z?-5jl(W&05QQh=yZ@S5&`i!6=j863n8kMe%+n$C*d^Ku{4zr}|GCm9C9n z5LATGsothh>HhGef{HLY)!Q{H-5>t5pdyS;^&1+M?y;Z!wMfK=Fgn$5;)$nu!VrRg zHU$-7bgFmYiASZ^@?}9q7@g{!8kJtlZxmF70hRI!-n$spZ-$GKCH-5$=eHOimFnHV9zS*~{w3^% zpLoNwxE%N+^|kQK^m#X-opLDL`GH^bsO}e341-i0c`BZyTy6ZK`$U%Y!+|HC2|W3{ z`{V@5zEEo{Gxqq0%6@}Zr|-j)9#_Cf%ZG6?&<1s$(3uxp0cVk@4fWS+P;t74%OF=U0rFa-mjvve6-|O-7@aoU~ zy;q9Y3O)}9O7Q_kCF}G_A9%`J9(GIdCPBq8S}8ursBXc(REmD?{9k!gza^*`2C1pk z$3sg&GV7)I5S|=Aw$GlYQt#jR&X;AE5p+G4fVN|jdZ~lclKJg*96gPeY67gXe ztrWkDr`$3r{d;pepY^DoBd8cA#jlAV6n)5|)cvc!hi6`^{7I|Um6n=HH3c8S=ru?s z)yw{2#^>4eFMj?e^&NM6W$y?+9}blL_ZgKe`}{{f@A5&zQX zqo+S`vq$x2LB%lCc2+qG{tjPsnLmOj$JvXfrAw;PVkCGx7K{@r1tX z9_bJ9^z&@g9f*-Vs|xv5MD%s8y?o)|&tG%sV@0&z{|7seHe$ z|KG0z=j?N4pLyqjyDJA-t?o5uF?3H$%)*r>`I`DEE0Wrm(D6GE%`DNVSJL zi&wvY|M|C5xvz;y^!kicuc}m2@Xfl|zj+BR0*Dy)JV1`GN-Ecg_8Ly4`tasWomaeS z{HI2zQk*pZ*`QLf_hY#2vQs}wrFulCQXKlvpkYF@sA0PQypEXeSx4bJ3!j^R`ShJB zo%0i4P2p~uG*vA*?Gc0?$HQqr?_pDj??uE~#gMNYwpe!JU;abi+lDo_6-o@Ee4W9GI zkH@`Ztg%R^Qk*nvpb;XKy9QIKUe~Ds{+dzJO)8aB@8{gKPvKupNw3$b6eq2un^h`z zNmHpl)TtDQzG`%)hUq$gpyW8UQ}XD$AEk62aWGCIe2}5@7R094&Id;4cAZLb(sce% zrE=?>O7*r*r8sFiQ$ww@esu;^MD9o9n{{^WP1j@o<9O!KLlA}V5p+gNae36oh)wDI zb>rmNM@DDokGCjJn$CYysT`d-2S}wlQ|F~PRwc%-I##|4F=(W&ZuDz6K0&PHPE8m6 zB8G9$(fK?r=M$wflk<;JFwgGzK#uFR9G@~)d3Y93dbmc*Q5@?Q{2Eb(^V1Y(>uRcwJ$6{|>DlF9_oJ z{sq$1U+oinyZ$Vt_f!*YqbtyB0jHMT997BHbu;S{nRRQU{^iu5qKpFbajo$8#0ObDB0yHCZWf#$PUV{2*d$&qyE8=7V{jmLE*?Y5)FYZ?y%oTzx?x z$K4|YlidA6Aj@6Dfh2by5lr&-6#h)#{vv?7y+3B_?iW;J&5+}Gj+?1^5SK@0B%)8E zzI3Ta6wGd!Rnt^gRZ)*u9HG}KasJ#Y{~oIDi2_NKWqO=YR$AW_$_&x1;*2QD8CJM< zX|!Geoy>QFL=i;kvn5 z;kvn*A-YvKWl(dcpbpNk!nI4Ig{zlF4b#slN4S0tYdiY6Y1`4yO${>3cwMpKxw={5 znR=P#>LO!&4PxRlBb@8HB#F-4p41@wxW`!G_(^iJ!tLW_2HPiyx!wFj?UN?e#oV6M zAp4ve$$#9eaQk?f!S)Ga`jsS&>ne4o{{%6&Cv{F`eM=3*;hM2#W>aN-MODM>=0v5s zG%qMBj>i*CgWP>+IKOBI=;OTN$6@AJaeC$KbD>T}aZ_EQc2-RS*92JEkd+8mm4)z} zYX|lWAvE_yFNEfvbA`~{)1MHUdnOV>b59CFXzuYjgysx0+cAi{*A0=DHhP5dBFb}j zry=6p?LUO(ZU$8i_4QbTr8ku|RH;QVw_&Ri^BMzB&cgCkqOxgTP-1<(8gv?O>J1iM z)7)G+v!*#HZDoCZ(5czbD(GCIa(aCYE~qacL(1l~gbKE-=5y;B&sUk2HZ)I(UW)tgfkwz-qwq^!9C2TQfHTtGTKUi>q}r>Y`*k zqi!x1o+D+gmT@9br#CdzSJpSyRz~1fOh{DMHAEm*R-e<-oS0EpQy)cJ`dU=3DppkT z%!Y>Q>2H%reQ`T-i*q+`bfm-mC-V;uq&IYDb>%Y={nZU_T!w|STh@| zOHM%=aL35UJv=Pk(|WrBFRQUJf~-VS%WPlQ^+>BYrJ<^+CR)zmHq|uNS62DVY{I^q{=`}O`$}^#+=G^MKChZATElt}e)y(#FYmcOcMh;0;wUtfIv`BaI6N+(5 zuS7m0ODe|2e`JlQZ07oE5PwQB5)_XfSwiahm}14_KP;Xy9=|Fo>Si@oOsKD^X#|FW z>*L29b9`kHf;FP4hGWdgmKif}V}mJd8%YY(ebs`Xvn{jv_WPjI6%}JA*p;)Z@kaYm zwKY}eIttVzMqx7AP+v0vwOlh>@|=L&HDRnTp>+0)1`wKSV0PSl#Duot+&U&n#V`{m zUaMSE*9_;F7gVCm)9FRZIInGJG(1DS{a@)eVkTl+nwlG$epuen%pC10DGU0abaL}O zD|x{h=t{+o)`$^Bj_qJCRMcssi;LrST3v-vocuyKBSut=idPg3DH~O8k1e*#<9HMG zhyvt-%m?{o?kZ#8d6R8`fDz3#3EaSLY=LLgH)#J$d91PaMEp6e;zXjUZhA|ihQ^ps z)zDa@(`Zw;yf*N>(I-FvN}3@V$?Tc&l1aWzck+k=%=sFs zDibJC32w2=bBbr;Ps&M6ry+0MFVB?Q;-owU?8+YoMlTSVs4PZ>!h=NgL(1njVWyFvX$I6f6 zbdNr}0hbdpI(|3fxoo#nWjc1-nL?cr?$j~th{ukHk!T>tCSy3oW;eIfEV2_NI`-Ik zB1cT12jNn2rxtnV3Ux}oQ>DTUDn?IN#dh~}X^~FGX;da0V-k)48ZtS3VpMER$I5G6 zLbiW36Xa4Zp@r@DN!n@zeMKRV9Ya=ciyE$sSwZe|BLobm!>#GLA>UOyhKD^ zOGMtBh`jS7^5#b5&5OvpAR_O=h`fs;^5#e2(O)jk;Q9ZB^2;Ogu87E69Fh0ah`g&J z@~(}@yFMcCR}pw@Z#QS~{M*~FBl2#E$h$Qn?>7;6^q1Q*c>ezKy9hkm?~@rk|9qc{$a^jVkNUls!SmN|T?Wrzzn3HOUW>q^es5&(GW8?x%?Lc&d1D68 zzZ~yIc+~H!44%J!UuW?A_4_s=uiItF+!cc6 zi9IuT{`&RG;Q8y`Rg|+gXgc`47mxd`hdrCY^Y1s-M&$h|B5!>} z-s=&08zb`GjmX;+k@sOl-X{@xpGV|vi^%&XBG0-UPU8xG^IcvCWJl!XMC9!fk(U>d z*FPdJKO%2nL|!Z+uOI@C?YA(4=ih#dGI;*&_n3&hp%Hl}M&!jK@=7A|?1;Rwh`jQM zyonKcQzG)FM&wP4$g7UXtBuI3kH~9`$V)`z&5g*rC?fCDh`a?6d5a?QeiD(lBqHzX zh`j3}@@|O8TN;sfOGMu75qWn;@5hhCIGz=UZ_4wDOm{U`36;u2(8CUX2Ty!`}>k<8(gai@>wfLRm$9h{2&bwZo#}9JB`xu;mYM$`}505V# z>$lLdPR56!J3c}FQVUMP#q;wQ>UWjqP#%NgdGhUn_+NqdYt5xyRK7mE--B~c1l}Xy ztcbvS2As7Kc&}*=%fR5LAMN#K1YS0HZ%5#W^R%Nv$a@W(Za0)rM)Vv^n9*lf{3C=TKo=<)J8JxE? zFRVVgG)FAs-`>XJWUoc|^LzL((0`Oa`{X+ZoXa&YEZ?P?qXgnh`GLnS$07c9@ZQke zF#r1uoNqNREZ>1`PL6W)%l9;#DgduVbHnm&1Lqpe3(A-6<6g~ia`(%(2Tnc?-V>S| z99ln35B;QU?l!u+(?V!T)s9|kE0+MA~x9fEVE;52GpSUb7^oS&xi zGTIUCaveCgY=>6>-d*6V(>zlSkH72=-uvKebIDVF>fzbobxUI0!iOQOe$NKy9L)=> z-$j}u68-(T1}Cou?<>s>%XinG;E%)O!w{D5@tPw{|9s1Fauj$!*IeUQKJE8LaPH8& zuzXi*PFTJNhg!}HUx5WG3y{YrDg^t&CL`!p{| zzg-}2o#uq;$MkP_cz*hEoOuhp_chn(=kWuM^PfbJ*BiXgBk^TPaUgXTcA3aWlR^DAD*zmvhkyvfu5v3~yn zUiY7iEaUec9{ZtPHAk5GI@H5sz3m=>N54PBkLTm}6Tqv`+%UV$_sH|}`-710LJv>* zy-&WkgLhwqeAjv8`Q`fqHU2yhJ`7?0auPVDnipo5nVKUKb^q+~ zmpq(o$lzuA3;o~{56`b0Y)1vxT1?S~ITm|cczjxe=d z)H-^>TqkZIz$ox4G}l}QczFH6YX;}X+u;>}_g~;V9)b4~IA3~s9)CFi^7>wjKj486 zLzutB!70U44if8 zyo`L=E?);{o93B(ebx{5`X%Nf|RN4z{A{Z@gqPV>U_`$TiX^kaJKzZ`}f{o2ufIMp4znC6;t_~>^SILB#TkbZ1O z6E(-l-LHO`eyWG(r{DhIRe*P~=7#CF2%M`mFHFCCG$%~II8HtU-q)JT{#EJcW0wPO zz#pZ;haoKAGR+aDzh6zo$%)`C)7-G}{B3YP*1Vv6+3)Uhqm!c?{pw=`PUVAlhUSL# zr{{umzUGDHdyVEexvP9V{b@c<{x^6JrpZG;>C<1m0?t3YJfHgk1AYbD;=@3H3F=Qz z2IuT_UPitHk-iq31)3-2_1Euaa8_wvP=CsC^)+yM-vodVX6OCDIaKq)>^xR;M54c6 z{QxH?fcG=a4a@gdaPHQ;uzX+8oV0v>>URTpe@~O=Z@+#^E$di(7>u1g^?NwZO<0Ql z03U|1`dzftvTneKLGv=|m*ekmmSUX2hk@-J{^HB~Y^i1K_1|O#kC$w(hk`1?zP_`&tHRjxe)1}doDaR>k>_XU7bMf^w)PnFl>f3v|m7ra+p`3BkLOK`g1F1d#3cYx*y(_g=A zoIKRS^V4s4@Qws;gytIidCGA-c%>2KjRx=12t4-NPe$P7fVVyZZ!&lr!8`5_0E8a+ z1lhS3oP_3u+4(BXQ3CN5_qpz7`s+PBKRa`}c_Vnkek;;?;Si+XCEz4AFGxSG58VOI zqnaoEc;^25LhxP$=c_ax#w|~OO5U!&!#n~X2HH=R*E23~+?okatLB;U!!vI2dhi#T z1E_+UA9&=k9Jhh@uveZ(zoFp008XzvMHcO6>LazhW^tWiJUBOMp7=rDH19ff3*~`R z@_Uij6NjMsxD*`zkxqu7`e1o~3(iBD7git7gR?b_=U*Rv?y{`G_%Ni`hs5!lcBuyE z2F(kz%iEOq2T2=bm)9r{oF6Q6^ZfS>H-dAK<^|a$1~J!z^N{9++6A1gX}nCkWkM$1Hm~)^NfD%*IfRx3wWo4bGA!fEHBev&H}F%oF~(G{&sl* zoDG_1^7Z&L^ZiP5097#l>_p&rFg`u*!G11$7)<}{Grk=QPO;_%r zK>SP(FQ|Qd?_SK^@nHzcm*urJM-lPmm+utBPXzBy&85Et<=X+yvzix_ZywTrpgDjl z_~m;g&U_7C+kL{Jyr6t<1Ls~BPs#JC-xoDUB>I>4L{#Wsz#DMCu)@ZL3UJQVyrA;- zhnO~SZqz)}-hBM!Zg3vmjy&3rf9QBi1bJQH^rhn<1nI|ic_=u=nrHO$j2|42CV?|Q zOzp_UQoY5-WTBXUJif|#EaqF9-2cQgYhd@|MD2(hk*B~ z=Cb{%{>7tT9Pz~uTGnOwFpy{DsTlb>4GO&o&VdihZ(f%M`RV86JR-cX`uH9=$7xCMf~ZyuSi zH(bi+M3kLV`LcdrguM5>`FeN-;C%(oevgV&qn~G8JwG)!<#FxncU<0M6~27o;ESca`Pz#s5o2+Q|4aK>n!X_r3z_>aJuu^oA=w*}x_=auJa zZ-wC93C^F=24C(|xpnv=M%N)et0nYwUkQLsJ4h82}&11en<(&Y|OwH@&@O4?$CSQ*qP`~3fM-lPmS04u>{#5WUUpoMroetms!7TAC=&=XkJkLl6MI>Ki>|I<-JjJL_?RIQ^TOO zFHZg*yfrR)e(fj*-a2qT)4Xi__N%uUh~H-o)_(9|2&=cn;9RSDLG?yIy-#zLKz#Y- zI~wsF;PrS)SYi3*g0rvYh2=X;bHeiNhm1ypH~DE{<=_wtc)s>G;M}8mLHV+Mtks;b zd=Epuo50)sSz+}G$#)7k)tVQSFa7Fr%?Zo*TI72zct<=htUe+6E&=BT%?rwx<$XwV z!t&i4C)a_uS#!hc_wV3zXW~y-*_3EZ_{|0{RYdi`&zU)d>E*oDu++MTL8|9nrHO$85e#8&J344zj5Ik{-F>k_$A&3{lxr4wNrFo{j9)GzAyfeUgN%J^P`;F&Q5dRNwCcFxO&=()S_Qv{M z0nT%p7gWDR;JpG)FD@J-gtg0k!8t_pg6fy~j@BF{5MO@!?Tz@;z^m0tnxr!FhZ;^61Zh0q0Y%JfC*d<1e`9h!2D4=iiRTfm5M*w6oIB z(_b;)I&kK1hZh6y$Kc$ic|q-{8N7$VIqD4ngs^rr8JxQ`FQ^@{eGGgP`=s$<2&=bg z;M8kgP`$BzEY=()5MO@&Lf*CD-K@FBPd)uJd3S=dd^Wx@8!-pX(-^Vs8iuv-(_cEM)8oY6D2`wz&3UJQV zys&)RG{?!E~Bn>jDRZ_c}P;-UC1oJ7>;2D{*cYaAs*9%Nq;u z(VxmT?P;3@Z?K*uV?Tw<CcT2Fb|x~ys?6C3O;`Ryes0r7%Lp|82svk^RsUD_IX3V+cg4@?I<3BM>{lR z@G||1yz?UP=vU1dyi9-I3%m;>@aWG!i@@6hyc;9%3cy^A88>BFRroN3wad%ExkK~9+U29*yqCtyEbkNu_zIlUZkBw*>h|y#2vjox#hr3(Na{MBc{{c+7XJAI~#xEy4h_=WnvC8~-4_FbD^~_Hic+ z_~VDOtRWpKzw&Dza}Kwx13I&;UwkaQ<6)?v_VH+TH|r^U7{c1eU%|=kAv}Kj`Ew!S z4+3Xg8ZWbbEQ5dwaB_1*-sAvz#~}XPzQO@i!LNOA-gHw0-frOC5rM}XAIRWk`YHY8 z!3`2p={Y7exxL%Lb#9U(mWpIb!Sm9l+ zc>edV8H^%y=3LG1{`mi0P0!-dE1pmx+BoD97dA0pOjK!OLtPTt}J= z-fYb^?b35S$a(Bfz`0KI*p5tpP%y6wKUFvm-#3G^Uh{h4cPwB%=X)o0vkt?D!Q|`d zuh@QV%~3>r`L#>hrQDC_*=M;1yop|(g?*N)yy@i__=9fN>G&{&mE$^aZqdB3a;(%G zB@kah<#^hU=cC{A;AM~4zJ4czGgx%^HRe z1MMEvj#|LEO!LC@yGe7DKzu3x6T774dmDHgH8(8Zfg`(Fh4?Up5sd$s0lFW(!$`?KbTmA79>H)}t9 z7{c-$t~qJ>jyio}!IV+F9i&1bzDI#~uI6I;X2q>|JQj-`J*K#{taQxy(h1{>CyugD zIIv>;gi#ffN1uMupyP^)4)i%+I&t*r#S>3Gy`p6F$Vp=>%0^EfU3Lx>Z*^zsc6vMc*wD_vdZbPAu(5U zKT`cI6hnnR_Uy9Gc z__TI)b#1`sSYWE5Y82TYgHm??rmO3@Z^O?iyC9vEl_hdMY(M<4Ed0>_`Jo2<&>Yl+ zC8BX1YcP&Bh~dMcs6YZj5HF5%m*NvhD8jioK9^cn2ZeC*$v6bJOy=wU?dTFm{H6HB z@L_N`cH6{)ya{&ehcUZ-V!=>5`RXQ~E^FV92RqqW*0!(R`b6x^PS(M3C}Ot7^)6n* z(I)a&UlhRC8Hnw!;sr7H!747R5611mJ+;OTKm9li%q(Tmi3+hSlNF-2+Y6j^aw6GX z**>li9f(p{i|OI05yg|IS5{Y4*4H;w#hVk=@wg&zx|hlgKTM!}cEFjk9LgAVmR2b> zJVzEBw2QnrzdS*-rf-YZ?$crE%2X~)cdE(Hot9;+nOjwZo}^)RU>O|^nUZBZ-B*^B z$Zn_qTXtL4W*%t@aRj#RGm$VG=cX3qoFNXS$jR62^E0R{MyY#V~@js?iI0)!bg$_691fWM$9Dp^J zUphRll%e8+sNlmYPANFpD42XTO||5x9J_T}S934Bs{^*kajB&Ge2%4}&k;bWym{sB zgr`j2f|&Q3w7l6R(@$+r|q^0Irgv%MHM@@uUmAn>%Y}vDsJLhZ(V9Ba5iX zwk2vByPSq5lVvAYxXk0O-4o#bL)O`C!(5J(9P9Qm{9xPAmDqiFu7R71Jx5 zgIgV(&ID#~q^~fCQl!qZNU3({s2Ly;VQ|bGWa+9-7;iEc#LUZ5 znPZS`>sQuR45wd#IhZraRI^K!ZQK6R2HMcYI0FSM{6~->&Q$1Rh2xnfH$lwphmxCX z{cxuZ^)Z($|Q(oy2w=~-8-@fcIyGws^T0d24g0(*t=xg?Zr8r zcGufb*6v(foU?WPz8zn#?^*-$hlS{u>|{5)%FecvW&Lb>;Zup8NZ3`Lhk7mSL{8R0 z{L8UVdIvcRSgeI>6AP$_nwQ7zPraLN>bJX*~!@cpb`x zfj>Z$)M-p-$ip&|sUT*0mt?BD8{JgeR9TX*mQ}^GOOs`JuHwLVI2}Yjlz0Tcba==} z7ewg~rb(wEyQbAjWm|NHDP53v8mhjV-EL>uZGAkEoON|$TpXk3usoWycuF$Qu3E`R zI~6%iBGYOm2~wI7RXw%yI?CF_uV=YH@itV*9aAhpEY=%REL~G| zv*%RS*Hy=w6HQ!=YHVn(;{_!u>}l0FSP|0yL+5fTK1~(db`|@(7=EkKP!KizLNs(n zksWtXx{nOaf+(~rt=MJBm7JLl5gYeF<#HfiVGm#1w7-e#$G8_!E;1#KA#AwK^ zAKF7Y*k(rAtzUJW-)9puVB1C^std|7y`5N4&K^iQYG;wBo%3m&M0^?gEjjrtT7j(^ z+aXF1bdZWuWxCwq`5&3?N8MOe z9Apny>F_fnkav_iOZkHoa+91vmP4sKFx`ntKF=JtL+Mh>FN0M&?c?byXk0#XdKB&- zAvIf7dTIsj0GCE5DN*>c1hF_LsyO!$jP7{~s-4{pTG@(D_?+L67_!>Jkx@o8F7&0Q zZ%5;o6DAv71W}hsqKj*cR3pR4LOq0xEOMpXN+JQ4GhqMmIs!ZMx{jP64w87kQ__TI3+p&p8Uwii;JZ`&^+=4Cp$A3W2Ux zh|1im&`_Y86^aAhqmT{s2ZfwDAtC|;8^XC@%Vp$jg*ct1Zs@=~fvYwn3e z=}t%a=lRO=h_(`ng)d9yx2%KI{MKovPScBfljFCPgSL}$a0E*h#};;6jO(t_d`>OY z5Hk;xgwp&?l)$)7mRIHg`vYAL6{rQeAoVR@twuXR)b27B=X9pI_ph|uPs>ZLQF*X+ z{#Z#;P04Oc=tYat(fba6qh*VoOmKYyZPKh~ ze&5KWK4bW$!_SOnf~eUN(JZ&8m0R7*%EkI+?%=+SnHpZRlQk51RLrg6O-4gO)bLln z8ZKU`Cv2t3^`*(D$_`(tEMxjSwh&ofWghCL0s#VdU&;t9hHnu&!wH9zbPiPB3kU-3o` zlH!dVBvZ>rar|;Zr_oFhHCvgcS*k17*Lz$R;AMD3{o-3!t5x=AOjV@3lCwk6n*J$T zbE#9b<_f!LeKL7y!cYuhs`{3%=ZyY>sQrr&9l1eX zy7LbdqOEZ^(|j}B38N{LDZv5 z^w=}o+OrlDh||L-5IrD4JZBGucHDDvlnzYSS0Q>1rMjzMw58|FsI04RX{w3WH8h8> zOG#lRA-!ieUy*V?^Shs7Q-=5x4I}jQ7)$ z#r<2~-us}HZKvhsF8BoW(F-~feTJ+X^3*2$u%2B#x`U~1&rXa{5qA3|Tx^YBYqyPF zW7fk)=jn4O0M<0~W_8%kRgGeB6?ae@v_V+-N_HiId`y`O0 zT@O^C(!K>GX<1fD`*$Eo+XEFNX%S`d&ty2^1f-T0CMX9d4p4Dfy}Mbx@99?Vc=8D+ z)HKYPUYCe9*Ceb|Bpu#~b%gpI>8trlFg>(Lp_CNd;dg|PxV=Em5G8{89%sZ3Q;2Of z_{y@-Bb>5QP2fx=!A)_Rj$gV|S3EW_9UGQAFu&9-(UVlV9lRn<-Jw3fCAmb2qIf|x z%_tRTu1L*ltXkvzY7fUs7#-21tZ%7u=ixW0v4oL8FMW)EN4ysPbAV6zWjSvtJK&K(GU9$LTm68UW<~HC!MsO{* z6str|;*v#uigWK*%l(aA1WZs@R(4=Nv+1|-Iq2_)TdGtm9&?0g_GMjOz*Dh|N9fnPdwAXdg* zK{U(nR9wIOY%BkmU93J$JsTZ1hs=A_S&nUYDRf|upAP^?3%rlO5L4fBJB*U=Rw>wh zKdz87rfC{x$P%2(4`eyBQ6U1VnhZQ20+ zvehjuK_{9xdZ5Iq7Q>xWMX45}ue#vBzo~n4RfUYoPm9WDR8CqH z?>jz&W>9pdQj@!$UQx=??6M}ol?XvpPEdtG=K-a*TyXm9gbk_^ST%xZg0(8H-yYb3 zdU|RHD$j`X(+OWvoE>rgmsJW@?Q04-Zh#0C!kqsNm4f-csSuriqe85xw-hP>dRrj? zYYF&C^N(%PNRYDTta2iWyXB5S>!a!l~l;p=wGy zC4ak}QvWtisec=%)W82_r%XO^hJD$GOPFh_AD@E$x;Ec#YmC{+53sm2WNX`f1xv}n zD866;!LUIsm$aWE{j{B2Z?`SbgpS1Nc5*blupI8Yj<>$cu@$APAifF7tjB0fyR`~# z>h$|+vz{Xe+Zx8@scnR9@O8D7a8wNA^#;3b|M=EbS&2R=S<6{LW$iZtFnz{`9d*L;q*t-NEU!V>*)Onaigt1*Lqh zkmGUGWt)ltP<~iWfN%#s4(mO|pd3MY2EpH!;)m(L^sVL8HAd?Nn5-l(P?MG2?c@*h z?BN^SQ@+*q@Ha8x>r{2Ar+RNX6TLUpWk_!NT<;j zcc*2tm;>i~s`aa^i*c`U)Rfj2y0S1Y#MC93V|T5v+j4U6AGT$trjMGE6#5HY3!l1p z027cs4s2(Ji0S1P%q6j=_Dom#(BZ2ShpY40+{*kQz?q!l7v`cvw_wFw$VJI**m{#% zZD!#f;Fk`2nSu&pLHCq`davi)_g}W5zzfzT^lf)Exk2Nxfe*RAEY?jvuaCS5vwBp1 zF2vex7v`to~(Q>zd6`oq%o`PRah#3t9QN#U3L(jdLRF&Xzq>MWNuweju zN-{1?$`0=+8@{@f7be(HSSqfH{RDdNKxzv|_qAn*<1%H9-Cb@kl_k&2D?9v6yY<5S zyt1}4^O}&TJ2xD3j$D<^VHFnvrf|G&l$RpA9-rLE&HcFSZha=VboC0(uuF%(ItPlrwq+2Eg6?jO z{o-bO`R{%!!T$0c`^69J;ZM)my%d`%4qs6=yyN8dfmw69mvRr;xU3;tIaMfA8yI%g z)%poK!BeDVp~aV&KP{+6p0TGb2Qb-dkHkzdv}6Z@b3k!RjAStG^RSE^(Fv$tBK8Aeq&pscZM#11RO5?v?8wnR*k% zdK;qR2K4Q2^&Q!(JT<|Q$2n5-`;m%=1l9%o(&2|jq995fCKCIoM|PavTXp)W2~$cM z|D2Q)rWk30C~bsD!}4GL%Kja@H};#BSLE>JK`D{SNsvh8FeE-J6CAQBi6N%GQ`aD; zDCrzNMk~Yt=?sN5QB9Q`6*(I7!$Hl7W7=^l1zV1-P#nk|Z2aJKO{^Ywp8_6=56_AP zogvOSI{7$9)u1M!9lQg62G1TBz|29B!1lhG!a(Kww3~kUq5Kh0;owrBLTu{d>qU1H*Z+da=atR znybf$fh#A@)Z|E2XY>$3tWiPvKvF9)g9;5QGH57}uG>kIxz3cnVldZEZpLOj%n)mp zd2lUsEK;BwNE9^MNnRCV+S%1|l8~l}4Tq`tmc5gz4&2XvNTooWW@-t^@s>S&p4$4& z;bh=8HK|;RQC`}vZDX4G?aMZ)~8#a{jF%e8B@WXY=S=>OB*hUXabJa4(*=M;H zI_NqH=L_qs+E8 z05z&S-UFJY(1$?v3T*`v_v{Yu60LH9L>KLMtT7qKlv$ zoTyT9{V>hh>zG_CrzyL!`?PN5PKrE$RHrvXad%|yU8hpexi449X)x?GuTU{gPJTzS zS`>?&)?9_SU{Y1toKS7dn}`W6R5TVXwNm2nob0KPJ22hFDjm;UqLBMMG4F2jK}=@u zyFZD-57w!Uht-|T&N2!KqD=+a?Tc&i!(2f~O{V5+_6}Y_tmR_yo5?k~*Q_YUeoJ6A z?<&q6xdxN!+|f_tg7fMQ_OTV6>6a2SwB9@{QToy(f@sPsRb2X|L}ebXa*JgSn_RIf z3$K&lf=o;nX_K$AlkUBV5^;%2uFQAQNmGL})!wMo?%9E{rv2$B?Iz$wqWmc*#H}-y2@+Ov*eb1%h^8|cK2s6za79!pjVPB z`>uk*YM~pe`J!&-9;qKfgVZHaqoXK}w;5dpQPlE&dalM7k&UaSPw5xtw+TdY|UNByPz2R?5bjvGCw~ncLDE^+Et}2mD)C|ihzE9 zjV{Y4>;%i5STO(%gGq0^G;9z$|KdH=A_FL|uJI0mzN?(?=C3{)cmi?66ZoYB{cQBO=pD8-KlS_e1 zVcl%Cb~H!zq+DZTd&;&h2I^A%G5b`huYUreB5-yH+GMH@-CKX3Q}soU7nB3EOvMcd zomxJqI3Qaku3q*TBTW#c-7nJA(spmI?oDGV2KH>y!?IrxiR@vWDT5=JJcgM1PE9LU zD#=Xyh(heZo>qt{`Qc>5kwV_%>TDdy9fslu^AHO-eV6x08$GMiqwgxm57l>>$y#c% zI3Cpuhc1U(zL-2Yul1?yj&jHLY*$-F9-`!jt>A^wx93EvcOpOV~eP7D&TM zb(R6GMz-1389*`|0;n!_76HOse5h_Kjx6rS`u8XLH-}HBIEYg7HJXMCxC|rl;cw>U zgx{*7QV&5ipCFo9P|To0gNh8IS;eGrgKUFnK{-3cAagIs(@n^oTU$L6lJ-0Z?mnW6 z%R!S@?XC5q0ccgZ?EGAvhx;VPfJO4`k<+j$I!{Ob(y#!mIsDRLqp|@jUJ$MEvWk;C zHOieE9X4Gk<<74v-i}NdURNn--8U6-YK-~6qhgp7W1V`d)xR0PRxzldAl8>4_u??m zf2Fz(8<);)Q!tR!V&R|>D+qIAYT+PeCsm)^`t`SS(r?~kj2U)Xesf>0qilj4Ys)ll z0~(Ecj(N=^>|`Al`TmT1yC2Bv$-ZUD1MGz#CBT2OH2Ei$qBQxeIywWQ-F9wXe9?)A zZ`q4Wy!~YOY@4T+4F|**4Oe5hovi1+-HXr>F5JpZynLvQ?WA~WXCc&(CpL}*k|#Ds z038WyWLxYWWie?UP-?(kg}3tWhTj2$ z_e9noVg;*2->a0SzO|%Jez!zVRXDccp`Bc?O?efsjGWL9x9VgnDu_95RXK)txm}7w zDF-{EaLhB(1X0>IB5haPWSyR(@{IT=JyoR9KiTpboQ{&VV2G)2iD%jzl@tA{n?m%| zT!l1INpPf)*F&9+JE!%L{Q@4(&o5wOOnk3+ znY^?E4RLq12+1{7ZV}jbRrYX8+7GN((HVp2_hAw--e~-C!uO35f~Z76rV_#Z#Yk-S z_*5-3VyWa+Z1C{x`Y6TXD*BAl;VaNPe8R_}5MvKtg^dbnn?n|E&0VkvnU}VoSY)?$ zdHWxGm|S+t!t0iOc`?7QeE=+?mS=HQEl+=~!lV$B++w?RK9)=HEaWWAy18-!M&B(k z%`_x763SvOZ#>Il?i3*D zj(Alp-O*eVH{Znl1W3B5^+2iJ@%^0EgV>`@wFqLh93|Bf)G^7GK|Pm(69xHdD^6*0 zlkU)QC*o9(rTCoOaEXIidebai^({2!5?k1Ze=;6R#L1UnFK4I3=3AgnSrQvEoa%fs zqdGrIT!N~EG@q)xFdt5m+IV4V^Fj#Jb)_ppYV%kVovK0%EavtC6DimC)L^H32w_dC z#!w683t`J_YXOkdSR0Vk*isXBtBKi8rY)uymo$X)O)6bY<}%tp0;V57=ia4$r8t0KL^=oBZn_doRH_FW3cAO57> z{W)o4cmxNx2Xx);!FKqP`6+c;+Ma#H_~9R-T5)S|V`=y2O1sOnVauU*>&0lmNOPP? zBkqBm4rWeBB-sQxLOrGrm^+l~r7z_O#b@C@KxbMfG!^9&f2af!f4IoRU1s8z0Es_r z0g@XyhoD{roem^E@)IEGC4L4Zy#x|i{JW`67-jrM5dCJP_)UHvE590_iM?@uILFE# z+<)!v9eIsrub-4z?W@PK0w0e`%{lgVm>@qxa@8ZSVIO6EJ zx6Nm<<%r55pTXorJy%os*u~87pNGj#aQk} zVkpGNVKpiSwG%{d7UcD2eW57coO;p{{eikd#DoI3fcb_9jJc@??}uhiD8BFMwEZR& zTP`kb-R7P0l?@w}-`r14Gu(3p>?~;6tLy+yKK$kigG{uzGh8|HJb}9tlp|NcEHhxL zY^w=KT=je)an*JpKUd}CzzIK9hNhzkqRHD;T$X2fw6yi9F03W01tqd1U$q*-SwS&Z zPTe=V5(Tw(+eHO)%UBVg4(S4JboTs~B{!8NdydCi@Azc(phDa=zqn7?@QoMuC_8*3 zcWu85Q*c>SHcBnI^dh|aq@~Z}RCDv87?kW}PaBDoC4=(6-+|w)+v15vN~zLkN*0$4 znt~;kK^RYq(a-Dc(0KcW-VVK=|BmKv*vZ_nh5MS!R{%kXk41YAz1X0>j zk#=B?bzmab+OK+7E4Qid#@=gtbua}3cM!-b1UoR1%+60b)YK{j-&V;GQ{Smoh&xpd z?6iKP5T)Fw5Q?oTH}pU12CNS0Tg_PUq+%DCopfyZe@-!kwtxcPTn2BugO-1*Vg?6kAhn(f^Roq;%6AD#;&oi~8$_-hCdxVlN(T&)eX z21m?Utk-dL%8H+nR*0`wR-h(=Xlp^N6G1V9Xex;-0urmU4g|#wvJEOX$lE{4rJHN< zhWneI#wzh9Bthr#5?%yXmh4EaeyBR4=SllH0%)+Z8Tr)52~Vmrv9<-VbWf)KzbP@n1lQN;j1PmLCk5rRTkrq;p$QPNgj&{%drCDw+~ zUpY>kEbD{y*QXNBwErI5c9eYui}1iWy0@Ix=essvgY0ZsjOQwR_?@<*Ejel=C`x{U z^@`foZ@XIhmbA~vRtju6$t_3isC0&!)aFJk^~;kt*l*e8+_)QRca6%~vKwoE8vD_b zB+BCm>;BAW>?0e9?z*_|pL}n+Em1e=PUAbY_E9Cq?ZAFrr{|$p#zP^+Q?YMsJW45- zH3QLZ{BNvrGnB0I3SvdPttukCuic_JAX}p#+X??P)hdY6Hi@*ovaMa4dUy1imfBUu zel2w;LL}};AN#qI%=Y}TLTu09D8#;%ANCoJdgOho&c=b#Fe7L=a6Zh&l<18B}PH>dKI;yV~w1 zW{=~nAlsmFgT7lQ`eS7i3R5`~AoNihusQ|dr`21G*sO%Q_<-1Cde4s|I}fEXEgIE72utb|k@3XC>_sLerP+Q|Dx zhCiJ+Tdudzl?LrN!Is(P{$CaNIrsgNR;;M49)%{mcTWm~-R9j;IzkXZj{6L%tz)WaB{ zp^67!p3WgY39-_F3&Kz9conDKO>{Hf##339XlR-jn^lvjZK#el)g)S)X4h25PMK6z zHawQ7X_|#URFS~@`20q9zhRwEu^wWSIfPp1FxDs|h{}u+W%RJFra0_>M1Z=zYv;&D zN%xZ8l+-d*>oioavyF+~4VPXW&!-UQYSK>PMGoE9+DWX-0iGy*|$r=1{ z-)V2I4w*}Cy=t#+pU9SfH4}T;NnmC*e|BQ@lHnB8U{M7&BR)F{3P_Dr1IbORADcK% zF=X;~8<6x50BJWxXBcw{qPZrx&80fPN0>|pJV>N#TM$$HP{sAzx2Lu5F@3GwPVdv$ zds>c4$wYbh$RNv!TgBm6zz|d4GDc8(g-XHxe7Zu;7{Pv1v}OXvvj1?xc*SLU zL3l-nY*J2+p4PfCi|dGq{CqjNa}BXLx>9PfHWkE5FtCs#;N(XJ%8)O)BbS$P~Av^h$o|(1?;q zBNK$5R)dO@HIf{>W(%*{!fUqF1Q~tm$b9H*TjP^!?ZZdrmGNx?ua*vr=gm2|G#Sq? zJskUOhmXu_LJ!9Id0BELrszY~l_uqh=q8r4qza&685Gwc@=sXr7bspoUu8X}^6Fp2@(&bDyB) zvGZ$`hoGmRC+355?9?oK2)1i1+z5obLS@Ofito>Qn0=((cH>$cus5Ua(KP_^MUO6L zwClzy+n>{cw)5mBe5@r%c{`bHk1oXl>6Y+UP&%G8=`JO+ZT{T&qWQH!DaOlAV`OvI za&VV{yEKry)De9a`12RV7jfkyK$WtBxrU8Pl=)D7J~sNPtpMtTyS(E+G2D&dt_K${ zqzT~4wn1t<1>ACQ!WOIa=KR4FPbf* z;B?abS|7b#F?PXIDyEV8x9!$P*BYwn2L^X+J`48^jfWY(nuMn97;newTT%vA_JO*x zMeznt^{%?4_&O3FX8DEUu7wsEqxFNFppRZcswJu(@631&+a2@cD+~Te{tMf?k z?#$r|UKP;q6siT1B?WH9kT_m$%L*Q=ovz z{nW($!tj0vbgkkoGd%wFD~aQV0MU=z0Di7`ytym+zHj3GW_aBHFKh3U4Z0X;iAuW& zh$~Im))F9DDdk_SlN8$w+8?(tB*mdXl41~$q?iQMuB7ngrJ_rwD-8OJL0=oRHx|w$#c>9mX%OH0FK7Awa?ze|Z5GrUYb>HYUllCc^R}MoG6G1n z=i4rCB z01}7m(;2GjWFjiOyJE(RTK9PkZAuAkfitqNOJ4j z+d=ynbf`hY46+S6!=O5Y766IPj~Vnfkm&p&km&q5kZ78iQ^z=zfD<1QMP5V)u-oqk%-{VL+mDF_3658Ax+XN)~U1rb{gKjeD4+cGE&~pa8X;2RC>xxz*4VnQY`ZWTHesh6Dzjh$e?_#BT<8KCiYtXLPE+S|5Gw29|h8r~Apjv~@H|Pq3t}*CVgYGk^)1W^a^jCwv z0{XqGeGGZl0IuWda5rLQfnE@PTCFN>!0^7-Vbx=;gO3?w4aoX|CEL7uG-j7OX|dq} zqs&13T&z;WfUZ!8_es!j(n6K~)u@k1%G=gfn@W)nv`iuAK8dE8Z3q~ORKS3s0y=jU z(8a2N?nwo7RVwiOeM%yn!uq2^ypwakLe%;Jg$jU{D|7_Vg9;r3^pHX)0zIry3D6@7 z4LMx>@%clVV`K1!?3(JMVtxAb?p@y0P*qb?%|FkTXo$_OnVV3oqpZ5-k(Kq8v#V;V z3lB}*M68=#)zH*bQTWdqvNl_*rBmA zRqR>7XU5LLZ!#{#S@}Ibb|~N}|A-^`FXG7bAK{4qR$u&}e7>>7+*}n_ft|H-?B$}{Xn8TzI=({Y#b?%@BN^> zVGu@nlki2#c{oxYH|bKIY#hYn*Z56&@8C#zpW(=m4Iz}r{R5Qu8NPTb3$9Ihc{ozu z{y0+JQ8-e+AK*xN<8h?CsW>vs#*y-xaiqKv=+7zd6dWm!>$H?tk0a$>h$H1CaiqNK zaiqLEaAbHGN6PEKk@9NM6I0&#I8xpfI8xps=s+#uT^cA6q(ib2y1sx^qc zqwwY$bg4m$3|eB)bp|ap=yrpa8MNG>4ujShwAP^Y25mHGlR=*tw9OzIRdnWcl%PC= zxZgnHVg?l&RAkUlgW?9+29+Dct1OW>&7fL?*k{SvxdvTo&?1AD7<8RMOAWf+pk)Rv zH>ks)H3qFUXuUxj4ccVTCkAaZh|VcG=NOb{P`*Jig9;5QGH9qlaf57w$_<)g&@_W; z4Qe!Ku0fX?w8)?(23=>+QiE8Vk6h~Gl*}Z zk~nNBWYukkyIOjSAuHegyVmo2DX8xAb3MP=2;Aq{jNHHD9(noB?;H?ipGLkxg$4~Z z$Tnz-LA3@^9g(ugAZ|F|t0B4Lp!f{C{r0(7#l@b3a@c{l9Bi}az`ftVh7HwIsGqv_ z8w^FH+HX(jr(j&`0j>1^iE_9&|t>59Vg<4Kb)Ch6z~ zNS70qjwemJMoCvI>86CG<4KdQL((mmbhn44<4Gsoj%1Q}=3|TX$vcoN-}C*;?ER)$7q^d`1|*o%=?P0vQ`Kpp1KCM%o4ooHI3m zqGJmMUV5fWw54b9V{fy?XQ#*~X){VWoT^-DWf+XKuz85jmlxx?{Py-#|81gDLxG9Pfi=X@O;k~4)JAxb zhqWz}l^TJKEP9S7Av+=!h5bkSeGk|C@(3(?U#3r4e)~<+$;Ii-+7ViIzLwh|){v(j$LII?|+F(Vn-#l{+}SviU776r0Ip&!w~t z-q|w!K)`6~w2V|ur83cdrjtqPR-mD{#&Cz_%mvKvxW{Au%{+PYAWWc5?~-yfwuqEb zc9#35OLe)8Gyd+N`-;3Bci%ug{x{uMycTaegW&^;WIS*D{~OMEHTF;#=QPbb<)!S( zcfOaVOa1O%D)IuV)bvnJ=M_{smmdG|QtvoC1+B)@(f%Ks3~c`R%WyB{9AxKvX}VOG zcl?WesmR-LFAdb=KVIr}$^TU^wZ91WQnr_!@1^Ndzq^-;ydC$_Kt2BBrTUZ~2k+7kKjNk7Qop;Gio6~7(m*}_@6zBup80R(nFnqP^~`IQ{Ew_SrAu{r$G>G2;g z{kQVci{14IGj65Ub%>>A>?_a+C=P2BCP@gG0^ zxAN03P}ix4`Q+Z+{}XpEoZEk?jbrlsAa|lU&kyo1125&iwacF1_O;>){q!K-9d!ik zCXWwJ2l_`2H~P*5lE-oQ#vX~|W_NiU=X#)Rig%OY-C^SXXn1^R@C(Iz#qi!TaUU68 zA6&t5BY3vOKUFFD^6#}v-1mVb-;qFnQ@pW;cbbVi%kVA$`cU!sfS|~0GjZ1#-aSB@ z74HGVTVdj!GrSLg-d8+60x0snGI2d%X3_6JAUBD zGjVl>cPY?c6mOy7U1{R3GrT_ny{32%8Qv2nj@v**zmI@kQM}I#?;8`B1HTa7aX|7= z&n$!P2a>-f|2H6cm~A)g2>+9k#|H`JL7)ABEc$WZ)_DLYo{sth?{uUsS@<$-i zfTTW701|oQfJELbgRV2E!=N_};=51fk*PdbN6#_9vUTi9llevw=k3Y#@kZlr zBo_ZW(0=fgZ0jFDlD01%T#*#tGiZ=O#Ri>b5MGq7Q=D(mVuSb)qR3ljP^UqBY(~y* zHfR7IT@f3c03_Bu8Ax~y=IoU~V%??Y>?1&8-Bmzh-RFU%Y+nM2WWEnjta|{E@D2qM z>mCav)*S;R);$GCq?`>Ty397{VuP*(66^jFNUZzcK$7-u!+XM@R}A{AL0=lwC(p@k zKZA-48fDOAgX#>r$e=3?dK^e>un|bC`-wTbXFuocu|Q(oF+ft@=|E!LdLXe{0!Yes zBaldb3`nfI+VEZg66BX=FB`Pkpl=My-NVuEK!c7os0K)Ea0QT9_gZuIVRLo^kXZLab2bN0 zaEf(z2NLV<10-b|1tgNIfyBDA46g-9ta}-dSobO*vF`OiBIUP0QkM@I^t3@6fW*4* z0f}`#0+O`sq4D1#;&RAA_ zB)U|ZvzGyhb+0mK?*bC*E(a3pb^uA)HUo)u`{3R8V%r0}|`LZO--@;G8`KNUS>)NXk1ANUVD{kXUU7kd*C8Ad$QbNUZyy;jI7? z>pll0)_ns=touHYNZAS`x%I@$h6U|q&>=u#-9bQN-C;nIw$$*Z8q{FWB?et-(9H(@ z(V#U3Z7}F#gR=H@wCZorAqGtZ5*xGtiFFs6v$vVEtAWJ2>&@9ufyBE1021qV$5Y-? zwnKqL^2tDA-3dU#I}_;tWA9x6>m2g%{}X8mij*QQ%h9H7s<-r>YE@b-r?i9?u~;cB zDMeIEShZO#8>+-T>sr(b>(X_NONrYG#m2J4J?^o!w&>chmjCn2ci!hcbK117zxDt9 zIyB$U%zU4j`Oca5a!yX>wb?xqWV2fdve~TySt~Ulo707&#iEBnHoHqfHoMP*O#6=f zJ{PV3i>SS=M7=~KMSF`56U`P?i!K-4DtcJ-G05g%6MP}tW_Np#MKl^@wNpSgyE9cg zA7rz8G00}^N|43&D9E($f^2sGA-{itY<9D@k7jpMkj?JaAZukukd0+0(H^3MKsLM6 zKsLL_fJ{3_el?=&M0bcD6}>3>Q1q2(lVmiOuA(8Ll;|MQe2~q-%^;iI2UPo(YO{8T zW_MGN#oG^Lvs(nR*)0ZHY|}y3^4TDp-3#S+Iml-B29T}YdXUX-1ISuw0$Fb@qUEBj zuF>pn2(sDT3}o7FAkz*NjTap#nl3t3be`y1(OsfO(W|15MOodVeg}YT4)z7v>>j4t zvsHT&$ky)ts(lG$v-=jvX7@vo#nw4LYIz{YW_JY0{B{M|?CuS+*)0Rv?3RP9l}eD! zP_?L5bR)>t?j0bT-TOhNT`IpfM4yPVx<@T{7UheEiS`g3BB~J06_ zAJK+AqOoiz8Xy`gIzV)kXpX2xbe-sKQ6uOU_kJsZ^Z{~F`Ua)8Rf!R@iN{^pRy%E& z=rwp&V%w~v5*sh?)UrWSPQ$tt9m~?UD%m4DbE}d@r{z{9dqrJ%%g^bUQf3m&vbUv9 zfy;g3Ye&)M0p88|k=OAB=+dPQ-gfkMU2pM0gG+3i2_FKugty%;;SI4%c;o33-u?v^ zZ-89FTN9Tu>!UnwN?pQDqDxVErp3*JOSoLSlvy9;aYAT&J8>$gv!i*SO&y&B+RV{Kpe~NC0B!DQ5oilXH-olx zbSEg!(E}jv9+aJU48%>ovJ+2(wsG_VXj@0GfqvoWUC?%pJ_2z&mh8j|P}0#?pdB3H zSzL*(jyi$5IqCw+cf@Bsb$65x>fxvlsHdaBpaMrDLA@Mtqa1!>i1`Ecb~G8($I-!{ zzK*7XY;%|yp#H9G7O2qCsh|Ol=79z}ItMh!(M6!aj;;U=akL0D)X~kLVUF$u6*+nU z#BIu6ihI7j)Q-5m7+?e1tWh+DE{Cq{zCI~ohx!_frLo{lDiCOA46#4U8P6H`HZ zIhq05+tCK=kE^V}_DR#G?vzZdKWWzNsnd>~1)P5D5z{LtA6IhR39|qN-)6_9f@DE* zP_lP&Fm_4W(Q)78KyY91z+`{Ny-+`JFfxM@#fiQN=iYB%!h}Pd>tMRLjg|(pdLY^w zFx-0#M8SYTsO+B{oEYqSVLkh_UQEh9*~t+3q03&dV2fvg`nR87wbfe}(1cYXdm(@-+sQ zmoI)Ojn^e{B`hyre}m=aYa=w$33hK-p6<_p#V3sJ8N$pTj>dTztAyoc>>OBp&Xu^{ z=O6aLR4(ztDzxVmKVDUaP@lT&W8iV5PLKQ4;7cPQL!rtQZ+*6A6&%m-h z{s1O&VbMgQ8!U#F7z)ccc7tUc`@=Gh>9CCBR9MDw9xUUy7M5|`1JIUt{_w^^h(*F;zjN@)t z#_=R9<9H30aeM^JIKF~q9GhVAGmfsXjAIBa<4D0Wj)Pzs$FZ=C=!=2J`OI{Zv{*L39yXgU|7a+94zBF z9hPxi0LwV8g=HLf!7`3USjO=xEaUhXmT_d^U}YR#U>QeG9=u39!7`3rVA=0!u)SgD z`~35;eUN|4=MTX_-WU0qu>D}qgzXP|wa?$?>mPz;d!NEGj&*QSU>uvnGL8aR#!&>z zI8v~T;~-eZaV#w3_$@5sxCoYU+yKis?t^6<&%iRZz%q{aVA*dzPCkXO17Mjy8Fm2d z?|eQRCxL;;=fMtw?E^a)cAU@e=j*4zQeO+pIO<>-$NjL3<5^h7@dhm8_!yRPWZ|U3 zIJ&?xj-IfLV<%X~F%gz=;89^NjuT*+&V*$g^I_TVQ?Nr|U-J3wadH}pd|z1B-v~Pl z_CeSp*uTOKhh66L|AA%whB%qge-td^*bA0%Oo3$_vtSv=JXpqY5iH}l0hV#x2g^8~ zfn^*mu#Dp~SjMp~PLg~*w&KYWsShmU7y!$DkAd9@_7tCg2zCVW&-nbVIGK$^z7&?X z`!iri!Jgss7sHN3{(4xp*9^-zT45Q-e_$EM#yANwj_qI>M?YA`F&dU}Oon9~N5V3W zQ(zg#0$9ee5SDS=0n7AfSjMpwmi?}Wljbh4U0|6%5VjchNS}Wlb~N&z!j6Gm7bo9c zVYi26zCSGMcY&pTCM@GP9hPxi49hs`U>Qd}EaPZ|WgM@y9exe*aLk2TG&01U+nX}^KpZVd@<|<*vYUHVUO|oIlg`YEZb{<O~ErMp2WfS=1tG6)hLFi8!f#{zSQ=JW*0qAmSe=`}q?Ui&CNz5&sO&6lJ1v zQH7{dR3)kw)re|E3q^IJ#iDvqgQ!u|Bx)A5h+0L7K`dd z4WdR-lc-tLB5D;a7qy9avh?#O$`$2_k|I8x+7yMNB2lp@B`Oh>ipoUgq6!h;jr;i% zRf}pwwW5WhI?-ZLy{JLdC~6Wli&{jjqUEAC5idG^{zSQ=JW*0qASx6UiHb!jQHhAp zg0SAoMCGCiQKhI#R4u9z)ruC1>O_l0^`Zt*qo_&LENT(8ik6GoM7((W`4i=e@qPY;o`7s8 z{bo_Cs7;iE6OH-t5H%_g6^T-!QV~yzrl=HEi)ux6qIyxIs9Dr1Y7_Cq?Z+o75EY41 zBA(h!Q7))F^5et@I>^T6>a1Ax7K&lN^$m>y@75 zkc&e1B!?UTw$JB+X>U{P1+3)ScTaNQ$86Ykza9oUF3omztdy?SbiD9GSG77FE2ZP2 zMt?1);|F@}_Qy);nlRq){CEIt-JP`l@~pp{)%C|p^~X~J`s0NK@wG75&IZa0SSek~ z`YX2n3Rl-3E2XP2UAgH>SEpm8baforSxXkeV4O9~wKq;yN>@eCv*uJ5SI@y#F8qan z)lHb+pq*W!ot*KEgi`pHz_++v-(qWe4NqifbAheqi43``ej zCI0SDWC&Yb#Vq~gE8yEak-mvg_hCMz_)$$g{&Ocq+%w`7L;Fug_%_c~SW<_hF?VJsJhxhBzg0h@X6_Q6fz7oP5(tGK$%UBXM1x#pw|U=Z-0u-)*g0d*A))(e60>UQqv&wQA3D_!6(F?k6)Zh!%Dnw4G(VMYX9+pF27BY+L=Fc|0fo_)9Wu z^@lG>Ywx=+$#%!Fc1iy4mgGficq9W4jvs$XhOPeaC28$__a)ixIMy!7|J{#6y^4R68Uy^(m_T!%=!&ZOzlC<`|`;u&T9BY^4 z|87aXy80(8WbC8;V|_Ygzu$;H(@1YM&z|OfS3l_S3>m-Sh(17D?I)k< z4@dZ}3!B;>Z&f$p*wGV6e*EV=to<}9S`TTzIaU$hrG_8FuIj0~O)Gn?_T&5y`>g(< z4(ZQ~Nnd>a8S39_Jr}R~jwJ0wJ$eaG(-Y1*M$doOshR`&@mBQH=_?v7w{w!lNaCl9 z2SbUjIBU<&(c{SZJ|SbBwqTYsihiQi{5E=8!>0QG7kq@Qb3$7**S3Rx65sJj-$B2M z-xvDrWBl4s`#b2Lu|EG?^GHmb?J9jd$jat`Y**>aK&LyutL1m2%I=ciUqQcdelN-I zEtUO4e%wL-ROc7&pl@a24*DlMzi{-2ax%zzyI2(Omj4#YtdDi@heWp?QI6K_WFzV5}hErO7x^?g=l;9X|3!b zIv!;E5Y7`_D!NJZB*^CF?;xA;FICGOw5*nULD_zaB_L~g2FPZdN0`mzX&{U329Rm_ z2O2ix&&ls)kj?meAe-^eK{n&u)W%xjwl>z=cA|bF{y~M!_7PnbD9e>KkkQbbD9sbIpr?+Hm5s-td)r% z>+KNHF(U4QZ*y7=vN^2*nRcQ47K<80&x_s{eIe?U8}+-rXrO4Es8n>c=yH%n{s744 z^l8<8qT0^bCdlTrE6Ac81+qC!fo!fyKo-%-AZz(Dkj?3J^7|vm=9C)~*_<|lY)+d% z)(W>Nvfh@9xDS|>bq3j-ZUeG8?FKUKAo=Yonj|_xbh79i(bb~cMURV`Max8Ai~3=! zB8z-)kj?3#ARF^M)h+_roZh9{=Rh{6+y&p}^c|2z)CrpzS<8JvHm5^D<~IstbGiq} z=JX(t&FSGFYvlxxjb*OrLeV0S&FQTmo71~Nrv0=0UKG7A`a;wR@2RYh?L`Ac<3y#R zqeZ8Q&KErlvdG^C*_?i=+AXoElGP3a*_@_8HiD@jo6}=KHdiNtETXGHrsaUgo>FXey(~m(mr=NqYm36W0lJ&NQsE246$mVo3$mVoB$g~H_Z@TDY(K({4MYoF{ z7d4BPiM|$f&WpyEFPaRp$Y+CWPR~&7O{(P7WiY)&gcHmAP@*_@sQvQ~Z%vN`1@Q%2kw-{>ij&FKpuo72}oru|5M zUx_+x9ci~04HS(Nm5PoQohCY8v`BQ1=mU^No`Y{k+MMQrY|J}@toGNU--B#+Z<61A zq8C9n&n+OE=T?wK*%_NoS$hLPHqRqK=Ep6qY@YW9**uqlY@W+O)(UsLxA9erYDG7K zY@Y7`**xD5GA(z!H|?vUWumV|ow0qD`Q?j-iS`g3BB~J06usK2mfu?- zo9BOkY@WXc**ve?HELxGkoDU`6z^ZZJIZXH_W{{F9|*D$Oqb$h(OIG^M7N0^5&ccn zD*BIT<8INYb`T8~m59nj6{5MKOGGz{9uWOS^tR|g$KK*XA`!l+o_h_B(fj&LzcoacxKM~x%S(D{xAgZNB9>~jse(9u}XMUEzbE_O5-bcv&b zL6Or?S>H@me(YB!59OZ)+JL&`alcT|)+Z~Mr-Qj2~=uSryKzBKs47%IV!JvB_O$F6E zngP1k(Jat?j!p&L?`R(A0Y~S6mN>cy^q`|FKo2=u1mcDxm_N|Nj_w3K;^+a;qmCW} zJ?7|X(BqC?0R7p~YoI3_y$j-}Vz$rvla5xP>?ucIftEVzfD_o$jyi#!am0PrpLN82 z*8k!tAJpWi4~U<#Whc1L`d=M!pY`V*jRn2nXaa~^Nn@XX(2I^LY^(Ii$BjSs+wPb? zi2J1{h73&(9hMx#eb4)1Gx7n6A<6Xr`l8hTml)h{P!d~@CytnY;@!&$Zu(1L7&zc;J2C<7d{&CCoL9B(Ppg$~q*(^IBi2vZlJ=#$T zHzr;mPIrVg0E-F!-W!~sg89O9C2oY}^ed`nzpIw3z179UY1Zu0rw9c-iXVpv`$ zCd1-ml*BPUf0nQ3M(5Oj35$<566@h2#r)o|_$VQ9v(NX(MT^&yv9MiWOJVWGH*vhr zU*PL+g{6KyT-ITd4a-(yOe+n$Gcjv(3|HM7`0ZHO*SY97DLM4Xc?t>6Y;&9{< za^gf-&fi%SBV7T@`MnF4{k;u~x54h2$ISDo1bEx&o(RA^j~-s z=_>4Iu&nO}OMh;G!|_+c;{QY~en66_gXIwJhvoR6h2{9)g5~&Ez;gWSLCo=Q4a@QO zh2{8**(lN^SdPCGmi?Uzi#Jq>%YFVG*lm&j#OIHJ6R*Fg!}9uj2`p}{6Sw*NL%#km zu=qc*4i*EXiA`ZKq(oO(j(;F5$3G61<1dBf_>YF=_)ml7_|J#s_!q%){P)0e{7=C$ zy$;LqzYWX&cEC+Z61E>K^C!aY06Wj;xd^)=zd39-SU$-!A9jq-@9XOigQfmrSdRaC zSdRZLSdRa3SdPCLmg8Rr%kh5=%kg){BIo$?VLAR`upIv$upIv(uuK)O9RF-s_ID?2 zci4x0etjGaJ&@lLmh~6H_Jpm2Er5LhwioQ*eEvOO|1Vhj7vSLG_={jU{uC_7Ukc0d z9}Ua#p9ahEpAXCNFM{Rx?}6p`pMvH1Ux(%Rm%}n;<6z|Yb70xu?yx(;PWJgLV0$Bf zlh60SLE8uU5wLw>_lE5UTki9fzP=ik?cEQ{@h^qt`1#yPj(-^}$Nx1f$KM$z0ggW( zmg64=%kl34%kduq%kfvha{O~)nJ$6l_%DZLf3LvyhyB3k`{Q6PM1E&j*53;|0QOnf zfv|7G4ubuU&u@r>o%MVUB>ne-<@kRE%kduz%kiHE%kiHN%keLQ<@oP`<@le1<@jHR z<@lGwa{SpiIdJ@2_?zWkupECsSoU`e>|oeaeEt#GA;>rR`~;k2h9W-&b{Onz*do|- zef}z6e=988dkdE1{{)uf&%()yOgeL&$je6hg+sXAm+TK7o+&@cDy` zhfg15;vAnf3Lyr0{fxQ55P&Y82NJ8(Xg|9{tQ_9{|9yqY%Wf!yTazfj)mRX z=O@Cl{t#ID^ErQvXCW-(Sq#f~8ekdE^RSHPeOSix1uWy~l(cxZhh;niVHwXjSjJNd z%XDcO9gT2@1vv#nJ$#;U?9p$_G`~k4^e-btY`v&ZI*iT{ifaUY`nBNAL z^}S)~&yC3$4>u-fJg31jo^xRt&o!`&=T2D0^8_s8c?FiQ&p%)p4^Qsvz-$Ja1=|Cb zX*eujpHZ;vZyYT9+YgrgO@n2Bvtij^H7xtP9G3mv3d{Z;hGl;*z-GgK0L%Wqgk^sl z<>LoZ5|;gu_eI0D!M71k@xBZPr>CT-K*aNpDR`tB6^l4~R#qY^6_ts~MHQk-QI)7# zR3oYtEfm#>7K`dd4WdR-lc-tLB5D;a7qy8vsTL)_HD#15$`d6;1tNYM%M?YTVo^#| zA}SS?iONM4qDoPfs9IDbsue91)rl61>O~ErMp2WfS=1tG6)hLFiMTlZ{E4_Pl9lC& zlA;1pp{PhyEJ}$=M5UrKQMsr>R4J+wRf}pwwW5WhI?-ZLy{JLdC~6Wli&{jjqUEAC z5f5@df1+Gbo+v3Q5b?Wbe*KAxMJZ89VDn(VIYEg}-Rps_pD0(9CrXM6M1`UvQL!i`DiM{6%0%U&3Q?t~N>nYX5!H$o zit0p*MfIWvQKP6y)GTTdwThOD+C;qQ`1up%its7Qc;d z6jh0;MKz*Y(Lzz3XtAhX)F5gUHHn%P#iEp` zM8r=ethX{zxu`-^DXJ1xi)uu*qJ^S5(PB}(s6o^yY7#YzT12g)<)StbZ-V^%iE>4G zqNJ!mR46JE6^l}$5>ctBOjIta5LJq*MAf1iQLSj9s7|z4R4-}}HHw-<&7u}jt7y5X zO~ji?KYyZJQJyF%Di9Tl_**$^rC5{_m5543WukIXg{V?gC8`$Hh-yU(MRlUZqIyw- zs8Q4;Y8JJKT1Cr6Z6e;3`}q^)its7Qc;d6jh0^K{an1 zKE$nSv_Um*Rnqgk*-6jy#w0z@+radEPDVX%`qJwQGwMq-^1KmE_b<=L7iZ)fG4yo* z%8dNNj684H)BW=@+ROA`Q$ACl+5S(h&ussPj%RIq;rjTlujh|Ff0?i6|FiAm^crpW zD=H8biBh6cQMrhx2irEdT2w2l6V;0vMa`mCQJW|SClbFQv8X^)Bua@&MLfxwwo+6r zsuk6V>P3yBW>KrCO~ezkAD^f|R3u7?cxpC9xu{Z9EvgmOiRwj-qGnO6s7;iE_g{W| zq5@HoC?zTtm5VAx)uLKaov2>aC~6k9irPducz@%^Cn^vXiBh6cQMss6R4u9%)rnTx zQaWW@O7p!lx0J5@8Xwf9&ML*9mg9W`$_71_I_r!|%%--K9{mu0zk@%@T(TI(?J3RW zjlG4r-rL*#cL6K8yc0DO&YDw(zq~KSU*4zMbDx-se3$T(9Bi7&rH4Ma7TXgoV5M{= zrc0TwXmvVPN>_|n(O(e^`YT|rot+aGuu{5&^~VDjIu^I9W2JP}^gL@x6%1yiqCL^X z3MtBMgk?6ulGTlnmD1&zF4uI4)#+F%9nS<9VFL^zTg+U0Gr~&gDos~my0X>jSSekB z>5`_)U7e1V(ly&mHo2Kx(!gAM<7B0D3$4Fe>#urs{jt(?*v1+QxfTn#1}|GxYVOi+ zCd^-ozsO82xY!PaiB-Rdn7mM&$}nuT-OA9B-^kt zRfr$16Y}j;6!p&Ch=Ty}TBe7VYoS@o>92EU*coA@FQEN!UW{JG=#TCBIz}r2+mK*n z6Pw)haX`U*W;7hFuQfF~VSXF-MJeLBJ$j|mrT*n~t7;qv(-tkN@$>h_VxEv+F@ElE zxP~Uq-({smHDUh4sSz)8QH`JfQZ$urN!cPB@e0;eYQ!t6U01=>VyygoERNM3MwzoP z`XMeQuC4cAwOa*d)~~9}7nWB)AN@*)R{Gqn;<#FAUD<*S*HyIER=yyW7R{R)eEUJ#%DRMddkwRNbX_@u0& z`24P-#X6O$D8A~bD87J2MbU*Y$}eE=86$`<%<_t_@hWOwX#~-2hg^6ba&2RC>y5gm zZ*EO-JY{P>N~0#DlNrvvt2~K^?WQfZ=p9wEN+47~%I=we5^y?UMbu zFWG^gu3^buY@eV0_%{q;yWeZ!25;o7z3;JhGa^hI$=c=nb6>tE{Bupq*FMJo@t1Gd zZrY;xo}WWld*5gIwmXuw%lGHLeDC~dP0N?J>p#Ig!^L5{KYaOGd*5gIwmXuw%lGHL zeE;>~nwBp=*ZwJ%Z`ke+U%uAf_gTK}j%4lf{kbpSp&zVi`R4va%QtNIhc91i@B1v@ zc1N;y`TpFO?@8~jY56w%L?4!g?f&rPYwdlX<=gH^)-K)x$ zn~C$E!S74)4WzK?@3n$o!oj8AB3pakeg&_2AZr)!&wT;s;N~Fn84CZe{^BwE7DD_r zR(sL{zZjeTqy_$YD4w*yZ_}>&NehSLsM-X7WZxlC4zm5qXR7QpknLA~0jQJnyHtMH zsO%>BJpo$Z`8_Sa7ghGQ{P@TB>pH&Eog=FJ5zo&D!W2{_kuogeh*%JWH6Wt1Gb$#3e zvYj;_0u|+Op5F&q%iL$mcGk=VnO`2rcGk=X+0L3nK(@2y&LC@LFOce0%T(u1+w-I1zAMp@~Z$@ zM5lr*q6Hv}=wgty@&}Oh`)82t8v3H>zn}#!j&<d9`(AnOt zuc@{TWUssuk6V?iW2PdP}rI z)B#(q*a-T7Y=$O+Z0-+H?L5^k0@>W(rP}8}HutZBY);<+S(F=N2QX{7Kgj032xNYI z4uj481dz@BAt0OkX&`H5HpoVLhUj9^A3!$Gi$S(qZav7fjq-a{^sy)lJCIq+T|_-a zJBcQW4iQy|=87&6-6*ueg;b_Lly$IoHd z8)Z{)KIxD+5M=W_1!Ph3=?m8KEg+lcyXE&F$mW?lv)Oun6=d`L4#-;h3}jJqr#7R_ zMEM|_XFjFD=6NW{w7bdgK+z1*Z$uY}t{2sdmWucc2OGi1qAcv+W@TMOJw?MrM}TZL zeh0F7zEri`CC+NOKb+0;N2=|J_inbHHv!o^Zway}cLABU3}o{>U4F-dY@X+UY@W{r z**tUiIBVq(AdBN}(Vs;xfoz`N0@*x&2r}&#^6P|M0*61=&1553(rv^aX2q`@CqL z3qa;q2(oz|39@;f2(o$J4`i)O1KC*klm?^tDGisP%;tF^$mY2YWZHTumWtjGeIn|B zz3!~#Ek!$ub{0((m5ELeohe$?lN(+|t<46X$YApvKapV&cEhvUNg$i&sURCw70BlK zY>>_01t5!Z3COf>fNVYUISl6aPms;?e?T_Rov@dl&2tx!wUQ6A-Uf@tiuME9JRb_O zc|H_geNkT5Xf}p}Y@Wx1EVc^O)_`oDuTkw1kj*o9O|p56D`X0?09KgeqL2H8B9srFQm z&GVTco4<2G7UjJl)4l?-_56L&3=Ms=bc?!r{z8qxpyhwgGgKVDbK{n4%f^0oM2eMY)0$FdLh_ZS` zWt)O*p0@?rJm-TYuZjLCT4%>-RGW*si$;qki;fhX zB3d9?D7r)RXVHtI4@F;zHt8LWrK@P5Xq@N(&@DN92gGzDa#7+w==PKqBRD1AT%Tq3 zl$BHPl$DBhpR#gFcIH!7-ga6(Wo7@U3vcIS8C3c_v+Rve=FE0`v2W_e!oT_UF3xxv zzoF+6x^&56v0Y+Wu&xy+*7KHaGog8x(6~z*dW#PCEVt^6!~RZ+!DEj+Yy&C>!Um_NiN~C;ZjtdX>pox35T*vne|aV zdhz?L!LQKQ4_JfW5MMuZ4SqZM`VnjJ+r`%xufcDuuOGJtzwy3)k2U!1B0!sHdZgKn0Gj0QGXT2(+W4n?b!D z-3jXB=mAh)M~{K{Y~1X`)1dy2UH}z3dJQzd(Yv65jy?hna{!fl`jH0F8IF2(*Wzn?ZXzx)U_P(F34~jvfQ; z<>+b9-i}@X@hQXEiPu2;IC>YfucMDZlN_x8O?LDZh)*NN{NcpNPr>o@8_)rc`1F=i zM|^tAfsXP)zjVakU>)R$Pj5Nc5ue_2h@-KfUpblp;-~8N^p-M52cv9?BmREtFh?^$ zhdY`Dn(F9O&@@N$Ku0(_2gJ|jvlADA${k$+n(k;3=qN`wgN}COpA|Fi#3?goPnk8X zpjUF{v{|!f9y@Jna{94{A2)O6w8Lki=!A;njy+*o@`&SR?vzXvx`(v%PT~nKc$`ab zJkF&M4{Yg=rz7xDFN5%C7qf#weUk(56ahZg1vzqIVRA?zBm)YWcS1-9pdmc#1rK^D z8qP<<3{DO&M24E7Lm+1JbCSb~lEa6&4*Rp?RX<>cjSRrQzR6)p+;}4KdNUQBuXkU-@_IJ_&b;37Iq$sQT?2~=OuP)s>s@Cw z(g}7vEU$NG!t#3XC@imcU&G=9+r$)f!u(uVcfCMoy#8$t%j;h+SbU_I7~}K5^7W^{ z(*Mt}U0|R0`Cnj=ygu@I=lJL=aj(z63`_q~44&7^V_MEc+Q4pJXgXpo?BoUPXjFD zc^;PWybsHGzJO&~ADu9sjbYjUI9Plrkl5GfuYgS=&nI@Xz5s*U0d{BDuCV*Sc7r|2 z=TGtVXT#Ee2`v6kJcA!-BGCfNu0MliJnO=V@oWXlc>2IHo?T!W&%UsX=P+2tGaHui zRKqf!%V8PMt*}fF!ZMymVOi7xi#H#(Gc5B5!FGq8?(-kO_CWqC*q*StSo8(3y9FkoQP^Ivd@?ojTjLKHui+ z`P3NtkAP)7d%`lFU%@h-<6#*OpAyY@E`?=0e3}g7Spv&=nqV1E3oPUL43_b%i-Vr= zYz51B`tT%xG!mBajD}_Zzk%%sdydaP58EI4w|xFUoGc2FKNfZX?CG!rVfoY;=KtvH z?}uf3AHy=9uVEQaXPjghPd+T;;d7Z8&mORh=MY%NQvu6(=E5?b3t<`0A7B{|pFYEQ zo`z*SZ^APD6PEF;fMx$faPk@iI|i0{J~eqT>}5Wmhm+b6%wxv0EiB{d56gJQz%rhFVHwXfSjJNc%XsF) zG9EsChKWy~VLW%hvi}vZMX-GO4D)-!4u?I^=U;-|3Hgs;-F-Yxej}0J3YPg^u&f^r zOZ^O3#&aqx<2etO@mvebcE$@$iYmj3*zK@eG4yJbS=0 zok@~HVgJu zSf*vLjAuD4`ybHNo@O%&micPf6znBF-=!PQ#mM)9-2--K*gawQ_xU4y{fV&D-w4Zi z?uBJMPs8%{c@viLd>?GJ5VJE{bf!z=GMW27)*MAO6|6aW;p5d^J zX96taITV)h%!FMZ_6*n@*jm{2VE+iqcpijhJkP>*fPD*=@vMMlJnQXf@oWvtv?DCz z=?}~Phr)6`cY|gB2g0)d8L%6`{swk^*b89U|Mjr!zaEzTFNJ0Qufnqbk73z=R&VRS z3oPfeCoI!2SoTkT84cT0iHvZI;LC7Q_mmW2!h9L8ho<0}*{E2Q5^)__ZK9VDn(VIYEg}-R4!6mbI}D=QQgiHb!jQHhA(fi-QJs9aPbsuWd;szo)TTG2vLooKPBUeq9J z6g7#OMJ=LM(Q;9nhzGf!KT)nIPm~lDhzdpg?ya>_EJ}$=M5UrKQMsr>R4J+wRf}pw zwW5WhI?-ZLy{JLdC~6Wli&{jjqUEAC5l@zW{zSQ=JW*0qASx6UiHb!jQHiKjR3<7H zRfsA@RibK9ji^?%P*f*cEUFhZh#EyrqGnNxs8zIF)F$FZ$IqXL-=nrNevjHHDJl>Z zii$+VqLipaR4OVHm5VAwm7*$9wWvl^D_SV36D=0iiyB0Yq9#$Zs72H&S}tl6@#5|0 zPn0Xl6D36jqC!!Ts92N|m5543WukIXg{V?gCE|C}ZKO4#TG2vLooKPBUeq9J6g7#O zMJ=LM(Q;9nh&Mrg{zSQ=JW*0qASx6UiHb!jQHhA33R-VvB7Vo-$|^*aqAF3fs76#P zS}3X$Ef&>_8bpnvCQ-AfMbs)nYX5!H$oit0p*MfIWvQKP6y)GTTdwThOD+C;o5_wy&>Q;DoBPm~lD zi1<_@^D7b+i&7#!mB{=`MP;IL5uZwAewCssQMIT>R4ZC2suL|1)r%TLjiM$|v#3SX zDq1dT6Y&-h@akDSyEIWDijroibW|= ziKtXmCMp+Ih$=-@qH0l%s8+O4R3}<2suwkg8bwW_W>Jd>Pvhd-oDcDqEqWSPDkIO^ z?)3VijC=uZ7t`zcmL@%4k&!RS@K0pq`Nkk!UzU;2&B*gjSGqsnilpcH1~xrkmyu6q z=rim2b~atVCjTF*&+IR=z07>(c)qKCZF}MCyLSG<`N&)!nfbNrubuhI!HL5^y-8Fc zDiWncrJ{0CrKnm|E2P3yB zW>KrCO_YQ8`F?z&0#T7DB`Ov1S!JUqkKS+e{-X~_&HpGh_oEU#^`*%_p$yMOsmM#6 zRhb+&=<~7F{7r6R+=A0K!6SE;PdICK>)7hq&Fww@X<{=E6>Qw*Vf2DuZT#6Lx#$?b z{;?YT(wYwZg@iAPo`dww(%H|4o$Ty<=l{h?C(Lh1;So1c(*jpHuVHrQ^hQ5?3KMlN zZ(gk1v&I#s&S;pmQS^8ZJYi#5_W1d4SnYfS_T7UEG;0`SYW|C<`Ac1IW6y3)SI%pg zwPX6o8D_MRa^`d{EBLma={=;@Ft)%q?S)z0NCM3o+7DuHNmu?q6?^g7ZU2X3|30tf zPpC;-2WL0`Jf~vZynoEvbKJalXYE!z@0(ep=e;^>XMVd6zu!zB@3%b&myPhJ&+j7+ zPMd=oCM-BOzhwOUgNnw_KcRU1{9mWW&wnS{2nW2dL0t;K({(N3v>}W>5w=d#1Cb$^$h41 zSNkWB_0|BgKAr?wAJ2jY2d=0wM)ozFznUPMh1Bf4d zbV&37Ss#Te8xFGG#(=E1{pB}Jwa2RVWY8Sf@`a%5UCX@XvX-w^*&jjHGQZG#t@B#~ z;@25FBpv~of?sI1vcG{$!L4?RTpypxFAKLmR=WYnM*0iTRj$3RAZxFW%7%bUF$!dg zedRYrwcOUlYG;EUa{ZnMy4DP93t zY#)QH<^QU7UEDy~ShfOP?AqH7WPSxI8vwEq>;y8!Uh+FcwMVG-cn}}b-XSp`bb)KR z24pQ?rn2im*7D6Di|sDZc}{U3$P|yM>=}?LUIbZeAA)RUe+)7OZw{?23#-)>8-Q%| zzW|-%`sfNWMIV)MLm^X)0-0hTkhQlz$P{HNn+`I?Opqz&fcT+Xhr}hIvs`bNgG_t9 z%D6$1X}Lj>%|Qd`Os9ApWQxD2j5nL6cnf56umWV``vPQ&Y@80QtP{u-{GzmtuOEo# zp^om$(sNyJyQ9ps`+%(Mmmt#~4zlsh0NFY0Hz0mEin9;MwCAeqQjlpEf^4L9pgB&# zjgjmehG8V0LoP}WqTc@K%Ls=_VwNlG+_O`n=d8^V-KK7u*dE_j-Ry!+%QtArX$Bh92+yB zcQQG7+@#5qlDmx_KVjV1#OMhVd_l?RNs~}eGG*p0d zFl+j;M<&h3DhCCwgHX4!>mYL-7`P5xrRzX*9T2zo-6KI^whz9HOkf+zTfN1@Qu&JbFQ{4$W~o1P!2u< z?%=+pyVTX9$bHq7mgzA!cD}YojN&O*menCE(P0d}%>3(v=(x&+?`eOl^mFn1{xko& zn>~IhEuMKR}kL+nuK-JS?*#Yk5%Gdj@D8D|nPA7@k5py1yy1lgSn+vy&FSV(n|Y zd&+Tt8(<0)xo@J=GV!!ymoOuae&b;DZef4lVe)vhVcL-w4%2EmOp*=L$~ZKBVLnPc zMs1iz9Ojlk-Y|KP*)Z*J3x{d7945(zX=NN<`Y?H5+Axhc%;b+ZOdeM@OgqBDVOlMR zNwQ&DS>`Z#EZQ)QILux@-Y|I-*)Z*R3WsU6945(zX=RziTXpHPLx*RENU^bP%+UbRPktN??~zE7e9SM75<2>T~*4f=o6~=TZs1h;+2_+ zKB0=|#`aX)<(P>+p$dN%*RF~m#4yn(RPkP-y}q9ED*A+~tyZI2=2i3wRlJ*Oudj{$ zJ6igLD*U+`RQ}~mTvE8+N%XM94|XWM4wQFKQL=o zb%9sWCsg6j%Gy=&gCr*UgsLP;;yIk(xc*J_u=KiD(I-^xfRb1>?Z^k}W7U7Wiaw#L zt5dCd=7;*jjy|EP+iFx(yox@dDt|Sqv%HEvp^A45?Y&;Ndlh{`RgcxE-t;Q^gsPr_ z3K^tm<~#BtiA0}JRe+NAM##VTXQEH2;+y|iMW48@y}XJ(p=w8zw5OWoRrCo}y#rNv zeEr_5=o6~?tVZ>qSJ5X_^<9ms)vM?es`{-)wHa?TkmwVt`lF=1H9y#^=o6|6166o@ z9p_c_2~`7}YSl-|d0s`IP&F{<>)xW5uB3;hd%TK1p=wZ|3P<>=SJ5X_4GvTXTzc4f zabH=y?LwkYs2YNj_EuDHucA+=8tPR3KuTPFz*Z%3Uz5FxKB0<#yB)t?;RsLmD*A+~ zqCoZ9p+|R*`&#H#^a)kNoho|0kU@%Op8H`i(I-^xgp&4VV})1ICsd7as%SRCb1!#W zW1>%}8i|s4Hs}+NaEw>cCsgf>lJ->GAC8GWp=uOL;<&;y0C)LdqED#W1toD`;p%^svMy zXfV+yRHaZ7&qg@HJiZx1qEDzAkCIpw9+jiKiaw!g52uRaLIx=sVYye)Csgf;lDMz% zY*XV^^a)iH0#z8-onA$sP&F}7g>muYUncs5s=ZJWufy>5;^&M^^a)jaqa=>&$=y%E z(GkrCKl@;!PpHDFHcfT*-Z^t(Rf$*8CsgedsIq>S^-`=l(W~eas`hoNRli>RHaru3 zLe(Uc#Bq(fZQ#PVFMcDQi9VrfGD>1q7}rN$MW0Z$U!V%(+O!iYk?0eu_D4y3uh&Sg zqEDzgz^S71eE51z^(y*=DjbCE##QZA^a)i52C6WwTfK@tq3V}Twd&Wa*{kRistyYJ z3STexVFT*v6RHjlRN?EDzY!{t=o6|AK}q~7hjH!URrCo}zjCT5uJHJpJXCCi;Y`!%-5CaOcu4m&dA|y^21eYHFZ5zU}5Qv5GrJG0`VfO+!iC*DW_Zab&DI z%d6-Us*VU$6~DRV;#hU3SJ5X_q3N`~!gFu4SJ5X_l?STuYW}rX(I-?*4^$)WKJXv$ z2n#krB@%r?)ln#kXXEYV2c8kD_Vp_IgsP(h)f2ny`%SDm&8z4Ws%8YLv-6gH607RG ziaw$0m_T)5&cB|BRWEoIeL~f-fhxRnX!9!igsS5L)t80Wx5j;Kmy1dy`h=t!*J$Dc@=#^)k%RWoOwPqhKW9* zsuCq}U*XJO;8pYqRVN3kaONNMD*A+~Qvy{u^Q~S*pHTH{r)uXcx+yA==o6|=MM-=2 z0Asz1KA{RXTTtcTXPlxHb%IyXCsbjvrp;ma4)Hp#qED#$O`rg)u=x8 zD*A+~->ycr)n=$fqEDzg9VPMF`1rQF(0()<#a>09P&Icosw2IMKA~z}pbGEj&-E($ zgen}mX(J3(cX<_kLe-gpYT)uWhS9^)YhFd4Q1!djsIt45nm(bbI#7jIy&b)ZKB4NY z)u{IMD*A+~vjbK5j{X#{qED!rAE?4B>@{9RpHOv9pbGB~8@-A?p=v>(3Xhb3dKG;_ z)wzKxJW@8^9F<7)303EzBwoGY+UV_7^a)ipfhwGhJ-v!Pq3ZlV6~2c(%B$!TsxAmr z;hp)JUPYf!bzz_i?|bR9zFO>i5}f ze@h6ab1sXW7UUVMW0Z0U7%{&ZDLWZ+9D5?Nc0I+i%=5JVaOrrfPpGO3 zR2%fYYJ*tykyp_tRNWY;!r92%3YAFo2~{_tB%VY1#C?tPD*A+~KcXa7g=d>%y^21e z>gGTdo^3AiD*A+~TLM*hwt2{_=o6}L4OHQI;{&gvPpG;rP=#@Ax-}}1=o6|Iqa>b< zFs@-x166p&-fN=IKKZOOw2cKB1}}C9x`el`Fl9KB4N~ zKo!2qe99dYeW02(t#X#jV~2Ox?5rJKIriP2xjPP~XoQb=)qRO1RTc3!)9!bwPW*{~ zSDkiu`F-v?WymC2yvq3``c=lN2k5VNQb*T6`iofA5$9nh=M#JjZV5`Wvv^uzUzXPO zwl`EcVEWjo$M|*Z`XJJH$ccxf$^yOr ztF3pARloKs`dIH5t9RE3$DPj#Yei zArpPVz8*)3#YNRsiJP8|ReijQKB4N*PQ_J6m8B@IF~*lSRf=aI5*aO^yRlI*Na@RRLyz5KrJaf^5RcAiME9j2zB<@95) z5w+P_!}$~cdVIFtfpI&3_o_zMPWmzUq*F!5;Qp!8FKg5>xc+viL~=gCG58cpv$LpT z>i*1u-D6dMuW~-Fet%zLbBNg(>WcA$V-9CyDN3@lI^ri^om;PeENwQX`gWGOD2|zS z%;Cr2uErAQCw(@s6xwa)Jm1dKuALKR&73jq*!J3aW;N~H^~mO*`-T zcAkyeIp#R~;xIIsas5T@u&1Tfn_M5i%A0M^GCYr9B~=qjv$LWz-!DeK@b6eP%Bz}I zQa$HX9oQt&Lxq1nJysp}^=dcjm_*PXvPRkY@L-FZQ4e!V0rk(^Jk=3hi<92c)Uv8pgh4R+wh zKYaH)?c3Kcv80{r&M%X8-Jwr-j%s$QeE!70@G3Jqi6SKWK$Uitc^M_ySq1o+g@0vF z9e_!V&Q0ehQG`UFu&-B85}!rGYszg&R3gzQRK1Fl_O2;UCQ*q*pHTH0O6=;%afR2E zcakVVqK}Pw-5p#3ek6TKue6fsS=YeLJR?7xTLwqWwGp0MUPnoL=avb+<=0(b>1UER zoN6F`X5rsCH@tLp-0M+Z^@gd^*4Ud)6|J$vE}tD(4fdu@N}@4dqY@vft{{vn zjPzZUWM|P~9sGMM=c~7)R&bx{+j)1TNZ)g+DAF%~dF`(6D$>`z%J~G5zVB4&k;ba^ zx}g%u`S8^lV);aZBMis<0ZOv7_Q6k%`I~q4I6fZpK;O;>D~-9;siHBLes<39KhT&D z_A2KSjQK;U0Ew#YI({6h7I>BO3C7G3hGYJ_Yo{ZAX5n9WrGCh_^LIC9R43l`CH5+( zA78jUAodOMlkGh6%-^nxW8a*oK%`|Bd)j&RBa~)m<>Du2%+k8v4up!Y34Oxz&p%Mo z-rf5I-xqzLN;|K9>{LDRlOwD={J$5(y&maR^a=a=r&D$Ds_^b~o>$Q)R4sQZzNYNU zQWW8pUPYf!g^Q(+i@xDq_uXDaA8V=Em)L88;>4F}CDXJ10k^16*5W&~Y47zuMLs)g zQ~cxzryqFfZL#;Z-BE<}sl8rls?SiGot45*w!A~#?P+Jx5nlC~snX7(E1XIz{N>6o zKhp|7(5swJu)_Z(6~L|VSaq6LIUlZYok=*taD{*F+L?x*9P=ZOzjjs}=_23G=PQjF zw^oQW8uOdCZdm)d#(ck5IiFz6ZBhZ;m}Aw;Ugdl^=Hc{V;t0bre}R(htP=d>tMgoQ zZ`^oBuVtHW=Zlrb{H0SxWB&7JJ@)%TW9HLQn4C{A=Kr8Hd>0U_4)iML>`im#oD z=L;rYtzy-NJm`^}Pq11z!f?#rprpOyVu)|&8yj=ld5kYpd*`uzp>pGbPk6lZk6zk4 zj~(Uvq7PJQ=dpF1ii-e{c;%3x`^K|6*Q@9g_Lc2a(RnPqKfKDT=o6~2%K%15RkZqI zy34ER6RJ8o6;DP~h4+U~dlh}G&5wMEttbc*oeKDqDVdm_#Vuaq-dUP{9$VM-wd(6m zAK%WpSxJsC?L4-gQ>}Vs?(S9VnJVo(mg7|ED|0>f9+zV}(yN?Lurk+osvJ5Yab?D; zbG^#>aAg*m7yeQbs&Hj;Q;Y1Z&fej$8xFcXo|n6QI~!zWM!KO>@fZapN(LN0KUTfq zRU4WrEz(X-6-7E{(lcjls7SMVp&=ya6GXa^Q$>;TzBg74@ha!TNOd2@5r&a&?AqDD zx=B2CT>t&zF(2jI**GgR(oLL-ApsJ17oLQl(Ym?Zt2QxJTBNy76-D~a$rtXpi6VX8 ztDH{|X=ka>iTmUvR&B~RvPjOy(Z0UKR(N{s9CH}^rmkfyd6)W)>3u;Q#XR56rdgS> zZ{}1Tp#fyv#npM$W-F<>I8_HIm@YZswzMPdaj)u7rKN-F++ZT#u?Rj;48G*)frRa>s4%5y5t2Ge_Ocbpol zMtD_TR%Tq>gC{#HiffyFJJiLh1HEdil~h|h)jsHlYi-WoPJcO8o$OUxn<{P9ZR1qY zs^dNX)>?JfdX@7DR^7Hzp(}TH5v%^{RnCXU*MI?ZLgEO+HTDbFPBcH;jqP)EJm%~^ zrus!zGUJ@NUC?{;y$9YHtM>M)?N(B`r|@QNWQ``y?)xyhjgHFcUbX#7s-){HItqSu z?Ty#Psc`m)rliZ z-o8FoUFcQaOqKS!=c_NqcGt8oPU@!Dz1gdrPw={TcdF>vd2aaQo5ZU8el`T>6I?+! z!tizH#&_9S8~ZUIw|(E{c+AK9c6!*D)2@|0or>dS3eQLndsWY@WX5VKaH{Csa`z__ z4v+i#msb_6r0TUA)n@(KKQ^t%%Is@Lr%Iv@kVxisNP90+b2P4tDH~pTJ&+M=(XV0JXZbMtDH~bh?&!-p<$mmW*n7+qddnPzB+wf%YKVcmWw?tihe;9Tb=ast$h{6KfKEM1X1)~DT-KC>~H9uPq3mm!f?#o zKruV|^TNdLg@@wJO>}f$*R#I^{i1__ic>dXbAO?*zG%It2!<;HQzGh!LB^CEo;Z?&{QWZHBCeEes z4Dg~?6|JNi?o^$j;mn=!o9iEq`|2^sHI*1{sb=QE-i-&7v&h#qh6RgY; zP8A(rJlDml$Gyt=xNf)7@#N+w?H$=j*G`@dE>YC|@sr~*7kL$Z!lROrhAVt$jR%nE z^UWLY#qAvB+u1qG^`5rEM>!QPbuMkQ;eMCLs!P3U)Jm#doGM!3*W|yEb|w1Kt9DsQ zRqRx&K5vX1Vk0OvRobgF+Nq+mAI}@bdUb5GZv4e1eS%kKj8jFg4$pqE>Q&#D^9jxy z9AP-CySjF|+2As+p8auzGVPk>W;JchW1T7*Gq0YzYRt2|%J~Fi9v6(6D=Jnsc$M=B z#>^3hW8TfRGs=w(PyfE*%scsCn!+Dh2nsaAdLlzG+eD@B@eDn*K8XLm(< zvsXEvAky(p6}>u)G**4%RnEr^c2bdz8COi6{nCz|JzP7vzIx%ISDYC~I@7D@6COK^ zG@P+LT|3cH@cMO^{XTBz3g6D27JJ%^O>nB{%og4`JmOUoR#Ht|jcWbj7RtnxRC_tq zBvf;hlZKByJ09U8uiDF0Y3p!rr;1*k?kjG5buYa-Pk5E{30|ENr;1*k^KU!qs#x`j zS2-WA%CE$b68kvSwxH;$71Opm(ZhVKc91Wz*OYZ*f)e`%jtC{mz}4 z7c=IG?8oXCn?L{Ul{)5Q#Lq+(v!h>3VwKe|e*5*2x)MK8~~wFw!#nV3nv2@Td-CRe$9)cEEwd-qLA(AgTjBs)JZXOI51VrRZOvpOOuEAVUF=NzV(pHgIdg4W^4iFVHRD&{NQtIv+ zoWg!+RHx(V4_4l$V?IIrOv&Jw9i`gHszN9zr?Wc`JVL9k5>=y8IdVFcRaQ>B9v=BY zqn*b-T(JVUFF78Nn3Y9_0; zg~Do`T6MOlh%r?ytg^|N!sv}E+4>najq@IfP+EV^UV zHq24t5Kes?stpnTuKMnXWkSA@<=>hrOnAag6wx#kok1Yj16zBj4s6<9s># zP8<6v6F<}5KYu^%=L+%D#(tco(atKXG!A*@tIyl)(pVuXW{lG4V3oE0x%SxlPqk`5 z0wLgF##k{@gl66kV?X|R|7(KX#16}#oFeZ%9UZCi-pPLa^PUtxo$SY%_bygB^WJIa z{d7?=W8}S?RnEL?)x)A<#>hKGXy(0#{aC$i(cS&G(Dn6$`02@T*Ya#uZ5LCm<)UW_ zcG0S>3t`4FJA+k@Ha~||R!)D)eqhyXJE!HMV#dhnTvl0ao@R5cI#N{3P)_B_lTvr* z^l_{;DrStFQiNum9?gCdNP|`(Czd(y%XEmJqchyKbBq!5rw?Dc%h7hs zr-+IfBj$OYn6>H#Q87a?=gP%#j3P8+p3i;`M7*@#x^DAXFY0oBPW;UG#C)s~^T{8c z+;6@e^Z!J}j1lt!TZN=}b)i+87LzR&V}@gvOV1cZXvTaT`=Q~fAAY`lY2xcT=F#Hk zxD0nWA8)5lZSlpzPY*oKj(Mi2m@#5rXsaONdkR{0nW&gC)(I!DYD*|6Ep=GygqNYB zwnmIOpPtAn|8>IWk`^&gIo1g$v1(^{#D~~+n^e53OJh)pN}Cunt&>^hzfRa$RK%F7 zQ&{D{PDqG~7*lmBt0-SoU*z-^a0|Dt z+9*OZ<}=w3EswZNW@o;q^IRZ)&dhMfyvR94`L>GK_P3vy zs?$1JRKzGxSBgcq@TVM>mW)jYSfmvJjp5cxnA(QfS}x$!A>#5epHci=JYSHJMKL>O z*b7;eiQj*MvSKB*q{p{-(+HEXHRLmG{>|$0~Gwh?c z^?avQ`-_Shqm5m{DpWQfXZ^eo7hYC`^F&3ARTql8lvSIH>YRPLHqfeDL`4i#j(wZU zSVbe7m4g1XQdGp4XJGN4*eiIcjW?G9`Wwo(MpL|-UReM&bz=<(cOKcTI zSoz$m81t-HYehwjsk$OSb+M?3F;!O@DsvZWrKpJE9nRs_MgX-avt?ezes+*jHFuwO zMp@BuRYn%2?r39Iv&w2?wEJ|G-NtG}#f;I$u3^=B>{C5Qq*Zf8#SD$T)`AGByJNnV z{m|-zO81;MR<5r;k>jhy&$SuunEzqKOixx{YsdVQsF*QgzRp&WcbYG>>KjopLor*$ z9HR)$a=xDZ_|I`!Rpc9g4lctT^9^?DG#b+!cfB2RnW&gCV!qK})$&bt%ukDo86)OfY!yTtvsV2i zDrSs%nIbe}Udn!kkP{r{Qw_USE9=q>cg(lisZ-2!UuLNt^C6;Q#)$bgR$1+t_8hco zsi>IYm~&O)F^bTP`F8e`h4c8}y8HjV__;m99rGQmvicz1{lDFgd6ODA!oiFY^PQ}+ zVy0_Gt;!P>GZeG6z>iUcX3Tf7pIuZkv2UmReN){w#)+T1GB{?(jJAwbZBS7;&mY)* zy;l8QRLhjgG1}bCstrYT@@{8Cc~tka${I$t*=X4ctr~(k zh>rU++-d!jRk9F_y}N4PQ?+WUsQ&3uJ-{kjStVvNJcHA6)cZrMvg*C?r^>UJ+x0$ERLmIl z{;&}t-KEm13q{2Y*Sj_PQG{l_Kf->fozih{&)m;+%+H9QM>05OM+<+HRhK}qE`D|! zv-Ae7`bJcbDwQLrkFmtpln)|4o(@n6ZqJtSDr;oFW*3UE#HV-X$Q>%uHiWy_g z_5`bjiK=>o1($2pWKl6=r1hk&q8j{Y;Z~Pv)v=;t24}I?D;A7q92@?$pJ8#X>z-oI z{_DEWMMVr&AdWk{PqQkMQ;WqGP5R$NUCx8Bvq}ds=Bnu#R#_!x-Z3l?6)~1d`FWOA zqwo)^)8F5GV6x78gQ%FH7L{j>^VAZgMX4K)vFF$iWr@o0veQ@PYCm(t&vO}BJT_u| z1PkR)TV8-A%dq?mOO9dLc}y&pur1E3iRU@>9-JG9pUL}OaHcM?u~5KVJ3T?Yfo+ zkAoS<%Ng!keuY(5Ex&Zgf6sr}uH`CGF=LectE|d`N2=xhHahKZT6Mapm@#VkKdiE9 zdEwphkF@GVQ88nr^%|>a-oc01d0GFxNUOFO4-*b%4Atwb+7jnz93Rv1^jNKG5*0IC zr`B?Z%FwLSH`ouA52c=bZuJ=L=Q{E8Mh4ZXvo79b)j^`#X4UTVbX|NSsyCrBd)$BR zv?%5+J{-rMYFC!E8F*t~*^ zztS=H+n+SC*xMQIm{;1VQ_S?n)7y5;2~ja)#QYAcs7~pi^|Mwj6csZRv(@2{x;y4~ z+0QcNCieBb2`xJ2XT;CD8Sa?hGh%+=?ff_2wPPMMQ8{DAi1~e6MFf?zRyBx<8H%}J zxN;Mt2+eZ-fc=nw`p))UiyYTh=Zl{YGTbqLXs1r)+_n0V6F#tGUL`7KjF?xkibfea z=x(4^?K??XnW30-t&LiW(2RLC`@yuqy=lX9w);kx^LgTDb%s0UkBpdSpTEs1tL>OS z5fw8=%pcn-ijT@!tI8*nEf!;j+w&-8h*5-Q%%8BIeej#+?hl{uZq+egC4N51aL4>V zJ9R2&+Nb@*j`?d*F=NF1DXabr1=Zi z()yfLRHu~I>?;xzwQ8pWDWzD986&MPjI>Uu-K<-yP8St3Mp|F8YD;*ev>y7~)8n-2 zJy9`ZjPqZyipF^=!^g%C?9r;dX;8$$jFHyYwu;gk(*4E0T6MOlm@!n}u!>3^A7YQL zn0TmGeJm}iL2Ulp%cft=H%%}*Z^C&-bZtxWPZKXw@W=+A>I{vFtcg}G?a$5W0_hvYM^vMS= zR;>j8h&?-neq+s*k%gAyTvh(WDr>#*zaM^%|7iEGO&VDgW5y`?pIK$K!)xxS&(Nxa zM8%BJ4u4@4wL@xAwBFFF>qW(kk=C!QqVmHBUT)Xx_TDo9=(lLi>!xi*MGR7RsQR%g8&1i;xksHZDq^5=+)L`usv%Gy zgR#{we)6#uAD&qe6*1&97CTuiQihIRunzm7*3ut8|5-OttZVQ(Q87ckAU}_s;h^?x z_R|6E$6EWL^(sd$YNk<2NCzsjU#x4V)gR~g zx$gMQ2lk_@8af^m6*ER#UC&k#M{}iCl{S+NBLOiyS7JcogCaEN%Jta~jiPkCabF>> zm0;rIaq+XhirKN_F^E-rf})&WapBW9YSmyW033rnIo*I&)(9}IV%)DK#)x@SRykJ}T9p(PGsdX?CnK#ZpIE$sR^25kW{kA{%qnZu zv~5G?=UVlPsF*QE_03o{4AJ+;&%Z8O*sN8>SpU<(jFHync3M>LuM}MNiB_E^DrOAT z7KVz}30n1UQ88nvwqzBJKa|#cORjxctFjJ(2?sM=?*(YARJT;i=J>M}`)LAAIelx_ z`~IW-w8PJKux^EV=iZ%5lX-vb$1xsm&3>lfJhg^dPjo)2{oF0_Fr(s;OBWRn1hI@m z>9>^@eX56r+K5WsIr?qGY0btt%KJ%Qe}%AM;^Q*$vkhW4N55@ZWwq5UE{Gqpjont? z7Zo!`Id8`*tNpzF=mu|TRc@BwQ88nrwLPoWgM#u!yAWFS zf~c4=R9URDW}++Z_$5QDhR%W`9L(^jRiF$pDnqj+?7)7gd?@uhYTlZu{q%^R9k?Yp z>taV%Jq`uUBtJaRdA6>Lr$x1+r!I!rY4wL{Y28!z?`YS>Hf=EBV8+O4HmfM7bX;@H zZBJ=cm#CPboZ45%6rnlR4P`$&!3X8^lT+`#O2_=H_!;Vnc_$<0qxX1mhoN@N>$Ouv z_&!QvjF@+3m2<4qsslvDj4{>?Gt#0R53RaIRLmG@?P8>L|FZY?)2gpT#f;HbcV(3| z)_r@yp0l)SM2E^3Ge%mwv5NWymEo5)8}F}GM~R9VL$$l1qOne^mWzrRL$!yUFN$WL zb1pnts|FoLwpffAwMLRFpgmc&4bD-753QQ?j#f>8Y9m&blZA8Z;OE9m-khubTq3D6!y}uu(o=pQh`lR}O3T@Ia@aF12q?nqb{&i+2@@ZC zcB=p8c-mnutEit+-=S4pj@=Hg6%{i^F7j*@`K48yR_)wHwpffA9wn@G0!3){oqYCF z3YucRr~LKrbj<${Klz@R3+&V>=98a2x-s95`3F%kW5hh%RzbuuYgK(W*8sTaSF@3S1V$#K*PbXM`u_k#_17bH?7&Hy>fgyiSi&Gh@U&idD`r zN~>myiW!P|RE}~JqX^BIN3)+@5i_mFo;;#IR>&~%@tpV>?TLABR#|Oh*Pe%-A8p6H z6HS;nm@#7hE32q4({W;P(>Gdmf~c6`n7ONfqX^BI_hCQhA?86if6MG`-qA6y5;4d?&m4z0RgRLpSO$dSfD5t=c_+0Pb8 z17XKzkD82u5GFn{=c@n4JuxR(WtDT@sAFcw?U*NsiWwv3LRL{5q=T+6wCYMxF+(w1 z%{fL9nlTr#pYiZPG0)jyz!5s;FU3!hC+1=!<|}@Ee7hn$=Fx{!M0lr|7$fEqR#Dr) zhZwDYwCW^LF=NarrL3Ykg;ccu(W?K5iWwuVGFDOfP`+sWqgA^ik906&sLENjCC>H7 z&%{Ts-$APuh>96*3AyA12bH0es>~M^?8mwO(SBYMKNTodl#k>3w31c7z$4e|;Nfrp z6Cb-Bss3B(sf#K*EsA+S#-snJwCmy|Q88oWw3=1UeyUaf6BRR*(~;H~P7#{zr-uDh zAZ2`rO?>d2k95rY9i?Kf@x)xqDyz*;#J3dI*fB2>6*ET6b*##iwCG-~R=pxBW{mbz z&njp8(W>o^RuM8|q}9MGXZz8r>7rtW9o#9FSS$)A)Rta4=)!bdpL7=kS5=XlT`) z^I^iljIj=%Y^2pMEBh0z+WlCiV#Y}809I{_)0EbC)9b&`s=teh8Kcb~$SP{{l&@ji zANC)u`cYKO7-=2EDjE~0R>}f>u{}lN>t1kswAtj;1M5UkDfB@ zD6JZC985Tv;eIi4q}p$wS~mN|6!t@%pH|dgznQGley)a}?O>hKk49Rwx;&Z)X-y%1 z94qri_A?RZH^5I_?E{->KZB2l2?sMAkG0rRe(2mBVN_aV`2ZH`4canpA@+rBi*w|k z%Bfqu+idfXKt;z?85*P zo?)j>G1D4px*hZBqGHB~c_yo945uS^-bo|1>I+dZLowTHB#O|CxrO~$`^L+*+y(iC ziH~t7ssFZkVm^db)*MIs#w~WtSBi=mBj!U{WyMVEI<5LqRLpRDwpJh%p&4^4`zc0S z$A{P<=VsoZV{SNE#oX$Nc^0dzm}xw0wPQX-RLmGLx3P-aI;A!Hio`^%dP7vq7~^5P zk=DJ>H)m+o9;c`XnK9DpV3oCo?A~zj8CumQDrSuF@Gw>lgHvihG#+ZzQc*Euq}6Gs zMdRVI$4>rEtG*ExGlr_mP|kz$J2V}vT8$|qgtks zZI0b~j}sL$M#&#;tH>*jY+Ch>sF#_%Hp zROgE7NRR3$R{59D$D%sQQ$9!AX<6lSlwCgioT(yY#wed-Y!wkyK3a9IsFy)!L(j(I6;%A;G=J|H&6!R9(zIxL zG1C?OLObTIMa7H}^NFmoW~;+K+W8u-8X+oXIMuOYk*g%fQv@fmpIw>4^CZXKiDes1 zd|W0fVwCMQ!w=PCH%sGWSo&w|3{TW6ANjIlN6Skrw)xpAg_Av{aSE%fk);06 z+rK{9E{z$YV#X+qQ(0w|2F=}C^`NMj;Z~Qg5|2@YX3VFtAG(gAn9X-Ew>(G5PE#>E zMv~K6bw5s%a<2{d_(12hT~w!ga(V`R9jI_>T6jp|G4 zU3QJmWj{Mf>UkTy@tXGYg7`TXHE8Y{oyV$1sQTmQ?w3|C)AfGvg(~&)JoSD)tE_q- zy0~!L^Xz(GDJo`+oL;~x$|)UZuD|80TGeuqvNA(C&9_=OMQFD03)v5CB~Z-kRJ{9z zj`?fxbD<~Zi;S4BIPUd(F0^CryjZ2qj1lw2tg_nbaZQ8o*Qy^x#SFzf(u$cPG-JMm z{cN>yEVdj;y}H3ypXzaS-X$vaOFS`OYQ+4}N~()_eH)jvlT0 zOjOJmZT@mYb?=ocPtmGfFI5pTW2Cj1RTVhBK7KxU@RXypYNn`|VFx#g#XE*CVLyAR zWMb$3<0p&*F!8ZmRK(yK)-m#5VW^Inu@@EymMY^ir6$HyUCAn1;nH!*W&fU~RdG=f zW2&xV)gUE`J#^WA*yn_ak13)e##CL+Dl4s19-sV#R-G*>VocRFtimro?pyaPv})^L zcZiA@Q*|w?wiVUP9}m4>t6mTlF{bJttimro{1e|6?Iyb5EU~~rlxK`aO zDrStdZf6xPGx#|8_&0yES{TYlRK%EV^$u2TAgbSsW@B*)6CXpbQvW5!RNcucYxWqk zBx_TxsuC43rs^(MS!3qnnDblWPZSj~rfM0h@QaTD^@lrV&sCx###G&Hs6L;(YnG0% z-_^<&F{bJsR$2Z1vQ-a0sa4yEiWpOMFRM0JPGh$(-etB{#YIJosk)C<)`&EI_U33@ zF!6DUsE9FD_p|Cx!rlBs_jIjVCMse~)jwI4EvgGIzI}pLeJ?6vOw|Ld+Cfw~haCN| zR!z7@nTat~53-7`LFiama($at-7YF(Ox1E$4OF7o1BH_oYt_crDl;*r>LEjQ@jpMg zPpkG26)~pjVOCiszrzc&chaglQ4s@`W9)r|RVQIWrKjqz73|4?JEwv@q=1>f3oGAucU-hlg7hNTUb zm4@XuSiUeU-@y_?>FWshz7gePSdM`u%dk8QOO9a~coWLUuvEd)U|7z8Wr|_>7c3oy zW%HX+K89s7EQ<`wWw0zZEbqdy)UfPy3(Ci^90JP8kPpbvhiIgAHy;ZmJY*mAuRI^%UiH4GAu)Ig}d0W%!FmBVYvyG<%Z=eSXLO8 zk$0nf49iild|_A~f+dELNw=SY_n>?XOEoN6hGh{fIfmtBSQ3V1>w8f?h9wEh6vJ{A zEFFgBBUt7emOU}TFET7$uq-w#cf+#Ou>1G)DYmF7Q#ks0{3@xUAMlu_3zM^k^ zzUqI2^s4eisOWgCUsepWgJV_sIICz*L4n3T_~n~rkJ+or`$WZzF{eDis$o#zL#$-? zoj%d3??lCnvC@0eQ0-f=`0rYk_fI&&!HkjCQ>>bZ-_943#`f%)g7Phc&b({6%{e2 zipHt_8E9;LT;6^6o?7*~sE9FDFS5!i!?v3@U7%Ipii#Lh^)FW87azl(J+xh`Hh)lA zi7{3GX4Uqhx@GC*?`c)8sE9FDFR{uh!z13i3S$>cd>kh#VocS`hAQ{6ixz9uwW1=% zRK3Eg?Zx}YJ8!>QtDY4VF;F?yY_GEFr1fz>9DOfj;+44r`6tIa# z0CUauANF%2s*w85lLLR>R{J?n{QL)F0`-0T#RFKVjcCieuw)sQp$}oqG%Pb=Nf?$J zU}-QcpTRQ4u;f0BG1IVg!!qBnEQ4i{VfhJ`#fD|yM=)j@mIbgZH!P3Cvcj+odQ`31 zbWZDF`NClS4ofVf@Qv88SxCt$FLj$%VNXw z04z%lOTTAPK8B?XmKBEO6j)Xomgiyl!mw=m9LlG^vwSANl4)2jf+fqayah{+VcGHd z7_ZrMTb%(*gTdSg%M`=%B`h6=WyA|8AH#AaEQ<`wa#$7{mI3HEOASjEEXxhcnXs%d zEHA;b(y(mxqFS@*TpSEbY#nF$TnS62VOb4JmSNfBUnn2L(g{n#uq=b6!La-S%M`;> z_-~YtVL1Vo`G(~gSQZ(U%$HC;w#B*ndJT2oKV$Z8csCcH7ERr*S+BmvLq*4H{jy>h z=N+rB*IBh8&Y`ekhkd*7+SlyW*U6${#+V)6VAU`v@F8|h!-VU#>QPZKW2}hYG*ru$ zpKzd7#a@OZ9LyML{g+kLLnh$-mj62YMXlObRLmG@y~U~m_K9ao7F55ZVkN@@Q4wR# zm2b0Zkf@$5yZ8jHdQeovn5vbm8Z4>-b=iN{s*glPjH!BuRrtk6%dZ`?wQ8GJl$97$ z^)9Q{6V;0EAG}_SQ}rIJtb7d^eg64cHCa@|n5y?#g~rCmts^RK)T#xdBF0pG zz$*OWoQRhW2!!6l@;Mh)i0tsTB^H5MU1Ih#i}hNtrLFV^fRq`OH{;| zs@1I8SXAr&=ldhIYMWP;nHW>`5vw*6)wcVcezjIriHaCg^)ah971d)U*Duqmg`y(H zRDHs#A)@+j>%Y9ORm(+13{;La+y7X#dILPugn4qied2rSp0de*lrv^{pDjTw0z{rrOVQ!jo##YjRU2EK6{mQ4ItTV94G%dl+u8pce+asVs|!*Urc z4Tj|%Sf&`3?AI}78kQNb%r`98!?MV*d&}<#$v;I3M zAHz}$OO|0d3zi(i@-i$5!?M-8C?CUe5G+#+%Mw^R49f?w%r`8%yod5JEVE!)Y*=oE zWvOBL7MA6PWitJaxET6$L#jxam zg7Pseb77fpSpEsiBE!<}e<&ZrQVz>f!*Uud%MHtmu&gjFn}3S(F)Rnb@`Yhp3`=Z) zvwS{)CDX9%idiztu(ZRHV_5EhC1F^8gr&i@I9HyZp#}HPcoF9oAn_rWym_lydCqEV zX@h}}&-!J>Fk3lRo}aU7L!3pG$A(Ti^McRpmFK>nD-|=w97nySe?~S=<3nsr{}J12 zRh6iiF;;_LvTB&9=-oiA+Fw-67-@aQs`a4Czz;p;rB%~K#f*{G*Q`RN@bS~pUtX+Y zrGFkNDq_qT{~K0qqC~OlSC2s%!oRVFH8@P8b$ z#DbB*<%hawfBP@g4=g$TTuT#+-Dj!5n5k#5%8L2(Ve55h)w`l1Mx{RJE0qhCI(^>N zwzxg_W6w$#i=DFi^Pem)c=t(E#36QlHYAPyXl%G#i`We7}wvu=jPW${BOM@p_zE);p@R#YPw|4h*HBS?i z;&EIB3}ioB;v_!AHed1nNVAMt{j-z5bX^__$nD z%osTx#3~w}>7Z|0)vAArikVm=o_}uXR-CtmZ@_-68vOnEStwamTiA~fKg6J%9pCD< zA*-Ggr&~PqalPdq->5ArVxXd@ucdr8VwHdS)PAEpY~(4Q!K||8N-Cd??DA zlvU20Zer(j4^c5==P z`|;1|+u~<4Pfj;yl{2TC**X1IRLmGT-GWuloNCpk->IxHW8`#8R&5|T9rDj?$Jml1 zDq>Vl$G|ezH>X>%AODV7;FSrOQI=1uV^e?Qk zayp@6!A0BIIlWa>%osV{o>k7AYSjy(V#XRtIKr%e2tN~5mM6j;JP~Hu5f1!8<%=03 z!W}&kYSmCtF=IqHBp||4Q4R4#nC*#hh#ld9qGHB~aHuCjtvW(f%oq{w6cFKsqT0z5 z;m)22cd{eAMO4ff5f1Z2s8!F3iWwuqT>>KfSX8@sBHYyz;VyQB>tMA{2Qx;5yLlqi zs-dD{Cbnnsm~q(?i^r3n-C2d9lP)`5N4cn&;d4n?sHJPmTv##<%OY5|G%VM`l4V;S z#=qiSJxxu`U0sPpezLAG7N6PJm7Lbx*4{ZQk*w>Pm7Lnx)tu<+o|Z`D?O!mxwY{-h zPA9v%4{vQwASnn!g*IZ=T!O)SdEdOLNok;iFTZZtHHI(cGEx{H*qAJ+192Pg4#8 zLhI^iZfZdek4VLIx3nGJhDu9LZJyrV+3cTAcV}ZqimK?OvXKgO*OgVvPKGOaTFZ=< zZm+`%RINIdo8t+DPR?qao9q>6p4-vh*4*Z;5X*xFq)Mcv4K*6%!vUo5(b+hyWv*`) z+|8+_t=ri#xOtmRDg^&UgY{iGs$^E$h+wWk^GaLw2}qqDI!+0@?F)!oRK=Gi%g zi9~m2u5%0x=5y8nuXeky#>z1{rm^i%gp(}nZ0VjktGOH31lZY7I}wg53*fA42O1dy zFy}%q0CTRn0x;+DCjfJfx*VKen68je<%Vu>? zZ*82>mB{6dzaH$^PVJda>GVc+bToH1(T;KNY}d^8Ia~$d(2jNtNFm*Jw1>%7YxDFl z4m(?B%nZZPc-e`4=@2naYiD?rAOUA;89IhxBxHPj6{%4HGT3wXiH_D=a*ty?xr$7T>x; zcj=}9NA;uT_UWOx>5VO|p}?t);Sx?(GUZ*EAJin>)M+-o5Q6HwzIjTwXw-}v~oF~+R`S2e=qr&+C0NA zKVzGl51rQ1DJ`L?r?Ypcxy`p(o1Wr1Xaq^j5baHBF|=Q4VPT@7w5TL8IhM^&24%;C zp`NxmEp5|!q2lr6NLNZDiV`unZl2rJ+|k|A-sVWZu(W7D6#{f)3VemhF*)(V39eI# zQE-_YNfU7r_X^t+36)B6Ouma`a7>=BHMcMk$4a%dFwx6tSM16sh2=V-!WxtBGD{48 z)^bq4Tf?zm6Fpo6isSb&)urOKeh$n!s z5>Jg_*rKc-ij|V>T@_8`v}6<3_O8@(D)2N)Jjbiy?v$)-!$dzlF&)!)wAkHt%!RiF(&aq?sx!**WA)9 zk|W(`?cR~<1p3B!_c^O)xb4y}{LQ*o_?|C!Tirb(_CVB`@5PfQ#t3pR&l64nY9&X?nf{R>*!Xx^gMN*#RJy7pib~~qK8ZK45CzDm=*Z(Y*Q&re4$N3q} z-5A__~D{x=v``s=u&;xa<#OcMLaHPz`vjHc>L(_u^_oJX;OT-MES50-h5Mb|%lt3m1$SS%T9(&$`TnTRmVct_9FuETk=H*8O|D^QL1t_IdiH)e4q zuY3!+NhQnMTGl*yT3}%Ousn2hHuv30<7~BMzeeRiSy6LPvZ1Yy9^&r7E#%ltL#glJ zhFMANRX5TU(&teClcm{})tDU3AmgadiJgtKBWTw{dUK?)DG{Mds}m-p^BGT0#66y5 z`}8DoK0_9)yr-*nKI6&aL^7wSGErRCP*YS`Uy*2O!|>ZOEk0Zg>G9#X2irn-1>)Hl zSn)V^vkbYk73(|t(uT3@*mk!NCG+W;&fLAVQE4L$eeLBb#=PE=w+Ab17la&|({gFG ziU`A`9X!9;D13aFvaQ)M5?^*EBM2;x>$$ELT%B1hFU`dX7WsA7jf&(%+|uZ)!y>*0 zvdS$=msasb=o2G{x{Kqyj`NNjg^8-Ny2|>RLV6~Mt~uhvyW892!&}?&QH>b%be&wB z_>33!B}X=1fSZHc+X>fH!2L|E{3aD~p>m_uu$c--lx597Q$!Sr0YLQ59X z?OnR5E!!QFc&S16!wQYtym&~i7t*S6teSg4ljAD$Fu%I)G@_*PaB~j{PvrfsWbxd& z<7RfY&ndO;0>_fY;|l$huw%c@|E4e2xvqrx%F$kN=M|7!OYXYInHWX8D^~iB#lBPC z8$uVafg$LDt2fRr<6gjcQ)5SC6TJ-E#}UWs3)5TpL9sQMH+i|*)zQ;!3{qiM%v3+g zDjMh1hDJP_Z?n>z)~DR8l@1giRbuxXzH#aq3iw7UwtiFG!lU+1ckZo0I0R|8f?l1< z=7@8%TXy2rB`z*VjlE2}YuI-ZbIqN4+J*_Ku%iqup*y=S_x1*N3On8VahmNGm#bh8mUxZJ@mY1FTtl|f`Sh%GJ+4QqTsPZ%S$t( z(raD$SI{6}^^IOAJDEUdSS)yNNbtC9-kqU>a}@F#s_aA|kD?Xphx;u2L)H;sDm zM4S8O51KMnxZ_S2-J^4DzNRC#gG(oAY7hR2+HE5Ew0d;IFUwZj@YmaqaQI2pN!>;Q zT;LYJp9gna2}9w@mQ=3z)<9Ehb7QAZy-uvaOYeI5*BfTlS1%lDhPTnm67}^J^|eLy zWp>i>{CK{4TpT-U&E0ZIEPQ#QthTzWqPVig;3;o-Y}_HhHCzEYwST5@#bYJkP*G7` zTZ`N0R*REfrcMnoxH9A|Ck+(fD@oc5YoEQ>t5gV$%`FzpMv3KnCniwJ50~5dI59< zDTsI%Zt~Ep8ur##*zE+qd#9fkxAp1WZK+6BV||WAx^vvNA4QMSxm6@2xWMI)uuu#u!9{R9d4J4AE|aefiCM-M@PX;qZ;!mbq8a`76>(U zbnsUx(`!WmzWB+l@%#c(ZDU6;oTSa>vd+d?%@vJp(^{K5^YQSQgqduj8_L$d)F$Fs z>#=6*btu`=_LVqy#+O6n#DhvFQ9w_?Gn=~xY~C8M`D?%ygky1E&)aky`)Dc8+s!JK14oleg?O4% z3Q)HjD&CashI)jfN>e#=R;NGXt;$|Gsm5M8slr}4slFhN-vz;|XRa-nv3R-Q@sAjP+MvTv!dDFFte|>5CV4GwO>k-G2Ju#W`Z6??$!4=$0w8o;IH?TPwb; zcCj{`$8mAZwQVn0*JN>IUHSCQiIu-Td5L$m;k)tETWL8)=RSI|v(l$v?8htnv`V98 zU!Af1vTn{q<<`n=#D3$=o$4Dj`WUA?Uxe!*$I5Q4__hjSZ8*m!m3rH^kEMZY0B1Si zaf+syvIdJZ1s-JWU5>S!Ob7iLjchzfK$%gC#I>H8wU&%zCejS(?XHO3Iu;tywoklE zz*j;M$2(J9GLh@t?5O*c!+B2R&OM852WTzmBJpL-ijg?e<4q*) z+?^^4r;aBE@fBe5mcR8}owo4KI_=D2RU)^bMwK>H)l^hgm8(q`V&#q(z7sgu85 z1nb4?yacvKk_}yr{PiB{HFtXV!@u(Le6C+h@hxcT%T#oD)@y~wKZbwB@O0^nN&>6IW?1GhC?1M+R52>jTCC?58S!kt~d(fEr`Z|&)# zFBwv?g?@QKE~gw9%YAobWv$Pi@bW^(^tpDXLccAFD`exr2Io~#Upxj}1@+x+hq~(N zW0tM5@1q+%G567tz3}f#0mZUiYw^B0b1xJ6mPNfJ?n_kJ<`TFsuH^2DEJ^#~Nlk&q z)qdaI;c-Fpk%Q10 zyS%+Er*ipI<=|MS7%nnBk_ieN9E4SWK{n23N0#+?)6br zegiJ9(yN-l%d50ps>P4}z2MP|A^vla_1)uZBMqyKt<8*h-;(HU;4pTet#yg#U5hpI zV&$}tZXBJ+{kp}P#pCHaeR3DaU&3hY!QZ68-@7*c^1>v1@eJ)wJGxZg5;C4^b&Z>A zQUYtG1KG2?)o3Da*V@0;oYqzX@rWJE(89M@v*RQDFW9U*aLzC6=&ereuce`~aV(vk z*O<6OT6-y`-dXuSNLDsq)@n+6e`YNw;~3l4W`)JFtzDkAoF8)|Xe}q^8PC^h5!%~H zYc*Hqj?-FA%DC&YR#Q?F&;RZ4q}HGGM>gs0p0(LBWLjM-dm}V?tcB}+$E2~AyxWs? zw8bJb-dfv9a1_kiy27UsaHvT^C%0Tbe-tdm%azRY)RjTwIWI1gSps9-;aA8k+vs$ ziIA=bbM{Zyi}A8*x=z%r=D76io1@4&RMb~#u4|}>uK_LZ);PCz+{fbueI7pP0u+O? z9`WPxN&jCvwTjld9*itn%du5w(UpUEj$~@KqO`If!31i#v@;%^&!~H?`XXWTrPql2 zmXU;2Bx^B^csKs~PFW*;fx_Vld_ASwM3n0FJ!b{wcQRgvZ=oVL6Y&^+A68a$0fKjO z@GbMj)rs=rva<5Z>V!lYA3m$OduBVno}sh3yQj0Q8K3IL*VM$bOKR{v(#`m~dG$wt zYa83}chx&BT_Q1-zPWfp>0JDI25hyrw+T>5f4ZCA9O1vd7)du#wHW;x*6?dpL=>x7 zr{f66b<=Hjykbos;Nb6$O|K#4*k8wo%W=mQmSb^&3-muQB6Fqw|5;ep0RM-UkiKa6 zV{0mwtuHLn>h=R)}CuBwQ`+~RuBK_ zsNF+$8a|TA^05`_CH~@>%}s|UODpUZazmoBp{}-}wx}VIAI~nvB6u8%CqAkxKAe{0 zSRWU}hsQ_Ye#YnwzK5w<Bd<1F{1%PWdY3#&>i0l=jK^lv4p zGbH&%RrN*n<>ggcVgk9vr8O1x)ipILQD<^RwTar2`qGM`ih4SU(y)H3#3@Jd>@tU4 zMP0^$C`O$X3-gjQR}>Y+^>w9nC3PwxXB4%Gy6WdPuh>WVSkV1B^f z2u61d{`oXWItKBYM0H(ZePL~VZ6ZE$YiW@qC2e)%;n`j*bt{v(MolN=>F* z$2^r=T3^;sU0hfO@1=!C=5ni$Gt4KL!bTe>MwS(q7uQx4R$^i$w;V-5p1~BACyI+2 z8tUt-Q8YZV+U#(M?08i8@StO*`O;a)wTbH5lG@US+OkA}?L^_oaIP5}CWz9K%97gp z5*qtyM0ZJ$RIW1742Gh>ZoQ*Mi%T(2HdNP@*OVkwY<8jANm^NUWJ8@Zv%wP#G72}k zI*Sse6%Fd0b$_gt2Kj*%z@Y*n`MOYu9LS0svxsw+wx%Bm9uIgGl3PwCxJ`i`*U zxpv^g>+8!)iyG>Ssm`;hRGpApgi&;D3AOI+G&0SZ7e^6;iDje^1$~?_qmM~L@~2O(8dZP=(ocoD39S0l*jN0 z#=_wdw6PHp^xF{;l*fn&%40+XW8sJh+Stel`t8UF%41{%4K+MgJ zprz&JM$mn8bE7DeC@vs!qqu^|&5NS3aNWi_>j9cxYJTnR9#Yv`vr*(b&F+OdnMg+;adT|x9#-~cXd%sQGI1q9qn*iHw~Pd z+(ku+s^ZF$s;auG#PAXE;Uh+Zv+rNXEe*OOVeEVtRVV5ZQf)c5&ar*({XYxoeu(+w zOnGEkNqr^$9BwJ@8PF{dYunt(6cr|_D$C2us*CCq(_3ca&$D&lD}C|g@666-`73Qw zO8E_ig(YRB6}2j(PA9`_Yl|Bi3QLOV-U)6Na7j3U+`6LDy5gc@erloG%xFWRqO80M zH(m<)?gN6f3kSC;@PFk~7Zgs@4Go+@Y0`gi%9+?m++?c4QwtKP?ap9Is!JZ>dC zy(p?XR~;a<`ueJh(&{q8?6B~eijoSRZ=T^F^luf(@H}wJmx`Q|^|?2(ChgSc-b8r0 z)Il{I3lPQ*Of(Dakwrl((@5PXK`Itq!owjsvs&2xi*h5wx-45sYIaB4{73 zdlPAusq5ZEdOjj(V_c z6KVMv9YGr#9YMbx9YOnW-J3|SJR%qibMYRl^Co;+f#l{y&~tNhB3P2SZ%(9{od^cR zT)au%_kwjjmXuz0T+bz?=_G;y&3#`Xy+~Y-CZ*{lfBqPUcB-&aU8k|-Km6ju|u1$~<`tlj*A^mp^uMC#tnUlXl&H-Amk zsdn?%z=yS)Uz(^Zu4iY@Cmx&2%##MP-Sinu_xBnsU4_f@nsQZwMu@5x56Hg`{3zF|$)toG5N6 z#f^`O3VLq<@9K>l1qZnCqOvFV4d^ZcW!G7)cy*_!xTvb87%zg*%Mgf<668`r;`qP% zOu5A;+_%AL$poFGADkMQaDI1m8ok)>#lG-;A?22TS}x3WRa!30i7qV{<}{a<3v*UT z%Z0gQPRoTkBc$cRTrQ{O!dwKU<-)b)pPmo%YA8J)5j0TOZG-gUh@gGtM$kH3Pb8(4 zm%IqdG%tc)@4EGnUS1;TF0R`KX~p5XW=PLR1Z~XqN<(^aM9@xMw++&Y!}U5sdOji; z)LrZR^x}x1ow{xtq!owjb%gYMM9@B5uQa3=M+Ebn>$X8!akySbNY6(E?Zfp-Lt1gT zZat*uBZB3e>ve?m;)tMqxL#>UD-PGKhxB|zFgJ{fpx?S~8>E#N*DDR_`G{Z*1 z{=464NHdZM21fTg4e3SVdL1E6ClSn@?spo}j3k1UbFS;QL3)w6UPnmNNfhnGb=x4# zNFtbqb6t-ir5B0ob%ZpXMA1%MPa>rmNfg7Q>sh4qB5^%Pl%|s?+R2DW%A`+ovHZ=J zS&c1i_SY1vf7rK`)IVMKiP)G-b~ZP*CJOSJM&;nJzA6zfUQ||;7T1^8SJLecy03vR zb1WS@ZY;jav9PkHw8Yr?2VP!XR99G0m?*^epIc-@;n=Y*vOZB)QBjR=RBTAl*Jko9 z0Qqi6=dFbLL_<+oePu;Ok;WSE<@5AykdCj8YDnN4*-P+cUB!uU_@+sGmt=gn<<`mJ zhEqvVO=V4WxwymK58qU)%1ZE6Q8kqs^Gy|*Ev_lAD08Q3ennG#qPn!au&SZHOx)pK zhi|Ht#igYU^$j%|^G&s)q_C>8qNLQFs`)iw^@*yw`nqbAinzmV6(iNLJx%n*n{-z+ zvMQp(_uhZ}VK)JN{SeU-I8UnXx^mHBarCkv-Nr^C&(n z{>}QA`fnnZS+r;8w8rj6ZC?i;r~R(~O`j5(ISDt1WMeZuT&6GA5|TS4BzI^?t~De# zD+`^FD$sxJZLvm+@ z>X6+3LU0t{7aq<(zArtTe|+DD1|H5ozKuh2e+t1-d|P-p|M<4_aQ^Xa8C9L2YB=>em?!A!Qs*v0#A-T^( za$kq!z7NU$9FqGzB-cNKTD3k>t#{WA$!!pl+c+fmr;ywhA-QcraMXXd_i+CGcV`dh z-+y-t$?X-A%MZzo49Wd9Bo`0K6^G=?Lvqz2x%!aY*pS@*A-MxWa>U4t9ql!p)}9zER3c0n}4^&$-Tgp8~&{MD7(|rX5&LMn3LU{nJo5HVzFz%JR=-MnaE5m zSNCDHKe{daGMJA{PS&v|_cfSx`>Xs?xxk-?qja|c6A!_S1vAIZ`Q+nNFt-R7l#hGB zJZEyA_^94q1@oSpbG3tw!F>wm7vb!7;NnJu%UmZTR*4@vs2!wgFEhY&IXJ)eLh+p? z4EdvjIaj)LU2&<4<8)md#j_*?HvrsK;I0#va^vTZxZA3$66^Ikae_am6~2B`W7%EzX{K*EP#eyRMn2*FW(Y#oB5@!&5ZIP$ks2#(_0H3YX2 zxIIE}6yM$jx-dZaV9xbC4b2Phg8Rwv=RfXlIWQx(4}R!S>4I~Or^9e=GMELz5uIvY zI1S8Vlk<$HG=E$V<^kb?=7oQO`OeL`#w+UQgVxQ6ZHyl}QuW_FoZAXawVU&)kMUp{ zg$t^WdBSkQ_{H_%if?P!PXxC_SUWzSbZ-E&Ot_$QUlt}P-F0#Dzb?*iyebFxKDgc1 zQ{_kF2y;I1jRlhwE-1dEg$asp1Wqmlcb~99{o@5NZwMEZ?vKI*rMn+aW~`qP8-pJ@ zg3_H1rc=07>C!l~NEmjAUw-X?+UX_WmI!ON16O<50Nf2=?s9Xkex3<#IhYl~1@)u% z!K^n(@kF;LKs*9uYREAAJJmd*Oo8-E2dZ z2T9hqT{Yw64&Y7@HmE&c1m+syg3^6dn4okUaB>B>tc_HR^gGqKu`8Gn!Ud%}PMDx{ zcf!dj;7$-WFu!1~5iV7_w0?P1n4om2{XGlrEn)5a`t-}yV15wJZqLl=>mzFS8xGEh z<=}@76`!|X4#l}TFkQkCovL3R4dyJ9^Ylxae=i1ei*P~lJpyKxn{)L`8n1o^GjL;- z54&7k9MxMUm=VGS)ms&q3Bm={TemQ9&4*vV+yrNia&dm+2F;hJhv0I+odfPsVeS0- z%$LuDd0n`meEc8`X9BaeTTkR=R%i zk-pQ#`Nc=`U=O$>gtg;ywHF#cj}PH*eQ+m*;HaOU6@sI5FATv^J}wQxQG8c~;AmZP z1Gry=4eB46n`Fec#Sa}p^|rS#4C0qxz0vh=8MyJn+Ufd?Yb{_7cW|lpb4~|yt8gkl z@3=Mu>AnEwE8!?Nsm8Tmz+`T!@++M0xVANzJ%tMz*NVVQ55XM)<}x?ux;~a@%qZdP{JQ!PUH{gAne6cA*Dq;bY8seJg`;|7 z&SzY^56lw|j@y;%dX@6=fiU>UhhO`n_`U@9yRejNPS@4`Xxv@@&l$1N_@QGUep0o+ z9xxXQm#Y2cLca{mYT<(F?JFrQO!ACy)>W!{H-ga?*@r?ubc?gci)8frl z8FQle<>!yMiVz&tM{Nj>_N69;;5Gv{9o&(^QluQ8tDRE0ECh3|aCZIrtpBb9^PF(0 z+G!E|eFA2WEu8JIVY%PF{75j>28VIiC*AR24i}E*yHx#X37E%(3(Ci9V19LTu5of- zq_fGE8L@i&&_TabjrWtl%rZGoKDLE^4w$orv&+vXzqf*US-7Bld<15rtyFwL+zwz$ z-JGjm(!4qe%uENDsy!bi3?zK`an$~f1$UmX6lJRRw;0S);ezt@lihJhT!%BcRaY;g{5*~e?Iwm0?faK zOO+2w_e){$kq^Io&^+@ixFPfcC=T-Hmk;6!!OZA|qj`U!F!;!apFiTx4#818OG0qe z-mVJC{UZcN^W}};?huwr$1fjQus;CiEjQ;=Z>zz4BV4L_qjWdj&TP+q^+x&K+Qs?B zN9Ft%aJvg@=fh`y8v&+FIJ;l^jJuP;93z~{2gU?prG17IT^y(D;;4Sl2+5rnlDjM< zcTEV6=C_+ea9e@dGLb}9PM-c6oMmvgSR)^i(h?EK8A$k_6fn!i}K^a z{X|2OxxDY<{PIib{1B4+IRr=J&~G6)THp7}>b*W_ zKWyC)9QoTM1V`h><{`LI;CA%meClm7xaqpA-F$*yD9`n`?kx#Jt=I^I_FI=tAz_H=Yczz?TX9UHNVmQ^T8g@J8x0D+R4TF z)yEKUyM^THLU2?rhk;ulY*4wJ2j&Xlg34vNFmTO>U%61dJ?Y`R-}wo!ACy) z>Vw+zWN?QH8`PfXfjL#UpmM%W7)ciU4BqGOX`kj+59e*qlfgaY;{5VKa7#phQpbf5Di59cixiti$DHwYUP--BSD5iTgc zkAyMebM=pGocz+o`IU1XxXp(4ULQ1$mxth}f7FEJ#)aT$y>VbjZe|FM)+OEGZWPw; zm#+DZ@^P2TAMgLU%9+OT2V9(AITQDANbd0v9IcC=2DjZ#s_v+MI9;FduO7?+!UeUf z!-at>KDgcUbz}Bi%SQW&$AY_5SZdE)E-sGN&$ohktQU^j>1$wq4Z&@)b4F}9e(12% z^{J0aVHm`(RP|9Cf|~~Ye&FsDHmICef%#gvpmN@1nAzXBoPF}Km5WQ2kL^NmQ;?4x zz#S`WP(E%4^Pq4+`S`CeaLtEbKBnNz2jEI~>AjuK0dt&iLFq0LMx{#a&%2*U>0SqJ z{at%c_pe~eg$qizS(u=7cfiS6;LZ>>XuQ7y%+10DrTeTfLFtnIB^T${UTEF^D!9*u zrP5)}XWaM^%z)ig`31!{M3|uXX#CsF#refY++HEM{E*zp5FF+2uOT>!Z{H9c^{=9k zTzLqN){`~hju1Ae-i`;eNVuSSyIB~x=EJWak^U|h=T~pU-4lYN^1D9-N9DIX1V`oa z7`U&64Jwyk!K}Y~@9lYKVc?pNROPali%V55c_BEuE*l<#qjHXi8%JBOj^ay8+xi!Uo0n2$=PARi16mC%!*{*>w;i|!aI=IBif;~>=3{F+SP%uF9G+futC=;d*x@u z{)!(uQl(4#2a|+h5WoD=jl3*4Nmes`mMfO$r^p!$6o%tt2Ysb89ZzXr3#NR=1r=e(ce)BfUMnuJSL zztmsnfH_Jy^2+t=TCdSM=LBK!kq(QAUi(cLeB{F~J{ori|1Bf-H~i2MR4)60IY_uv=~B5IDGWQr zFTZpXu%8I-35P!}7oYro0Om^v$Nqe-qc+}Gi%XU6zTm2aO_g7&-_K|6mWwQDqU*dsje@t2lKpeDqZjOWeN2E z1Cvvz{LydtTkc+8(fx|O!PFU?HQwv@5h))N!A$Fgqj9$l%-@Bx$6Z%Dp!c4x0dtGP zpI>_+?jA4?_rg&->8rSY{`Qv`+YNxk> zyB}OzvF=BlU!Qd6f;nEeRO!-n&lSSpBOiY0-i|Z(f}2&+d%APL94A~*x=VzSWPRtY zEpYN4a4UqR)cxw0xYxma*$a0TxSzqCR;uz5H19tN<|W}$<%7nduY|!zKDhjR#?#-x z9aE;#4H{4XQjX^+@I!}6*E^n$$GItB?i7ybRO9J`VE%1z-tm;i-T#95QaF2@I0PsVH-R@ofsGU}U86zCgoUUs;pmYxe)9Uu;)8FQUxk|WH zHM7`#p>?u;+kTAY4#?yB^G4!rAG%>W#+nmxRGb zKDgdo?U~YD2`;Ze#TS(BWH8f(3rhERVI*1K{?>?-i@<#;Y|wt}kp1vJ7=GwTl`gfv zT45N(FTecK_3A<3P7{{uH!H>WMJ@(&qj0IxrE-2+7<}ZzFWskc<`r;@$EbV+rF#dM z<-(;(m)hT3!l+dJ^V^1#-+`MpR+nF@{4M}yk^sTqj(rdZT{y1emvlQ{%n=eEBt)Z6>O8Q_Tz1 z4)y{wQaGah@=NI!f|(?o9iMCdpmsk8%!v+ve)C5b5;_aat&>!ILDvDFg85N6J6%^l zr}gs|la()gg!WF3v9>dEgEU!BM(bhTv$6^#*XO4pjLFYR`Kdgmn&n=tz}cs<-{Y94egM zo_+eqJTRyB;*Z+jbztrZ;qN&xul3@O+Wq%nHa=M8!;a6jo*V{l2$*W&RDQ9pbG1|A zTELv;_UGcLT&@Olk8qSaw*w#U5iqaz!ev4KjxhMhhuy9m>%RwZCL@XGRq#UxwF~aQ zu5=TyZ#)Ix&ww8~h_n5%Mg3~Re=Y~puTgP9{i6U(Lbz1zh0-}#7%LgSbSa(bE-s7K zO|E`U@f`~8d0~U%i%rG)06%mD#kZ?44C0qxe3Xwo7ndr&y}?~7Y*2hJfO$i>p!j|i zrnmSqnp9pb&M!W?pSONUZfFRO;w}uym4x8vxyW*GJ;G9sI3IrF3z$=d3o5_s{vUH+ z0$x>hwS6-HVbB{8H8@@&YBW|OI0WNxFG=(SE*cOJ6(tBLC_>D@pjN4YN^(tWt!?d~ zRr_fj`>Sm&wABWpVRAs!7RNf(Vx#>~zalv0f8VwCIrrRi&p840fBtVjx%aNK&wKV- zd+oK?o=*%0NlEZ4Uq1h^2j{0h%J)0q-ZI!Q`Q8U+hrxx(x6iE1ato60AP>$@KDL*K z>;jJR9JPzMV|D?@b)k{FfD=9J0*>>_mB7t2So(3vua6xp1?C2W3)Ay`27{y|h@L&| zLM`q*0$lEFEt9Z)f)@kRW^l?E?T2UI1J9S;15ED4njXJ{<{bwC6U)G5&oi){ITDyt z4bJH&`pkn&1ZJTZ=kcfXPi??_-{2^ppIy=a{S=rxyf}~k*e|@_U_eR`J$v{vy@!EY z)k}JmuX7jDBW|4s=a&!GkEem#;^pg+?=axr0;b>+Ew?cHI{=sxgA232(+vhmOYqan zw{ho856&+iOMu(B3pkEftLA7PgekuK(j(5=1swa2$z8;qy$d+j^YegfF<9zPm1CB!{8;l5t zFF*OJ5kJF&^OJ8jaCiIReDpW)Qse_4h9LQf_H%v(%wN3edHhugaL)ttSw?!<;{eJx z>~g%P4Ic)6i(WkTN8E|PjOzu*anEFf0V%=Jv#Wp4d79b4{lZ{bPo;nF$p__mA}hT@ z-|@_ozpz@_%Eif3S#}LGK5pX{=*f74g z0&}myh4Ec$Fv``R?+Dy{)`OG$di=&Ofcprz?=4WhgpH?P0Ok#Y3zCoa@+B}s>NP#b z?mgv8J3S1TGc$16c1qkuz_b~hQ@&!SX~Saq{u!7p-t;_tX{YZS3`hyGuHi|K`S={T z!YkbQ$d<1hxMEW4o0`rlOQq4@S0q@7ehaqfU>P2AQG`OJh zV19dmi8i|P;XhwD0+?|bxa|D0Jf;J4y}@Oc2PM`(y{rP}LxT&`%ZW`$4F2nbFKiU z)!-cYST9}n!glr7!2H&go}ay33EX4AoVciWz03us+29<$9{FhZKLqC21{YR;{{+n2 z890Bvd;(05!G-Ci|Kgm;A^0#j@_F>a^}*ACnPPB6`{{-Gs52Ol68!uh$G=U$-Ii{tn!I|9G7t4Y8;W3XZ4g|~qDx4{MRWqAy`QuAQ5@#D*JN({Ku4K^&l zwZKd>xFEhPk1Gu(jPDXgMsS018cJzQZZeulS!Ir-a~59RB>pW$?1&db0dJrCcbklrj{ZZtS;x3Y0u*H{D0 zy9THF%hn71_@}@Oxklx4?7+ugl>u{x!4d7}ug(CY3BcU4RMQLVhrJHWzYNad>#+mM zSMVK83#0@;`;&2w2PgLD=_hhO|FOVbVz6QU;3{CQH@G1ASU>JE7?sYye$2tmhk+Y* zo#rKs@3(*%ZE!(+>4(k%<}z1$e)e1f+_k{`Is=z&2lOw00;bd8D5a$5QyxzP^ACe_ zaZI)e+-%k98C;7ZR=FSPqd4F;qH(Tm5PyKv_j;BH>7`PF`>f4koW z%w~gg@=Lzw zc+&IZ%X5L#Jvia(DG%b>b^*5?xZeYJf2-y>Y&`f+U_LgupnT9?2DkODKicV`9$b+A z)&lpu!G`hu(375@{`x?)J}I0#xj|*r`62&$ITDyt4K9c;{lPSY0V%@Wc7|=k>t7Xs|)~p#6R9NzX4I6QH)wfJ=T)^~e3yk`Eug2Yny=s_Hn1=z6qFLWZ?YUg@=GyX>jB&>4`s04}huXHNd>?P0z!Z`@KIh z7?2WVKIfvwM*Et-)Sovj<^PNJ@MZn@4CzI0RJ~|^?R=!=V?S{OFlTsio__2I;LZo; z8iUjP+I-UzQO_%Yx!vHL^6=>&JPynTS9*T!Ajg+40Q1iboPRy~5ST9v&f)86->AR+ zf1orb#aI~uvfjiq^nIn4odb-}m7B^g{V=1#XqWhRN3n%(Dg;Cf^4Jqtf}e)77~7AK*^9Ny|8l zZxt}L1{cJa{n+^i6UKKXZe9u8$R8@-uzuJqVCoGnh%fc`Jz(xLxG;b9I56*K;Ou&C zORRq5Q($s$PU}U=*Hb@Oe+L0mY;cZzKJ|ADFlV~b^Q*rcZ%qZ}dj`jR1lj4G!2HJG z9KIg;I4|%NFt57OlYDsmDgF31V2XaE`OWlyxM>3Y!BM~*XK+OOrB{ylQ-N7%a5@hR zJ$uII^rwFY<_&|>d;sV1r-uXgB`}Bn*j*m*r=Ila$BzM~G831@m$>o3%rH17zn=6c zUo$X2_2N8wrX4&8%##M^l!uQUyba8M8ys`vX9w*6>@*mV62uNX{*<^cb^*utZ{++W zCvqA-3}N-{3Sho%a85ov`K2BF++ZX@e2E=+-$;lsdhq~}}T;=oMG#QD~@ z3xR1cxUl;6U109>;yiZ6dFsc3DgTAa7iQ0w0<+NIg7i#(a5FIX7@W%Izh3rdVBX2V z`L`cCh`H6RKcwfWNAw#5fEjLZj(i@!!S#9GE}ZDkqi43$9~ev+-+J8q0=UcX zP`>;Q;=2f#7K01QFZteKFkyUYrw@B@!q-zC?7yrBuE$`*{O(?N;(c@YFa*g*e}9U> z2oPVQKM&u}5nlsb^{+HN+HH_tegw=N1{cJacJLR20V%-Ee*rLa z4K9c;%j0@reqwNrAMzQe+z-qjdP$G@coCTQyy^M$|Gog`(7WB`k?q%*UL`Q+7#z`} z7mqy?Hv^dFUU0OlYk~QR7w7SRGl9DUnEYR-^YA_(1EHH1} zulWe`S7i@iJro}Xhp&%(=NXIu@#SX+pCG;gxVaB%dSU&hp9Ax2gA3wIfAyrngz-&+ z-HX5-@_&>s=kH1Eq9>&LUeylrrl($AiW`v91nhczET zIOcbt!GM(D*j0L3G(!KfKX50w()07rG2r6B)EOMduTFZP?ZEU_7>pe!<>qPk{|v!@ z1>E%CYCbsMCODt+=mzE!g9|DT+ST5_)3j{9e)6^9=C^?RgTaQ?qxXRMkHH1;W&Pjl z_r3EKJ$rC|dg(w?Cjhto(cblP-5)S+#D^hBKI-KGgApLUg7oqPaA&U6^uqMA6qp+f zE{HGna-YG3@#XmA5f9E!FT}mJ3%Da8e!(itPySK!5!SC;49qfv3(5!U+nojzmJhZc zj{>*GV9DJtA3P`g6fpb$N#!G7!TH$zXke;cI4L(z`$73;0<*~A9KYt{hf=`&HUpRK zhgfcFfqB;8D5W1?+SNCk+H`Hi0e zbGN|-@umGeVKB@N=7-N3wSaLkvZKUe#kMEnVBFz&&JfqL;PU+#Oo9hhefPVK;derO9Y@3_(vz8?7~ zPj0931S!Fh&yK+FG58DsZnVLM+0}Sp&NaB8@}*rZG8mhUA7AFT1-OR|HY~q?0%onj z1@UEm|6wp;d?(}P2f&SaLUj|yHwnyCgA3wI|GW^GHiHYZzuSQ6%D`pYAM^1tFmD+g ztXmX0gFJe0}Wi#|DF>CHUC^ z?d3M$?lV}YJUo7g{_l6dykl@-^6da7zssW+k9_1i++ajFeEG@8^~R05B^JE{yMA4JM55E4cYOaI4m;{=(*M{{u|Ux^O+S zejIEtVSFvz90lA}1{+qs-v{RB1{aiHj*nIWv)+}Sl&?>}=`~>btk-;K{q?Vx!+<%& z;D`>Ym!-f|8k{4aPraN0%;m21{MrSsuPy@SwhWwqyKoOMzcV<8ugC7`Up5;INC|#+ z&-(E)aPJx{^BePdU&c=mzYUn{H>m!??4=W!XALe$KKiu}fa$Z*T^|1HJ;Q)WWZ?YE zZ89(y7+hGnT>{Lt2It7i@L>qbFa2o)FxMHJV=q4G z{TP@#dr6P&Y6mc{deigq&)a}0dfqKxw*9f4IRTil21m4%hev!*>pF^}uW~xIJ*~XD{3zao&q~zbHNo{0=I&-vIMR zgLCBb@MXDgF&L)DAbfqw?G51G?Jg!d}v&p05Vx27?RJ^XBYk*GJFy7z~n@AbO^Jb_9N_@OcQh|1sDwz6CGkM26zS5X6`M zex$(&5MO?L+0L8_+{#9_#tvfcbB4dOrRo?^Ue-;=`cwW!pXd zeGM=d7#z`l{)ME(D}5(XE z8)2}HUOe{9eTNBPE;Bf$?C0+c^mC7 zJ`6$Sk;J{R!2HvM3Gb+UVSL8|GsWP- z_%<0#7+(yLBUb}wy{mk~)}3Df<_&`j;#&-6Ujj4ypXq$~)wdGhP5|b@3|w~k#(--8 z<|cz<{gCuLdbSY%M__WdDqrr)aP;h2UpN`@(}20f;IzJB{NX8&*Wt)JfVu78njZ5N z3ur(3Zo{}6ABG^kFu!HMOf|T$dNdE1n=^3PdZFFl15Ag(Iea~SjeK4=7?2YD%7eH! z{BRyUmjm|}aQl6z`DK5|PtQjoz7Cih436^o`M(8Vd>=5w{zubeI~Jtp9{_W!!8!T$ z$VWZ@37EGHE=|mmt2+0rQ%{h4KB& zU~D!)eEWTZb6NN>gz=pPOufN{@%^5`gz;rL{S3HY8Z5a>em(wx^9=U_^RXA_)6e+= znEpF7A3^dJAicv42BZYhi%)vT09VmVdbHDXfthP?VRrv*VD8GmW!pXFTLsK&gJW() zK2Lq4AKD1a+Xm<4*VF#e?sInLL=MDSH*CQYE z(P}W{%iw2!EZ-jh_lm))eExj@0nCR67sfaGspeIf+I)TTu`h5V3^ph|mTv->2?iHd zzO#X8&%pVY?;XJ0YjBh_sC<75%tnKAl|j=>lO^S74Ik>OpLvh*uGzQ!#V9qu;Cm){lXn$82 z3`hxn_D8-;fV;zBgZlThtLK3^xSz^LzJB&M8jj)=U=|iAj&j5T#+O~dY&JM2A0B_o z{?#^M2K9IACA+>cA2DF83|zMUSRT`WX)?GVzU9E(1k4753mXp>4#Fxw1{`V+n$yXW(t8VpDYLGpb8 z+&jOg=XEcL8_z5S1_NJX2&Z z_!oQ_g5;wgIue-E4K7GN*2`LhVR{UH{aE6r?jo*k7jPUe%*n#lnsfe?LIe3O&ceY@ zdgcXgMFy7wci`T=>u(V-Ee02)Kh87W0nC#I=jhMF_ZPrD3(RHvC||Zmv4HmDR$%Tm zxFEjt8*732yTLhpef-9I27^Z=_}TrRap!&D?%B6@`CbO*U4sjfkL8hHq-iNvQ{Q~r zg+ag-8EjB`%BeU^gV19$_paq!kyKs_UANd|M7)cOce&zcY#6Jey z)%*2czP|zHj|LZ19@O6!gUR6QQ@(Ei_kJ(wv3v*YpBovD4?|e_o&d~+894v)Z2;y< zg9|I)Wx(8=k)D6~-UG}tuJruMm-A9vfEj*(=7W5L%J(Q>$_*||&r=MBdSQ_A_0jW% zz+Ku)dbH;iz}#YRVS0W5m=`i|{(9aD%r=7y(lg8VQ(%T1sCseo>#0X&t; zmca;9d24K9rDKMbZfz8?U$$6>wacVA#e7+e_Ngu#UI z{S$810GEHb@(r7R84Ju5gA3wIducM5Fur4Oa~W`51{+qsn}B)M;KKNRYA|7Zr)`FPb}KuVB&P(C{Xzt7|I4sd@sQuE8_g823;&5i7Z4?`H=V+}@t_!7Q8{gTnZ zRrit}+x?lqTx)RTF6sIB=N|&|rwm+n`Lf)e1?Hay7nF}O;QAbu8#x{y2F^z~`g5&o zaGvlAU>-9#rsr3_FT;>t0p|BdYkIWXAU#h$2L2fzh9LP^PS+ZY0Pz*1=j(y{;Vz{2 z@Ghpe3b-eGNss0BHZVN~7glb2mE}e%@L^C~cDYesX8|)k1BZ6iV+Yhrqrose2ETb= zmhV---EXi#&}mdOjPtmB1W0(wz_gcKTRgPBFM3`M7WRe1icg!B4(fxU&Gb=MC18&&MCU z2F!Z~7sj{WDD<=OVNiR49r&bo3@{Z27nC0T!MVU(;Z4tDS0%tL2j;+I_#{G_N2fIC^&Zq2q98U*N_WET0fN_3&jrrUP@m!DXy} zNb35<_*K9>Zg5VydF+aIzYdspyf~lo_%|@08eC9$u>KYuACO-aO}>xEcMQ162J6V@ z!*@C`ml<3b-&TXM**JQ(Bk;QjjD7%I!HFv40Ll^2PR|2ovB3rLW%>RXn7a**sS018 zeEboZu3plM;rVxf$uC#=ob-I`xd@oJ!Kr-y_Ix2Q4F(rx&sPI;V=p-7_h$wJQi7vr zmpzZbo%?`$+F+TFAbWljnEsR^KbDZ!8L1sIr=0=Hs}rpNt&L3}T& z&W+5+haoJ#HyDfn@g;nH?DS^fZto>M`k}{xdDq~`UDETh(@%jJe!9x1xNJL}gXd2G z<~Dp)50SX{P+?vVi#~s?@&LS$M2S-;*4m&oT+kE(&2 z&`Ww;XIcQv4-JmoB|VSbQ_sH!=GhEfww}v@dmEVjuhM*QenZmp=(!g5JOh}AuU6cV zHqK+uHz0oUHMx;D@nO*UlES*9clCVyF5+Ub*fFOkYLYdlkFPm~ zKBao%DaW2rRyN${e$AxniHS*PO`Kj;J!bM5)05Rxs*|S>Syg>{Vsdg)vS!Rl!{^Pt zXlDK8O^BU4f9AaAS+h?%ZSJi2X~pxKFP~oD+!U{xa$50%#-@hZGcLcV`Qqtwn`Sr6 zXj;$^ubO;X@yt0h8m2cj%$VEM7_W*qHqDC1-QOdpl+9Z(bH=>c@saU_Px|%E^JjvA zKH>qpMTDG{<0pCKJ}X&uW@3Ex*~4ROb3Vl95BMyJgre%hqjjZLwthPexQcjTz!W62p8#YV+k(E+iG=FXqBU{T|=Nr~#k z^$oKd8|N;VKYqsi8JEm%IC{ZFmqt#CoIE(^qDW*@gq?r|3v-;`@pET3ENEPCaZ{{h z;t{d4>YL_XKKIJG^Dl{2F1WmY?!4Izl=v%z90uAQdo6N7N(pr}IkZP2s3Vbw1P6oq zkPxIZaPSGvLphwebsl2Q?2DX(alv(X`j$uxANwNY&S`)R!H466NE{#j108O1Ex?eApSL7*euee;jg|_jymx(_e<)6TRR$%`4Slf9SsWVP5!Qw~8N1 zzz@|yNth!l*H$6psDl_j%!&j85Q1=V+*^uIAfOEQ;`l6$L^_xV&o(g*!JQ`gy02|n z;)q|0PYfRh8^d2dW3^5yEKEZNTgofWZCoypeyt(GTZ=XbI! z*niBA><5ZHQ|bl_2=c98=OH#v;+3Kl99QH;aqakF>Csad2mANV+0Tvel`{tPGI_{`=(_> z&~q`lPdYeTau{k4ad8{$`c^4)#bvaw>7DHCX=1c5P3&+`=+78S8;vVF%oQnVflAS8*gK-783BuEAUbpJF~6B`xQY-J1OLUAFqjKx$1Q`gmb7)gd_M?AlCRiwn2Ojk{iMwB@eI z>1@mCj6RyvnHn;BaP;Pm&X#pO6vS#d1fLlNV6wVXF6>`BlAz_AoBCR*T z!H7IWFa_TKidFWpTw9UuD!U1>T4j}@BL66HyHaI4fYd7cj8MB@WjlozpX(BeRhFsx zSJ{T<`Dh8F)Ov* zIK67zYEKr&tklcK;0vtQfmX^w6^IvFt>bW6SqLYK8W2Cfldafm5Jvs#NLxPqzV3*q z6btE9iOcDm8|mASTPEDnj9OtYOcj260I*w~R9Uy|@Sc;ZQcU%q=~PGNmRYTXX{jdh zmeH`=mzs}Zp2|jT)-1JDM4IJy<#9qJ@d z+a(SJjzFZtPLYXPQHpZ@N8%*+kkiinOBtf2DhsTZ9X*Zxtey@iy1*rpXofuomFFl> zY2N&|8Ft8n9cuMZioA0r&gM;rSEvpz<>7yJ!KfZq-aV|APeqIkR_oaX*66EL6f0Ww znbFWRHoa@r5wgRhVzCpE7Hfhn6Mpw_#8Qf44N|eh{q+;~=UC)m+=6Fwymu$ABl}9E zD^Z8s4|lXymk8xy1U_Cn!=sfKL3B|h1wD9K%Y?>~fF>`iP+>8N&sDy=JBs1~m5aDqrfJ6DQ@dc4GGo2G^8mPk8msBLOSS}(2C4!umB1=)6r;jOk> zaSKp*$|^O*sU*vLfJ*iIBTWKbh#ojjN4<1wDsC01w79czWrw6Au2K|toUgd1 z|C0KY&F?E##g#>k1FX~-FwEc4EuM9GNAv#W=M^{YqnfT*T-2yOJ$1kidfs%mrVLzE zrIe$VUnWd(|%OI}B91%fx|_9qJr@ zN|E1m<;O;Z?%s9~85QATV6;iHQ?h^O;*R=>MMAkNtBvvgvJ%e|u59xc2t_}^wD9K% z@Dr0~HZ7^2J^i8?jk9;T!Ef+Q%uc&m?lMbhzhR3W<~LMq`VAG^QCE)3VSIDtwcHU? zDVEnViF2BsRHCRl`e?_+W0nt%M}O1-yUVe9>a;nG!&|Wy#f+t(zi~D!xE4O{>>}-d zRL0<(vN|5LSUdd4kwGcSaC2G)bUa!ICtDM+ee`FYp1*YYg>CD>S`}L18SVCs<$fp9 zP@5{TS>g9r4mYL9?GEMU>eR1sb?CLLl}Z$Lj_MelC}dZAd!n!}bphQ#ABhtAvRWsA za9Zk?S;b}WAqnURqmy!VHmxT)K4}-7dNJhdt)+g_$&*sd(-W>d8K-X7y!628DS+~2 z`eeOOcrGhEi#u8Y-xtcZ;w+#mf)#Kx(ArSHC=@Fo)54!8u%Vv2pmF!A-xlAb?37=T zyDa_J9h@zASoKq(S^ZRKJ3VSN?726E3!i((;b%X~UuN;N;^{RD8ZU}lfiA|DkWWyB z|MX4kUscVQsXH?WZUA}zJ^{zB2t$rG9K1R6os%x%ql z%xANk8jlM+bCl^8g3Jc_CLGO*4YLRpn3-3B(-t93jB0wzfASQ-Du? z&-&(qs?_H0yz12Rm`7QMIG_6)cz9ZtbD6IQNX)9 zteLgA&=F>9)qowHoSG?zw3I(PR3KVy>q4PeT+ClsU@@KwwAxHUDB29u^0%4OiqSEd zJ9D~O1PNdG5Z0MSgoK?y?p3~=9EgWFL(oiPtWeC~xk53mX+rT4TlO&1(|ptPG~av< zgKQ^|ORaO2CdLaFK3D7TOW(EKt7-`?$!=@NmYr!bS7-ZjadRX+MNs&PXmdl&q?;Q% zUt#+2%a^;#GwnD&-VoMI5gYWJx0!NGJ-ADNT4AwjZ1Yr&ZBjKZ11B=e4)YPMRpV-* zm@T^Aut3#c0kl?)CZSk0n3lVUG!1Q2O`+@h;BFT@5_ST)FY@K&Ks>~if@T_DziMc{ zY2upiwnV}9E&F$TvZZGoCfVLE!7!2YwKJ`JE0r80s-Ve_5+PMe=K`)mu-q^46f(bFB8EH(BlZ zn|yoTAv5hP>S~l(euRrW>A~VLMn3-h%#l$k%J@^2ae#Y%J;!QUUEndl9Ujx={DS&v z_CmBjG8~llN0^b8)rFokw)v!?2JM?h%aWqPhCD0PUj`x>S8J$Fj85dUL8ioz50mZm z#33FGKcnBgm;6jkw}#JT&8M%A2A z&c)C)IWwMLlS&r4Y72&lX3iQ3M2_N@32!(Ylp=?}D+hb(LPoxG;0$9{Dnh4-v7P*) zcFM11ey3Wgnz%JHV&!ppB@wGG#gr2U#)){c6_%2iTGcB3jXL10G;V4S#G8ObbFFqO z$7&tGhh34JV$K!5m?9iqNC%LZnu1xgswPURO4leCOMmLBT2(rSy`}7Nqo7lDwLP&I zvym?~4T2;w*!EUx!%9`gMyO{$Mwd#bxRs)E3nk9BWUFFALE}Jc^x#E(SJEmm*tXZAq*f(jh_OZ|VjO=Xx3NyQ zhm_33Q&q)_6Vbv*GBvohs<@=Bs<=McUR7N7ar9bzuc(q$l0?r$%!AViFe^dv%K2r& zC`V4EDCfwuoS2K~!Ye>q;W;4`*56R^rS78u=n!y6T|`&@V5pvMyPa!}5mD{m6+@H9Egba=8s~EH6{VJ_g^n=<|1d(mH~*0(r9D@CENQ=#ozPhIR@e~ZcWRMoaU$)lC(2bD+Uc#yOK+cbe^;F*1d`e3hDvUZEMoN*Z33musIYgq; z*}v|c051CCXvwD3n&q39NMJ@U0Ixi8>O18*TxJF0K9{>pzegxH$Q~zh2;dHUF1>rF zTx50M4|^`Xdxx9K&{-32i=uFfVN$vRSrzLR4S|1XwN}4r7W=+Vxo|Y1<#GxrEte`# zS}x;2X}O#SDqSwKaAk+VPPr&Wy%kEFT`t-AskK&8AqWREKYM;Nc{v!IH80#Bqm}bJ!?FHm52Z)2 znH}8|X*kI?9T^a2?xu13gQSzJQcQMSMzT(gFf|>`JfqMRF48Z*VWN|AAk zA7eB!`La(As@6Y9#J*CrCWSt{&MNe5X#ViyfY`6!1cEIGbE9*b_Qc2#rq3ap@MiJ& ztY!8xqoPZZ!80n4IJ!}ax_MZ2lQE-$@$r}v)R4QRW?=$46SVBH~ISnIOv4OW}(abtG9%T zf%+ezN-de*N8%PN@P! zzb0|^oMrUUH5fw_rgRWQKl!$#Bvr|3Z8DqWYEs+a)@mv?H4U@cmlQ@H#eT@Yi7YGf zEOdb@UT^NUQcc_s2k+?Y4nEXLkMf+(FB3j+BvXo#y|0o*`$nR(`bDB>M4}@H)@Muj z;WsRyrboft5`N}Ls1zmq)K|i`HD>CkCbgv|wLV$8Ml|CzZ>%A@OPM@mi#`d20$9BE zla(TmeiCO-;y7tzj=H!O46;(^WM?{c+JYVSc2ZZ0sSnLa-LxQ%n}QEl(?jtZTk9U^ zHavsGMp0?Z(q4*u)fzcwP;2CvA-!EOjw?GH>`0~*B|9iXva~BVPL$iaxQ%KT<%@4$ zD|^;AIz^GTO3ojtZ>4>z)ZDkLQnNp*QjZ0do_w2zD?1$F$gdRTFH!m3t%9?2g73c zh*A_}q)QOpr{a1bi!29P-TCQ4(OAzF$C!4FSr0i8bd(jskI$Vd6de;&bvsmjfR4Cv zNn_LO%X`@h?tYXk628f4qUrA{K~YJ%Ih@K!Zw}uTU#wZ7FV?K2tx)!Eh%J514#h-A zNTn#`1c}RO#?=4 z9<^R<@Ts-c9Zcq){HD_-!fKz4xxn$8tX3psJL&2|b5DAq(Zb6+EPK{RkegsVmv7Ys z@5%k9Qu=1(feWm=pp)jSqko}_kFuA`8}8R z&36Yr$C~C2oIk^0`ieL{1+7;M#Sa!JuRud|MY&|4{mcUS zwNhI+_8zSl-jfX54CYMtNd{c-bb#FA;>qhAFM!eXxO9B9&l68e3rZ&lCxc4B+vejx zr(g&r)I3l-Aaj1?dQj<;1OJ69JN(hnlTrn^u}bwMLyQ6pF)+-)5F=ey-&iyMgu`4Z zGVfI8u0l#Pb{UEB-;QOb4aI8hhpu9vxu_>%Pdsfnaa`Hq8Am3iDAUu~GI0TB_g3e& zI0-Aog#V@q+goGOn>*U`-Ai!N>e;h)+zGN<+c~y6jFlqee=1{ptHv0eP?+!?%J-NORQeSc~P$+t#s8BIbdkIwnY9FD>Kn)YB9Ml0q#X+4Y zlm!aALXloAsBuC~1vOcyI#A~dH3!teLe+yBF4SUBhYICtKN062*vfq-nq_nJrBLik zGGA~Pp5Wf)=DY-BxA(cZM~7gMU8WG2Z+7nNaH?pGt(H=_jGQ8IPRp8l!fKsb zV71OcYgUit@5M1JaN}JFqk1quVx|6Nr9K=F=`OQUQ&e!&=+mdB3c7PgtxwK;bNTvf zjGe6T) zTaE*7O@midN35Q;R?m}G&qf@MyY@%wGE(z60mfF1XXLLgwwT4lv`)5Q=_#5=$jb!F z$*oe%?HQWeVFMz=n)*kE%_@ito768d4AWu5M(*8V?PBidB~xcwH8}jsll!OFW#qml z)n9V|q9^xtPVTLY+@o*QH~Q#gC!|~l{ zUuKK!ha&shs$2+4+nfea+U8v8+-(PyZgYNsD?2O}<+1iCh06#u1<&N3U9i#rKY!;y zDs6KX3PsQD*XE>fULYq@g1grXt_)PV&1sXkIO4+FoOZ$00rwN3=79S8ZO&y#OXn}< z3&l2v`O0nwJZ%nknc>AtL2VAsHOUK3^qow2(Nf^?CVNf`d}Xi16~4@Qm!V1S(m2x1 zlHH7jHA|XJHcOh#wjt&6dJHxvvcJ-D@2{MRbA{NXIjW;&bWgNe8l8AD6@f=?IvG#I zk`n-QcnTzVg?#?s$j)nxb4lT;%wWJXv=EQ zieSm{tYm7!)S8*O*j0_4S&jM8M{{wAaB+U~33$*l43A7!tXb688a<(Y;lat#iTcKT zEX36VP@gExNyvUE^58o^r0K-q2<^(%#b~aUAdQ!kT*vLlkjfo{w1^B72DP5hc=!ky*QH`EjRr*YI-nyzIaC0mgr`2edkZg3> zeYih9HCB9mblEQyja(HXkveN;K}}x&n%2R*DBaLn(0vUaYMO7goEB-C;}Lcb5jLuF zMva^UA!jmLElw3;E~tm#~I4>g(V9*F1cBx+h_ z7C=ce;knUJqG^J%$G7Iyq&hn}VWU3$09d6`6CG;0Lje}K#%^shsL{XJTn$Blp zqR2`urh=MQfGf3_P9gYsDW+qakMaS91u2B&z+~rB+JUWo|_05GTZN0>f@OtA_1BrwMb|hk*MZ!98Dkhtq_rMqK*n*d$!p zVUx&7*QOLMBM(X3;Jxq)tBL7XSn`8QmeLq1GX&%ZIF(*V)z5zAn!I4)P2U#cJ$hboA7 ziT{>?akrxV{Cy$;`6@+jN?ED4I4-R3ytjfs_84m~TpSN6bneW4Kh}~RT+PFaIdHm> z=OK*k*0fd?xX#dQ#k1lxfO}RhWKiHNjdPktZMhWGQ^;|CgmrVhP;pS{rN@c5vcqcy zR1a076fPsLN}Rig=bBh*U$RZ)MVpq`=8<=sQ}23x(HG^_qddDO?>`-Rm7=`w`pcW% zZs3}$Nqwa2zJa~ztw=Bu-`m!}iezXfkY`pjXj6q$dj%w2Oyrj472{)z)ri7bYv#HqNLi-I1(#cG0D-Uj%r?Z^x@6pGH zoY{Uupl)lN0>^AVr zgg*W4nxGVQk}q*NMFS#5v+$YJKT>pDL8NHp&`m=+3hU$Mg-;2zvpcMcHH~{@940|` zrlz99ijFaP$0T+CBu>E8)>Q0BM#rqR@;20@p3`j2T!)6R;_BjBytD!n9ZHVD!GZPB z>ebBI^v=B@kDg8050suwIUSVd3q)i-zf6caxlxL_*;8|)Q<*wTovtIyLh7Yuo14s` z1gs?-i;fnD`+qg6*CL{_%dNGQMSN44)p}K7SN_3~^c-jBQHa*riQ_<}z0Ooz*qvyvVF^)@?Z@vb4*Ar!!W^+w&@l+XK>rxIo!N$K34pW8WN^o6cc+tkraZx3 z)kLA}9u&JBQzQn2^sDGH82*lrjT$2eN~sj3QOfRT*&QtQ{IuO=(}i-HSByf!ZWdY% zbUmXUqpNK)rTbD6EIPKN52(Epdu?^bK zS2_igOm$hQ7wvxA_R7Wi$@T+IL>;Qeyl2e$PdJh0z1;~JqiQX08OOt;(^x&`71zu>ZHr0wQ z1EtQ7Q-kXKXglisR)A9H_Y+X*N#~erd{Zao!?IM0B{f~*a)uT}hR)g}GIY|Q$k5{k zMus*N)~AoNVEQG&!E*YjW3n`-=98@%XWTcX@$mZAbMIN`O~9$;kHXtUti0!HDxQNc z!?X$ycQS5URH-P^!0apn5wqQ}1X?DQath zYRfblo^xa0)Y-DN9UMsGRn9nRAa9S=VfK`BWVK_CGt?fRdV}xkMPIXJW3*=NYCcs{ z@zO$c-CpiK7G+k1D#3zSdH;PHtWVyyp8Jp5ObMWXFpD#`{eYZ>n1_K^9+xv} zJJ(^8a-eJvQ=6n8H`;3Xui|^40kq#Y3qfaGq7d7iCTXQ>)gGLMJQE(r>~Q^VFU9b1IP5MO;0!IysY|S`oSLv4n&00`F6O+Nl_`LxI$CZ zH*nY5NZv_LU!+qz*;T)P?WCp@pZT7qc1WK{(VC$hL+S_D6_(j)>T5*O?S-bw_JTfw zAy5E3qo4&dJ+h0 z@v$|>YfgnybKH{5lADJQ13SkoMTV=T%nBTeC8}{nptMwC4prh%We!yiO3OCgGMw!` zeYj~67Nj?PGY!LVFjEzB@UJSY1f?qEG=Qq`Tu|xJ#7tb-;kS}uRuQF`^+zPmIZP>w z3QjBczc?=)PF|E^UjCAqmm|z6XP@lgKq8A~^;>w=%{MU6`}#%mw38jBn4PBrvV-nE zXUo}x>}!s(Vb`r}eBe+Z;2uu;uZh^_4Zrr$zjqyZm7=`=P|Gx&@Ha*d1qYp#A1)MK)@4H&M@eT06$51nRRXF)D7vhpg`&$k zM5s8ZAwpT8eukuS#AV_lG_c9qS8_`3`w7KC8)dUyYdQg4NB#!>kB=l7M_JenV!Dy% zElPEuuLSZSzG8BhC7C|%W~XI09dR4%`qjKrzna(gc#jX3AVEyDYbR1RbQ~=)7tfg2 zI6EUAgIyq-8k!NE;_{Q-@%(@DM&BwYr%KT_D<#gh&92--lkF3865ChDn))TWa!YG^ z*5IO0E=J(u;>6nAqmQg@XGc1c;bb3ARSbn5-4J-6TiZ;qe+69or;8a%oTV}@4n9eN0NtO?+b`HiPI4hl6Y}<$_qxO18X3tx1 z!nTU0Xj^o}0ITO2t7i@N+;zXtw#Ag~@l3^myNep7jM9#_?a4=u6t7(YH)m2$^v>}EaWhQf=6ll9FAlkXpT66{uUG z+x!S;1hr{A2b9_%JDX~QEzaFGQ0f$hTc^ObGtN33oUtD#aArG{r*-B8SWx6gdF%P?Ucyjo$aA1RbqfkuccA-E>Akt2SxF5>h zxZF#BSs>X|sy6Iq&;Ip}@h+%^E41z1EcR>^xi}@-y#BF;7Y{?<#-Hp=4N!4j*3j@)q`!tg&CQ&U5En6n_Azsb@R@ zS9W+%cracma=TyR?9=97E!{sj=_2Tlc6u9CT)#4lSn3;`BOB9vX271}yl{Ho zi>w{cDPVH<5M*eF^ox_AHX&>IkvdR1DrGl8Pa!pedRp#&8E2s?;2O{zdewpw$ zQ4xznDXNYCS12zsxCnjm;|4_rG^DE(%~-1xO`}V2tWtIrLZpO#<~L@3X<$rwy*xo< z`m0cGLnPETM7xUSF%p6Dy(~{qf>(rM^?p?-n%8SW6@z+RC=h{xsXY%C`s%3X1&{M? zcr)Hi{LjkR{27P0E)R4HmmshC5RI8>QKVX34R7t&SYl##i1_NJt-iv*LtF7aHK%Qa=uA9$xa+CP~&`eb!oTiMmVx^_feghP_#*N}@ z!#A>R)LtQ--@l=}{0P;qXY)rp6ou2c=?--TsPwv7Gp_9LkrV=pMk%V`pAr|oDePZ@ z*&XBmK%QXHekhb}2DT(&#{VCAg2umHC>sAKLb0HB2vrPfr%)io$he<{IU|NfNaLhY zj=_iACgZ~}2OnFSHzfsXK`9!gQj}b&m_wB~6pd2v!pP#da2qAB-9~Ay9iueYj!~NH zuWXd5C(g0H^Zt$G>g+XaorY#E8s$2MQvex_Ne zz%h~5Wd_jEG|@`oJV&Y)=DV5i@2M^0qK3}yK2Bw#-wHFeN15_Z((Ht=sy_}>9r)jH zt*~|Z|8SKtbje?_S`U^@NdwYptz-cu+kYXeAT_D;u`Y8N_U1H})TG{?-kHEnosgUd ziY_8QLN~8(s%QhHZvk2filxEQhwGGY{Teiow!nC$Skk!?H#pWm5}UPe=3~vZKVQ4xlnlK>x>4R=aJy432gwsGmqUcIHBSDAN(=}ohm%MkRN-Tz zh6sWZD#db9%J_kh{gSfx7zc}^cm@*%c*n1KM~>`Y!RW97!(a1mWEmftwGJ$EK;0OY z(hX{HgUEPK+DH+LSx|}s9xHM7e2mp{Wf2yt$I6?7he*j$jxT}CkF3DI&Xs;B`flZk zRW#wP_>ir>R7qisI*?x`oaS&7=v4gZPMs@Q=&Te8E<^bd7P0;~VnIW8N`zOc8MeZh?Z<@p-5Ui$ z8f^YDob7N^irgkDH!hmn+OqfKp~^x}g`9MTSzvROoYlk8iED85ta570vpqSw<06Gw zEc{nIoY)xMeTjir+VE$4aI|k2A0RsOykTxPW?`_Ryb(wED%LiY%6)S>4hh(^DBzwG zeYCtAr%x1ImfFFye9jCJGxrC6nQ(!VQKgvCX_`^@Y>@8;`Fd0|&jxvk@@$aD|B1-h zAiqs|OEPF!08ZWw^67sdG07GZzsnstm7<&%OI&zgXs%#($LGwGC+KsQ31xc|R@fC1 z10pLl;EqnkFBOW_^2RJwW(2)sv!qDRv{)#*4W?zcROu(&N3iDpzuh2zm9GG4QT(ZE z$dF9+dBaed9`!bWU@N~90JpytZqmqg3wJV4?NBUlR>vbN;C9-B>8D z1iB1AF{`x9${UG&#j9cz{<*DI#cDP`>o`>~WF?ewt!z^2YV3n;GR^yR_1=fQUvRtAp8Q6hpaXkYC^|0+LPz;~iQyGv4<>a*t(szgwn6WYQyh&$7jJjoJja+@st-+zLF#5cY_$Z}q74)O(^m zkza)cJ5hRmqGf%qXq{9+eA$jB66lv=b}@b6A@#hyfN>){l#Vx0Cu-TqPwzY&e6%rf!g)fTVBxG4%2qpN z*eEd|q%e*mfp9fGHfp6HD5X*?9HjyZCzXil^lr~Ot2Gg8?t|?aMSTB6z#AdZ@n+Am z<Ni-y|+4=xq{QG3B;v zwB7cLp(toAjtt2GlaKhnpQl;;r_^W_;mEnHiP@5`y8zh_i^Y6GR3n%~47*9qUCHdQ}#nt$V zBjeFWpOnQ_5HGqHS9_jmzTdpk(=Ky;EeLYgFP$;Ih0YG|I~h}o8S4(rn7uTdWBw`b z%RRNRj3r(7*mb*;v{Fp^Kbo{z()CHMBrrKHdFecpQcSKVBRM%l!JSh<>oH?sZ+aSL zcc6ZSiJo7gZ7b_>O=*Xz?>O|IS=~`1qsyr5n)Z|7e0#j^z#6?o{#m#loax@53qAW= zhb#d$;}9Gw8`qU5!Cr9d%N*?D7f+6@)_SrgzT&8Y?t{FM(Z|tYT8AFrR)~PQgVSz2 zhsDEn`dC*!=g-A8h?&UZP?_3E86Hu$z%^@i3$;!h=Xo`57ASQUtTXzrY(PY|^UH)n zr{t7k$wehjcm8`O0sQp+zuGzM=j2Z*=5N?8cdf+$J6nzAD?ZngCBO+|se39FjMHz`H2MyXh~tD8JUPZy<^52j%Vl6p@Mmdz1eqA$kU zhB>_^j!{k#8cyL91=R`28ZGh7`|3+PdOBKl=J*!N5EvF3q)8z)K4Mjp|&)9(%g_#OeO_HI{j!8YeCxzLC#2$n-JO1Qr98oY^)#XE9y9Av$cTv_ zW}Z3`TDO^<=m?|~b*hxr-Zlpp@9`lDtR=}g>#dB!A;FvBZ7`kB`Zz{h8sj-zWrs^8 zamue0lbI`V_Fk1WdQ2Bn(&>HBWWibI-P;$l)ZwKRd0m^qOJ=g2&DCFxOS{8GDRQ|X zlMCB(Gv$u14F*OPpDrrqK&a`U#6$W92n>RTq&p~>1K+dlU(lYCch)e8Jp zZnq*)`1DFn_h+uq>N6{85YlL7Ezfd+OlPKMgVN>Mg`jk2JKN5!;?aHzD!n|r5?6M( z&(V)k)X(h_H~7E;9OFf6IcZ2_@8bqX3O1(~XX!uGldy{YO7OemN$!>>`0Twx*|m!~ zeNbXRNS&)8fxx9^8}&0mP*SB>2bIDIeJL)SI;bO3|2-peG{BxL$*FEzE#+{dHsa=e z^?w1U{74Csw>(uNDPRt z9M&KOUFg^(6gB#aP~`Z!P%%&+;D)~U?h~QP5SN2j(eC=Gf+vxdzMXEJP_!g+M`Py+ z&Z&a>=J_+5LjFe%EZhl5DYDTwIUDkf+@;!f?}&g3PIai@Opk@Yxk(02kJyFskno@} zC`END<()zrDvf+w0{^uuG0a|!Hbx0o*orA~zYXhRs?Nr~{W&H(zq3EMsKH91^`*fc zf;ioxd89)f3o88|Q0#r0h>UD?bfXk=@K1?z7O~Ub+Lm%BCLc58JS!&RVR}aWmm}xF zA(PU3fRzf*bz>Eo^NdQ-&XhV4lnT#P<@Aixxwx{!M@}}BVm3b1Y`A@XIx8Gc%e-~) z`afqc7nlw~ZxO!(Z9Nh!+onZHaN?ZxbATs4B0RUN<=HVm>- zt@nUZ1-JZaCFscGvYnyzw;iCnT6i0y`9Ix)A9*0P6qNnIjiAxi{FZmST9(RH%T@J- z4OoaCH`SnK&H<#czN->v+gq-(^rjByFh3vXO{=T2j5lL?v%r25d+AymV_lUQJCp2o z`od0@asj^bZ>@KEZH4#hq;T`;R|B=UxQ>(~BBQG3El6(G8g#JS!+ zRp)wOm&t)hMg8J1p;(bWm-AFbphm-anedZKY|6e0n`(!RQe;z=$p#J_+bic4$EG;Pez?a< zSHn1unakHTtZ9oR9-~1s*D>UJYIW*qWSRdbKAr95>xsymH*Lcs{09+uY`otiKMr^V zJ2m|uX})CC2i2qAu|{83xUka0Y)o4|oIWLN|K3t0?8C9?=tSNJxaT_bAmkj-g`G4tEqG3JD0QDh zv1hGudqAb?qK|SY+>A`2s!ce{DMO`LhG%LS?o|-kYtkN(y)YrR*Tm?iJvs)~aq6&0 z=fTQGZO395Iu@fF3KyPXwcmRWp7bcJEnoHQ7#H?JWRz*s$$T4nmo;;(Xsg3d9S`OB zX@V0-e&~@M-J2{(q8hjilxl#(E2Th0?&g;X=Q;DBA*+&D*uhT0p!KZ(-W1i!pe2p64}t`mRB|1ZXGTK+}Bi z*!H3QYOsp4m3qPYDkdgP*H3r01gzHV$t55ApHTL?Vso<9a*e)X@C3)U2hwG2wAzOr zjrSD_ce%CeD>FwxV0~vA_XX=a)5d`+$M7IOGS#6j1*I!E3qa{=&2^x3wT9j>{hp@J zab<@qof1%rC9p(Gz;~$=2b|cU_3Vs}x5*kfPUouiwk#=(M3?^yX<@)q%PE#VlKJ?u z?a}3bk?4We%mnH|Q4wBp{UBpz*3jiD4&Js|c$OiYG4bIfl=4 zy)6$Lgm92K(v2lvRIM`3TpymUS*TSl8*(yso7(lNdk>t5#(y#>+MaJ&&AHuJ0!T9x zS-KzLG*uif+Q`eCHs?Q-(|w?%o9mk{y|mfmePQRx$m}#|IA8X=JT6@sF1&NvF+ajd z9({8tr=GP&e*tQWOoxqvH%`~`vk`BH+nsV$ssJ}yByL#f+kI{j3{$CcdHUO&)Rbas zt(uw~>yix~b$p6}U0|ZR`HHvcr8MC`(5v zihQrc`OH?N&{AP6jlGro@eBVd#JyPu?PV;|{4U=-+r1ahX1AQYQ;x_F+PRhNbSp+r z^E+wJgpn{_7vI7&IQIBhZ_YXWl9QTPK&VW3EXh3oT|A!!5YP0{B*OY%Nz0gZqlIAL8=T?weTUSaAm2 z>srTyP4DDs6!l5$DM6|1q`Ya3rv%zY#kU0FLw@DCnVKn(04!CchW-9eJDTE30`2ws42IV_uRKgJkp zpms>|#ue7I4?Su(wu|sT4Y_)pSk>pmqjpVB0Hs|M))Vc9TmVYDA&Z^3Z#!`}fYPqX z7EtM~33uPx;dLn>7N$}xs@Ej0mz`#Ir`v2Uqo3H!7Y$}?v%%}68Zc;P9J*-zEog)< zD?HTEl(D`^wJOzGX&s6~YXS;5gSK_7 zqFyy=tfE#yTh0Hz-?!Gb6VmW|w1zt8q{Zp^d+v^G*{6tweXUa&Jp`OtWA50H{-^u9^m&W+P&9f{TDO z`q|sl=+6N4)C$}Ldu!TUR4ZaszpGK*t&h-4DZm-3%;Ob{-_WB}yB{*#cfMZ_FSj7y z@7n9isaWHcaH>nZx?4?ENv6z*y%L$Bg(<9O&wfS{w#VgGHDFkZ*Pk>8{Wft z-WXHS4{b<0=+pAS`Tc4KNK~ zb*?F*YguA95(5`GXHZ@ZpXfV6phTA_){zuJ?#mAJ}x!9YQLyNnQI z1jPmG3grgN(^C7`TuX4J1{!+%X0liRWJojhqAf-`IUG)^f+Qf;#O#KD>wvKeK9MM; z;)=*tM8(x}yz)^ph1$9UE_}&bevhDG!)D{h6!bx#Lbrccb-atqTw{e-#cDX4Y~29&4XaWX z2y0h4kyVGG2id}c-7Bf)83-fyvbb$5986vzEfWrtYfZtL?-Q}R1xUBH+ySIpTYdwi zTU%OyvaJd~LLw<~t^=8m2*3 z4xTDK6~lhh3#ueLRejy;#1%XmhckgR4mqZxamd!L#^EBMup74+ch>CdLa&IS-$z5w z^??`lEB-f&Bx?Z}wA=sPBH8)@dbj^qERjI06aG`hl9@xZ)a^i;rG5>hS?WF@%~Fp7 zX_opJNDJc*uHbR-M~mf2&aT#>jC=YMps-lB;Le(Fxs0iZ8FRd5O!=Bg_dRO=e=3&c zF7%2R`bipkTP*GB;s5xS0ylKcuF0`IbWKp{b?urIc5Q?9&^2lQ1p=kJzf33dv2LBr zztt{4LmRI3(80VkA6?gI|HbT5z?lMm19&w`4BmtXI_t1wiShNX-G_185zzRVx{4L< z3uw{g1dTx23~mO}m)lZjcdN7e9gsGI*_{ddkz9Lg4YpmH^#qET?k8xv_b|krYw#sARYM~ z2c$!V0CH9zuQcbl04SnbHDagJ*|~k3=P^y>wq#W0OkuG3c(x$EX{ZI?=I4tI?`XR_ z0nEPmS*cS*f*LB~n_N+Jw3W{_tfl|AQXX-EllhowYTAfpbn+WoDZc>8p)2L@$6}P6 z;0U;{tJ5oi)ULOc^7?cZrF?^AF=j_a%uI8{ z?(40TzgT3qq)1#Q3>Jwi1li0^9j+7`04V}2&NR_A=CeeCS}J0ZP}IvB^KiPApWML7 zE-#yWfo;6crqV6p2({EwTxFyuv+M&@3E!w!z%zfHSt2^nUJ)oRg@YW4#~@(^a&VV(u5{(#5?L;dQ?r&(xPfEs z8PxW`%|pr;qc^n9&dM(7YwfiArbol0vpBWSaBA!7R3Ke7T??e^57|uD)xI|Zg{!6+ zSJvF+Vn-2U=SLblx}m3vlJ{G2Tz}~pipaQG?1pbYAlUwZZGyqi4VcxxCP$bg=HaIU z6HKq4i!Ae?rWGaB&?TC<{D%V*w+e%KaG4;R2aT8vOAuRoy8A1UMWi$4Ea>^N|v zb^yX*Cz7THKfXLU$H74pwq1FDHGVYT!w*G2_&$EtuOEn;)Laq6s)+h3iaS*3P_aWL z4q@OL%`EP5T6p zF4Hx0GHhpI)V}w%qIA2jv!Yf==o#ON=};Ow+RoK>w=7#SE0(tW z-SdV^t75ANuAezw6j7JWs!R8*isc_@D8JN3zRQ>~-0T5{<^$GU)@0+6t`$~9xBH2m z4W}vPy}Em7kM3^e+*L$(hkEWZrlLcqSQJyroSsg`F#)o;wcn)tWif2<&R_*mYgDl>-?AZ{<03ya=#$TE@Hz!equ2vcaq2Z9tLEZNLNZ2@O8aC%3 zWhUh|yc0`gAF#Q$KaNUh8j$G3(K#3(tkLhep{r5Np+bK5bc;v8xQAezM9X5>_o-i=1YPs99X>`rhm_N@TXA z`q)DltUmS@WGe>hG)8Oyq`KIS0HzQ>E4712P&-AeJ`{DWKCbK^sXn50eovMC4sa$c zuY2OoniBDl$|<7P2aBC8Q(fzhUi--ANSnnQbwNTKy};+xP`#g}qq3#;fFmTSUF{|P z=TebH|M|Db*3x}$Iubd0K_aLdo<0dHxN^`*w`43U<7N(Xyg%|jTA}WE8|Hv}1~O(? zIcu+bB9QjFj|I}6C`Wd6ZB+x%(Fm~Snd@<9&9N?O6ftVb#cue>0l~=WgS(xs$YrIsd%pOrdHB&ek#YNH5Uk5b&YVGfOhRC>_3 z7JR_Dc1UG<5U-f!kUdL@hTYL(KO;9t7Om9hN8$0gxit(`dk{B0((`u}CWVpBoLh zRCJ)eim1&cViz3^u>B+5gTemM;5G=d=Z>XvksSwL(LY+`d{ac<8r8RG=ivl?bd;x~ zl(GFOUr;FI;)9f&uQjf-`C<8zXT|>iUEcHy8A3><+u7|X=4_fSa?AC)7U3#yY$PaY z#AkgsQ+-|fX4V?VB}ne=lfvn17>H9_t{5Np98N*8GP>wDT|2T6Q$?2#z;cl;j86!LmQsWG6Czr`A+!u`;of%cpN^(Bdta2ec8QP zHr)JBjR^!-L5p_jbscwf;F~``EvQEr@fFk?a4BDGBkDZHlCEWLm_Cvp$ocQO?1pEt z5I`+u!@-Vb!$IU6Ub`}SNs_}lXm1^rPVFU;Y};Ep(^@uFk9y$;QK!IX?X}GZ(iiTP zK>EV{0g%3Ieg>q=*yCsx50Vb=;Xu07`6i%nsq?oXYt3CQKPh5<`kvVJy|m0DDp*M6w3VaGf^PP}p0hN0^Qx5&1RV$0%4ioVua52(wmL(l>fV?992Q%s?` z(w;sn6(3mke=LZuEEB}B75-Q{tt*tfQJ$6pMNJ8A5OIOVgsq9})$+Su>GmDs9=Uf4 zVu*ev2=x%d=|*6BxQ~0!{bkdcdOSo%{{~i0Yk!z=vtAl-j77~m7XsZ1ZFA({^RVl| zke`HSG&AsH$gjYUBUu@9e;clh;Un>o&u_t>jWOH?Of$w17wXeg;K%!8d1FkI#1vCf z5mQJJwN(^%h~tmVt2v`MDzRpw z9*f>^20rWBFEB0kWSUD^+TajQmgEAiQlN0iC)%@qTtdijD`Hsh7dz7npo-p}=+%y) zh>VBDZur(&!JsoJuZB;w^f3QDA~IX@23{!)#`I%?Z0d#D(jVGNa|)PgXr-15hdL-? z+9`5ljaVdvE<~l>LCvv6jAbuLCmoZY}fIqa?Z%xR*Cnrv20BI98Z zZT^K>ps;6OY`w)b8xe0t%LLKqeuARyzOKD{Gcw5K?}=RVWq6q&DwcK+K8(T^+Gpcl zY5r-!Qn;8%uTNwW%O!S}lwi&~)_AR04`c%(k^QXwth-9s3W+NKGglWZgQz@6rFX5I zc63fE``IMEVc3N8LRrkJ%NCba#|p~}s?OvQcQ~eQL;-eL7ILd753j>AFC3PQ#dl?$ z$CqS|&Vm0mINHvr)-l3iPgPL?S(qL(}jH=aBAF##Yet*ml{P47Xk4Tt3xS z{xKGX!~0VOC2E&QbN_WO<567DZN5Q|`6_-geigGut7MH6fwY0dMiVCmbAt1M^d;91 zFD7jQ;p-1(Jd3OJ!ttzVvuIzJxQcS&4i4%=f=jdL_yJY05W^>7^_wp;d~h_}wq|eV znj&(xRo8YJfbZpP6U3ey(lTgPZjEK&VPvF3UG1w$RBVX!l&4Zhg(8OH7!5^aYJO&ffrgiP$tfb^M6v68 zT>m7I*^)-lDZ*gBt`TI*3PYjVQZ4#V!>0!-3|L;RbV9h4QiNNBT;nKRQLXdd!y9H) zmxm7m4+K65HI~iy$t$xO;kOpg@NojQ5z)4 zj3z}4{P|)RZRzqwXidFiC?aFF*!7*Lb3|rK5*7Qok$sq`3k2C@3bmz9cqAs8sMBF% zrBQ6*3bj;3c}0CEYM#V!w?u7tuUZZh(WhwPl$5Q|0;rw26pk!R=VC&HL-r_@NuC`& zJ|Xjo3Dh^GsFrfp!r5wmoHH0H4Gs2nWev*LOza%Cg4onHq@WF}wl+K9GA%Y!5{mDg*ct*LkcVL`;r zcs5vF@dz33VrHv;{(_)(TMnO;0UEb?__>(7$|e zV!}&v`X`EB;@T+;BaUu?UJaW|YxhGaDtIC^RK}!rykhY)qJC!b?Pw>9J3P?2j7K=* z#7a095>n6yp1zQmicJDS<)T6FiHrACVE}3+{i^i+O8?neTs#{J9ou^YMXpkVu~ z?Sdg22CW;|(tlP?O?Gj=D$B$88z5_$+eMlqFSiI{UB!|YHG|BJrBea=bek~f%C7|3 z+Q(k4qV`I6my0ADxxW#_alhXRq7L^60+5<)J^@S4WM;Oa7Gd~Ni`;IyzNl9tHA!a*1!NvKf;UgTIhFowaphS}se=8mIqkw! zx^6DA`~nuCS?D2L1#gIJ66yP{A?~>X*_>#`IqqRCl9`OvS7=;);yr^i`HAk z8rCm3VyJokBc)CA@2;OvR6DSK!oKM>b^Y~aaRVy5tJ)xhhFk99EYJ=(6R-XQXJE&` z>IY|tz3yoLF#x>{2t9m>b#jV&#s1OO4_>lT76cD9Rt?B~UZGP(OY_tnnbm zO{T(GSG-VP62!i@E3Czt=fSz#_|NHie2;2)*>ao{k8{S&gN}W;;b3dA{j;;J824$S z=;N~A6k`(}YF%efK>4jyUYv#tMgK@-PRfFKDqU`lFBdLWn7$Bl(Z-z>(B;e&r!f$n zY?!}Bf^|1vx(67IH!mJi|Jj0Ce7L3Vs>a7JKR6Nl!+MVU6s^Wq^4W!nqR;V#o{CHv z=F3B0Qkhe;DoVyBW5>QC^t#93o%3MI-4)~h2KOF0Dw8uNkqu>&*-#RB2uD|7j;WKC z`es(@JjA^-T^3gA^A2TBtUDaKUKPwKLA9GxfNGZmAl$W!XNdDBqaz}kYfMd_Q;_If zg?S|5@jO30NtaCSR2_IoatH%gaR=P$*Iu(up$xF{1MoqKvLmGeBMyzRv9`+-gCJQVVQC>4qLEs!^XlIZ7i6I!&GyL<~mez zbu39A=yUz7igc4JJ6&S}LvN+5l@>nA;u6kMPFYom6w_8k9gwyvxT#)S6|9o=9q|*O zeet@?k+)kRn$J1GCfMosEQZ2WMck8DDeYEnmDSnID;?r&W(USka)RGFyS2{lWrqgg zwfZ<-kyr%^q>S}I`hARnc*$yeWp^O;cLvbTqTdqt^ht;Q=};Ume`QPqQpPnv>fXIT zYsKG(fF2X{GLZVa9o})umJA^VmET! zkYMxyg~7V}vJiURu83VyR)1Jg?I`^3Te~y`MG5Z{l~=&=_g0FIiAqD-WDSaQU=EX8!9&0-FDQ@xVhC)E?2;a`{BO$Je3{ zlEg6}6V}cimnixWUtdcU{W;OOGMU-wpkyX>5YA6{!k!<1k4NKEI*H7YS!moOV#jXo zxEF8mYjDN^dQ<3)u_uACH=_=$xJKUOwL6zD z#v+Z1#ZOBgtqmdN=sg4mj(er!K&f9V%}NwwUzz<$WzpMuQ*jNtbk5n1d&Dt#CLXY> zC2vT!6bn<$(|G_Y`+y`of|R=1cFv5;N%rJoc`>lr>61R=(~yTNUO#S=R=ux_w%U&y z7_EAl=~4BzAS^vsy&NLas&^)kR=x9pG^;iOY1LZ@hu%a9$q9Y{q!rMeKw3TZN50VN zsTfF~mH}y{R0R}PMV!L5<{h}GRgoeVl2^n|tD-onqWoT~q6Z=ES4FQ0msL^36YaH zxHX7=s$JY6R4DbhiB>2}>^MNp*i;XAbWikteifg9kh zj@}A(ubI2=aLUZgn(l??I%~=)ig4~SNun`-m!L306j7m%#ZKog2L^-pAAr_eM5XwD zSfwwWN{Xn`7k#T#_#aj&ceu^cim1{+v5Ur%q%iXe7ohOF%KEwb|KxI#J)L5TsMrWq zEHaLN6l|?2a12Fc>>zf1FDKbqWVU3;H!cj8h*5%U>0xG5ZK)G&Ib=#xfuEHcCLC&~ z2pPa2H`Lqba*}UqndN?>2X$6Njf%z2&SH5BSHcxTSfu~WEgPzIS}39x-->Ec1q*N4 z&{2+|h>TLP>w6K)B$3&YbUs2DOy{H^n}Uop)fS-FbjCMx@V20KikQxdzFsu1Elv0v7|%0-gz6oorro1B8>!nI*WCHD&7MZc&R|GAnR_`#F%l%zg=Uk;whp$uT%r_PS+MpSMP(Agq43`phjon3*G12w3?oi!JOqb(yvxp+_`cEd*x4n|Mk zD%kDBp~21v3<>g%*Tu1x$jC z3y0XYuxzJK3xyVr%Y?}m(|kefv|TQUIxP^y!c;G4AE1STiuc=p+yMt3ba2V|eT&BK zJ$kSCQwlFVH6Dc4f!GIl5a0=TT3Zwf(zgO5@i_db-xU0)-$nRQKaTmbCAb%aY`9Jl zpBZvRtW^{-4iv>5qEBj9>`;kA*bi2P8+p6Ssu8{CT(Q`h=eRHKa$oJ;FKn%kIzy+# zSpLG+W%fB0-wt8Rk*2VYn=?Wc9pccj4qfPweeq$M-YuK#VOR1FAn0TcK(HtOj7dw} zF=iD}nZ;sf-*^%%CW$&AljG)-1Tr+HeOnasGFHSql(R5kWw zgWC|GoZwsVP!~;{1f=up+_0we>x+Q&izytf;@8a?Dd;@Ozy96jB1;h?>-uP9G3x}& zRapM-a12Fc+$eU#cNh@tfWmJ-c3??)09yE2W_c6hG_U_l3dmD5Bnq=(i&GQcqXZ=;DhJ4Kr%E z_@XMYu$4Zw;b+!gpm^BAVL#I{3J-Nj21~(As4Odo|3~NXS4cP+TZ$Os--+G-JLd6M zI{g$;zgAyA(_ZP?R*`m!w454h@=#t|YI`iNO>hw9HPK^vjVxA@qI!ZhK2TJ3PmC+7 zBe_u~bF_VI?I-2(D`G3)MUYA4#L8Q7+Yh^H*7gI)tp&&}ZTyVaJZzbo7c@82L)0wf zs^Sh+ZqY8Dx@rupUq-NV0@meP%qIis+9+0-TFf~-{UG8fM-JhbIEd&v*v$|-0I$Hm z;UZTNgn}nEaw9#iw@EYRHOEjy#(J?EzViTlJaPy=wLDk~y=C|X{*NNd0&fermFsUn z++3L+bo~Wku+aTQkS(A_%w6o;p6+UBSn%Hz4&Ui-38Hut|6u6SB!zB$Bex#0D&kTA z>(gVxq%MjWB1P0nQQV!mp@uc5F&ac5R>{>Gno9|6HZ^piAoXbiocB5_H6cjF zCL+I;VTnjy=JFUOhTAZ2vH|lZ>rzE4F#@|zv|WO)k)S-y&MR#ihXKKLZZx)iA=H7( zId#V;(#Mr1#_wO7;V^e^pntH1PIv6pjn|tNnBr;EaYj{Fr+79; z#~E20qbSwzoyqK=^Ezh%X)|~MkhTC;I=h#h9ltoPPr0~S2MtF9g@cCUac9k^l3|z; z73BiGCw3$E#1?RTi+ro!`m+|NK!Vvy=Pa0UKM?tz-i%0lG0Y`2^q4+;Bn)QBPXyWQ z+x1GlJ`)Kxe?J#QAO9f;Kr;S$1Tc;G(S{#`d zD#C&5=@am=ucHf(N{?9C25OM#JUU+2A5}3AiRF<#`@?c?1dEY|?O^h+fBm<%{U1eC zCr9jT%ThY>C!ui0vF*(y_xyVwN#)72~$2@L;#d8(uB&wy4Qs%{oH4{~s zIpBn|*|AfezPeyD63BYMs`o_6_3>#xKs(A4a3pSE~0c3uA z4i(LxMP4Qut`^T-1)vMYxbqa#ucqwtmAW$mlOy9KM-3)ohiwP3O9OH6J14jaC@kl9 z;m(>}T=Xbn^yG`($esHKL$I<-zQ)cR46_tJI2eo+iSwr85TF0g#@pT!M`Z}jzY=dn zF5VO|-uC>u@mBZE#9QirCBGf~Z^c`Qi#J7#H@r;HVEO9&mimVB+y73ymH%7uR^j4J z5#z1w>&6@N8^#0V*!zX=NfqT)avR`SGJSGfRtT?4rQgKRXxT$S95vITR~8JZSafoJ zUH^wTwpEU4-j8B=SIfqT6$P+KOn9+8{bYIU*tO&SHty5pwAMt?i)HDS(E+NAvI(nV zi`X1JGgjF8QS4-CAD}|?(!_yJ=M`~{}$NG90aby zd7x<^p*N`1`>jS*JerH4PM3hNVU;Y= zirwG(z?ovz+BC7>>WSGw=C}cTPt0nAZ9ti-@cl3=na2G1i3JI~AF8tWe&CV1Sf^CN zj~EoY*9B(qg`PzB5p}@^xDf`{ufa)Q4Bg>RHB+j9ZuG;nlKRS|RQF=97z_uL>aYuCW76t3!r z*wU{ev-PHLmDnYle|PJ(ca&UFx#ptNCyrx#B|dd&zloHDsh59u-GJuEqc(GwecLQu zjqNpSMYIReC~?Cqj+~8Lj>9${2;wGtmn}-#?9Ep^a?!m7GZ8$Sz0)1BW83gy2Q2Es zCrp{UTP1f-Xsu%=W@g=%N+H{=HktUNE}0mk=-7m*nK(7!4avkGCmSARCjL+|@x~r9 z@#^lG_+u{Y5J=?B>eMq31V6wBPcDznuf*kNYl5{hVM z)3!;Hqj`R2ixu9h?HIHE>@=6{c7*TRO<4q_ne9d(&1|;)e~A}bzjwPDD*K`jGk4XEi~l_Qx? zvmd)tn*B_RW+^QE9JB;BrX|Q12%}PFw8911a{io%K(M3^i$kfQ|Dqy5o77Q8cWjL8{swgs74-s z8Z)D3A;2=P)_rWbI?o;T-cW;%N0;*f)|7HO2J|N+RxnYVm&isB9ESi-_|NE?FL%*|nDV`B!ObnFQo=BFk> z0i7C}4zylIk69P0-L*ivuJLvt-3t!jeV*t0F7gyH@-7#<=zgw;Ni*hqj-iN*MzI^d zx6jqq6O>)cD z=SuRI#x$JC36Uf6WnhKpdOWjwfEic9jAV&)fok#EgI7~m?FLUZp~eDfLU9#EIAd}; z?yUKV1cyOZ#DM)+?6TxLU%5f-fPq15{~@z_&(QfYX)SXlHB_`r73Gl$I45CEX&z%d zkv;_(UpJ@8*LJ2NL%%q8Y-0S8`L%mVhDN}21)%0>2sB`aEWc4VumgM8)~wFSx5sBl z?lsE=yX10fD-$O*h!dGOd5SMbjh3^3G*7ehtNE7&U!UFqq>%>T<>}wKs8YnJ`h`YS zWcZXTJgvFcF%*$;huCSJ9{Lq|`Yw^(l03a!7|hf62#V%u)tb7|Hkzkz5?N}eD3Yhm zHdEwj*=AbRMt-+E9XRS~sq5xZ!O!i;XsI>%5%#%i(adl|{&BGXf> zXB(&E=4xw_r-Z>+e^yX5)>T^)Xe&*1;0kk3`v-+X?G&+IQ{>X2&*eh@!DS?W5!D#! zim2qPV%KdMNw*ba(bI=^ati_N=|il=v@*boejGb=5L^yxD7G=I`ON8{h&sHZIz)~Rx@QS`> z!ed4tvKj4Xc2sUn#k+29pm|9q;-Y0x= zZ7e1N)E0A_3R2B=zta{5_P6O_J2G6~o{hI_Mf&~9^gB9y&#f=NM7ikF94T8o0tbD& z+I^QUkCW5>#72(u*8j4MPmVP{2YplH>t2X8a(EuW_#kAa*P4CMnaKksV6yF)CzICo zM{}I-5xk0I=do-%9`!=^oyUuF1~*mQoy;7YTlN5pxXcAkzFVB*_8zO<5W4o{#Kk$g zHC5aW@#3iX?J7QDW8GmWy)Q`AK3BU-qVoyFJ+|zv#Ll_Ij*llsVXtm;<+B|)w|Mdk zWu1>{3JKN_Y$-R-^CV(s5aLRu4%C!34eK z0b%()GdeH`Z@uj!GoU?+DWepojLI=(l&;*DglJapsW4Y}(EwB%G-F1{E6$ci%D`O;sw ztiU3k2!Sm}ni}~JXOVJ+!3u1MAX_yVF~l0iX5`;kAr4A(=V)Uvj)ehA-G}ED34q=tY4Y>Ilb5?Cg1nlDC(JH8uvA`4O!v9NiLw(Ow z?I4N7gj19YG*ayBOqEli4UbS8_H=k!E+RT7z@N#)l#KJwm;&dEBKk6_2Vb;*gY{FZ3PY*HR!`ebsRzAON(#k5qzzj%~BJ=_V?QaN%+(kB?R%?X&B z*y76xxKvaR)n5vvhw8JJt%vI04-}qk$?->PN?epF%Eg0&HOizLHx%8tAwle-A+wSb z*3}-u`0Kjp_~k_AVocg`PliTF16Lit)_v9SXt*6tl1{WL;5yN1p@>?PsTN&V9skFg zi>Emq6j6txRfk@hi>EqyS|%?CyLCLG#5`225YKQ1hMwR4bmNB!D7QZ+V<33 ztPlxmrzp>%uh(4sCW`$`(SiCZqBduVovmCjOu*^k8r0}qP-#yDMEOTnhaC@CX_PsU zG8ymS;63)ha3{FyBw)8tQ@`>|X;wL{GgVk?g^j^&8#H6lvCs^R zj>W^W&@1nvVH}2~q`DExbHfoHRnrlB+z56Ev(bQUY7E5GRZoQ@v!_A>t^mpjW&#aD z3g~gOdm;*Qf-7OCeVChp^ySatgso)&?e{=oGhh$gS<~nuRS_fgyU|FkqU7^d9M^@8 zp@@vRVmET{{z3i$V=x`P55^}$$|(p6GfcSTvxkO+jfO=c%SnqX1p!DFx31UVp3DXK@r}=^c;5d4KWokvCPS%+AyGta z6vZ7XbjTHqbVXcOXJH^C&ed6kZ4fd88M2gF{;=Sr6xQC$9J4e5nN@_ogw()(K9FyoOR_J_&^4eg_2jU2IWXzw3uoC47Kc&xEX zEc(S7CtA<|_ZmJMTYJDC*p5pyUxZ`e^c3HoH$K>b-F7ZoIvXe7#!es zalcJ3hO>W#YnNr!=3vV2iS=!@18{w=<9!MNp4Qrd**{E1mdEyKX@4Fbi|=?^cOVvx zy^C{;UJuHf(0%D~cLll)<~@?Bcs6tS#~nLis`E!>n?5VYXmn=srlc9*Uh)XD3r;A( zdNTw|doWUp^^6f5hmOUQIkoYIcmIKfUolRekI^>5A zJ>=w`0P49m`IVFvMyjG*plie~I#3p^f9`Y)MPyvtjll^`YnC~NA~Jp=c3ko{JZqbv z>+wccK*FzoZW8&PIxDvRDKy^EWBTwjVX(yCE~sn$!!TF1q29rs%6 z>|#PO3Rm*Kg)6PTW9+Xm_LOfHU+A+U>aU18D2h8oZPm`Nb^4)U$y(j>O4HD- zaEeS_jg~l*=>ut+K{k#b4ejarYvMXxc~KDa{o8^7#8A?@Lb+GuX{kI5{}O-Z((lh zRM~qNddS&sYrb?IDx!y9sE6zd9p4X?#-q_stjI}GVT-+a778>zPx)bD#hGdb;9#pc zTSZ^^*yWPUOB4-D{^2Ym!$l99+7qpxV?=W$K6H0DM|LMXA8U9I-t#cBhYOm3uw1Hk zaw0SICyCZKvfHR~0;h?gYoHHX>Piy3nH#k7#S*Q2JzqPOk$IF9%4Lb!Dat0jIedGu z(!y9vWsb?0QvGf8LWYT7OH%0za#QI&uo5I$^pvWMl`hHFFELELnp&r_H&!nC@7i5E zFl+h81Y8gv7NQhZPI#LYn>v)p&iw|XbA4DUgDM5%p2f-ZY>a)n zanGr%#v`<6O9O#b-I;>ekkHY9dw_Hd;6WfA16U2DV*u-bG`oKSqzTXEAExRA3aidh zkg#TVw7|9MRFsPc1I4cI!@%=IhOW%DWe0dS=b9qAww1cJ+u&fg>04tfXkL)_UvAuT z7G0oW@zN@ZWkX%>t4b;+35K52myzNNi|aOm=w4h9fEY?zRVlZfJS~-H;a>ufRg%Vr zttRYMswCD(C?Y(*y9ttQB!@N7wz$)%-UZ07fjBr#^ErOjN#0|W+NqW$YB5NPsH!3c zN!5xwq@8!{;y|u_Iq{G!Y^fqF1X-1Qz?RQcdVO+JTME@g>t^KS7R|{m$#iS7XjO7T z%j_NsZ+cZ__Nrvj;BKWhHDTqP0v6)+ZKWa&KdU{<~*|3VGs%J_hfA1I*Ak= z&`UvC&DF;NX|CpY76YZV;VrncW*-SY?G-U1ip0(~LZsE93+iRG6ovQm#Dw*;Pe_d4 zX6`YGq6vu=HX0I}KH$UFPSiPTw9eU_m~eDnUDxkxV#0dWpMf}S}dY}$EY5K zWekuthY94QT)dz7ZHES~vp5C{kCvdF3B;2ga%5|v+OZd_LwW!K#{;Z6$OT*x1Ad?e zJhI9jHM3cUDxbf~EX(Co5YAvi7a3j46=s4j9vxO$#6ul*6^TyqEl)Jxm}8fV-B(IV!{eQt~ne8v7V{&|_SpaS7MH)bMX6|7Jm>VtAQozK=)xKqD@H zN@T9piy@`bQ{u^KlX5;S?_WHiuG~Gw!GOlmhTqebyo-jSu#&1thHig?Uzo_0Zx#Qv zG;cs6RBnQQ79I}MlXa+U#{I9$Crz$+>qnKOjfs&>QX&e|Q4({QHL z(E4O%#518n?R#Lbrbl-$|5)9NTd~HC%ry;{6;$<$UGY!JL5r3ll4LZY;nt;q!Rkdz zctO{EW9S{`=-qT`u8GohoIyn#A_z!t%%qO5l2fJerByjqdc?ZKnng?u<2sWSt}{_w zPRoR8w1g2VpUOFc=K&_*d2VN7JjVOx;*?7{$x*(gG2#iTRV_-SPztM(olmj>P?g;D zN@B;B#3*vn)`tU=amcbw!Dt9t3>i7yg`hHBnwJ`1Dm#QqB?QN$b6j@LWVpIjXiMy7 z77Q>(O34yecxcTiRB2?dYTRgs49nD-MYJ_BQw4~a;Zvl}@9Uks^E8qNtoKosdiT2r zx10l}XhnjyMecm_>2)omEle_u+xA$Pd(BmlXKvQGc1ci%Guawe7a|Ii6CR5-T!lz( zpZ(9y&N6<1DqvN{qbI*cWrk5~$-}6^>Lqc}F)^UIu0GV85u?=xE4E@js4dcXQZTFW0 zsob}LRBj>AiK0seh^tj|f@^_}6T4pk{ZQ;40@78G&jG2<{qW*a#8;Ry;y_#N*n++?6*#ATjrpmGbG+;vXwaUj)s6Oe{?7xbrw`Y{wp?J#9&{Ma2x{U`!bKgK(| zNzU$gAob%rK@PKK-PFdBxAAyLx$$nk9 zCM6+U_VC#GiJCpl%?fixL69Ea(ZXOS=p;eW4irTxM+2|KAk%tRB&rxho){ZAhJ zpc#U`19YaK=|E=*itiP~gTgrOwcB_Ct_I$RkG^B~Mv_$#gq?SDatvG7Y=2jkje?l_y5F| z?(G9l=>89IrGLM~ADjqQ;!6FV#+CZMz=tre;!1g(9U=1LaHV_-SIVD+E9FnemF7%b z3D@I~PP~gN<>@))hu}*2ZK;eg<0U4kwIX(_6){ICiaS*3P_aWL4wX8TaHz_mYKLkZ zn(5Fihvqp{?@*INOB}kvp`{Kjb7;9kD;#QZXstu*9D32A4Gy(Aw9%o>4ly!K{5h28 zP`*QPhuAPuMzKR!5tWD3Vde}ts~VZ!DAY;VyoMQtn1szROwBt!cF^raUIjq?+f#yQz6iyS5KOJEkY?d(^x#Jq0agt9@DL z3As?d=0B)>`(b$JMMh8f^@u7H6U|eWC7P#TWM|3>6UH7A!D#Df7(b~p<0mx(>L!Md zm#M3%@wYM|W%MLWuyjS09X+WsqbIA_^WVNB-6Nqq{V}3`Cb~z*&7$MG;%t%|0Sv$}kWY{Xg@3%@BU z8C=`H{#*OjjY?$1Pg4+Z%Dmi`*Zt)$sxsudDHAW$(5CrhEqjWw2{_GR7p)hTLf z8tz0|!zlpd=02;N#r+sOKU98Bx^GKzQqT;PTOINNhK&Y?`fO)+ZDC)S-~OY&M^!?keT^3WH>*_pnQTA1SovR3;VoqIP=!?U<=7c_ zSl`_oM0D}jO_dbB(AHz`hY#j;PnA^j0w{2J`_`ze9+IY0^J&`T=0LcD zi@kszEAfBHAC_P31c&wO`z-5Q)F`MddW|!yy|$X#*lM~S&PG!00_3hSeP?f0W?PWI z&+9FJpVu{iGZ&?rFN6kT+qtO_Ri`QYcQvs+*L-6=E=@Pi!hb3=8j54^Lzj1A>4Gfp z%J7+VSx^Vcz(-}C-gd;pNY&5r>Vt^w_$fEkVVPV-F*?VwMO^X{*2P^sGR+7Z6~?Kw z@eDm-?7?m+TZ|7{dK!HbHFZ0W{!dO=U0aPh#(KQY%?gJNIe$t!j2Nex>s&d9up7I$ z4vjwJuABc`7Y#=kDQHpBS$jUs|3++>z}TiG4{FMAR4h7uxS22hg^zM1t(WP;X-I3G z(3|bhtw1`tb1#riDLxLQlS zJAl-cmG0>u-P3-#)|CT+)RhaJ-69~3)1}Vt9UygY$3YgI9!MG6VX#i~+Kxb)*G4-#exXhC+F?Lu z$uy7-ik|?a`ELr4hW9*YH^UfYgs~1F0W1KJRr@_4*+RCUGJW5a8I|vB!K4jqkuH;UIV0>{t!qty~)|#2Beza3#6L< z0Z27{97r{N9!NFiR|wVaJ!jYH(EeB;awAF=KG*@IzNLWFk5hs4{V@~hH~8fQwfI+^ z`GuNoWU7dt!B8$`l=}#f`nwiLb>S)fTciBv1Z_a7Jr4?3?Y{t0#z0JeC}TSywTnAD z9yhDHOa#)!A3T;)7j?`4(#0QKQlh>s1X4|x04eu2C-(@D?rD1(NPYV=kZQn_dDIo2 z)}uNH2({`w1V|a%0x6@w+3|b;wJQTsS55%xc`?M5GBu3XMxY2)YcNafqKhGBgKtf} zV<;kHj@ap9h^bf%abmBFA%2W^q`w&AV&QTz1gcWc9Bb~_wxZ#MzFj7ae4qt_&{gTg zjWb3(fLCJhLKVYM(%_XRrt6h%(;%~m31bD-WY8df;V) zEQpIA77Ho|N()K>T`lNDpo|~@Sr=c8D?>07KZal)ehk6e=AH{1_^Pl5N zd5+ug(I5E-^AfIn{sFEG(LZoy$hUKM7azD{-a! zXW~ky7vM^B9j=sr23N|zh%4pa#Fg^@z?JeNP)E~n%?ss^!^* z{}Wfr4?s;xc^;%g`Mq$Z{6t)7j>MJnccVU|`~$dBeig2ie-&5Ce}XH`HmG4Je;jKX zT=|7C=CB9N{W|lUU+18Ef5VmTZNioA<)H?kdwbzZGX_`kPrwzGXmF0XUyCcWWy(6vZ7Xbg0;&5{F71N;p*I5OcS> zSL4u3hh{m%T(5HV4mCNn#GxA;TI$d;hn73E!l4$2);hG#p%)$6;82@G8y(v05F=AH z&2=cxAubRx@#j#XL&Xl2I8^Eo>pkUGImAT;YFFdXOo!Nm)Ti?ts&}Z#p(PI8;LuWs zmN~TCp%o6bIJDNGbq>Ag&<2Ov9NOs6W`~$5Rp(rXxK>8(xGF_a+@V5;iXAF(sMMi^ zL!6vYSE?PVafokAeLBk_EZCt#?MP->u!99O^8lmwCDHrHf}Ucxpr@D%dP)&e=Adp1 zdaCds>K?Og^q%VXbx&oZ&-1#t=lHpBSeMe|1L;DWLWhoZPiF#Y3xh$`MLJFH=?xAo zb7%#Sy0_NZ;nat4|77M@1sgbBw(vbBAJ*P1$6cqlL5FHbHt2BLs(CWjbKJNAPU46- zj)as{WG=wUn!5tXVu{LTJSlIwuMHPBtipXdwBQfp_}9uqGn9d)DG3aQVL)sy2E-2T zdA!TWVx|41*pZTJcWI}Z&$VZ`wV#alV`K>mH}Gr}|CZ=+f2r}a^I})Vp`<$xPnT)n zJiIujt^5hJVxFd_>dMN2Td24_N6+VVIY(!kscXmx7CXFkWlM z0s9O#Mzl+yH)lXhkh;ag?0nt9^zS>}af@ihLCfaz>+x%<$kcJ=l&0@pn!a~2j3yKB4cWJSMUe*<8_cL##0iuVOPN+g=Z=rIqOqk`42b(*`8d6+uTf z2FqnJPnSHR+9Q8(^OLudr&J!b7oc4A?2w%TuGVqMJ%_*CPHEaq9)_sb=$!=5x|NMe z>;Xp6HU-11HTtS4x^NSdd4;&Qt=+_ACS1S1cHQ18(+~mY;;mdH$Bt##8gTOs3m;{x z!Ob(^;Gw7XKm_VGrFtM8;l2h)=M-)Q(s8W2fOK?-M*`~T(33!H>*WM&$A4e?TihO? zV`XPK^iv>pdGpIo&(Y`utDg$smsR#six-u>1Y@?EUDdEARPyM0Z7LIx5hi?7WC|JI0ul9^vwoR zxkW%K_j@Pzv6DL*T}YnXgAalMO~lYlPB0fp{rw)0>iiOrhWA|{4ew__IzE++0S1-Z z8c4^nb^_Aam;j_)&NwLdEFfiE38bzpadtNYsVlz(Qdgb?QdeFAQdc^Fl=}&gx|f5- zn{tN%84ZAp20+TK22$=BK+63tka8~tQtmZC8k08xX-vKgq765K0!0uEt`ocH7~N^KHs*H6P{c<+6}yoK3<`G4Di6X#D6)(D zRaqX!3z75kajTn^IL39e@Hjq)AbDnQbGO`Fk@aN+;^)GkE4K;yy5n=mxMGlf#DpQn z5K?f5xP`yqSAwY9U4jaLel2Jppt}Vf0JK~XfQ+k6#+4ej;79X1e!StThy>f? zN_Tgo5X>I95>Cb+Vxr9a`tmiwW6Lm8jNw@GiTBMpl(J`2+f zy|T_UEXw#SPBQf7*CNBBjL%{RtTz_FBtb(NpOpuj-dN8V7G-=En!#Y%+>IL;n|s?0 zi!we7lM21E*xsd~jL+hfLvMcZcrO~t_$<6^dS!9V4Gm>{*0!+e%`dk3Xei^ewu4P? ztQ!oAGCphjK3ESK7G-=^ejlt?4T~~9Yh)j+PQ#*%&)Pv)COL!aiU-c6gc^I;F=c!f zPk9b=l+QYp6(I~|d=^_~y|Jbm7G-=EkFV>E)nHhZ@mag{!Me?`DC4ts6_(BO>9vFI zpoE%d42v>8D-N45Z_GIB;T0k4J;S1m&)Q8`J;(f>Mg_|Ftlj%y9dB5a@mZt#U|nKZ zl<`>weXwpZEXw$-(S5Mi85U)H)*c=UH!wElKQ%1M_^dr)(_7xyfiFoI%J{58*n}*~ zgnk`vSd{Tud%>nR)(pd;BLm8hn1~$Fr`O$_&8J{)QWBKK)#;_>kvxO*3x+a2 z>p<9q;kx;xkyRn9!mudgv-r)hkmYN5j$u*8XC3UZUY&aG=+Lk48y01JR*A5B4%fqm zMH!#P7IBylaRXyx<88yDjL-TOY{GE)b?-1XLSZQ5vnIeMWKkycYn)+G#%CP@o8DNb z7#3xG)}g|(vEi3Wu41L3jL$j@HlbgB?!C*fDC4sZ_gH@JU2j;F@mZxF%g-B|42v>8 zt4vrnT)2U;>9rdh@-UR~SrcIshUz(s@gpxmKDV*4^AJ3Qp^VQu7B*pQEIu}Oe#j~_EXw#SRL~Jt z)>T^=;UM;qudKvSCriXPxA+{BT`tSd{Tu zD7q29{BYfDSd{TuCkw0R^m^Q|DC4tE@%-}B>qEn$jL$mNWBK9Qb}KxDp^VS^4s60W z^usm5uqflRrU=W1%TF(^&7`4>&pHh@pf?-j{XHEB5ciq0`tdMnyVNu3s&G1;W7Tk4h$hy_ADC4uv^jLn~`?z6I z#%DpHNNo6T^A8M*GCpgj$C_~e$$twq92vty7|Qspvtbj){F@t3UKFw>85U)H);S() z&Edy)hO7$>i!wgzT#vOlzvIJ@^&`WgjL$mHWBnlalQkjhF~g#a&pO{@`7MWb!=jAO zy1-+7UVLj?=vOQc4`C?dvo3^97>BPe#_WpZ!j#%_^f#z%a8fH4T~~9>tc`P z$NWo%MH!!UiLiR9MYqO77|QspOJUPn8{k00qKwbFOjx=24~@-H_=k8QP#;P_f%J{4XkL9=L7Z?_0d{$#0tlJEWGCm6hKBD3N8(%w^5^A0{ zEXw$-EBj#a6EZZE@mW{FCX5aLt+(R{a8tJ!1uJ^FJEi!wfI zvB&b?u>WOPl<`?oubC8g7_DC4uf=dt`8wbQnE z2tyg4bq#F7nD=Aj5W}L3&syTK{66fdhD8~l^?i@!x6J1n7G-?ae|apw-Fv-ZQO0Ne zz+>SC#^(9o8Wv@I)(>Hmon`C8dxy-uEo41oSd{Tu*9t2K|1^Fozi(KS@mbfwCX9JM zmABuHE@ABvem?7Z*n})UmCFo^GCu1DkL9QG`G!RqpYw+elOsC!=jAO`l-kA+r8UvkB2an@mV**CXB;_&sm9=t<4*U8Wv@I)=eJk zf_J%J{6M9&5#M+YAf+y4SEMvoSdc;A}_hpfLC7G-?aGLPlQ#-NdS z2tyg4^-I`Jl<`@2dMv-TxyrC8!=jAO`nAXM!P$@XWb2(FgE;f6&e<0eAaT0<%jDS!=jAO`i;l( zYtdT6qKwb_t;h0XpqX=*VsGmh=(wg z@mcr7CX9K?P(n?)VNu3s{SG!E%TMLA4T~~9YlX-1Q~7&_MH!#K4p~ndmdJQ(=l&opR$=r@%>Z-#7%aAW zD5F{r-q}1-on_@-!9}!t1i$PoRQKY}o-;--v>eQ!8x~~{(op4~#j&!0-Z^cDLqpai z!=jA(KE?Si?nHcV6?aD9pYF^bIC`Sx;4}rpqKr*b)p@03sr$G!KA{g|Sd{TutAxdn zl2xVA>GPvHbM8+$FPdXMrF#73}M~AFUh9xq59PF~IT<{l1 z7!ex>*?a2j#|DxRv5{j0>VAHDA`Hbo#+|1$6p{MpX<^xtJ!WDNxrb%F&a!!9=R^LuDP%Ro$-y_DyRrTZ+b|zKQoQ<#khMHcP7wUL8|wwwhVQ0+ zD~5E0tXJdY;QXF$tQTP$`Zam^$PYu-;N652yx5KPlCW&J{5-$6VZGFi^|G+GQb&XH zSGhV^nc)+@r|JCbJWVc&W$WX&$9 zwV@m9jXqcnhV@1_)|!)3r)(fDC7Ip2Agbt30GKttLYrWqKwaKcP#5e=vSj*QO0NeRagucS$?bO zCc~nPy4h-MwC;s<@ZS-ev$LLtSm-;SuQYGs=f6Es-5{hrzljD?DVUCKc?^Xa zto`xNSiSo87j6!H9c@_eb<1Oa6PC?m!HI2a-g9~E1j7;;FOR)1EStxsjh@sPvYHG_ zWFUtYxv|msiMFGtvmf>kV3VD-1O6F`h1aY@2hqmeTI0?K-9oWZST+=I?R)9pK5(J< z$go7l3k51@_+>+J%d(gL9Oxv(SR&(vbhEIcAq`pQ8kWc~O%H^y7;5P2 z{26SrvyQ_*HSK)ssPBe4UuWF;teeiC3(M+U{qfa5`poIvVpt;M>HH7J0to7N>HmJn z`p~dM#?zS^`a1tp-06@1Ed2bo@u)pv1@lkQnJ8gwGzFt=<1g?uJ8KC3>CVch|8!Fr z_KOYc3k`c@f83YC%EP}+Tk5CgIh3^!<@7ZQpl<`^pgvB%kFvf;ZUTd(UjL*sz7Aqsl`hDsh3e_3P zs7r?!n;?iAo6{mTXJ_r1Z6%e7or#f}geM+nXKjr~0KwTOUw?NfU2ojU$)d|qR)1k7 zz@QGhE&FZc4RW(#^;cG;l`=qBE{DG~@ALlh?t&A+?+r_2yc|Bzu_(tJ9wq6-rn(MYZ%hpz34XbS(bz}qB9Tj4r`K!{+_*kuG4u}!x9-! z=fRFeSE+NzI@GX4hL3~q7@IH!zvtOR!^Kee;Tj@-&44>hiNG_52wwm7kQ;`$a6M&MBIAW?E5`y!!WFXqYFHw}v=~nr8fxh4%+s~Av#Rh6AXxum z(KDgWgV^|m8J5*m=a}=II)c2rCy18n!n= z)?W=vWV}324Sk(Qh&w%(?h!@m`iLyiIZ_*ME3BStX?p@3?=hEKa17G-?DxSKt!jr|t>e8ZxQ&l>4i)`!rq9~u^A zeAW)avbC|_!oSn7D5GvZX>7u>+!3)kJ8KRiC-fab_UhFg#jhbIHvG5ekbNkPeUVvl zY8a`*xj#KStLL1#hhgoctVqqav#@M!%$&KC%b7^i6IkSZN z(ojP`XYMNQ4A;lO8MmMM+b~|PHSX-1)itDXVGT5_h3y~Q7_#m$tavxpZo*>81_-M5 zo0bk)&l%Qk%8JC#?!p=h2J`d$6P{kQn~R@L!x9-Uentt)#t-{DA#2>ea0o_Z7(cEJ zNe%t@DG+xCDoo5<%3bMM!&uC#4f&~!VUpyE8Hn;uAutqB@64E_{WkdSb z#Xs14vM#zxCUH0;#b4|}1w%vh)KN4l;s?i6Nq z4f|fg>JJ7$mlo`8hP78W7C#~%j>TPf(%q5rxyrEi?#3z-)*$#p^T*>lBJH0y4XY@t ztA_gs%jS*!A6$88m^z(?wNE$JzMh6R{bkORA#10x^dI{xv%2~FB*Plpjm6VL!v4kLa||ks( z_eM|lI6&OVgNzL^eNs~a7E_xt{yXJBVfFm3Jk|I`8L%Sn%7cV83N8W!r=NG>k)f{_ z85U)HzYZ4G2*dK_Ej294_^k25>iJ!HpJ7qPXUR$9S(f$5(tfv7 zLe2ArMH#Rnu`$8<1rYpf(<`e()`x~g8Q-r%gk@vH@5c=>*@ZGb>ri1auL2ljHQddx zDC4sZ6P68^-;X=kuqdN0ecNW%AZ~1GBQ|Gebwp|=RUz62I9&W1h6ez_{qrx{*}98Q z&>MFS&!WpwR;jSqP-kuH&mrDvSf$E}l-x35*^PR}77u|M6$+45Nu(ny=OTv*H&wseMQ0$41kl<`xrLRdYQ)2YTU z%77KgnMVkVK>`T2d3LYgQ9@0lVNu5S>quesoHOqy&WqejrSUu;= z4-Jbls`bv}jPgO;*d!x1Xa7HZod?{H)%(Zqug5A`A%r}Bw(KpkqO4>`vMEINC_5pP zkx?j{gh)t6LzEGs>^-tFiYO`ipX+n3bFTYx`#`+c5Rn#4}& zboAdoA&to%x?Zh??DxOQ9l}(t80896wL#tgDt94MwJjBzt93xRxk^{Lwf$WEi79B* zTzwXlJ5$sBmrzMcQtQm$Eg+4WtK?A6)w+n2#sb0E-AA969i$w`sT;eurO$zC#8mE7 zHx>xhimB%!R6S7cjQ?1*g0IM^jAg1`gsPtab%?3@5vlQyQS*EaiDa^>c$+6J+E z+tmBX zu_cXO7fnF9^*&|g-K@gzrl8U@bvsq9 zH-#$C6lpZo3=}yui;jzHVK=5oqp24>McQsBwzQR8^Oz!yrkX42^Tb)k3w4qy(ike# z8!v*YX!4jB!ML(F%v*)dVWu+HGHGJ~dm^9XPc7Mkl z&owWGYC6SQm_c{#v#ky9kZqCc{@1kAI8NIbMGjN#K)HRR>ZH1vCC5&t+C`}Lpxmmg zl;yV`LY3qvf9)+5T9q9@-G5bfF%+#z(&#>X2^5VNU8N-2b*7Evn!~wBW2n$Pd>K?# zLzoxA@&A1oy4yOy6lrv>j-cE;)T=V}6DE);q|sC-P~^}I5EnO2PccOrO?CDZY4xh? z#}sL7q*YuK1o2#REmYGfHo&BIIjx28D8GVSZpZ%n{JAcoE?nN~Ux`uVFx3TAPJ1|b zx!!4WCUQB3FxACUp>u9mpNqz8b%($Eb@Aui%}ha~&bhCGa_8JV<-SWTRGJFb0yK2a z^{av$>T_;4<#}@BWPga~796LW^&Gk;>FzyKrkxA6n@Q?gn#{}`D&1rE_D>H`Ma(hM zwjI#@f>4*4>S3u+|Mc{^sDEyEZxY|b_fK-#I8A{@^-nKP(Q$f?E!5*oK|}phk~CDv zq3)mFh(p&=l>L{Q^mmn9OP}L7y<_*bw2z`5d3)qAq26MuPlW0VimuhEbjx1opimo` z>KnT^SHA?Pw3QGl=og{-gQ7N3(NB%qFx5YHZ?4xsxmEl5wL0y@;S{D`i%_p8K&@oz z^$0Zp6wPq+A}ILZ@w1ZaAX5V()Id=2OvR^3yj-Xxl})uN17m1cXpRj6MeChV#5<@FOt8yqPnm^{nJ$JPWDw`@(hQ>gJ&N9P5-Ty3esIooFkVfyuZ-B~W zB2tg(_b(o-Vya9bja@4hxW=}fj`a!Ebc$_Ha5o-q;>5-1Bt*INefKhsGdzZNg~s$v zP<~9!efMxbrstW0MvdtRPnlHMH-yStmFmpzXeJGfAfFe_U!^lOdIU!zPC*L<``+I5 zyz2{dM&vjnWA}O<<+D>uGxs~RY^3+RiYaK6=eIzG=b=!^p0XC8QRf13s6CHHoMi0z znWC+3iRb1VXSDSknssAT_FN-n}!O^n^^@Lf=J%|<2Z zt_J4b#8LB^dN+12HA&_As`~Fcg}TVpqzE+`l-9tdn%J-_vV_SsCV`* zo-b5arlv%wsh}E~h~`Bwty1&Q-1wBKsg?@u67PX>yF~6AA0L_OSKNP0L8DgO`=G)r zPN>GunDnMVLo2R0KOzdqpb+O~RTgqoE=u2W3Sicqsb(YRC5SNQ4b*xK2#d)qY!l)Ie%G~2n`(ysPQ&9PKy zj?MMCXw0_O$k$|!pJR8Jf=11;d7#`JqxVLI`tVs3$P{R3j+L34nK-ei$J-V zslN+zhN(pn>SIvpY|x-z?p>#)H)__i)gMQw#h}uf!?aV57_wlKP*a&&Y^l(=F9Ah! zjQVkPv9zBq_TzqLVW@1{=0fzb5%^`ix@^HR#t(LeLbU@b{d}U%Lo>({_V*ND8|96RIIo(5S0!a;Qh} zOT=+2ML#wAh~s=2@%)wYOizuz^qwy>1 jwen1Ri%?~o*_J}1Jd;E1`5Pa{ytrrn zjNmxmSkIv`-3Y3%A&8p1vs`F(A7N@^g!&c~KmG_>el+rXSt&(cFo8_@Hg@m)*#zqT zd%_z`ZL(BoPuL8~%>>%9H~C)O#S}EESHA-l-V=n%(VYAR0W|8HLEnQ)V-E+jTYWH6 z+SP|C(&!z4+NH;03*xZ3V9x6Np=-!l9A``H-u~GN%3T#~Y`N>IWIx8#)(EvN0jlzg zwkg{p)OJw!AB!tYZMRftEPenL9*gaMET)>fMJmv!vDg7BJQhMd-O^IfsIk}y>S230 zxLM#}Iq8kRm?DiH3u>1hi(QCw|CZ)&Wy9}^VJt!|{Sj2SrMrAfn==KCYUyrJ;g$+D znJH*!Etlk`1>{hB-h()~SnzUr`g>_~9;LF2{?p%&(>uOhKbo(+Nr#Bi>&YD^NvP7=L6lu(u z;+n)#r$Oans^rW^Hwg7SQ>4+Jr zvPA_k5cvXq4waBA$h+_p0q5Xq0Dis6F36oE!$AHJ<(RUrvhWk2uba z*u8V(CMY*IwzfT5>W25cl__YH=RZNYxk2|$LjBGZH00S|w~#~a`7gwYGk&S)XHA*A z+1kHi@Elq@w?Jhwhs}$ialr@vla^Lt>XxNKtKe@?uB9^zv|N76w{$*J(5RN)1{H3p zP^r3`^rk>VEiGmLKM2U7Zs|XWbN^l9HIDO7?B16Cn*eo#sedEXodl@yJ*>w&5$bLN z)Z;xZbvHu&2g;3L^B40Sm$BHw)PE6*rl@=eL7!88XDUc^Z*Rmv(auMu^cxS?lUxt? zvbC`Yl_&w~2c{B5s5nrCO;FRopjP)L9VFM7-Zod9r9yKoF(^03+IRo=a$F+kcX1y} zL8Ina5>VkeCe)t3mV$=nSPA?8rvD73=U7t2iDSV#+1LFhp8xJ=tCL1rnoLo84bH|D zlKG345h^*T`_Jdiui0G5Bh&++T#x7xO#8Z}9*9s6g1Y}$G-2vNONGWF1*q^?Jm|+_ z15?nbv3Lkncr1j z(nYBBpdR7gIJ_ht$gn9&2S#y|n34Ql>im68;R7TY<-5b9# zl`%qP0`;i15-j;==wC9*X@}VAOc9Fy=5}1Hh&gOt-1B*@N=#+8RA}uy3d*e=`n*&=VLc+s~f-Oj^2z<7ADrG#jWY zhA=OJzCB+wYn)zD*~e72NK5H2tjf3DdwpBxY&PH0U?|`K8r9P5pxiD&@9POwoGED3 z6RLPn=A;$4wMs3wrGud;9%;;-6rL5>-))!!R4#KY&iv?4=?pX!719_g^jXmVd5UIc z)$y6PN^eXaN{smqSR@zyWp??NvHnc*vY~+R*W0zjT%fX=!{pEwQ-!j5sQoW#G?g0^ zwTra+Gs%aUA`Kli@9uJq=^?JkGzt!fh|?+x`_((5SW-1r=_)P=7E5jcPkN z)NL<@IC0!J6TXPcDC3oXxUDW`J%{d_ii65#4%2Lz{zJ+9Le*xfxTQkpf)b!yOK<1; z>U?qE(*8_Aqgq-Ll$-N(hbYuirl3*RQRGm!v=rjR-M6KuI8LcV_s-|ipt5sIpYF2l zinKJzn>JW!ONClm29#^*sGKtvl=dwx$rLoIrDZ{dTPjp%rl3(RC5O7D^jEv%VwH`# z#O7zz)8X&G&*3=bBA%a6p09lSVg7R7^LnPBQJ%|3JPUP{DQL)ZF?Rz`4z=eBi1VWH zOV{)tKhkxN^z&VgQz7E{N#%L;xzUL#c+c5Jm_VjLqdZsi6dk9l3!$E33L1DWO(Ijs zq4rz}aVnW(=0$LGZ_~r#xiiP96!BcyXOA<~o+?*ftmHjUV+tDOxr(O@gzs((^&?Zz zsOyBPpfVYPa@pdp6OxX!*9oN2=hLS^FeVx#hDbi@_X;AmSPUyiDX*Bf=C~B8^anE(a7^X-=N6n{dxW=A6 zsb*KGrc;dm-mg{CF)C(;n|BIrp}C=FOAS-=|6M=-&XH?GW=l;_ZYQDZ=Nf*tJUq(g zf=11jTAm^W&2XX0GX)K1cu^ZBAcxv>ZN#Z)j++$jTQ#<0hj?Yf>=ea7+ zOsMTW&tM7~<@s4pA=PiweiG^+Q_!dxUKiB;XZRy;*%?k6JrkY-b^jS&(oj@LW2n#! zuLtUJbBtzq+J9GPkltv>6lrv>`k>ql*WZfj%@k=g)c_PZOl*E^F;yrNnIes*8hVPf z`dd-Um?8}wHNSgRD*(#X`r;YldWRZ0Op(Topw+zq$~|+K zT%lJAq5frxG=>Vj)7Kmn?T6+C7x${r7+XOao$EzV&SBm^ht(9mHdCb0xmtj7Gqc&H zD|Lk$z!YgT)zVYuMNo4meT$G@QJKyZX*AU;0qO!%q|sDsMd|lF3yrloNrTUClyZ*` zXh!Mz+y-%S7{I)^=Y5dg9H&iWjMlxx20L4`ezZ)DEVg!4Byjtdm3C(pM1Y{?E{^ zahz8op1UZ|bPe!|_nh$^(+pFfQJ%YcijLFh2vvakTHtzRhp z+>_(H8u8rCXD5p8CSLWPXD|hg^4#5127+gyeqah3cy`w<c&^ z9udzyeRlFppQ7yHJ(nMcPysZ`b1zVC<Ko~wexM#Q1oaPnFS4)i zpTSH)qxz>mDAzx~&Q5Q}+WAXQ)xRy@Oh1%M?RV zuaL%^ze3Mx2Z5q9EXCLNUpqJ#X$%#*IvotEnjvURx7X^vU-~EUL{nu7X>_h3pxo7| z{+&)0nIes*hJvD*K)Gx&RVclgB8{eofueSiR{u_?#Y~Zgjt0R+uCcvJHTmA9f2q)O z+9am)tkTx$`!AX;dj7m&YT{z%bO_IfC&XnD{$-B*2IddNqwl8K5>KrNt+?R{#QBD) z;XY0<>HmxKCgRXsrlS9nMK-41M4WK;5eZPOm>LnGMuLj7sRI4}*IcGXMyOE<RDY)4iBRJ}xjp06SefcVtz&9jgc=VjKey{< z>vta(Y9CYMBh&;?rI;$ey|lSXG*u|+rrQ5buvF*?=R{EMT#&g%p`8=_zFMCtXw<&? zE~xOiK&YuqL4$Lp^F$8yTAqYBpBZzs|770vzv<%nD94!;@jO|1KD_7W$&jkp1X*$aufv6D9`UlJPTEiDQJ{ua;QB|L!68z2YH@RddxKOJd@*0gJ<&b8`scl zy=P8OAWk9^lgf14_Rvl{0~DPG=$v_Zeb4=py%AG0B0cs2C^s{^ttxP4hVQXiOhKc1 z>_bnH7rI&&>KaqfsC)dGpoSX4tySxlVpKD8l4d$-^m%X=sQaJa-!>E#(ikdqexD7h zu{lO#vGaNX^GwWCq3mOdG&2T_!UI9C?0Z zjx7L{fuqjJb-asEo0wV=g3h?CrS zrWxKmYr8kabIw^7`y}Fdna>_)B(XH__W8tn9?29m%JXthQQXEoI;|Dzcc!2r&!tM+ zJ<^{vjnKBb1n5*gjxxzkvUBL z^TV~fuS>7K$<#_qg=WGkP;MqvxYK3NO5dwLGX;(6)zzSA2Q@E(5p!>35GwyXQ)LP? zYVZ9VR6cVI)EAX53N@4|XjHB>plFw%*)lc$*mR)|F$Ik|YQ85uAOA7`#G5SPJG(Cs z$9c9YcV}1IP?Ui*jp(R#8uI+h)5k9h z^$Sy^(Ye-xayx(fR3~c)Rbl~UG=GaWLTvz5&>VB~OsK(3kw)kG5)`$|ya+N~IMGn3 zZA_7dj+*xd7vewWpLnk65vno2|HpKmRXSbxo3>w>LvgW8<`DH^Q2b&p8Nu&34m8*| zTm+iWyaw%;V}h>{$6ed}`dIUG66djxEcbPyc#|c3|Md;12Ig>L^OL7sp|{2BK&HMi zlt3O$+J+Kn1V)mCWqSd_lVQR#GrXtw^WKf z;yL-p6x;k2lZfXnK0A5NJ-bTQ@4e?|n1V)m-U`ZH!O`c4gnEZ5XyCaxa#QwuJ#Ryt zBIdYxanC0t_i~(V5zpH}xw%14cei=Zxfa`G&?wJ8c#0I%&q57g3L5fU(nbjaa;W=x z2jXlu0`nrcvF6`x($7D0oE;I*JAHQQ=l`0&bZLk8oM(y6295H(3lyzfDofsbY?V+$ znSzEq7k6h*a;QE3h&ZpB7?gcz(%#0WsX{rzaej<=-VMt2^XSjoeD|aGTx_YOp;4aq zfHE5rN{Nd}-VkaWQ_x^;xI0#Is6GFLI899y^CHOJYl7LS=oOXA9OtKq=bu42&%G{e z8u^p=T;UT-L!&(J1r?spLQP@{8h9>e!vy3|d)|jQw9iq|PjW7CoPE}F=&o%)s3wM> zm7617@nZX4CC51wY3X55?#eVv$~C)%y2aGt2z3OMd;0W!(~M6FRc1N5 zCpZ$Jj)ID_hwu4*Q_)Xt_0b4*ECK2SQ^z9IaZvPdobo+1Iol0!m~n;8b=*>+bKD6~ zZUpn#~k6>Wc9fQ2Ce|VXjw& zI?WU`D%V+1G{a-&hptzJ%Cpi`nF0-7b>|v;Wfi_^I_Eu8ORMJ}u~*`ZVhS3p6xYwx ztK83g)pQlmzK*bv*siDf0Ec~#HPWn}*%9IO{(YXl9 z&8X9zVy!Ot(do<-G^)pb1(n_g4dQC#swUJHrl6sgmMF?Pa;Rt2CB#X=$Mx^T$i3QD zU$UMYzGL8JCea;W>~cf_G7Ngnx*nna09C=vI@%M??dsh{sLM?K5$V+%pj@xgr`P`Q zy;^>qbqI~>)tjJb)|nT<@OQubL8v)QL8I;q{#3b|zBA!Tp^~q+xu8+G{sKj7kaG2% zTe+!FuQCOV%5_WS8u@I7-a_qT3L2H`Z%}Tp+xX=6MnXNl!8(LS?RB?7(Ows4e!gp* zw2x44Fa?du^^d2_iy&w3-zy4rgehng^)D#udD@XS?{4~vP{qGARi;3rs5^>k+WqA~ zsPRleqo})};t|vQM%z>m92Dv@Q_x`T6g8KyH2Y{C>Rt3d#QDm^p>;T}&>3 zntV2nDs--DFg}{y|yS zr~g&SmF|06n>s?JQIvjny8=^bB2-#Xg-uY}5B2xW-(V`Or9vb4Feo>I^nLTReguEn zVjV)GMlc;HH-hxp9-*G44ayW~XawDjQa}#%2&P9I^ACz{=^A=CVM_W)OEZAFe@nmq z!BQC_Eqw%3xTP6)HtX=!Fq z?ppLf{^llQB9768smu}T(FAf$XX?=il_deH(k`1cON7b_DiwPww3U7zi*wkOsjLwy zTLQVZF_kSsJq9Yj$we8ujQzqqa&x&J{n1)@%u=Blo*k4M_d&0fJNK9$_W?{nqsBcR zRCwHlI>Qt+>iQ=KsCvfAgVv7um+pM1)Y)y%`lQiM(fC(2DFo@-tU)pUyGFkLFyNk>;iMd^hpG&l5$%Zu!E-lqQ1-%8lU zk@Lp6Tz`jhnO20(jQJ3UW&*|exnAZf;v@0TrplCjh!cLFC_gAS_P?$yUR|hsOp!+C zDv&^~rSTrV+28l9`4qV&6p!M zp$JtNR31YlGC%t7fd9c%VM~QpZV^y!<QDQIZ^ zxCb5qIn?u~7~%}FX@Wwx_L_}{+*66|v;Qp?X=!m#ui3-Fx*1cm2-T9Q;t{F@sKiX^ zC$3*HRU$%_On^$X-v%ogp-O?GJ7X%@>t6|7={?OTPW@7##HGDRR$F8 z*ycsh=IcJs3-vxzWh@mM_p+eexYLeZ#*h12rl3*dUJg`v+=V*D6f`vMC8+IG$e|wh zClJT{gVOL);R@pU!2`DTiAYP!gECtK=1BU(JzEG>hN<$AmR11eT1vk=qP%ZuXQrT0 zEq&5cGKuGN-KWjI29vpuLPg> z%qCRfgSNU-r0tb`E6j`F#Ih9cSMqJ|#S}EE?Nva9M_H(^nSzE!xwso%z? zO)Ra+exT{!p*{1VL)LTEi07w3x$$cMLh|udz2}NdL8ClZ14ZZDMCON{5eYSlDQMLF za&?uf*|uLpx%Myxjmq^jD7w3$TyrviT2^vBc-T~#0*$(Ec?MKIbIiO5R?e%LT&QYH zL8Efj0OhVFuGLBXyih}#f<{p_6-Cc&gj&ZGG>WPPDh=5;rNZQCqlLQ76f`vMrOFu% zjV+Bbk2^odu8lZl%yHUn3-@ohOyX2H5(IQ5TicAgd5#_WZL4)a(HTz)^)HqFhN40m zbA}B)lX(^t^(vj4UmIL>kmMTA6g1?yw7ZhAo+;uFtYJT)vv6HRrcowO8CtD+KvrDJ zqr{r`&P^+fpU}Sg94J3~bESX0uFT$JmV!pLq8=!>;^=!WLiIgvDQJSO9lG}F(A(Dd z-Ns*`k!QUI>nG5PM`jJ*Nh_s@2zB(5M;S6co+XMCPY9F*G=CN!hpcu(%BRA-7bZdKYX z;6+fbfAsIv?Zy;o9A)FR09Drf4~^h|N56VOS~`{~XmH*sW}$$_UGG0F5vQIxPCYjB zo%6*c&SxB_WgP84RF0b(YM<0Rc!qi}TvOWA(B2`Mwx*`CuLpUC{sr~8E3!W1-WOxuDA z&qJXuFa?du)y`9H9txG>7iv`yK!aB$xh6ahaUf`qIBt~lzOib*#A(SCG#F*lQK4Sd zquc>;+$c{-`e;sxGmPVOF#T*~rhIH_sGp=}kEw}QHGi8L8fDSsIBQ4Q)`Um-C1j_Q zBK5}K^Uti5QLbqyDlbJw`DIXUl=pT%_TEc=lt(ZHjq3T1pyEwL8s+*a-+of4txQ3q zM!6FxH_G&$xKIzBGl5KjM&;@Ziq1qa^F!~63)O%rXcYAds7!`1FMK1OCR5O0 zOiLRL73xDhrd<$+`iHW&+IgXY#QBBebitU0$D%8!*9}2q@lBR=D`YH+oHtdbbd8L~ zt3H=`5zzaCUHw=LVG0`6(r%#K&NlYf*c74mGX;$ri|(MpVkw>l?E~vbC~LF$0Bs@?gOf@At=|}Y1@|yb&;t)krC_*%B?1PuHMIwV6k5*zj+6j zG^&64fudfeLeJHO8p;$jn5*vYh8*gvl>Ug5&cq{H@ z?&24O%6-XHoAO$urLTi>Ev4V?^_p*KZ>FG8Egb;LwKUu1m2U{OohfLjrLLhS`@Jn4 zh&Z&q5}BXwi#C{(8@-~EeZV0u5DQGZz z=^lg%In<*w1ab11V>CKLO3t`0p7UHG#?(eU4^^J&Y1k0&xjj?RD9^({xqharccDIJ z3L5h4PG~0ky`JAdoHf>5@W+rQoy7BR9OsRQ=i$opS0_pweZzY$eANbnMtOeIQ>38h z8$$JF3L5fUvJ`tFhq|9fAWkE5+`I_(*DttKJg?_CBO;zh`s_r}cNs=_&kz1)lR=|A zj{+6G+7YTXQ_!fr_bpKQOwdH;ht7jStzilpm1{I88dI7-bRHBc&F`kl6lhegG0LG; zCAI$vx*3Y%k;YwP+ixz61(nMjGcSU|;~ow@gnD=T>UV1+H zHB)5@X>_i4K+*alN`G_Vd8SCCsd1nR8iLNSwoq?UnadPuG&LR+wTra+n+sQ%B8`ny z#jH?U;<;u@sHRhFND8NPy6|&=3CQKndi2c&8Lx{R2O65s^k@QwX0N^inTR;K~Sx7#D9wDtraoTYQC!-igu25NG}xnT zZnIVmrCT};aXK0SdEQuX)NJwG>`%*0i+G;yvzr$|s`aVjrg_f`n1V)mo&k#17v-Ys zL!oXl1&!J_J^+=EDcYlis`HnrHU%1$>qAhqr?@>zsJTo*qo|pn+)62becc;E-DL_I z^lCBWHh<;UPKY(Ey|{{x_$fJLCbHw2vvZhh5rl2DhKS`-<Yv5RA^m;;p{6he4d!Yo8zvx!dIwm7ICJ@U(av?B70*{W&XS1drJ&rdb?s!w z3roD`LFV&#RG?9wKLJHM02R7|6)N3-wiX)lT%x3{2*{!KybN(>@bRZlw0>ATFXlMQ zBA%Bk&mS%NwdXSLxinU45J00me;V;D)HbG|QJ%@6_Phdd=bpX$}`>Ftni+{VhS4Nc_k=Xaa8C&PN+PIY%XZXvzrY^*zr!vMyNv^M%S{vz~b)ekZ*_kbIxwXE3G9wSaw+&ZcC42|;qRm8JUe=!9O z)=p{mL=Ls*uMvmLB{rIqOPjwX{X9OI&Hi=7^Eb-#?j-MB{n~rZLtorC1sdgfBPcpE zQn~f+l!t`c%oH@_+5cu~a;QCji#YV20u}u^&vp;k?B80?p?SC|0jl7Gmf94dHiL3| zORl|p%+gO}69-#^Ehf=2bv_n^Xii%`{5SclN4bxIC(|7<~= z`Uc2goDLe@a<+K>gyU?9c;2c!U%vHEr7hm`b*7+Ep0|N=S33(=Jr@(I;zQOmH0o++ zJE(ld9rYz$c?va_DQHx#A3#z6P+Yn@7V0ol&@g4+71{xcW{Vp)c~vB(bx0a}v^v)W zLAka(Bo2H>sviWqX4(h6>&F?*Wz5m?g!9J(tXr zM(4RcQ>3wVowd(Cae6EjNllipuw(H+-RuKeC8R>@AdzTIPS`` z&cdo|CC(v^^K;z2cL94rr85z!70;FGy~{ZcfFJzM1?iU@n*t45ivKnLkVCze49O|(+jyS1o_XPSA(E~EtIL9L` zJptXx2Hoa#I}Yo9r6 zF2oXXyWitDrz4)vD9@vJ3~F=Qdp^$;G|KZYo}vWwyhW&rk6O>rz;g+9K@PR&vxxJB zIZk(o1IDZ{o1F7JmE)X^cs}Q|n-{^uJJTgO>pdsWVzWb|Jf8>U&MCiMkHrZ!j45c; z8RP<}d?pY1qO+b*|1brO%5@PGjVZaIvz}1>vRa4GDC$>GZm0bycem_9{mm3K)T_na z{UG%r_bTtSmk`J8wEsSrdAG#rlg(zoWO`LUZ@CPLRuZ*z<=IK0r^J6UbvZH?S9~t> zBB1AWm;G4edCca5Mz!=Rs5G35K8+w$3#On^WAPiP@K^{ng(+xMuHQk0$3mzdnSw^; zx(2GOaY)Z;ZE?@%Q)iFi`8;XNc_;KcW3PjvGqrhf&vys%8;S~P^qKk(PY8O8>UF3shggnQMSdsdYviKXzEW;?g~VIcVH4zq_L4! zb4?J$bIpNJO{dt8W@@^e)Ax=eOtL_ta#M`mB6?g9{_#0GW?wNnqZ4W({=*iUIhBEyVI(Oez)Vi^II!g;@GIcvb{R66^ z$wj;0g{u222(_K5e=HR`pZ@FHWnSR#di>*8+z#0 z;yH=WPM+K3-aS0A_q?7dXq4xqo-$BS<=EA-LY-y`8nr_v14X^=_C4+b3!0%Dmwg&~ujHXzwpUX|W=kqiZdKCfE>im0@*-2vsM(Sll)Hze_pO9l$rLnd zwxj_SK6eY1BDZx2jmni4RQTL2R0pP@QPjhr+!=&E*Cf<;OhJQv!(B&FA9AnqbyPaU z3BSWDakA&Jp3|9L)z?w!LD3UeQq0Xi;|W>0gPBSn8H)^{+*kyIv(8WN$KoTVpiwP- z1eDv=>5f&X1580fEp?ksKo0f%$*4RZNc85T;yHO<+tQ2?&zT~gGkVX(n1V)m&K&V9 zR2!zCQJ%@6_WUT~G%@CA|2f>^_krU1U5@i;#B&zq`R28Xr5^R3|6&Rni@cA^PZo` zZ?i+AJZA?**Vt6HcNsrMs3lB6gMN0CgB)tl@rcvi#Gp*)pUk&i_NHtFZ1(tw=N!uO zgo*W*#(U4Ln1V)m{-5$pzXMRHMNC11e&%it$f5R}6LDwPNT#4sEzRR8a!A(+LY-m?8fvNAq5^WL zTbdVf{xvbM3#2M#jJWgGlLf8kyb;g&e0G|LNn)E9<@KJYGX;(EoF9~11@wNUPto^#*$_(%coc`j4XD9;5!(JG)` z>1%#Vk5IRmf<|5Y6;iq8ZJC`ysOJh>htQ~8g+WpOP_C@?()=dW6sDk2XT~C+=*&oC z@zeAX9fUf{6f`PVQJ;(4>@PX(R@}jYT-mxiR#@+r_9J&dKlQ^L# z(j^h6wK-0!uIrYbn8!E2sOEyHp*dn}!gqG1kSmKhMsY9o zZ6CTvD^twoDixWlr9rtpVNjtxIZFAtdWtD%R6myi<<91Gk0#W+#ceKV&@Q*W$e~_e zWf8}mS}+d}SDrst)>pL>Hcr`y=W@z(s)@H-m-U|eG6jwD{Dh}WI_zUYEoTZE@?4?} ziA*7f+H-ltxqm-jFo zr3xt8TgVqZy%ee^Q_!efRY6hzP+WR?Db%-2L8GXrK+!HiV=;HtzcHaQm9`F{pR6}XzdU~&ut`5M~+j?^s2tm< z_@zvj#;%($p3^>Iv)7GyehyT453lPzKg$#}%5yzX;p+{dW-|qiy56X-a?!U5gu1~L zG%8mEm21PAGxdckQ{J`<8nq`h1VwuS&H0<}7w#(50H&Z(xf+3@{fFYxx66gv$P_e+ zYOE-_-ViDY{Zc+tpixv4-!3{%-!2#GIi{eo&tUoL;(1W+46^Zjvr|INFqCK>V}Ky^a)Tx3o1=(5RNS0~H<} zp=L4#jT#+ts9V||aqd4l$2d;=i02NR?x+frzh=a)c*M@OhGOhKbYha76p zFC)(VKgak5$9Xw2Ivo?BUVYkn?iisufuhF*bbq?_^|%f)rk^m?DbhckLAfz4&}ZYW zPQHJVK4Wu1qx$C+P_(a7p?hkfUSbLw>YuXi`k5T+{^{bgQ>NjS{;VpVw{V;;k(PD^ z^_(H-T<}h(s&5IEqlWd|HPX^oeJ-M^?EdoiuD+!&Fa?cjX*W>r3ieKlRLO;!&J;B2 zY}FkUovmokqbpdUjxYs{%GCoD%{poWUBL?VSWVk5XcW~G6s<36SMsidjtccMQ_#>@ zxCdqd^&yW1pNV=Q4$TD0G;;Hjf)Zyj$LVEyRbRpO236l6(N6$gXR3E(Ec*CdiJZp22#=Hv?I(NSg%8ej>R!wpxt7|D}u-mw+TTC{xg=T*E=R8Qyu_vhhNF z&lEIjhQA5Q&G7%0ckL@w$_CaUG%D8!Q1QmSc@Z?uQu!yLnlJ^8qDF$MYzXR+N~aU; z5o!Tb(9j6FxBdbeFFjXBAx<3=gT`V<(`upYS2@lo%vEzZsL;?p>5`f;rlztvVr#E;fBk2y_q>%UXq4x7JVnWA4GMLG zDQL)ZNzzauhk6Z;Lmb!7Yck~@DV}rC8(gN0i+CRIv(va!KacaCyE6ri@;m`lxSxgk zo+)V5tRsio^F+jHY%-I-emRnuH=o`9ob7q*d1A!#yUO$2JKtxU=skB}3L52k5-4}& zK+nE}TE!GJYAsI&mCv{%Uv%XlRN|)AAv7x26j0PZq@XJYp_(uSjiRQ4a_60^9G|Ei|3ho zKQb26d@hF9c z#K~%6kiT*VE}WOqY1!O*o)z&t+h@n>HlLcFb|gzC-|G~~I2n;hg&dtQV%HH=?c zuT8(6Y<`1{Te+WcoJA4OA1lvI5B0yj$a}uV6g0~7Vo>hMBz@*qs4}f=OQBJ_=n_!* z*dgtrLJejL8kK7)D4K^9mv&L1wlD>aIT{3yw6@uUAl|e-d_DgO;<$Y^dFNFtBu;6j zprL;D&*G?8xu5xtY#HK&_f?5AgySqT{jB%Z<)HE!hvaY5weJ6u(b>t=^2q3X>T}V` zeeRW&e=PT-lckMqDKx63D?o);u29{Xf`(e^uLjAXo>8Cq?379GtKV~+&#dRrzPb|B zdxoI3GkwQH=FLMl53{tjo>xX%y2|IGmR|U>dhV6JrEf9?jcVy?Q0~fn?#YTngu1~L zG-@7x4k|nkh3e4GI)p~$S_3LP4~06&6g0-a`F&~aZJZ#ucOHJ>JyT1w7e2I2;`Ct( z8q7oYl!kg$&%?EdFGN$Vj zpdNY2QtKns22l5Z3elLU4Uw7frEeGY4?Tt0;Ag^Yrl3)y^A#vJ6X+>~P}iA)M$Lq; zL4{|6P}N_y?Se+-`UX^ZCI~g1DQMJFh>e~?*W(}8^Ea6yjo!7s1?6@vdI}-A%5}63 zp~2a~T_aJ?>)EmiaolX7rw|fn9LL!dnJt?^-TxZt0#lnKBlw-qMI%VpNSpl#KGDf~ zhDP=3_nxAzp*tX3(0_!W+`CE|Ij&rY7{4rq(_ z{B~#S85-qz8z`CyROn7qsN%0!3L1s6B5-oLvT>SSNC24?XQU#BsJqJpZ6P z(_h%!?mds}VzWb|JnsPI&fWAWCZTF|wG=e!$;nQYYemcE+k{H}s->V&xpsk~>s6ZR zX-W+4Ak-$Npi!&xM^LmXX)LD37yePG{@rXYXjHD z0`t-I;AgB#I#bj9p@+8|C-kgxFXD7G$LXEPJ{7M_lQ`*mSwGNNKju?aRBRl)VvWs3 zH6wf5XFF0;wNEUFH%FxAuBjnUwkG_vXCM63GRG+Q)(3yyDQj?jU+ZUIWIpc)MSB$1 zpt(=k=jZcB{VWBI8jAy<+!~}OfkJ)U-%`-1`Fv32qHkmfwe&ShL8EdV0_E1uk9}4z z6>8S&mV!pj=fj|AKGQ0o>t3NI4X_k6D%TO;E>h5SuTY~0S_&FP9R=mi7bk8En=RCc zL6(9>?MO6UdS)I&9CxSr`j}#=B+h`rHqJ53%<#A$2SwjPB1OxQoodRs_Z?!X_a{c1lMR94|g_=Cv=7L61XF<7fFSvc@a-nLxX(?#bxYKy) zaX*JRZrp!pS9pNL`IFq3XZh7prMxf&xVmhea`(AajLQBJFO>%z9-X@p2Pk!~D zzhVj+<@vIwOgdcK2$gn}^$ZO>yL)_cs6Agn9NKfKpY^*!9XQUFi07+5ySpB{;ytfn z3L544H%~dwLZx}jdWMEP`|B}ss6GGg;}E0oB0F=O->v7+UF0=T^!8ygL%sP!KJ%Ne zsLfQqX6jm`rPqBfYAIb2UGpuy%M>)KrGJ2OtGjN=$;pLkG}^Wl8nu($P`Og?8~T$_ zOPGR2<+=%q)+x1S?~)ytg}TNRG-@aL6BO+v)UL_vpZHFwvSX}6XjHDhK)EZTVZ&bd zQ>bA~L8GW!ilV>bA=Fl;pi$J{%HhG&yWSQm!&vJO8k#M|=$HG@*wQHL{pU8~ylq;U z#QaRH{?i_b)851>WNL4lakroArj@eA{BWGm712M4)6pEGE26sncMgy^pRgZjtRH@U zY2z3m_>(m@7u8gI+g=e#&AX;1-W-vdQ>JF9uL++S|Aim7uj(haMc=Xg^KWE6-vQ-z z8~S}0|N8m-DpSy?vA7E=yh94Lk|}7Y?e3%B0Xftw_dmp;aUg&C@2vgJasIQOLo1gC zE-p6A5H!P&Pk!*6tlWy@Y)gYA@#bjw8?rG_uBFvROq>-Yq0CgKGX;%mDg7B|{jFZ1 z?l1)nwbcJUVREQjN?#z3i_vT`O%7IOrq2es-KNcW>p3psnTEn$8A zxDV)hRjB1mL8Ed#;M+xU>AFRzobTFP(5PGwddfh-Z~0bzCq4fmQ>4*PMN)urS39Ym z+@D`^{lpYBSlx8Kq(Y;tcbkV0r+_&|{?4o@v{m9fJ;{20$c(#wmYWh(S3}TjX?*sb z@5J-hOr?y>mQq*c5 z!xU-sY{>x1&6eCfdt8%TMc=ayp;5DiMp@66M-a!&mQw}FeJgS1bDT#avn3;_I>s;U zC^x?BYkvE;+gq}|Z?k8N%$7``+-#Y9p!nd7ezqiQN($HJ&&2Wv$A+TGTml>G~zjn@|^0obDJOao>R}T6g0|n)`(}JYB2?k z@=Ol3=WK|x!=#~4&#oN&ta-}e`gtVB$rkbanDV@%+2FC+yyu)BSkKTX&)Grc;{N$& z!^EyaZD9%;HGAVhxs~#4hRS7x>hht@1&zv;15~`pmDv2yU#J%<-AqeCV~z&FH(V10 z@!a~ozQ*;(IbTDX@OxzcL#`So4t*n|?K`)+ORl?2L4%c2oNrX9=k-d-i8vKZ4Dx(# ze^xZ! zDz8uVj!@q*MVdrGuiib|_3Hkr>1itQ6eo1m{W#*3HAm>KZP0_GKNHW#I1V(JKlJTR zDl~$6{uD%5%~ewqZ%A7co-KtCxtr+{8vA#C zEZ10CI(w0gTqrVI3WIX9rQ*CsGYk3IQu$*`L8E%32q-sOvUc1yLa6ghL8Hc^sG@3o zkhGsr;}_dp(5PI+K)G`_ea}Uxa!V`)jcK*{dv0749l_#0yLl1RsP@Ve66X)5prH}; z-$$cf)gxE}ap-=BW?z;xE8dbgA1<|iO8611^NAfnTN56yl89p-BO=b!H_n*J<>vE0 zhN4n3GG3)Xx$*k`&`+gH`tfSH%u>*(J}m7iiaPYMBv*yn$`mv>6S*5Fa;VQlWt8V5 z*GFX#&n1@I>}4XJ%lhmz=gD&!@A*BZpi!R7dCGYfD$%Dl7c|NsPZeUXK0jXa;QB&i8$t;fEay$x{%{MX+4MT zPb-4D|9cblKeO2@Mp{}4l$%j>CtlIFbka&oL8Dq)8B}s=rYUrr@yuoG^(XFLAi0KXVgLs`^Hkxpr!6zdvd5}crCHQR;CT_O5piy)6IZ)xbDpZy4ECr3qRnNDJ6f{?b`hzKG6jdKoc&-Yy z2HoV^y6N9o28&pEo}^n#)8U+Tb3pf>iO-Kf`(e^PI>`3)N{27;#4<)Io$;_D%SYa zx~Hgvez0+xL_9yQJU_YR!7WX^=MR~JMtN=uD&9nsgOp!)YtrYd& zn_b%r^&eBDF;wWjpf#wy$p#+1AhbHB3RH`mjAH>OU%UP7x~gk2V)H)Q83S*2-k} zeQ3d;1LBx}?sL`Dk>hl*ok8a>}+;DEF;?q4(YQlzCXgK{k$)vs6EmwZc~ z-EBQXqgvV#lxr!SiG;ew6g28g)Jf&~X#b!4g_^p@=7L7$>I{nZd0H_)Za%m`sK4w6jZ8tKa&=L;PL!(nqEO9#wz;5Dxw?XKy)pk(Yu}}_gyG)j&PiAX58(H z>%Y&gCR-C;DcupL4#&|?K{M>Pe!55IPY+OT{?JpxDS?e+s(nkd4zT;<>l-Oiw|3dC%9Ff<}4n6Y(rm`NK9BG|DqM z)Smky&RNsX^aQ5%>UVm}Y#GUM`bIqW1LgXe)@fhwc|TLoD9`;txqhZ~DpZ9d)-yC} zoxY}WC3(E)4?@jj3L2H`bx>}d&Wk(KM5xx(>J+_81C#QBWl4DstU?Qy$KrKY>7sccAF6JEJP5xJac0JW`e z#utsuwd+SiQ5hPUQNuvF8Fl)pn-zxo8P)WJrJzwg{{|@c)F|)r;T?p!z!Ws9=ZAxG zqg-=L-Fia3cGBj8M&)`Fl)J*G-$W+4jtw3mchz!WrCr^R`5 zp+3~(H4RoFL z;!HM2sW%oaDUet^r#olkjEQ(2t30Pzw|&VN?|B1L&?wJudy34^=gfuba^B{GhCG*W zXGU_UJ->rEpO_eQEtBw zHb1RUFJ82{pfN{H`PJ40K|HV2w5lfjmj3nih;%Yu z882IkG`gkKF5S{8h~rxNTKBQ$CeQ7MMLEutNK2=J3b%BMZ|P2^piwP-4^+6NLiM;} zJwu~f`aUSv(qxCz_7{hbT(uNwbW5pSx~0<)=l(4%!f~cWS~?w6xTVv4OLs5@jcVx( zP~nye)%`c?85-5n4?ww=X8e1r`QVNliwwV8iZr^V)Gpo94-qG3PuT`j&2I3L4eYS)kk#q2`GTq!Fs?HR~A~)zaCZ+)mr^lWFD? zm(F3@>y{#ozFVK8sJ^{AKQB~%rbwfyxr$m=q(ly(sxUS$VXK2)2$#RwJ!lq`!gvxr$QqZVepMs)ZrL|Zwyg#*2vzdZM<=Ozs&D9sO z?R{LRy#Lu;(5SikC8+RR6>2$C(5PHr`F2rUnyW&U!%PeUXcYA|sPJ4BY8z9~sJTkx zrRVB5h~wsJ%guT6NSuark~ig>$XwkB>i+Mwon~rdWZb_6<>o5AFTBx@d#*T}3mVnZ zO`yW#F4VxpmV!o&`(~Ak-fI(TUlL0}qjG%*%JnL}*Cy0s$t(qp8u#x(xpAlWg@x*v z+)~h}Tw8p*+_($1>H$kZqo}Q*XlBwbLGKF-l{AH=pi$>j8ZSNW+YrZHS<(B#5~smK zHqN%lxNiql#bhSW`n|S!DJ``Uwh@w`iUrn$P)dv2E2QqU;RKY|L+RiQFJ zY$<5eT-~j5UHSII{6ZaO3L2Gb4=6WR=`##MjZJ5BL8IpCPoTncRj4P^TM8PL>u29C zH&=za#uPM)+6&6f)#T&n{vy@kbNkS)8p2KY2TbIQM_@_OYR;9E*(3 zaZqk_=*inLKRVO1SPB}|_7kAos-!1xLcN>SQqW*0DT>^b-M5`6@D;z2~BjSqd8E`EN_X~}En==ST zXSc7;L_Gfz@qEU6ek9&f&?wJmBc6p?%oH@_**_m6huZTw#943r(sSc?gAZDX=Sn$j z_Hz->=auJc+dmk4&U-HKKTAQQJYN9i&N6j>S#n6ItT`T2aOF^SNUj^mXAl+#S^?H6wL8H!$zo}ewW)$kD0+xbC z<@z0z+ac-9DAc0`Ed`C*jjw@ndpKRi3DvHUrJzx{uKRYmGow(;3R?;qMg0LPd}b8t zzao}`hDNZ2dn!WX#Usdfnl}(9d}fq5wTjs|H_Qm?JI$M*;?1~|LhobKi(BeuWZeG* z<@R3M$8P#@A6>#y(5ROF1Wt;GYcv_H)2VRX_SLZ zB_fULjW|%@xgk`O@-`PVDp%qJa_wUZ8kH+a0=XJiu(_a7xss|}t=lXvCJujM3L2Fw z87MaoGxyu_lTcNjw7H;B^DsFmHxH+GXf|7@6-+^+aywvJ~&9^)3C8DQHwn(}7BF@=&3_<{;G2>NXcNILo-JWpb!n znjUf5n;6v6zY>q{A)bprZR4bmc+Q|ak7_Y0mfm}w^^B#UQJx?1o=GwM-7kL-DrZeg zL8Df8MwP3|vN?@}T2#wY(5PIQK+(=mikA+3__0t~>sSgJwc;{^qSZ}%^2&KNlM6NR zSxZ5qay{zXMSVzru}G-o&sho@MP*SG{U!~e2Gz3^G>Xa!igpqz^i3|IZq>IGG+5o{ zZNPxWmPT2x?rexdi=UX2ORr6mIDHx>!nb6znQ_)z9l-WD7siop0vo{AQx8i7T ziTAU2e=|!#qk8^-pxoXvae3#NLKSLmDQKwe)bS|fP_MY0h(q@%G+T1+eQ%U_9`T}$ zlQZHum-3vsMWLNJz2|i;ECr47oLhMw-Y(S!q5f=XDQL*E8?JyHYR`EPr=KzWpz-`y zje|ABbBWeAPM(P8yvp@$ggreIq7sD zRF}4vf=1;k04mK!ZvjiL&J3hxp^#a^-$G&Jt?3kU-mTN-7(OB6wzoZLU%Iy{$N z;(Tr5q%=p0m~q#;L{U&~m#F;yqy<9td)a1(2HD;9v(0V-21Pnr4Mz^`62%aCp3%_$ zJa})lWHJx0FjXuv4~v6x>%H5_Z*vv%^YDXCHWxIi4@-b@>z%G8glf>)QqWK_N8PD#X>WsW5_KYi|Gdqq4y@QRI7GUB_1C-&o`NZMtLsnDe^*}UK8p< z7n=(j^6Y=NGda|r%OFk*)4TND+Ut+z-fd?sMLpWp#wio=T-Il&(HZnwxpQT_=Q^)i z3L53P94Ob%bnhwDPfS6h*83AG*R+FgrVy$beSzB)XjHE9plD{2;{7jw*dWwyrl3*l zy@I0Nek|oIp=xxuxu8+Go&?p=G5^>g!+~#XjHC>ps4?-q&Spfpv;!4J!~%0 z=+DVi0%ebyzn_xp%_%~)Vv01Hs;qL|E^*i_EEl6cQ>4-N7ga!&HTy+gMcKcW2r0!{bR5f$V_Qg0;L;IQ3r0iwyj-}>p zQ&UfAQuIy~v{p4^Oig!H^FW_O!BAE6mZ_PbYLfL$6wFpNBTdbxswQc_M8P+zW~8av zt!k3?PZXT=HQ~FYr_dX{(gne0b9{e;sb-g;^8}TVhNALRWW`kj<#sk&aZmXb_a{@( zsF_(ERCvV+HSjf?3mUcJo>sZy(_HK=RNU*9f=1yZRW)q~+xaZiDO1y3 zX<84l^I0?}Ow9zPX*tx+XVDxtHJ@tDFgu^ECOlW`prtL%1ftJF9NRwaJ(;V=4Mn9+ zWUfB@f9-tBH{=#;y50}5nM*bnd8A_aGk>(b!Komqt0b#*E^9GQC`uy3){;{Ftd`if<7}VaSSM%DdzWEe<;{sECv-BF? z8>??V1>ZbGF|XydSHr+Jj|P~#ce-8pgMBVB4P{N>-|_rSOe}pb{|zxCf$MD^9(X&IuJ3kxHP@ZKe|ERgs`SKTuiLxT@ZD*5PA7Sd zR<|2rdYb}NZ|>Hc_1>*y#LEure$U&iY$ijx^}S}LQE%=g!|Gjcr*+t@`L%d4@Z7&y zsrC||*8S?~)AuGnZua~=zmxdD+L>$~9{8Pl)oaubu-91- zV-TxVq9;lOp{$_CF``J{WJDTt^X|7%EQ(MC53GV7+J%)04FgKkSUx=D~(Hyvfx zO-CAZTei_ng3P+ds-BxXMlOVHhI?Ak@jx^|Y&PF#0 zGV7+J%)04FgKld!x=D~(HyvfxO-CAZ^JE^3qg;S8Ye!&a^$66YpUj6@KZ#1wPlu)G zr$dwa{S8sD=2Uf*IngjOm|aB1*CZrNGt5|RN@9;plbU27eT?OpI7vFnY@aYP**;0g z)bx$^AyPGDn$#rwY+2PG9c8vp7@2IJBxGDp2v*B=wEiR^)1+RnG!A_b2XjV$uTyDw z)mF3HtFWp0WU1`Bz0Q>0hnn%FKHzI%@oV5Ydgm+6YoLx-?$mqx2YwIc1hBHfS0c0` zGvMUh0ec1mOn3AQFx}@ez;yS=0Mk7Y159@c3^09sHo)XClVT9P*EL8ZqlXD+DNpZC z4dV3nZ-D8|pxSCQDm|>+-g>Lb);e^PHa4^Cnw@hb^mnt=_)D5?yU|cU)jDj_vNZZm=S-gSK1HAz6xTw`{W2@ONzlcItck zHaP4rJFqTop<~UjTA*66Je_WvegCEfs#~qY;%a@jZj-)-_u!%a$#8uhpvU)MLvEnoAEm9Nv!n)~*$9 zw^DCd0e32P341G*P7S5T8I|f-Z^mJ^+I|yOmt;m-hq1X0p+rv`?lQutcH1JwUgxkG zTXjRyyvqoy(v2Xl>F@YdvW=>;QQBV^^T|s)x%CY$Zy70 zYbwcGT-@*$E`YR}|1$8~E<2M@(ZNT87g4|tnY(Za`u_b&NBT@+1OOO}Dy=GPt#)8- zb=u{g6!|)vs6gg4^D;teE|8RjQkpmCl%Q^VOhx|feT(I?yS+HK;65-h$!>H^I%d#e z^G3Z{OF=n~cP5n5J#+2^i1u$*{dTY3YHI117w7KdDgf{NY%I|`UvkQqLyz3EAksU7 z{)Goype@(ssd(pSLP!QYKOOt+RM~aF0beY;DUUiiD%L%s3>MsP*aRB z$C+`jmakxLS!So3%&{fB}7zP2ki=M&c-&t3*{Becgb5rXv1&r_4bpHm;$T# zAhL}PXiS5?fVwR3pScAt6}H;32T4HB0UD7|sj*Qx2d(Rgx<+MJy0}x5ES>A(tufJN z@Rc%XF16^jJgzTy#bb3x@CvF7VBFahZhI_tMGE#`mWuT@Q7|hz7^;) zmP8aV<(UCqxz=jK=6WIu>h;_uO;Mo-3=EjtWxofj0LgsTh-2v~#?o`btu^T__%L?0 zZpke_-sV_6a!TL^;7rQ%I~^Ffl$AsS2^xGVFlh5>NbI*`QkDJptl=5!EDuh*fv#w&Qe7ptBXfv9G~09T@3bJ5j;!&0ik@*dimi+Sd)X@)Z(q$^+t(4LAiE>zP>#a7yx88Mk!DH@4a)hlnDD8BlR6bp(108}P zT^O1!PfgE|%4SUnw6JA>+vo4qyU-aM%;0!SXd)AIo;easaqM87si;x0)$;MdI}?2x z^gqduu=|NVmAy~&iRgTi9;m)20kItYKHT%9AxcreDw;vGmQth{!GL|aG=+ndtb2|T zBn#Y#f+i42NUPlmPYt43lY=pIuhH7!(=O->^d#odd%MiKtAjSq5qTqpb+>ewGo?$C zK0{!R_@{xgv5(n+A1w-)`=GNfDivtSibbY`{jW7grr!?cX|LxMWR{8!jngC#XJGUHt3vUmbZSbHtlZD4&H9G|)-d|r)n72GWe zXKQor{j>EJy2e#^hV+Sp(q-lbXw1X)3?@v{7E3E+p&JOpONjUQ%DuZAmz z6cso#Y_bURCHgq%5#zr`H-$cty&?Tp^o4O>s-7_R=^3$V7TVF^0x|i}1DSs4YoS2w zw@QP!$IDc$a7S!~skb|_&fbfeOQeag-% z?sVZ$@4C|6z*({h7t{e85Eh9EC(Fl#5rvfwQ6-m(T{a z#?==wXl(QVkA0;U^rn3z#5t|t_x>s*oiPv$81#Q_3S=x4o<}2CjB9t@|kwoECN<* zFEEL`P4<;7IS2)=Ummgo4>1Q}atwy0cbq}!?W`E*6qL8%l%2@}t67HWGwG-Lvfq?k zO!bz->xMC2Vs*j^*lN7MI?QMIifGj=1ERNas|||>GF50^ec2{hiUCWo zBMJG)qYfY(Z$qs-I5+JYj={(V4HGbWRwq!B4?l@d)zY|A^ZBYXJNhbqW#@hZS$M2L zoEq>h)@$sPtM22<#TVJVm_f2~7*Wn{ot$o0-#D~9O$qEg#8Dy?USEKS$%U<(`g^>bZ@aE zjJED&&^DQG;O|tbcnzX2_A1-3;a%BYsAEiVZdvL&zYQtl`JjOnXlGQw&zgfSY{2!O z0T`07Z!Ga+L0L25EjR1^*8=Rvf+1`n3&>%fLn7xuoO3<~S2V)x-~;*POa zQTlSo#PKt6*sfD)?iD`6*jr@CFRRxMtSNYx*+hxCi37`Hy*R1%*+d10x)Z$9jM9T4 zkGZyD(YC1P+SPo~KWIZltKy!(XPUAdPGVBy ztt`n#o~KCJE_0OWcvs+xo!8p+xXZ)L&CbE|s~V0s?|P-VRd;@Adws6Fwc^&Bu$)w{ zIj8xOmvb7fz}E5hk~0Yf4>u+1YVMZ00>YQ5l@}vgSYoFv%6!@H@v}Fy;QM#Taj|KI z9XYO6+LbDXi!890tNZ}(3hY`JSygn%$vN$@QCKyyF)=YTVSa=`Kf)Gm!VB&eG~l_d z#Wj~t&I+!*n4y92861tkG}RX}1VzwT*&gW%TAD;H$W@sV|o$4eG>&RTsqBPMfz@ zl839s5>!TsY>|kI6eCh5f$@V}9wKEy%aJ|@nXpUBoVl`lZfSFMYrTw7a&Ut%IsnKs z=0U0{6D8KhR>ie+B8ZkE6cE`>q|+_TH*B# zH}-M7fvG++aJ^*D;am+28!T83tU2qXhhtKHPzbI^@@pn> zY8&km;)B!0qW}cCAB#mZm~~*iDqt@pcDK^Zno>q2fALtJ5ER>X>jp-_a5r5DUb4A~ zYb>4zXHOgM%G!NEj@RIAi#c(nzBeN0Zy58nG|6G)5+Gq@mBZ|-tnIj_uPH2LzX0gE^T6F-=q zqPr}YGofVDka8GFhk6%Rr(s_u6pIH6QU$!hYBPWH=EeO^>&BvtlLTK~EXOh7dl+Kl z!y>_^K`0@%vly&NOwXcNNe@KkTA22h*xYpq|di zm^j}L!CWlB;-hM*{VTE{uAAzWB%^XH@2uJmEC}8zgB4yhi?}*JuxPDha@8@ewG~at zyz70IB{QuYM%hAGH_FnEO*O7Lf8KRQ0qi0%15u*NFO0GOnPPj@$5h1B@8HoSFX_IaJ+@B+o2y61hHaXylmzpNJ*C7 z@RNet%%TtCxg6<;SzY`H&qBBlmqrau0wPKC^;i4F2U3CMglI5#GNhWEf$4_Hq+J$4 ziMkCw-yxR6$}UU4-%N%kPR>~f|H6b{g`+-PuyTwS+!Fkc%uN9j5b$^QH$!;ay$;4N z$$DcAuPX?RFiPGgoHv47{}7lLj>QM(j=WxF4^+!C5(Zfd6we}!X^a9w>R&MFo+Ux0 z{v|jmU+=-eEC_j;MPghQKwcJ+tb|YijGmgF(!93Ro}V<7qY!3 zS|N*6W)HDqt9;(?Vh+H4 zc@q9ISnCW{7DP;lKs$Rz&=FcwU@r&m;uD3m8~3r_^WZh)kqS>kz77J=#C)rVn2A1y ztMKH@4SwY|c(H})vAo$y1jut&(x_&Tw4)IPrn{`af}+;)daXw51_Yyys5e*U0Z`2t z*sEj%7XBA%u++6blGME~mc!78_`a|dfQM{W1;ci-yxGNS~}gm%b9i4mzq_&_^df!frbHRQA-- zC!(`XdZ7C21jKUmdp%4EmIv7lDfhF=LsPR267vf^!OZ9EMo%Q6KArN)kxFS%P=D_a|LTT4N8b7q_w z{whMaF6j5oD}du3&9V*`S6zNcc~ zbQ5$3sj$E=v%<;>VgpVdhp-b0zgQ#9D%yH$(ukwPI>{9nT7%e0m34+s%OWl{3+|tQ zk!Ik#m+>H|r52roHVDMmFufGVFh4k`id0 zNf`$NI1aY|8chFTb`MJjSQBMb=S%{%={R2B*F)>EE`i)gO9CkCBp{f79O!9tI|!>T zj$A<<2kizEper|!1YC~UIPAgejDtepW2y>%4XcbcnF{=pKJy}Zdazu}B&8?QXNtjk zMPC-w_qLlE!|`EkfL(m;{fgFm@@qd`2>H@?b-_W2#hpAHxXNpzN;V;KWXUAO zxruflVPtHE609xWxuCwvVKN_KGGn<&gA77ssDU#GZvxh%VC5rBWiSWTpxg1UwRQ*U zcVMC#v=6uue~$OZ9xT>wEiLgDGvl3`!>-N0hRvwYo&c)}O#{P>v91Bv8-t!2u08c1 z4hM&)L?11iL|H)jDG9zo5Na8Ei!2z)+eoHm)-lbQNME0{4E|d)%6>o@aV7I83L7 zHxT3J4U~W8>M)tHUfbX@xf>VhPX`uAJ3rCE%F!~WR2YFpIpfOPEDg$Suq+D(V_$mKnH* zStKR7hbi~eQAWN0}_+k6?iM^GKn7Y5M2{InB%QYX$LiiAXyqAf6-30bi2p-X_~7mZr#CtTaN-a^c_s>>*#Ue-mA(aqt80 zqPbwL(p!$02Jv?m5$o6!WWKE#;yj70-*Dg~sWjz`BRG2HbaDG;@I4Y{%i_PTg%lzD zk)h_xI6*Lt5D^9o9te-0B#2ShFf)}0GaSDYdiB{Lg9s0%2b-VJe`;OlP-M%-GYsLZ z=Lo8f%^n(Vlal=l=z0bdAoGO{ZZHYj40~W1k;(L+lE9SVlLpLA+6-o3(fVX%Kp}iy zBBOr<_8!P5V_W6ihr;FTV6__V^zMYyacLs4Ciqg>cGuW9e3Sccmka7_q?=)!8t z-V?XRPus-ZmIQ{Pu0G{S-OpE3kEEI-LagBO3S<@j&o9~-J!?dT>x`hK z*)oCWI1h}=;uZRx!CM?+tr`tE6RikQjI52qLl}Z&W7$L%>O<++;xoF^p|@GEMcaij zdiN{agVJpV(*PgV6GiM9SmcR+*-MI1Sa9{ZWVw^hy_T^wS==f4zH(8SS{?c70u@+^ zPos1I3q-_%Pe3MkpuRf1&h!z#7KDGy+$r*|25+B`sZnOR!JDOWjdnMjsFK>s+lis^ zD$=mRccP(X-*;l^AzK9Mx?}NR;HIu_Sq_B`sHYSXB4Pc^-Qg{&xJ2PVZ-#KL0l&SF6m6E@FD_{3UF0D35- zJSsN&;aQ{e@k^8mN@@fnDMAR)-=SPgOAa z_`X*>MbFRV1n-nc+SHRZD_9r7T|ox|dt{YSgF1Ww(d64LeAOf~X8W*-(V=CMaPJxu z>+QD=yRd=M^}0R=UjVDe1LfhzFaTB(SWFOE;Zkw3@}vRLC)i6aW93*4Ulv(JX3PbWG2p@~Bl%KW0fB}P@ zdgN<0a49ECT_KSz^N7PvUy6t1{QLJYgy14$Aq zyYe8Etr}|aqJO5ggWIRd6O+LvZQsn$R%ze-$ZlxA64btApUlY;-u*#;qBOs`y*XE2 znTM_rrU_(6vQMEfz06t*)oOxQ^LM@7AU1rqIcE?U9=aj@r9xR}p#05qb1=ceRlV>M zGbWa8zY>;h`hEk&iQQaSD@wIn&~3}*tCI=`enqsu;xOvU*|NRV>_pta7~<#Z}NTNaZF?X4Th$;9< z7KY`=>@>gYn`~kYJJSbt)(#8tFr#G)^QNF4B|Q)7P!d3^KS_{C-AMqddV}Uo ztT$NwwQCJY!t~;d$7m)OMVX2d#h8i{MVN{c#b?6dDiC;J;K-48f?Qx1Nnr*y2LaKm ze$VBN0=AIxt6381H;V{a0kX(YbtH?Fa5c&zOVytYQuJH=gNxy{(D7i!g&)Sw61@O7 z1u%SR(5`b9D{DjE>Z%%&x8!iG$y>gvNjXc_YgfLaMUB(1at(G1k+1p&@n2x!X>d6~ zjm=41P*d}fm)qrkT<&2vH*qU4ugm%3_@Y>%$yutjWWHi^j3OX?RFVDs?)Xc=(gL|l zh7fQ))Dcn%k)rh46?XFf!?wVcd+mqdEu;V z5_zf33XEHVH?sbNpfjuLp(98PkbxS35-F={o-(yTIW%d@lKIGpoTF@QR-B(y(j(?3 zHhwldpkZ-#Cu=;fo=Hb$qF&<^3-TW{%X~7JgF-pi=o~c4y*=ch(~w$I4w~iO7PIR# zgqECHDc%pXTW#2sWAA;kxSq-vTVVv{uR+#_CHrRKXUvhce%1D=PlUrwhzVe zJP!_nxp+0C@8ev2s}0JLzy72jK3v3u)B3nvLqY@=Osl~9g))}ootGyjkFe}Q1y>-I zf>JAvP7XUIj=SFpCtcYqGzRO9ru8+ep{FB_JM4rUJQzO$gAF?wX|Ext!zNkrSHK5$ zZ`m+Myxwf0g3Hou?uElYf5)&vcY0%yT(k=dskGaE_Gr&qpiceN&Txdwx-k^#Y=p-H z-f-^s2#1N-A-+gz$wENaqdJ0*|RY2|Z!YrP8dPf&T0L<2> z4y}8(4mc8IB(1MDOJt=5D|tiqkA|I$tbjvK2TuPUc72bZBZE3X4w~_4*;R;GiA!7Z z5uS^myDZL}g)Z^uAWLRE7sa&YqCD~$S?S3^s5k@*r&}Q=UAM<=j#tI$H_S^BrxL_X zkF$&0=hjzN&n@$#vB(w|KOi}gZ)|EVsOP@}_*P!%y+zzEr+_UjH4V=2^Sv(6I%SDU5kv`v4B}wv}3)0vi*#) zGNKO+d5wa(eOV5o4+FjCTg`5?Tt)lBE4b=vOW3>^payKiL3pRxP)mdqgqw;>h-5G> zkp|ju5&e3uvPBeel4`f%F4gfWnkhMp)Pr90+fm8OG!*`nVQ_wa}lq&nC@HTVj@O}mlU zcOQ^{^8K}k+|zeDe%J3Xr++ZNkrgpcLwMW=d0HWFvC>RA%ViOH_+_dbmcRzPf;Fmy zr3ux|q*0};=G&uBJ3Kiby$0&I#mLjv=cc1hTpgo=YDS`*1Y0Y?71SvR6if~}h>&>J zG+DR%<*Az4FEd=P`sBmv1rK3IvZ$Rl4;xKB3WCcKqB;p4<^|`v;~(g!v||xGf)`0F zHo96OLO%};N7%xN7%GEad;2pluY0u?1bZ-ti`sz0B`jPNVACQ-1y~U#Es|q>quhuI zYAc-L4%-8bt4{dFJq5>xAF6GO*SU*eWf6S>V31xK5^7~|#=hUvih&~#B&+L}(YXj@ zlC0z;6qYS7mKSeAe7r7($J?khD|>#&b>-@%^l8#yfo^7T*z{x5lTCcq_!K*USb*#U zVjqfb!0=4<1j(S~*hl&ya>(4G4Jf$WoaNdD_8keAn{yEx6sWp1or_#;)X7sR2g~RB2DCL^))8BRQ}50KwG}2wqOp>^#nQuL3u_wgA>+9gFWpl{Lwn;Wo^t81$ z0^`cZcql9z|JZ2k$k5`co&<{ltrbfDL}{G9nc*6nc5YMCGE@*YOsQu7R5)SQ^_$S) z1_P$G+sQU+!GF*O&3uFfxyeN}H7ez!U3ehKN2<1@kVmfd-aHQld8eN96^eNOGv6B~ zG!0p^hMAGPz4XZ4j+~umB|orEzSE2#0jJ)C6(771n{mln%wN2<5?QPoj&y02;VAET zTU~9oV%_=b3%#SH$OAeYRB%17sODrY zKaF;<3{fb?Mrk?Puuv4^qP2eIuE5jtJex0jC3vuo3@18@KiSVe`?9j)v6N$&e@7o# zQl{y#U3@$zp|6bxv-2hvot_|0g*&QymQyQvL1BsHk$w8K$ zwPKFY!NDVT12r1+A<#O_lsID+^qi;3!9-B@n?sW?OMX}h^)e6_`A z5%(I7?&-7Of%(#A0}D{|tARy?r!xZ!Qp;(BiqKck29&|4AECS2aF#J^pb&Y#18Ysz zpcU2^){C#VtiWSuaMf_ePW5nu9k&c5T=vhcvL}QH&~|Od&SLrtr07Ne+^i;}YGe}_ z>Dq>}iGfaywgWZHRNqg1(>2T-w{;$TgdO1=5x1e5J~@=-};PP{;b! zPZdX|Y)(w7jz6QIa5tP$obsNs3DSM2Op1f; zp#uh90uDtUg0-1~sV4ig0-6mEoW>rHPdGuEjtw$vA($;RWZWLrRsiHo8<#+Glp5qH zSFw=y&{-7g!<+If3OT}=mpGN%eAH9jeqI`e`~SS;s(~OUiTa3;k4Q1ehU0dr$HCa5 zW9XojJt?RK{Uqh&?67GIMMF3SqWiJ=p8+9$>`=tB&aZ;Mm_5@O8SkYj8bGaGK$eg z-fX#w47i!ZIfu<^<#2Dm=lM6QKD$gOrvct3)>UmB&X$nAc#}nv7ea6lKkZS`hdosCT0_+fj#p*bSlb27Z33GONo_jqLK$ubyO zf~uL1EXi<(Fsg(duUxC)-Y--b7-G6U?>H`$+4_Mvov*r&k*TG1G$Tq=bV(4oqtGYm z#6CTHn-4U6?;N1 z4PLQX?PYR7`EmeQI!gavk+_ zk5As!e#kKz)97OFaVc!>cfp>}eBiqTOK$zHoiWEnp1@*%T+Ox&%U9%KMNd0;MaJ8r zYi)29#zXaBh%dUj`p{f_UG*Wg_}WH?!s6?!4`GGZmJU5dS62)faLgAfM*l&p>8ZCY zLgdaDMs*xmm0T_qg!f=`I!vXX2+r%+7duXo+wrV$#&Z`OlyTmYo%}Y+wKHnYJ#xR& z`V^=*=(eKyIAj?ti$v;wF^$h%sM2K#@kEmm4*1iX*od~ zgc@sGyJQ`B&vp9{FI#4dFviAsd?7ZA?kij-xPj@ZV5^s4hk3u!@p_#~z1MXY_yrEQ zig|fvnjJU_?(I#x3v^ylWF4jP3vEa>ycSx`@Q7SwWj$~C!b+uCYxte{eZP9mTU?p& zyslq8?9_X=ylSg;t?rX=7)pGv-D59uCUpm(z@hE{lOBSYOdX)I!l7QK(=HilRK<~1?Obtow> z(3d(DT+Lt*DY%~62vTrOBg03r^*!(p4qDfJud8p66ufci^PXa>8XXS`T^oeDEpM;W zI&9aQdwk_d24Vb7BQ?m8FA9` zGZ|Am@o{3wjFwdM$de|Xt%**V>m*q}I_5nwBdX?d% z+sxE$@?`<&F!A+Fg{zW9_1v}H#1qr?*NoA0au$7JyS{DbsGu1+&SZmw;u$0Q;w?>_ zaH~^w+Qe%-G*6s2j+6Rgb~YX=tNvhI^i?yBanU&J&yS1V%4;4IjrIMj@lcs~fbi~6 zuTyF6`S=FW+!jjN@DliPp}Rk+wYW0+L$oksm^4j9u211lVEHUj6 zU78g%|JDrU-7JHPzy!vU)8PE#3Ppk<2wQsSj$!scSL2CPgaC@ZIM@tCsOf^q@kS`;)yl z(q~^qsE(ibO)LX7xuhj-m2%JE;{yp%Rz(y8e7x10Z@)!`-wA?O`pBOFfW-(bh zSb%d_@PC}zNJs0$YJFJE(XEA7%X!-}Tr%eiEux<5H{5fO6jy|UDW$owcxgS;z>(^R z=8=MhE16$15oa(D(W(Wiu`wUHaSmBNlB25@$}-$v4zsB-D-Oz+7Wb$gY|oIzL(ohp*~ByqHTwa zlghH&9V49`?_#}n3r5ibPTW}?TgA7HYxQAl^p%xiTof*9Sh92anX+O=C1Wbe@`hWF zxdk!EF}fS-7>=Jc(QU)@ySEGX#KorW^kR8yetoUH<~C|#gSMdgSu1|EU@8{8TA+@y z>|r;5{oJ`ZDEq@=m%TRzeFE39;HA%$l*PZYy0*Q&v9;!|7rg0{SS$tYp16)hFMhrC z&#$j6Z*Ffx@fW=Hlh+>?>^@LdU=+4TiTK#S^T zZWZ63U@8{8R-ukXEn)}>d8PQJEVV3nK?^md^DsA8UfEoqE905UrM5iVIq9s}1?_m^@r~&zSd;sC)7cU^+ z+~qM0$TuD~H4Hf?m35$ie4?_32F(*=W-+Ed?4MXNnfrgHwof@jB+e%-0{h>BNrFJ)w=Fid#z6P_;0z#17P>Rvjh&GhDhG( ztrW*8%d$ovqdXV(b!F`3C*)_Pea$-x2 zq-Y1<YJZGP3QH?LP3brFeBdoAN=DwlZi!pQ40ACpGjhp<<&9K-1syru0J%~`Cw!pE`828gJHS5iK&pT*c_aVSudEkRZ zY^4GPOikzdj(Ly<5@r0rEE-}UEl{uImhykse98W0^VLePx<6Us?^`~xe6!?lTIu=*ROCfb9beuAfyah3Sxe#mkN4=)6cmG;3(+Bj)Vm!if=^9iz+GftYbVbt-?7vFVZ(M^c! zGG?u=JSO~mcI|{8SRbthbgp#7Y6xSD)&gp}GU{~Igk#hxhaK1vr!QZ3y|S^s zw7tEx>^i66h1cig`>wrt*DFoUudmH-oLie`4`I&(c0AaF>9vLB#kr-q6_*UI$ljaWE(Y9HB)nU5Q-I_i|ep6aO6SK%~9oU$HQW3)-@-8<`Dk1ToKxgS~bN7lXYvgdx?k>#HI zbw`#w_v?-UYUJgwoU4&19rmt9u7Gl{MxC_oUyV3z&A~dlb{4a6H>$R#<)5tF9YOkJ z>Fx;9Cu?^{kUm+w8*Tda8Z6*94-eXh&1z4cLY=-`!Yh3Z9}b|FCmf0K+J^vvBdYjD zCBJg8bGYl(dwz%AbzQjROjh?R9gm*Le$g>+aUh!!I}mpQ)MIvr}hg zN@u3Ql$PtV?SFZ=qTJ8G}~_{5XH^CjEwIyEuz{4bhdpSx=vc<;+~ zpZ_&6@n-ntAD=D%692v9&WXEg{?6gv z?t%pl>&wLmE?Qp@cf}I-pe61hOI*zow{MASSmN52xSj>uupWG81Q%alzQ+QGc6n6<7jKtWTjE}0iF>Uj?t3k9ud~Fx-V*l)OWYeRac{E3 zz1b4?7E9b)EpS+`-WI{d*Q<9};ILl3JA#YWD@^wXBe?i<-(!h;uLTbE`>_ZvUcV1S zaPj*6q$TdBEpVvcM73mn?{V-Z|@K7QU3_lp)d)bEoKTr?l3-!DgS@%nw* z689SxIMnYyM{x1_{Z<4QuitN5;(pfxhx&akf{WMh4i6dnT)cjN z5y8dl_XSJb-&o*KzrTy%;`RIc2rgc~|7VGN%mRn{-Tt-kkM?ozjMwjR5nQ}}Pq4&& znFS8@yEB4|*Y7D2T)ciyv&22a0*Cs2O#~OO-*Y0kc>V6O#68ynhx$D~f{WMhn+o3X&5erF=Mc>T^saPj)R$P(vT;ub7%E0(x*OWd|4?xH2`iY4wrOWZ@2xSAzy z-xAlb#I-GPJxkn8OWb!@;vTicz0wl*T1(s;EOBqK#C@Ly4%_)VBe-ZgN8GzCa8Cf- zyCXO^vVMhr-H%3a@%_g8Epb0#iTf!_+|O9zK4yvgc}v_cTH-!wiTji#?$<4GpRvUK zS4-SyEpfkZiTguK+@D(F{)Z**FD!9iu*Ch1CGPJmasOa}!}j}65nO!x{gP7v);@9T z+1SqSIHiH$*CgDNEOB39iTf%`+%qk4&#}baWr=&PCGPo_xVtTJ)0VhIfZpRY0Yl(Z<64$iEbu4k$Epd-n;=aog_i{_z zt1WS_v&6m068E+^T+hGRn^2$I;n#PBaHsApJp@~zFIXzCuCFd_tX|kCUz}fg;a%Rw zg?aDt;`tX(-BT*v74v-c;^O)8#jW$+!s6VeWp91)^5Xi75xKCqRKB!+aeZ~}g?BaT zJJt3`f_W1VY9rkc;T*7I6V9{{Cp684km7U3jAkc{)G=-f=D~v2haO^ z^=73}dvL+;UhB2m4_@@Uy;BRF`gMFdJ#+fhdS&O-%qi{bgl})uo3+-B?t|K{@x%)! zUi6gPb|xl%YvN8wv~~Tq;J+L7YNyq0?eW=qm-Pli7N66Q?) zaog9zA5VmzFNL3pQ}84IFg$Sp_7(8+RQQ>2;pZ#i=V|csbofENFzrX-=eh9nipL&% z?7zX!Y4{!0V5JGk&q6M5|HsE3`^|qcKT}ym17VKj57uV z@N)`&@FOuZpZI0B3Ki_`daZT+gAM zE?9`6EbRG`SkDoaA2F1LU1SpLUco{PWnmAS#JVh4h@mX(ij!D31Pd{g^;HJeI|U0d zl=amH*1s1l#84Iv6iFI>POuO|S@wCs>G~tZy-} z9)~Uid=Nufcf&VHb^aR!3o(@S0>Yy0>mk8H3}vCGs4P!y_^4nZhO(weS|30AJ3oX7 z{`r7lA%?Q135#m@p9Bjrlr=+G_y54on^jtWBUp%`tXamAJplXxAF1K9(d~i{Vkirz z3d-{Dx&Im4inSc>7GfxCov>)WenYSjLs=V) zCG$ng>u&`MF_g7Q()zXKN1&cdYkbX@!bA8VhO)Nc8)c2xZ9U;T6{{>*h@mX#pf%QQ zuet4a6l+hg5JOq_F_z31`~e@S;add@F_d*4zEK)}+lQxrM6o_DScsvl3xq}U^#_85 z7|OaxSTtX^e;GW44`L|m5`3fjd0JlIB3Ou_tjmlg9Ki`%UY7(5F_d*bVbOfu5-h|} z7BpSWhBROA5iG<|)>X!eFRxz{EW}XO10*e4UVklEh@q^P5EjkX)4m)Y!Ur*w^&ots z>ITi%w+a?wDC=J`mdqC|FJG__Ls>5+Y5o15t$Y9x{PQNkLJVbjg!R<--1!fR^%22B z3}rn;Siky-Z~r63`hCGd3}saqOXdsyfREJhi=V{*Mhs=`z&FZ+Vug&4}J5!Q!(?9+RS^@w00hO&IZYJc~KzF)E4Cs>G~tX;yQeebUc z7Gfw16w<6gNAtfFEW}XOK4E?9$FBZwrQtK43=iRh7|N={H_GyV`d3$9rC9TVg&4|u zn6N(WoPSKQT7rcb%DP5auY3Cc{A~h2EW}V&m$0biKQCB_p{yQZQOiH^Dew?J zh@q@Q_(s`~TK)xsg&4}ZPFU3PR|N|(ly!r!sO4WFScsvln}kIz|6##G3}xLSENc1R z6D-6~)+3CS(2ITrJcJKoDC^tdnh@q@k5Ek|4zgw^nLs_phu--3Nh@mWK@LIm6|LPCVAcB8>Q?L+2 zS+6#*{*PcGhO%BmSaj5T)>Gjjd=NufuZ3@vD8NosfWqm(mJr4fG4=v>{2o_=}>mBfovOF#2 zul_2O1cztfhq8VEzELb%%4NYq3}wBOuxKeC2o_=}>s^FJOZlCGg&4|uH(}9I{*Qu% z7|H^tU&|Mr1$;rU5JOr2im<5P`?RlyhwwoRW&IF*qilHQ;ZMR~E9=IK1q(5h^}~eK z{OwoXu2}nmg&4|u4`ER+N>yIhHv@&wMoT#fnXtqvi=QWed3MpZY$OUf`u5$ zdLLmu`mED`qFApMEW}V2G+j-@saL-FhGKnKunVkqmw@Qtzt&DZk;3o(@S(}YFywJBJL zp{##PShN@I2^L}~>t_gyTI1bU;Fca$q%~WpC1vdk58Ne)?dM2&VHrq)%<3wbKrWLhX>wHrR$5RKljh>Hd>XQ zc1_%SMnG)Vd$*DiFFUOJJ#VwJnGEUH_uwoloB~aT)w|wK z>#$k#Yw=>>xqlPl79~Ed`_0sC-M0~t9ICEB|gR+7*y-F{i=AcZ@h?J zy?LwYcOjGhZmZ)bfI5|SLQ!l&f9zm4NxQ7Ron;z#H z0RGK(tLZnR1%l#Hf&?VVs5b*hycQZDK}M%igLl-#Wg%Rh>dl_sFj)1bRVo1iU#ohP zfYIwt0whvF;&57aLXXj=;daiO_Ta5O!cS=P$+%Fu1Uc0VY{F5SNk>DGXsL8PTBz{pR(2B&jDsX6(M^KPy6GshZaUJS+lq~D5@gm*N11igkp|sXZFG|$vu--d ztecKB=yuLVHwiN9rlZWd=}3caYc{$`kXbh!W!6nc8g%ny9?S!YM47b97?2bZAn)zaa|NoT`p8CmKe|2?!6ftNSKNNSJ0s#$tlirX=>rG^t7U z(Z^VhiIb$G%=QT*lkJm)OikZtA0kylrb$h*&z4pF(NSjmgptYiNkYcugkZH?N9#`# zGEFMJsKEzuFlY4lI+cc3Z8agVJ)4?OmddW%>rCl=s2N}C1HKj(zXm;*cfQiR2I_d_ zPQAB(;P+roAR~D!)}b4=+Pl?Ge0TuMQ@u*(RuUOP zuj81I^cXI#CyR!ayvm;6P2yG>jig6S&?@O!ud>tdVM6@~B6!|pOYpE|b+6UiH&~*p zt?rI1Eph*>w{+0kZB+KUF1!yAfQPVR3nAh$oit>-?RToUVw{fc?ze8RBCvzDThJj{ ziiHeQ)0ehy7&-)}<{{uKBEqNfd4wlJ#Qwvg59z-uimaNcIC3U9RFeSAvFfbID0Mx`3tTZPozf$%51^G}hw z + + + +CS 235 - Labs + + + + + + + + + + +
+
+ + + +

Lab 4

+
+ +
+ + +
+

Purpose

+

To become familiarized with the use of stacks as data structures.

+ +

Key Reading

+
    +
  • 5.1-5.4
  • +
+ +

Background

+

Develop an Expression Manager that performs several operations on infix and postfix expressions. Be able to convert from one form to the other, evaluate postfix expressions, and check for balanced parenthetical expressions.

+ + +

You may also refer to Edsger Dijkstra's "Shunting-yard algorithm" for additional help, which can be viewed here.

+

Requirements

+ +

You will need these files to complete the assignment. Details for method constraints are found in these documents and are still a part of the requirements. (If downloaded before 9/17, 2:00 pm re-download. There are errors that were fixed that will cause the driver to break on working code.)

+ + +

Extend the ExpressionManagerInterface.h.

+

+

Part 1 - Balanced Symbols Check (10 points)

+
    +
  • Determine and report whether an expression is balanced. { [ } ] is not balanced. [ ( ) ] is balanced and valid
  • +
+

Part 2 - Infix to Postfix Conversion (10 points)

+
    +
  • Alert the user if the given infix expression is not valid
  • +
  • Convert the infix expression into a postfix expression and display the postfix expression
  • +
+

Part 3 - Postfix to Infix Conversion (10 points)

+
    +
  • Alert the user if the given postfix expression is not valid
  • +
  • Convert the postfix expression into an infix expression and display the infix expression
  • +
+

Part 4 - Postfix Expression Evaluation (10 points)

+
    +
  • Alert the user if the given postfix expression is not valid
  • +
  • Evaluate the given postfix expression and display the result
  • +
  • Handle attempts to divide by 0
  • +
+ +

Requirement Notes

+ +

General

+
    +
  • Valid expressions consist of integers; brackets, braces, and parentheses; and +, -, *, /, and %. Reject any invalid expressions and inform the user.
  • +
  • Your calculations should perform integer divison and produce integer results
  • +
  • Valid expressions also need to satisfy standard infix or postfix requirements
  • +
  • {,},(,),[, and ] are the only symbols considered for the Balanced Symbols Check
  • +
  • Your program should allow the user to repeat the activities
  • +
  • You can assume there will be a space between every number or operator
  • +
  • You must put parenthesis '()' around every part of the expression during the postfix to infix conversion. i.e. "4 2 5 + *" = "( 4 *( 2 + 5 ) )"
  • +
  • You must use the stack class pre-defined in the C++ Standard Template Library (STL). i.e. #include <stack>
  • +
+ +

Test Cases

+
    +
  • The expressions in the test files will be written with one complete expression on each line. Available below are small test files you may use to test your program for pass off on each part. + This is not a comprehensive set of tests, but it should familiarize you with the format and give you ideas for additional test cases you can add. Your program must display the result of the selected + operation for each of the expressions in the file. + +
  • +
+
+
+ \ No newline at end of file diff --git a/cs235/lab04/lab04_files/labs.css b/cs235/lab04/lab04_files/labs.css new file mode 100644 index 0000000..bbbf697 --- /dev/null +++ b/cs235/lab04/lab04_files/labs.css @@ -0,0 +1,13 @@ +form { + position: absolute; + left: 1015px; + top: 85px; +} +pre { + border: 1px solid #666; + background-color: #ddd; + padding: 15px; +} +h3 { + text-decoration: underline; +} \ No newline at end of file diff --git a/cs235/lab04/lab04_files/main.css b/cs235/lab04/lab04_files/main.css new file mode 100644 index 0000000..03931e7 --- /dev/null +++ b/cs235/lab04/lab04_files/main.css @@ -0,0 +1,344 @@ +body { + background: #fff url(../imgs/background.jpg) repeat-y left top; + font-size: 14px; + /*text-align: justify;*/ + color: #000000; +} + +body, th, td, input, textarea, select, option { + font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;/*, "Times New Roman", Arial, Times, serif;*/ +} + +h1, h2, h3 { + text-transform: uppercase; + font-family: Arial, Helvetica, sans-serif; + font-weight: normal; + color: #1C1C1C; +} + +h1 { + letter-spacing: -2px; + font-size: 3em; +} + +h2 { + letter-spacing: -1px; + font-size: 2em; +} + +h3 { + font-size: 1.4em; + font-weight: bold; +} + +h4 { + font-size: 1.2em; +} + +p, ul, ol { + line-height: 150%; +} + +blockquote { + padding-left: 1em; +} + +blockquote p, blockquote ul, blockquote ol { + line-height: normal; + font-style: italic; +} + +a { + color: #030a36; + font-weight: bold; +} + +hr { + display: none; +} + +/* Header */ +#header { + width: 100%; + height: 75px; + margin: 0 left; + margin-bottom: 20px; + text-transform: uppercase; + font-family: Arial, Helvetica, sans-serif; + background-color: #999; + background-image: -webkit-gradient(linear, left top, left bottom, from(#ddd), to(#999)); + background-image: -moz-linear-gradient(-90deg, #ddd, #999); +} + +#header h1, #header p { + margin: 0; + padding: 0; +} + +#header h1 { + float: left; + padding: 5px 0 0 320px; + color: #F79F1A; + font-size: 36px; + text-align: center; +} + +#header p { + float: left; + padding: 17px 0 0 5px; + font-size: 12px; + font-weight: bold; + color: #EEEEEE; +} + +#header a { + text-decoration: none; + color: #F79F1A; +} + +/* Page */ +#page { + width: 1100px; + margin: 0 left; +} + +/* Content */ +#content { + float: right; + width: 800px; + margin: 0; +} + +#content img { + float: left; + margin-right: 15px; +} + +.post { + padding: 5px 0 0 0; +} + +.title { + padding: 0 20px 0 20px; + font-size: 24px; +} + +.title a { + text-decoration: none; +} + +.pagetitle { +} + +.byline { + margin: -30px 20px 0 20px; + color: #646464; +} + +.meta { + border-bottom: 10px solid #EEEEEE; + text-align: right; + color: #646464; + padding: 10px 20px 20px 20px; + text-transform: uppercase; + font-family: Arial, Helvetica, sans-serif; + font-size: 10px; +} + +.meta .more { + background: #EEEEEE; + padding: 5px 15px; +} + +.meta .comments { + background: #EEEEEE; + padding: 5px 15px; +} + +.meta a { +} + +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.posts { + margin: 0; + padding: 0; + list-style: none; + line-height: normal; +} + +.posts li { +} + +.posts h3 { + margin: 0; + font-weight: bold; +} + +.posts p { + margin: 0; + line-height: normal; +} + +.posts a { +} + +.entry { + margin: 0 20px 0 20px; +} + +.last { + border: none; +} + +/* Sidebar */ +#sidebar { + float: left; + width: 220px; + color: #EEEEEE; +} + +#menu { + border-bottom:thin dotted #FFFFFF; + margin: 0 20px 20px 10px; +} + +#sidebar ul { + margin: 0 0 0 45px; + padding: 0px 0 20px 0; + list-style: none; +} + +#sidebar li { +} + +#sidebar li ul { + padding: 0px 0px 16px 0px; +} + +#sidebar li li { + border-bottom: 1px dotted #1C1C1C; + padding: 0 0 10px 0px; +} + +#sidebar h2 { + margin: 0; + height: 30px; + padding: 0px 0px 0px 20px; + text-transform: uppercase; + font-family: Arial, Helvetica, sans-serif; + font-size: 18px; + color: #FFFFFF; +} + +#sidebar a { + color: #FFFFFF; +} + +#sidebar a:hover { + text-decoration: none; +} + +.infoBox { + position: relative; + border-top: 1px dotted #999; + padding: 15px 0; + overflow: auto; + margin: 0; +} + +/* Search */ +#search input { + display: none; +} + +#search input#s { + display: block; + width: 230px; + padding: 2px 5px; + border: 1px solid #3DD1FF; + background: #EEEEEE +} + +#search br { + display: none; +} + +/* Calendar */ +#calendar { +} + +#calendar h2 { + margin-bottom: 15px; +} + +#calendar table { + width: 80%; + margin: 0 auto; + text-align: center; +} + +#calendar caption { + width: 100%; + text-align: center; +} + +#next { + text-align: right; +} + +#prev { + text-align: left; +} + +/* Footer */ +#footer { + clear: both; + width: 900px; + height: 50px; + margin: 0 left; + text-align: right; + font-size: smaller; + font-family: Arial, Helvetica, sans-serif; +} + +#footer p { + padding: 50px 60px 20px 0; + text-transform: uppercase; +} + +#footer p a { +} + +table { + text-align: center; + margin: 15px auto 0 auto; + border-radius: 5px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} +th { + color: #fff; + background-color: #030a36; + padding: 3px 10px; +} +th:first-child { + -moz-border-radius: 7px 0 0 0; + -webkit-border-radius: 7px 0 0 0; + border-radius: 7px 0 0 0; +} +th:last-child { + -moz-border-radius: 0 7px 0 0; + -webkit-border-radius: 0 7px 0 0; + border-radius: 0 7px 0 0; +} +td { + background-color:#d6d6d6; + padding: 3px 10px; +} \ No newline at end of file diff --git a/cs235/lab04/lab04_files/title.png b/cs235/lab04/lab04_files/title.png new file mode 100644 index 0000000000000000000000000000000000000000..dad96b6bc7e6e28245b19b29199d187a77713882 GIT binary patch literal 62801 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⪻u zU-F)SXF69O?>RNSJ!JTUFe$o`&PKm!&Avkgf0t0rla)~W`bcDcaU|y_@8G)vmv(Wl!jJ>sUg>VpkvDW#)G9DoNJi zv-A0u(`dM2SgGFBf|lsQGL+*%eCtM%#Fpdo4Ergi2DmeD7Qo~B z^we=>3mrp}$$+YjTqVvfy%ZBgD|#!SX4CfZIHW&xbpy7w^N0oi3k~3h=FXLbbQ5Q9 zY2G6%Vr;&U40@h)RVDV>kKYO`iLQQoZ}L1Cm4)oV{|y%-SAAFmjeA0nlBNZq+K1cb z$g?|O<34xZ?%N1xoWwM)?&+y8dQ3ixec52!VBRA({{GV=gHXgDPHEf%LlgbqAy2X% z!mOeWD!yGyn4G``FRNeSb}(nHx)T!RM2|t&8cqc~GNwd0-mgih3ipJn+$0Zifq_s~ z$OkW47n|b_o-j05_WdUOF0T5wF>NN^q0>4;%`FUl*>)Im6a@4*+f>@;w z)h--Jrg0hTfXoH)%`ob+*wpJ8_cr&Yg%U#t#c01_nzd4#el&fn*%McN1j|_}Zy-;U zx_{h}tRzZ?tzew)GD#M(=fe)4rlwZf4nEI7cfmLanQKHwTOF3n>e>HIr|-)T?yK>H z4K0Q#-m}fME8v~RGy1WGy@?rS&8Nu_19N;n#+_0%=;3Eg=WF-)e~$L36@K?1C}78lsEP%b|XKdtF-#3vnI6YkzLOH>gp z!W%hA!`$Dx!ieNK+EgOzF1U4|h!L)Y8oo7Hi0Qk-@s}$<9$kZt zKDrEb)YDOtZoYaa42jCQ!*+0+NT}!TetlG>d(8+YM@c-u>Pup~d^7~@7{0T`WF=*h z0{E!a2~b8@z-I-E2Pc-=bqy^aGsK!$i_x+>`3$zb=_)k!eY_Rp7qoCaQ`w%E7OB?4 zBmiR$)t^y*!G4K+e?#3!urDnT5LZp5zZn``Fc;T4wwoRxQ^I`Q9990Z>6Gr0Nv7NR5ko zsk3q3G@dMQtq{v5uMwh~d+ysY^3vvPb6l`mFAVZxJ#(2)^X{u{eHT_v2F7qGLynTb zBfV;<47D=;s{Z6c1Qb%r^sTvN{e|^4|HWN`x z!kHx89uM&fiFUN4m-w51K)dFCZ5^A2m05w(yma-R z(GyGhzBStd6fC*=se8e0qd^s(^>=6`4vp0;Bhk?905ml`p3#T8o3C#$@}YoH*QN+U9qoab5y>LM;$NY^D%&vxd6`^ux()X2U>LNH4tvFI5&Oti!|NZ zG^N<|y(m%^ilLRkk8^8KkunP{12btSQ4mZW(wPEwZh)KVbeTX zZ>6lFVqQp4A1;NJD_tf-r?T4DZ3YJi+vIcKvUlmf^sunq-K{$3-m?^BaNvWrw>Ko~ z+4&_K?>0+F=LQ7(q}{^++mW4=TR3&MZ??N*MN3RM9M0HApf)Rf){Xu(r)@$*29kv$ z6cX0c!r>d-TuOj!@ycezn>Sr%EhIvoYq4Nn@LNf{JvzggMdeR@>^2iUH8Y9tLl2gn zTamEF3vCOtwEA`v_iK7L)l9wZF#EjJI1?>G&J(BQhZ3>*&V`6#$7Z4wLa;kLYJbsc z4Ykx#@c`4~r=@nG(t@|kMne7wpoF}sxmq}lULtktpdG5Ud^=XMXtX8bS~8ei`#I}o z0hlUVp|{Eg)RnuBE8n3AsL-3SA&HwUL1);-=qgE-CPimc5lzvPL_1s&RI3bBUJ7yMV>-gbrxT>Ac8x*;pZ>m z5Qg5L4$)g>Stb4n!`4W{JB1m#aq{LEm2E!>kq>?geB3=EfMOVaar{NqI+hJ}_?j*{ zQP@i=ozmtW_^cQi>f>g8zPno^(Ajrp`57;au-DZ*QY(`?M#LbYi6B1|ImPdos&uLV zpsqMs_V~&5{lUXV{lFaEzZ@~C8ldAJK|Lw(@tb-6dGt@shh)$UJbT)}<9$3JLHsex z)|U?eZT4fN3u61fkSeaW8Rc+h>sQVSw{VwTn*AQIF2&FK3BS0kmy?~&>l7;9vj{daJ-*Ek%UPtJc)q>D-6}4LffAEaSxfL)31uQEtMW1_69nPyg2@ZQ>B{c4ABlqg1@3f((tF{Uzbfv zv1!uUP!`|vcZ9u7fJfKp@bAK>t{4v6+#qw^gGRWrd-S%sFt51a_B&N1@vnbu=GVwA z9y&LxeX0w|K6bO8$_g7Z4q$#=byx^=&|%Y+c%k2ZP%c}!G^AzNR-)6D9{Q04YxoB28lXiK13y*mQl| z{P!qX((!r8BjY-2VGi;7cnTPq_HOc2+PdmO%#nq;$h34i>z*g z0n~z%{u#!IF34+@c|?Ih12?`y7>d})><0uU^}u~vL|qi~-Wq%<{6g)F5Dm8Nx?MIU zY@U{Pph_ND#aLskg(82N3-SKG$P&+ST%qEm+>+1}tPHRQ%8$RVl$2S4Qs~TG1kIf( z2g{-65(BGDB8HhmC3HRgJ$2PNQn~;%Pv$+I@@+BmE!}g&FQ8Vyy zNnEMveNjJFtnW5J?Uqd%3T@-~a(pus>-~`*DcJC|=}Gn;v*Aj1>BJjd&lp)=9w7iu zJY26GkGxI40(xOUc1Z%9Eu7wkVXk8p=cLG}`*m1%t}6!$fTunpsaf}-`{DO`=B|LK za{ay2Z*K;B@NNNw(CjAY&hW0SEfAb9xs&xfh`5UK+0sJP}o9*t3733&zq zR?I+{09ef`QNL-ZebQvzJmaDsP;uD3O8w= zMC_H8_2xGeNsQN=`EdmaQ`~!7pbt19x66nc?+YV8G%VotEzx!NGxlgzhHz=FLf$M> z10F+z8FSEp!2tf%VwuVJ*HA60Y+^DYtE-)znZoapTH&DTTWq_S0Oa1~(!^*-7ftu= z(wb4BsR~$rQ{vOU2r)>)G)Crd zaPKBnO9uhUf8?qogaJ3%ET3uanyjw0g9u&m!!(M{v~$k#JfmjQ3xxkHXeu#O@dz^y zV3>&l3cyoQrfJ-ZAj|QE&CdROlZWlV$sJJ6 z^mHLC$M+*l)w&zc&~rOD{VzP^grP$DA=Lm0^s7RCCp^s~ZAangB#|$4w^HuysVwQf zSqCY?-%f7_mDu{66m?DZv|H>+D65DkEh@Y4o<1;XY0k~fRjKKEJ8$0KJ3W8|-p)g0 zGq|qiZJM<}uN_w%PGcmlR`2~YlAxZ`uIEUory|64m?Bq+(rlRQ6Ti_Z|}Uo zSA6rgtBVTey3tTxq?_{RME}w4ZA2xOJHV=hdm40J8o2gQ6=V>-o{U<1(IyOC)lO_V z^Z+|p@Qt3+az)>_0=;<3IJnETd$bV!<`j+qP2RQD>ynK47EEWst2418fDcCN;E2KfhF;aX$vsTC)K>;^6e~Zh9-# zTY>>zM}}crqCrIyy}ZJs;uMaG(ey?fov!0)!cfz(JPJ3nN}C(y_#pPu*-?|4)Gg4j zgNcnLmCNw?E$5p56_cf=x{?do{sCznq}CB5@0 zlL-)5;_eM$nJ;{roOTk}SkPga%U~n?v%u_S$YBgFsCddbg~C+xxo?-sHfTtCnaNGk zK<8sWr>^CSTC(HeH^euLDEp6Wt@x`*H;ySJ_`d`2dl7xVjd;iDiu`iMG8NNE*v5r! zv&hkGxp+>ynF(oO4-MM;>M$yf^E!71Z$a9ME=9y=gG)wEyNY(|IctBCW{~)o>NyL( zahtqFm_%wXKe=|kZCt&7n50yN#>(iIq^*noi7Lm_aua_oo{n$U*m0h(3x<_X1K;&M!k9=!1jPy&PVT6*O368 zNF30p+c);x$ zcPt6U&_0eMd;@ADS3;^kds_f$!gzp^=xudO*gjkRYxOt%u+Nr-%(mAeJNq9JGS*@r zkDRmem@(7S*r54|Ec_;B>!3|n>DZgV9hIL4c{J}{J8TnsS-YRC6Zcak+JOc+vqF7a zRzBT_=&Cs$j7|%a{P1YMD`ON63AqY9Y8CR97ib!Xb?9~y91q8LK2)@}J0=;;)!kP& zJ5=q#uSrxq--aMyB2PSPClIakV0DZ|=zdR<1+zrGh6MSLuD>r&FNINZK zJ7!mWxpbA}*ML!nQs?S~pz4FG-BukY877+2bDh#_)u|CPvq*^k)$Iu~!B@>1&5)PoBUF7;&AGj4BRzbv$Z4F7l-P_iRI8e2U;)|*f?Q^jn(@^GzTgsg zKyOQGL8-u4<8_tMuK)j<%_v6bQ}3{x-fSQnqQM9^0dR-prkxqEkyV7qRdkM|DU@2x*3Ctj3TK1f5&{5d@%DWvb8yB$UW%d`_ux~Tvc>}Vsk8jGoU z&$yPwG_75KGnh6sB2U`zYYwLqjx@VpQXX{mD7>aV{ixA6xS{5?VC^;eM3Ii}ovh1% z=?{if8n0V@`>#HtiQ-weUolEiPcNs^>;~I-9k2ch>!EQ=!Q=LX5w9T}Ds^`>mqGuM z3)0;GKJut$a6iIjxfZ5-UVyOsGCkLTI1|b%OBwvrL-&==n;=+`h&s`nXzRp)*i;wu zT{Io)E2**)G2nMyLB&ul@lFJ)=YZ=E3n>K8cO*F1c%IOzQoFH544OcMV z9r`|=uSTYSPy`KMU9{S0wMq_QMyu zsS<-s@g|goT2J;(V7<@BYv@@|_+WjBF1lyMS$WcJ{{G5LjtjOe^3(-L-{bOWroW|y)eiGONpb(XNe@Sh{VmX*5VQAhqS^sM z)%#m{9|!yzO&xG-0B<7F%!8WEw6kwiSW22{9jYb>mW{Qh3kb{)uQ+OYA5-vZ25w)e zCo$mx(<$sObapPszy$UV3_dY_D(tmp#Y!f`IK_f8 zr^rF2{?OwFDK9XO3@w)XXBD(U$MrZzg=;p~m7@;*agGyD=~763wp&@BrJD%o=Y-yPnf6b%E&h%y!Q# zhk^Eb0va~HlsTgYXg*5|#KoZ#rQ6R3ZVrZ<(K08Z#*@l_A}pb$oD}3xVq+dHoSITE zxBK4$Q7*!|pt7l6`%>>iolE`++<-3u+V1+lOvxIGeC77G#<$~hpo_Jo8Qrm*1${UlGOOE*$fj_MI z4~#6e-id*go;N#ITeNNald6htO*Z7tqFjqY&~IBX6oOl zwdY<8D=Nz|YeVbp>mEV~;EJ9yrC7PAXf1hTgLdWxEnXRN5}&65G~Jl>1+hI&uvH4| z)?`13qBEKQ43?x^KX~8WT+iqd-n3aP@h|wA3ORsaUr~V~18qeX?bQD)P+jM49WAu)0roE@({lHqJ&l4hG?_3A@FvbZe=A8tbpgUu>|Diw+IEb7Q^t>e6zyrGP zNm!+2e~xNxeOw~NPe;c64Cr#*gHcL<910Cy|IH@)r2hAlDV7NIzFOn^5!$@ve&jer z;y8Y(_R%MF9@pA9_WttIru8s=0IWk=rsf8@1Ma8|)a!{4j+BtX0?KC%-4O{SztWx3 zO9q;H@V53oCKSSz9>KJYIy@r^zYGVWG5cP5Zr*_&&0EaeFM{zdGrHa`$xyoEIPtk@ zd;eze`Lu`8B}-%rU8WjsHWio~A7!~{zV7eumv`W?e4fUX)=1{zfsHoi`(J>D*8ESnD0~UZ=l7(6;IWgGtDDj}y?on4>F9=A14NrGVh( z?#^ZMf?`uQATlYt!BH1+PAdM}G=?NG26@kH<^Iejg?OicrwJSjgnZngv{pP1kLDePsh`lZK*TT?Do_sXjE`7lgWG(bv3veMc zomZ*!(4v`qPGr-G<*243qqy(%Y&CHNkI*{%cYxN4VjSV3x1xhM0{^X>p7gkDhqI0-1_}I4+c63yv(K9$rM>QHZ zX+8N{E%C3PgHnu(6xEeHWZf1Wk|@Ke=rMX2@B4NUF*0t| zp7D_IoAtQG!n9O_?=(9bZ$%$l91`$-)TyGk$RSNL$=dED#5?uz?MexQbt0LcXG_B{9fcqEwD%_qKWYZyg;NfC1LM*X(44oYoz8y6JX49%Pyd5;L&c z7^#n`#TvOS+u^pB9Ya}hTN&48)u1J87)`N%m~(a(Rnh(+ZZsW=TB8IB>e~MINixs< zaO^*ZAg~c)+1Vh-Sv3H6l`4N<(xy6lIUtb&R7}ZIhRB*HIL4U1T^-i?Ck#9eUvfCIX(uvEn_F zdWig0xVNlY^djiBkx)(v;8A)=!n=&spKNic`+Ecz+sX8y6N5n1`^<=%12#N|@wWm- zOC${or97Vb6PueR+sR3lbG6fw^EOwZw;xZ>BT&lAUM@R!xG$h&z%Qz9WOirE)i=(J z8S?pfQJh-QnZ5DxwbSsCwgG=?R#&&$+&8^6QSWF*2&Qo7<~MhSzUNLT)6Eu^o^Q6i zv2wtZHe|u@2Vl}Vpf;c~gjO5WagX4rQuqdV-?tF*KJ?df94dyfbpp-}T%F4{l48IN1?9<%+oD|E9gVbx6(mI3;eS)O)={U88#6(2jq&^DC z#lEfjw_2@T+M%Pa#maFFoH&+?ydDpCx3^jO6bo62Bf00u$h)}_N8D5f;9j_ON^d6a z>eMb$!5DG7pv6(d(1mLaoQ=}h;bho$@jeU09n83;_OB##^c8gsbr<=m^ZAUbl-HYq zRh&pMtc!#d@t#mX`Yq80kLPkDUsIhfVyM?(mdCTD??B`l=z68(U4XO1MeSZXPR z#45+Z(%=gDOHP=whfy5)btysB;7D&Y9WeQXVTWhJ5++c3vDh8(2^?$3LU*b@g8ap9 zG=H>a0Rjo2d+9*seCAdDQu*pUWo$irj(19BPGAloRoW?urzl>R3)#bTJbQ^Dw58kpsKF`Hw|0IeUlaSQI9g-Dca3KcLsM%pVs^*Ac?U z%Q!%wNbe|au$ZCqvT;HLz!*IvdH1#Goe4pRas4D7*G2^D&l|hkI+hy~8%B3i&J=bn zEr;!zo}v@LTb0CNjb7~r<~3?^)9sZ*Yq%@uo8?4-(vWO0;9nPLH?;9gd8L|mB?%($ zJ6pYu91c{fKM`t?DKF4In&C?@f|m)&4;%E%?MW3I^E(6R*tuT#3)svT34f&Wh*`TK_oyv`@fxJ^Z1Z9F;}k2HS_l~dIJjU1 zd`+_@N~29vUI{h-?2=pJl+8VM;zpygFcJrMf29xZR_d_ue!>7`9<@D*QFmmr&jZ{R zqy86AZ!RxCC(>#{S*lMTwTHqm?+%OpX06k7?#G6!`cG4)rYFV4L9;F}DYs_y!&T{T zy|a#;J8AVNr+~QG&|e9t3{BKBK|#;bC;$e~>A;^=V+8vp1P@$HmBcWbyfUhtJU zhUCPb{5DEd$>2WGF6vJwJWD1T|8H=xo}W9ZFr%Sc@#JTUdK-cD5yM== zJc`GI#i)z4XT{fgLRhN5g&HqF*g{b4Q1G$A<2)o04?arAww`#wPoXoR{cWzjy1%^6 zA18W_-J7~!d!P57Fgz4nyIyQW3)IXX55r4q$ykGTQy4b7A6}O^JlUpQ9j6638^$p# zYTt;^G(Igi0^^n4Tr~id#PlGS+PJiHwcCKpJ>WnpEQGmquNAFsPmq~l>9dX>mysVM z21oS)7l2dfW0FmXjbKg^cBwnoOJ9lY-=o8{WNL|VYcsL9&AmMV)3yH^Z*d41Wlm}3 zDrK>HF)VGCQfPaUb)YJ|l6-+>*7ZUqI?QR~~72UL!ihvjpLX0$T9{8cz^aVtFaWEm{8{_fiFCHQ9HN2*t*N-`T~nKI0T+yGX1XlE zxOVBH)8T|9SiD}67`h+WFlWNL>9-o!U;##L1OGBJp^EB-FXA+)t{lsip`1S|5PN>b zGY9`9iHY21W%7KbSWsg~B=Xp`c0~8{f&)i;7-EKAQhhm@Fd6rVzDb~Xwu6-#%{jqX z!0WU1XERyYNFdHjVVQC*{n2K_HBB^4Q1Y-iMX;8CiBn%)HnyW2XXo?qaYOUj31IX> ziSf^O9(n4jlYGBh|2@5sc@6HL`r*KdYX_*i1l~<&?|v_kRn5ie#YOO`dDgxyL)1G7 zfe!Jm`L?g6pYYe4)Ra^(v&vtJq8^xVPC3z2JAtFm@M;_pJw=l0L1glAv zo1DGjDMC;a8|RSlz~{-?=%Q@eoul)f`m90CkNO{^nfX6`tG7s&66%d)G5OtRaK{d4mV#fKU zSoW~5lnrLDfDibiN}WmYZgNN51skC2^I#{q9tXFxEarmgEVZUarxz&9i9bu;@O(1k z|G8Hz^fKljvJ>9mh)D!~1tR(0dbw}re~xyAxUun4CuC!(%@g!SZ?~%=M_H!x06eG2 zXyq)XdfVWFB3SFqUAf*+RgAp6vL1ZYhHj%($&-!!aGxZ4|Kyr=##Yr&*-InKPQk%} zDU}KcPYO^$S{1}7KmWFkre5*cxS1SS?CH0sMo7bcJ3(hKKo|2z@!c#m4-jt zVqcqY>+g*z1n-R}@`K;|@dX$B0uD^Eb@Tf7)uWeq?WDw&d8o#%*V3cwyCKN>x%)9F z&&i`&4NCNI(ID~R$H6xkOqzKnsoFJO1u(JlY`$B+w3mNR{jlER4~w7|=@FRvt>P&5)Z`vcld7uzaVU?VisuP&LRf>Y_eaag-sxN3IF9A$lN zNV=iTLMi+k;u2EBw}aRlMj-Ja)}K&6=5jckRhk!bruC3K-A*nOm4VALFk;c$v2d?L z{Fzyp5Ag0?U~<1m!Y-xKWg8L9i!c|ZqF?s|Mp+A-mL?@7;gCIj4oO4b8PNjTbRY^je zsM0<1)}Z}Gy+gHiVV8}^Muy?k&1TOgDd|b_Q$v)rvbC=SPCPitJUL;RwiY>#0Yf{~ z74W<3AI8o^-RWnFL`H!aHQ>_y@u>-xncWt!7Ir>X7ZBxSC=Qx_svF~lJzYKdVbWmKC>@NW% zwI)V~vb@CmLIr?sH5)&DohSjpZFXmA?~V?N)$F8feuU+>BuB;U<$G^$e#=z ztz2El+wr`4X*O)7BYk~+S^yn8D22f2^65MvafmiKRpEVZTOH48 zMg2r!*gYgQw1cKH;LVLIYwdNQxf!b`wPe#0X_COz=mfb2G4fHgdyx}%%<9OcuW7xq z)S{&qg+YOytKB3E-wnwcPB-`uNpx^whg2BUZ#!aW&vR`8Pf49ztmh1em6U%3n&E7ujZSCtyKJWO2eRvS`I%L(TXGo&_iYN&A(|Jv& zMxHm(C?puNHPjs=NxK>W3SV=o4Q^PGoQ1}{$cJH(`=om{ zvH~=Xo_wBbpTd!o#(5yNY~29O5JOtitsw@7o?u|+25G*m-Y#$+Wb{>a5JUjbg<%B+B`Ea~j3O7Aplp8-$>mh2zyV&k<@`8F55shify!)%yE~N?;cq*y#XE*Gb3333 zY}|yqkg#1Z?P9e;Kl@nxHBP|lP^W_($7Wr1Mgn{8uPQ#x1#IVsPwC}>(=kiQw#E=CZFH1ds)L(|< z@cZv^M>;9(u28-IKnqE3G{v$Q{_3V`9!66uD*(a`qC+ubj)AfGA0%;GP?)Sj-B+XrYi%k2FkD8yw=L z^oW2V2TnWOXa{SCL(lm3Vzz7TVwvR00^FG7GE7Aq(I)cS0n%qX(|{{#${(Ntm?ytS z*XM%EhuhGtM+<634Yo$!l9?mC-s_;D_O`0F^Kz}ea87yv>?}#sg$dWZP|U0E)Dp{) z9TRddHAEF60GkMATeEd+3b{Brt8PNfZ^YyvPEVT!s1$D}i{qs< z`qw7pyg&#|@ejUpKdh%O@b^7yt;^I_K=?0HJ8Z-bO$>(+_yp?AxNlA_`Q2qZUdCo$#*MsPO9b_F+>pMwV=XK)BbyJ(ZSM$! zM`1{&onKW}tP#)DkDhzz-~3huIQn~ClduWCtIDm@p2XYKA%hLncRDxPU^ioZ^E>y> z-yl7qd0+d$+77-kd;RHOPV%&d$Jt2eekj90c2=i!pP$1A2Mb4|F^#KLx-Ca>`oQw7EB>LQXwJ_z z+(taX2n-O0w;(E9|3 zs0-rW?Y3fummoA>8N0a?05%#klUNEbqOBv4<6a!alXlH1sRE=up6CySPk%|{7g#*8 z?PKF-Vn2JMIR`LvaBv)MGvSJe76?;~HA9RkSv-0D_n zpp-Xo1cK?1H_s7yys4?dnz|9eG^X@s?h{5l<)}=DEwXQCP!*wPGMt>LER&zS7u=CR zcBGo!`vCsy**4}z>rKoOtK*+qf|v?WG{WFec-!n-M0+DkN|nE+QO=r`0WN6Yv6a9N z7&!<|O!Cf`lh{EuUEu~yot>@!ZenA4#-Bk!WS!cc_ge|7T*u*OBH$iDG+=-((iYd; zSfHY|r%_;nX=vjp&)*LXkn8xkl1znf0~`Wr8|v+Sx|BVPO)BDiB61}J@u=wDI9bpT z&hgfBl0fFlf^uG(KJ!&Os*y;agB8 z=SqMJQX_$MuorbadSvqm0Jm*P$#%HhIX|#6!MmFDuJ!lZ9r8JV-{ZQo3iNsB)%ECK z$O43u4$R7VjzId`_HOtRdhtf@vzc3O#&)Sq5=vP_UyUAODbLdy>XS8a8*o>TDp3RqQU_DK5R1(^AIW`3U^ z8*VyTeaQGxHYc*(1%Ytt3Z_`ZKQDr2cv2cmW!dOM3sbT;17t@@{7|>J>8r!1=OAS~ z%a{-=vK=us3b<^SuV=kM;~HlGVWU@HJJ@pSHMBXzlM9V^Il>(wx-UG2UmwWduCJ&0 zE}Ah=Dwxy;hAW~)cD-DcN&_Kq%}wEB=r?CJi+k0c`lFfRWBD}{CM4IIJ%+LThMGrZ8G%iv+9GcKg1^8#)cKsp@qWVp$CFGT0#s@e$P!qMo z@BYvM<9)Hzp5g1*nRIYmS_nM??s&S|6~W_G`;W^>62LkT{c)V7gN#-DTK}S}O&l(+ z8i?c)yIB>AWM5nT=_w^>uSKZm_#7RJH}d3h<&Es3q%$;!eT2qFlk8%;<(+fiK$Xkh z0P3p(s;PyHxt1j5xTW51kd1WaN)8Qcm@1@yq~6&oZGHBGf1I*Bb#O~h?Y!uw#S zXG8N@#o5D6MSb2NMFNn8jPWAcg}Y@6`NI+q`~xEmtvnazz@u4bk;eU(IX^ll%ZXp+ z06`kCrk0s#h(Fj4R5UJmltp!Xgtz_)? zU>ut4TkU-yq%%`v4HwI5jnjFQj9zv_B;7FF5kQsBn|$_Qk&(tXHC_dh1h;%OSiKfy zgvo(Z6(Ll9$9FwL-X? z8yjg@KYfd^3_4$bLNdRv&fg)vRUkS;So_}UY(S^6EhFSPPNT4*^b+KafRGLMa8ns%J+9hx z83$EB0HM`^f=j`_mn`E(jtySZ#~4_pBz@H}!5IC5splHfZ;li3E$o5LLKDnKcmtP@ z#=!Go@dubY*O*c~GTO(F0bT2=Q!~0m+j-ho3uz%Vue z4Sy3O9ObtwTXBoz3@5#wRhcbyCk*yX;Uw2>Q0mT>MZT{fVEYZ6958$C2u)j1SzTm6 z@+-#7a_dbjb|ja`nB)p_6lxw`jk|Oz#yJlQd)%0!^kCKb?RaE{1!7prfx{LG- zzLsRtZ?-&XN!OB%& z*LGd*Tul!w*YjUfu|C%CW)!DEL2U;Fgi&id&u01|PRnj3W1+x6vRlQ}KDlu7@Op*W znu2;aCiTkbfqTTm;X^Ha8k3K4@A~Bd<&)M-L@Wi~ujF!itRb5zL(y1FU7xoT0<_Wn zA!|3*D0S0?l5rjN`uZEp2YdOis!P7v9~k;AUN2NaJd+d+ZI5`GTw_1zaj#cS3>V8I z6d@k@>5|>LET;xWlOPLlu9M^bor4Z=%n@Y%vq^}h z^hk9h9TNzI!^nfZ4_Qi>8WioA+f z;6KcOc08SiNwgOV`k5E0RvJ0+IAaPsx9PG3a{RgbB6PSJSFkJGCVL|MC7^v)&h&?% z48g4`n+hEExu|T=I{Lee;}dBt^x9JOC&}r*RS(SzYm)ebppQpq!G700yy`^br~PmJ z6Z28QO4fdlOEI@c`xo{c-!S)H#;D&nEn5X)&Kq~ zE15R?!h7O~dk21K=M-n;J!}Y_wx=lIx?YD%2+DO-es8(81n(f4qHbRw zctFG0I6Qy9jKK%k)ODg4tHiH#sUrrkzQ7Oq9Q4OAM;(q02+9_SUA0#!46dGCvX93f zGzpVzV*rJ3IcW=Asg$gre74>cumX6(vG-IZMrE$HWS<#A+&LoU)`>lX@0R1uyZfg> zYjUD3{=(?oHbHcDy^Vr-IF#Mmxt@#5@-O60Trz=?$wIh*kr%=%-#WJ1fAY3~W>`f^ ztQ|2UJvW3F0i}$mnFigCyF73E?brV3~FhcXm zcs>Vy*@zA~iSm1#YFWq=%Pkjj@qa$I{FlSh_#ok(`*E<-Ui($9uRFJCKq~!d03CC` zrpKh%-UB6MCEzQu>**4LG}anqU6lS#7f>CLA^Ls3->HBX`lbrLqZYP|5w3!W0vEhF z-D<0noVyX7Pjm2!A}b&`VAJy%_IY{5U}$9e6K>OU`9{-wPk>lWxFt+DHtnu*sGof~ z0V*R>Q`^D!pou=;bD9STt_oIuP7J{u#iVRx=k6%#+^oT4+Sd!yLX!l-0{A7rJ5#M4Q|r%KaohKxsP!vFRuUzy zaF9=22rxoy7s=06YniqU{wHCR-)~?l9d2;b8PL;tRvYc{a1Z)_Q4Z)(BZfZ`JSB~9%W&|Se+YC9RU#r?Z*|@q3d)YW88Gs*zF%b+wj7_1VH zC-~J~w+q5khWL<$z_4^EBrzchimZ+_2$)cu5tw~CDw!KK_lKBWeuB*+3%u8}>83HQ zVh#1`S{P>TOx}RUyIWj?we5#_qmkEiT{4~_+_9to?L2^-jWaKw>lcaU2l{uL$41K$ zx3)4L&UAT-P(wGq>p{#~s)37TuB?kt)uoS^|M)h@ABPGo#AmyOeUAKXpjGez`1(#l3zb)5_6+ zCiFUPc^}A{kK>xQ{2dPXmx9F&Tp5^O+VpS$f23I2u-j|}%1)C&v(a@`_XgGb%n8=U zH3@ya{LtJuo>{7PL?Tt-Eu26CU0I_RofOC})`@P`mA#)%RK{~9)G)`#%Qo*QM=l7l zKmYUn=&S)z#y(vXfPqQ?1t1c*i#7x%>-j$HC8rn9e)3lxDma8%BXy|R(N0QXB9<2! zxoj30A#kZJ_rTwEc4fKa0>DzEEn&AqFFO6sBdKaxwh)+t1Sa_rwqiYWm`CJ$K*yoJ zu9KLw0SG+DL$>!=jn$CTAj$vpVCCkA11-DHY%~ys#Y_9oYN?tROu~7Tu+1J(yl;&^ zKKM()bXY3$<)&fAmjh?LWogT-Un#mDKeQmKIj>wOjw^8o4EV~)$@#qw_&~pg_FWT< z8s72u(5Z@GTy$+4j+({y5_6GQN#TIYDFl<^B3RYoVpiT4?Dd~KFqJHZ`toUpp#Jvq ztKF%rUQ1z?vt!)DujSbeG{Gq|$O6-7Pt%)EYHcw~hZl~@Mu4 z_jny(@@U-2kZd2>xNr?6=2LNyNI950f-8k7X;9p0nk*-|GKcQdpra>XnRC9(fsoF$ zB?y_!Uk(wAzHizZqs``iEB!n{26>>+y7%2a=i_B2KKJ!R5rR2vrz4z-KHpAEgP}Nr zS#k1`jI?unwhweEeaEk5^*%eBfMx7_4kS_aq=X~L>0(5HcBe14I^)5~5H2#TL){K! zp5oCfDmBF7LKq?!J@0maVx5*NDP#8|9_WpP{^e$HRao4jiL3M%?M zE2J%0{P}Pb+ z^tP^%>w}x?gI|1>9|9GK3$ZymlMu-0%T0`lm}7EsU7BvN38*8o0vtRqEXWT;f6r|* zUyN*f&f>Gxw1ZZi4uI=iO&L{Y9H(vsFt*?5E0SrOxSTqIBrpiXW(X)h!#45#W0jQE z6w1hGV|<#-tU)>!)aiV?pI(rSu}~MQ^q{c@0hP^F&4_aXBG?E`dJlF;=leus7c+Ml z!!?7v$tmWE1GVJ*`R>?Y@_H_y~dI zl>{rm6@1>t<8)YWg9EsfAui&Iw!gTl9?+N1Gs|hGco7*Q7 z>;v{0;LRMOd3ry3p)CY1w$`o~j=|?c-BR&dJ9MN-Dwihy2YNyA!In>ASfodHnV-~d za*vLVdn;oE#Y^5)HkLSE`w?{qcx+*=vi-)ljm#lXW1Z1wlIB1G?EZFejCp)Ee0ru! zMer`u@zcoI*w`mu;As$)t9M$j1|A+n$2Bt*fajkGyN+#wjBo zfw_U65>u%a6&0XS>2LZFqI05U0vD@DX;*t#6ihbFy+%yMDvBOqntwna1f)zr1S^3` zo@USIFa-mo7^bL`oHW-x{! zv;$2sMYc)U2-`Wy@oqkck04txa~LBc!ouy7+>Xh_Z&LgQ{-9ANystVC<^Rh6BxHw+`B|&}` z$B9M?**JryQx8xt=YqP-0D^aT{zR-?DcGR+f>|#{LA%@ViH&;k7ad&0VS;xLeQr@9 z2+U(p=V9n#_D9ZPDBQ-n|BH<51|_wQ6Pz9VHR0dxc{d!J4;8RjMi>p!OM!LdNGvw! zJ9B8xtc~JMn8rxPqvt*S+ZkZtM8&UVteR9S)smR&aFRT#)AuwRuRZ1|D;kjBpv@3h zFno^qL-Xi&^b2cGZ(TGZx%c}h9~aKifujFo(}Tmy#+F|1Fq|cdngw0CZHIt>E3p;c zr*)iY`Stcfvd8RY1FJk8MonS$=84RTqh$Av4$+;@8Qzv5ugmbFkrck;0B8`R;y3zO z5OV2a@g0+f%{@zkR*IswS_A|S7om0zQ{f-s*JjRU{qfGIjB8iMXnSK#p4ds%Fv#WK zJ8#lTv#$~{>vIdBlMbYNh{%cC<+b{<#s4oZM4;+@)?$!?7vvndUXvH2)d7*mJ+#VQwd3_k<`G1m6RxFi< zd_ja0`JubpPmS*ZEC+;n*=BS9d{g%r+s4k5G{Xo3>Hb*^IZd$`$|d0?oE4hiBLGB_ z?X!{%hF5wv3frMwQ+T1%ZBdZS;no0}7{}#wjlW*h?nxDG6#LY+lsIdCsl5R(C_R)T zTwo3H9bMO|jqpK!tRz9-{fB0KQrNQRHt&-V&8&qvwA~^N4i4ISBZCP5G2R4~*u748 zP^PIuR0!(6k4=o?7ND&N3OJ?$w`PX^!{ed_%*)KWi`W6y&F78o@Qdf_!CS)tzL5hu zqPSr2&E-OVEiJ9WASl{!n^9u2S=gsmo=pziy%J2VdEFZ1Q}?JRa3BBmjP%*~x)3kM z0ksaSTh%dg?g@)?;xgdTiY1s2>r0Lt`a@>`6k?T~H|5VNMJyyurg43!pxk(pW$FR$ zFwF@0!|99sK%PtiMBX5l>BLkKIzLR&1d?6EG|dpY13#NV1q76^D)xYzTl9tnV5!Wb z+v=}h%Y?b-Lh4wxnws77x%!_ddtiXTS1xC{ahQLTQd=qZcdmi_n^j;I1Jy!c3RXd-Qfkxe0ln&6|L8SX zoWA~g+fBpW=V=`!@v+38sR%jSh!Ct%&diJ=wO&;>cRy}Uw``o5J;Z#QX_n31NA;uQ zyFKDJ4bMCk7$5d$UO@Tp(RXZCBc!{(W@|AfD^Qq->#iqTyoL@P2WfmL<6Y(T!J@Y= zigZclF8At7O=x3~7uxRwi&ztL;anIyyZ^FQwH^sS(?e%(~6@pUt zY#W(A)EY6<@ywRvPI24dd)ZQ7^?Rk{{H#o{5X3Nz$oR#K;vv$Rq;c&;>QuHv&j%;i z)gPh`I!S^^$Dy}xkObU0;54ynY2lfJ%)eGJS4PO{^tq0XHoPCXmN0|11_*aEFl9kL zVJ%)Q@O#zcoT?@$Y9k@<>K8TUp_*>ozgeatGjaVGb@a=k!Zx@n_`9OLzzGW(@>_3v z#W6Ej-WKWVsIFtH?UV;ny z6bYPdv5-nM2`fB`KsDvma+s-`e#sl^9V`hq70}zI;G)E0^jL*>w0#9%B=QV@J}g}VBAL_#yby4Z!cS4 zVkS0L?{ni9wyAkiKY}amRs7BU5ATNKbVOwn=EW3Kp{)Z;-UD^wj{u!P6KWpC(Oy=G zwYw!i#_V>H8D?{w+H6qaSZnDDOMexX0$92Sq~URo^VackZh%pLKHo`k7_5$;%9JgO zNk$A`tC}`d+!*!|QdLV>{av@k@p3PZ$qXcT)W00Vx<&7&wX0}mpRgmFagR{dWFWDW zqO0#SLt1YlCE}2?f*@4oTw~OZx@uFMSgQrWJ`K<`wL@kynzQ*b0y91Vnj9!RFd6%Y z0OG6$c*a_s;^1>qDkb!k?oSiis)Dv8a6d~Bz(S5B_^X12e3gybqP4(Q5yBo)n0ji` zyQClGTyH_JAw2Y_zN?m~dyJ8pWlb*+7118^?I$FBcZd?>0Y||kKcc4yw<5t6{E@w} z?#E8JpbOO&@F?nQgclE^Qj0Gyccu3XEv$RxmtdoDEyWvO zyZcu#vfo|Z=cB{fLEb=Y8*f{`&8W>g@J!$7u1Vv^0r}6I*3yQ?-QH5ADG?AJta`yv zZeCV{mU9HDO)0mHLZg6diY|D4DqX;&mO8)%z^EYs#e;N$1g=f5GXiFpQDC&th0yD~ z5ax8XiHHO|vFKu+B*$9^Y%cm8R|cP9xC~7Z7(cL{S6?BHH5OZo72cYirP0*CTFVL_ zU8wErvy*JYG8>T&E)^O5FN&~;J*#rSd`>s|^qh7V@op@vFZk%ZPXCu#wE<*-kEPGM zIshafRMgrt1%Psg$`z}WraHWK>U*ZB(}fQ9IO5K_X~PBHpR}Bx_?JKR#5IOJj#%il zxsOWXI~M1%9l9ReLY%d6H7<||J@*-&gr2v#z?x=7B+w;nkj6nj##V<{7Qa1@hV+|j zuR1gIPgQe0C`x{%;z2xRQ(EF7X}ii%Q&xl}GyS(kXmX6!n!Q>C=rjlbP4sObO0ggG z{_N7EBV)F+He#&Jqd5e3;~qXeM5F7NCFQ-LI!wL+X|>G{j>w6A-(3kk_qBH4r`E~! zv&FN%Hh*1<5q0EN>2}>}c3z1VTCa(;LRTE{jNnOQ=Y#xM-J-dN*b7Jv}YD6(0JY|E-|* zsf2$`jImYYgkIL_-?D;-XDuB#@}??J;r+;B%;z#!KvT>pLFTsvl|G7~)WBde^-R) z%}UK5?1N@(@L&@yVe5iDuqC*R2~^X9_*YH4{1K;hXmeyUQs)9-_BouF;t{+He!J?y zqlvEwsuw=tAzM+(5do7t&IsJs;b!P^gJ23iM*JTw`l8C*!4-k>m%k`skf4<)vhp>wvPQqd!MvrKPuotVLq!Pc}|G8<*@}xU( z!xPR<%>>aZpn@Xp3RP*^Uc};zlI{1GzqbJ)lZIO9TW;264%jR;sS(U*PQo|x^zSH; zU^t@YtO+QhXvDDQfCGWmrKmpzAnz4gk^tf#$q9iXIJl@_J5b=6nRaXHFbVdl2=3*T zI!8HABb!@1XXmSBm6uap2p`rT^i`uZycSn2ORxXho@iV|FXdw=Rqh7oMM`)@SDO5Y zlsb;iN=h|G`+od(yuI!V-0=2(du*NV*aoK*t8rs;*_GcMZD|_KQu%Eyq0cw$uW=2R z+f@WFlZRzm-{>|LTd8e89?nXGnTrfTe_*p8SHzORs_kb3tsp~s4PArXto zoVQ~zxg9+rPRH)yH}f}X)6*dI$t};P4XznN9;X%-zb%iUpY7YUyC|p8?%<>Oo|~Re z0{=Y-2wv+vHwegq>(=}Xp4YycHPpk}g0l5DzHkBFoQ4}XuUO{uiroN1|oK6;< za7THwuKkY9Tv`F6%Ip`-t>I)n6FJ=5uk$$|)OYN=Zx}aXIF^y?X0V*2fkn_4Y2BqI z%c`{Mf49P_RACmeATMl^HT%c9?Wt^&_(KrzHS}=C1<_lyqQdf(q^ylq=u&3F1xL`y z@wFQ4W@LW9cco`5fByjo;JxZN%3FLN;b`3mI7AO4)mjqT&dlDZVWt}G&7Ka|75s2W z49I!STKqwps`a>Y)=N8>IRXL)N4f>Q?ybci)Cj(zt~g_E3RS8=?qMEC*k-J~sisK3 zfz}rt$m;ZiL0B#D`*cQt+&myQwXo^nz$`&cW=rN>eu9?H1dfYOv^w9-Xq#N{?ftH* z=i}qbLE;!=oR}1um@0RWL+Fign_IfXCiua%$$R^7wWWKkDHv_{AOgHB@(Pkgoq?$v z>)UQh`bfUdtuhHyB5^yKS-=<&)teLKg99?&%T93 z>3^JH-F4?~wV0vj_PNw!VPK^YM&1z9y~WSz^!~gEXrxA}#lAn91}*q0 zl^OoKf~3UghV3Ny#A+*5?{m<;cDCb1*($y~2wk+S;4+O+Q(!0bdO?caA&`;$i9_HM z-aYr%;C&Y?q{GAwt{mL++*z`Ezks?8?YSg*XGl{o(DwX7R;YvIx<)kVO&+|O@4RiV zdw{80&xs5~3wV^AzE(0p!X^v!Q#v6Q>G2Fb+iG#0T+QY$M%E>VBln%=>k}b7UV2}3 z5h>%a1y=#eaAet$iDDLox(LUzexsB*+l}YX!kVg`fLtz$HTA}4iWM(0U7&;0czUHs zK}0x%v(vjoYSmBHrPO)wXlz!{O+#xi=%fk0#js85v!5BedMy*s%{9JoAY#{C|McVz ztv=n8E4goo+qr3pS^wDPtmHors38w!rgc?=H){M18+TRcx$G$N2oE6iJ8z((QpkQ} z4nV>PhAySe7|_Dftv9~#eOk=-d_6hR7x1Q4AQb#o%+&K;fwcyIAjj!1kQ^CC8f@%3 z!qpSEpm=0zD%+?kc{RBoT{?*)R=OmM*?+ZsR0Y`Mx#9ZtR3@8lFJd{d1}E@;EP!dy z6;i#br(I%j&!-4MRynLr^p?DV%#-zKPw`$hJpLWa9=QVou%N-AZ)a`0+JYZdgDV0$O>Stsrz-&8DMx} z$7OhPF>$@usor-sNei*-*3a~dDD{%!C|E!D*sBWXg?Ap;el+x|0`W;7EK*JYZA^~5 z{&mqL{^PL7YMwBlADcI1VM&@Y~(>up!>*@bh_07?7K4G|<#%YYk zwr$&JoW^c!HQBfgn#Q)%*iJUKZF7Uh*4^K|=W5T{J^RNy-{}43#mqbp_Y|cTBZBqm zaGqqqe4F`@x)`kPgk;RX@z@8hUp0Vt2}#y^VZop1I%_HtF-vWz`$v;=ptpSMVi-2H z9l;KGv1FmypO&u&d_|k%=RRI2UyeTTs1j-Zk<>)Z3jo==r)77 zy|c>3dR^Qu1?HaB;62XRZcW*GY<{7B^7%Rh`%>09LIu)Sg(Pgxk0Yy7sX(~D6{+aUF0zO{W~9*^^t;~whQOl=Nv-_r zX#r0r={B1(B0cdWX}aGy3oMk{MDm{O*G%6-+2?64@1FqCM>peGK_zEK9BDnhV>B`< z18{4!@E49{I(@8EWDhu=bk*eNE}T_Bfy!u~$q*N7_w&LkIN=U6 zBGEt4oub=+zz8Um-IOL&!!+-f4M^AS*|x-$w%AWUt!lrsR!m9fz@*ClN=0ia|6{{! zD(PNY813g-Hj7c6HND;(f?}^g#NPx}zsZ1?=hJ}4jeyr7JBWJ4lbT({`?}n0*g=a9 zEu3FK`B?EeXe4V^y2lrb(H>prWSQLZgs&jrEron&sTUv$I#sPs;^Zt7 zRjV9c3si-!9+jKduNm?M%us4}|Hf~RYPXJxGafIGB#`R6ObL&;LE!(#4|gP|h5W)j zy|tm!;D`$wdgTkZVW$G(O?JquVk;bimk_%jT<$7G#X`hve2c&~iws5xLJn}aYe zBJr-3K~Y6WQ9$MV(h;x|K^F={Mn}!~HmqrAOht4D^WtRS=TBAh&HKEunYs0}s?zLi zc33RRkQPnrb25ZMqd9f|k=(4URlCsrMfMeq2=>-}5UiGZ5!_+GhzVKuc>PB^zO~dE z*OyM$3jWR4qn^Xd$Z(P_zM7*x8g|JLo>e(h-WTd8u>Hp6hLj$LGI%^z{qurhXh!vL zn`-tFLB_yI;Ls5&A{`E5QT{TN!KHa^1$=mHWE0po9L?t{JeQLgwl^InCP3ihoCl@7 z-;0!kYVTYtPfQm^u!)XEe7A!9hO;hOA@-SEZ>{iOxuxyKpw4zJ>;f}0gn7bpV62g1 z1AFX7j^=gzX0rVQqMOyiZ}S?mEa}|%6MfMG%3c-SpY^w9UnuU#c~JqhP^?Q|u0@~4 z*{PQzm99F0bcVy9{^E1m%=Xn6tA30rL*hmIMx%rop<6sA5U|ysMOH%iJKs_s1ZNSx z(>4F_CUsa+(2s*Ym=hhSj(?wt}j|WSzNoRfhzsqjmd)Rus-x z-la(QJ%3Ued+L$?9|B>-fV!>c`{n?S(^zyyPY7F5+3so`u!Vv5I zXnX-`zkjWtdbgdI*@y{EnAQr>CTGp3)*DqsKa=u^4HL9Dc`<#bE}&Ey40u0a4G=mE z#qvk`d47(N;BQ(q$5$~t(Flk57vWZ2mD&63@LOEjDYT@?J_-Esi`CtaCQ{$sh-Q1> z)j&Ba|8Z_eMi`n5cuep@Lck|gCXmZBI1)fJ(Z%kjy-Nu^DbruepL)qZP6MvD3cu_;Y43dKdI zH73ug!|B4${a7(E861|(XFY876f6=O$AD>e&+C2T5nZ$MOLE8@;QZ&vIAfM6q)(OZ z{u1e)lt(b`po<_}_4FW9J&pth=snlsAP-4v;(Vk58E&e(gt}@On3uV5j9Fg zn$9K#=P0LyAI1V*y=9Pv;ZAw%HKuyxm&!z@@6omo1#dCVqLQ^#8wxs2ag3j!%+>GS zf|*48wrw{aSiwEUAJ1M1tev;)!X%(obZ(1G`1 zpZtyo_=N6bdUJZBhgQmkbWTdgru|W(7)f4Q@D=DWo2f5W=4t%+lSl@c9~0uS5J1K& z+Rr#-h)4KP*le9&_#X_qaF9~acT!4e)Uo)_%1g#{Nx~&{RNk4Of#4A{dvAyCQ+wVI zGrtk>vZ|c6V6efOl-8DpmdkamIcnEG>@A~X-Tf|dV8<>yFPb3gMP&d?ft68ZcF#V* zameuz1kJhyXSEw|qt&RmaM$;$DAVI52u%(AFK&+}61e?=-CXjC!rX20?^iT?{VxCG z9%y(H33J6P7q?1hAvDll-|eyfot=Q~d~| z=;fy0#%#gkzFb%aAG*c(9YBLPa4U&$%(7^{Wa!iSl7c51<2 z^|WzIpWkN|{w}wN*u)f`-*c(1=DL@D5u0#<1V~f=I`^WhjlDO0N}!Nl(!+?ul2P<) zy}_;>HDC`udXIGLJRq&+SWBHRDrVf!8}+P5VD;*T-+o-h>2HjXn3}3R-m2EaNx^@u z){Oc0ZNzyS8drr4zK$hLFoV|>v9c6~F;Z(ugkKoLh<_aaw>uJ<@kFYYkrfPYgQQry^y`zDu{ZOdG9G#_}d-1Wh z+hH?^Fq;c=W`fK**ie;9{8vTh=ffh_&Qa?vlko@I5$a2@1StgodVJ z6}8J>{kc9i;v(%*Mz&XLyI6YzPy=t0AJ;u0DzN4VIgYoX%*?Dq;(440KWgF)ajPzO z7n`?z8N8MFY+9a#<0OJsb_s~O|M`d~Ej}R0E#8H!tprJPmSBS$k59fYu)%f%rShfh7}PuAS>0oHM2NT|P4u z=Vr6DT*sAZ)Jm24lR{RE|56GVlFOcd~Z&Y^MzkkBMMwXwmKPTNGhV)lof~lc zd0RsbZ`x^azErY0mH%cOGC9wFsvGT%l@4##sQeZT*r^L*;PaB(&IhRJhusLQn3j`B zMwPc-(=edQd(*+eL|{VqF7;R_$PrPW{5bCsWV>@~5QXPSlpaRnu%L6ED}?luIUrj06v#_u$~( z(o{b;L2PW$!Q^+YfTP~s884df7l=Qr)#kKJP1gM&dyD6F;(`VL4TEO##0dCwP!8|^ ze&fcdUo8kK_Pu>11(?V7cV{x^^d>Bmt;Rzu))5d0)qeskStO4zNc z?JymsQqZ&Fbma7t*j^x1n8d^%=CZrzMl|f|7jaVvE^BhKqWOXINN0YQ-W6d);a`K9 zCB83^aQ){+D~7(b4Xp#EyQ+4#M-gLM zluldk|5Nsr7lA48md*Y;>16nDg!%+%<^=p~mN*Gf~uq zs`Fm6EiST5sk~014d)nda+WoYeLO|DDiZzJKi1&p?-A&LB}hG>CH2|Y<%Z7@-9xmiSSn`mNt`&WBtIig;U_25e>JZwz@q6Yir z;OU*a8Awd&&+6$4*am5pFBHfsYr*N@|LxA^c%TQoyg}Rvw;2ADzmjbPxgAeoqV`)2mScjPRUNJygGV`} za|uw3t6?N<`@3nJIkS6SdBhTQ8!I|7ojLF8Ue}LTvMt#uMtn}25!px7(E_{SQ|=F& z<)q#w&kZZ}Idc!n;^1=;wGPTnF2FIT%X*6>?qr6Sy6VXpA!N7mU$TzTQ@zUeuq_Vp zL6+JNrD=~_ycc^2BH&XPiQgrTF!vYY{phgxB9j;$Ru~?w4h6ivK4MTh zN*!ZQC&#kBVR(#wM>|b{Yz>PVaCx3ZK-x!U_8@@1%HR46Irh%yMcnyrA{(`e03MkS zKk#KeL3NVE^{jU8$4Ohj>s*dM4g+C|ESP75CnO*TnF zx?=InEvs$*Z`@(XMBbLF69v3-r#C1FOUMX!{Bk@L2Gt-n#01tAOqzIX7HB9L=ua^~ zySg~{tun1sjZ)1LgkLtKMXD@o{P+f67sF*=$ZsR~-e~}LSVPgm-{03;DWhK@6m9zc zB)^7^C>NWYUj>qfCBQ$CkBfj2Ll2OOeooLASdBu7QikKcw7Mt zbS6g}U$;=Gv4g4E`uNsxJl=GFUmP7BJ!rtPblm1xyxoSs^?(JsfTwmGa`78-5gKw? z*W^f3rAc^#!1AM=oSu9OxJ}4u_%2c_Tl4Svv`WzD=-o4ysWy~sq^YEBM0;KI*&o88mfD_b?a-77Dv&y z8t-nne5j7Il<%>xF6DiFNkP9~S*y7z1iO@3VyrThEr4`G{{ zRJ{wdT$|k%moVm3K`*J+7ZwQVNJ^u@8{!VV(E9)uE$Xch>wyo+5=-gQ)Q&(rg=@UR z0SDOKR}%R4A2)%pXbZU58XYc-s0+GC6eV0>9j0G~ZbLzmKgRyZ4Zyc28&iy0doZL* zgP8?(Z=*~Yai6!~I9FCy7W^;QXN_T1fAjo+Kf!ukB`N`|44GXS4`nw;HTZ9BfMC>T z88*2d3`$Y#*k5r|0MArna`W=x4}RqwBsg16`Q_XS%Nk2fgPx(ch)= zg(C6}h+zht=&vnw#=<1`&l4f$f|v4FUN|8nXCdfFUh)^D0h7xW_TRU%ni^)Ilso#TgK_oyssGWwq-CS0N}>`L+qP-@iOxB<}hnIi`x+7dhn|x;Nzuh zz1emlhuauWcQo(>I`o+udOz_{kreP^}Y3ax7ukv1`eg!{P4kuDucX!zg9|R_#R@&Ee&$7XAcMz4d^?ZxPS_@>Rm&Z9g#SL7Q-{Z$bBG# zalMh#VJSmK2cx@+^QQ=~Lw5MtA-V^B{5M{-1cGp0Gps6nGu{rUah*u_LKlXSx=(E) zj|zVvb6@>-w;VEYg}|s|e}J%x$DPBEb|obXnAvnfLa#6Jvu4D4BC98L{deu>xH2?# z+C*Lf`bq{_;CJ{pX+kHPi8x{7d|!^|Ire079Tv7K5rfNpwt8+(d129V%L|#Ok7$M@ zXdy9qNRlYT6y&;e2ijp+Y0d5m3;)+V!1h>4=5^~9gmuaj0MedT>46_H)~1}e|6I?V z^h!?0LpGm571;kcQ}6)4U13mfC73VE=tf$2CZ00sLSPywX_V1ELp7CF_*lN(iCo3! zuU-92Sz)i1ass>_$%C!EMse-baHX${p)Ur-&V z5rrOn$`Xpo5#rY>8|p`EoSysXP?g-iBtd}s<*gNUANDTN?~$?h3#>q1mKuJ;CPLNj zD)bB4DhE|WT;$%T=7-GPe%tJ{GkYMy)wQlDR!TcelBaBtz=p?)v_?b6~3RjL6+rX1t z6Pyfr5M1c9oueid2rEpFzF-p+Hcf8nEWJisjs--{<^p$N6qNSS(;2Sj+^b#>Y)=Tn z8IR{CEMTn)uSy9#@1vC4RKzBTo@MT&%Wuko*!U^1Qk7I%)J|1=m*B~>m(Q|0c-T|y z#$o1BLvhHpKU@CF78iCP_XrP2c-V8$Kl#K0||%0VTF~W1PGA$I!H4 z&9#%xZr%<~JCWP19K#&ZW@*n1@kH*EnCt8DjQXPUvrP$5o7kW5--6!>#Qk+68d~BJ z@m^$>7`Jk!yGrLVTE)dRjBSk!X6&|g2b*w{!Pwe3ALPTy;C_{5{kJ0r!;VB~Y@lSt zh;L9!8;_6wsg2f%ic@U=5wQwejo;s&mkopf+Ye(L?mOBY*()cWNT`UVs45qxw}pry1C_CXXYo&#qz zD9j!?c1qc43yitT7`sFW&Ku{sXO4jSd8fkqINHqm0eIz38DM3RfH z>ZV4qLj+wb95N^(4_VuFSAc7??s^dLdjuIwHtKT2OEWlj^=W1f+j2IBC*0gpY%(C_ zT0&52(}k7%;b8d_LINM^=`cQOqB2o4Xc?7fic}tq%)qw}RaUCYNB$1<0zb{C{6e@uL1_re`BxOc51@KKVxppTDjvAl%gPdoCuYBk9%I6=ipD{y2_H;4e0^RZOm|P`! z0>;KeeVAO^TfD@hl&yLXbS>^eG*>tphp2Ib>?t7#X)RK>P87SCOj)d?eiHz5|j+801A_@ zEJZzy8##W3>#2TwzrDM!M%mlLPs+#tUcakH7qQ6!xrwm_?q|Q|fzpR$B#m`Wgztol zy806O!rQG5MtS}165jX>PHo~6SurW%eeE(arw{OOp*5y5;@>6UvCe6u$g*gC7;o^MrO60lgpL+EYoUQ0b;xa@sWa>IWv3$( zbqlANRk$+H-Wzr+Ey#W(9+GQkISBJZSj|Bf$Z{nr+K;{OrU^s7pMVAxMvpzUhR5qs zTRLkq8WmU8Qr~#1(%>D>xl_!0fR{!_-DhkZj!EPzxNF;pBafy(WYU_cv3|tcKjuh= zfA9dCuEeWKmHahIEL~Ms2h>3o_^E8&MMjGJ2@4DvMx4>kQK$9stas8R3y$^Y^viE9 z3HCur4Of^cso}BrKiAyanA~vSb;P>yMgUExa=9j#edDPUD{+Hk$Ve9Vior7bPY@y$ zxAsR=oat4HqnJq)V(x1Tw8$(S z{x67Rp-1s=I;1fN{9_p?@Z&3us~SgR$rGRzafKeoceK}75>mQ zaf`oT?bb?+<|#Rj6jmZL6is>qg8Rrq=NJ>d$HyT5Jyvs5{Nx}YXlTKqNE5q%r$k5t zHEn!9^gp4674XW|aiY8oD^SHX~s2b>kTyHKAvMU{I&52ijk($IvLViZ(U7SGE zil4S3xk6z6xyk}IW|U!Ri77%+ERl>%-|zePy z`TW85YAkykiY|3jH!!#CF$DAL${?{0m=;n?8s4 zpopo%A2T%a`~^lC_qFrsE6%GOqz4dNGc2?5!qM;38!}j%YYWlqy8Lt@AoMj5al}KrmCNu2PGA8+dhDdZmf}2Yw)1m$B=*1 z#NkMl5dSAWW%LOJyKfI!G*mJeZw(WmImt)6o>?-EK6|XTGoh4=T&1*`df)~BRU~B$ zv?BIrGA)feagVnrbBh-Xo#&FrLq>bw{wDq*c~AMoOB;W}Q!YbNcQPm|Ka-L@zir9K>a`6fjnCA%|C07U;xle0sYt7}Q#e7jCZW;u9$dWhF$4QATx z>t_T%x~(6+OL5+?Jdqu2Smg-(fx!BOxd@v99*A5vT~uP8Uikc2NAG`c#j>KmCO#_; zr3pn4*#?;j#qF{AP`dQ@OY3jb9u2}^1EGy5S-R`52Ii?(DUDM6$_q!GjMly^_g6ME zcPBm2OgVsl(T8;yWfEa_DURk%h}KbQ+4tZa*_l<%XYt|hv?&nEq@|1~Y%=Z=-kF%d zvcuJ%<{DgX>T5{A55pXH4RH{#+_TN!SS`d{>e^CRerHWKw{+ zbFW>BEn33TK|8;Zm}cMR^B$>_;On%cb;=J^NuBRURfdEZR%}J4%~~Q zzj7+6fpkHPRXNL^#+;8X{Z6|)xQccB?M)|vPOpO%#q#(ZYyJ~=EJ-d2BZ!<=VtPq% zTXPSw;!zXRYniotK<>Nw(a+F|RIHC_y59xlli=D8@e~LuvS}1~^mj3jWc}AT@{5Q} z=P)kO33wxJ)M*$7pD`oEjEvzh<*{S8_Z*bYj)s8TVvj1ubT8wEroheUQv%1Vl%I}>Q?$NtHVG`iCJId=bo?YNZGcD z6_k`pcm#X3Li4#h4A%h4Q~&$G2j+X|Yp0TJ#i?=gkKd;n&MP)iJC3#wR}z&DM(EUaRBmUcKtRTh=^hmLL4( z6H~;0*}c{DbbBBWIFtgx@25pj{WbRcWi?8ge$U~W-_e1ehu*w+bGeKelTC>hl`eUz zr4i=r6rZu=3oV_>hjJRngJ*Qwrrx9ed*Fr37tjq z{N~OTOgve34!i3%?8P-_5YghAH$Zb3x|W4)&@_7OmFb8e1)*l-w@qf{spaKt1GoCG z{blN;-W`gK#w!LHtG!#gs!xWF$UIRD;0}b%{*`_8RIACk2FhaKsy;FI!P1HDxBZ&L zE{kaSXZfUOe4G(eeg;ZP7gx*_>{!$Whjku&aj(HnT(`)Ct4-9Jd!!G>c}smUOxg#Y zEtRUcC&y!kZxV}Qkbm^+9!xfgM4wFd}J<*?$?3HSP$zt_7 zX(+#I>;EiRxhvNN<=Chxz-cABjQ9@FhwzhR#Kl1+J$bDWqz5$rnagzYsv_hy@-ckZ zhSL!Oz1D||^!+L_pA+8^7`_)I;h(gYAGSuE(Oq5aNX*o308s;GxH@3?w z6OSy9Ow*v%Iu2d-*hYRBYg#EOn5t%;U1j?yO!GeI7=#Z8a8*3Pxa!C~JX!0*@mr&9gJj4#DCPV82VbefHs4(7(5P#wEWu+h z)vo%Y{zLDpF6F%VoIRrIY$jaz51XisChsEb%6XySE**}4sdYB3FDZm6Pb(cpsz&W4 zRb$+-df3UG2kd1cyD{J-z0XgAt)^U6mBpDs2|0}4jLjXMcD)Vzbv!2?_)7BHEj9}b zPLnc2d@ib@3*@5hA6P>8{i-#s_qAaw8lSuk~TmFAE)IdF4ryfy%Xxq{+<1>UboL( z6E5c{jw>P;+*W=DmKIKb`vq>b0Sm+@n5qm0C47F#7frqyr<&LuDTKz<7Cm5fx4^5` zS^nWE45efFw9~llNX=jDMTwJx=r>)y*lhL|E+pPv{{((ZN9X(GR7H(_g7KARU)nge zdsy@s;2!Uel)d{jgHl?&`?UM8?$l!)m`YnW;_A|RB_-lz2^<5Mm7XT<*~J{o79j$j zw!XkOEnPSqGfoSaln&iCHoM>LN%#ic)uwQ5hD-_bKg48o-10Pe9lZ#fyofA%PIV}& z8a8K~I!5nN?s=_b_#s1jRLWb^#``yn?Z7-{s^=$TPRP^Bk5=^@U&X^8h0HbkD9Eb6 zKMZ!Je#1R{<;Q2g`I{=@I5|W6M{13R_ia&37_AKT#AeeYTtsVQF=J}`XJwF2Xb?`0 z>VR$XdZq!!-9CYr^k!L|mXa3m?b3#|=AClrsWUF+16-$mFcBu3qiGbNKJ@m1m84rx z1w*?d>JM|OEi`D$^{A`88^KOADLhaPugKg_?s7(kfNZByk)~ zloef~_%Z)|T}BzHU5Hyo1V&RNYyf&2s2*6Pp!L7XGC*WWh3}5D%Nex5l4L83@S)=B z>o+#`T}Kyw%Q<~!Bun~5{|WtX`J^J-gEEC2I?VH+x=5{))BwVfdoiD9lYQ?Q+l8|K zBL*p9nD;*=rRo|Vv@kVSs?32}(2!dG@1s1D%96?%fV;!jH9~8?)VFygtl$3Mx;|Dk zQL4&rBdEu~Y#aQjJo$iy-2bnJjUroTt^c>ge@_<{`#^i}f`5&zdgTE?KJwBkQdJTr G!T$qvxCPw+ literal 0 HcmV?d00001 diff --git a/cs235/lab04/main.cpp b/cs235/lab04/main.cpp new file mode 100644 index 0000000..5afab12 --- /dev/null +++ b/cs235/lab04/main.cpp @@ -0,0 +1,14 @@ +#include +#include +#include "expman.h" + +using namespace std; + +int main() { + expman e; + assert(e.isBalanced("{ { [ ( ) ] } ( ) }") == true); + assert(e.isBalanced("{ [ ) }") == false); + assert(e.isBalanced("{ ( [ ] } )") == false); + assert(e.isBalanced("{") == false); + return 0; +} diff --git a/cs235/lab04/pwnd.c b/cs235/lab04/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab04/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/lab04/setup.py b/cs235/lab04/setup.py new file mode 100644 index 0000000..d65f10e --- /dev/null +++ b/cs235/lab04/setup.py @@ -0,0 +1,11 @@ +from setuptools import setup, find_packages + +setup( + name = 'cs235lab04', + version = '0.0dev', + packages = find_packages(), + author = "Stephen M. McQuay", + author_email = "stephen@mcquay.me", + url = "http://bitbucket.org/smcquay/cs235", + license = "WTFPL", + ) diff --git a/cs235/lab04/shunting/__init__.py b/cs235/lab04/shunting/__init__.py new file mode 100644 index 0000000..0f93a76 --- /dev/null +++ b/cs235/lab04/shunting/__init__.py @@ -0,0 +1,23 @@ +from collections import deque + + +op_prec = { + '*': 3, + '/': 3, + '%': 3, + '+': 2, + '-': 2, +} + + +def shunt(tokens): + tokens = deque(tokens) + output = deque() + operators = deque() + while tokens: + token = tokens.pop() + if token.isdigit(): + output.append(token) + elif token in op_prec: + operators.append(token) + return output, operators diff --git a/cs235/lab04/shunting/test_shunt.py b/cs235/lab04/shunting/test_shunt.py new file mode 100644 index 0000000..21678d6 --- /dev/null +++ b/cs235/lab04/shunting/test_shunt.py @@ -0,0 +1,10 @@ +import unittest + +from shunting import shunt + + +class ShuntTest(unittest.TestCase): + + def test_simple_add(self): + o, s = shunt(['4', '+', '3']) + self.assertEquals(o, ['4', '3', '+']) diff --git a/cs235/lab04/test.cc b/cs235/lab04/test.cc new file mode 100644 index 0000000..1b7b657 --- /dev/null +++ b/cs235/lab04/test.cc @@ -0,0 +1,117 @@ +#include +#include +#include +#include +#include +#include +#include "expman.h" + +ostream & operator<<(ostream & os, stack & s) { + while(not s.empty()) { + os << "'" << s.top() << "', "; + s.pop(); + } + return os; +} + +int main() { + stringstream oss; + + auto r1 = parse_expression(string("1 + 40 + 3")); + oss << r1; + assert(oss.str() == "'3', '+', '40', '+', '1', "); + oss.str(""); + + auto r2 = parse_expression(string(" 1 + 40 + 3")); + oss << r2; + assert(oss.str() == "'3', '+', '40', '+', '1', "); + oss.str(""); + + auto r3 = parse_expression(string("1 + 40 + 3 ")); + oss << r3; + assert(oss.str() == "'3', '+', '40', '+', '1', "); + oss.str(""); + + auto r4 = parse_expression(string(" 1 + 40 + 3 ")); + oss << r4; + assert(oss.str() == "'3', '+', '40', '+', '1', "); + oss.str(""); + + auto r5 = parse_expression(string(" ")); + oss << r5; + assert(oss.str() == ""); + oss.str(""); + + auto r6 = parse_expression(string(" ")); + oss << r6; + assert(oss.str() == ""); + oss.str(""); + + auto r7 = parse_expression(string("")); + oss << r7; + assert(oss.str() == ""); + oss.str(""); + + auto r8 = parse_expression(string("1")); + oss << r8; + assert(oss.str() == "'1', "); + oss.str(""); + + { + stack s; + s.push("a"); + s.push("b"); + s.push("c"); + auto s2 = reverse_stack(s); + assert(s2.top() == "a"); + s2.pop(); + assert(s2.top() == "b"); + s2.pop(); + assert(s2.top() == "c"); + s2.pop(); + } + + assert(precedence("*") == precedence("/")); + assert(precedence("+") == precedence("-")); + assert(precedence("*") > precedence(")")); + assert(precedence("(") < precedence(")")); + assert(precedence(")") < precedence("/")); + + assert(is_int("42") == true); + assert(is_int("6y") == false); + assert(is_int("+") == false); + assert(is_int("4 + 2") == false); + assert(is_int("$") == false); + assert(is_int("") == false); + + assert(is_valid_token("3") == true); + assert(is_valid_token("3 + 3") == false); + assert(is_valid_token("") == false); + assert(is_valid_token("-") == true); + assert(is_valid_token("*") == true); + assert(is_valid_token("3 + a") == false); + assert(is_valid_token("$") == false); + assert(is_valid_token("ahugegiantstring") == false); + + assert(is_valid_expression("3") == true); + assert(is_valid_expression("3 + 3") == true); + assert(is_valid_expression("3 / 4 + 2 * 9") == true); + assert(is_valid_expression("3 - 0") == true); + assert(is_valid_expression("a") == false); + assert(is_valid_expression("3 + a") == false); + assert(is_valid_expression("3 $ 3") == false); + assert(is_valid_expression("suckmygiantballs") == false); + assert(is_valid_expression("40 * ( 2 + 4 - ( 2 + 2 ) ) - 4 / 5 / 6") == true); + + assert(is_paren("(") == true); + assert(is_paren("1") == false); + assert(is_paren("a21)") == false); + assert(is_paren("{") == true); + assert(is_paren(")") == true); + assert(is_paren("$") == false); + assert(is_paren("!%#") == false); + + expman e; + string b = "3 + 3"; + // assert(e.infixToPostfix(b) == "3 3 +"); +} diff --git a/cs235/lab04/test1.txt b/cs235/lab04/test1.txt new file mode 100644 index 0000000..62a82b2 --- /dev/null +++ b/cs235/lab04/test1.txt @@ -0,0 +1,2 @@ +3 + 4 +3 + 4 * 2 diff --git a/cs235/lab04/tests/part1.txt b/cs235/lab04/tests/part1.txt new file mode 100644 index 0000000..aa67307 --- /dev/null +++ b/cs235/lab04/tests/part1.txt @@ -0,0 +1,4 @@ +{ { [ ( ) ] } ( ) } +{ [ ) } +{ ( [ ] } ) +{ \ No newline at end of file diff --git a/cs235/lab04/tests/part2.txt b/cs235/lab04/tests/part2.txt new file mode 100644 index 0000000..caff931 --- /dev/null +++ b/cs235/lab04/tests/part2.txt @@ -0,0 +1,4 @@ +2 + a +3 $ 3 +40 * ( 2 + 4 - ( 2 + 2 ) ) - 4 / 5 / 6 +4 * ( 2 + 4 - ( 2 + ) ) - 4 / 5 diff --git a/cs235/lab04/tests/part3.txt b/cs235/lab04/tests/part3.txt new file mode 100644 index 0000000..bcf1d13 --- /dev/null +++ b/cs235/lab04/tests/part3.txt @@ -0,0 +1,3 @@ +3 + 3 / +3 3 4 + +40 2 4 + 1 1 + - * 4 5 / 6 / - \ No newline at end of file diff --git a/cs235/lab04/tests/part4.txt b/cs235/lab04/tests/part4.txt new file mode 100644 index 0000000..1647f9a --- /dev/null +++ b/cs235/lab04/tests/part4.txt @@ -0,0 +1,3 @@ +40 2 4 + 1 1 + - * 4 2 / 1 / - 7 % ++ 3 4 + +4 5 2 + * 2 / \ No newline at end of file diff --git a/cs235/lab04/valgrind.supp b/cs235/lab04/valgrind.supp new file mode 100644 index 0000000..c2e5972 --- /dev/null +++ b/cs235/lab04/valgrind.supp @@ -0,0 +1,661 @@ +{ + Dynamic Linker Bug + Memcheck:Cond + fun:_dl_relocate_object + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start + obj:/lib/ld-2.6.so +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZSt6__findISt14_List_iteratorISsESsET_S2_S2_RKT0_St18input_iterator_tag + fun:_ZSt4findISt14_List_iteratorISsESsET_S2_S2_RKT0_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStltIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStltIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStltIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z12CompareListsRK10LinkedListRSt4listISsSaISsEE + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZSt6__findISt14_List_iteratorISsESsET_S2_S2_RKT0_St18input_iterator_tag + fun:_ZSt4findISt14_List_iteratorISsESsET_S2_S2_RKT0_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_Z14TestLinkedListb + fun:main +} +{ + + Memcheck:Cond + fun:_ZNKSs7compareERKSs + fun:_ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:strlen + fun:_ZNSsC1EPKcRKSaIcE + fun:_Z11generateKeyv + fun:_Z7TestBSTb + fun:main +} +{ + + Memcheck:Cond + fun:bcmp + fun:_ZNSt11char_traitsIcE7compareEPKcS2_j + fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKSbIS3_St11char_traitsIS3_ESaIS3_EESC_ + fun:_ZStneIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ + fun:_ZN3tut12_GLOBAL__N_113ensure_equalsISsSsEEvPKcRKT0_RKT_ + fun:_ZN7BSTTest7initBSTER3BST + fun:_ZN3tut11test_objectI7BSTTestE4testILi2EEEvv + fun:_ZN3tut10test_groupI7BSTTestLi50EE13run_test_seh_EMNS_11test_objectIS1_EEFvvERNS2_11safe_holderIS4_EERSs + fun:_ZN3tut10test_groupI7BSTTestLi50EE9run_test_ERKSt17_Rb_tree_iteratorISt4pairIKiMNS_11test_objectIS1_EEFvvEEERNS2_11safe_holderIS7_EE + fun:_ZN3tut10test_groupI7BSTTestLi50EE8run_nextEv + fun:_ZNK3tut11test_runner23run_all_tests_in_group_ESt23_Rb_tree_const_iteratorISt4pairIKSsPNS_10group_baseEEE + fun:_ZNK3tut11test_runner9run_testsEv +} +{ + + Memcheck:Cond + fun:bcmp + fun:_ZNSt11char_traitsIcE7compareEPKcS2_j + fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKSbIS3_St11char_traitsIS3_ESaIS3_EESC_ + fun:_ZNK10LinkedList4FindERKSsP6LLNode + fun:_ZN3tut11test_objectI14LinkedListTestE4testILi8EEEvv + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE13run_test_seh_EMNS_11test_objectIS1_EEFvvERNS2_11safe_holderIS4_EERSs + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE9run_test_ERKSt17_Rb_tree_iteratorISt4pairIKiMNS_11test_objectIS1_EEFvvEEERNS2_11safe_holderIS7_EE + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE8run_nextEv + fun:_ZNK3tut11test_runner23run_all_tests_in_group_ESt23_Rb_tree_const_iteratorISt4pairIKSsPNS_10group_baseEEE + fun:_ZNK3tut11test_runner9run_testsEv + fun:_Z3runRKSsi + fun:main +} +{ + + Memcheck:Cond + fun:bcmp + fun:_ZNSt11char_traitsIcE7compareEPKcS2_j + fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKSbIS3_St11char_traitsIS3_ESaIS3_EESC_ + fun:_ZSt6__findISt14_List_iteratorISsESsET_S2_S2_RKT0_St18input_iterator_tag + fun:_ZSt4findISt14_List_iteratorISsESsET_S2_S2_RKT0_ + fun:_ZN3tut11test_objectI14LinkedListTestE4testILi9EEEvv + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE13run_test_seh_EMNS_11test_objectIS1_EEFvvERNS2_11safe_holderIS4_EERSs + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE9run_test_ERKSt17_Rb_tree_iteratorISt4pairIKiMNS_11test_objectIS1_EEFvvEEERNS2_11safe_holderIS7_EE + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE8run_nextEv + fun:_ZNK3tut11test_runner23run_all_tests_in_group_ESt23_Rb_tree_const_iteratorISt4pairIKSsPNS_10group_baseEEE + fun:_ZNK3tut11test_runner9run_testsEv + fun:_Z3runRKSsi +} +{ + + Memcheck:Cond + fun:bcmp + fun:_ZNSt11char_traitsIcE7compareEPKcS2_j + fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKSbIS3_St11char_traitsIS3_ESaIS3_EESC_ + fun:_ZN3tut11test_objectI14LinkedListTestE4testILi9EEEvv + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE13run_test_seh_EMNS_11test_objectIS1_EEFvvERNS2_11safe_holderIS4_EERSs + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE9run_test_ERKSt17_Rb_tree_iteratorISt4pairIKiMNS_11test_objectIS1_EEFvvEEERNS2_11safe_holderIS7_EE + fun:_ZN3tut10test_groupI14LinkedListTestLi50EE8run_nextEv + fun:_ZNK3tut11test_runner23run_all_tests_in_group_ESt23_Rb_tree_const_iteratorISt4pairIKSsPNS_10group_baseEEE + fun:_ZNK3tut11test_runner9run_testsEv + fun:_Z3runRKSsi + fun:main +} diff --git a/cs235/lab05/Factory.cpp b/cs235/lab05/Factory.cpp new file mode 100644 index 0000000..c034b73 --- /dev/null +++ b/cs235/lab05/Factory.cpp @@ -0,0 +1,22 @@ +#include "Factory.h" +#include "station.h" +//You may add #include statments here +using namespace std; + +/* + Unlike all other documents provided, you may modify this document slightly (but do not change its name) +*/ +//======================================================================================= +/* + createStation() + + Creates and returns an object whose class extends StationInterface. + This should be an object of a class you have created. + + Example: If you made a class called "Station", you might say, "return new Station();". +*/ +StationInterface* Factory::createStation() +{ + return new station(); +} +//======================================================================================= diff --git a/cs235/lab05/Factory.h b/cs235/lab05/Factory.h new file mode 100644 index 0000000..76bf3c2 --- /dev/null +++ b/cs235/lab05/Factory.h @@ -0,0 +1,21 @@ +#include "StationInterface.h" +#pragma once +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + createStation() + + Creates and returns an object whose class extends StationInterface. + This should be an object of a class you have created. + + Example: If you made a class called "Station", you might say, "return new Station();". +*/ +class Factory +{ +public: + static StationInterface* createStation(); +}; + +//======================================================================================= diff --git a/cs235/lab05/Makefile b/cs235/lab05/Makefile new file mode 100644 index 0000000..b72e296 --- /dev/null +++ b/cs235/lab05/Makefile @@ -0,0 +1,35 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=Factory.o station.o deque.o ordeque.o irdeque.o queue.o linkedlist.o node.o stack.o pwnd.o ignoreme.a +EXE=main +all: pwnd.o $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +main.o: main.cpp Factory.o ordeque.o irdeque.o deque.o queue.o station.o linkedlist.o node.o stack.o pwnd.o ignoreme.a +Factory.o: Factory.cpp Factory.h +station.o: station.cpp station.h +linkedlist.o: linkedlist.cpp linkedlist.h +stack.o: stack.cpp stack.h +queue.o: queue.cpp queue.h +deque.o: deque.cpp deque.h +irdeque.o: irdeque.cpp irdeque.h +ordeque.o: ordeque.cpp ordeque.h +node.o: node.cpp node.h +pwnd.o: pwnd.c + +run: main + ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -rvf *.dSYM + +drun: main + gdb ./main + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/lab05/Run_Test_Driver.sh b/cs235/lab05/Run_Test_Driver.sh new file mode 100755 index 0000000..880a4b4 --- /dev/null +++ b/cs235/lab05/Run_Test_Driver.sh @@ -0,0 +1,14 @@ +#!/bin/bash +EXE=dont_run_me + +g++ -o$EXE Student_Code/*.cpp ignoreme.a +if (( $? )) ; +then + echo Compilation Failed; + read -p "Press enter to exit"; +else + chmod 755 $EXE; + ./$EXE; + rm ./$EXE + read -p "Press any key to exit..." +fi; \ No newline at end of file diff --git a/cs235/lab05/StationInterface.h b/cs235/lab05/StationInterface.h new file mode 100644 index 0000000..b21d171 --- /dev/null +++ b/cs235/lab05/StationInterface.h @@ -0,0 +1,160 @@ +#pragma once +#include +#include +#include +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +class StationInterface +{ + public: + StationInterface(){} + virtual ~StationInterface(){} + + //Part 1-------------------------------------------------------------- + /** + * Let another car arrive at the station and become the current car. + * Do not allow a new car to arrive if any of the following conditions apply: + * 1. There is already a current car + * 2. The new car's ID already exists in any structure + * 3. The new car's ID is negative + * + * @param car the ID of the car arriving at the station + * @return true if the car successfully arrived; false otherwise + */ + virtual bool addToStation(int car) = 0; + + /** + * Returns the ID of the current car. + * Return -1 if there is no current car. + * + * @return the ID of the current car; -1 if there is no current car + */ + virtual int showCurrentCar() = 0; + + /** + * Removes the current car from the station. + * Does nothing if there is no current car. + * + * @return true if the current car successfully left; false otherwise + */ + virtual bool removeFromStation() = 0; + + //Part 2-------------------------------------------------------------- + /** + * Adds the current car to the stack. After this operation, there should be no current car. + * Does nothing if there is no current car or if the stack is already full. + * + * @return true if the car is successfully added to the stack; false otherwise + */ + virtual bool addToStack() = 0; + + /** + * Removes the first car in the stack and makes it the current car. + * Does nothing if there is already a current car or if the stack already empty. + * + * @return true if the car is successfully removed from the stack; false otherwise + */ + virtual bool removeFromStack() = 0; + + /** + * Returns the ID of the first car in the stack. + * + * @return the ID of the first car in the stack; -1 if the stack is empty + */ + virtual int showTopOfStack() = 0; + + /** + * Returns the number of cars in the stack. + * + * @return the number of cars in the stack + */ + virtual int showSizeOfStack() = 0; + + //Part 3-------------------------------------------------------------- + /** + * Adds the current car to the queue. After this operation, there should be no current car. + * Does nothing if there is no current car or if the queue is already full. + * + * @return true if the car is successfully added to the queue; false otherwise + */ + virtual bool addToQueue() = 0; + + /** + * Removes the first car in the queue and makes it the current car. + * Does nothing if there is already a current car or if the queue already empty. + * + * @return true if the car is successfully removed from the queue; false otherwise + */ + virtual bool removeFromQueue() = 0; + + /** + * Returns the ID of the first car in the queue. + * + * @return the ID of the first car in the queue; -1 if the queue is empty + */ + virtual int showTopOfQueue() = 0; + + /** + * Returns the number of cars in the queue. + * + * @return the number of cars in the queue + */ + virtual int showSizeOfQueue() = 0; + + //Part 4-------------------------------------------------------------- + /** + * Adds the current car to the deque on the left side. After this operation, there should be no current car. + * Does nothing if there is no current car or if the deque is already full. + * + * @return true if the car is successfully added to the deque; false otherwise + */ + virtual bool addToDequeLeft() = 0; + + /** + * Adds the current car to the deque on the right side. After this operation, there should be no current car. + * Does nothing if there is no current car or if the deque is already full. + * + * @return true if the car is successfully added to the deque; false otherwise + */ + virtual bool addToDequeRight() = 0; + + /** + * Removes the leftmost car in the deque and makes it the current car. + * Does nothing if there is already a current car or if the deque already empty. + * + * @return true if the car is successfully removed from the deque; false otherwise + */ + virtual bool removeFromDequeLeft() = 0; + + /** + * Removes the rightmost car in the deque and makes it the current car. + * Does nothing if there is already a current car or if the deque already empty. + * + * @return true if the car is successfully removed from the deque; false otherwise + */ + virtual bool removeFromDequeRight() = 0; + + /** + * Returns the ID of the leftmost car in the deque. + * + * @return the ID of the leftmost car in the deque; -1 if the deque is empty + */ + virtual int showTopOfDequeLeft() = 0; + + /** + * Returns the ID of the rightmost car in the deque. + * + * @return the ID of the rightmost car in the deque; -1 if the deque is empty + */ + virtual int showTopOfDequeRight() = 0; + + /** + * Returns the number of cars in the deque. + * + * @return the number of cars in the deque + */ + virtual int showSizeOfDeque() = 0; +}; diff --git a/cs235/lab05/StationInterfaceExtra.h b/cs235/lab05/StationInterfaceExtra.h new file mode 100644 index 0000000..8ceb820 --- /dev/null +++ b/cs235/lab05/StationInterfaceExtra.h @@ -0,0 +1,98 @@ +#pragma once +#include "StationInterface.h" +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +class StationInterfaceExtra : public StationInterface +{ + public: + StationInterfaceExtra(){} + virtual ~StationInterfaceExtra(){} + + //Input-Restricted Deque---------------------------------------------- + /** + * Adds the current car to the IRDeque on the left side. After this operation, there should be no current car. + * Does nothing if there is no current car or if the IRDeque is already full. + * + * @return true if the car is successfully added to the IRDeque; false otherwise + */ + virtual bool addToIRDequeLeft() = 0; + + /** + * Removes the leftmost car in the IRDeque and makes it the current car. + * Does nothing if there is already a current car or if the IRDeque already empty. + * + * @return true if the car is successfully removed from the IRDeque; false otherwise + */ + virtual bool removeFromIRDequeLeft() = 0; + + /** + * Removes the rightmost car in the IRDeque and makes it the current car. + * Does nothing if there is already a current car or if the IRDeque already empty. + * + * @return true if the car is successfully removed from the IRDeque; false otherwise + */ + virtual bool removeFromIRDequeRight() = 0; + + /** + * Returns the ID of the leftmost car in the IRDeque. + * + * @return the ID of the leftmost car in the IRDeque; -1 if the IRDeque is empty + */ + virtual int showTopOfIRDequeLeft() = 0; + + /** + * Returns the ID of the rightmost car in the IRDeque. + * + * @return the ID of the rightmost car in the IRDeque; -1 if the IRDeque is empty + */ + virtual int showTopOfIRDequeRight() = 0; + + /** + * Returns the number of cars in the IRDeque. + * + * @return the number of cars in the IRDeque + */ + virtual int showSizeOfIRDeque() = 0; + + //Output-Restricted Deque--------------------------------------------- + /** + * Adds the current car to the ORDeque on the left side. After this operation, there should be no current car. + * Does nothing if there is no current car or if the ORDeque is already full. + * + * @return true if the car is successfully added to the ORDeque; false otherwise + */ + virtual bool addToORDequeLeft() = 0; + + /** + * Adds the current car to the ORDeque on the right side. After this operation, there should be no current car. + * Does nothing if there is no current car or if the ORDeque is already full. + * + * @return true if the car is successfully added to the ORDeque; false otherwise + */ + virtual bool addToORDequeRight() = 0; + + /** + * Removes the leftmost car in the ORDeque and makes it the current car. + * Does nothing if there is already a current car or if the ORDeque already empty. + * + * @return true if the car is successfully removed from the ORDeque; false otherwise + */ + virtual bool removeFromORDequeLeft() = 0; + + /** + * Returns the ID of the leftmost car in the ORDeque. + * + * @return the ID of the leftmost car in the ORDeque; -1 if the ORDeque is empty + */ + virtual int showTopOfORDequeLeft() = 0; + + /** + * Returns the number of cars in the ORDeque. + * + * @return the number of cars in the ORDeque + */ + virtual int showSizeOfORDeque() = 0; +}; diff --git a/cs235/lab05/deque.cpp b/cs235/lab05/deque.cpp new file mode 100644 index 0000000..39326f9 --- /dev/null +++ b/cs235/lab05/deque.cpp @@ -0,0 +1,60 @@ +#include "deque.h" + +bool deque::addToDequeLeft(int id) { + if(in_deque(id)) { + return false; + } + l.insertHead(id); + return true; +} + +bool deque::addToDequeRight(int id) { + if(in_deque(id)) { + return false; + } + l.insertTail(id); + return true; +} + +int deque::removeFromDequeLeft() { + int id = l.at(l.size() - 1); + l.remove(id); + return true; +} + +int deque::removeFromDequeRight() { + int id = l.at(0); + l.remove(id); + return false; +} + +int deque::showTopOfDequeLeft() { + if(l.size() == 0) { + return -1; + } + int left = l.at(l.size() - 1); + return left; +} + +int deque::showTopOfDequeRight() { + if(l.size() == 0) { + return -1; + } + int right = l.at(0); + return right; +} + +int deque::showSizeOfDeque() { + return l.size(); +} + +bool deque::in_deque(int id) { + node* node_ptr = l.head; + while(node_ptr != NULL) { + if(node_ptr->id == id) { + return true; + } + node_ptr = node_ptr->next; + } + return false; +} diff --git a/cs235/lab05/deque.h b/cs235/lab05/deque.h new file mode 100644 index 0000000..a1b29e0 --- /dev/null +++ b/cs235/lab05/deque.h @@ -0,0 +1,18 @@ +#ifndef __DEQUE_H__ +#define __DEQUE_H__ + +#include "linkedlist.h" + +class deque { + public: + linkedlist l; + bool addToDequeLeft(int id); + bool addToDequeRight(int id); + int removeFromDequeLeft(); + int removeFromDequeRight(); + int showTopOfDequeLeft(); + int showTopOfDequeRight(); + int showSizeOfDeque(); + bool in_deque(int id); +}; +#endif diff --git a/cs235/lab05/irdeque.cpp b/cs235/lab05/irdeque.cpp new file mode 100644 index 0000000..505cb06 --- /dev/null +++ b/cs235/lab05/irdeque.cpp @@ -0,0 +1,52 @@ +#include "irdeque.h" + +bool irdeque::addToIRDequeLeft(int id) { + if(in_irdeque(id)) { + return false; + } + l.insertHead(id); + return true; +} + +bool irdeque::removeFromIRDequeLeft() { + int id = l.at(l.size() - 1); + l.remove(id); + return true; +} + +bool irdeque::removeFromIRDequeRight() { + int id = l.at(0); + l.remove(id); + return false; +} + +int irdeque::showTopOfIRDequeLeft() { + if(l.size() == 0) { + return -1; + } + int left = l.at(l.size() - 1); + return left; +} + +int irdeque::showTopOfIRDequeRight() { + if(l.size() == 0) { + return -1; + } + int right = l.at(0); + return right; +} + +int irdeque::showSizeOfIRDeque() { + return l.size(); +} + +bool irdeque::in_irdeque(int id) { + node* node_ptr = l.head; + while(node_ptr != NULL) { + if(node_ptr->id == id) { + return true; + } + node_ptr = node_ptr->next; + } + return false; +} diff --git a/cs235/lab05/irdeque.h b/cs235/lab05/irdeque.h new file mode 100644 index 0000000..1207591 --- /dev/null +++ b/cs235/lab05/irdeque.h @@ -0,0 +1,17 @@ +#ifndef __IRDEQUE_H__ +#define __IRDEQUE_H__ + +#include "linkedlist.h" + +class irdeque { + public: + linkedlist l; + bool addToIRDequeLeft(int id); + bool removeFromIRDequeLeft(); + bool removeFromIRDequeRight(); + int showTopOfIRDequeLeft(); + int showTopOfIRDequeRight(); + int showSizeOfIRDeque(); + bool in_irdeque(int id); +}; +#endif diff --git a/cs235/lab05/linkedlist.cpp b/cs235/lab05/linkedlist.cpp new file mode 100644 index 0000000..6c0174a --- /dev/null +++ b/cs235/lab05/linkedlist.cpp @@ -0,0 +1,102 @@ +#include "linkedlist.h" + +linkedlist::linkedlist(): head(NULL) {} +linkedlist::~linkedlist(){clear();} + +void linkedlist::insertHead(int id) { + head = new node(id, head); +} + +void linkedlist::insertTail(int id) { + if(head == NULL) { + insertHead(id); + return; + } + node* node_ptr = head; + while(node_ptr != NULL) { + if(node_ptr->next == NULL) { + node_ptr->next = new node(id, NULL); + break; + } + node_ptr = node_ptr->next; + } +} + +void linkedlist::insertAfter(int id, int insertionNode) { + node* node_ptr = head; + while(node_ptr != NULL) { + if(node_ptr->id == insertionNode) { + node* temp = new node(id, NULL); + temp->next = node_ptr->next; + node_ptr->next = temp; + } + node_ptr = node_ptr->next; + } +} + +void linkedlist::remove(int id) { + node* node_ptr = head; + if(node_ptr->id == id) { + node* ptr = head; + head = head->next; + delete ptr; + return; + } + while(node_ptr != NULL) { + if(node_ptr->next == NULL) + return; + if(node_ptr->next->id == id) { + node* ptr = node_ptr->next; + node_ptr->next = node_ptr->next->next; + delete ptr; + } + node_ptr = node_ptr->next; + } +} + +void linkedlist::clear() { + node* node_ptr = head; + while(head) { + node_ptr = head; + head = head->next; + delete node_ptr; + } +} + +int linkedlist::at(int index) { + if(index < 0) { + return -1; + } + if(size() <= index) { + return -1; + } + node* node_ptr = head; + for(int i = 0; i < index; i++){ + node_ptr = node_ptr->next; + } + if(head == NULL) + return -1; + return node_ptr->id; +} + +int linkedlist::size() { + int size_of_list = 0; + if(head == NULL) { + return 0; + } + node* node_ptr = head; + while(node_ptr != NULL) { + size_of_list++; + node_ptr = node_ptr->next; + } + return size_of_list; +} + +ostream & operator<<(ostream & os, linkedlist & f) { + node* node_ptr = f.head; + while(node_ptr != NULL) { + os << node_ptr->id << ","; + node_ptr = node_ptr->next; + } + return os; +} diff --git a/cs235/lab05/linkedlist.h b/cs235/lab05/linkedlist.h new file mode 100644 index 0000000..f390c81 --- /dev/null +++ b/cs235/lab05/linkedlist.h @@ -0,0 +1,24 @@ +#ifndef __LINKEDLIST_H__ +#define __LINKEDLIST_H__ +#include +#include "node.h" + +using namespace std; + +class linkedlist { + public: + linkedlist(); + ~linkedlist(); + node* head; + bool has_a(int value); + bool is_it_zero(int value); + void insertHead(int value); + void insertTail(int value); + void insertAfter(int value, int insertionNode); + void remove(int value); + void clear(); + int at(int index); + int size(); + friend ostream & operator<<(ostream & os, linkedlist & f); +}; +#endif diff --git a/cs235/lab05/main.cpp b/cs235/lab05/main.cpp new file mode 100644 index 0000000..0d3324c --- /dev/null +++ b/cs235/lab05/main.cpp @@ -0,0 +1,4 @@ +#include "station.h" + +int main() { +} diff --git a/cs235/lab05/node.cpp b/cs235/lab05/node.cpp new file mode 100644 index 0000000..a9e81d2 --- /dev/null +++ b/cs235/lab05/node.cpp @@ -0,0 +1,3 @@ +#include "node.h" + +node::node(const int id, node* next) : id(id), next(next) {} diff --git a/cs235/lab05/node.h b/cs235/lab05/node.h new file mode 100644 index 0000000..c35d520 --- /dev/null +++ b/cs235/lab05/node.h @@ -0,0 +1,14 @@ +#ifndef __NODE_H__ +#define __NODE_H__ + +#include + +using namespace std; + +class node { + public: + node(const int, node*); + int id; + node* next; +}; +#endif diff --git a/cs235/lab05/ordeque.cpp b/cs235/lab05/ordeque.cpp new file mode 100644 index 0000000..cc325a1 --- /dev/null +++ b/cs235/lab05/ordeque.cpp @@ -0,0 +1,46 @@ +#include "ordeque.h" + +bool ordeque::addToORDequeLeft(int id) { + if(in_ordeque(id)) { + return false; + } + l.insertHead(id); + return true; +} + +bool ordeque::addToORDequeRight(int id) { + if(in_ordeque(id)) { + return false; + } + l.insertTail(id); + return true; +} + +bool ordeque::removeFromORDequeLeft() { + int id = l.at(l.size() - 1); + l.remove(id); + return true; +} + +int ordeque::showTopOfORDequeLeft() { + if(l.size() == 0) { + return -1; + } + int left = l.at(l.size() - 1); + return left; +} + +int ordeque::showSizeOfORDeque() { + return l.size(); +} + +bool ordeque::in_ordeque(int id) { + node* node_ptr = l.head; + while(node_ptr != NULL) { + if(node_ptr->id == id) { + return true; + } + node_ptr = node_ptr->next; + } + return false; +} diff --git a/cs235/lab05/ordeque.h b/cs235/lab05/ordeque.h new file mode 100644 index 0000000..75091bf --- /dev/null +++ b/cs235/lab05/ordeque.h @@ -0,0 +1,16 @@ +#ifndef __ORDEQUE_H__ +#define __ORDEQUE_H__ + +#include "linkedlist.h" + +class ordeque { + public: + linkedlist l; + bool addToORDequeLeft(int id); + bool addToORDequeRight(int id); + bool removeFromORDequeLeft(); + int showTopOfORDequeLeft(); + int showSizeOfORDeque(); + bool in_ordeque(int id); +}; +#endif diff --git a/cs235/lab05/pwnd.c b/cs235/lab05/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab05/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/lab05/queue.cpp b/cs235/lab05/queue.cpp new file mode 100644 index 0000000..e5fd8da --- /dev/null +++ b/cs235/lab05/queue.cpp @@ -0,0 +1,38 @@ +#include "queue.h" + +bool queue::addToQueue(int id) { + if(in_queue(id)) { + return false; + } + l.insertTail(id); + return true; +} + +bool queue::removeFromQueue() { + int id = l.at(0); + l.remove(id); + return false; +} + +int queue::showTopOfQueue() { + if(l.size() == 0) { + return -1; + } + int top = l.at(0); + return top; +} + +int queue::showSizeOfQueue() { + return l.size(); +} + +bool queue::in_queue(int id) { + node* node_ptr = l.head; + while(node_ptr != NULL) { + if(node_ptr->id == id) { + return true; + } + node_ptr = node_ptr->next; + } + return false; +} diff --git a/cs235/lab05/queue.h b/cs235/lab05/queue.h new file mode 100644 index 0000000..5cc13a5 --- /dev/null +++ b/cs235/lab05/queue.h @@ -0,0 +1,15 @@ +#ifndef __QUEUE_H__ +#define __QUEUE_H__ + +#include "linkedlist.h" + +class queue { + public: + linkedlist l; + bool addToQueue(int id); + bool removeFromQueue(); + int showTopOfQueue(); + int showSizeOfQueue(); + bool in_queue(int id); +}; +#endif diff --git a/cs235/lab05/stack.cpp b/cs235/lab05/stack.cpp new file mode 100644 index 0000000..6ac2f51 --- /dev/null +++ b/cs235/lab05/stack.cpp @@ -0,0 +1,37 @@ +#include "stack.h" + +bool stack::addToStack(int id) { + if(in_stack(id)) { + return false; + } + l.insertHead(id); + return true; +} + +int stack::removeFromStack() { + int id = l.at(0); + l.remove(id); + return false; +} + +int stack::showTopOfStack() { + if(l.size() == 0) + return -1; + int top = l.at(0); + return top; +} + +int stack::showSizeOfStack() { + return l.size(); +} + +bool stack::in_stack(int id) { + node* node_ptr = l.head; + while(node_ptr != NULL) { + if(node_ptr->id == id) { + return true; + } + node_ptr = node_ptr->next; + } + return false; +} diff --git a/cs235/lab05/stack.h b/cs235/lab05/stack.h new file mode 100644 index 0000000..ce062ad --- /dev/null +++ b/cs235/lab05/stack.h @@ -0,0 +1,16 @@ +#ifndef __STACK_H__ +#define __STACK_H__ + +#include "linkedlist.h" + +class stack { + public: + linkedlist l; + node* head; + bool addToStack(int id); + int removeFromStack(); + int showTopOfStack(); + int showSizeOfStack(); + bool in_stack(int id); +}; +#endif diff --git a/cs235/lab05/station.cpp b/cs235/lab05/station.cpp new file mode 100644 index 0000000..b039d14 --- /dev/null +++ b/cs235/lab05/station.cpp @@ -0,0 +1,249 @@ +#include "station.h" + +bool station::addToStation(int car) { + if(current_car == -1 and car > 0 and !s.in_stack(car) and !q.in_queue(car) and !d.in_deque(car) and !ir.in_irdeque(car) and !ord.in_ordeque(car)) { + current_car = car; + return true; + } + else { + return false; + } +} + +int station::showCurrentCar() { + return current_car; +} + +bool station::removeFromStation() { + if(current_car != -1) { + current_car = -1; + return true; + } + return false; +} + +bool station::addToStack() { + if(current_car == -1 or s.l.size() > 5) { + return false; + } + else { + bool success = s.addToStack(current_car); + if(success) { + current_car = -1; + return true; + } + return false; + } +} + +bool station::removeFromStack() { + if(s.l.size() == 0 or current_car != -1) { + return false; + } + current_car = s.removeFromStack(); + return true; +} + +int station::showTopOfStack() { + if(s.l.size() == 0) { + return -1; + } + return s.showTopOfStack(); +} + +int station::showSizeOfStack() { + return s.l.size(); +} + +bool station::addToQueue() { + if(current_car == -1 or q.l.size() > 5) { + return false; + } + else { + bool success = q.addToQueue(current_car); + if(success) { + current_car = -1; + return true; + } + return false; + } +} + +bool station::removeFromQueue() { + if(q.l.size() == 0 or current_car != -1) { + return false; + } + current_car = q.removeFromQueue(); + return true; +} + +int station::showTopOfQueue() { + if(q.l.size() == 0) { + return -1; + } + return q.showTopOfQueue(); +} + +int station::showSizeOfQueue() { + return q.showSizeOfQueue(); +} + +bool station::addToDequeLeft() { + if(current_car == -1 or d.l.size() > 5) { + return false; + } + else { + bool success = d.addToDequeRight(current_car); + if(success) { + current_car = -1; + return true; + } + return false; + } + return false; +} + +bool station::addToDequeRight() { + if(current_car == -1 or d.l.size() > 5) { + return false; + } + else { + bool success = d.addToDequeLeft(current_car); + if(success) { + current_car = -1; + return true; + } + return false; + } +} + +bool station::removeFromDequeLeft() { + if(d.l.size() == 0 or current_car != -1) { + return false; + } + current_car = d.removeFromDequeLeft(); + return true; +} + +bool station::removeFromDequeRight() { + if(d.l.size() == 0 or current_car != -1) { + return false; + } + current_car = d.removeFromDequeRight(); + return true; +} + +int station::showTopOfDequeLeft() { + if(d.l.size() == 0) { + return -1; + } + return d.showTopOfDequeLeft(); +} + +int station::showTopOfDequeRight() { + if(d.l.size() == 0) { + return -1; + } + return d.showTopOfDequeRight(); +} + +int station::showSizeOfDeque() { + return d.showSizeOfDeque(); +} + +bool station::addToIRDequeLeft() { + if(current_car == -1 or ir.l.size() > 5) { + return false; + } + else { + bool success = ir.addToIRDequeLeft(current_car); + if(success) { + current_car = -1; + return true; + } + return false; + } + return false; +} + +bool station::removeFromIRDequeLeft() { + if(ir.l.size() == 0 or current_car != -1) { + return false; + } + current_car = ir.removeFromIRDequeRight(); + return true; +} + +bool station::removeFromIRDequeRight() { + if(ir.l.size() == 0 or current_car != -1) { + return false; + } + current_car = ir.removeFromIRDequeLeft(); + return true; +} + +int station::showTopOfIRDequeLeft() { + if(ir.l.size() == 0) { + return -1; + } + return ir.showTopOfIRDequeRight(); +} + +int station::showTopOfIRDequeRight() { + if(ir.l.size() == 0) { + return -1; + } + return ir.showTopOfIRDequeLeft(); +} + +int station::showSizeOfIRDeque() { + return ir.l.size(); +} + +bool station::addToORDequeLeft() { + if(current_car == -1 or ord.l.size() > 5) { + return false; + } + else { + bool success = ord.addToORDequeRight(current_car); + if(success) { + current_car = -1; + return true; + } + return false; + } + return false; +} + +bool station::addToORDequeRight() { + if(current_car == -1 or ord.l.size() > 5) { + return false; + } + else { + bool success = ord.addToORDequeLeft(current_car); + if(success) { + current_car = -1; + return true; + } + return false; + } +} + +bool station::removeFromORDequeLeft() { + if(ord.l.size() == 0 or current_car != -1) { + return false; + } + current_car = ord.removeFromORDequeLeft(); + return true; +} + +int station::showTopOfORDequeLeft(){ + if(ord.l.size() == 0) { + return -1; + } + return ord.showTopOfORDequeLeft(); +} + +int station::showSizeOfORDeque() { + return ord.l.size(); +} diff --git a/cs235/lab05/station.h b/cs235/lab05/station.h new file mode 100644 index 0000000..90f4d97 --- /dev/null +++ b/cs235/lab05/station.h @@ -0,0 +1,51 @@ +#ifndef __STATION_H__ +#define __STATION_H__ + +#include "StationInterfaceExtra.h" +#include "queue.h" +#include "deque.h" +#include "stack.h" +#include "irdeque.h" +#include "ordeque.h" + +class station : public StationInterfaceExtra { + public: + station(): current_car(-1) {}; + bool addToStation(int car); + int showCurrentCar(); + bool removeFromStation(); + bool addToStack(); + bool removeFromStack(); + int showTopOfStack(); + int showSizeOfStack(); + bool addToQueue(); + bool removeFromQueue(); + int showTopOfQueue(); + int showSizeOfQueue(); + bool addToDequeLeft(); + bool addToDequeRight(); + bool removeFromDequeLeft(); + bool removeFromDequeRight(); + int showTopOfDequeLeft(); + int showTopOfDequeRight(); + int showSizeOfDeque(); + bool addToIRDequeLeft(); + bool removeFromIRDequeLeft(); + bool removeFromIRDequeRight(); + int showTopOfIRDequeLeft(); + int showTopOfIRDequeRight(); + int showSizeOfIRDeque(); + bool addToORDequeLeft(); + bool addToORDequeRight(); + bool removeFromORDequeLeft(); + int showTopOfORDequeLeft(); + int showSizeOfORDeque(); + private: + int current_car; + queue q; + deque d; + stack s; + irdeque ir; + ordeque ord; +}; +#endif diff --git a/cs235/lab06/Factory.cpp b/cs235/lab06/Factory.cpp new file mode 100644 index 0000000..75ec249 --- /dev/null +++ b/cs235/lab06/Factory.cpp @@ -0,0 +1,22 @@ +#include "Factory.h" +#include "maze.h" +//You may add #include statments here +using namespace std; + +/* + Unlike all other documents provided, you may modify this document slightly (but do not change its name) +*/ +//======================================================================================= +/* + getMaze() + + Creates and returns an object whose class extends MazeInterface. + This should be an object of a class you have created. + + Example: If you made a class called "Maze", you might say, "return new Maze();". +*/ +MazeInterface* Factory::getMaze() +{ + return new maze();//Modify this line +} +//======================================================================================= diff --git a/cs235/lab06/Factory.h b/cs235/lab06/Factory.h new file mode 100644 index 0000000..d24d2e7 --- /dev/null +++ b/cs235/lab06/Factory.h @@ -0,0 +1,21 @@ +#include "MazeInterface.h" +#pragma once +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + getMaze() + + Creates and returns an object whose class extends MazeInterface. + This should be an object of a class you have created. + + Example: If you made a class called "Maze", you might say, "return new Maze();". +*/ +class Factory +{ +public: + static MazeInterface * getMaze(); +}; + +//======================================================================================= diff --git a/cs235/lab06/Makefile b/cs235/lab06/Makefile new file mode 100644 index 0000000..380ec0a --- /dev/null +++ b/cs235/lab06/Makefile @@ -0,0 +1,32 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=Factory.o maze.o pwnd.o ignoreme.a +EXE=main +all: pwnd.o $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +test: test.cpp maze.o +dump_maze: dump_maze.cpp maze.o +rtest: test + ./test +Factory.o: Factory.cpp Factory.h +maze.o: maze.cpp maze.h +pwnd.o: pwnd.c + +run: main + ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -vf dump_maze + @rm -rvf *.dSYM + +drun: main + gdb ./main + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/lab06/MazeInterface.h b/cs235/lab06/MazeInterface.h new file mode 100644 index 0000000..f0efa69 --- /dev/null +++ b/cs235/lab06/MazeInterface.h @@ -0,0 +1,49 @@ +#include +#include +#include +#pragma once + +using namespace std; + +class MazeInterface{ + +public: + MazeInterface(){} + virtual ~MazeInterface(){} + /** + * Create and store a random maze with an entry and exit point. (location [0,0,0] and [7,7,7] must have 1's in those spots. The rest of the spots can be randomly 0 or 1. + */ + virtual void createRandomMaze() = 0; + + /** + * Read from the given file (see maze_sample.txt for format) and store it as a maze + * + * @param fileName The file name of the file to be imported + * + * @return true if the file was successfully read/imported, false if an error occurred when parsing/reading the file + */ + virtual bool importMaze(string fileName) = 0; + + /** + * Traverses the current maze in storage, storing the path taken to solve the maze if the maze was solvable. + * + * @return true if the maze was solvable, false if unsolvable + */ + virtual bool traverseMaze() = 0; + + /** + * Returns the path from the most recently traversed maze. The string format should be each position taken + * separated by newlines (see format on website). + * + * @return the path to the most recent maze traversed + * if no maze has been solved yet, return an empty string + */ + virtual string getMazePath() = 0; + + /** + * Get the current maze stored in a single string (see website for format) + * + * @return a string representation of your maze + */ + virtual string getMaze() = 0; +}; \ No newline at end of file diff --git a/cs235/lab06/Mazes/badMaze1.txt b/cs235/lab06/Mazes/badMaze1.txt new file mode 100644 index 0000000..5147e20 --- /dev/null +++ b/cs235/lab06/Mazes/badMaze1.txt @@ -0,0 +1,72 @@ +1 0 0 0 1 0 0 0 +0 1 1 1 1 1 0 0 +0 1 0 1 1 0 0 0 +0 1 1 1 0 0 1 1 +1 1 0 0 0 1 0 0 +1 1 1 0 0 1 1 0 +1 0 1 0 0 1 0 1 +0 0 1 0 1 0 1 0 + +1 0 0 0 0 1 0 0 +1 1 0 0 0 1 0 1 +1 0 1 0 1 1 1 1 +0 0 0 0 1 0 0 1 +0 0 0 0 1 0 1 1 +0 0 0 1 0 0 1 0 +1 0 1 0 1 0 0 0 +0 1 0 1 1 0 0 1 + +1 1 1 0 0 0 0 1 +1 0 0 1 1 1 0 1 +1 0 0 1 1 0 1 0 +0 1 0 1 0 1 1 1 +1 0 1 1 1 1 0 0 +0 1 0 1 1 0 0 0 +1 1 0 1 0 0 0 1 +1 1 1 0 0 0 1 0 + +1 1 0 0 1 0 1 1 +1 1 1 1 1 0 0 1 +1 1 0 0 1 0 1 1 +0 1 1 1 1 1 0 1 +0 1 1 0 0 0 1 0 +0 1 0 1 0 0 0 0 +1 1 0 1 0 1 1 0 +0 0 0 0 1 1 1 0 + +1 0 0 0 1 1 1 0 +0 1 0 1 0 1 0 1 +1 0 0 1 0 0 0 0 +1 1 1 0 0 1 0 0 +0 1 1 0 0 0 1 0 +0 1 0 1 0 1 0 0 +1 0 0 1 1 1 0 1 +1 1 1 1 0 0 0 1 + +1 0 1 1 1 0 0 0 +0 0 0 1 0 0 1 0 +0 1 1 0 0 0 0 1 +0 0 0 1 0 0 0 1 +1 0 1 1 0 1 1 0 +1 0 1 0 1 1 0 1 +0 0 0 0 0 0 1 1 +1 1 0 0 1 0 0 0 + +0 0 0 0 0 0 1 1 +1 0 0 1 1 1 0 1 +0 1 0 1 1 1 1 1 +0 1 1 0 0 1 1 0 +1 1 1 0 1 1 1 1 +1 0 1 1 0 1 0 0 +0 0 0 1 0 0 1 0 +1 1 1 0 1 1 1 0 + +1 1 1 1 0 0 1 0 +0 0 1 0 0 1 0 1 +0 1 1 1 0 1 0 0 +1 1 1 0 1 0 0 1 +0 0 1 0 1 0 0 0 +1 1 1 1 0 1 0 1 +1 0 1 1 1 1 1 0 +1 0 0 0 1 1 1 + diff --git a/cs235/lab06/Mazes/badMaze2.txt b/cs235/lab06/Mazes/badMaze2.txt new file mode 100644 index 0000000..1a8211f --- /dev/null +++ b/cs235/lab06/Mazes/badMaze2.txt @@ -0,0 +1,72 @@ +1 0 0 0 1 0 0 0 +0 1 1 1 1 1 0 0 +0 1 0 1 1 0 0 0 +0 1 1 1 0 0 1 1 +1 1 0 a 0 1 0 0 +1 1 1 0 0 1 1 0 +1 0 1 0 0 1 0 1 +0 0 1 0 1 0 1 0 + +1 0 0 0 0 1 0 0 +1 1 0 0 0 1 0 1 +1 0 1 0 1 1 1 1 +0 0 0 0 1 0 0 1 +0 0 0 0 1 0 1 1 +0 0 0 1 0 0 1 0 +1 0 1 0 1 0 0 0 +0 1 0 1 1 0 0 1 + +1 1 1 0 0 0 0 1 +1 0 0 1 1 1 0 1 +1 0 0 1 1 0 1 0 +0 1 0 1 0 1 1 1 +1 0 1 1 1 1 0 0 +0 1 0 1 1 0 0 0 +1 1 0 1 0 0 0 1 +1 1 1 0 0 0 1 0 + +1 1 0 0 1 0 1 1 +1 1 1 1 1 0 0 1 +1 1 0 0 1 0 1 1 +0 1 1 1 1 1 0 1 +0 1 1 0 0 0 1 0 +0 1 0 1 0 0 0 0 +1 1 0 1 0 1 1 0 +0 0 0 0 1 1 1 0 + +1 0 0 0 1 1 1 0 +0 1 0 1 0 1 0 1 +1 0 0 1 0 0 0 0 +1 1 1 0 0 1 0 0 +0 1 1 0 0 0 1 0 +0 1 0 1 0 1 0 0 +1 0 0 1 1 1 0 1 +1 1 1 1 0 0 0 1 + +1 0 1 1 1 0 0 0 +0 0 0 1 0 0 1 0 +0 1 1 0 0 0 0 1 +0 0 0 1 0 0 0 1 +1 0 1 1 0 1 1 0 +1 0 1 0 1 1 0 1 +0 0 0 0 0 0 1 1 +1 1 0 0 1 0 0 0 + +0 0 0 0 0 0 1 1 +1 0 0 1 1 1 0 1 +0 1 0 a 1 1 1 1 +0 1 1 0 0 1 1 0 +1 1 1 0 1 1 1 1 +1 0 1 1 0 1 0 0 +0 0 0 1 0 0 1 0 +1 1 1 0 1 1 1 0 + +1 1 1 1 0 0 1 0 +0 0 1 0 0 1 0 1 +0 1 1 1 0 1 0 0 +1 1 1 0 1 0 0 1 +0 0 1 0 1 0 0 0 +1 1 1 1 0 1 0 1 +1 0 1 1 1 1 1 0 +1 0 0 0 1 1 1 1 + diff --git a/cs235/lab06/Mazes/maze_sample.txt b/cs235/lab06/Mazes/maze_sample.txt new file mode 100644 index 0000000..76d04d5 --- /dev/null +++ b/cs235/lab06/Mazes/maze_sample.txt @@ -0,0 +1,72 @@ +1 0 0 0 1 0 0 0 +0 1 1 1 1 1 0 0 +0 1 0 1 1 0 0 0 +0 1 1 1 0 0 1 1 +1 1 0 0 0 1 0 0 +1 1 1 0 0 1 1 0 +1 0 1 0 0 1 0 1 +0 0 1 0 1 0 1 0 + +1 0 0 0 0 1 0 0 +1 1 0 0 0 1 0 1 +1 0 1 0 1 1 1 1 +0 0 0 0 1 0 0 1 +0 0 0 0 1 0 1 1 +0 0 0 1 0 0 1 0 +1 0 1 0 1 0 0 0 +0 1 0 1 1 0 0 1 + +1 1 1 0 0 0 0 1 +1 0 0 1 1 1 0 1 +1 0 0 1 1 0 1 0 +0 1 0 1 0 1 1 1 +1 0 1 1 1 1 0 0 +0 1 0 1 1 0 0 0 +1 1 0 1 0 0 0 1 +1 1 1 0 0 0 1 0 + +1 1 0 0 1 0 1 1 +1 1 1 1 1 0 0 1 +1 1 0 0 1 0 1 1 +0 1 1 1 1 1 0 1 +0 1 1 0 0 0 1 0 +0 1 0 1 0 0 0 0 +1 1 0 1 0 1 1 0 +0 0 0 0 1 1 1 0 + +1 0 0 0 1 1 1 0 +0 1 0 1 0 1 0 1 +1 0 0 1 0 0 0 0 +1 1 1 0 0 1 0 0 +0 1 1 0 0 0 1 0 +0 1 0 1 0 1 0 0 +1 0 0 1 1 1 0 1 +1 1 1 1 0 0 0 1 + +1 0 1 1 1 0 0 0 +0 0 0 1 0 0 1 0 +0 1 1 0 0 0 0 1 +0 0 0 1 0 0 0 1 +1 0 1 1 0 1 1 0 +1 0 1 0 1 1 0 1 +0 0 0 0 0 0 1 1 +1 1 0 0 1 0 0 0 + +0 0 0 0 0 0 1 1 +1 0 0 1 1 1 0 1 +0 1 0 1 1 1 1 1 +0 1 1 0 0 1 1 0 +1 1 1 0 1 1 1 1 +1 0 1 1 0 1 0 0 +0 0 0 1 0 0 1 0 +1 1 1 0 1 1 1 0 + +1 1 1 1 0 0 1 0 +0 0 1 0 0 1 0 1 +0 1 1 1 0 1 0 0 +1 1 1 0 1 0 0 1 +0 0 1 0 1 0 0 0 +1 1 1 1 0 1 0 1 +1 0 1 1 1 1 1 0 +1 0 0 0 1 1 1 1 + diff --git a/cs235/lab06/Mazes/path_sample.txt b/cs235/lab06/Mazes/path_sample.txt new file mode 100644 index 0000000..d521d8c --- /dev/null +++ b/cs235/lab06/Mazes/path_sample.txt @@ -0,0 +1,46 @@ +(0, 0, 0) +(0, 0, 1) +(0, 1, 1) +(1, 1, 1) +(1, 1, 0) +(2, 1, 0) +(3, 1, 0) +(4, 1, 0) +(5, 1, 0) +(5, 1, 1) +(5, 2, 1) +(6, 2, 1) +(7, 2, 1) +(7, 3, 1) +(7, 3, 2) +(6, 3, 2) +(5, 3, 2) +(5, 4, 2) +(4, 4, 2) +(3, 4, 2) +(2, 4, 2) +(2, 4, 3) +(1, 4, 3) +(1, 5, 3) +(1, 6, 3) +(0, 6, 3) +(0, 6, 4) +(0, 7, 4) +(1, 7, 4) +(2, 7, 4) +(3, 7, 4) +(3, 6, 4) +(4, 6, 4) +(5, 6, 4) +(5, 5, 4) +(5, 5, 5) +(5, 4, 5) +(6, 4, 5) +(6, 4, 6) +(5, 4, 6) +(5, 5, 6) +(5, 5, 7) +(5, 6, 7) +(6, 6, 7) +(6, 7, 7) +(7, 7, 7) diff --git a/cs235/lab06/Mazes/solvableMaze.txt b/cs235/lab06/Mazes/solvableMaze.txt new file mode 100644 index 0000000..3d09a4e --- /dev/null +++ b/cs235/lab06/Mazes/solvableMaze.txt @@ -0,0 +1,72 @@ +1 0 0 0 0 0 0 1 +0 0 0 0 0 1 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 1 +0 0 0 1 0 0 0 0 +1 0 0 1 0 1 0 0 +0 0 0 1 0 0 0 0 +1 0 0 1 0 0 0 1 + +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 1 1 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +0 1 1 0 0 0 0 0 +0 0 0 1 0 1 1 1 + +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 1 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 +0 0 0 1 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +1 0 0 0 0 1 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 + +1 1 1 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 1 0 0 0 1 +0 0 0 0 0 0 1 0 +0 0 0 0 0 0 1 0 +1 0 0 0 0 1 0 0 +0 1 0 0 0 0 0 0 +1 0 0 0 0 0 0 1 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 1 0 +0 0 0 0 0 0 1 0 +0 0 0 0 0 0 1 0 +1 1 1 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 1 0 0 0 0 +1 1 1 1 0 0 0 1 + +1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 1 0 0 0 0 0 +0 0 1 0 0 0 0 0 +0 0 1 0 0 0 0 0 +0 0 1 0 0 0 0 0 + +0 0 1 0 0 0 0 1 +0 0 1 0 0 0 0 1 +0 0 1 0 0 0 0 1 +0 0 1 0 0 0 0 1 +0 0 1 1 0 0 0 1 +0 0 0 1 0 0 0 1 +0 0 0 1 0 0 0 1 +0 0 0 1 1 1 0 1 + diff --git a/cs235/lab06/Mazes/solvableMaze2.txt b/cs235/lab06/Mazes/solvableMaze2.txt new file mode 100644 index 0000000..50d4e7f --- /dev/null +++ b/cs235/lab06/Mazes/solvableMaze2.txt @@ -0,0 +1,72 @@ +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 1 1 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 1 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 1 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 1 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 1 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 1 1 1 1 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 1 1 1 1 1 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 1 0 0 0 0 1 +0 0 1 0 0 0 0 1 +0 0 1 0 0 0 0 1 +0 0 1 0 0 0 0 0 +0 0 1 1 1 1 1 1 + diff --git a/cs235/lab06/Mazes/stacktest.txt b/cs235/lab06/Mazes/stacktest.txt new file mode 100644 index 0000000..50106e7 --- /dev/null +++ b/cs235/lab06/Mazes/stacktest.txt @@ -0,0 +1,72 @@ +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 0 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 0 +1 1 1 1 1 1 0 1 + diff --git a/cs235/lab06/Mazes/test1.txt b/cs235/lab06/Mazes/test1.txt new file mode 100644 index 0000000..2d8330d --- /dev/null +++ b/cs235/lab06/Mazes/test1.txt @@ -0,0 +1,72 @@ +1 1 1 1 0 0 1 0 +0 1 0 0 1 0 0 1 +1 1 0 1 0 0 1 1 +0 1 1 0 0 1 0 1 +1 0 1 1 0 0 0 1 +1 0 1 0 1 0 0 1 +1 0 0 0 1 1 0 0 +1 1 0 1 1 0 1 1 + +0 0 1 0 1 0 0 0 +0 1 0 1 1 0 1 0 +0 1 1 1 0 1 1 0 +0 1 0 0 1 0 1 1 +1 1 1 1 1 0 0 0 +0 1 1 1 0 0 0 0 +0 1 0 0 1 0 1 1 +0 0 0 1 0 1 1 0 + +0 0 1 1 0 0 1 0 +0 1 0 1 0 0 1 0 +1 1 1 0 1 0 1 0 +0 0 1 0 0 0 1 0 +0 1 0 1 0 1 1 0 +0 0 0 0 1 0 0 0 +1 1 1 1 1 0 0 0 +1 0 0 1 1 0 1 1 + +0 1 0 1 1 0 1 0 +1 0 0 0 1 1 1 1 +0 1 0 1 1 1 1 1 +1 1 0 1 0 0 0 0 +1 1 1 1 1 0 1 0 +1 1 0 0 0 0 0 1 +1 0 1 1 0 0 0 1 +0 0 1 0 1 1 1 0 + +1 1 1 0 1 0 0 1 +0 1 0 1 1 1 1 0 +0 1 1 1 0 0 0 0 +1 0 1 1 0 0 0 0 +0 1 0 0 1 1 1 1 +0 0 0 1 0 0 1 1 +0 1 1 1 1 1 0 1 +1 1 0 1 0 0 1 0 + +0 1 1 1 1 1 0 0 +0 1 1 0 1 1 1 1 +0 1 1 1 0 1 1 0 +1 1 0 0 0 0 1 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 1 0 0 +1 0 0 1 1 0 0 0 +1 0 1 1 0 0 0 1 + +0 0 1 0 0 0 1 0 +1 1 1 1 0 1 1 1 +1 1 0 0 0 1 1 0 +0 1 0 0 1 1 0 0 +1 0 0 1 1 1 1 1 +0 0 0 1 1 0 0 0 +1 1 1 0 1 1 1 0 +0 0 1 0 0 1 0 1 + +0 0 1 0 1 1 0 0 +0 0 0 1 0 1 1 0 +1 1 1 0 1 0 1 0 +0 1 0 1 1 1 0 0 +1 0 1 1 0 0 0 0 +0 0 0 0 1 1 1 1 +1 0 1 0 1 0 1 0 +0 1 1 1 0 1 0 1 + diff --git a/cs235/lab06/Mazes/test1.txt.orig b/cs235/lab06/Mazes/test1.txt.orig new file mode 100644 index 0000000..4f1ba55 --- /dev/null +++ b/cs235/lab06/Mazes/test1.txt.orig @@ -0,0 +1,72 @@ +1 1 1 1 0 0 1 0 +0 1 0 0 1 0 0 1 +1 1 0 1 0 0 1 1 +0 1 1 0 0 1 0 1 +1 0 1 1 0 0 0 1 +1 0 1 0 1 0 0 1 +1 0 0 0 1 1 0 0 +1 1 0 1 1 0 1 1 + +0 0 1 0 1 0 0 0 +0 1 0 1 1 0 1 0 +0 1 1 1 0 1 1 0 +0 1 0 0 1 0 1 1 +1 1 1 1 1 0 0 0 +0 1 1 1 0 0 0 0 +0 1 0 0 1 0 1 1 +0 0 0 1 0 1 1 0 + +0 0 1 1 0 0 1 0 +0 1 0 1 0 0 1 0 +1 1 1 0 1 0 1 0 +0 0 1 0 0 0 1 0 +0 1 0 1 0 1 1 0 +0 0 0 0 1 0 0 0 +1 1 1 1 1 0 0 0 +1 0 0 1 1 0 1 1 + +0 1 0 1 1 0 1 0 +1 0 0 0 1 1 1 1 +0 1 0 1 1 1 1 1 +1 1 0 1 0 0 0 0 +1 1 1 1 1 0 1 0 +1 1 0 0 0 0 0 1 +1 0 1 1 0 0 0 1 +0 0 1 0 1 1 1 0 + +1 1 1 0 1 0 0 1 +0 1 0 1 1 1 1 0 +0 1 1 1 0 0 0 0 +1 0 1 1 0 0 0 0 +0 1 0 0 1 1 1 1 +0 0 0 1 0 0 1 1 +0 1 1 1 1 1 0 1 +1 1 0 1 0 0 1 0 + +0 1 1 1 1 1 0 0 +0 1 1 0 1 1 1 1 +0 1 1 1 0 1 1 0 +1 1 0 0 0 0 1 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 1 0 0 +1 0 0 1 1 0 0 0 +1 0 1 1 0 0 0 1 + +0 0 1 0 0 0 1 0 +1 1 1 1 0 1 1 1 +1 1 0 0 0 1 1 0 +0 1 0 0 1 1 0 0 +1 0 0 1 1 1 1 1 +0 0 0 1 1 0 0 0 +1 1 1 0 1 1 1 0 +0 0 1 0 0 1 0 1 + +0 0 1 0 1 1 0 0 +0 0 0 1 0 1 1 0 +1 1 1 0 1 0 1 0 +0 1 0 1 1 1 0 0 +1 0 1 1 0 0 0 0 +0 0 0 0 1 1 1 1 +1 0 1 0 1 0 1 0 +0 1 1 1 0 1 0 1 + diff --git a/cs235/lab06/Mazes/test2.txt b/cs235/lab06/Mazes/test2.txt new file mode 100644 index 0000000..2e3dc7f --- /dev/null +++ b/cs235/lab06/Mazes/test2.txt @@ -0,0 +1,72 @@ +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 1 1 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 1 1 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 + diff --git a/cs235/lab06/Mazes/test3.txt b/cs235/lab06/Mazes/test3.txt new file mode 100644 index 0000000..d7eb821 --- /dev/null +++ b/cs235/lab06/Mazes/test3.txt @@ -0,0 +1,72 @@ +1 1 0 0 0 0 0 0 +0 1 0 0 0 0 0 0 +0 1 1 0 0 0 0 0 +0 0 1 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 + +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 0 + +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 + +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 0 + +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 + diff --git a/cs235/lab06/Mazes/test4.txt b/cs235/lab06/Mazes/test4.txt new file mode 100644 index 0000000..eda65e8 --- /dev/null +++ b/cs235/lab06/Mazes/test4.txt @@ -0,0 +1,72 @@ +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 1 1 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 1 1 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 1 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 1 1 1 0 0 0 0 +0 0 0 1 0 0 0 0 +0 1 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +0 0 1 1 0 0 0 0 +0 0 1 0 0 0 0 0 +0 1 1 0 0 0 0 0 +0 0 1 0 0 0 0 0 +0 0 1 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 1 0 0 0 +0 0 0 0 1 0 0 0 +0 0 0 0 1 0 0 0 +0 0 0 0 0 1 1 1 + +1 1 1 0 0 0 0 0 +1 0 1 0 0 0 0 0 +1 1 1 1 1 0 0 0 +0 0 1 0 1 0 0 0 +0 0 1 1 1 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 1 0 0 0 +0 0 0 0 1 1 0 1 + diff --git a/cs235/lab06/Mazes/test5.txt b/cs235/lab06/Mazes/test5.txt new file mode 100644 index 0000000..d436f62 --- /dev/null +++ b/cs235/lab06/Mazes/test5.txt @@ -0,0 +1,72 @@ +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 + diff --git a/cs235/lab06/Mazes/test6.txt b/cs235/lab06/Mazes/test6.txt new file mode 100644 index 0000000..ed641a4 --- /dev/null +++ b/cs235/lab06/Mazes/test6.txt @@ -0,0 +1,72 @@ +1 1 0 0 0 0 0 0 +0 1 0 0 0 0 0 0 +0 1 1 0 0 0 0 0 +0 0 1 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 + +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 0 + +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 + +0 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 1 0 0 0 0 + +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 0 0 1 0 0 0 1 +1 1 1 1 1 1 1 1 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 + diff --git a/cs235/lab06/Mazes/test7.txt b/cs235/lab06/Mazes/test7.txt new file mode 100644 index 0000000..6225002 --- /dev/null +++ b/cs235/lab06/Mazes/test7.txt @@ -0,0 +1,72 @@ +1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 1 +1 1 1 1 1 1 1 1 +1 0 0 0 0 0 0 0 +1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 1 +1 1 1 1 1 1 1 1 +1 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 + +1 1 1 0 1 1 1 0 +1 0 1 0 1 0 1 0 +1 0 1 0 1 0 1 0 +1 0 1 0 1 0 1 0 +1 0 1 0 1 0 1 0 +1 0 1 0 1 0 1 0 +1 0 1 0 1 0 1 0 +1 0 1 1 1 0 1 1 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 + +1 1 1 0 0 0 0 0 +1 0 1 0 0 0 0 1 +1 0 1 1 0 0 0 0 +1 0 0 0 1 1 1 0 +1 0 0 0 0 0 1 0 +1 0 1 1 1 0 1 0 +1 0 1 0 1 1 1 0 +1 1 1 0 0 0 0 1 + +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 +0 0 0 1 0 0 0 1 +0 0 0 0 1 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 1 1 + +1 1 1 1 1 1 1 0 +1 0 0 0 0 0 1 0 +1 0 1 1 0 0 1 0 +1 0 1 0 1 0 1 0 +1 0 1 0 0 0 1 0 +1 0 1 1 1 1 1 0 +1 0 0 0 0 0 0 0 +1 1 1 1 1 1 1 0 + +0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 +0 1 0 0 0 1 0 0 +0 1 0 0 1 1 0 0 +0 1 0 0 1 0 0 0 +0 1 0 0 0 0 0 0 +0 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 1 + diff --git a/cs235/lab06/Mazes/test8.txt b/cs235/lab06/Mazes/test8.txt new file mode 100644 index 0000000..8fccfc1 --- /dev/null +++ b/cs235/lab06/Mazes/test8.txt @@ -0,0 +1,72 @@ +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 + +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 1 1 1 1 1 1 1 + diff --git a/cs235/lab06/Mazes/unsolvableMaze.txt b/cs235/lab06/Mazes/unsolvableMaze.txt new file mode 100644 index 0000000..e55d792 --- /dev/null +++ b/cs235/lab06/Mazes/unsolvableMaze.txt @@ -0,0 +1,72 @@ +1 1 0 0 1 1 1 0 +0 0 0 0 1 1 0 1 +1 1 0 1 0 1 0 0 +1 0 1 0 0 0 1 0 +1 0 0 1 0 1 0 0 +1 0 1 1 1 1 0 0 +1 0 0 1 0 1 0 0 +1 0 0 0 1 0 1 0 + +0 0 0 0 1 0 1 0 +0 0 1 0 1 0 0 0 +0 0 1 1 1 1 0 0 +1 1 1 1 1 1 1 0 +0 0 1 1 0 0 0 0 +0 0 1 1 0 1 1 0 +1 0 1 0 1 0 1 1 +1 1 1 0 1 1 1 0 + +1 0 1 0 1 0 1 1 +0 1 0 0 0 0 0 1 +0 1 0 1 1 1 1 1 +1 0 0 0 1 0 1 0 +0 0 0 1 0 1 0 0 +1 0 1 0 0 0 0 0 +0 0 1 1 1 1 0 0 +1 0 1 0 1 0 0 0 + +0 1 1 0 0 1 0 1 +1 0 1 0 1 1 1 0 +0 0 1 0 1 0 0 0 +0 1 1 1 0 1 0 0 +0 0 1 0 0 1 1 0 +1 1 0 1 1 0 0 0 +0 1 0 1 0 0 0 1 +1 1 0 0 0 0 1 1 + +1 1 1 0 1 1 1 1 +0 1 1 1 1 1 1 1 +0 1 1 0 0 0 1 1 +0 0 1 1 1 0 1 0 +1 1 0 0 0 1 1 0 +0 0 0 1 1 1 0 0 +0 1 0 1 0 0 1 0 +1 1 1 1 1 0 0 0 + +1 0 0 0 0 0 0 0 +1 1 0 1 1 0 0 1 +1 0 1 0 0 0 1 1 +1 1 0 0 1 1 0 1 +0 0 1 0 1 1 0 1 +1 0 0 0 1 1 0 1 +1 0 1 0 1 0 0 0 +0 0 1 1 0 1 0 1 + +0 1 1 0 1 1 0 1 +1 1 1 0 0 0 0 0 +0 1 1 0 0 0 0 0 +1 1 1 1 1 1 1 0 +0 1 1 0 1 0 0 1 +1 1 1 1 0 0 1 0 +0 1 0 1 1 1 0 1 +1 1 0 0 0 1 1 1 + +0 1 0 0 1 1 1 1 +1 0 1 1 0 1 0 1 +1 0 0 1 0 1 0 1 +0 1 0 1 1 1 1 1 +1 0 1 1 1 1 1 1 +1 1 0 1 0 1 0 1 +1 0 1 1 1 1 1 1 +1 1 0 1 0 1 1 1 + diff --git a/cs235/lab06/dump_maze.cpp b/cs235/lab06/dump_maze.cpp new file mode 100644 index 0000000..bf19161 --- /dev/null +++ b/cs235/lab06/dump_maze.cpp @@ -0,0 +1,14 @@ +#include +#include "maze.h" +using namespace std; + +int main(int argc, char * argv[]) { + maze m; + if (argc == 2) { + bool b = m.importMaze(argv[1]); + cout << b << endl; + cout << m << endl; + return 0; + } + return 1; +} diff --git a/cs235/lab06/maze.cpp b/cs235/lab06/maze.cpp new file mode 100644 index 0000000..7b41788 --- /dev/null +++ b/cs235/lab06/maze.cpp @@ -0,0 +1,149 @@ +#include "maze.h" + +int WALL = 0; +int EMPTY = 1; +int PATH = 2; +int DEAD = 3; + +maze::maze() { + map.resize(8); + for(int i = 0; i < 8; i++) { + map[i].resize(8); + for(int j = 0; j < 8; j++) { + map[i][j].resize(8); + } + } +} + +void vector_clear(vector>> & map) { + for(unsigned int k = 0; k < 8; k++) { + for(unsigned int j = 0; j < 8; j++) { + for(unsigned int i = 0; i < 8; i++) { + map[i][j][k] = 0; + } + } + } +} + +void maze::createRandomMaze() { + vector_clear(map); + for(int i = 0; i < 8; i++) { + for(int j = 0; j < 8; j++) { + for(int k = 0; k < 8; k++) { + int randnum = rand() % 2; + map[i][j][k] = randnum; + } + } + } + map[0][0][0] = 1; + map[7][7][7] = 1; +} + +bool maze::importMaze(string fileName) { + vector_clear(map); + ifstream infile(fileName.c_str()); + char c; + for(unsigned int k = 0; k < 8; k++) { + for(unsigned int j = 0; j < 8; j++) { + for(unsigned int i = 0; i < 8; i++) { + c = infile.get(); + if (c == '0') { + map[i][j][k] = 0; + } + else if (c == '1') { + map[i][j][k] = 1; + } + else if (c == 'a') { + return false; + } + c = infile.get(); + } + c = infile.get(); + if(c == '\r') { + c = infile.get(); + } + if(c != '\n') { + return false; + } + } + c = infile.get(); + if(c == '\r') { + c = infile.get(); + } + if(c != '\n') { + return false; + } + } + if(map[0][0][0] == 0 || map[7][7][7] == 0) { + return false; + } + return true; +} + +bool maze::solve(int x,int y, int z) { + if(x < 0 || y < 0 || z < 0 || x >= map.size() || y >= map.size() || z >= map.size()) { + return false; + } + else if(map[x][y][z] != EMPTY) { + return false; + } + else if(x == map.size() - 1 && y == map.size() - 1 && z == map.size() - 1) { + path << "(" << x << ", " << y << ", " << z << ")"; + ordered_pairs.push_back(path.str()); + path.str(""); + map[x][y][z] = PATH; + return true; + } + else { + map[x][y][z] = PATH; + if(solve(x - 1, y, z) || + solve(x + 1, y, z) || + solve(x, y - 1, z) || + solve(x, y + 1, z) || + solve(x, y, z - 1) || + solve(x, y, z + 1)) { + path << "(" << x << ", " << y << ", " << z << ")\n"; + ordered_pairs.push_back(path.str()); + path.str(""); + return true; + } + else { + map[x][y][z] = DEAD; + return false; + } + } +} + +bool maze::traverseMaze() { + path.str(""); + ordered_pairs.clear(); + bool b = solve(0,0,0); + return b; +} + +string maze::getMazePath() { + for(int i = ordered_pairs.size() - 1; i >= 0; i--) { + path << ordered_pairs[i]; + } + return path.str(); +} + +string maze::getMaze() { + stringstream os; + os << *this; + return os.str(); +} + +ostream & operator<<(ostream & os, maze & m) { + for(int k = 0; k < 8; k++) { + for(int j = 0; j < 8; j++) { + for(int i = 0; i < 8; i++) { + os << m.map[i][j][k]; + os << " "; + } + os << "\n"; + } + os << "\n"; + } + return os; +} diff --git a/cs235/lab06/maze.h b/cs235/lab06/maze.h new file mode 100644 index 0000000..d09fe1c --- /dev/null +++ b/cs235/lab06/maze.h @@ -0,0 +1,28 @@ +#ifndef __MAZE_H__ +#define __MAZE_H__ + +#include "MazeInterface.h" +#include +#include +#include +#include +#include + +using namespace std; + +class maze : public MazeInterface { + public: + maze(); + stringstream path; + vector ordered_pairs; + vector>> map; + void createRandomMaze(); + bool solve(int x,int y,int z); + bool importMaze(string fileName); + bool traverseMaze(); + string getMazePath(); + string getMaze(); + friend ostream & operator<<(ostream & os, maze & m); +}; +ostream & operator<<(ostream & os, vector>> & f) ; +#endif diff --git a/cs235/lab06/pwnd.c b/cs235/lab06/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab06/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/lab06/quick.txt b/cs235/lab06/quick.txt new file mode 100644 index 0000000..214b221 --- /dev/null +++ b/cs235/lab06/quick.txt @@ -0,0 +1,5 @@ +just to see if it gets it + +and spills it out corrects + +010110101001010010 diff --git a/cs235/lab06/test.cpp b/cs235/lab06/test.cpp new file mode 100644 index 0000000..bbfdc95 --- /dev/null +++ b/cs235/lab06/test.cpp @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include "maze.h" + +int main(int argc, char * argv[]) { + srand (time(NULL)); + maze m; + + m.createRandomMaze(); + bool b; + if (argc == 2) { + b = m.importMaze(argv[1]); + } + else { + b = m.importMaze("Mazes/test1.txt"); + } + if (b) { + cout << "success" << endl; + } + else { + cout << "failure" << endl; + } + m.importMaze("Mazes/maze_sample.txt"); + assert(m.traverseMaze()); + cout << m << endl; + m.importMaze("Mazes/solvableMaze.txt"); + assert(m.traverseMaze()); + cout << m << endl; + cout << m.getMazePath() << endl; + cout << "first" << endl; + m.importMaze("Mazes/solvableMaze2.txt"); + assert(m.traverseMaze()); + cout << m.getMazePath() << endl; + cout << "second" << endl; + m.importMaze("Mazes/badMaze1.txt"); + assert(!m.traverseMaze()); + m.importMaze("Mazes/badMaze2.txt"); + assert(!m.traverseMaze()); + m.importMaze("Mazes/badMaze2.txt"); + assert(!m.traverseMaze()); + m.importMaze("Mazes/maze_sample.txt"); + +} diff --git a/cs235/lab07/Factory.cpp b/cs235/lab07/Factory.cpp new file mode 100644 index 0000000..3faa83d --- /dev/null +++ b/cs235/lab07/Factory.cpp @@ -0,0 +1,21 @@ +#include "Factory.h" +//You may add #include statments here +using namespace std; + +/* + Unlike all other documents provided, you may modify this document slightly (but do not change its name) +*/ +//======================================================================================= +/* + createMimic() + + Creates and returns an object whose class extends MimicInterface. + This should be an object of a class you have created. + + Example: If you made a class called "Mimic", you might say, "return new Mimic();". +*/ +MimicInterface* Factory::createMimic() +{ + return NULL;//Modify this line +} +//======================================================================================= diff --git a/cs235/lab07/Factory.h b/cs235/lab07/Factory.h new file mode 100644 index 0000000..5130ebf --- /dev/null +++ b/cs235/lab07/Factory.h @@ -0,0 +1,21 @@ +#include "MimicInterface.h" +#pragma once +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + createMimic() + + Creates and returns an object whose class extends MimicInterface. + This should be an object of a class you have created. + + Example: If you made a class called "Mimic", you might say, "return new Mimic();". +*/ +class Factory +{ +public: + static MimicInterface* createMimic(); +}; + +//======================================================================================= diff --git a/cs235/lab07/Makefile b/cs235/lab07/Makefile new file mode 100644 index 0000000..0dfb753 --- /dev/null +++ b/cs235/lab07/Makefile @@ -0,0 +1,31 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=Factory.o mimic.o dmmap.o pwnd.o #ignoreme.a +EXE=main +all: pwnd.o $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +test: test.cpp mimic.o dmmap.o +rtest: test + ./test +Factory.o: Factory.cpp Factory.h +mimic.o: mimic.cpp mimic.h +dmmap.o: dmmap.cpp dmmap.h +pwnd.o: pwnd.c + +run: main + ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -rvf *.dSYM + +drun: main + gdb ./main + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/lab07/MimicInterface.h b/cs235/lab07/MimicInterface.h new file mode 100644 index 0000000..1360776 --- /dev/null +++ b/cs235/lab07/MimicInterface.h @@ -0,0 +1,69 @@ +#pragma once +#include +#include +#include +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +class MimicInterface +{ + public: + MimicInterface(){} + virtual ~MimicInterface(){} + + //Part 1-------------------------------------------------------------- + /** + * createMap + * + * Creates a prefix-suffix map based on the input text. + * + * Go through the input text and examine each group of 3 words. Refer + * to the first two words as the "prefix" and the third word as the + * "suffix". Create a map that associates each prefix with each suffix. + * If you encounter a prefix that has been read already, add the new + * suffix to the list of suffixes already associated with that prefix; + * in this manner, each prefix can be associated with multiple + * suffixes and even multiple copies of the same suffix. Note that + * the input texts will only contain words separated by spaces. Also + * note that the last two word prefix in the text should be associated + * with the suffix "THE_END". + * + * @param input + * the sample text to be mimicked + */ + virtual void createMap(string input) = 0; + + /** + * getSuffixList + * + * Returns the list of suffixes associated with the given prefix. + * Returns an empty vector if the given prefix is not in the map or no + * map has been created yet. + * + * @param prefix + * the prefix to be found + * @return a list of suffixes associated with the given prefix if the + * prefix is found; an empty vector otherwise + */ + virtual vector getSuffixList(string prefix) = 0; + + //Part 2-------------------------------------------------------------- + /** + * generateText + * + * Generates random text using the map created by the createMap method. + * + * To generate the new text, start with the first prefix that was read + * and randomly select one of the suffixes associated with that prefix. + * The next prefix is the second word from the previous prefix and the + * selected suffix. Continue selecting random suffixes and building the + * next prefix until the suffix "THE_END" is selected. The token + * "THE_END" should not be returned as part of your generated text. + * + * @return random text generated using the map created with the sample + * text; an empty string if no map has been created yet + */ + virtual string generateText() = 0; +}; diff --git a/cs235/lab07/dmmap.cpp b/cs235/lab07/dmmap.cpp new file mode 100644 index 0000000..4c9f379 --- /dev/null +++ b/cs235/lab07/dmmap.cpp @@ -0,0 +1,6 @@ +#include "dmmap.h" + +dmmap::dmmap(string prefix, string suffix) { + key = prefix; + values.push_back(suffix); +} diff --git a/cs235/lab07/dmmap.h b/cs235/lab07/dmmap.h new file mode 100644 index 0000000..17504ec --- /dev/null +++ b/cs235/lab07/dmmap.h @@ -0,0 +1,15 @@ +#ifndef __DMMAP_H__ +#define __DMMAP_H__ + +#include +#include + +using namespace std; + +class dmmap { + public: + dmmap(string prefix, string suffix); + string key; + vector values; +}; +#endif diff --git a/cs235/lab07/fungulator/main.go b/cs235/lab07/fungulator/main.go new file mode 100644 index 0000000..583e260 --- /dev/null +++ b/cs235/lab07/fungulator/main.go @@ -0,0 +1,71 @@ +package main + +import ( + "bufio" + "fmt" + "math/rand" + "os" + "strings" + "time" +) + +type LengthError struct { + Count int +} + +func (e LengthError) Error() string { + return fmt.Sprintf("%d is not long enough (must be longer than 2)", e.Count) +} + +func parse(words []string) (map[string][]string, string, error) { + if len(words) < 3 { + return nil, "", LengthError{len(words)} + } + mapping := make(map[string][]string) + var a, b, k, v, first_prefix string + for i := 0; i < len(words)-2; i++ { + a = words[i] + b = words[i+1] + k = fmt.Sprintf("%v %v", a, b) + if i == 0 { + first_prefix = k + } + v = words[i+2] + mapping[k] = append(mapping[k], v) + } + k = fmt.Sprintf("%v %v", words[len(words)-2], words[len(words)-1]) + v = "THE_END" + mapping[k] = append(mapping[k], v) + return mapping, first_prefix, nil +} + +func generateText(mapping map[string][]string, first_prefix string) string { + cur_prefix := first_prefix + output := first_prefix + for { + suffix := mapping[cur_prefix][rand.Intn(len(mapping[cur_prefix]))] + if suffix == "THE_END" { + break + } + output += fmt.Sprintf(" %v", suffix) + _prefix := strings.SplitN(cur_prefix, " ", 2) + cur_prefix = fmt.Sprintf("%v %v", _prefix[1], suffix) + } + return output +} + +func main() { + rand.Seed(time.Now().UnixNano()) + instream := bufio.NewReader(os.Stdin) + for s, err := instream.ReadBytes('\n'); err == nil; s, err = instream.ReadBytes('\n') { + words := strings.Fields(string(s)) + mapping, first_prefix, err := parse(words) + var generated_text string + if err != nil { + generated_text = err.Error() + } else { + generated_text = generateText(mapping, first_prefix) + } + fmt.Printf("%v\n\t%v\n\t%v\n", words, mapping, generated_text) + } +} diff --git a/cs235/lab07/mimic.cpp b/cs235/lab07/mimic.cpp new file mode 100644 index 0000000..fbd433a --- /dev/null +++ b/cs235/lab07/mimic.cpp @@ -0,0 +1,104 @@ +#include "mimic.h" + +mimic::mimic() {} + +vector parser(string input) { + vector results; + string s; + for(unsigned int i = 0; i < input.length(); i++) { + char c = input[i]; + if(c != ' ') { + s += c; + } + else { + if(s != "") { + results.push_back(s); + s.clear(); + } + } + } + if(s != "") { + results.push_back(s); + } + return results; +} + +void mimic::add_to_dmmap(string prefix, string suffix) { + bool add_test = true; + for(unsigned int i = 0; i < dmmaps.size(); i++) { + if(dmmaps[i].key == prefix) { + add_test = false; + dmmaps[i].values.push_back(suffix); + } + } + if(add_test) { + dmmaps.push_back(dmmap(prefix, suffix)); + } +} + +void mimic::createMap(string input) { + cout << input << endl; + vector parsed_input = parser(input); + for(unsigned int i = 0; i < parsed_input.size() - 2; i++) { + string prefix; + string suffix; + prefix += parsed_input[i]; + prefix += " "; + prefix += parsed_input[i+1]; + suffix += parsed_input[i+2]; + add_to_dmmap(prefix, suffix); + } + string prefix = parsed_input[parsed_input.size() - 2]; + prefix += " "; + prefix += parsed_input[parsed_input.size() - 1]; + add_to_dmmap(prefix, "THE_END"); +} + +vector mimic::getSuffixList(string prefix) { + for(unsigned int i = 0; i < dmmaps.size(); i++) { + if(dmmaps[i].key == prefix) { + return dmmaps[i].values; + } + } + vector v; + return v; +} + +string mimic::generateText() { + string text; + srand (time(NULL)); + if(dmmaps.size() == 0) { + return ""; + } + text += dmmaps[0].key; + text += " "; + string prefix1 = dmmaps[0].key; + while(true) { + vector v = getSuffixList(prefix1); + string temp = v[rand() % v.size()]; + if(temp == "THE_END") { + text.erase(text.find_last_not_of(" ")+1); + return text; + } + else { + text += temp; + text += " "; + } + vector prefix_vec = parser(prefix1); + prefix1 = prefix_vec[1]; + prefix1 += " "; + prefix1 += temp; + } +} + +ostream & operator<<(ostream & os, mimic m) { + os << "["; + for(unsigned int i = 0; i < m.dmmaps.size(); i++) { + os << "'" << m.dmmaps[i].key << "' ,"; + for(unsigned int j = 0; j < m.dmmaps[i].values.size(); j++) { + os << m.dmmaps[i].values[j] << ", "; + } + } + os << "]"; + return os; +} diff --git a/cs235/lab07/mimic.h b/cs235/lab07/mimic.h new file mode 100644 index 0000000..f08243d --- /dev/null +++ b/cs235/lab07/mimic.h @@ -0,0 +1,24 @@ +#ifndef __MIMIC__H_ +#define __MIMIC__H_ + +#include "MimicInterface.h" +#include "dmmap.h" +#include +#include +#include +#include + +using namespace std; + +class mimic : public MimicInterface { + public: + mimic(); + vector dmmaps; + void createMap(string input); + vector getSuffixList(string prefix); + void add_to_dmmap(string prefix, string suffix); + string generateText(); + friend ostream & operator<<(ostream & os, mimic m); +}; +ostream & operator<<(ostream & os, mimic m); +#endif diff --git a/cs235/lab07/pwnd.c b/cs235/lab07/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab07/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/lab07/sample.txt b/cs235/lab07/sample.txt new file mode 100644 index 0000000..623259f --- /dev/null +++ b/cs235/lab07/sample.txt @@ -0,0 +1,8 @@ +I want to swing I want to boat Boat wants me +a b c d e f g +a b c +1 2 +1 + +No no no, no! +1 2 3 4 5 diff --git a/cs235/lab07/test.cpp b/cs235/lab07/test.cpp new file mode 100644 index 0000000..70cdf55 --- /dev/null +++ b/cs235/lab07/test.cpp @@ -0,0 +1,13 @@ +#include "mimic.h" + +using namespace std; + +int main() { + mimic m; + m.createMap("I want to swing I want to boat Boat wants me"); + cout << m << endl; + cout << "'" << m.generateText() << "'" << endl; +// m.createMap("hello beautiful world"); +// cout << m << endl; +// cout << m.generateText() << endl; +} diff --git a/cs235/lab08/Factory.cpp b/cs235/lab08/Factory.cpp new file mode 100644 index 0000000..65c03be --- /dev/null +++ b/cs235/lab08/Factory.cpp @@ -0,0 +1,22 @@ +#include "Factory.h" +#include "qstest.h" +//You may add #include statments here +using namespace std; + +/* + * Unlike all other documents provided, you may modify this document slightly (but do not change its name) + */ +//======================================================================================= +/* + createQSTest() + + Creates and returns an object whose class extends QSTestInterface. + This should be an object of a class you have created. + + Example: If you made a class called "QSTest", you might say, "return new QSTest();". +*/ +QSTestInterface* Factory::createQSTest() +{ + return new qstest();//Modify this line +} +//======================================================================================= diff --git a/cs235/lab08/Factory.h b/cs235/lab08/Factory.h new file mode 100644 index 0000000..ce51c74 --- /dev/null +++ b/cs235/lab08/Factory.h @@ -0,0 +1,21 @@ +#include "QSTestInterface.h" +#pragma once +/* + * WARNING: It is expressly forbidden to modify any part of this document, including its name + */ +//======================================================================================= +/* + createQSTest() + + Creates and returns an object whose class extends QSTestInterface. + This should be an object of a class you have created. + + Example: If you made a class called "QSTest", you might say, "return new QSTest();". +*/ +class Factory +{ + public: + static QSTestInterface* createQSTest(); +}; + +//======================================================================================= diff --git a/cs235/lab08/Makefile b/cs235/lab08/Makefile new file mode 100644 index 0000000..42bca88 --- /dev/null +++ b/cs235/lab08/Makefile @@ -0,0 +1,31 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=Factory.o qstest.o sorter.o pwnd.o ignoreme.a +EXE=main +all: pwnd.o $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +test: test.cpp qstest.o sorter.o +rtest: test + ./test +Factory.o: Factory.cpp Factory.h +qstest.o: qstest.cpp qstest.h +sorter.o: sorter.cpp sorter.h +pwnd.o: pwnd.c + +run: main + ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -rvf *.dSYM + +drun: main + gdb ./main + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/lab08/QSInterface.h b/cs235/lab08/QSInterface.h new file mode 100644 index 0000000..01790ff --- /dev/null +++ b/cs235/lab08/QSInterface.h @@ -0,0 +1,126 @@ +#pragma once +#include +#include +using namespace std; + +/* + * WARNING: It is expressly forbidden to modify any part of this document, including its name + */ + +class QSInterface +{ + public: + QSInterface(){} + virtual ~QSInterface(){} + + /* + * For all methods below, it is assumed that the given array's size is correctly provided by the following parameter. + */ + + /* + * sortAll() + * + * Sorts elements of the given array. After this method is called, every + * element in the array is less than or equal to the following element. + * + * Does nothing if the given array is empty. + * + * @param data + * an array of integers + * @param size + * the correct size of the given array + */ + virtual void sortAll(int data[], int size) = 0; + + /* + * sort() + * + * Sorts elements of the given array between the two given indices. After + * this method is called, every element between the indices is less than or + * equal to the following element. + * + * Does nothing if the given array is empty, if either of the given integers + * is out of bounds, or if the first integer is not less than the second + * integer. + * + * @param data + * an array of integers + * @param size + * the correct size of the given array + * @param left + * the left boundary for the subarray to sort + * @param right + * the right boundary for the subarray to sort + */ + virtual void sort(int data[], int size, int left, int right) = 0; + + /* + * medianOfThree() + * + * Performs median-of-three pivot selection from among the values in + * the given array between the two given indices. Median-of-three pivot + * selection will sort the first, middle, and last elements in a given + * array with respect to each other. After this method is called, + * data[first] <= data[middle] <= data[last], where middle = + * (first + last)/2. + * + * Does nothing if the given array is empty, if either of the given integers + * is out of bounds, or if the first integer is not less than the second + * integer. + * + * @param data + * an array of integers + * @param size + * the correct size of the given array + * @param left + * the left boundary for the subarray from which to find a pivot + * @param right + * the right boundary for the subarray from which to find a pivot + */ + virtual void medianOfThree(int data[], int size, int left, int right) = 0; + + /* + * Partitions a subarray around a pivot value selected according to + * median-of-three pivot selection. + * + * The values which are smaller than the pivot should be placed to the left + * of the pivot; the values which are larger than the pivot should be placed + * to the right of the pivot. + * + * Does nothing and returns -1 if the given array is null, if either of the + * given integers is out of bounds, or if the first integer is not less than + * the second integer. + * + * @param data + * an array of integers + * @param size + * the correct size of the given array + * @param left + * the left boundary for the subarray to partition + * @param right + * the right boundary for the subarray to partition + * @return the pivot's ending index after the partition completes; -1 if + * provided with bad input + */ + virtual int partition(int data[], int size, int left, int right) = 0; + + /* + * Swaps the values at the given indices within the given array. + * + * After this method is called, the values in data[i] and data[j] should be + * swapped. + * + * Does nothing if the given array is null or if either of the given + * integers is out of bounds. + * + * @param data + * an array of integers + * @param size + * the correct size of the given array + * @param i + * the first index + * @param j + * the second index + */ + virtual void swap(int data[], int size, int i, int j) = 0; +}; diff --git a/cs235/lab08/QSTestInterface.h b/cs235/lab08/QSTestInterface.h new file mode 100644 index 0000000..1c0c6e1 --- /dev/null +++ b/cs235/lab08/QSTestInterface.h @@ -0,0 +1,80 @@ +#pragma once +#include +#include +#include "QSInterface.h" +using namespace std; + +/* + * WARNING: It is expressly forbidden to modify any part of this document, including its name + */ + +class QSTestInterface +{ + public: + QSTestInterface(){} + virtual ~QSTestInterface(){} + + /* + * For all methods below, the correctness of an operation is defined in QSInterface.h. + */ + + /* + * testSortAll + * + * Returns true if the given QSInterface object correctly sorts given arrays. + * + * @param test + * an implementation of the QSInterface class + * @return + * true if [test] correctly sorts; false otherwise + */ + virtual bool testSortAll(QSInterface* test) = 0; + + /* + * testSort + * + * Returns true if the given QSInterface object correctly sorts given subarrays. + * + * @param test + * an implementation of the QSInterface class + * @return + * true if [test] correctly sorts; false otherwise + */ + virtual bool testSort(QSInterface* test) = 0; + + /* + * testMedianOfThree + * + * Returns true if the given QSInterface object correctly performs median-of-three pivot selection. + * + * @param test + * an implementation of the QSInterface class + * @return + * true if [test] correctly selects a pivot; false otherwise + */ + virtual bool testMedianOfThree(QSInterface* test) = 0; + + /* + * testPartition + * + * Returns true if the given QSInterface object correctly partitions. + * + * @param test + * an implementation of the QSInterface class + * @return + * true if [test] correctly partitions; false otherwise + */ + virtual bool testPartition(QSInterface* test) = 0; + + /* + * testSwap + * + * Returns true if the given QSInterface object correctly swaps elements. + * + * @param test + * an implementation of the QSInterface class + * @return + * true if [test] correctly swaps elements = 0; false otherwise + */ + virtual bool testSwap(QSInterface* test) = 0; +}; diff --git a/cs235/lab08/pwnd.c b/cs235/lab08/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab08/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/lab08/qstest.cpp b/cs235/lab08/qstest.cpp new file mode 100644 index 0000000..0a00e24 --- /dev/null +++ b/cs235/lab08/qstest.cpp @@ -0,0 +1,301 @@ +#include "qstest.h" + +bool qstest::testSortAll(QSInterface* test) { + sorter s; + int temp[20] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9, 53, 24, 64, 75, 132, 74, 24, 64, 745, 21}; + int temp1[20] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9, 53, 24, 64, 75, 132, 74, 24, 64, 745, 21}; + test->sortAll(temp, 20); + s.sortAll(temp1, 20); + for(unsigned int i = 0; i < 20; i++) { + if(temp[i] != temp1[i]) + return false; + } + return true;; +} + +bool qstest::testSort(QSInterface* test) { + sorter s; + int temp[20] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9, 53, 24, 64, 75, 132, 74, 24, 64, 745, 21}; + int temp1[20] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9, 53, 24, 64, 75, 132, 74, 24, 64, 745, 21}; + test->sort(temp, 20, 3, 15); + s.sort(temp1, 20, 3, 15); + for(unsigned int i = 0; i < 20; i++) { + if(temp[i] != temp1[i]) + return false; + } + int temp2[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp3[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->sort(temp2, 10, 0, 9); + s.sort(temp3, 10, 0, 9); + for(unsigned int i = 0; i < 10; i++) { + if(temp2[i] != temp3[i]) + return false; + } + int temp4[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp5[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->sort(temp4, 10, -1, 4); + s.sort(temp5, 10, -1, 4); + for(unsigned int i = 0; i < 10; i++) { + if(temp4[i] != temp5[i]) + return false; + } + int temp6[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp7[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->sort(temp6, 10, 3, 7); + s.sort(temp7, 10, 3, 7); + for(unsigned int i = 0; i < 10; i++) { + if(temp6[i] != temp7[i]) + return false; + } + int temp8[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp9[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->sort(temp8, 10, 3, 10); + s.sort(temp9, 10, 3, 10); + for(unsigned int i = 0; i < 10; i++) { + if(temp8[i] != temp9[i]) + return false; + } + int tempa[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int tempb[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->sort(tempa, 10, 4, 4); + s.sort(tempb, 10, 4, 4); + for(unsigned int i = 0; i < 10; i++) { + if(tempa[i] != tempb[i]) + return false; + } + int tempc[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int tempd[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->sort(tempc, 10, 4, 2); + s.sort(tempd, 10, 4, 2); + for(unsigned int i = 0; i < 10; i++) { + if(tempc[i] != tempd[i]) + return false; + } + int tempe[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int tempf[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->sort(tempe, 10, 4, -1); + s.sort(tempf, 10, 4, -1); + for(unsigned int i = 0; i < 10; i++) { + if(tempe[i] != tempf[i]) + return false; + } + return true; +} + +bool qstest::testMedianOfThree(QSInterface* test) { + sorter s; + int what[9] = {5, 5, 5, 5, 1, 5, 5, 5, 5}; + int what1[9] = {5, 5, 5, 5, 1, 5, 5, 5, 5}; + test->medianOfThree(what, 9, 0, 8); + s.medianOfThree(what1, 9, 0, 8); + for(unsigned int i = 0; i < 9; i++) { + if(what[i] != what1[i]) + return false; + } + int temp[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp1[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->medianOfThree(temp, 10, 0, 9); + s.medianOfThree(temp1, 10, 0, 9); + for(unsigned int i = 0; i < 10; i++) { + if(temp[i] != temp1[i]) + return false; + } + int temp2[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp3[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->medianOfThree(temp2, 10, 2, 9); + s.medianOfThree(temp3, 10, 2, 9); + for(unsigned int i = 0; i < 10; i++) { + if(temp2[i] != temp3[i]) + return false; + } + int temp4[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp5[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->medianOfThree(temp4, 10, -2, 9); + s.medianOfThree(temp5, 10, -2, 9); + for(unsigned int i = 0; i < 10; i++) { + if(temp4[i] != temp5[i]) + return false; + } + int temp6[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp7[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->medianOfThree(temp6, 10, 2, -9); + s.medianOfThree(temp7, 10, 2, -9); + for(unsigned int i = 0; i < 10; i++) { + if(temp6[i] != temp7[i]) + return false; + } + int temp8[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp9[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->medianOfThree(temp8, 10, 7, 5); + s.medianOfThree(temp9, 10, 7, 5); + for(unsigned int i = 0; i < 10; i++) { + if(temp8[i] != temp9[i]) + return false; + } + int tempa[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int tempb[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->medianOfThree(tempa, 10, 7, 10); + s.medianOfThree(tempb, 10, 7, 10); + for(unsigned int i = 0; i < 10; i++) { + if(tempa[i] != tempb[i]) + return false; + } + int tempc[1] = {4}; + int tempd[1] = {4}; + test->medianOfThree(tempc, 10, 0, 0); + s.medianOfThree(tempd, 10, 0, 0); + for(unsigned int i = 0; i < 1; i++) { + if(tempc[i] != tempd[i]) + return false; + } + int tempe[2] = {4, 8}; + int tempf[2] = {4, 8}; + test->medianOfThree(tempe, 10, 0, 1); + s.medianOfThree(tempf, 10, 0, 1); + for(unsigned int i = 1; i < 2; i++) { + if(tempe[i] != tempf[i]) + return false; + } + int tempg[3] = {4, 8, 3}; + int temph[3] = {4, 8, 3}; + test->medianOfThree(tempg, 10, 0, 2); + s.medianOfThree(temph, 10, 0, 2); + for(unsigned int i = 3; i < 1; i++) { + if(tempg[i] != temph[i]) + return false; + } + int tempi[4] = {4, 8, 3, 6}; + int tempj[4] = {4, 8, 3, 6}; + test->medianOfThree(tempi, 10, 0, 3); + s.medianOfThree(tempj, 10, 0, 3); + for(unsigned int i = 0; i < 4; i++) { + if(tempi[i] != tempj[i]) + return false; + } + int tempk[4] = {4, 8, 3, 6}; + int templ[4] = {4, 8, 3, 6}; + test->medianOfThree(tempk, 10, 0, 5); + s.medianOfThree(templ, 10, 0, 5); + for(unsigned int i = 0; i < 4; i++) { + if(tempk[i] != templ[i]) + return false; + } + return true;; +} + +bool qstest::testPartition(QSInterface* test) { + sorter s; +// int size[1] = {7}; +// int size1[1] = {7}; +// if(test->partition(size, 1, 0, 0) != s.partition(size1, 1, 0, 0)) { +// return false; +// } +// for(unsigned int i = 0; i < 1; i++) { +// if(size[i] != size1[i]) +// return false; +// } + int size2[2] = {7, 1}; + int size3[2] = {7, 1}; + if(test->partition(size2, 2, 0, 1) != s.partition(size3, 2, 0, 1)) { + return false; + } + for(unsigned int i = 0; i < 2; i++) { + if(size2[i] != size3[i]) + return false; + } + int temp[14] = {6, 1, 6, 2, 0, 0, 5, 8, 2, 8, 1, 9, 6, 4}; + int temp1[14] = {6, 1, 6, 2, 0, 0, 5, 8, 2, 8, 1, 9, 6, 4}; + if(test->partition(temp, 14, 0, 14) != s.partition(temp1, 14, 0, 14)) { + return false; + } + for(unsigned int i = 0; i < 14; i++) { + if(temp[i] != temp1[i]) + return false; + } + int temp2[20] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9, 53, 24, 64, 75, 132, 74, 24, 64, 745, 21}; + int temp3[20] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9, 53, 24, 64, 75, 132, 74, 24, 64, 745, 21}; + if(test->partition(temp2, 20, 0, 19) != s.partition(temp3, 20, 0, 19)) { + return false; + } + for(unsigned int i = 0; i < 20; i++) { + if(temp2[i] != temp3[i]) + return false; + } + int temp4[14] = {6, 1, 6, 2, 0, 0, 5, 8, 2, 8, 1, 9, 6, 4}; + int temp5[14] = {6, 1, 6, 2, 0, 0, 5, 8, 2, 8, 1, 9, 6, 4}; + if(test->partition(temp4, 14, -1, 13) != s.partition(temp5, 14, -1, 13)) { + return false; + } + for(unsigned int i = 0; i < 14; i++) { + if(temp4[i] != temp5[i]) + return false; + } + int temp6[14] = {6, 1, 6, 2, 0, 0, 5, 8, 2, 8, 1, 9, 6, 4}; + int temp7[14] = {6, 1, 6, 2, 0, 0, 5, 8, 2, 8, 1, 9, 6, 4}; + if(test->partition(temp6, 14, 6, 2) != s.partition(temp7, 14, 6, 2)) { + return false; + } + for(unsigned int i = 0; i < 14; i++) { + if(temp6[i] != temp7[i]) + return false; + } + int temp8[14] = {6, 1, 6, 2, 0, 0, 5, 8, 2, 8, 1, 9, 6, 4}; + int temp9[14] = {6, 1, 6, 2, 0, 0, 5, 8, 2, 8, 1, 9, 6, 4}; + if(test->partition(temp8, 14, 6, -2) != s.partition(temp9, 14, 6, -2)) { + return false; + } + for(unsigned int i = 0; i < 14; i++) { + if(temp8[i] != temp9[i]) + return false; + } + return true; +} + +bool qstest::testSwap(QSInterface* test) { + sorter s; + int temp[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + int temp1[10] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 9}; + test->swap(temp, 10, 0, 9); + s.swap(temp1, 10, 0, 9); + for(unsigned int i = 0; i < 10; i++) { + if(temp[i] != temp1[i]) + return false; + } + test->swap(temp, 10, -1, 9); + s.swap(temp1, 10, -1, 9); + for(unsigned int i = 0; i < 10; i++) { + if(temp[i] != temp1[i]) + return false; + } + test->swap(temp, 10, 3, 6); + s.swap(temp1, 10, 3, 6); + for(unsigned int i = 0; i < 10; i++) { + if(temp[i] != temp1[i]) + return false; + } + test->swap(temp, 10, 8, 10); + s.swap(temp1, 10, 8, 10); + for(unsigned int i = 0; i < 10; i++) { + if(temp[i] != temp1[i]) + return false; + } + test->swap(temp, 10, 8, 8); + s.swap(temp1, 10, 8, 8); + for(unsigned int i = 0; i < 10; i++) { + if(temp[i] != temp1[i]) + return false; + } + test->swap(temp, 10, 8, 2); + s.swap(temp1, 10, 8, 2); + for(unsigned int i = 0; i < 10; i++) { + if(temp[i] != temp1[i]) + return false; + } + test->swap(temp, 10, 8, -2); + s.swap(temp1, 10, 8, -2); + for(unsigned int i = 0; i < 10; i++) { + if(temp[i] != temp1[i]) + return false; + } + return true;; +} diff --git a/cs235/lab08/qstest.h b/cs235/lab08/qstest.h new file mode 100644 index 0000000..a8edd77 --- /dev/null +++ b/cs235/lab08/qstest.h @@ -0,0 +1,16 @@ +#ifndef __QSTEST_H__ +#define __QSTEST_H__ + +#include "QSTestInterface.h" +#include "sorter.h" + +class qstest : public QSTestInterface { + public: + sorter s; + bool testSortAll(QSInterface* test); + bool testSort(QSInterface* test); + bool testMedianOfThree(QSInterface* test); + bool testPartition(QSInterface* test); + bool testSwap(QSInterface* test); +}; +#endif diff --git a/cs235/lab08/sorter.cpp b/cs235/lab08/sorter.cpp new file mode 100644 index 0000000..c8bc64c --- /dev/null +++ b/cs235/lab08/sorter.cpp @@ -0,0 +1,109 @@ +#include "sorter.h" + +int partitioner(int* input, int p, int r) { + int pivot = input[r]; + while (p < r) { + while (input[p] < pivot) + p++; + while (input[r] > pivot) + r--; + if (input[p] == input[r]) + p++; + else if (p < r) { + int tmp = input[p]; + input[p] = input[r]; + input[r] = tmp; + } + } + return r; +} + +void quicksort(int* input, int p, int r) { + if ( p < r ) { + int j = partitioner(input, p, r); + quicksort(input, p, j-1); + quicksort(input, j+1, r); + } +} + +void sorter::sortAll(int data[], int size) { + if(size == 0) + return; + quicksort(data, 0, size); +} + +void sorter::sort(int data[], int size, int left, int right) { + if(size == 0 || left < 0 || left >= size || right < 0 || right >= size) + return; + quicksort(data, left, right); +} + +void sorter::medianOfThree(int data[], int size, int left, int right) { + if(size == 0 || left < 0 || left >= size || right < 0 || right >= size || right < left) + return; + int l, m, r; + l = data[left]; + r = data[right]; + m = data [(left + right)/2]; + if(l > m) { + swap(data, size, left, (left + right)/2 ); + l = data[left]; + r = data[right]; + m = data [(left + right)/2]; + } + if(l > r) { + swap(data, size, left, right); + l = data[left]; + r = data[right]; + m = data [(left + right)/2]; + } + if(m > r) { + swap(data, size, (left + right)/2 , right); + l = data[left]; + r = data[right]; + m = data [(left + right)/2]; + } +} + +int sorter::partition(int data[], int size, int left, int right) { + if(size == 0 || left < 0 || left >= size || right < 0 || right >= size || right < left) + return -1; + if(size == 1) { + return 0; + } + medianOfThree(data, size, 0, right); + swap(data, size, 0, (right + left)/2); + int l = 1; + int r = size - 1; + bool ltrue = false; + bool rtrue = false; + while(l <= r) { + if(data[0] < data[l]) { + ltrue = true; + } + else { + l++; + } + if(data[0] > data[r]) { + rtrue = true; + } + else { + r--; + } + if(ltrue && rtrue) { + rtrue = false; + ltrue = false; + swap(data, size, l, r); + } + } + swap(data, size, 0, r); + return r; +} + +void sorter::swap(int data[], int size, int i, int j) { + if(size == 0 || i < 0 || i >= size || j < 0 || j >= size) + return; + int temp = data[i]; + data[i] = data[j]; + data[j] = temp; +} diff --git a/cs235/lab08/sorter.h b/cs235/lab08/sorter.h new file mode 100644 index 0000000..9c56e0d --- /dev/null +++ b/cs235/lab08/sorter.h @@ -0,0 +1,17 @@ +#ifndef __SORTER_H__ +#define __SORTER_H__ + +#include "QSInterface.h" +#include + +using namespace std; + +class sorter : public QSInterface { + public: + void sortAll(int data[], int size); + void sort(int data[], int size, int left, int right); + void medianOfThree(int data[], int size, int left, int right); + int partition(int data[], int size, int left, int right); + void swap(int data[], int size, int i, int j); +}; +#endif diff --git a/cs235/lab08/test.cpp b/cs235/lab08/test.cpp new file mode 100644 index 0000000..47819cf --- /dev/null +++ b/cs235/lab08/test.cpp @@ -0,0 +1,31 @@ +#include "sorter.h" +#include "qstest.h" +#include + +using namespace std; + +int main() { + int size = 5; + int temp[] = {5, 3, 7, 2, 8, 2, 4, 1, 6, 5}; + sorter s; + s.sortAll(temp, size); + int temp1[] = {5, 3, 7, 2, 5, 2, 4, 1, 6, 8}; + cout << "before" << endl; + s.sort(temp1, size, 3, 7); + // int temp3[20] = {4, 7, 3, 8, 12, -2, 41, 63, 2, 5, 53, 24, 64, 75, 132, 74, 24, 64, 745, 21}; + int temp3[1] = {5}; +// int what1[10] = {5, 5, 5, 5, 1, 5, 5, 5, 5}; +// if(test->partition(what, 10, 0, 8) != s.partition(what1, 10, 0, 8)) { +// return false; +// } + cout << temp3[1/2] << " this is the median" << endl; + for(int i = 0; i < 1; i++) { + cout << temp3[i] << " "; + } + cout << "BEFORE" << endl; + cout << s.partition(temp3, 1, 0, 0) << " this is the return value" << endl; + for(int i = 0; i < 1; i++) { + cout << temp3[i] << " "; + } + cout << "AFTER" << endl; +} diff --git a/cs235/lab08/whattotest.txt b/cs235/lab08/whattotest.txt new file mode 100644 index 0000000..5a2d501 --- /dev/null +++ b/cs235/lab08/whattotest.txt @@ -0,0 +1,8 @@ +test all sizes + 0, 1, 2, 3, 4, many +test boundary cases + +test [5,5,5,5,1,5,5,5,5] +test [5, 1, 2, 3, 4, 1, 2, 3, 4, 5] +[1, 2, 3, 4, 5] +[5, 4, 3, 2, 1] diff --git a/cs235/lab09/BSTInterface.h b/cs235/lab09/BSTInterface.h new file mode 100644 index 0000000..af51020 --- /dev/null +++ b/cs235/lab09/BSTInterface.h @@ -0,0 +1,38 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once + +#include "NodeInterface.h" + +using namespace std; + +class BSTInterface { +public: + BSTInterface() {} + virtual ~BSTInterface() {} + + //Please note that the class that implements this interface must be made + //of objects which implement the NodeInterface + + /* + * Returns the root node for this tree + * + * @return the root node for this tree. + */ + virtual NodeInterface * getRootNode() = 0; + + /* + * Attempts to add the given int to the BST tree + * + * @return true if added + * @return false if unsuccessful (i.e. the int is already in tree) + */ + virtual bool add(int data) = 0; + + /* + * Attempts to remove the given int from the BST tree + * + * @return true if successfully removed + * @return false if remove is unsuccessful(i.e. the int is not in the tree) + */ + virtual bool remove(int data) = 0; +}; diff --git a/cs235/lab09/Factory.cpp b/cs235/lab09/Factory.cpp new file mode 100644 index 0000000..2827300 --- /dev/null +++ b/cs235/lab09/Factory.cpp @@ -0,0 +1,20 @@ +#include "Factory.h" +#include "bst.h" +//You may add #include statements here + +/* + You will MODIFY THIS DOCUMENT. +*/ +//======================================================================================= +/* + getBST() + + Creates and returns an object whose class extends BSTInterface. + This should be an object of a class you have created. + + Example: If you made a class called "BST", you might say, "return new BST();". +*/ +BSTInterface * Factory::getBST() +{ + return new bst();//Modify this line +} diff --git a/cs235/lab09/Factory.h b/cs235/lab09/Factory.h new file mode 100644 index 0000000..3f989fb --- /dev/null +++ b/cs235/lab09/Factory.h @@ -0,0 +1,23 @@ +#pragma once +#include "BSTInterface.h" + +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + getBST() + + Creates and returns an object whose class extends BSTInterface. + This should be an object of a class you have created. + + Example: If you made a class called "BST", you might say, "return new BST();". +*/ +class Factory +{ + public: + static BSTInterface * getBST(); +}; +//======================================================================================= diff --git a/cs235/lab09/Makefile b/cs235/lab09/Makefile new file mode 100644 index 0000000..d423bee --- /dev/null +++ b/cs235/lab09/Makefile @@ -0,0 +1,31 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=Factory.o bst.o node.o pwnd.o ignoreme.a +EXE=main +all: $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +test: test.cpp bst.o node.o +rtest: test + ./test +Factory.o: Factory.cpp Factory.h +bst.o: bst.cpp bst.h +node.o: node.cpp node.h +pwnd.o: pwnd.c + +run: main + ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -rvf *.dSYM + +drun: main + gdb ./main + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/lab09/NodeInterface.h b/cs235/lab09/NodeInterface.h new file mode 100644 index 0000000..b9105af --- /dev/null +++ b/cs235/lab09/NodeInterface.h @@ -0,0 +1,31 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once + +class NodeInterface { + +public: + NodeInterface() {} + virtual ~NodeInterface() {} + + /* + * Returns the data that is stored in this node + * + * @return the data that is stored in this node. + */ + virtual int getData() = 0; + + /* + * Returns the left child of this node or null if it doesn't have one. + * + * @return the left child of this node or null if it doesn't have one. + */ + virtual NodeInterface * getLeftChild() = 0; + + /* + * Returns the right child of this node or null if it doesn't have one. + * + * @return the right child of this node or null if it doesn't have one. + */ + virtual NodeInterface * getRightChild() = 0; + +}; diff --git a/cs235/lab09/bst.cpp b/cs235/lab09/bst.cpp new file mode 100644 index 0000000..01c8ab7 --- /dev/null +++ b/cs235/lab09/bst.cpp @@ -0,0 +1,169 @@ +#include "bst.h" + +bst::bst(): root(NULL){} + +bst::~bst() { + while(root) { + remove(root->data); + } +} + +NodeInterface* bst::getRootNode() { + return root; +} + +bool bst::add(int data) { + if(root == NULL) { + root = new node(data); + return true; + } + else { + node* current; + node* parent; + current = root; + while(current) { + parent = current; + if(data == current->data) { + return false; + } + if(data > current->data) { + current = current->right; + } + else { + current = current->left; + } + } + if(data < parent->data) { + parent->left = new node(data); + return true; + } + else { + parent->right = new node(data); + return true;; + } + } + return true; +} + +bool bst::remove(int data) { + bool found = false; + if(root == NULL) { + return false; + } + node* current; + node* parent; + current = root; + while(current) { + if(current->data == data) { + found = true; + break; + } + else { + parent = current; + if(data > current->data) { + current = current->right; + } + else if(data < current->data) { + current = current->left; + } + } + } + if(!found) { + return false; + } + if(root->data == data) { + if(root->right != NULL && root->left == NULL) { + node* temp; + temp = root; + root = root->right; + delete temp; + return true; + } + if(root->right == NULL && root->left != NULL) { + node* temp; + temp = root; + root = root->left; + delete temp; + return true; + } + if(root->right != NULL && root->left != NULL) { + node* temp; + temp = root; + root = root->left; + root->right = temp->right; + delete temp; + return true; + } + else { + delete root; + root = NULL; + return true; + } + } + if((current->left == NULL) && (current->right == NULL)) { + if(parent->left == current) { + parent->left = NULL; + } + else { + parent->right = NULL; + } + delete current; + return true; + } + if((current->left == NULL && current->right != NULL) || (current->left != NULL && current->right == NULL)) { + if(current->left == NULL && current->right != NULL) { + if(parent->left == current) { + parent->left = current->right; + delete current; + } + else { + parent->right = current->right; + delete current; + } + } + else { + if(parent->left == current) { + parent->left = current->left; + delete current; + } + else { + parent->right = current->left; + delete current; + } + } + return true; + } + if(current->left != NULL && current->right != NULL) { + node* greatest_right; + greatest_right = current->right; + if((greatest_right->left == NULL) && (greatest_right->right == NULL)) { + current = greatest_right; + delete greatest_right; + current->right = NULL; + } + else { + if(current->right->left != NULL) { + node* left; + node* temp_left; + temp_left = current->right; + left = current->right->left; + while(left->left != NULL) { + temp_left = left; + left = left->left; + } + current->data = left->data; + delete left; + temp_left->left = NULL; + } + else { + node* temp; + temp = current->right; + current->data = temp->data; + current->right = temp->right; + delete temp; + } + } + return true; + } + return true; +} diff --git a/cs235/lab09/bst.h b/cs235/lab09/bst.h new file mode 100644 index 0000000..b35e0dc --- /dev/null +++ b/cs235/lab09/bst.h @@ -0,0 +1,20 @@ +#ifndef __BST_H__ +#define __BST_H__ + +#include "BSTInterface.h" +#include "node.h" +#include + +using namespace std; + + +class bst : public BSTInterface { + public: + bst(); + ~bst(); + node* root; + NodeInterface * getRootNode(); + bool add(int data); + bool remove(int data); +}; +#endif diff --git a/cs235/lab09/node.cpp b/cs235/lab09/node.cpp new file mode 100644 index 0000000..267597f --- /dev/null +++ b/cs235/lab09/node.cpp @@ -0,0 +1,15 @@ +#include "node.h" + +node::node(int data): data(data), right(NULL), left(NULL) {} + +int node::getData() { + return data; +} + +NodeInterface* node::getLeftChild() { + return left; +} + +NodeInterface* node::getRightChild() { + return right; +} diff --git a/cs235/lab09/node.h b/cs235/lab09/node.h new file mode 100644 index 0000000..207829c --- /dev/null +++ b/cs235/lab09/node.h @@ -0,0 +1,17 @@ +#ifndef __NODE_H__ +#define __NODE_H__ + +#include "NodeInterface.h" +#include + +class node : public NodeInterface { + public: + int data; + node(int data); + node* right; + node* left; + int getData(); + NodeInterface* getLeftChild(); + NodeInterface* getRightChild(); +}; +#endif diff --git a/cs235/lab09/pwnd.c b/cs235/lab09/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab09/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/lab09/test.cpp b/cs235/lab09/test.cpp new file mode 100644 index 0000000..d370558 --- /dev/null +++ b/cs235/lab09/test.cpp @@ -0,0 +1,20 @@ +#include "bst.h" +#include + +using namespace std; + +int main() { + bst b; + b.add(1); + cout << b.root->data << endl; + b.add(-1); + cout << b.root->left->data << endl; + //cout << b.root->right->data << endl; + b.add(4); + cout << b.root->right->data << endl; + b.add(5); + cout << b.root->right->right->data << endl; + b.remove(5); + cout << b.root->data << endl; + +} diff --git a/cs235/lab10/AVLInterface.h b/cs235/lab10/AVLInterface.h new file mode 100644 index 0000000..5f0f6dc --- /dev/null +++ b/cs235/lab10/AVLInterface.h @@ -0,0 +1,59 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once + +#include "NodeInterface.h" + +using namespace std; + +class AVLInterface { +public: + AVLInterface() {} + virtual ~AVLInterface() {} + + //Please note that the class that implements this interface must be made + //of objects which implement the NodeInterface + + /* + * Returns the root node for this tree + * + * @return the root node for this tree. + */ + virtual NodeInterface * getRootNode() = 0; + + /* + * Attempts to add the given int to the AVL tree + * Rebalances the tree if data is successfully added + * + * @return true if added + * @return false if unsuccessful (i.e. the int is already in tree) + */ + virtual bool add(int data) = 0; + + /* + * Attempts to remove the given int from the AVL tree + * Rebalances the tree if data is successfully removed + * + * @return true if successfully removed + * @return false if remove is unsuccessful(i.e. the int is not in the tree) + */ + virtual bool remove(int data) = 0; + + /* + * ROTATIONS: + * LEFT + * + * IDENTIFY NODES TO ROTATE + * + * ROT.RIGHT=CUR.LEFT + * CUR.LEFT=ROT + * CUR=ROT + * + * + * + * + * RIGHT + * + * + * + */ +}; diff --git a/cs235/lab10/Factory.cpp b/cs235/lab10/Factory.cpp new file mode 100644 index 0000000..6e39fc0 --- /dev/null +++ b/cs235/lab10/Factory.cpp @@ -0,0 +1,20 @@ +#include "Factory.h" +#include "avl.h" +//You may add #include statements here + +/* + You will MODIFY THIS DOCUMENT. +*/ +//======================================================================================= +/* + getAVL() + + Creates and returns an object whose class extends AVLInterface. + This should be an object of a class you have created. + + Example: If you made a class called "AVL", you might say, "return new AVL();". +*/ +AVLInterface * Factory::getAVL() +{ + return new avl();//Modify this line +} diff --git a/cs235/lab10/Factory.h b/cs235/lab10/Factory.h new file mode 100644 index 0000000..3f43c41 --- /dev/null +++ b/cs235/lab10/Factory.h @@ -0,0 +1,23 @@ +#pragma once +#include "AVLInterface.h" + +using namespace std; + +/* + WARNING: It is expressly forbidden to modify any part of this document, including its name +*/ +//======================================================================================= +/* + getAVL() + + Creates and returns an object whose class extends AVLInterface. + This should be an object of a class you have created. + + Example: If you made a class called "AVL", you might say, "return new AVL();". +*/ +class Factory +{ + public: + static AVLInterface * getAVL(); +}; +//======================================================================================= diff --git a/cs235/lab10/Makefile b/cs235/lab10/Makefile new file mode 100644 index 0000000..8b45924 --- /dev/null +++ b/cs235/lab10/Makefile @@ -0,0 +1,32 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS=Factory.o avl.o node.o main.o pwnd.o +EXE=main +all: $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +test: test.cpp avl.o node.o +rtest: test + ./test +Factory.o: Factory.cpp Factory.h +avl.o: avl.cpp avl.h +node.o: node.cpp node.h +main.o: main.cpp +pwnd.o: pwnd.c + +run: main + ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -rvf *.dSYM + +drun: main + gdb ./main + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/lab10/NodeInterface.h b/cs235/lab10/NodeInterface.h new file mode 100644 index 0000000..2cd2911 --- /dev/null +++ b/cs235/lab10/NodeInterface.h @@ -0,0 +1,40 @@ +//YOU MAY NOT MODIFY THIS DOCUMENT +#pragma once +#include + +using namespace std; + +class NodeInterface { + +public: + NodeInterface() {} + virtual ~NodeInterface() {} + + /* + * Returns the data that is stored in this node + * + * @return the data that is stored in this node. + */ + virtual int getData() = 0; + + /* + * Returns the left child of this node or null if it doesn't have one. + * + * @return the left child of this node or null if it doesn't have one. + */ + virtual NodeInterface * getLeftChild() = 0; + + /* + * Returns the right child of this node or null if it doesn't have one. + * + * @return the right child of this node or null if it doesn't have one. + */ + virtual NodeInterface * getRightChild() = 0; + + /* + * Returns the height of this node. The height is the number of edges + * from this node to this nodes farthest child. + */ + virtual int getHeight() = 0; + +}; diff --git a/cs235/lab10/avl.cpp b/cs235/lab10/avl.cpp new file mode 100644 index 0000000..186bd29 --- /dev/null +++ b/cs235/lab10/avl.cpp @@ -0,0 +1,383 @@ +#include "avl.h" + +avl::avl(): root(NULL) {} + +avl::~avl() { + deltree(root); +} + +void avl::deltree (node* root) { + // if(root != NULL) { + // deltree(root->left); + // deltree(root->right); + // } + // delete root; +} + +NodeInterface* avl::getRootNode() { + return root; +} + +bool avl::add(int data) { + bool found = false; + node* current; + node* parent; + current = root; + while(current) { + if(current->data == data) { + found = true; + break; + } + else { + parent = current; + if(data > current->data) { + current = current->right; + } + else if(data < current->data) { + current = current->left; + } + } + } + if(found) { + return false; + } + root = build(root, data); + return true; +} + +node* avl::build(node* root, int data) { + node* temp1 = NULL; + node* temp2 = NULL; + if(root == NULL) { + root = new node(data); + h = true; + return root; + } + if(data < root->data) { + root->left = build(root->left, data); + if(h) { + switch(root->height) { + case 1: + temp1 = root->left; + if(temp1->height == 1) { + root->left = temp1->right; + temp1->right = root; + root->height = 0; + root = temp1; + } + else { + temp2 = temp1->right; + temp1->right = temp2->left; + temp2->left = temp1; + root->left = temp2->right; + temp2->right = root; + if(temp2->height == 1) { + root->height = -1; + } + else { + root->height = 0; + } + if(temp2->height == -1) { + temp1->height = 1; + } + else { + temp1->height = 0; + } + root = temp2; + } + root->height = 0; + h = false; + break; + case 0: + root->height = 1; + break; + case -1: + root->height = 0; + h = false; + } + } + } + if(data > root->data) { + root->right = build(root->right, data); + if(h) { + switch(root->height) { + case 1: + root->height = 0; + h = false; + break; + case 0: + root->height = -1; + break; + case -1: + temp1 = root->right; + if(temp1->height == -1) { + root->right = temp1->left; + temp1->left = root; + root->height = 0; + root = temp1; + } + else { + temp2 = temp1->left; + temp1->left = temp2->right; + temp2->right = temp1; + root->right = temp2->left; + temp2->left = root; + if(temp2->height == -1) { + root->height = 1; + } + else { + root->height = 0; + } + if(temp2->height == 1) { + temp1->height = -1; + } + else { + temp1->height = 0; + } + root = temp2; + } + root->height = 0; + h = false; + } + } + } + return root; +} + +bool avl::remove(int data) { + bool found = false; + if(root == NULL) { + return false; + } + node* current; + node* parent; + current = root; + while(current) { + if(current->data == data) { + found = true; + break; + } + else { + parent = current; + if(data > current->data) { + current = current->right; + } + else if(data < current->data) { + current = current->left; + } + } + } + if(!found) { + return false; + } + root = del_leaf(root, data); + return true; +} + +node* avl::del_leaf(node* root, int data) { + node* temp; + if(root == NULL) { + return root; + } + else { + if(data < root->data) { + root->left = del_leaf(root->left, data); + if(h) { + root = bal_right(root); + } + } + else { + if(data > root->data) { + root->right = del_leaf(root->right, data); + if(h) { + root = bal_left(root); + } + } + else { + temp = root; + if(temp->right == NULL) { + root = temp->left; + h = true; + delete temp; + } + else { + if(temp->left == NULL) { + root = temp->right; + h = true; + delete temp; + } + else { + temp->left = del(temp->left, temp); + if(h) { + root = bal_right(root); + } + } + } + } + } + } + return root; +} + +node* avl::del(node* succ, node* n) { + node* temp = succ; + if(succ->right != NULL) { + succ->right = del(succ->right, n); + if(h) { + succ = bal_left(succ); + } + } + else { + node* current; + node* parent; + current = root; + while(current) { + if(current->data == succ->data) { + break; + } + else { + parent = current; + if(succ->data > current->data) { + current = current->right; + } + else if(succ->data < current->data) { + current = current->left; + } + } + } + if(root->left->data == succ->data) { + root->data = succ->data; + n->right = root->right; + succ = succ->left; + delete temp; + h = true; + return succ; + } + else if(root->right->data == succ->data) { + root->data = succ->data; + n->right = root->right; + succ = succ->right; + delete temp; + h = false; + return succ; + } + temp = succ; + n->data = succ->data; + succ = succ->left; + delete temp; + h = true; + } + return succ; +} + +node* avl::bal_right(node* root) { + node* temp1 = NULL; + node* temp2 = NULL; + switch(root->height) { + case 1: + root->height = 0; + break; + case 0: + root->height = -1; + h = false; + break; + case -1: + temp1 = root->right; + if(temp1->height <= 0) { + root->right = temp1->left; + temp1->left = root; + if(temp1->height == 0) { + root->height = -1; + temp1->height = 1; + h = false; + } + else { + root->height = 0; + temp1->height = 0; + } + root = temp1; + } + else { + temp2 = temp1->left; + temp1->left = temp2->right; + temp2->right = temp1; + root->right = temp2->left; + temp2->left = root; + if(temp2->height == -1) { + root->height = 1; + } + else { + root->height = 0; + } + if(temp2->height == 1) { + temp1->height = -1; + } + else { + temp1->height = 0; + } + root = temp2; + temp2->height = 0; + } + } + return root; +} + +node* avl::bal_left(node* root) { + node* temp1 = NULL; + node* temp2 = NULL; + switch(root->height) { + case -1: + root->height = 0; + break; + case 0: + root->height = 1; + h = false; + break; + case 1: + temp1 = root->left; + if(temp1->height >= 0) { + root->left = temp1->right; + temp1->right = root; + if(temp1->height == 0) { + root->height = 1; + temp1->height = -1; + h = false; + } + else { + root->height = 0; + temp1->height = 0; + } + root = temp1; + } + else { + temp2 = temp1->right; + temp1->right = temp2->left; + temp2->left = temp1; + root->left = temp2->right; + temp2->right = root; + if(temp2->height == 1) { + root->height = -1; + } + else { + root->height = 0; + } + if(temp2->height == -1) { + temp1->height = 1; + } + else { + temp1->height = 0; + } + root = temp2; + temp2->height = 0; + } + } + return root; +} + +void avl::display(node* root) { + if(root != NULL) { + display(root->left); + cout << root->data << "\t"; + display(root->right); + } +} diff --git a/cs235/lab10/avl.h b/cs235/lab10/avl.h new file mode 100644 index 0000000..ca71fed --- /dev/null +++ b/cs235/lab10/avl.h @@ -0,0 +1,25 @@ +#ifndef __AVL_H__ +#define __AVL_H__ + +#include "AVLInterface.h" +#include "node.h" +#include + +class avl : public AVLInterface { + public: + avl(); + ~avl(); + node* root; + bool h; + NodeInterface * getRootNode(); + void deltree (node* root); + node* build(node* root, int data); + bool add(int data); + node* del_leaf(node* root, int data); + void display(node* root); + node* del(node* succ, node* n); + node* bal_left(node* root); + node* bal_right(node* root); + bool remove(int data); +}; +#endif diff --git a/cs235/lab10/main.cpp b/cs235/lab10/main.cpp new file mode 100644 index 0000000..0393267 --- /dev/null +++ b/cs235/lab10/main.cpp @@ -0,0 +1,24 @@ +#include +#include "avl.h" + +using namespace std; + +int main() { + avl a; + + for(int i = 50; i > 0; i--) { + a.add(i); + a.add(-i); + } + for(int i = 0; i < 5; i++) { + a.remove(i); + a.remove(-i); + } + a.remove(5); + + // for(int i = 0; i < 50; i++) { + // a.remove(i); + // a.remove(-i); + // } + +} diff --git a/cs235/lab10/node.cpp b/cs235/lab10/node.cpp new file mode 100644 index 0000000..38ca301 --- /dev/null +++ b/cs235/lab10/node.cpp @@ -0,0 +1,19 @@ +#include "node.h" + +node::node(int data): data(data), height(0), right(NULL), left(NULL) {} + +int node::getData() { + return data; +} + +NodeInterface* node::getLeftChild() { + return left; +} + +NodeInterface* node::getRightChild() { + return right; +} + +int node::getHeight() { + return height; +} diff --git a/cs235/lab10/node.h b/cs235/lab10/node.h new file mode 100644 index 0000000..be2b789 --- /dev/null +++ b/cs235/lab10/node.h @@ -0,0 +1,18 @@ +#ifndef __NODE_H__ +#define __NODE_H__ + +#include "NodeInterface.h" + +class node : public NodeInterface { + public: + int data; + int height; + node* right; + node* left; + node(int data); + int getData(); + NodeInterface * getLeftChild(); + NodeInterface * getRightChild(); + int getHeight(); +}; +#endif diff --git a/cs235/lab10/pwnd.c b/cs235/lab10/pwnd.c new file mode 100644 index 0000000..16bdefc --- /dev/null +++ b/cs235/lab10/pwnd.c @@ -0,0 +1,5 @@ +#include + +int usleep(useconds_t usec) { + return 0; +} diff --git a/cs235/notes/Makefile b/cs235/notes/Makefile new file mode 100644 index 0000000..f224377 --- /dev/null +++ b/cs235/notes/Makefile @@ -0,0 +1,24 @@ +CXXFLAGS= -Wall -g -std=c++0x +OBJECTS= game.o +EXE=main +all: $(EXE) + +$(EXE): $(OBJECTS) + $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ +game.o: game.cpp +run: main + ./main + +clean: + @rm -vf *.o + @rm -vf $(EXE) + @rm -vf *.1 + @rm -vf *.0 + @rm -vf test + @rm -rvf *.dSYM + +drun: main + gdb ./main + +valgrind: $(EXE) + valgrind --tool=memcheck --leak-check=yes ./$(EXE) diff --git a/cs235/notes/game.cpp b/cs235/notes/game.cpp new file mode 100644 index 0000000..0b5f98f --- /dev/null +++ b/cs235/notes/game.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include + +using namespace std; + +vector parse_expression(string expression) { //parses expression with " " being the delimeter + vector results; + string s; + for(unsigned int i = 0; i < expression.length(); i++) { + char c = expression[i]; + if(c != ' ') { + s += c; + } + else { + if(s != "") { + results.push_back(s); + s.clear(); + } + } + } + if(s != "") { + results.push_back(s); + } + return results; +} + +bool has_a(vector list, string name) { + for(unsigned int i = 0; i < list.size(); i++) { + if(list[i] == name) + return true; + } + return false; +} + +int main() { + srand(time(NULL)); + cout << "Please enter names with a space inbetween each player: "; + string names; + getline(cin, names); + vector list = parse_expression(names); + vector result; + while(result.size() != list.size()) { + int rand_m; + while(rand_m != 50) { + rand_m = rand() % 10000; + } + int rand_n = rand() % list.size(); + string adding = list[rand_n]; + if(!has_a(result, adding)) { + result.push_back(adding); + } + } + cout << "This is the order: " << endl; + for(unsigned int i = 0; i < result.size(); i++) { + cout << i + 1 << ") " << result[i] << endl; + } +}