From 21d92e6cb75713776431b1250679503ab1d370a9 Mon Sep 17 00:00:00 2001 From: Stefan Derkits <stefan@derkits.at> Date: Thu, 2 May 2013 18:06:23 +0200 Subject: [PATCH] added ant, removed mvn, added libs, reanamed classes & implemented a bit more --- .classpath.example | 36 --------- .project.example | 23 ------ .../org.eclipse.core.resources.prefs | 6 -- .settings.example/org.eclipse.jdt.core.prefs | 12 --- .settings.example/org.eclipse.m2e.core.prefs | 4 - build.xml | 69 +++++++++++++++++ lib/opencsv-2.3.jar | Bin 0 -> 14146 bytes lib/slf4j-api-1.7.5.jar | Bin 0 -> 26084 bytes lib/slf4j-jdk14-1.7.5.jar | Bin 0 -> 7900 bytes pom.xml | 48 ------------ run JobGenerator.launch | 16 ---- run SchedSimulator.launch | 16 ---- .../at/ac/tuwien/lsdc/JobGenerator.java | 0 .../at/ac/tuwien/lsdc/SchedSimulator.java | 2 +- .../ac/tuwien/lsdc/federation/Federation.java | 0 .../tuwien/lsdc/sched/AbstractScheduler.java | 73 ++++++++++++++++++ src/at/ac/tuwien/lsdc/sched/SchedulerA.java | 16 ++++ src/at/ac/tuwien/lsdc/sched/SchedulerB.java | 16 ++++ src/at/ac/tuwien/lsdc/sched/SchedulerC.java | 16 ++++ src/at/ac/tuwien/lsdc/types/Application.java | 40 ++++++++++ .../ac/tuwien/lsdc/types/PhysicalMachine.java | 0 .../ac/tuwien/lsdc/types/SchedulerEvent.java | 32 ++++++++ .../ac/tuwien/lsdc/types/VirtualMachine.java | 0 .../ac/tuwien/lsdc/util/CSVLogger.java} | 12 +-- src/at/ac/tuwien/lsdc/util/CSVParser.java | 22 ++++++ .../tuwien/lsdc/sched/AbstractScheduler.java | 5 -- .../tuwien/lsdc/sched/sched1/Scheduler1.java | 7 -- .../tuwien/lsdc/sched/sched2/Scheduler2.java | 7 -- .../tuwien/lsdc/sched/sched3/Scheduler3.java | 7 -- .../at/ac/tuwien/lsdc/types/Application.java | 5 -- .../java/at/ac/tuwien/lsdc/types/Task.java | 6 -- src/main/resources/logback.xml | 24 ------ src/test/java/dummy | 1 - src/test/resources/dummy | 1 - 34 files changed, 288 insertions(+), 234 deletions(-) delete mode 100644 .classpath.example delete mode 100644 .project.example delete mode 100644 .settings.example/org.eclipse.core.resources.prefs delete mode 100644 .settings.example/org.eclipse.jdt.core.prefs delete mode 100644 .settings.example/org.eclipse.m2e.core.prefs create mode 100644 build.xml create mode 100644 lib/opencsv-2.3.jar create mode 100644 lib/slf4j-api-1.7.5.jar create mode 100644 lib/slf4j-jdk14-1.7.5.jar delete mode 100644 pom.xml delete mode 100644 run JobGenerator.launch delete mode 100644 run SchedSimulator.launch rename src/{main/java => }/at/ac/tuwien/lsdc/JobGenerator.java (100%) rename src/{main/java => }/at/ac/tuwien/lsdc/SchedSimulator.java (80%) rename src/{main/java => }/at/ac/tuwien/lsdc/federation/Federation.java (100%) create mode 100644 src/at/ac/tuwien/lsdc/sched/AbstractScheduler.java create mode 100644 src/at/ac/tuwien/lsdc/sched/SchedulerA.java create mode 100644 src/at/ac/tuwien/lsdc/sched/SchedulerB.java create mode 100644 src/at/ac/tuwien/lsdc/sched/SchedulerC.java create mode 100644 src/at/ac/tuwien/lsdc/types/Application.java rename src/{main/java => }/at/ac/tuwien/lsdc/types/PhysicalMachine.java (100%) create mode 100644 src/at/ac/tuwien/lsdc/types/SchedulerEvent.java rename src/{main/java => }/at/ac/tuwien/lsdc/types/VirtualMachine.java (100%) rename src/{main/java/at/ac/tuwien/lsdc/util/CSVHandler.java => at/ac/tuwien/lsdc/util/CSVLogger.java} (67%) create mode 100644 src/at/ac/tuwien/lsdc/util/CSVParser.java delete mode 100644 src/main/java/at/ac/tuwien/lsdc/sched/AbstractScheduler.java delete mode 100644 src/main/java/at/ac/tuwien/lsdc/sched/sched1/Scheduler1.java delete mode 100644 src/main/java/at/ac/tuwien/lsdc/sched/sched2/Scheduler2.java delete mode 100644 src/main/java/at/ac/tuwien/lsdc/sched/sched3/Scheduler3.java delete mode 100644 src/main/java/at/ac/tuwien/lsdc/types/Application.java delete mode 100644 src/main/java/at/ac/tuwien/lsdc/types/Task.java delete mode 100644 src/main/resources/logback.xml delete mode 100644 src/test/java/dummy delete mode 100644 src/test/resources/dummy diff --git a/.classpath.example b/.classpath.example deleted file mode 100644 index e43402f..0000000 --- a/.classpath.example +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" output="target/classes" path="src/main/java"> - <attributes> - <attribute name="optional" value="true"/> - <attribute name="maven.pomderived" value="true"/> - </attributes> - </classpathentry> - <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> - <attributes> - <attribute name="maven.pomderived" value="true"/> - </attributes> - </classpathentry> - <classpathentry kind="src" output="target/test-classes" path="src/test/java"> - <attributes> - <attribute name="optional" value="true"/> - <attribute name="maven.pomderived" value="true"/> - </attributes> - </classpathentry> - <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> - <attributes> - <attribute name="maven.pomderived" value="true"/> - </attributes> - </classpathentry> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> - <attributes> - <attribute name="maven.pomderived" value="true"/> - </attributes> - </classpathentry> - <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> - <attributes> - <attribute name="maven.pomderived" value="true"/> - </attributes> - </classpathentry> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/.project.example b/.project.example deleted file mode 100644 index c95e2e3..0000000 --- a/.project.example +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>lsdc</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.m2e.core.maven2Builder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.m2e.core.maven2Nature</nature> - </natures> -</projectDescription> diff --git a/.settings.example/org.eclipse.core.resources.prefs b/.settings.example/org.eclipse.core.resources.prefs deleted file mode 100644 index 29abf99..0000000 --- a/.settings.example/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -encoding//src/main/java=UTF-8 -encoding//src/main/resources=UTF-8 -encoding//src/test/java=UTF-8 -encoding//src/test/resources=UTF-8 -encoding/<project>=UTF-8 diff --git a/.settings.example/org.eclipse.jdt.core.prefs b/.settings.example/org.eclipse.jdt.core.prefs deleted file mode 100644 index 6249222..0000000 --- a/.settings.example/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,12 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings.example/org.eclipse.m2e.core.prefs b/.settings.example/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/.settings.example/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..3d92a87 --- /dev/null +++ b/build.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="lsdc" default="compile" basedir="."> + + <property name="src.dir" value="src" /> + <property name="lib.dir" value="lib" /> + <property name="build.dir" value="bin" /> + + <path id="project.classpath"> + <dirset dir="${build.dir}" /> + <fileset dir="${lib.dir}"> + <include name="*.jar" /> + </fileset> + </path> + + <assertions id="project.assertions"> + <enable /> + <!-- <disable/> --> + </assertions> + + <target name="compile" description="Compile project."> + <mkdir dir="${build.dir}" /> + <javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="project.classpath" debug="true" deprecation="true" includeantruntime="false" /> + </target> + + <target name="run-generator-A" depends="compile" description="Run Group GUI (JMS)."> + <java classname="at.ac.tuwien.lsdc.JobGenerator" fork="true" classpathref="project.classpath"> + <assertions refid="project.assertions" /> + <arg value="A" /> + <arg value="100" /> + <arg value="scenarios/scenarioA.csv" /> + </java> + </target> + + <target name="run-scheduler-A-A" depends="compile" description="Run Group GUI (JMS)."> + <java classname="at.ac.tuwien.lsdc.JobGenerator" fork="true" classpathref="project.classpath"> + <assertions refid="project.assertions" /> + <arg value="A" /> + <arg value="scenarios/scenarioA.csv" /> + <arg value="logs/all.csv" /> + <arg value="logs/scenarioA_schedulerA.csv" /> + </java> + </target> + + <target name="run-scheduler-A-B" depends="compile" description="Run Group GUI (JMS)."> + <java classname="at.ac.tuwien.lsdc.JobGenerator" fork="true" classpathref="project.classpath"> + <assertions refid="project.assertions" /> + <arg value="B" /> + <arg value="scenarios/scenarioA.csv" /> + <arg value="logs/all.csv" /> + <arg value="logs/scenarioA_schedulerB.csv" /> + </java> + </target> + + <target name="run-scheduler-A-C" depends="compile" description="Run Group GUI (JMS)."> + <java classname="at.ac.tuwien.lsdc.JobGenerator" fork="true" classpathref="project.classpath"> + <assertions refid="project.assertions" /> + <arg value="C" /> + <arg value="scenarios/scenarioA.csv" /> + <arg value="logs/all.csv" /> + <arg value="logs/scenarioA_schedulerB.csv" /> + </java> + </target> + + <target name="clean" description="Clean build products."> + <delete dir="${build.dir}" /> + </target> + + <target name="rebuild" depends="clean, compile" description="Clean and build products." /> +</project> \ No newline at end of file diff --git a/lib/opencsv-2.3.jar b/lib/opencsv-2.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..32b00f927594a1854b371fe5bdeacc30f8aa75f8 GIT binary patch literal 14146 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 literal 0 HcmV?d00001 diff --git a/lib/slf4j-api-1.7.5.jar b/lib/slf4j-api-1.7.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..8766455d8756ebdac09d36eea2c08db90c18b124 GIT binary patch literal 26084 zcmag_19W8F+BS@)W81dvbZpzUZ9Azr>DWfcR>!t&+eSwx``hpPo&VWmpa0Ytb+1{o zuCZ#ZId5L;E(K{2P-vikz3i(!h5pare+1O`QC3t%kWNxgj6valV30s|-!SqyrUCpP zKtNQ$KtQPfPnfKroTQkjvI@PdSg4Y&d@v)bFU2nZ1H_71KNm_gg3N4mIQ@FPy7KsD ztCAF5sLhw2K`fK;p7Hdb<NYnxBj^?dt+pS^M)^L>W+cl{(Gqpw&HxPLCsj$gkaHf) z9dzWM+%KdvIz<9TdcjWFnxS)UtpTuc*CAq(OBwR3C!6hdg2@tjaSG7EYi?NQLxoA} zqZCl+_kJcb7b%;qQ#{MaP6{b4<zFXkT2P;}DNZq+w(kv|HP2pFt|R==5qrtU6jV4; z5HF#J;3`U(xs`f3<VfDye9sfeUDT|<Lc9@G*J)JPGK89VeUUvYe#L4!Cp*-@7@r13 zMPFw`_g!eDI;#^{Z@FvhWkac1z00;u1;`7Y0lKnIryksq`;P*GPc7dFbdGWUcRhiC zX#Qi_LBH42-pTy`t~k*DS@HkblmB!0*LM92;cR2ZYW4rX{pXpG|ADhGwQ(?Ya{hn8 z!~X;C>|ptSv5^1gDvPUsSbu^80g=N20g?Oz`@iQFGIX{ymNj&;Hg%#mwlQ>ePF7oY zMm0tMdemV~l%xO<fdWUsLT02(GGmi?>>^_V<7DZW7_9`fOck-5GM>Wo@*?%Nd+2Y1 zxuz<N1#^tiSw)Q}*qErgR4h?%H#d(__&$yL3%>jEX6G0}s=YF9yZ?Q7oqGM4Iy`^9 zN}cWob-*wa4mYL+Vhg`T<QY*T0YnfsB0i5|hcHpGh5?U+BKB#(mE=VYB7)Bg{nUX& z@g&mxff~|{b$eriC>}B?11S$Bizz<nB*Vi;r-zF&z6+ECl@F#_$3r8;OHp)eeFLnA zIxa2bu0zWZg;4`~YlT<?cIyRX4|-D)^0&jvO3F@y?LH%)f1_PGs8L<Wc5dcAr9iu1 zsygp)W)S~1w<Fh0B4}>4Oc`=tnWU+h<N+#gri6A$i8;Y9!pyT)t8y&1;zPPN`ZZKq zx>Q7Ltru``@4sX(iDiK<aiI2X<_bcK=(5X|w#aIYTPJKkCzK_PqnYd_E!)=g)38-1 ziA-6|3mKUQs(<~+#Vel9n7Kn<DuHFm9626pCr3fCvdaKP;ZE*IIaQtzE|+8sth9Pu zx53sbl)k;CHa2E2PoOxi6;RbRsW6Wepq5SRha&5?p9O?>RLz1QTb0VnS^QxtCj(`Z zW<wiiBx9uyszq5kKRNw9rt&))>ycdIL@8rWe!oV&j~Qd}SKTz%@wm14A21ex9aRQ> z-b|z^V<psLhve32ixjVpg3~K>aNw*YoAD~Rp0Uf_Up)ssW=u;t)N`>dQ1r&=0&6Jz zn9bQ*R!w<7mA-PEn+w|LxOGW5yU~Lzw|xB+q9k@`GqKI8h_&TZ)mGt`Uycl@Q0LO0 zUd~)>6$fr<t9?o3+Pvb-XN`kPsWTlU%%-`~;rMYTsJa}LBc<50Fn_WfTyiJkuajym z!>S@D!dEF9jN40%k;cO*<B3DU6XIGQPk!AZ;wL$Bv_UqC_@zOyOaOh78bbg~VfO-} z@h?(tAs)bQQleXC$@ZsTVB%Dl^oRQQCiHIW4F!@KfZc&8L^g=9)@SLAL20%3=T?&) zk*`NuA+m+MI0Bwc-c@&AaO6f;XcsaEoDerF=X)VjM+$Y;D4X7oYU%FitdXExm$%_B z>Jx}9Yo)Lh(cSb*f7?4)9NenddxeW0&qM+)V(1rLACo6m2F4y5%bjDF8_DgnoLXwu zQZfQFGsEm{^z<k%Ui}`!$?PP(+duUj6^!ug_c>2MR5fDQ8<nqijt7E4T`w55%`zPj zBAiy<$j!HHuAAQLh&=E7q~dzUQF_W(c#2+HN;`q4C04i*w$<xiOkWsQ@CkO-Ao-U; zeOgfjhoD)eq{P;Yx*L2AXqtaClh)p7Ayw^*NUcl<@IT4FOt;%r*c_Uz$LO#+Y*ZR6 zU%SBPIvKdNBUVHr9wVlOUJLOw2joEr6}_F=D`K<<&5ZC^(HCl2?7{rvUC}Q<F%}XS z9UgIwUKr7!sf$u{H|F(1Iy7-15(Ne^MQzuO+?1HpD&U2f5=?iYWRD2{8g#0o%Tw#a z0`)Q9z0ax0>#T`(OWfD$!(TR}GIuVm;Nj^onc{q%+D&rya7B`}MVh2Tp3)cbRdnE8 zV(RYs0m@l0eq)h-yjXqQ=`nNr4kjOAwxT@IwCz1*+P2tURs1UK0x3EUoZ{(#w)^IL zOTLYpGF`AW%TbHo<viRuw`%>xFfLU`Sr`&8$Tn1ms|lQDz{L7APnwTwBv>!=$4>Zy zIGR#A(TK`Nqj%~;xLejVPP>$sHji?_NekhwD(p^}KDnat$&tVX$9mAnm~E=>nwx@| zKT7U;$t-n0tW|boGV0;)`o7%r>}P9ORu{wmLLhcEdEr6&5mte3!o4G^wPW;k4tbop z#<jU-tFg#)!6c1YOYy|#im1;y=dmxl)1Heb9I@>^vJC*2{mXHsh-SrMPr~Bxnz-?- z1*&sO!2Z{aw#`OM9XJIi8wJ<Xb*;d4J;b(gq&)IkrL;x6w1qHMexo$yr5^S>BUgxC zK@6oiEBcp8K*ahc`WN=@e6v8UZ;<Xfa0clwBd8;<EhR!Wem*09UzwTQo2xfeIL>iw zAF&btmVD93A3B(d7sCWtesH4^uu*=yEz>_1PGMCQM6&zO#`53AS5H7UBlu3Xg7|-; z&52;i%}?SkWgX9DwFRXh-Ll4MzpbB>IBR$#=`3HG(=AC)7~_PllPczRJ&AT*ty}Xq z>JNbDb9!I;qjEsk`NFrPnsp@B21LmWkx8X;9pAs}e=#hX1**RugL;R`zSu8a!1$q8 z8^Lb3Hm#4j$*zqOx`Zt;mz*MPp}mJV0}=G^7oiWJDBza6uSo)(^}Fi`k#2ZF;q=c+ zuQ>F|NuDlw=92vl2=)i8DdN~3ssC?~|9AMjGKB41`c9Y<!GM6M|Nn(gF+*b)dneC- zN6{E%TlskfRKGP>8XT~pq}0F@0njI66fi;0<Q54NBN3weU`h4r!j&fJWu$kcPx$T| zL6pfL(lZLlcg3N3w{rtp00QqN?=#o*{f4vM*ZapONDpX=5TvonfCeOwSn!E}jz|I6 zDB`<B(;oehXp!g!4ADU~#f8H*Jc5W!WE%4AFX39k%<J^@_$b_;><9<KT)NFFbg~he z@PS;a>Q!LyU3D+;5Qc**#_V#7tM^Vs!xQRGa)mM`^9m-m;_Ry4y0XwqU0QpL^_FR` zE|T6Hp1-!twc^u@AL@0KlA{Yd=xI_6{Rry}ay0E?BZqVtGAfVf*Hg;QURPhZh%v-P zgXl4EK~i@Px)e;KSSw&_Nt#UJd#lZ~>^UX8ClZoBGK%HuTh2^Y^yo0w*vCrxmQ>$5 zcvI!s>`<gzW9iFlIG)RNh}Q~2AgdiQ%PZ_Hu*b*OP+0Wo88@}Kl{99R;If5t$8j3s zaFk8H<AX-*;6r`M>iayg87WVnG5qdOgA?Y<H7MzXkz5}SIw|cMY`;1dCe)&@{ULms zk>g2~x*cm?rd#@z%6cfbI7iId2BUv!_K`o8=#5eO4vXxLI;n*!>}G;$=R-7GTV?XB zE@WDz0WLG_TpT($Tq6F;e&NY)`wYfGJ1x5Y<BL!fG=~V~n^kC^Z9<=X+&KKm%Mc)P zB0^Cc<&)y%gC)X9J}-m<0*-PY0w~-4--+fH+@bt9P%4C<GCrZdcm!eM^dZfZ%ujel zDKjhc*!FFT<p^JEGyh(UZiPrV#+#&$^g%;a5(C%<>g33CezF@?t1JRO*aTd04c{E2 z+&t^q!}H6VV5>a6+!NTkuUoCkVul_2HCrSez<@nY!(G}%b0o}FL;7vw{<<dr^a^at z9<~qfqk!xZi@-}*A&a=+iYTQ(dL#vO4oxX%$3QP(tJ|ygqz|n-s|dzXpD1oR-jI9& z{nI*F!V2DGzb(V$JG-U$f3Xe`VL=l^2bcd%Fhf<fo#(|cdFx|LO}KubK!AYZS~xpq zwa&~qLCqlM{ThH8WJRPbjx1b(jx;6ZLeyKA)A!DO%73V1;OS{3Q!s;8HZv&UFQ0En z7{)Lf8@FnD^F7Y`=xUhb|N4Bz2=Hw!HsByPk)eh(Fd}g?qz=jovYZfckP`$Z7~^Ch zA?O7IgXTkaY+$AzYc0w{L4iJU(4^IiC;%ad+AWWkAGpuJ<WmhViwN+%)k5qK8d(5a zEr>3NPJk5_YEh&=ZQixIFY(JaIbZ8bQk{{3@-9hfM5D8|Iy8E+Sx+NDCN{rcCYO`D z!igu;O+mzG8v}UD2-W%<s0mqYXw8th$YGiKwzcuptYd(NgtVseSF8dcP8k3j3A^9% z+H`fW(wIJ$)>OJpbJmu^TgW+D=<48QB}mQDHFKbTcfmta^r#e(dt9TR8s;7F)M1Tt zNURJDFX_g9eG*D7-{f_sCRo!dW1>*2<VyDNSOcNaO&p8aQC;JtgM<b{Z;j@t#ZY^O zZN~mv71T_T!pt6LBGBz;@b^A6Kbl&HMxtEajdbK2oMlW(A^Ixmn;x=1Bd|IiyQUgw zw{qL5s+pq?SJhW+JMrEuN$8ulR&GC}(>eEM4&cVGk3>FqCy|;^hL(hnSoBtM35;s1 zw&&%ti&(eoS?$#JDBhxbkrnBgv!L;=kO-nV_S5)9nbMZE#tK(1b?qXdk*APdyyPy; zP0R9>lwq(rPtdESKGv_JqMCCngH`D?Z!C1=P^-%-kKn30B5uSsW#zisbmY!vAupR~ zP*b<&_W=rx_;up7l50;7$;&x|$|DO;RO5Spc^uk+4XbVpQ1y-(GHfNy+^@mR0`s$U z7hzbmnvhJEVXmr+9INB0o8K0&j&ZFMw@C}r#8#|UJI^{u*EkSf>!|xT`1@*MQ_WJ2 zwGK*Qh*(-q%b7RnP_C-2wpP7?OINWh{B7S4Z=Wy76C<5)ubuSD9C4%eUKebJft^S8 zBqE-W?@zOwi)nv(Eb;Qw1?kItFA^8|{i4z;r|x{Qzs>~81;SpuOjt}n!q@`XA%NUG z)&ly_^9e8pCxSH&U|Eb4#}3A)j#2Dy8<4PP=-MUfOFV6T2a0b`>}}sFkHlnOV%!%2 z$;KGs*1_9N{nABf&wMi+F&Vq73bwbuR|h@1HZPiX3X2qd+U>;%=LIlh#8nIWCVb-M zLxl5+4nNGmxbTZn$k(3|vCBtge@`O7nc*8sBVyo~uM2<lfZmdiru4IaZn+r&ypKnG z@WXyRyA=Blt)&mzgg}$oy9G1=v3Pp`o;$4YO>$~nBe(_ml;K?eOgIlf<Q9^!yg=&y z;1S)+ajB^ushPknXpN?8?c>vXL@o09P6||H1(W#q`VY{O`GaP$uYF=TR>yGAvNi*c zpkI7`I-<Xx(;3l3lXsb9GiV-1c^;$sh@aE9UB1F%+TF<BM)MY}Q|}Tb@aGHLNZRz* zD7=^2!lAXVIQI~Hg;Lwy$k4mxNxf&fEMK;9j3_9h7H5XSe=eNv?z=)r>8aGKh6&-V zlU3H-n-9EZMe8GejFYFBWRt0xdlDG4rRZZe1Wtog(fYzoAA%p3e4!6+A@$6#<h(do zoUAs_Bu4*2+;M!9Ahcn-;LV(TL6ht*DYCD{+h)Gw)?2#vg!0<~d#T&XxMbacs)0*V z#K;`-kiC%1Dv#*wvzQ$VQQ&9=aD?y>@$~Dl{+!tb`<T%7g3#qL><5WxgFxoI?5*e+ z?t&nG$-4^N-0}r7X@29l=(yI^{()Dmiwb4V)7J3y<DVY6tQb%P4gv&p`|XwgyGItY zcd|8faj~>BS8;W)G5vS45~`vrk0OZ5D-1)oekhz5K&U_~)!v8-iduviFA+rb0+fK5 zo5Gwz_BLzNLOuNn^A%8oOokZoQWC*G=3(BZK$-dCbnJGt;e5r*vd-_{tq+toR1b`% z2?kBBO*J0DNY>ZL>4DlSgW3R1oEEiH7etX3XCR0>2{oe(xH&o(3MA5W*ifoA>dNMw zz;kGr*p#xHbfnw7hiz}vrOWh*Co;N~5@m1%RQKh7%1x)Y>5kcY(i@(%E^<3$KmW~< z40vJdc{*e_ENIi#a@73@&wra_o2cj%)_Z`QN#L;Q*Cq!n*v34-yLOyiBnpW4*1no8 zuI*pB$<|lwpt?GXyTjeCZ^L>+h=m$b1<(rc)mjo^7b1`Ey;aDi|CBEVwwe#zr!4rT z{RU>oQtNs*V_r~*{LD@dcPUvMOdEq_b~sk&L9HP|w&1q;)`g?Pu`!JyyS=3#HBoHC zrP?yG46C?2@35a3BqB-x5SdZg5KN7<dngSrR3Bs%!xTG{IxiWOZu@h1itm4$KQf-P zJF{T9Ue|zTrw-ee1KKjSrP$|);<m_&@_=2A-oh(oAw)DkJ+sPb1R6zsr(uNoam}JS z8#sl7t1XTer~SZFET*`Xm(q5*@71&9<pojrP)zyI6go@YN@a~KH<CQ@i{@3(8dOF` z;FkWwOAJl6QLG7SNUk@Q%qgIN_?fLw-r!gL7B>7dY5NE$f1-^r-@15Th^4I6Z;Lr{ zImEeo3P^K*k`hz7nRm@fbBp{&dR7@^ffQ(pvRB+SCeeX;7xv({w8TBFm?tTo)2Jxg ztCp0cU_dETn{#(Q3F|yOWA#S?5(8iUC2ss?^$C@hzZJ&r$NLTfC5{#)3O0{0?fqeS z*^fqrtlt3iaJTsPvH2uvj{wtEg#xj2?=|@xiW7KDLsTm*R*^4t%=`5b$=m?5OB^BB zc=SK7I>_a00sKTH`C&f>Cu0V!0|)mdz)-_*qV&O0#pB6atOt#qB!serH;b2NpU^Ic zmGY+Ii#UlqS^hJ**@N$V;r}+H;%`dszo-8HCe0+x?d+Yt&FPy*`yXp6PPJ7=QAZt~ z4h<2&4lS@~lAqCnM2gmEB+k1t5d<NkhY8Zs9YID<)ZMTV(N-*5v#PRnEy=dzzLepf zclTA?9!Pg9A;=>rpLe!n{=wibt)q9){k(O5)9wD;^6UNnI@cdW0D=du&ySNJ1X73a zkHj6)C|SZdDfTGsD6V9J2t_)DWIXLJOwuS)b%{ArEab!iVol;dQbvg;lDG-DqihML z3Fo97z&DPF*p}|OJ(Gl$J#-mc)c|hPE>*Y+)~_Tv2O1!E5C;aJXRHNN*Y%mX#I|fU zT4g*elO8#i6?TJkO>vfNNxJO$4;uH}GGh#FKNE#T<1~PCmY`{?YeJxXkJK5gl`)_! z?vS~mjW>U?#IcyqY|>C0E_1)5^~4!Hnl|_-&GdJ{>Vwa*k&B=_L%zF<N<+=blf+n~ zO~1^ewPt5#uNw)sp|$hhUy_fK;BdRH#i0pTOIRDKfVe+ZnC3g~rBK1>lCCz2?Ioh~ z8R?PK@S5)Pb<`}YsBG(qCNrvPiLNxatD?SByS5cablinpEBXzgpM$jE<~&cS+<#|E z3mv!yb~H3Qr^mGy4dQgfIPiRexJkKSz4YA9QDB;zWa3hA7(1BY<|ru)6>=wwrAS{A zSw$6MF2cF&lb3wKr(W)o%rdRV$2s?H0XFOP%WEgBrV5uDp_fc6Sa!+0&jM2JLyfRT zs4A6NyuWjqAx}4PdU*vFi8w*8!}4JGU<4U_<n96vh(<9;<AfN+W;sRoQDc-@<-P~Q zR2g{|K?P8e<dhkCCz_GesH&9Z3M%=fLbFhj<*2Gu<w`2WrO<H>^Lwv<oyC5Zt^aso z294XT0P?{La%MyevfqK?OJnrY5@v)_hJ8xDzhbsnOA~Wvz-myU+N3{Ns5(SVdDTzG z`pl5lA4eZ;!(FPbXFhB)l&l)(Mtb$n#CWYn(I#|*Tolk6pQCvMcJo0ht3XS+u@7%< zEXoYGYri13)u85EwbMuW#8^RqUAt+(Slb2CD}2$f0)`htiA7Rhkkk2Q=XVzgJmD{} z<hi1?1~IgEAgxM&0TJ{lcI;gOj0gAVJJfFWcvRl$QCn{JbVEaom}1)U!@QsRZjCYx zC(4T2B((9Vm)VgHnjq>*f}gEuO_IG-(Y$9*K(hvH&eqf~$_<(kY62y+z43jF*5zn_ zPOOVTTNXD5Dy;)O+&8mg2MF3ofD4NTOKThtTf<>r+#dEaXyJxhb%=_$V#(8LE+o-f zNujejL~75R2;;sQpiKgbf0rRwdEKyfGB{=+aq99+VwDLBuyRI#`(|QiQDO}kB;iC$ z8kV6OVr_t?wBn{<J7)H4uqd(9I$~%98LeZY$9M&hT|tl26by3qC9EL-YhI{e5j02a z5lDIiEXB5<my0#+323|(HRY0+7K1&Ij3}&FZR5zaa&`<rwhJtsy}}+L+6JM4TwU8i ztwl>nJCtG|+1jJTpjCX!iiJ>1s$;N9giV{@tBO#YmE2da95T2HiY^K-9o#y3uHjs0 zqk)Q{;TB<QZ!{YTp@FKd;TDDNj+nAY*IUrqbC+S^iXiX24MH0UL+dRP3}JCI144_U zr12D4%k$0Ss=|+-@3H3^OwQLED(V_|3fsKVq5B^HKwm^l;Si0wMoJ-Q28}uc9@j2d zl=sNU<?ShG>$z*TxPifbKl_3HeyYrhc{~k~_sU?A<p(c2GQsWX!GZ90wk_Oi$r7Wj zaEJIQoOjyds-K$)v*qghpe%j2*{({P;{Tj;q{;H18O_g_yQwgk??*1!KtPoLwZ@b+ zb#^v1H~pW)=6{RK>{KWZl|{7SFAkPb*hC1ZKtV!Kz#=0GWIHr6tfmxWpae0bq4#J9 zDGCLP;}Mu7QmRzcTO>>wq=>E6Ai51VY(d!?wX0>t-qv6-y>4Ywg<92v|8_@+33IPx z_w{7w{Z#vL*7l#{4exF5qw%nIpot+U2&LL}fEz^Qtu4+~!UsOil^Y?Pw`s#P-~--e z2Ok2kqsM)f$gv$S`#Z@;o&8z5>U#9(ho^TB00Iv)VpHkPm+Jw-4L2zVp6dqDk8+T| zeiwT6YXyK;AGcDg{1j%}D)yv^Q=R&OgkzWR(a*j?{Z`1nLH{OhqhR_~%If`v=(0<} z&U4g5d(ph_xXMrD`>_z4JBowM7x5dnb}tQ&Uw(MrLyUcT?KbPe-*A|L?6t<^zQacE z*JM;ZmtDU!@aZ7gp($Esc{z-_Doi+WV7_RtfQCBAU#rFKa!t<cbx_>Rel<0zQMW*% zZ(;;k^HBB-oo%}Y9Q&@~;TOY9ZFq`wc_cKAG&>p{jSiXX5=>F{CCtkM@DJ&$hehC} zf;@GU5z1$<MzpHQCaqGfsz>WNy;`})8Z}`)PkZPpuR;b|#$p~!s}Y2^^JBI{4y#Xe zI@GC}nLfiNK^izfhN|we&_j-z{RU*x;ZxW-nWpA?(c)=T2}P|{Mxl_ab(DVLtl=b+ zcrqXrXkS4X&bOcA5^90;@cE0ZZtnI%gG0P$HScsWCVywpsU&hCVEI_pRW6;og*-ku zu>hYeqj6r%kg}-x`ypoDQ1shktse4>Fm8PHSbXsjE`vOxwb1lv2zkZ}&3@$>6tNRL z5Q9%vw1cg6XU~Zrt+e*}c}xM~A?rCzYRLHl`lNQ{tM4Q>3Kb)@Adu<&vLkuNW^lO+ zTTv=l$C{d&jkLltaGU(&u#Dm!3<iYusL>jEnfkoeyKN{PomP)_89-%zarHwt-3LTf zyyEKqSiO`k>L3G2@Q1d>JTU4=@w|J8fSE?sve6mSGB6AHu3{S|GA-;dU>2`|n+KDH zf@RCr`8I$Z<$zZZ6TN%rkVNIEkR9{E+A1&ZH7jtkCh?4lZ9-PeHnW<nqM5a%Imya3 z#)?w2sUS@&K5J#jKtf)vhPp(3khdR0LaTzdWN>f#1_A_bw45%kjE=&jlfRVwvYNF- zeGJt*W=~eFj<ZB#!a1LM1-pD+%GW8(ZRon6rT7OJjiO}ZOTB^uL>pGTfgsIFxGXSA zw^RGCX8n{&8lC<KOIr`sUTY8CSg+uP^=6tEHowB1mY3`xj@y)=mfP4MGf-3=(oBw9 z@2Qc|4BZj{j%EwA5G0KU#<gPwRO8<d=&fN0_IJTvf?EnO4C9KRafd(Ou}=zYd!PkX zC$s`hC+Zw^BLD|&BU&5vqR$q(c^4VyvvNoHU391M^MJ2g-3}e5Vods&PXB~jm8(}T z6+fDHI{WGltobH-!M8UcDs^lrO+~$StGK1fq8b}(SRDE@(!F(xedVSusCyR;%s+J$ zQ&Cw<LrqU<W1KkbUAUM3mI3T*h$5?$CpAd^mY{kuoyA<rI(PKQdDVv~^K0x#I#5#I z7oTE-0ep*U&&^%aW(xGLQVtfw;plW#v7kMx9&>9#<)5MQ`qzV{&U(MR&K#1k5N+%J zl6b{Grl#|6afPmnI{2Ou;oy8;7n>|}jLaPQhZh?K$|t|E+EehO!q(%n#r=>FOuCR_ zPK>7!m54~>NPiRB<XmT^yZRni(^Xne`s9TQ@rG40r0Gk7XOm{Ebx`gKCNP>5dT?!t z4WaQow_$kd2m5RhU%&tG%o{qe+6-MJYKp}ce#^r0*)4?ucUi=M%&lk|Ocs8g9sEU0 zSCv)3g2Kc5=&dl#EvF@64R4qKWf{RkIyW+<>mJ!?dQ47Ps3)JAduMq{m5Yw>l0+ad z`0fM54<l9xT8#LDeXUd*{cPHKm3sfFlk~hngBca6H?2+>_4UWUfj2I}=PAgy{Ecyd z$asXh*%DBTu4<FK0;IC<^JH9$Z7p*sBt^EM(DJBQRN3TFUQml0&EgbcXrf|6NKc3p z?QdNdJ6-$-dwxSIBXJw8f3vLQPt#I|2>CUuOq)@#w+#HSSAWraOW>ChCmN5d%zg|m z9g@z~Zv%JtCK6R#m-hC`Ew00yVZ%+h_G2augvi9Mp*b7}4F1X|LcBLl$G3>}z}waq zbqRVKz!)D)Kc{}(FAvzEjuI1QQXIk~j{=D*2ZH|ELJ4ge9?vjC?h`I>(JiO5O9(nJ zaVC>0Zea1FtjVzWF2==r!pZcb)3Y9wD_Sy&pnRB0IqNaLi80H#bjRU|Xi3*&iB3p> z=&w34KCDD+L9>gpb;}r|7rQL`_ff0i1w2cNqR4rx#|&y?C6*RZMk6@UOqidFTi12N z>FmdpV%5B`=BR~PODbG8RyHeT;Fl68*%au*KgRMZx8O|%<8wOD?wTnOQjLJuA<db` zbZ~c%|B_5x6sCm_Gh)db(DSEZ>|;i~TdMUn&|V&EC`}haG33E9+~4?xQan}g)ao0P z>ks>SfFRrzd4t+J9;|ynUDx^MhMhw2Q05L`yeJgiqY^~K4Vd`Y9C%?hXh?y>J?aEa zn7c3D=1z1Qa7_w;RM3JYih}##niH);Dd|Yufi<4}rj0r9VPLYZk1#fYi<>gz(t>Yo zI84fI_Ru-{>nqWOUyB=FF(`lXru_L9-SotDybH6mliIn|caqb@h%M-~-%gEdLG(ul z2IKLCcUlK#>SEzT$9A=B&es2Tf03f$phG+Wsc);|B%3!jtAr%XCp9u1gO8<hpZ3PZ zeaRyIK{y9;NQALD8@W34LJs$+9;YSq>d)2CZ6xt;6g<>ej?jHiQKo#9W#tp*P<lN@ znTr86Xo~bc$&P}wjfkJnztj4tzK3fOXsB{5q4OT1j$RZ~1&qt6M|Y7%UKAw?C+wki zdWs%D<B6{CJPt*f_7C9yApK@qfYlHspBr?bGy)Z?GaHJUO`{$%sK$&6CB_*a;H*UD zS|J>|KlA_=>I-FOLgF4I-RSw-CN0y;YeWqnVHqAdf18vRiy^94Q;E-E1v$jOxv?8t zh^8&E_lu#-OpSo?w=dLhFSAf?c{y*2BQ>6o_rkP6Q!Z|6IZ$Wgh_qpU&HGi6TEZX} z&KDW?B~7ssScub!u0>c^<O^6=bZH-UVP2GejR!0vdSRUamH{kEL>M?74mKst9NWqm zRFfN<*S0#s@CB4UWERjcA4B%uZ8Ep=EG2idm<_-kk9aL3*d^t}eK?7RNiVj%dZ4JC zKNnuw$rERl^IbF@`S95$Oc?jM4OCbE*yNFHSqCRrbk-d(mAkp!FE#lRJ0jy?$^cnf zL)+Zox&lNlBdU@J;)5uoA(g(glmZP};Xjnde^ZQ`D9xd1qB)P_mqMwAh+Bxm9PKz# z+G!)NI60iwm15F2RuZZGq|%VCcP;El((J`9PPJ^PMzEFxq3q=0mFrDpr&{^)H8Iz? zKY-JRJ`f8M0<$2(GzJaI8O2ok$)<)+J93GZ402lYD7c`XWpX2ac0;)GDb_G5?J)tz zm%i^vB0pyJ<}D$*@+xv5x{@ezAi1)9kD5|ST_y9b!i5jbHJMBAi%bwpA4O~ltw<Do zMQn-BLPcyztymO6z9G@Vhr`C-5D2ac3?w#@1x7{Jf@Wk_7{z{(O{s-uQiYlb;X?{L z=28}j2rnqb7L-S&0zI*X@dz(4MFz67WRcBy(6dL!(sx98a5ny+zTUhm(lb?&&WzG! z#7C_HJ@JK#2rm#tdl}%z63&H8M``BL24an$m<!tBUNnmCNRR9VTXGBB;cZc+?GbA^ zpl4N%rR@&d-zXAFY}hmWf-TvFPLWOVg%6QS!ZW>sE$M}~1cA;@gz_FdKpgiM#6Rgt zcwl_Xx$hn{j&F+cztfX)hPI|AGWO=?rcVD~LM2p5)_z_9(KnOR(Fpc~P=Qa&f{IQ~ zK!eau6c<tjSW}Rg^*N@26NhWds<R9zg1<NW3kVr_AdqEGoQOOV^_Ox)|I|h7cBbcB z2fx4X8~hHuooDHu6&{+67iu$)PJeUMIlY_CMO$lcZ59lj=Nih-RBCRIyYN6>Q_f8_ zO*;=WFP`l1v75~|g7fU)7FfBV;UGgc>{}B25+3Qk>RD##C(QC^Q}Rg=fYZzcQezc3 zsBWYQ`Oid0{S%CiT&?;@OVZ!HE;$%@EJ<AbZbdH0N2lZ7g$|T+!gFYD76*h%lEmL$ z1}5Wxyw9cbm)H!C<QNs*%g&z>Rj)=MuO)(r6~qzmcWU%7z*TlT<jICA3SN{i*Wx^- zOee4HjxiPu-;}}VFgAUw#b1kE^8O`%)x<?nD3!m`nM9V=qLOHCmvQm-W=}S_spcwe zr91olf3cP#v!6U|lKdtWC~9Ieufe0t*b0eVr&o)Xl|-TFtxy^A;So%zdCQS~IF&&x z^h-qjW>QtxLX)r#rOshi#9?@)>#U-FV55Fu0UbN!FlTDD3Veplg#mN%1YYbApHgey zZF2ot`Wt<x&ME5mM&M^V)otU=SUJB|`$E(GAFTB@ah#d@w@UQG0s#^I*BVbwUg6(L z@o&C5J7xTvuf`qrpQljSf+P;t5~M0_JS;|xV9+a5BfMkW>y;U=r%ln#-W1~TcsL4; z!jQ+8l}WM?S_nymcr-HV@VGU3$Kk>9XVH}gp=sEyy?>d!e#_pTGG||%_TRDv5kP<q zB?S5~Wkd{VAi5Fq=VCt&V*D-&RMNzp@1a@Pgma~1kO|eHRAMpPEEP91e*fv%`}%Ob zG@h?<Oct<kvid9MWo2Y^0Uo&2*t-ytu6?F2NlWv`+ajUou`$0Knp>WbvGO#-H86l< zj!V9W!-$p|w0u6JTINWd1v;}h9arpZP7K{TPXlV|GH+UINd{O@wT}Fh8XR8y=RA!| z47rnvItmN=ybBsf+1!MtSi@M_lxvhx0~oMh6a*Bj$Wx>T)0V38AvZUt8>fU6v2r>Z znKe{mPeQL+S*TsorBg!#B<vq2=cng<TlxHRGDJs*wo6)C;X%`(6A<7>cq-6>H+8o5 ziD*~9oW7VH9Cps?$bAA;X3r*%_fJv2L7Jj;D&JAcAz$n%kr#5)zj7XU=6z<-Ou?5c zls=L6%vqDGEtIUr2byYF%P)_m)OwAa43)s;dDvVANdn`1%k{w2c?kk<TS@0ho2nX8 zi*SC}>ZN4@nB9p$enR*b0K%jnflf>?y^40h`;0FyQ>{wD4SW|+PoF2~zhvXJqHH0( zKk@$NVVpUrC`tr*83uCTVA}-St@mgjd#WZuh*;E$oHZ3U%|MFVSWcvPbuhS5F(gy+ zikhNy2@7%&?kQ+F3Ubni#Dt1!kBCps1ktr{nrZ8xigIb_prBL0M3JFa^##Sn_Cw`c z^i>9FLKEaBt~N48p`+tX_Vq=_$?cB7;8?7aS2)UP8FObfTl0{xXurg1I?q;u5DU$o z0^_-gU?dkRlbsYexo|E2OFkn6&{K=I9AWFK#9rlFyXex-@H&ZLBo=zp3VzG=U-;51 zV*mQ+1mwcR)%Lr3cJSaN=a1O(CGe)RxQioKTPpIuB**s`hbLS3K)O1ycI#|yt+<;I z%O}Y6GrmqDsY!)z#Df2l-#?=id-e8XhV1afuT|_{Q>VzfSf6k2Z=zNxY#_K^2wU3P zJKk`gvhi)k>!G$aE9KY!(K^b}+<Yhd?W`rf`(OS$^YVYK@*kZqp^CFoz>0{x>gpVm zbF`E7_>quw4iR3E(R##W8m!DdG3RdDHI?m-y1}32UQk{qAb(3O+|-$&FAj59SdJ%P z-TC;ow|?Lnkifx>Q&r~W6_y&SiboK666>DkG7r!!(g(X8Z9)SosdQ(t5xj+T?{kFH zJ5Dt>PMyetJrWk)yKtE<(sJr!;+@@D8UObE!LTxETuUu6Ul(F)J@h`SoBCBBN^pqj zMspOv@6f+nZR_GgrrWOfF-txdFX{Zsi2Efz_3O&R*fatF>qhmSqXC19MVf!EF>Zio z3b_2jFddN<Z}J8)e1$D8yWUG}<0&Mol6W7o;mABzhs|vGEQ_TZI2D40`l%lMi~YBI zY=N+lSlWs=m^b`5mDhZTK(fr+K%fk19}g3ve$QS}FOy;3q8_66-zN%TU%ChM!oLGJ zwX{yVE5!=AU%>y2pZr*LbQ9lOa{28n$^L&iO4<Kxw@@0ln-@UkUAEjq)|x9p9czGt zaiA&(D}XHH2?^3DmMt#0qPSwsUTCVSLz(RkLPLh(3y2fakq3}2i0OJ<8BcLN@4i01 z4a);f-<HNg<F{$J*X<UFmUb$}k8L4QZyg~SR^t&!3l$a;|KaDkmi*9s5Sn7;b|ma0 z$ydc+KhSY2R}!i~Iq%8^P%uDzmcgQwDf@SO*FM*M>}rsvFSLhPAxh={k<m8`8P+o= z6zf9}U3f-dsVexqGGiLNVeyQ|U}%>DR6Z1ml!;`DS44}9+*^6#$F)8$)}v!K_rW#q z9~5}c#TLr=jXsG8X*}6@_sfLx{ca5$WEGcVlD$SIO|5`n2^SMA^ut7OCFG}S*!NFq z&NjwS5RIwz8w`Syo;Pgk421PyvsPBhp!AOvgMsG<`SgD$*J;)XmQN+grK_vr`+)yD z6dUZxXH9;(i=7K&40P5ymBRTcy~WHFIZ%Z~EE^uxY8X+o@{=p9OV7v-=cwwo%JfJN zM7m_&l(lNe`;*#qP#-fQ=Jrq|s8Zyrs`j|HGeVW7*_c&oz|HJ0RV32(Ml<sC1$h)p zXU-~sWpxPqN=Nnm(m!&0kXQMltC#-;<e%yw@^b)6;oCYfzWdJ^{;N7DyBayWSh~2n znEpF_{=-mXl&|gQ6i|5)+R!w>hH%$$abzfz3@Z4KAWZ2s(Oc3~7>&%1FqHG$$aJNp zn0oz3YOGktS!V})@8g)a)TtR~2UssVue-h<`aX9p6Y%r<gE_!(7>65)4p_kwRf-@9 zx`A_5iaMe#x3<vlwS{+t<G?zOGr?|FSy8lEx$y#u)|T|FrKVZvLdB_J=hsVYy|`g_ zgM3B^FSzKkiSjd=^)9nnU7pjIYAF+xvP;bHtg1(s1r=^$C+USHU3G*{wQ8Ez#_H@` zU0Ny@ykn}(y?Eu-eUaX@=AAeARHL!mIKr6@U_eAu%y6VOon_ZcN51=(If<dz*?LuF zda%sGpv1FFpzlm-gyv7b>loMH$Lx>3i7mfg!)9csQXHTh0e=)rbe9+Z@??i#Nf1LL zo1ls&ktWp<8KOW3zi;p7kzlc@ST{bBTk7M^5_|;4>R&|2$yzsI9t{t3N+`$cGt$aK zmo4SI<NHOwr&?X^?CdH7lDo5Z5y!8g(AJu00mXeQ2G6+T1x6*t%Dk1cuF*lr^O*<t z`7}7>xd4f6&?>igwqLY4L1^8CE-sNb6p+_c=)~|n*K8Ikz^D@m6mT~ZhOxB$rV|i< zeukiq97Pfk;qrb?$)3V06Y((Qc8eBi@om36{g}Uoq(HV0tc7XaTNkWKn(mfucOTgn z0(bw&u+$f(FCFb<t;6Jv(ts}ShAKY}CSMQ`jaX+1$52UX1%Mt-Ba=vXTe+1I#Zdj- zDjeOU5D9&-HO502aybCOL#mvsJ~-ESdQI2=r*am>5H-SmD`)YyufqMW%BkvNY4h)V z&Q?j+dG6aq!6XS_uR}iwH%e95DqG<2&xGy0<gwuWPE-`HW#I$V_8CbqOW*99pMqr9 zv3vsgC+%+{7NdEzQh2vMXEkvA+esnZh=c`B^4RUi#zHqctt>fWJhNV$j2N+m>4tij zr(r*_sbJO1hcXnH!&*9jMHAf<pEv+awO`&BEoP4D4;y)npxt(UZl#li{-iJ=KZ_vh z2jGoVvpw)Fys5=`6Qv5D>ymbWk4oc%GaHp=xNW~4Xyoj>SDBH9Zrkb@Y4KwDs1?8^ z6Z2xaB_B?Jf{;`#{s|tKzEyDYV!@P5&4o<ns!6~r;{#c)Ey_3B0Sd#8h1H;BLERpT z_x#=0-O3X!vO{3qYCi)=#a#Mw_uxa;3zG(~vdmqOkD~#{--{3YiO*6wsSn#frgG%k zKD~JYz4-n!`X%70r}*7n7fHi@gppYL3ihOJkc)K?a&h$j>(k#=`oXGSvSr`TMsk>p z{5*u{nHx6j{)t1F45I|-4`rGHESYn2T_7Fp97UO*C1aCq`M66xB-XCbBklzbZ&9rf z8&2YStK4E5YhD2HE?iP=25d_yx2VS7SQXc3RzV_R4IE>`a#aDq89eL7+yZ`CTHV!} zNs0q6yjmZ4S;I<x7H3EFKCo#*m%!5pSEG<!G|!*I;h9nEv%+C7whaE(r1q>6mW^m` z`;Y&q4Se?81S7xIr}6uZ{|_~i{4Xwz`_X=x4;&m^7+lT`+|3OfUJQKdVF5Y!{o!GO zSPYyEF1K=^UgRTdpu^>3C!t`X!^K)Q_r1X7V=s#}k=8f-r?nV(_0IcT!GTK4M3#ye zxS@P_tG1Doq@Q9j{s^QPI8+F`il-R(j}Wp?NzJlRGMi}FXjmCo!k&@7k)DYjU?Zkl zU`cXt_W$UVOdQ?$`15`Bh~L5cKknk+T?GGd%(gMT&_M!-fG?`~#vtOL9Ky2%(9I42 zA}U^+>-y3ptD;6rsrva0$b-VHl_=<>;pc8<`d2r9H3tw%BP}Z}E0i1MLc(b9uaI5` zqy`jcloY^~)+i-h=PYqzekMh`<we&OPY~6VVzrad_4Y7e1~$aV=Zop;<d>$T$c^FD zPi`stcS@v?tM^dfAysmQ{l27`FR`yHs7w0`D;$_=8Q}b&0@z@M(0m9XIJ2@P?Q^i@ z)aENRPWgX&00LI4`m667*8lFJK>x?q{iBvk)c;rS(cra!G*VI0+?Y#<;3sJ#-%8p` z&`I#DRCFl$i~%r$i59^1ye(6v<!)m6t`}h^jCo5}uGC*m+4m<G#q;OU)@FLmHlIIH z!EmE)UJS4;G&P><&&_)`bN_Bv7r&RiJhIXa{51Izth5<x{NX8tPF_J6hC&C-Oh!JY z-jS)fl)NDGec}6A=<)>|O<qy|71t7b?fg@)C!raaPDg4=0*d@RtB>cBp@_Wf==ZRq zd7Kr$EVU~+mGn*R=@Z^@df%64<F;#Emt>nX^n11V`;7jbyU{#PgAIuDr-UkZ=DUjz zcZ%`}{KrfGC$sq+Igz)1b?>K|!uNN)*Sn7T&Uklk&pV8W!^{(e?U2-2+noE=;#=<h zK1ZKH`oYGms0~bG6dH>wPV7HjzLyX_XvgdE$C}TSSb*&TkE_hALVfiEkc3ng5{Vg9 zekwt>j1pYyoK4ipnR{G*qzp2nPGRS=sd?QK;KmWJ$u>xRp$}vqtTx!Hye?>ehDEd+ zvKM3@s4h_bpl;xQNrv9k9qAkE9hw`o7ib@_F5qtPE@1t@njZD<sq5fw=ufM$ZZq8w z1|jLvZ?te~KH7uouKkPkj`a=O(Q=ypJ}%rR_6xQTTo<^0a19FI*Zt!|F8>SsKQ&}@ zh@R0B;k&(_00;>0zi7xmtRh*%(*XBa)n9%&R^3=zb3LJE1ts^V&8VEuLi2@Kiu#>a zMRI}eYJ9c`UX|D!X#@A!gpCcDmK2VKbfA!Qz9bb?zMySl5W=s+jDbT7VI@KZDWc*T z5=j`avDtQ3SO0B}ip|wzpM$vU^y{}R?`>|s>(1+S48OZk^9TzH97F8<V+=*^PQ-#~ zK-nC@yDDZ}H+o#R;>jQ*+x#~5gS*i?*X_$2qi@cqppUO0&nJ_}7i!5*FG<+0(i#4+ zQ|Si==#L5^eRO4gs9E*?#sod36Km+s${8ByPV9o3uoE2U5AC$2`EHsA+1>{Nq2RB| z;;#aGs)udpk2s+(8nG{o0(*wOoNc5rU-gswPDEdRnW~2lA%4Vb0_ulC#t;4v4a|p( zG*8+5+>jHia7jaWN71yW`Fo;jSZ6eKVff_`rmFDa0xfvwDvwekJ)LoB56kd#)Gn~x z2fDN#q|nre*Tbfcp!2~(!QJE)fI3x&)-D@#O{nsVnqWtD%5nqw(;rz_w%Zj#HI7JI z4yq0;_Ivcu7C<YL%yS>4ol>jjZVIBku@d)NtVm-22gq#o%BD>G%g5hfugqfe;q`<Z zW3yodM!KuUhU(wuo%?OcET~&kjnuOoSu(CgM%lMrS63%JyBd2EE(RVBgw+l-^O0M< z9@I+&aqv;08U@^^3{6an<ly_ayB?|hb-`s<9xjAf=hCpxLkXRDWmARF*C8PXJG&;- zDcCZiVIOopfb}}oGzoY&H?hRg>fRRzS|sULX?NPzh0F^8STGb*xa)v1MWJ{ary7(5 zva+v!K|8`<IE)lSWqqMa<^fmNfxTH07+SR+FjMYiWEJKr$%jV-ch`aaFz%n;=!9iP zT6#Zebg@MhlxFpM*V4~$FpaDt)~7r&tz$0Rx^4Sv$>D}=rH{mPrXQSgkXnX^;eJcY zdpEO$TF^19HWQl60}BagPU&vX65w22oL`0sg&E&!SXpr5OP8djWNSfUSNI@Kgi<1a zFcO%STXHm%xQCb3*PU`ItN!M-Vx)`7)Fg=?kH(afBB+B6<l?T<9(El@-G4Vp<}hsg zMKIH*vuHK!0EeI$L}%Qb7-7hv+%gg7GTqo9v(5rIKidbNIX^X9x^x~&6jGpNu_WU~ zEcT5Eo4hF96_DHafytB;`iSO+4;2#t58d$0`e@^bM~$R?e09#TY%&C<Rx_RNGovHq zG<4T$JI7}lYP-;JV?E<+CZXDdrL?EZmpPh4=>%{XVvJz2(g3s0vRE1`rP0i}$Z*gZ zt5AY1rmKNpO3HFRS?;cZ5TjotM^aS-H;WBDjP1G#xz{UMtR(D*&^MYUT1q+++qM1D z#<&Se3mh2<7Qji8IfI;4ISz^U3$Tng?%*<S&G}KIX70kk`y-H|m|}>~`;tfAB^{vZ zFmS|_wrbyA4OMk4-hh~>jh%TUTI_{f0i-T$K$bCS3M)R{UN5E4!=6iM?O|KWn5J(D z#zYB%)#4hF0|@8}1Y=aqaAUG6*+f5w5wlG^bu$s0xXsFTt}zxbs+)ifoN$e0vgFpY zpSqin93K(i!hjHG7zo{=DWRZk%73`)aiZmi$xeB7;-1r!Yk~IAVzu+=vXjw9A4~T9 zL+wZxUq3)Qs#mi3V^71=%-)XH{iv_6Vm{?_Mi}yr$7w=vU1PPx8Yi>5rD`sx`HqYx ztI=6*?S%Orj9OrY`bp_D`++{$FV;y$mP0pN)eGmNL+To%Qhu&I&5ou%qg2ZF{zu*& z{njN)vs9m&;7S`15wECxg-g7d@I%3vw?~ass-;@-@SxavwSIt#AIP=x>GH{P`jhJ@ zbAe~G*^fRgEd^^FyV4%O65_S`D^Lr|WuS|09y2%nfyw3NlL=pYqnJxJ`J_Cl><BZn z*wXm&MNW~S1xgObpYE#5htv62ywKFS6MVb#kkmT%scmiHkL4k!SdPGJMUcZSCvDZg zwtpGVR$Zy7=VNi!7NH5r48u)5+?wkmPV-2&tK~D+rj~fC%p1jQ>`o<e$tPXdSTdVg zN(l-WEq}|}3!zlW;M~qbh830&8CcuVa^5W>&AGK)EfG%4;EfMVjWqO*IzqULWJ2Hd z6pP|p0QH%|Jb;!w4z8w|V(qut_=pAUHTPCJn$1ZR!djb2f-H(~k8*+MO+n<lBB7V~ zW3v)TN)NTW;mu1a!o%XKydrip4Y-$Y^oH#=EQACSYNq&VVeW`;hkDb(oZK|dH{S=a z8x=ifS@-A<CAqCRz|vh}w%H(xi#x|Q;u?wh+E`k0a|47@!xj%h;MKfk5)MRmD$D*< z4XkGiRgCs1zkv?8j5pbbv$W7gsa~1j;-8Pv<c=v~tDYME1xs!hfo4lm#+^z}xj=sG zLkJyG4=)(oj7CweU}ruQ*E&NP2zOB8susdke#Lw)#Xa_wsmmPAevj?Pnos6+@0}3z z>~g!O>($!b3CKbqw4AGBN}auM!G^?MyqnErSx!C%qPrvj#SS_Sy#N{d{;$ttrd~fA zyg$*^cSnRT^#^ebpjH2{-9zAz6d{DO_>Pc3{S|coXCe5Tdw7@%E~DHemcm+OJoFq7 z+$sGzx?E~KMC)3bu{o<FvBGJbCBQP1HqS{cKmnh=Nu~?xn1z_&r(!7mEiX}*`r%uM zR=-eHcxA`njaid2@DKaGA17Ox(fb>2{mwX}0%w|VOadk*a)hzg@A&v42@>&TlEOA+ zQ3YQZ52uK6r4JMj(PNfO_j(T$_{H)S4{lx%^XWzrv=P8I)0&0I=_G)oqq&=8?v#eg zG9xl3G3}<zsTQ4PN)g;6(L+I&GMtG5*dhwhiN?kb5u4UqUGQW21+mwS@y16$Otb3K zpM;AmoIeB(VrZR#donHEpDBZl_pZa3ZX4kgFkky_F+)#YG`+I5Nf-l}22^oW$`Wb* zCH5EC7}c2d>?@9gmW&=&?P4zuJ}|*m%iVXoCfx2<44pMg(-2dH&<OMupYhMwQo9Qq z9X;=C*Xk{(v15bYibV(H3Efz9RN1|rtD<uwG%UD^T=ds1F?D%#eAK<|Muc9=2CV6k z_*m$vPw(55Hy~{d`+q2897D@yDJb9^9XGpnB0jKV&U$q4B_@C3isw3o(k`nzIq#Rf zLem*!@2z%eY{ZPqoiO4JC2!=ZC5Kc#z&9E7f^n(}h`K!m{&AXIaI#g#Xg!B&1WQw= zm4E<o=sIb_BRR`e*To{)=(U=C?07ffx`58t(s6<Tso?vm1>VHPAY|eTr3Cz3Kk}}5 zfPyM50O7ctP;&_r(J5D?j^2aau^a>~z1&7;sO|9j1-y`aKQCwX8;Lk_MoMa)k_l^% zp9Q<$gNHGvX9YI;diW)<XQhu51=F0V8Dw8FdK(v$8?!y|Rx+A*3~dO($mb^`U+}Gp z!8_s*KMLj-?T|fG^tM!F>)oz45(n3-Sk!=b6X(Y+9y$eb$GJcZ4l(C;%q*S<%huu~ zM#QwFVmE07%?*#BstZRagnqfaNViNkvFMkTpg?93sg{;!AT_=6;f!c`o514nfq$CN z0y6R!Wvt)=XBS1@v^UH|%W-<@gwmvEd8ucXl^K=FK}<l@&a>1DH>^JcAg+IpKJA#` zN4J8EwO?#GO|D%mB}-%J9#eUBpL^?#?yF00tt)EZe4tLM6=LAe7h2%!n$YLv-g8l7 zHm}@=Wh+Ojr|16BLMf~FX3g?T%N#P-6!ia3b7vhD<@Wu5N@NJ75dnpvkwzLu97<s5 z5)crOP5~)t=}w344nag3Mf%bxAl(hpjly^M-Rm70xvtNjzlSwz4QoC7b<TP6?6dcN zPimgm%#k0COs;80t}{CH?6pRa5V#QhIEXnhdm)l&Rx!NoJ`2io(cM^6Gm`ScS(a3) zV%oCNuN5COON;OZ%v<Kvgc3>u>Tk1tIY|%j<C}0;NZK<+wJ(g`WKDZmXE{7Qc1$@D zw4{}`sYMG^d75z};PDN}{pkZng}3NceV#$Z4Wd{U<H%%=uTCkw$GvbJz29I>Zuoti z+iI0^ngyNU%y(bMZJQDk0tHaqMIO5AOaB1vyW8WFO<W-@@lKIr<dwG2&(VC_iquu^ zSa#cuPk0wW7^G;7GE_^V_&QY-OVqCHcV{$Lpg3Ditw3ov6XCFKcal;kAa0%J355#; zeRCUS7=+3C(Bnu*wYM)PWl^R){;lC)bvyCQYVmA;fTZE+ZI5pN&5^oAd~Vgg+`MW> zve$QvQa+qWE51@&7u%x|**~?}ygvcHo9S}G2XVvndmuZuOi&Iz^Sm)#`>ID8huh?> z`l=8nBbkZt0bU?E%HU?dWY&;8ak)Fr0C;WB*=!}>qC}|bK*;jt0e})?^L=G+-+?63 z_JRMsv|-*MA!$o!J`w*g@d$^gpjSyUUf(*}H|7Zr(b_Fx(OTc^mo&Gadl2O+`m$cf zq6P;{(~s&O<on5XjP8If0?sg`dnqeO^j4WU7xDWXB6((<CLi@G+)awfAZhqv%y65{ z^OV2FKSeUkT`i#=Ye5tl%3gsIbuz;lsmmSXIS0bD+iYDnu({(^g6`!EA<oF17MLPp zlL2LX=q$fWcV}5c;v1Je`{WKe3rODIXeG4%i^`aHFKNv?$1&Q~r<CTjAe-)U!WVQ2 zmAV<!ME3e8tA(WkcUHg&Ru&+vZOn#A@&3B%mkK5Upzsm4hAk-40vj;-gIMB9XTXvA z^y`w($$Q*eb(n9U$g}Es&<{FD=VoH-1OYDB7>G_po9ppy9s2nN!s~gOEYHk%P1qWW z_0Kn4YkXS7S*^FugpSsb+N|#Phb!cnB^0166iK}C;PU)l<DC?Yp~ScoPSqiKH{FDW zuAqZfpq0?NT1>c6mgOiwhIhY*Dv#vp2#;vsBVA<fFX|6SR@!RgkhM(kQl`*dKBD4$ zz|wWQ`S1+1=z-LH9ud|T&LHuCmC^&tR@5mACFUhky1aC8I8phBCw(W+CQl@E*Fx>g zCazg3I2xOXq}AqWIcrx*Q<YjT1bI5%-aTc;ckK8Ml5C*$4A)Nyscc}$$6Qwb3~=U9 z-Nt9koy^TPrgbXBt-fb-TPDy$)5P3eSvA7r)jRv|7N&Jhsv^|aR(6(@sK*_4zi&pK z5YYA$+|6b`F>PT^ZkV34O*r@qU5b;`VeTu?4NEIqYXkH$#jmHs>iG^ZxyIXeDSQJj z6KoypHP@}uq{YysWy-<Z4@<MFuS>pRLneNFBWT--;V2%=AwX3r_Jz&z0J@^%I^pQ$ zSCE>%nBLKDW1GjclQVy9l(?U*FI``>L=um3Ivo>F7c6X|#b}m6^7bTYuV43!@Uo9S z9vEEy9JY$10b9$xyo&RyXv_=6PPry_T=HELu#9tM-4qlB9}k~bP8B&n14rpz#I!f0 zrks@uxox2#_xUvH5kqq;A%KW)crLlCCoK6e{3|cg^<jt7#itXW{6s3&bteWoL*GUF zH9(5*rDl_K<bC4~Ra1l&+UW*nHn+Dw=_r+C<+*0`h3<U(<2IYwd-uv<7UW#nR_IL{ zcJ<NYPK(DCnkc?XEJK!TfXy4VI@+r*KT8TiQAlNPZgc&ht|D%K@l0tYuQZ!c|D95Y zVfc!oG9}JiyOe7<HPmN!6oAuAqM8Yhu?RmB?1y01o24#6tZ*eI3K-tndHBj1KU>bH zZ+iIY*b<6jaE-P1o60Qlh>EJ*V8}~>G-V>r*wdOu_faNxZYS;>blGEMmTdhJDb2qW z>f6T#q}O*wJGcC(beihe^wBb1d$xKhyqn&iX5JBX@R_5$&K^c>{TwBlIG4S<gH$bN zkXfCvC;jQ$VRa%7>*rqe%1;_Oc`=HH0fniTPtu&cR8to01hK%D+Ac4oT(P|9tE{06 zlO{N`Vw5FlWGy7>G}DSrV+Iz3N^gj=aFul(%|a4%MxQ3wTPc51KMyJK<eKH2ySXLF zpW^eG81u*$`p$LAu}Ao@cPjNGvQX2#YZP%Y{bBh$Lf|f~Sx$VXqP`umMrFVk%*MEw zG+&NPg&sS=JN(64qro*t4J|cRRbfZX>`4w{I`_1$+xd?!CQ9f=QN?gtesSyW!w=r% zLQ_v7H(rJ$^7N_%X|Ou%7m2@4DK}Ui`oId=)Zs>-@YXQ8Wky*Q#<o=bQqLeRDEsDq zc#YADgU;A<U(==N?VKmln4>QJOBR^M%XAH@8><ptORQePV}l*HfNzhqU-&EgsTL>U zsg`>&%@sX%sjlm|Ig}iftVPhcEw<0?Q$#^lH=htD>tNWHkMXJ`(LM3a7UU%<Q%!$n z27xyIqAIrjBXKlQd}5WlhKwNSExlXSiK%)SIuI`{TGo!yG98{!bHl?)$|yaT-o-Xr zt12N9;Xc_ypwnKSNKmH6mmWofO!cQU%=wRiE$lX(ot*ZAffeuk(Yo24v_6tbtg*g( zT(->r;!x?7Q)){`adM=~BI~O|B^UPG$~m3FTCG`=D)p+h)t3}=&HKyVQ1XXN1iTQv zSB908Nz~SL(c5kzpKq?G-Idy%6{bwq#M_#TX0EqS%uaS5YUUqiq(G^XECdUtQ3a6h z^-I-bfFGcnK<i2KP`VVemXv#NAAJ{*L89l5iP#)55m8_dIR$~|d3>I7HI9+t-Fcc7 zgu5*)5`ioCU4N~5Gk?qfz3l__>eimV6P)xC4A)Q7Lu@`%$)X3=9cuDgvw{Q4A5l5q zN}qw&51X4PsKw;pLr`<{Q*PIZXiF(I0~xh4Ugx^j{~(-_(@-q)6rvIcJzj17aYA>7 z5CnK0;l^bSyR;8sLIVVs)(K(3?tfB(RL$)ORByTS)YITFvLIs?$FinH<V59-v!Pgy zf=v<#T_R^`t#}e;M%Ml6%NJ^UmP0;@7(bJEU~exWY2&B#d_FOZ?_|(p?kLI9LZ2*X zG(KgW|1@REd2%V~a3a^k{hZqKs|{}eGR==F;s!BXP?mrVQnY&(YCBqg*uV|QOwBE; z06k4?F8w&7rYF}Yo4YCfogY{oZ>!<z(YzY=tweRA4{(gcnXacKoJUbWZ9h%Frhtnj z{y^G2hSomESUG=v-b9~I@Fg`ZRg$IxactF_TP;WB2C<>D&gis|CI`Z%cx8JiE*Abl zF4xFP{7n2autiT8&6i9AUNkYJN?Npg&M){%R4BTm`k<V}`r|`b^u)6c@5xD?t!-jV zxTjmhBnRVb0$<tTYZ4ggMEAuqk!g+=&)+wf_-iGh&#)i}l>69_qlBeGAiInuV+{?B z-b`lj1r2$qg{;w9P?}|R@x($^-tqvbqR31&w=1SvWdOrI3()tJD|3{kSf5pCWYS3R z(Ll~>0$ARGfLBj#(+IPCsQ-1cR5p{IdY0d+fT3^??MyujaE)W8JqH(=Ooa?sQ=uPG zyiw!hzGGoW=Y>^pc9^fS4s_#DdCp`jDrd@-ey>8ffT&gWYkRoHYsLy`;GthB4%;y+ zpJmPKf>3Bn|F!m81kb6&*coON+~k$MzR$?GsU=>SLE3|k_F^|~zCfRmC{)@|l>_@r zq+NnVRSm1BoWBj4BrUeZ!$b!{NpsJHBI7y$J)OLHLeX*sBa}SXh4qfEre=_{T8ob< zlXV`&J$|Aer5J~1Z8tx+ZJS}x+i?0QgWE~5{cMPrz<l9Y?kZsRr+x}8hJfo8yitIG z@Z78w)$X#nl`a)+I}FE$Qr1W{jfIm(Bkks|?>b=Icml|6B|1rhQYa6}(y|qLi-E+3 zHJKKqRl_Yu-5D0!^f6@kSY~L57~gDcEn?y}2^lH*0mq}s>Im2q_~<reLs~HpQ_Pd% z-wUrYlZo>zMRs0`K7X?ibCmRze6=#Lvi2{-s6H7$*)aWlwcodb0;92O>fwOn&bpm* z699hA8hiY>cTQQs_4EC0X})a_PJO7WTI@FFfG*(XTw)j)+-A?|M$63;Efw4`21*!Q zC>i8ig9!EGWVZ{95txqV)$o?!iBPf_WA>WpNCAYk*cO-*L%tpq<cP~;jyaCUM;WpP z4t3}FzWP3ZvvqIS`$q)7!OiI||E8pm1MD88$ch858`B}(-qsmO6iX$|Qx(fhS*JS7 zxRTqX*IN66p4T<z_POAOQ7t}%NoY|aZA54`-;nT-STZ<TY+@-iaoa(%oUC&Lt?P=5 zbY+T~FPl6}&I+G0N(1Ag3Tk|QiQ(YsOX9T_c~FG9i{*j4m7;UVDbTZ|c6P$xlbk_E zBS{5*Hh&Br!rhx0!=Vs{U^}J8-BoDwAK1ow;W{4Sl$Dbn8UHQ6^~n)im!PW_`H@dt zYSb|o=M?qsl29&NN|U?M9NH9R?a`WLW2Ilje81Ek?YJ>7HmMV$nr-fqc3vNS$Kr>{ z6T}6|J3?Ciqbt53;K1#4cS`J2I~=2eMM+(|>kd2urK~F?vqH2z*2^uMIPr%ZwZW6V zwLYEPd+wV!$&{Mf^0k#G*R7AY{J1_wiH@huquL9L9Xgt5eaa4O!{{y1=QZy4ACA6# z0zeg=slVAjSL<It;}%}}VEmpR=*B&4moo2Zv8o3r7;KY=(*g`u&_lrx5;N1JOsWR% zH{HA6&;%kIK@cU21SQTQD5K8cTDgfIpxbVVT*8Jx{duR1dXC`_=0UtoZ^xYmf?EqG z7zAVnI6?PIoN}~(U|pVi6nR$35yR$(ZLrVfoZbsHLWs42p1rBH)k8-;+kbLU{t5X< zcFHx15c-{qMxq3%*I7cwXIfjEwbhA&O_gMna7kFZL|R8j?Yqj`Ypb`AT^Z((MNI}; zAUkfy=SkJB?)4r>RSoHZ6@hL9*L_;q?Q1qNNw5L)c$(U=3%>0^k&kjePYdzcf76+m z=n}Q-rx~bE`>Jc3csvPsMVo5#38%@uijcxPvLJwc<49UkEd``aH&oomrZnabob-te zVlG4X4SUyqa8}?SwHi*q&)88v^G=P6LoVBm2YCOwSpj_+Np6(Qd|@Diek?y%dUi?1 zqt#vKXqy@V>9gBf=V*Yjk8Nd|gYHV)?tCgvq>r083hD^VT)$yL7F`0#y1Ma8xU6HU zTIw`rSrlUF^^Lc&YOyL0aV{U)*tk9HeAw&m81}j9&|YLo{}Unun_4~lS^5YMf?GLU z#KBo5(7pZ*f>$=rM}5zbmOv-P`8Dz_PpAP4eFN+%diVodT0YT=hhPImk~IPi15fw^ zomWmo(qXakv>U&~#?u@K>*eB|8S}+mC}l&igD|v$u{ihNGN9Fv=zZ`|QZus!kWr&j zqY|KEu)k&JWalbnXGbzsL+44uphgvZl;nkq5F^jeO`QMl(O#Oz{tu&_YR*_60RI0w z+9OH9o2#(%>Iu7TE@uQ>+%||ge3oI|7w(mhu}q>!df#2DZL|oT(g>G1A8$UzeTBeU zfK^O;^Xoa4y+OV$Bq2h53M%o8{ZE+`9)c;Gsl9ASj&Ut<&2ji)7IOgJzw8(*l}t1i z^uK8<E*zfreD^(m!r|fOnYyXv)1L46PSvMVlq`w2y*w(+E}FfYPng@Gax^PvXSInf zn-&uFalMs9v$W+?ra%M*m+To8l~ol_Xy<@(diAH49S%3A=%IU#WD1S3&#UwHjTD1M zi8Ef(ht!r8epNCA0dZY0=vVEu_mGE>Gt>;oD_y+x3Um3)U-;NfPWK*f=zah9;qtq- zEi6t9*S59Pb1<~}H(~Ynok@S+879BViYUK|sGm#yC$s-&%%XQmW7W3M8Ep5s%z_z~ z<>UpMoihDz02^ydRwqk~7BwyNF?K?Cw!H^&?6(N@v$fjNs=Q-(A|fpe0S4CMvGU}! z70+n+rAU8lMjMW7)2<jQ94zjx2$Ccxl4mIud74>6o1bX!zt+r!V$eQA9j9kZm)Y_S z>6-{=tl7GLmgeX(OElk^tRLIxP`h85%Ci6EsZE%>JUv%tVgzVTnm{gHL1kS@!xhNT z57|<$+6&`g?wfiteskmcnVhe%t4q{NfD+KlJjsKMF$yTtM#aPQA&7*e5Ggjo05^Zc zTfq`nW|;&XMMcnN0OyfmW9!nH`nim!bbpO_tnNKJpwAJMdN>g+&x?N&Yx_keHRGC( z(FWuzjlNLhJ>af_bbpF%6jF+;1j$t0%*1eF5PL9{2yulEE@3Qlw~Y6a%vMou5?R_w zBo==(#~anjsNE<uh6m5HaFwR1Y&t|@Z<%?fh~DKSRwtF4>uN4edW;-9-VwLvpTVDG zRon0lND`XK3BaOD*EONYs~F7mW_uhXmC*@Sm&Bs_N*C+tYr2J`s{e|HibyHk2NKX~ z3bB>PDf%=NMayLw#0&L7(TR9W+R0L$jx2cFm?{swrfqwK^mgkudCY<OGf@<kJLF4K zBa2=n_Dtm)0wVsqh5}{GbG0Nx*bN`Q#yqNdmMG_d-#F4ZKleIO(>}@)<16V+gJtNu zA2Z<^=$K&oQ?PiK+k<O);vl2-93JP^r*8{>j0$bYPTcn^H?&I1;-E3&9yuK{u&3iy zeI}V#Y>~F~MbXf_SwFA(t=&d2Bscy8N3`Voh;Vrm7s0y+ZBvpa0^dP*CVCdn?8_bX zEbpJb(aJQiG(Np;^7>VQFz*fP>%HLb3N)%@hi<iU8pB4}G8srD=0gw@stUeH_PH?@ z$r~hEqwW--sZ)>$lgJ=x+eWBa-U(aNBZ&XA@4n8icA-xWveVL3Qd`9s6|D2Yk<SQ5 zUd|sL<75VEI#zOPV}2*Vf6HNAp<cgxH<rXmYG=87$195fPn@zO-uYp+q|@>=W8@k> z5As5e=3=)lOn3lHSK^Y;j&a{sO7u82X5T+9{>L3N?HY=2g(R+k^{KO+_y@uq#x2qf z9=~{m%rN!kh^f6k6WG0G0sC<L@AsUItu;(g+1}L9PT4`eTZToNSxQ#%QGv>qEVE4a z+=9|UcQ0yLFkuLUC<MD0!dx5@LX@N}N*IET9qL@&p%fg%wYzJ9v){E3ajyOxyd#4p zq-?Pp{CPjf?lYv!sTx06n)3^Ow2WuQQ@n|0Z-@>n>>Y=ULWl}`GQc*(r_F_0_um^X z(zk~f-(=z1-9OE)R`34D4k^p)Vq);G*)Lk&zc!4hGJT;}{r7g!up{gh^tXET&o-~t zuZCO1|6}p<aSFFXZ0SPJ8gBRLlHE@Q>Ob}LLf;y0zkSL6Z?)^6ZC|Z-{nI+jivqSh z23O$z+4gVh*YM6<tpExKK7pOSKLRghFClUfwG-i77g!b4e{m5~`w^jt@?UT$Hta<F z4!u$g3=xVbgan7G6I})Ud#3igED|CYQP~5|orGz9{NCBCbv_WOh$V(_Y9ZZK)GG@P z5uu0$YH(;HtTN{JuKrsX^S7^qh(oNbf#V)C{}K1cD+;kV1WsLJ`41}MG!wC-hy@04 z<O!_a;P-L=vD^R=j+h`0heJ89g2U6r5lM(S!f?{${a;B}Weg*-5Hoe*tSs(JtV<5b z)#n*80T#}R=lPZOYdS1qe-Kk7;fz|o-x+_rKoBE2aFp(&Ur~RL?CK#Q1{&ZDH0j?N zf9ww8qAnaY2f2j$xx|ZjXb@K(-~bP$Ujctyhd_iP`rL5nsPga7|M0*Op@^<69NMme z2)%S&{p#o<LJ>VkIJ83bH|T%9IAD7s{FudspY`{Ki*$ZIuJ+6H;-}a3^PT&<@rB<7 zHwLKxW(<31{Og7NH|D|*gJVSgg!$Dg`w7HAy2>y6iOlly`rm;6cxk^L_^algaPGe5 hAI1ys=mi%(6IGD82K#{yBqZR)A8evnq;>J%{{dcPj^6+P literal 0 HcmV?d00001 diff --git a/lib/slf4j-jdk14-1.7.5.jar b/lib/slf4j-jdk14-1.7.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..184c8c4109973315b7df3da3b579ae205d90112c GIT binary patch literal 7900 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 XF9myRhXH_lw;#3J*wqs6%fJ5tPOV0n literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 2416f76..0000000 --- a/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <groupId>at.ac.tuwien.lsdc</groupId> - <artifactId>lsdc</artifactId> - <version>0.0.1-SNAPSHOT</version> - - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - </properties> - - <dependencies> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - <version>1.6.6</version> - </dependency> - <dependency> - <groupId>ch.qos.logback</groupId> - <artifactId>logback-classic</artifactId> - <version>1.0.7</version> - </dependency> - <dependency> - <groupId>net.sf.opencsv</groupId> - <artifactId>opencsv</artifactId> - <version>2.0</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>exec-maven-plugin</artifactId> - <version>1.2.1</version> - </plugin> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <version>2.3.2</version> - <configuration> - <source>1.7</source> - <target>1.7</target> - </configuration> - </plugin> - </plugins> - </build> - -</project> diff --git a/run JobGenerator.launch b/run JobGenerator.launch deleted file mode 100644 index 3c15170..0000000 --- a/run JobGenerator.launch +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType"> -<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/> -<stringAttribute key="M2_GOALS" value="exec:java"/> -<booleanAttribute key="M2_NON_RECURSIVE" value="false"/> -<booleanAttribute key="M2_OFFLINE" value="false"/> -<stringAttribute key="M2_PROFILES" value=""/> -<listAttribute key="M2_PROPERTIES"/> -<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/> -<booleanAttribute key="M2_SKIP_TESTS" value="false"/> -<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/> -<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/> -<stringAttribute key="bad_container_name" value="/vales-riegler/group"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dexec.mainClass="at.ac.tuwien.lsdc.SchedSimulator""/> -<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/lsdc}"/> -</launchConfiguration> diff --git a/run SchedSimulator.launch b/run SchedSimulator.launch deleted file mode 100644 index 3c15170..0000000 --- a/run SchedSimulator.launch +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType"> -<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/> -<stringAttribute key="M2_GOALS" value="exec:java"/> -<booleanAttribute key="M2_NON_RECURSIVE" value="false"/> -<booleanAttribute key="M2_OFFLINE" value="false"/> -<stringAttribute key="M2_PROFILES" value=""/> -<listAttribute key="M2_PROPERTIES"/> -<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/> -<booleanAttribute key="M2_SKIP_TESTS" value="false"/> -<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/> -<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/> -<stringAttribute key="bad_container_name" value="/vales-riegler/group"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dexec.mainClass="at.ac.tuwien.lsdc.SchedSimulator""/> -<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/lsdc}"/> -</launchConfiguration> diff --git a/src/main/java/at/ac/tuwien/lsdc/JobGenerator.java b/src/at/ac/tuwien/lsdc/JobGenerator.java similarity index 100% rename from src/main/java/at/ac/tuwien/lsdc/JobGenerator.java rename to src/at/ac/tuwien/lsdc/JobGenerator.java diff --git a/src/main/java/at/ac/tuwien/lsdc/SchedSimulator.java b/src/at/ac/tuwien/lsdc/SchedSimulator.java similarity index 80% rename from src/main/java/at/ac/tuwien/lsdc/SchedSimulator.java rename to src/at/ac/tuwien/lsdc/SchedSimulator.java index 5a6b86c..327b2e7 100644 --- a/src/main/java/at/ac/tuwien/lsdc/SchedSimulator.java +++ b/src/at/ac/tuwien/lsdc/SchedSimulator.java @@ -4,7 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Read config (.properties-file) and start Scheduler-Simulation. + * Read config (command line properties) and start Scheduler-Simulation. */ public class SchedSimulator { private static final Logger log = LoggerFactory.getLogger(SchedSimulator.class); diff --git a/src/main/java/at/ac/tuwien/lsdc/federation/Federation.java b/src/at/ac/tuwien/lsdc/federation/Federation.java similarity index 100% rename from src/main/java/at/ac/tuwien/lsdc/federation/Federation.java rename to src/at/ac/tuwien/lsdc/federation/Federation.java diff --git a/src/at/ac/tuwien/lsdc/sched/AbstractScheduler.java b/src/at/ac/tuwien/lsdc/sched/AbstractScheduler.java new file mode 100644 index 0000000..4ac1325 --- /dev/null +++ b/src/at/ac/tuwien/lsdc/sched/AbstractScheduler.java @@ -0,0 +1,73 @@ +package at.ac.tuwien.lsdc.sched; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import at.ac.tuwien.lsdc.types.Application; +import at.ac.tuwien.lsdc.types.SchedulerEvent; + +public abstract class AbstractScheduler { + + // should move to SchedulerType Class later on + + + // the following types are only needed for correct + // log output + protected String schedulerName; + protected String scenario; + protected int numInSourced; + protected int numOutSourced; + + // this map saves the following Type of Events: + // start of an Application, end of an Application + // (start outSourced, end outSourced, start inSourced, end inSourced) + protected Map<Long, LinkedList<SchedulerEvent>> eventMap; + + // Scheduler has an internal Time "Abstraction" + // at every point in time it checks for Events in his "EventList" + // and handles them (via the individual scheduling algorithm) + protected long currTime; + + // the timestamp at which the Scheduler is finished + // it is updated with every added "EndEvent" + protected long endTime; + + // Initialize Scheduler with Data from CSV + // CSV will be parsed and sent as List<Application> to Scheduler + public String initAndStart(List<Application> apps) { + for (Application a : apps) { + // read start timestamp + // save as Event in Map + } + startScheduling(); + return doEndLogging(); + } + + protected void startScheduling() { + while (true) { + LinkedList<SchedulerEvent> events = eventMap.get(currTime); + handleEvents(events); + doStateLogging(); + //advance Time to next Event + if (currTime == endTime) { + // reached last Event, Scheduler will shut down + break; + } + } + } + + // this method is where the Scheduling Algorithm resides + // it reads the Events (start & stop of applications) + protected abstract void handleEvents(LinkedList<SchedulerEvent> events); + + protected void doStateLogging() { + // at every timestamp (after handle Event) + } + + // this creates the total summary which should be written to a CSV at the + // end + protected String doEndLogging() { + return "CSV-String"; + } +} diff --git a/src/at/ac/tuwien/lsdc/sched/SchedulerA.java b/src/at/ac/tuwien/lsdc/sched/SchedulerA.java new file mode 100644 index 0000000..d6fae68 --- /dev/null +++ b/src/at/ac/tuwien/lsdc/sched/SchedulerA.java @@ -0,0 +1,16 @@ +package at.ac.tuwien.lsdc.sched; + +import java.util.LinkedList; + +import at.ac.tuwien.lsdc.types.SchedulerEvent; + + +public class SchedulerA extends AbstractScheduler { + + @Override + protected void handleEvents(LinkedList<SchedulerEvent> events) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/at/ac/tuwien/lsdc/sched/SchedulerB.java b/src/at/ac/tuwien/lsdc/sched/SchedulerB.java new file mode 100644 index 0000000..006f959 --- /dev/null +++ b/src/at/ac/tuwien/lsdc/sched/SchedulerB.java @@ -0,0 +1,16 @@ +package at.ac.tuwien.lsdc.sched; + +import java.util.LinkedList; + +import at.ac.tuwien.lsdc.types.SchedulerEvent; + + +public class SchedulerB extends AbstractScheduler { + + @Override + protected void handleEvents(LinkedList<SchedulerEvent> events) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/at/ac/tuwien/lsdc/sched/SchedulerC.java b/src/at/ac/tuwien/lsdc/sched/SchedulerC.java new file mode 100644 index 0000000..c106a38 --- /dev/null +++ b/src/at/ac/tuwien/lsdc/sched/SchedulerC.java @@ -0,0 +1,16 @@ +package at.ac.tuwien.lsdc.sched; + +import java.util.LinkedList; + +import at.ac.tuwien.lsdc.types.SchedulerEvent; + + +public class SchedulerC extends AbstractScheduler { + + @Override + protected void handleEvents(LinkedList<SchedulerEvent> events) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/at/ac/tuwien/lsdc/types/Application.java b/src/at/ac/tuwien/lsdc/types/Application.java new file mode 100644 index 0000000..cc09198 --- /dev/null +++ b/src/at/ac/tuwien/lsdc/types/Application.java @@ -0,0 +1,40 @@ +package at.ac.tuwien.lsdc.types; + +public class Application { + + private long timestamp; + private int size; + private int ram; + private int cpu; + private int duration; + + public Application(long timestamp, int size, int ram, int cpu, int duration) { + super(); + this.timestamp = timestamp; + this.size = size; + this.ram = ram; + this.cpu = cpu; + this.duration = duration; + } + + public long getTimestamp() { + return timestamp; + } + + public int getSize() { + return size; + } + + public int getRam() { + return ram; + } + + public int getCpu() { + return cpu; + } + + public int getDuration() { + return duration; + } + +} diff --git a/src/main/java/at/ac/tuwien/lsdc/types/PhysicalMachine.java b/src/at/ac/tuwien/lsdc/types/PhysicalMachine.java similarity index 100% rename from src/main/java/at/ac/tuwien/lsdc/types/PhysicalMachine.java rename to src/at/ac/tuwien/lsdc/types/PhysicalMachine.java diff --git a/src/at/ac/tuwien/lsdc/types/SchedulerEvent.java b/src/at/ac/tuwien/lsdc/types/SchedulerEvent.java new file mode 100644 index 0000000..eb471a1 --- /dev/null +++ b/src/at/ac/tuwien/lsdc/types/SchedulerEvent.java @@ -0,0 +1,32 @@ +package at.ac.tuwien.lsdc.types; + +public class SchedulerEvent { + + public enum EventType { + startApplication, endApplication + }; + + final private long timestamp; + final private EventType type; + final private Application app; + + public SchedulerEvent(long timestamp, EventType type, Application app) { + this.timestamp = timestamp; + this.type = type; + this.app = app; + } + + public long getTimestamp() { + return timestamp; + } + + public EventType getType() { + return type; + } + + public Application getApp() { + return app; + } + + +} \ No newline at end of file diff --git a/src/main/java/at/ac/tuwien/lsdc/types/VirtualMachine.java b/src/at/ac/tuwien/lsdc/types/VirtualMachine.java similarity index 100% rename from src/main/java/at/ac/tuwien/lsdc/types/VirtualMachine.java rename to src/at/ac/tuwien/lsdc/types/VirtualMachine.java diff --git a/src/main/java/at/ac/tuwien/lsdc/util/CSVHandler.java b/src/at/ac/tuwien/lsdc/util/CSVLogger.java similarity index 67% rename from src/main/java/at/ac/tuwien/lsdc/util/CSVHandler.java rename to src/at/ac/tuwien/lsdc/util/CSVLogger.java index 092345c..82f69ac 100644 --- a/src/main/java/at/ac/tuwien/lsdc/util/CSVHandler.java +++ b/src/at/ac/tuwien/lsdc/util/CSVLogger.java @@ -1,25 +1,19 @@ package at.ac.tuwien.lsdc.util; -import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.List; -import au.com.bytecode.opencsv.CSVReader; import au.com.bytecode.opencsv.CSVWriter; -public class CSVHandler { +public class CSVLogger { + private final String filename; - public CSVHandler(String filename) { + public CSVLogger(String filename) { this.filename = filename; } - public List readFile() throws IOException { - CSVReader reader = new CSVReader(new FileReader(filename)); - return reader.readAll(); - } - public void writeFile(List data) throws IOException { CSVWriter writer = new CSVWriter(new FileWriter(filename), '\t'); writer.writeAll(data); diff --git a/src/at/ac/tuwien/lsdc/util/CSVParser.java b/src/at/ac/tuwien/lsdc/util/CSVParser.java new file mode 100644 index 0000000..284d79d --- /dev/null +++ b/src/at/ac/tuwien/lsdc/util/CSVParser.java @@ -0,0 +1,22 @@ +package at.ac.tuwien.lsdc.util; + +import java.io.FileReader; +import java.io.IOException; +import java.util.List; + +import au.com.bytecode.opencsv.CSVReader; + +public class CSVParser { + private final String filename; + + public CSVParser(String filename) { + this.filename = filename; + } + + public List readFile() throws IOException { + CSVReader reader = new CSVReader(new FileReader(filename)); + return reader.readAll(); + } + + +} diff --git a/src/main/java/at/ac/tuwien/lsdc/sched/AbstractScheduler.java b/src/main/java/at/ac/tuwien/lsdc/sched/AbstractScheduler.java deleted file mode 100644 index fb14e25..0000000 --- a/src/main/java/at/ac/tuwien/lsdc/sched/AbstractScheduler.java +++ /dev/null @@ -1,5 +0,0 @@ -package at.ac.tuwien.lsdc.sched; - -public abstract class AbstractScheduler { - -} diff --git a/src/main/java/at/ac/tuwien/lsdc/sched/sched1/Scheduler1.java b/src/main/java/at/ac/tuwien/lsdc/sched/sched1/Scheduler1.java deleted file mode 100644 index 1ccfad4..0000000 --- a/src/main/java/at/ac/tuwien/lsdc/sched/sched1/Scheduler1.java +++ /dev/null @@ -1,7 +0,0 @@ -package at.ac.tuwien.lsdc.sched.sched1; - -import at.ac.tuwien.lsdc.sched.AbstractScheduler; - -public class Scheduler1 extends AbstractScheduler { - -} diff --git a/src/main/java/at/ac/tuwien/lsdc/sched/sched2/Scheduler2.java b/src/main/java/at/ac/tuwien/lsdc/sched/sched2/Scheduler2.java deleted file mode 100644 index 4d6ce00..0000000 --- a/src/main/java/at/ac/tuwien/lsdc/sched/sched2/Scheduler2.java +++ /dev/null @@ -1,7 +0,0 @@ -package at.ac.tuwien.lsdc.sched.sched2; - -import at.ac.tuwien.lsdc.sched.AbstractScheduler; - -public class Scheduler2 extends AbstractScheduler { - -} diff --git a/src/main/java/at/ac/tuwien/lsdc/sched/sched3/Scheduler3.java b/src/main/java/at/ac/tuwien/lsdc/sched/sched3/Scheduler3.java deleted file mode 100644 index dbd66e6..0000000 --- a/src/main/java/at/ac/tuwien/lsdc/sched/sched3/Scheduler3.java +++ /dev/null @@ -1,7 +0,0 @@ -package at.ac.tuwien.lsdc.sched.sched3; - -import at.ac.tuwien.lsdc.sched.AbstractScheduler; - -public class Scheduler3 extends AbstractScheduler { - -} diff --git a/src/main/java/at/ac/tuwien/lsdc/types/Application.java b/src/main/java/at/ac/tuwien/lsdc/types/Application.java deleted file mode 100644 index 3347dde..0000000 --- a/src/main/java/at/ac/tuwien/lsdc/types/Application.java +++ /dev/null @@ -1,5 +0,0 @@ -package at.ac.tuwien.lsdc.types; - -public class Application { - -} diff --git a/src/main/java/at/ac/tuwien/lsdc/types/Task.java b/src/main/java/at/ac/tuwien/lsdc/types/Task.java deleted file mode 100644 index 22ce550..0000000 --- a/src/main/java/at/ac/tuwien/lsdc/types/Task.java +++ /dev/null @@ -1,6 +0,0 @@ -package at.ac.tuwien.lsdc.types; - -// one line of a CSV-File. Convert to APP or try to outsource. -public class Task { - -} diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml deleted file mode 100644 index 4cb3709..0000000 --- a/src/main/resources/logback.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<configuration> - <appender name="STDOUT2" class="ch.qos.logback.core.ConsoleAppender"> - <layout class="ch.qos.logback.classic.PatternLayout"> - <pattern>%-4relative [%thread] %-5level %class - %msg%n</pattern> - </layout> - </appender> - - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> - <layout class="ch.qos.logback.classic.PatternLayout"> - <pattern>%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n</pattern> - </layout> - </appender> - - <logger name="at.ac.tuwien"> - <level value="debug" /> - </logger> - - <root> - <level value="warn" /> - <appender-ref ref="STDOUT" /> - </root> -</configuration> \ No newline at end of file diff --git a/src/test/java/dummy b/src/test/java/dummy deleted file mode 100644 index 2a51033..0000000 --- a/src/test/java/dummy +++ /dev/null @@ -1 +0,0 @@ -just a dummy such that git can maintain the directory structure needed by maven \ No newline at end of file diff --git a/src/test/resources/dummy b/src/test/resources/dummy deleted file mode 100644 index 2a51033..0000000 --- a/src/test/resources/dummy +++ /dev/null @@ -1 +0,0 @@ -just a dummy such that git can maintain the directory structure needed by maven \ No newline at end of file -- 2.43.0