From ba9b97eb4c5b41c27fdf2f459c80e5a449d0d275 Mon Sep 17 00:00:00 2001 From: Zach Date: Fri, 9 Jul 2021 21:03:46 -0400 Subject: [PATCH] Completed Lab as per instructions --- src/main/java/io/zipcoder/Classroom.java | 135 ++++++++++++++++++ src/main/java/io/zipcoder/Student.java | 78 ++++++++++ src/test/java/io/zipcoder/ClassroomTest.java | 69 +++++++++ src/test/java/io/zipcoder/StudentTest.java | 79 ++++++++++ target/classes/io/zipcoder/Classroom.class | Bin 0 -> 5725 bytes target/classes/io/zipcoder/Student.class | Bin 0 -> 3987 bytes .../io/zipcoder/ClassroomTest.class | Bin 0 -> 2938 bytes .../io/zipcoder/StudentTest.class | Bin 0 -> 2194 bytes 8 files changed, 361 insertions(+) create mode 100644 target/classes/io/zipcoder/Classroom.class create mode 100644 target/classes/io/zipcoder/Student.class create mode 100644 target/test-classes/io/zipcoder/ClassroomTest.class create mode 100644 target/test-classes/io/zipcoder/StudentTest.class diff --git a/src/main/java/io/zipcoder/Classroom.java b/src/main/java/io/zipcoder/Classroom.java index 64566f0..482d85c 100644 --- a/src/main/java/io/zipcoder/Classroom.java +++ b/src/main/java/io/zipcoder/Classroom.java @@ -1,4 +1,139 @@ package io.zipcoder; +import java.util.*; + public class Classroom { + private Student[] students; + private int maxNumberOfStudents; + + + public Classroom(){ + this.students = new Student[30]; + this.maxNumberOfStudents = 30; + this.initializeStudentArray(); + } + + public Classroom(int maxNumberOfStudents){ + this.maxNumberOfStudents = maxNumberOfStudents; + this.students = new Student[maxNumberOfStudents]; + this.initializeStudentArray(); + } + + public Classroom(Student[] students){ + this.students = students; + } + + private void initializeStudentArray() { + for(int i = 0; i < students.length; i++){ + + } + } + + public Student[] getStudents() { + List studentList = new ArrayList(Arrays.asList(students)); + while(studentList.remove(null)){} + return studentList.toArray(new Student[0]); + } + + public double getAverageExamScore(){ + double sum = 0.00; + Student[] students = this.getStudents(); + for(Student element: students){ + sum += element.getAverageExamScore(); + } + return sum / actualStudentCount(); + } + + public int actualStudentCount(){ + Integer studentCount = 0; + Student[] students = this.getStudents(); + Integer length = students.length; + for(int i = 0; i < length; i++){ + if(students[i] != null) + studentCount++; + } + return studentCount; + } + + public void addStudent(Student student){ + List studentArrayList; + if(this.getStudents().length > 0){ + studentArrayList = new ArrayList(Arrays.asList(this.getStudents())); + } else { + studentArrayList = new ArrayList(); + } + + studentArrayList.add(student); + this.students = studentArrayList.toArray(new Student[0]); + } + + public void removeStudent(String firstName, String lastName){ + boolean adjust = false; + Student[] studentArray = this.getStudents(); + for(int i = 0; i < studentArray.length; i++){ + if(studentArray[i].getFirstName() == firstName){ + if(studentArray[i].getLastName() == lastName){ + studentArray[i] = null; + adjust = true; + } + } + } + if(adjust) + this.adjustForNull(); + } + + public void adjustForNull(){ + Student[] studentArray = this.getStudents(); + Student[] adjustedStudentArray = new Student[this.maxNumberOfStudents]; + int lastIndex = 0; + for(int i = 0; i < studentArray.length; i++){ + if(studentArray[i] != null){ + adjustedStudentArray[lastIndex] = studentArray[i]; + lastIndex++; + } + } + this.students = adjustedStudentArray; + } + + public Student[] getStudentsByScore(){ + List students = new ArrayList<>(Arrays.asList(this.getStudents())); + Comparator byScore = Comparator.comparing(Student::getAverageExamScore); + Comparator byFirstName = Comparator.comparing(Student::getLastName); + Comparator byLastName = Comparator.comparing(Student::getFirstName); + + Collections.sort(students, byScore.thenComparing(byLastName).thenComparing(byFirstName)); + Collections.reverse(students); + return students.toArray(new Student[0]); + } + + public char getDeviationScore(Student student){ + Double averageClassExamScore = this.getAverageExamScore(); + Double averageStudentExamScore = student.getAverageExamScore(); + Double preDeviation = Math.pow(averageStudentExamScore - averageClassExamScore, 2); + Double standardDeviation = Math.sqrt(preDeviation/(actualStudentCount() - 1)); + + if(averageStudentExamScore >= (averageClassExamScore + (standardDeviation * 2))){ + return 'A'; + } else if(averageStudentExamScore >= (averageClassExamScore + standardDeviation)){ + return 'B'; + } else if(averageStudentExamScore < (averageClassExamScore + standardDeviation) && + averageStudentExamScore > averageClassExamScore){ + return 'C'; + } else if(averageStudentExamScore <= (averageClassExamScore + standardDeviation)){ + return 'D'; + } else { + return 'F'; + } + } + + public Map getGradeBook(){ + Student[] studentlist = this.getStudents(); + Map gradeMap = new HashMap<>(); + int length = actualStudentCount(); + for(int i = 0; i < length; i++){ + gradeMap.put(studentlist[i], getDeviationScore(studentlist[i])); + } + return gradeMap; + } + } diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index b543e36..89de898 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,4 +1,82 @@ package io.zipcoder; +import java.util.ArrayList; +import java.util.Arrays; + public class Student { + private String firstName; + private String lastName; + private ArrayList testScores; + + public Student(String firstName, String lastName, Double[] testScores){ + this.firstName = firstName; + this.lastName = lastName; + this.testScores = new ArrayList(Arrays.asList(testScores)); + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public ArrayList getTestScores(){ + return this.testScores; + } + + public Integer getNumberOfExamsTaken(){ + return this.getTestScores().size(); + } + + public void addExamScore(double examScore){ + this.getTestScores().add(examScore); + } + + public String getExamScores(){ + String printOut = ""; + ArrayList examScores = this.getTestScores(); + + for(int i = 0; i < examScores.size(); i++){ + printOut += " Exam " + (i + 1) + " -> "; + printOut += examScores.get(i); + printOut += "\n"; + } + return printOut; + } + + + public void setExamScore(int examNumber, double newScore){ + ArrayList testScores = this.getTestScores(); + testScores.set(examNumber - 1, newScore); + } + + public double getAverageExamScore(){ + double sum = this.getTestScores().stream().mapToDouble(Double::doubleValue).sum(); + return sum / this.getTestScores().size(); + } + + @Override + public String toString(){ + String readout = ""; + readout += "Student Name: " + this.firstName + " " + this.lastName; + readout += "\n"; + readout += "> Average Score: " + this.getAverageExamScore(); + readout += "\n"; + readout += "> Exam Scores:"; + readout += "\n"; + readout += this.getExamScores(); + + return readout; + } + } diff --git a/src/test/java/io/zipcoder/ClassroomTest.java b/src/test/java/io/zipcoder/ClassroomTest.java index 7bac1ff..d3132a1 100644 --- a/src/test/java/io/zipcoder/ClassroomTest.java +++ b/src/test/java/io/zipcoder/ClassroomTest.java @@ -1,4 +1,73 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Map; + public class ClassroomTest { + + @Test + public void testAverageExamScores(){ + // : Given + Double[] s1Scores = { 100.0, 150.0 }; + Double[] s2Scores = { 225.0, 25.0 }; + + Student s1 = new Student("student", "one", s1Scores); + Student s2 = new Student("student", "two", s2Scores); + + Student[] students = {s1,s2}; + Classroom classroom = new Classroom(students); + + // When + double output = classroom.getAverageExamScore(); + + // Then + System.out.println(output); + } + + @Test + public void testAddStudent(){ + // : Given + int maxNumberOfStudents = 1; + Classroom classroom = new Classroom(maxNumberOfStudents); + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student("Leon", "Hunter", examScores); + + // When + Student[] preEnrollment = classroom.getStudents(); + classroom.addStudent(student); + Student[] postEnrollment = classroom.getStudents(); + + // Then + String preEnrollmentAsString = Arrays.toString(preEnrollment); + String postEnrollmentAsString = Arrays.toString(postEnrollment); + + System.out.println("==========================="); + System.out.println(preEnrollmentAsString); + System.out.println("==========================="); + System.out.println(postEnrollmentAsString); + } + + @Test + public void testGetStudentsByExamScore(){ + // : Given + Double[] s1Scores = { 100.0, 150.0, 123.0 }; + Double[] s2Scores = { 100.0, 150.0, 123.0 }; + Double[] s3Scores = { 145.3, 55.2, 400.1, 300.5}; + + Student s1 = new Student("student", "Yep", s1Scores); + Student s2 = new Student("student", "Two", s2Scores); + Student s3 = new Student("student", "three", s3Scores); + + Student[] students = {s1,s2,s3}; + Student[] expected = {s3, s1, s2}; + Classroom classroom = new Classroom(students); + + Student[] actual = classroom.getStudentsByScore(); + Map gradeBook = classroom.getGradeBook(); + Assert.assertArrayEquals(actual, expected); + + } } diff --git a/src/test/java/io/zipcoder/StudentTest.java b/src/test/java/io/zipcoder/StudentTest.java index a9fedec..801137b 100644 --- a/src/test/java/io/zipcoder/StudentTest.java +++ b/src/test/java/io/zipcoder/StudentTest.java @@ -1,5 +1,84 @@ package io.zipcoder; +import org.junit.Test; + public class StudentTest { + @Test + public void testStudentConstructor(){ + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 95.0, 123.0, 96.0 }; + Student student = new Student(firstName, lastName, examScores); + +// When + String output = student.getExamScores(); + +// Then + System.out.println(output); + } + + + @Test + public void testAddExamScore() { + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = {}; + Student student = new Student(firstName, lastName, examScores); + + // When + student.addExamScore(100.0); + String output = student.getExamScores(); + + // Then + System.out.println(output); + } + + + @Test + public void testSetExamScore(){ + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0 }; + Student student = new Student(firstName, lastName, examScores); + + // When + student.setExamScore(1, 150.0); + String output = student.getExamScores(); + + // Then + System.out.println(output); + } + + @Test + public void testGetAverageScore(){ + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student(firstName, lastName, examScores); + + // When + Double output = student.getAverageExamScore(); + + // Then + System.out.println(output); + } + + @Test + public void testToString(){ + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student(firstName, lastName, examScores); + + // When + String output = student.toString(); + // Then + System.out.println(output); + } } \ No newline at end of file diff --git a/target/classes/io/zipcoder/Classroom.class b/target/classes/io/zipcoder/Classroom.class new file mode 100644 index 0000000000000000000000000000000000000000..f1a7fb99cc3b1a246ae4263dbdc1d29424306d45 GIT binary patch literal 5725 zcmb7IYjj*y75?tbow>=(&4VP9M@vg-fjlNnXn{zRG&T=HtCLhoEf!R`$=oEzNpbU45$j57F>7Fn?i_g_S!#y?Ja2~%H!k2JJ zhQlI9eY4-!$Srh4&f5aiR70(k(GY2B$o zALL05Rk1|Mb`R{Z#*ey~;&g#tP63I?kA+q|V{>;x7d}=;Rws(nh%6Ly-kAbf4pR#IsnOy}ho)i6P(@>Sgxigip_Ul2y50^lP#^+;2 zgzJ|*b3RUJxPTCb?74)MOQcf@!TEA9NM=|rd7PT@FsQ~8+o5!x6-Ss2N?0Y=BW})S z?4nhI$mXn6+{(m@YX*)oz{GZK#){hm>GU2-wX}MiV~t596akV>*_2I*G9#N)=`G~+#yBVDC-zCoglC8knVE-w|c`D`rzmpXEOES=9x*ux2FRh7jK z)FGfvbmDTB>N1_tL=^2N)}zD3)s9ff%VJp=_@;?(;oG9;n2GP;yCxpP<0g90YhnO{ zCbnXmi6`(q6W^EFlOpmIj+;0k!wsUjnnBNHa~W%P#Li8p12`!Sz$fWae{8IqHo?N z<$BT6%Fbfs(yCjuENgBV2s|`rCG+<7NnRDa#5^ENUAHWe%Iy>>_G&g=x57M~q^`i~ zr43Lnu|kIl;dl7GhRc>i?y;$y(a?IHe(sSi_KScuJDcQ1dQky}6THcM$_ZWPu$nNs zb)}4z8Y3%o!s(Li^%}17Cg5Bh-jtP8Q1#mYT)Y`7a?^IoJ?+@+@Y?ifJ+HBd*N*~6 zNH;y3&XCZ=QW9{8<$3n%C#j5#&DNY{YHQCqC8UeA40%aW40<^3v};8Rw}hPZk65{B z@?cGPg zwPfHG6Mw*~8rGI9CsK3iJ$7fzni-E_q8933(;_ z&Uu}9%hBl387k@wIZ@K6g}1ZPxl8G+@%OH5dlLTBM^L_?X-CieTXg#&QIRiTz)Ip> zUDWGC6*f5tK~G%N-IOYa?+y60*BLZTu5@MQAXSNywx z^vr*ven#yiLOwi;@Z*%$9rLbh7t`QcT!?i=2-KzwR}tK1^wHKkc}f!Hu596~2&&3J zzijapgQM``aT+M&XIJIcw&O5I*LUkp`suEKzbhCCMgm9B*rZ2-8@r9>CgV6NCbljF z8JK@IQ@HYA`Z1n#%_a~RhW zjlnDngZ&QNM)=M!s6p!T8wm49BYpo%CpCFDQs`fzJ<-6= zxe@xd_H}C1FpBNUx#uV^gzgo;PCtx@!yC?B-i#bYSXNHpf|2&)W7lC!IrJLU3rhz4ed1EL?(Ygj0;Jm!w320kjmJ?NeH0C9Uf2F8!ZO#! z^uC1vQ}xQK`(W^Bq*Rw3>{1|qd}Ku#c~Q&YU&K&H8SoAKL&_Cg+e8O86GuOhh^u`> z5oX#Xb<*nwimnb|2i`}tvbK{m>8e|BJ>E~`Wpr&9)2TZyRzZK0oD^O*GjRqF@ugfj z`T~VSahJFmW2x&b>JfjR!^$Y#T@iISS<${qCSwbJ&7tBy+S*mlTrReeLm-d-L@h?h?U)z^5F?NbmFDrZ&9Pt<99jV!khF&I9c>R>=_ zBG@SZ$YpV+J55n~kSi}u(Ul)B%8wW2$0?`D7aiAaZ3lBNynTe}T(yYRBkULz{2XP2 zxu~7LQ*~Igh_zgj?#TrTR_gJC=|!xQ#Xv!@DZot%@0mFC0D{&1$ChlkivwpZ9)1ut z1+ha9^VHzk0uOO<=veh|sfl&->H$*3oo4fyWfb<36j??s$2!Qzsp%rio)O-{i)jZ4_oE*+65x;3-v2m>vp(k8=kT(*ej zlW6h7ZQ*}!FWr(010w;kwOvntU{e^QjP}rIiu>No#9Ip zUJdIcMnd_E_i6l);uij*p6uiR6wlY<%h<73SIjJeG6_%lC4^!tx^4S!;R be1gwwxc^E1ehQz)XVmQTxL3`-fP4Q3+Tkhz literal 0 HcmV?d00001 diff --git a/target/classes/io/zipcoder/Student.class b/target/classes/io/zipcoder/Student.class new file mode 100644 index 0000000000000000000000000000000000000000..e862b8d0e8b3106b9ccf69f1f299c5b0ef011124 GIT binary patch literal 3987 zcmbVP`*#~h75-L|y|TQ1L~&x$)TwKlSeEUG01aTLrj8xgrb!MGI&o~6*i4`o zmt?pahb!M}acs#qFHGAqE5zZ+qA0_slGOWDH=f3BH?HH;aeO9@&&KgN(esS3e?E?9 zW$^_QUo`QYfvyd=RQ4~}+m3-`_L{w8XYzJoGqd8C+`{Ixfq34o?I(Pv?60hQC8uoQ zP{3UA-F#-YRI+!oZrLY)*NVGYu>DGj0>|3%oC#@}_bO|7XL^R`I?uQT*Pk&kl?pLv z7<(y?he%q=*hK@eIWI@WeOb5QT&QfXIi*#b8pJkl-OgXMORlUnG3H-&l_{>5x$YL% zdA3B$D>GO|9RxROIR6)Vv_? zavCIK-hiO3bJ3}W%ij|7r^rO|mn*)3MEwZ&4>t#7w^$2G&x&uaZ=JV`Do7^2L$jFv0gWcIxvvkaIe$If{Q-ilW# ztvd^@F8NMV$jp$err4kn(r@B&^G=C4>7L)yYL&RF;=zGmX< z7QTURn)sG{zir_=_^tsM7;G)MvlTbbG_>$NyhJY#^G}Qz7Q*-G{o%5F}H$^hI^SVopxCojDh2+a8(APro)X!_n{-Y;*^v*FQ2DM z*DFk`E>U)`GsaZL1U=9IrgNT2v18{e&hiG+G_@42??zRGzz6+D3TQsetJ@Owuz+MY z)Us;0uZU&EqEjHlWSBuWzOcN2r1OJyd3Q6k*6k>(K(sdD*Lqu&)zE|h?vch4G%%W4 z3h}f#R+ryd_E}ggwWGDJq5=_6<#yrbbOL|CtNVCnUM|BMEt|DYFa3sY%kR#XYtA2S z(z8)1sBmXiy?|js6X>^~vehl@cw0^;Yj3aRY*xCxVXymMX;;Dsqo2Upq2|G&*ZwG9BmJDvF5Q0-QzUB2Zs8 zdiL>gHJ^aR`6Nzq%#gCfM_G*DW9i#4(&M)fNl)BDH2oH0mnZL_<2E{P!F*kveGkXO z=-}ARGZwng!v|Y0hR}yoq^1K&crV_^6=f2T2hFX2>mqI~Di_(1fB2+(9MbaKKdu*Qvo7_)uFQ z(N-XLwFNTO9!Rtm$T0%BXCENq8}R_|VuBQ-!X7bOfsC{P5(M`F3Yo!&wP)^ELK&=d z74a&%?jX@B>O@FXcip)UVpfYd$4Etqr$a{(oBW%kZC=2ANSxa<`fEE zyISPGC{PkEm+Z-k)br7qp$VdU87pt0_wsG@jaSj1JiuWn_GA^wO@-m=Ikn#~y`Ve^=2@?;Sh#CLJB{F1jUK=mfCiOEQ zmQTfw#E!;tDdpC8DYr%y*j}Z2ngwtM2k}517|+#RJAey>C`B=VWjZ-R?p}G)Q9}(_ zK$#%LkSCGGaD{7$=}3?kN8ZF;z~68*!r^WMi=zR(>v``ras{Or6w`w&rCEh0D5epO zW{~~hQ5|SL`vN@%UllwJ++?6bp-VD!{Zi=sB##C2s1940trp5K?H*yTVz`QX_lta( zedK==ONsB+oGN1ilTWa{L1n>1bm}7OY6+Ja;cYyOXBpC$7}Ohdy<|<`j+^ydc@?WF hSEBfsa^XctCMM{ZKjE)<4M$MoT5_jMC;6yg=fCtrmel|N literal 0 HcmV?d00001 diff --git a/target/test-classes/io/zipcoder/ClassroomTest.class b/target/test-classes/io/zipcoder/ClassroomTest.class new file mode 100644 index 0000000000000000000000000000000000000000..d02365078c38b1b8ec4f829b786c29a5d0e86d51 GIT binary patch literal 2938 zcmai0TXz#x6#gbnW~OQAy``a`1zC_nA#xEREtuZ8NDA0sHG;@A9oi{LCQK&1;000f ze#iTR&%WwI>yibFN0u+X`KCX`<#$ddHwnvGt8@0*v(LVK``ah|{h#0N0XT^7g4l&L0iJgnP-aGS<^Xh%x0+ROxS57 zGh;ZG*n3L9yI>U*^d~Gkdfm#WdDe-JXN*F@vF+@6v)~RZ=yAD@E}4!oZ%(cl*<{*w zOrFvU`^sY1g~XzQSj_SfB-Qt{?69IgM{ld7kr{mrW zk1%Xbms3-)vCgKFGu^3n(ajfK1c{T+? z(r(enC}^H{j5%}6wyz4d$k0XC%0#D(yog)RmeqWjF~jwyBXwQylJRUL8O9e3hapX8 z_!!*=lXlTbo5wB5$V$@$_!mdorG!Uh|ozg#&kmX5Fdr`F+S1oX$YU; zbI!@pM?b>T7tA1K=J`G^@(8#Kj>*)%6pn7=D-BI#9o@THo%(ex_<$&|kv zst^)owO&>Sg)nsop;YIF&eq-QXglL=+K0G_`FSFgYT82|VSh3fxPy*VIIxb+m>O2s z&~-%n1>Jqx8hWa!?vN?8Vk6qHmp_KX=)@^><3;o!jXo@*9}YIlQl_DcbiGnG;v!&hg=Z-F>8T%ajI!7?+A)T4!n4Sz6FjBiI6VruPDpT0R=|mR z;N0|&h%)-u(L1Fz#3>c%#zqN|+A5Y3CgILadn6`9Yv_*!hQj_eY?iVb4*ZHOF)d7# zx5RWp()rjL9_Jb+G-9pnb?&QB#n8$mx3bJ_Xu%Vt!FCq5lO;ruz#yhEgcSDRGHJ0u z!sJPr6>&+jD8Yn_66%{Cd_LSDNYAqL7A#3ve6&4_(*&_e0+x{Q9p`>Z!Z%I7XDF$R z5~1Ze@xK)Fd5)6)A0VeIKoSyi5cpetBzgk^w#5H@ub{t8VojEAmjcn>AqBM?5h0X0 zxl0f<=Jy!7TQZcCl;jrBvQyECcbV+4RP`NqWyoNoo zpjh_CTEf9F=OZe*)Ffx`5H?Ugi~&wsoCLK<&1I7E7SX&-%}+$|F7bXq0{%e?{z>Hi z!b#bo>m{VT4h`U*NANg)^ayUDh@|Y$GXGN*RQJV*Q|EF=DI+all$sTHqwH41Z orp}1Hvd_(o+lCqHf{d=?1&&AyeU$EslIA69>PO=Ozx#0UUkp&I=Kufz literal 0 HcmV?d00001 diff --git a/target/test-classes/io/zipcoder/StudentTest.class b/target/test-classes/io/zipcoder/StudentTest.class new file mode 100644 index 0000000000000000000000000000000000000000..10b9514148baf501d29328dbbc33e610c5104521 GIT binary patch literal 2194 zcmbu9|5w{o7{;H_HYr_%+IB-W+;A$E@ukeMxdOvN3!@_|lOh{VJtve5!)X&vnsC&A z$e-sA%%f+zpZ%jeJ~v6T49f8b+jEk8-@NzU=kvZ#^7lW#{|R6o-(~P2zDVPK8f66w za%GQU{xV2nQLa3F6<;s4LEoL>jVpse% zVzwr-*2U>$$7{K^BVq7`>2%$O z-tjj-(oghKTel9m+%c^~u1vS}-t&y{quyz@Y{%ef`RCf(?3(RS4zrbRaIA#O{nRi+ zwmtXQb18S*vs|-d?3!JZi&remc6HaJI0;$Jb`DEN9&1tx39^D<<=|kgr-4~Ml;Org zc@cVOxGN`yqaPZ+SW&e;QdN<$GlLCMZ*@KkM!xRFy(uPu~M^1g<|}S$S|>* zG=J*4Mu(DygipD6z+e0qGi1g#a|2o~@mP6{ z3cwNsJ0qHur^sI@{wC7ga+JqjKMiBY?>e;1V+f zfDwEU0!&;0a61Bc83L38fMmQgXGqwm!YQu&2a2fR6j7#8VC}{+M^U$VoyUFLjiHny zlzS1%oe-r!>jWs{EKSghxeHJ}k5Jx(DB1-kEA&h@5}0hLuf;|gja+v1tjiXBf5=!O z+XIwQL6!ea)M8{>L{^W;)bY?(S^~vs>bJ=`E_Btf1|1Yv@5!Shvr%tR# qY}zKVG-7QLY@07hGlo@