From d3f3fdbb533949d8545f397445efbbc29fd409a7 Mon Sep 17 00:00:00 2001 From: Pyeroh Date: Tue, 16 Aug 2016 16:52:20 +1100 Subject: [PATCH 1/5] Multiple changes : Java 8 support - Kryo 4.0.0 - JsonBeans 0.7 - Listener, Client and Server discovers refactored into an interface - --- .classpath | 38 +- .project | 40 +- .settings/org.eclipse.core.resources.prefs | 4 + .settings/org.eclipse.jdt.core.prefs | 164 +-- .settings/org.eclipse.m2e.core.prefs | 4 + build/junit-4.6.jar | Bin 218226 -> 0 bytes lib/jsonbeans-0.5.jar | Bin 49943 -> 0 bytes lib/kryo-2.23.1-SNAPSHOT-all-debug.jar | Bin 323639 -> 0 bytes pom.xml | 147 +- src/com/esotericsoftware/kryonet/Client.java | 1069 +++++++-------- .../kryonet/ClientDiscoveryHandler.java | 43 +- .../esotericsoftware/kryonet/Listener.java | 378 +++--- src/com/esotericsoftware/kryonet/Server.java | 1203 +++++++++-------- .../kryonet/ServerDiscoveryHandler.java | 25 +- .../kryonet/util/TcpIdleSender.java | 94 +- .../kryonet/DiscoverHostTest.java | 354 +++-- .../kryonet/KryoNetBufferUnderflowTest.java | 177 ++- .../kryonet/KryoNetTestCase.java | 232 ++-- 18 files changed, 1996 insertions(+), 1976 deletions(-) create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs delete mode 100644 build/junit-4.6.jar delete mode 100644 lib/jsonbeans-0.5.jar delete mode 100644 lib/kryo-2.23.1-SNAPSHOT-all-debug.jar diff --git a/.classpath b/.classpath index 64fc17e6..578f9059 100644 --- a/.classpath +++ b/.classpath @@ -1,11 +1,27 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project index fdaa1ae5..8bc39c97 100644 --- a/.project +++ b/.project @@ -1,17 +1,23 @@ - - - kryonet - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - + + + kryonet + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..57bfcdab --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 +encoding/src=UTF-8 +encoding/test=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index cd9caeb1..a60a5624 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,77 +1,87 @@ -#Thu Jan 21 00:52:05 PST 2010 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.doc.comment.support=enabled -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=ignore -org.eclipse.jdt.core.compiler.problem.deprecation=ignore -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning -org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled -org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public -org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag -org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled -org.eclipse.jdt.core.compiler.problem.unusedImport=ignore -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +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.doc.comment.support=enabled +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=ignore +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled +org.eclipse.jdt.core.compiler.problem.unusedImport=ignore +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..14b697b7 --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/build/junit-4.6.jar b/build/junit-4.6.jar deleted file mode 100644 index 00770a4fd44fae60d3aa64ff9e2e4e8ea562d072..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218226 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≥M-(wSq9qZNBBhTHBjLpxE<#In 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

LW zHxGU$@ZFyY{J&Ay{zupP@1BMV|HgnPqW{mux}x=u717W7coG9aVa53{yWejhBZXP% z05R$zp8`SQcewP&O^M1W1>2Z794}1Q=}(SoZ#mlU3QrCL3Q+SZsaM_};QtQVOI}%kLX0^q{>8G#KNr1ODgzyG@*y+l!54V#jB7wMLC z;VM#mK+G{~gn%7RWc@Gw*;)oTXCx{4q+=R6zE#uUy_Oe}Ji#NC2WR>un`tHQJJKX< zyM*(JLFV3dc{+-_KHL786<;t?yF>xovb}!Pk~`B8RLjVA<8Q!BLt1JnDqRZCh~`D& z=PF)Sy`n>+>7*Rxkzdw9ziIHmT*72Zi@<-%VxY3k%#l*yZJ0qCC7-qiXikqbu9n#@o}+k6qpGUudDb z!9G$E`V=c^4RyH8yG{DN>6l`iux7iPVnNMJmK&?5lLdj}|G0D1+}I=hbJJEUxcN ztyPR=jtQWIC1=5f7JG1RzF>cCadTTZ*ne8VDGB^0S&B^$uC#N8y;q- z9MIZy%EJjINw1qTU3S>gNn2szU|ytno6s99Nd+PG;XDA`-pX)&H#zQ(w;N~Ec#PH- zM5d`g*U=*|c`w@(-3o|VA16%u5k_^mu%drl2_FB*th;zmmNSJz8=VhKRe$TCU|a7Pd;g+2WN*0BvG<<;_Z7R{jdy63_twS~KS^Ib3_E z7DBx_QQ%JMmL6x47pjSbmmj)msUoM%eg^8$AYZgPJEe!gw3o(791;tz@+7s*h9@pY zqF8UpkFX$YEVmq*%eh9wmXPh#? ztx8jJJNO)oQDs#;+0HrPKxX05A=HzxK9x zKEGE~9F?~kBE4gI@3cV!-fqAw(P4)&sOaFFZmT7jkz^V1JZ9K1pr5z@HDkrw6}I^b zeL$#CYtI}GW;D}Hc%B+3azH!J@_-SK3ccqXgAD|r*w!y^UFAvsMKaW!+$X0P_4rG> zYuNuJ)ZqOYCy51V(eunG6Y~wx+BeS{^Ch4I<^bQsKA(Q|l`f2_ zDL21`FNH)V@j1+996o*&Ocxn_Y9Hq$oHoJnH!zpT&t{Bi&C4jr%Mh&cG!Kr~PZO;q z3xG!ifxO0QBa2A5&DL|5l!2?rK2xXt7i1w?p~>H?8T74ukwYOmqK_uo-G!S3lzySX z(_DE{{8JvDQBtiZX1QryPsjIvG0N!zDZX*~DPaviDB}O07wI41;g3A~$1)p^dsAd_ zL}_v5Lz{dp5)JuY_`aA7OgVq$y~{e)MRJQT;axWX^{yZGu5f6*X^w{_Zhf86aVBT_ z=;ihUv=97wk*>}}ALJ56rB2^qaVRC+I%K_!bZ~%Pu>1s6yOmdt!J#-pD6j1l1h7~L zuEUk!;w`&lmQz6s?p#4(6M0bI-a@5(TuYvRm%Ll%T zzhF#F%pi1Ytr~R~_jE`>N+sM)b`mCuO8II_AXTEia81L}OYiIBD}_A1$41v0&D^|6 z6`WKVYxVV!UC@Z+nC98n__Dc{7LZUeD=yqM9XEoNv>Wi+ZcxkN%w2c=Nf}Ti{m}3U zawbX8mqyEZLlmk!eG|H3UBlcg!UpnQ0wD$1rzj`! z!8!aeZ}9`{)g37my@B2Y>?fM_4v90~IdfvsObKdHoT+tEmHfO16j^D)jUu1_ik$s5 zZ1q+7DJSYb6p8Q@#%a1hoKFJVPHpu`N`)FtLW{W6d^J^WeM4BQKGa?CV>*ki`4-?kT?;YN}XV051 zbQ3?TBgU5<*IV|}oIl;Wj-mhRh7lYhw zsu>?g_dd9&IB_TZ>6{gZ__z~yVN+ZchxE7iH1 zvtjv%3tW|liX0J z23lFZJCU{Ta?!QtY{ZhKl0SK(g-E+Ytwrf`_9COL-fLl~UTRVD@$8j^$Ac(R5@@^g z_A-L=e6h%~W@T4gW;iUEge8n?Zj#^plu2eQatw3W(rbV%$cu8j=+V$DI8q!g1@tLS zSd=SgWy5jlb%ipAJ4K1`B_;HAlM$f?&tX;OZ5}laGaSc~$(Y(I24om3bu^+|E(j`9 z^n^7!UG^ez9>dfu!5Yk1)!CSR#v1JbeKa^C+O;6FGiGZGb$N>}RX0a=y~vmJAA~8t zu%Of9br?-18#&L#q1Nr8ol*ZVT_5k1p|@0<$jhH9b6pu6J2!|bVayD7#euA?M5uZU z;ItHoUzm3?CpjATW}{tRhD532yI*wie7LwsKR9fqw)5+of@`2lUFwg zMVw$l!LF^sMJFv7wa0tjh{~vW^I&>F zOQIGP8RDuz#6U%iU_ow>5Ow5v!#)$Gh4ZNGyhAa&aWqP%(Vyjt{?4WeqYZu&%4!q_ zkh5NLG!mr5PG?jSL}#SQ|5oA;M2~46Xe-7Ua`&xa#!&YZm6mrl$X(23TyZu$BTnl< z!*?af^I;$InmIx>E*hAAYz!`jTW#Bc9;|KOq!d1M=RQa$k&B)Gu#) zmSY5l*=J!15?Wx+9s094KYe8bn@PgI#1&+fhkn?NLs}~%6C0ALD^)8!LFkGvL9w7e zaWzhX&D8{iOEai}uW@3`OFAy@%EokVZw~}I?5zs*drLFbq6Au2iLId~kZre=1ak2w z8eF8>k<;<;lj5KZt7lo{teZt)6;8uywVVJV|{0+)RSFz$j4j{ zK_l;r3IYJyR35GDJ}a0Mjw`YNyx6mGEHCXE;%2`zIhkyfLTMjkNspPMt%2Seyz?H1 zFPh^#yhKEMtCKIf<6Jo(V_Tq?OUu;Qx!XN^7UvlhfHsdT_<){juPlyN7UF$qYAq9m zY`vx6Xw8ufx+*Qm7Rv)~*j{A}ZFJx!Yc%8>{JjogdSVmieLX(98XRQP`7S>N*U0(P zrLxorQ1o(s%y;!qXA?SR*rteu^aV!*(YO$6f)R<-gKphBGu*K+Dn)2wR~ zSU!;;I%1*ExjW8l5JOH3s^)O2D+IkITv@>hmk;0;1s%&zG;LO z6l%*Q%PA4UJq=7oVpLi}LrRH<2#KqS-bb zX7x0x03@>}cUM?=3W0d}N0Z5C_G%D$Wtb=;eS(iBN~Ti@w@hu$-b7*+uS|KV+l6c+ z9aiZPy-w$>+%sFDn~MIz1f&IFtyB2M;IaX7W$3%*cqNkzHH}QvVD#=JrMD11OJLBH zkP^?sW?yt~;(Vk|vevNT+5+jS{a>P%k~yxA5e|RhqmwCOwdCm^RM{6cotgu@LGugd zN2U2jc!m1|_4CyWeo-uJfB%cRs7^@9T>|viFKgKU-h<w%7Bfn_9cU9jWKRiubQnghMBi(aOUp#$Yo~C?v-2c${0lvCIg~rX-!wEt& zK)caesneXlibZ*tk|oMBI9>cOfswUkg(#e-iM=Y z+>7u3RYJ-|$(bFSHpRSW_tHs0b@sv!!G1M>(j7=Ge3d}bUA}KdbHPU(UN!y>+45zK zuob?y_U|RUb2WU`>3jT3=7aZ(+=q;n*P_pPE9_tt;FBmK_rgtlbQ0t7jegd#J1c}5 zF?GtAG5zJ*%3)yUO%Ma46o_d9G%g!RC@P`2+U_ZGc+|2 z(sFD3tt7Dlz+q?UIgI<=;I|De>)wSzf0+Nr(0t=bqsjzqv|PUxrCHX4^sWr@(>2we z;1u{Or_FTcTa~Yh`vBbIqs@%jEy+>$pEa>m>RHu#J(ba#qAKED7i^1LGP7JK(XJ^n z`<_%;dL0a=_q7&&llW+aR+KfONMY3t50*I4c5d4KD#I}Ez(;UIm6qPxsLu_dlJqmizz28Re=i*3=J0aJba7OfVjotKNvY>MC=Q_zZDTuu*h+g z;c~Z*wgBlXehrmub)`1QtSPWoBPX}Z2F0DUH6N*ygG8`j7~Ob#&S%s+vNWnCltDBU zH4iZw?UBhaFc#xQyXCkmQw;Wf+!gr~y76*WEin-Oi7N0n=Ne6y7r<>i(N0H{CQdR^ zADxBz#Oj^9mjvt`m=36T*uZmHkQRfLcp@I4LD=-M-b3*jBq(1(axt@ND~~7J@HO3gc?}E^JdhwDZa{1YX3do*MVT_DtWV0F z+$bMno^%A2rcKms!b(Wq;5Yi5@5{Zbh*^c|icy97M7OQ;zfo=hu{kV>K?X#vnc$ZhM{5gY2DCNMjxGTLCOWASl2LB*@73G>>4j8BH9>Y% zB9!*TRu$~*YW8ycd%=%)p+5m>>yTLBs5)7wzevA^WvC#d4oOm^W{n7_-8J8Fybc=5 zBzCwNUBmO|>pu8(fKcQ|9tI0q7lz*&EdO|wGoWWq&}Y%He`FLFun zBDeZa3wC2+bYx>{YCY6akO#FsD_tO?OE+~`1-T%HIH`ME;pMk`D??Rqj0+1c!GPk9 z@~s2b>En&C8lLwBq-QqOh%sR`H>aedbX4@`L6&Yeaobip*;XoS?^6>$MM+X!OcxVR z>feD>2D>0qRM}lDlv^ewE1OH*n}@yI*qP8LKDQ0`AlJze8EXaG?`rug!1kdle`DYj zq&1>^2V%L8K{gkJnQFOX5iT~GjsQ5DLKxE)u^S)#$$ZR@>@W1veOthq&^HDK^A;bc zeY`VT<9(>gd{f8?Mi!!_MKUwz8PJ&pQmg^ww>)QE=%o%+US`abRh<=ElNGA9k3_Ix zR$M=KA6K;%w{nwn5(d)^b(6IuQC+?8vjSO$7{H_A+plC;3S*HzB#K2k|HUE{f6`EB z!ypu!;}9x>NdXw@4j_(+d(!xvAeCoSB}lreWo}&5;Eixy$tIZ6Pmp zd4$@klp+mD^k?R{p*$>qg)9UAkSJ zblzcC4ZOT=U)~Np2?4KGyQ)Z7JEtiFu-E}M?oOYujhUdEL~5BZ_l_-ePGh)dHs9-# zT>GZ2JnM;UhB|HlXQ_&NN1S7rL{INwUCdW=$G{q-h+ECeBp$evJ6;>;E8RWfcj1kn zo&(S@oI`I!SuAKQ7ghKpFNcaFZ*fm|=D|zloGg(CH(_w2^m-`F0Dk|A>RQSy&)W89 zaRdKTo2mY1Y2bfJrTPbMqO7fosf@Ip3MIvWU0j^>>j`kF)&O6c{Cs88ug^DN zpYf;O9u^HI+90X<)LEMW-(V>S&)_M@50O6RlB0(%j$eFxs&YHkoT}`J63~2W?!Gx- zcj<>#H{PedwNPJWD6D6;W1nruug9di)114evgm@jVz3AkpzxLN*K%ep?!Vt~IMHn8 ztN70B*(g3KwqCh89olkR<~Ujw%qfExN9pM^xDk!E?yx2IUbEfwIp$o9tF}A_ZY&(a zxuYVkXD3^Xz_ysGt#{=Xkqe_!jP8xirK^Uw)AnSjjT01e3c_InX;dLI*gQB^D%m2N z^B@l~8^QpV>TTN_n#RYIk9FKqV7>f5O!9|2XS}Kl zX?Xy1b3v9_rYAkx5$^dKf_ya)L)37fZOQzI-D=P1kfFJtT7R2aR$y}Qd(H1ki;6Ba zcOy2y&O%WJ7{5}5^}c$*=pNhLC9vA|rh$uu(iHTQsx`< zZU!);Rx2{nnYRVIQpS4pC8tHyjUaUkhdCa7!87?<#MXAxnTlHmV>n|df{a{r=OC`94f8jd3xR2N{7RV+H_@BVgqPV>AmDk$J2BbC z%NZ0T_G11j3wV~KgYg4?==8SX&1JXWa~@Wu%4pIpD?KbS)rLGAFG_b>&)x)>x9w~7a@K4wKSo21(0OD*0ZQTqYNu6^6a#0T3QbFEcjbtMSG@+C+!YN(V*YAEi&FUFEw!tQ&l z^k_k}U=*2Vy_l}yT9h50p}Wa~ywP)%na}X}3EHu$=@z1dt~Z3K60?s9q>10?w|G(~jO;_a7(wR0m+`%U#aS< zGdb7TxNk6eI|`)z0{#y0<@=l|zqq(@LbStCaGv4$@cMYZ*3Pc&{k|gc(|(o3dg+hS zr<^Hg!#(9JHP8tz9*7YPCKrOdwEI27akL*H%0E2JmT_l*h22JkL<1R2Y4G%iO=o~s z=~H2^r|JM1-%FW{X5^l-i%LZm_zv0s&hq{>+KsB>wK`&#+$;-y{QRve0NU{MG17yi zRI?GCe4`eRMSn)4L(>il7*jPDmL#-nfz3>#gmdUm4u;=OBE$gUGm~v=RC)@%PFgNQ zmbf>CsQ6`C_Oc_X^C*(1E}F}!)O&;Bl#2=DDTL5WT8brGO3ox3@FYW)m&w9dCow4D zDfcO7ML!K~(y!a{dx4a5cBfb722Ib89v#4|Q^q4xU6O#DmO+8Yelhfk zj14v;gKM-8@T6D#h9fRe0wZncIr-mOt>Mka>oqqRi~jT1&J8M;!dfph87;+oUlEwb z?j~$%5s)D{*?*$Q&bqosr`m4Vwjo$@wH3)t)sz%s$js>4$vnH3{H`HF1kf@wT{e%w|d23|WH4L_*vvJ2mP!d>p&1t1JK&@As zPcK`?7a?%oc(?bL+tPE>7E7;Dp;tO;PoH6`XPVovP@W7?XFs&q9bR5mp|tgQy+o@# zNDoR35{T9V4$)F7@jCXLU=fv=HqU^ruZ)=QNta=hwx z^x&8=t9Th!!g?+`(kKaAl3lX}QlR^MsH5X5%qW$FdU1M^m{Ek}|4{hU9>79$+&WEX z_F_zP^E2}TTPwFp7&a8DTx_ejdurvP9(GF@4>(I%s<5%>qh?jnTSVw@U`6d@3nZ6@ zLamTcl4Jx7g$EpG{238vv~_q+ai=(SMDO%6?F|9F6NP>;#O$9W)J>bO!}L^JXjsau zC{|ZYnf$E@(JPbBEM*WI!E5dYU0dlUIGFj`7}C2({a~)F!t{ykyLjjNDL5z}W$uP4 ziGec;kG#tC^PsRdsCX9b=c*~xox4P#h>bE!;a48$V(bilV0=ZRGG+BUr@YzpI5laA z_&Qu*^|LonP8ipzOT9Ss5ddpWmL5I}!E=&g-LXy8t_Z6P!%3?!N~DjA918HyDz8pl5`MK69F97NW{)_9=aRao zr!_izG?z0SH0T`TUX(9)Eb{4#S|8u?`?;fR55KtFV9Y^BUxL;JUgpX4y7>T|!Lm76r?(J`Q^rNe-~1|UrD zBe@zLtU8u&ID@}3{QIH@2e>vn1$Acx2l~o8{CfxUfKlQx_dq^J#O#v3rZt`!+byPa zFhMx-w;_tX90N%NC0akeiJaXjkA*vHr~Bd}2bNj1!sO(K;pZXK^W{sx?9Pl5CJV~E z541G-c$muxVONyhnMfRLZNUeH+7|lj(zscrIu%hUAPR3kuMf0WGHqc_;Wxu}W!Sq8faJj(+dc=_I!<(w6*u8uE6S zx0?&u@zN=(*xC@WcH2SL0Gf4v9Y1%AlH;c;X;jO`fS2ql zCNpA*CARyF@Md_~eVr_bPq@SqBX7uAE*=-UKvHvRnZJlh!2l*68r%LW<$RTy|A(=6 zjIwOovPLuPhz#4dZQHhO+qP|I*fuh3+qRt%FHYT4@2h)Wz543M-mUGnf33F09O$!; z-b;0cWbYrKbB=V}x|VaPGSGnYX=jv#md{Qdnhn~`x_M0x&4F_I8hEZ8xqNjPw0BHe z5#QkbJ1}luA$!FZTj$94ui^w+@fr$h^dU`!vdj>km9!ioD>l(KqFS!yoeG33Yn6j zKuz9M)k2&VRIH!6y1DR);_K&A$LL%VUC7AcQ_lEFHhg?RGb(^!%-}e6<>{XDobl&9 zcl+~)9lQuapqjKExaD1Iz5#bQ%(qOv3GUuX(l9l0E=k!&LbGea3v_NpYvv$}1jSX^ zN<7Z9vR6J|)dtE{cT=fey;~md>^<{l<&m{~S$KWsv$G^*LUMxLMpMQW8{|<$iuNS# zg7m;7W(lR0V$I=YyE)|gDC^}3vM!5R!#5*;6Z^wTFC81Cj@eR{42=wbz86Y{ws8Qg5C#BiD0+cK^kq!WUJjeMCViSd#%Z zSlN|(mO8>|zENwFnM$!wFHCL^QQbNA5?Lemr{14acuBmcrQDR?@z< z2}NI13#&hDDB5-QD$_?J#1Nq$Drh3k2ISF_Wf?jq9n zn(}2*MN;ljrKfrx+V3Rj$gpXnL<2?2CDHa&wqo==uG1&kerYW=pCLK?6ziHv1oFor zN`TUxe6v}7SK7kbw)^lm{+YG4EG>MXZ;-#DTxG#75|-!{IhgT4Gi=*FHd>o`gXwF{ zK5*k6s;7@a(v;IAL8qfCr`32NEYt!`|N4g!^c^AM?j-(G4%=`iq8!`$J{RfBliwZL zwf_aJTzy+=m=UTD!CS*I-KZltea`p4Cmi8OTRU)RPn$O+B|olDvCNUKPpJ`vU$`de zyfV(WIO(#y{YU5wU>-UHFy7(oPGqIaTTLCN0++q+f8@-Er~f#kuQC=>fCk71cl7ijHSo8m%7tlOGCHQ=vkgW5+rM+5-qFt0U(){g6C&l{~O}6gSS42-cp_UaFZPaZS$>T*pl2@IGBJiF0rv#TcDq;pC@k*v>MlMNS3T^yS@Q|jh^<+ zz3XSp9#LxmJmokVm@((1Ww;r_-d*N;m0Cp`f(0eLIN0{pPPhaWY_p5v3N1vbfIeNf z(WWyRpMy`fbCq<%TuPD7&|0lhcUinEdW%Uu%_H{?X#=iy0^DU!!6v<#)CO#vB(7N6 z_~{cz_F6Q5s$7yorPFfuXe_ywFG?-~b%=dVI^IZay1rrNapjoY{#*Gc*?^oZSV&Um zNSrPD0N>gX1$_gc>fzP8_0Olh+0JDF&bVnS_VTMtT`4K81>0Aj zR!qxd$gVjj?((^&D!zq|m2x(b50e!nYeUH(`Yl!&tIOX+tE#Q3wqyMrqtnGYXy^omaM(VH$i5 zl8iq|i!0(Nkq{A8Q+)VB8D8>3M0AG=N9aEI`3!^{!J42o=IU5WK&vVJre!SkuRThadWNKR1MSr0Dt>UAuSZ6Rhjh5z+vgh6)V zDnZ#kyL1B-`IDGN0eiqGy_a}zTE5r#O_tmwTS7&Sh}Xl6tOV(v7BS#%4EKOx<*-1M zXMdp>N`7lsMGA~PR$NMWWS-9OAo!Q!57iM!XSmfrVTccyp5y`t)Z1wBIQ;{5GMB^T z2r;vWrcZQP^Y8X0;HK@QQ^_NaSGxa>7wi-HX>@*5+=Rc+I`9AHoJ%`fIhos88UH1= z=}F{EE&XL{^EZf~Fm8iLkHkIIkWM6>Dd2`ehM9mzZxF8Ftf&FORBIl-(%x58 zttESKd-FmW$0tVh@`DG`{-}>qnI($J(YxAvn*BMZ=j-JSrdMzSMsC0bN_oR#&jryH zm<8dmkxB6o0ec-)76&S<6mav;3W<&eZ!(FpGg9nNvu++c8W#x4LdI8-kg{cxD5pJA zz$!xSmbp?Hhz-rPE$Z5M7aW}2_LnLydW-tu@}cVHwQC3~m{f96MgKLQj|i_WG0jIV zZeIB-HcI3Z(c7pg;y;L~qZz!5OswGstZ>r`2%&2phm}nEl2yjJyX+9sFI3Drv{4*M zYcscf9qAfwQ+SR=V>n=65}mpq3Fx$%+KW0%{GQcbWdc*5c24#Vg;1l5_mDAr3zG}^ zQ&Cnm7W@1vTYVfZ9N;r3ZV%gtyScCXhc#BtY#9cjEoDO;@_o(=vp;IYVwPs6ox(ZU zukMf==M6XXj))C|>Ct@s(YC*$#zYG!SYEYF4`AKb&FZ>knaE@ep;GTU&~_ZAcy`(c z)QsAD9;@w~k(VW!;>b7^aeW021%2=kEe=L?XyoD+B>iPp6MCb)od2m`k8V@|5%C=u zv)|lD_Ww;_C>WdkhZC%ev7o+{)nA_Pe}{zpzbxM7ZCvd&H6uoTQ+C=z$b{WO>_g24 z8394CbjqHqm8hGHI%&SBzXU+Q-CV^oV)ycfb-qwO~HS23yN!OC`SI{#%eH6oz$pyX4Kb^A$# zmRxE=c0)s{r3))UlrWUCrk*UxTCdWP&qb(D6Z^QV^(?`-^iDDD{fMK9Kv>&amkzU_ zHmbGS&2 zZLEt?X4Z3-BbPhmtNf=A?U?8TQBz*EwRh-?NMS${18g7Y89(TcM?(vL5)Gl(JwgxU zv$rK?3f0vo=7NqNG2k^azcLzo6EKd%*I|<+Cw}A4!M?l&dEqZO?33M@mNG}*_+kuc zzWoC!WJCw0)c!v8U7$aHaQ@FP*wIPf$=KT1=G%lw*v;Ppuvm2Oz(6X{COk}FnUb&c3fr?jV9H9)B$**+&!gt9f-kkZ9^XIDgnsvKm4?u$A@mWtiw^Q-sZ3f+x0pW5_8^QH5gdE1 zKZkK8Qj%^hu$K2)s~<2iOq_{sOGDb&j+~3^6bE!MY#=T?G~zA&d&BF`7ojSshan+# z#_fxaQ8BI}8le_@p^XGN`l5Po=G&S|DnT5C^>p1Az4TG6=F3n`tmmJTdn^{Q8O_`k z@H#eiv(6f*cNOcJMN3S{z30)Oa@2Wt-)5*t<8lnwxYc@~PEa{2kC!a!(bcL4A`E3#np-a(4KFma zR3~Yc`ls#QY#NZ3TfOwxs6!xy7{~IMi>@;t<1SUym~W^`rwl-_3ptMrt25Tk))WpA zWPu-W#G6HH+Nov6GlLnC1Ec zdS9L-Y#XUOg*^Zh;j(RX=j$U=WnHa>fu8NQdx4bH4avJUAm?bMd&EGAfg;D&RQYT4 zl+OkI!>N~@w^MT*Cf#$+AIY8yb;K*^nqT&0r6YRlzPdd94^+gV#w((Zn-+|J!UDD# zf#x7wQ`b!nQl-cWoB`Bt-si02Z*0Jb!sj$Foh4x=jpajp5b&I7I4M{Re|`v4Pu*blWzmeB|H=FfPf`S!iDOR$TN zJC2bV6STm_XTJG~(R=~Sx-tpJ!wwi~J=<+Y>Jzn+Kmfk=(_sxm;B90RWr4evf}{1B zUq$B#1Gq}C31Wu&H2Bd@RQ~*oL2Hz!1)?EZb(p;Yk760$b4rDp0*A`&Y648%U6omhI>J z>8%M_+yv?4cM^@MvOm-?6zQ+{EyCd4hn$jBwc32L%`lthHq*g7#zvio3Tx8PaqqI# zneMH-eU1Br#_pm|WIz}~8Y~o613LM=n!ZloEQqo0Cl`W8KbRsSZ-hJ%ZMa==qeKn5 zMs{>mB7UGZ;}g36I|Fcp0Qtaz+cy6GoOSt?2d01gYT9k1D~L(GbFLrcUe>;>k3Bl7kLt;lD|Y( z3f7^vdIRQF)uus)3mro(_^C4EBB?d_97jW9t@FZM#FDl6VVuVfGdg?u*xmdeUny0| zaV&$QdWb5GT+G*hhdo3F_}=_OszEyYVNC4%)f|4qJpcQo`q%4`wNWy+Hnw$k`p@;Z z>_lx_1b(EDZSs*6XY;ydwT1FVv)37#6_$*~Q<(g4h&3qi@GY2i2xxVaNuPyJLR)5e zOQu;*-=y0KiAd-Px5Ck$-4BV1qd+Uq>PnoiI z0_}d53A{ve>yNV;@7~itNYuQy_|TO^l2~@(Iuz=b6>@S|8(ia7^Sc+`!s+rh?Isnshq+2x>uLhmZyFY}iU$wXX1Um^`)jtxdUtdVrkhB;ahRGawh0)aPNn+};(`)EH_j_o>YP)d zrh=5trykBQ9=bYO@xTnEpQ%n{2~fW(L62T0oiLZZe|p~qE43%-12)>#a0NMF;oe(e z&J#pIJ&JL56aVwiKj!)Z+P=xj@8AUZ_N@57v~~Z;AOCNF{@vE8c&Z{9WBF_u>!s)m z3Bga!5X(OW&>Ub#F$4uI6>BWa)Q7Cd$wJ$C)N{J6iy^#wrdi@iMgEs7Dd8`9}rsSn7iEM;N#y9!pyP=traS`?t= zu!;<~0sAjR@*dZyD;&>!3Xjcc)xq#r~>b7NoN1FhK8ru$QIX)ENe8Ad+|4F8yln-}ivCV9MYM zk_4du0*hj`Od+xeGM>wbf~C+7m1EB43bUQkb1p=zRS)DZDSgt6snKo8hG`NI@~vuU zyfRg(=^B4UVS|;4!ICATQ4xYDuaieiy*Uf6(xk0027SuYV+4be60J;#8{C}8%Do)r zm3#BbadnVkUKP}QJjZ8ZIXcQb9#tgPP>G@TS#FK+bs?jXqpOjccxob&^(d9KreRt@ z!?(+_4M`Bn|71aTAAMnDgNbcT zNbetEd+K?x5e$zewr7v?11X2>5fRw0I@R5ZE7C?4ll0 za+rXEBZcl)|59C)C!@`BY>>*&k^`}1#UxquNGC4m zlC1Kz7(*}={PC>S>Mv9skWFa#GPOndfsAi@W2kj3V$nWD^}>N$yP1>_8NE8g&TShMf03jVMpdY?bAGm7?>-O5HadMsgP~KcZ$@`@Edq0F&p_sA?)ImCF)v*Z zbWm{5R}!omW|9;ky)`SDYd(CG^W#=CU-vm*tpv7InQW!(DQpO+vWO?lN~6j5@_Ei{ z+A2NVgY2Sh^CNuNncgl@v!cibbC$x9zHgdnA z_j@B*yQ7xs0dP;d43%uLb@s)8=|vBZzU+-J5T8qWd`4z<>U-rcfOj02iGCJ$=X>~F zRWYk1NgK@?pLm^eol1Yby+3#TAzO<<&>M}8WH%qK31Ac28hH3)@rNtA$#W(_lWp+j z8Fxri2upTrD!I8~A~~@X#`9y2*q-#j`<_^4p#HZ_l3vfKw5VE$MBy+PmrU!~;I$_A zY_pTL8#(zn$AHIWzc}fAr8VPA4S8DrN}NRJ_#3r;MrShkaK$>;>X8VCuhYqTwG?_z zbi9Odusj#Lp)7Sv0d11>KC49@+@QK*K6a)^UkpYT3Q&$wkp7KDb&=hED>ZD@0tJj+ z><4vrdh<$Bb-gn0m-uZZv2s?k<1|TF$5MCiJ4OwA(prfc|b) z!z%Ne8C&%tR5wf$vEx|u{(w-a171Qb^t5H7Z1a1nY8ID3vX3F3t`j6OYuZM^>OsbA z=aJY{VvAt6XuH}Mpo*_sMA=)RqFe4=FTp6JSArwaF}ZZSQ8-F1S5Uqb{74l@yJ=gK zn9#SNaf%pchAPtK)z~AV0h|A^ciy`_bD! zbeOj@;m$0-ODf*?wch{5Mc}`bR0U@nev@x=RmXpo(_$5AIZb7xPaA|g0k;qoaOB^( zR>^Tc;2SA;0~-DEAgW*j)XI7KfpEM#>1b&i^>^zTu~BU}_D5RnhT9nxKsm!KIR~6J z+8in@pR2aLU*mIsDWS4IZ#YhI_iT63@^Zg@g8k4I1G5L^UNjS`A@WXmpmgI5qj*@* z`w=*|gFOnfxC2Nd!BD9u)MxgSVoRBhBzZrflXUbwfe48x(5yEoKoXJ$N{L$PgcaMr zAv~%JO?OH?1hK_2rFebyMZ!dfb)Q_+@d0_$;SD$`SbS1v!CW_0ZE2~owM;$oR?>0Y zqdgBt!_G}%M~Oe%5t=cFu3kYsn*oJ-a&)zwZyVnEYg+`jsR{Xy$WV9ALU!?l*Y*$Y z*LN5USnw#}@5_@}sTk5N7UG?b5ktTxh=Dm$2TI3w?y|}Bb}FXCr3vy$mV<7x2X;x& ziVKdPTeWI!#p#D!^~KQjx0LJ^GiW5&4I4i1O$MbOGIfQ~p+JYKl701G`D3K!W``lb z56qJjvt53y1Rw!gFMgK?3E6GsAwcG_4Y(PJb=p|bD=s1~ zrH^Xb$p~?I;4vFg=M^#Wb#7E?V+R+FJQgFL!DE-#NukP}VX(-uh2p}DIf}Q?Imo}h zD5v7AE#1+j`oJiv#r9pq71ES$@*~KlD$IV1PFw{Y-tk~v)y-=Z`5=lJ?*;F~d+atxK1#ae`nYN}j?Qn|_CeFmu^o4u;8)U|~k4}cL{pJhmY zp#647SdDKUbFAj1IlM`2wAz&>xLPR)nL8b@oircN7}qjQt}r37tUNWz;f}y+>C^z& zO8#(fa-SmC>I;+-psy#StbjFqsUPy#m5EAhXJy4guQ{pbad@~i&lG^dy<_y+>-v?5 zMx;s#e^MPp2%JND-3RpnAyXZEE}7&twK&{_-wp#GZQX}xy&b^1RtK`Jy}YeHC*p%+ zCOA%aKuS2M_88?DGiSETr87k7H{Qh1ZPx})=&4m5-R5Qv=#mF6)Dw7&1E|%>`3ps?`5KSxhS|W#0@x>rW0t>ax+Ajm3ZJPf zT&{+8>0rH&9Ik{F_p39UHgQhP<|{R`Zmaz6RmV56=Okaz0R**6BGF+%9B&DUjD6L% ze9ch3^pJjA+rfFTw*~z7N#m9vT$AVXEFI#yh}$>oh<*glo*EPPC{R9<%VyWbzNZhR zgzmh$!_CiojP)kEgEq=`)7p^{5KA=78cuO-(jUeF9F?tEKZZ*DlVLcCfQITZTlME1mrn()7#)542LFRN8gwq)Qx>CV(MZmnKLS`>n+{VxtH;=pA|; zSAE?8Eq;fb4a}sM)}_1W5~!Y*PvCzqc4cZh>@(jJ>-D!vCd>c2*nMZOfB7u^oxZY_ zzDu3_&rccG(`Mr~WFh$qJTmJxD!gCd1pz;$AxQ-2W=pNvt>LU(M|B`OPp-c`?4$_L zq?mZ#DL;tME}9QjqIL$@8BI;5CRn$#HgS8py@2Q(1IiIeKDU{tKbRItOwDq z-qu?KAV8iC!gjiG|M2w{1%yJwyb^a`GCY`2b>vlfme?_`GfLZVYK&^^hcsWD(a_q@ zXB)`fQMPOEAmL6|o*Qd3IyK~VO;q1!UB?`lx^LCD4a{iVdREglM%j7UI;kT`Z9ZCk zJ4lal|5?6+YS!7)OzEl{*(_*cVHQm9pAP^uMavJvaL~0S275m7&Gc=jV`r9 zb|@=w%BHNXRwg@s7EVXXd9V<}>ny><&M}IKZ~v_3GZD+?WEB*9pm)LodJb@#(;g?$ zwesN{X4TeDj{*GZv~qWep#|?bO(9$g`Lj;JFNoWRLzI?NJ2dxK7NX$0{A6;0wY9RzhL?kvP|q&}VK~Bc zj?7-Su4Ek*c~=Tu=IBe9c-;=~J4FGngnL;wphznSYVBSvj)Bne))X94skUir^ITUH!mt=C2pg_ zbXEGUQnBy@p*O@LASOB^P}rX)FMhz}kOQtlC}5+MlDhDlq8E?D+q|b}Yohx$akUkY zsKE66Ga=v`Z00;WHWE2_^>22W1cpjaux~(eh>Ii%jYjoFX2pSCK>t*xQ5E%U|M}ev z%6^M*lKk5lvDSAoH2W^%wEv+XEB*Jcf0gvA6kkOIezf5p$`OFw*hVHn$tooJuKMkW zr1*>w=I8^deO)jcJJ=0o*HFgppsnaX%8HC#emY9?4a58!_IY%D6IYj8_g+u$7xx$a z*Sx$w0IjiIWHkEB5zIwG4Kx{zW;vp_fSB@~LL&VYWc@2iwZ!_F_(=-PixP~$2vA_q zeNjGx=ppsxL)$8p?luQWUg;(x^&b4>xMU#|LsLdG6lEj>Rw}F!clODA4#IVi#5QSn zS6~=d?1jvrWkqS6C^d9Mh^vN&Lh<7fDoNXivF?2unziu6#R_z-=A$vWcKgOUyBWkt zjc)W&ZN}L?)sj#L4i6mlH7Lx#%Q2V|r4Lm!;ZK3l-)eF!>PZemew2=INb80i2K5{? z$3t_(voSWi_>PPFvPV9xL3c{yWp{dn(_I)vF?6P}T@aY+lPWl1J>C|!vo|(0ER)0y z;3yI#j$Ju0985t#;MfN0rQP|?i;b7M%zj*V3cWzE%2=9`UtM2|ah#Pac%U$;%`i*K zGdpfGC{>-X?>3D-v4^ECcAm1uG``Un(Mm}+VL*EKb=oAOHFM^ytUVT6AZ3>%eQg?| zcO|GY!`salE0yK$8q{!l?H-=BLEA6Zr$$|!D;M^*D7|aAXg7=th(psui@9MBkX46~ z;0!RC2r-iClZI#y5_g8{qcaRBs2Tusj?;N>c~8?_Y$Amu%Sc|Pp?7JKa4Ih|G&$5$ z8nh?Qmnh_Qg0^iEbE+?u_W>k!hPyP``Jsp9%HM|jg?AOX#ECFGM!kI=u-4W*%!J}w z2tFPB2q}wRgtkK`Z002Ps|>mq8F=MxXtIp8{T=#HR28`frA{*_ys+G%6B&$Hr( zis`CPN`KfVvnK-NiKr_S|DqSDb3u*jk}_m-L1n{Q>uPn81=qYCsqLVD9Dk#CTsPB8 zVvdO7&5D2Un}@>{@rtEZGN@Q^SMQLd(&=dQxgE+g_S0(-pAy*JFBH}&aS%LnL^g<5 zVOOa0tvQnqUg3O+)a3KjQ)-_SRkY_Ca`I-u$Kwh0-|J57QxP@Bcik!f?ws-e?M(ek z6^vHU*4obbyFva>JoMW{?k_y_6O>FdrTBqF!?H@*Lch=E-E8fFUjPyDp^w=6*4!UL zs^KE8OX-hlMq|dy4&03>`t*fDMK$pYo#Ry2_cTT0c=R4yv;6~WFV7EzOI}l16sLp3 z+Aw%@*@ORN>>it)m^h_`WyQ1)AX*&XK@$dU?dqv?D592Mdw3?DZ}NRC@? zMXF7WnmtEIACMEp$-aN4da`#Cy~$@N&T5NRK&?y($wY;votm&` zS~fUBuARn9w@%J-U1vMl|0blyjV%EProAU*d@PR-0h{C2B*I!N|8zGyIeS!cL;J(Q_s5{k=zk ze4NCbH6Ld%+!}s;KyAH5VsR4|$1s^GTMmjI(+BY11Iy+lvdQ~9u$;c{HF5u^!1{ae zQd+l}{}$=VjMUC#vYy8*MuKc)VzubU#(4B6OQsOUizoZFH!5DW5N{~jZTC*$hK~^c z7iodsvO`)Tfub>`^E^A7(e&t|()a826^aj_#z;&oa%3dzhMkgtlrTmcot}&VrvPsc zK2UB!dUMk>tc1}yL~WE~3GIlYy{zk&17@FOhLL)*%A;M<-|`e*R`gWPBIIsLx9iDi zKTQso!uqkW9Ibp+K_cXg&9e|IW>1tDv<|)(&7~wtHjMO92@9sPcG2=9>T1wBb|Zyo-Ahu#uLbTINbDbOque z8U>vnzWqp5ah^Tfq9P9$;w_gys@o_X@2>;v!YXF%kPRXj*ioTp(XaBm67uzC;ZbT> zzy%qrbHy3QLwRB_R4a-2SKU0f;B(QN%d%eRQN8Eh`ho7z(yzipyU-+Z`~DUP&ez z0|@!;4*n&w$ub@TQSZUn`Zk;(FF1l>;ZQsATvx^$Sohau29=LLNGkT(t;Tpn<;V?ZZnvLz3qI>8Iqy2`EZ69zGALH#DgA`eHkfxP@;cm}Zlr0;W2Ah!TEvH@A zzLz@ylMI)?|Cqf%{h!EXZ;0lYR+X;|`;OSg?+?L$7r8>lj)o5A2LFd!!TD&r%mWGv zDhMj$0_x%d3M&HI{jh+Ly0CXpFcFY2@xdhm3IZdY`%&QZr*f`y0^v`=TxaJ3fj1HI zQWUgS-)ph(Xqinqds!4T;LoZ>c_ zGVKOvybcRm3N`) zr{^bvpS9a`EZA)vD%|@`7%uZm2CDA!K%ni*jWjLJh|H|u$%D^9Ii>1 z+eWN$T2(-YO!OXF@10*bU-GQfTh&kT_0`!6NVRE)p*LZ%Cg$ z%u+z`9j1XSgI?XYTgs0N)}xolC{)?^n<(7rJu2F%d#k=!;jH~#t{Ux|T~;0~qv%v3 zw-7?lLPUgWjKyfT=lIGLrjF>!k}{EJ8fHYs1Vs~txmmbCq*>s*K1_Y z&oZdoP$ZxV%$aSmP%0%85rePqeKR)1prTiwwhI7A-k7b#{ckas#-rFmKtY8gBbz=aT->_IjXsosKzuAsX+o8cfv^@~#k$byQORjw9WSRRLC;_z#Eke> z^!taU&FRhKu!2h{UWOvb+wfy0yrL^r2$U$9nmsYI*E)@_kd-Xiw>G-;al1_M&*Ab!;KX$sFXi1_J z1uZZ@*S}uT8FXJK3wIik3@>#ahyH2hw+6_Zj{dk-ag9)%|0=a zG1g!<0~5|?SZbG>@KD9a9fnS-Jt`7eC?u{w!C&7NrOJ)?J z*BMNwxUpt5eA4sIlH9R>9vWxYOGlLNPA`CHHlIIiln zq2m^p9=;CCiIPOEkz5dSTm9lia?uvjgLh!xiWa_lxp(uytnu5UtFMI{aC~k#OcQuXY*Ye3pSFqb?82oRp(vEFo}nk;sfY_6(49S38!NUInkeR+VXYBNW+W095xgbbhL)_-hci0f zWV^p|nL&ycgFwnzXmRq$c*1_*6r6dXaTjIJ3I^4NyTHM>Lrp3X(Mv^;*|tza$`Mzv zQF(*fNNWe4RSPNMEkfQ$MC1-kW?buHCQzjl5E`z)#Q)Ga)k8m;=wa%SJ;A(D| z%ehkoSTZ7LYNo{uTc>1G)%=;ceNbmw(Skku4_7yyMBysv)6cTXPuuhx;f(ANMazC0 ztMg0_RCoeTvQOz-X3V7qW^>582N1d`g~~$+y*s^R;aW=(T#?7tuz3cO)J=ScazHt&Ub5kz|*KxwvP!5dgsrE4__acJ?(Q0Su5Q0xEo&|6{va; zoboPN%%~fkAKW-w^$tE4)jlEQ(QYAw3|U&NDB6oWIsz-XJ|sIb54xW$#lTw>^{jPL01* z1~6O2O^g4!xD;Czsma$wz*tvQ(RGp?V!HU1OfS6|kzqhzy(%&mhG+_`W%dJtSPDlV!x{;*GNrUu~ zHHcKAxdarHF-W&4er0x!4#EcS>MD`W6G0BbfooWYHQpau$IBQD)Nxsbm*2zrKx0jA z)%YPjBfCz_l;f98P!A1Kn(7(s~LQ_~qk&ObO zbpycN>z62DfdxCk14oWGp$YKAQ zr*@gAHcJw4ovcx}nz_<-?)GGqWd_2H9pgj>!1&s^flSWFbp{S>Plr;6AR;Xd48Hz5 zyN-rAOLL&N?j&c+Mo$W}9%?&NkLx76Ugv1?F$9Ck_6T9 z^v0n%Fa^&?`k=L-tqOQwOCEb|lqb1*JZEz4vMA)`b?7Nk=2wflBwM-P9E}oYttSj6 zd&z2&Svd0BWtQTkC(2g*V4H@g3dMU(t-`;LZ=<4Uf4vZN7a7pDD|e#1mc200h@~-a z4J;W)83n*yWZ^e1+YiS@)a+C+1Rmz+!P9k8GC|9FTB2a)bD1dMjeYq&5;WE+0vYmVjgv>h_OQhu^ zpFgyGYZ&lYYtz!bJ>?D%`A6t?CY{hHos2i~^lquuM5giw^tZQCTZHZoI&#lojnW53 zPyDSW^7<`j%4+G}^9#_kO=8-lV^4A5k``fS4F?GtCT3cB?iN*!O0Yk2QD4Sw+wfg0tO1+Z7 z9oNX?5s88#bNJW;-6m$4F>I8NMO^}2n`$!IB(45vvs_F}w3i-*u*o(5#!N znR`O_6P~tuEX7R;SEJtkQ1P>jIwEGmkHk3mwVsdU`cRk{`Y1`gZDj04QSq zL6Lf9T*R6NOLQ}2dYFOR{_zI|>?D4)IMt(Rp|Jd0s*On_l;I3up1>4OSY&tI9@MyW z*Ej3Pt2L*anFxT&4;RY(nxJu3%=u|Yd4=y1-)fKql~$y~O&VL6onKif1V2{)c3NML zy!GU_h*Tlz1K!Le4+tZ!MhWrUXv}SeqtRh36`DodHZA$ur0hfsqAPRRFl=;RjhB zz;`St!dd6uVm|WSOh_MX5Fooner{eMSi3~)oFl*#lI-y}759oX1^fU3{{Eurqk+E7 z9I4B(W!X%TxTj@_$y4bkD}kS+JUgpT(wVvo9Qo*6(UDuLd zqFNq*L>{)6tnJj%frnxO0U7|0*-^l4&h33uGp4`63V;T^YwhD(Rcy6Fb2J=Vg{W0ZU-CL&`O{JUt|d@ z88*uA4h(}3qlfcMfFM2*2@-&;&IAfnZ9vP7TFE9%vcjj@j@_VbXd{5_-J(ykxoD6P zn}E+6ciKLxwLa>_dE#=?B?!6^JYY2FY5s?di7Q}}EgX1CaQOZpjy6wLYsB8+1Al@b zeDh!?^psXcK{?0~Tl}dYVWuU)iZ^%*l1M*pJULPENgvLpxFR~zhsOFIKoWy5edStu5JSyW*G7lJ*aUiyWsgnP>tYGHU)tp8u&UE5 z)kB*t>seFC`N|9 zx9|t;Bmu`3ohvF=!iS{UM?>4XvZees{FxBX9*AkkI zOPUS#1oBdsKV&L$8`^EbQTEEB2M{lr^=hNk<{MeR7o#_(4Uk!h9HoPn3`ym%?;~|) zz8(@3gOp>9lgRje>1R1Kghx1fy$_O~6H(ye7Ub(M>4R?ZMsbHFxP<10%bd8Vm||z} z#Y;Pn&TmCF_%Xn0*QD#S5>^G-&u435I_(`?T##(hbxCmu!xD+DChe@UI3@e5aNt}s zzT!E_wfuZ}+wJi2fq+HoLae;0w=m|~NfmM$cx&fg$YmgxUIY_j^{9!od58ZzW(r4)LymcTU z^#$_w;u22{ffJN;Tufc8r?=Re^6+eL0X*32;l*+zVmvu7I4z)0AiJ*fU$_(K{o?eY zYe20dC49$h2n}a9B+HQupheTjp7?bY#*g`;*eB;wL~65ts0RG(b%CJZ`~l%A$`yB( z6`;YCiVuWVX(>!^=Z*#`pz*~;fMWnJa>-LhZ$f}kQl6Q8g|T^*jSGfoPrT@;GG^bo zLn%W*+ZBEuI+wW_W_Be@%{0>}$2S`ggCa<%2`or`o)Gb|!{{nk*e8Zk!FcBa0-@IQXw z{CA!9->>6u{VgW=moO*;VrT%8oZNa{69@E8n5HIwB^3qA3`3Z(=DO4oK%Z2A zx>l{HrDn%#Jv;&p+2SJpd28tRU~V zF#)dm6f2=rzGe&#kY{}_hB8B)0c0phCu#@7EkN+@&6NNk}pkC8fb*ySs+u|{cebhzq*p^qDB96-iJ7$??elq_OP!O;+{#6c% z1GA{3Y}7KeT78PdG(G9oK28$AHM$oRk8U_B5u{JqbI>+%)liE6$e55pOSECkFXzDEJ>U;$KdfW+)Wm6dx18FUz@xsrAko_EzbzIgO z{eTwlv^bNhobw{T-pppB1jUtD+Y+&^q?Mc_X;y*v#>~)N^>b-rE&hOIU`v%;PH|Lb zNRZ)o3e`GH#l>EIj!tb=N2jEP(-n13?K$(JBN@AO{?CQqgjS;_8D|U>gR>gkO~QxR ziaDoe?kt6h+~^ls<{H&vT?3xo{|{x~_@C#twcEH!o;0>?+qUgAMq|6NZQE&Vwy|xy zanjg0PxspE?7i06=l8z*!~F-$dtP&lYv>vu)ThQhr$gfGm`DPYcT|N>iVayf_tUsh zw|>b6cUL%4IkpKF^#BE@^Zl8t)1TtaKKjfYKsZJb?h;FJG_W#2mk7_H$xoCYYdMTf zTPIT^HhASkLrC7~tRrOQt(05NUkFaKVX!M{d?MIZIqVj2HglVm3tClCu4@~| z9Ia;+Q!ILlfx02qk;j?bcE`-=yQJic*rj;daRXB)B@u=!I)ml* zftfo`k-e>{L^0J9sUZk1S-MnCXk5!xL%t`E)C8fs<=ciU63-)~BPRR3CFW+|CGGc! zU2r)miI5ivNMy0QXMVJPAUsXPsQ}Plvj@~xJ|!tZ2PLdG*V8phA9=P?dn8U z!9u576k`za`8nO;D?2J+9iMF?!UkSfTeqap<8#tHGqFSCQOEL5K0#uD_I4pPY0C_vk6ARIXFzKJeLK{P1^zlKh(et3563A$BShmye&HdFGE!1)r0no#T@BgY5{&qHN zJadbgKqoT_{QhH=Tgk)`IH~`q>vxushUsBI$t;;S*RJ8VKj>-9GedwtCpv^S1T>P8 z#Kwd;ZiDb7rp`3ly8UA89rOBL&F+gu3T89}{Wvd1KA$%quAq|`!)3*Ni4xeqAz|%p znVtXx?`cNyk@^H{Lv$AMJfCsolCZuEnjmpdZ`ESE^D401c1J5UIL9_C-mm6G+1EKd zhGC2YB+MkWFvlSMoX0wwXRiLs-QOnYLSV^b)quTL(?Ai!zxG=FvoGYI2a~aIbTYB| zQ)eVfbyaCr0Y$fDF1R>O4W%P5KVL|3m553&E<(T7S4m`GIwTg4QAQ$52j`W>%t-+M zx3$jwe`1K{|s4=tmE zynN?o7a!o4)8{TEdJ_ex+{~VZMg0 z45E@rMdvHB%TN9SqSmWo?R$-mm`=(~_-0j7M48^m58yVNZt`mRGis$8Wt#de2LW^@V4Mq2CTu=Da8Vr(Re=Z#C}FU=CgykE*8d?rAJ@|HCbx6mRT+H5Jw}r zmR-ZR0jw#X3jwl8dCTSM;PD<#)po%RGlbf{KAF9#P;|Q5u;_9J9P&u~jNx@COeZ=e zpu&d4P2F7Aa~PYPUQnKw{|PnheW- zK^fFs10SfTS=-< z4PktI`;?Z72L+UVc8z>!YegdDysnROS&mIzUpC49b&Eh;WjcDstxVh?XEC8~khwO*Yrv;z$zLeA6ER%VorP!OmzuL8TFh7TW zR@yju&$|Ekb6q1YBRnMdyDRfXLu?pXnz?ZrnDz2}s9`b#Pn616Co}#@My$tQ$Mr9|q=j2JV6j991;r8ZrF?boex0uj3Wv-S;!gbf4s0 z-|y*{?Lde!RatK;-(8TNu|4^}^xVT-im0kV12=q1lW3 zhpuAM>{f{!c@jw>F=-&$e-_c~1A}B3BAuP9ENU}dZ5yBZ%w{EC0uU~5o3oP*@k=VL z&?--ZlZID1I<7OF(~S^@9OYi2mUYH0sB&Ouw$*``D~-X>O9B_C*G*D zp~H$Dt;kB1Zp0$PN-4yqcf}+;3G%;tX03bCMDW@R<3>TWTmLtKf@|+ zi+|{T+~$hDBKa-zNg`dGGj4K{0Vm`5XdY(Mc}F%oLdM^qliYN9*6`=$ z_NKY2te+ib_oY!8oBk7*Y%^NDjZ{x{-L|3wP`XSZ}BAqV@9TB+<3duN~J(4VYl=Dj?MYBazofHo2%)+DzuB>8q9|u(z*8WbqL>< z?>LH6i#UfOdU{rw!~!ysvR#65m@J-$;U{_Dxb6*moWhLk$Im?e_Tl2OR}$a=f+)fC zvjQ^UVh@S@56dOJl9{0I;j;Qn=0!6@i%*Hw5?=w(%6blkU~B09@*!KTA7~IcfO^Kk z6uoXx0VqtF-6~6bh)w8xqFrWfO*z3rs)}b}lZY2Vbo!gG^@-ez^B>TXd}_b>UyGav z&_iuiT*1wFhW0>xWJEvUmZ&2P3->zA-+I1APLmBf6N*0n>Au$A{q;#c0~#Zogif-c zG?LdkpZ?frA^^V-CrN(+xy#Ja=@tV~7Z7FxE>c$~dB9kVsC}x!wY(QA`)QfZy-EbW zIixhXvA#RIYU|5~?ktg`0;gY{5Cu*a zJ6i;P5%^pp-^iKro&%z8UjEi`$w`>^P7X{LKm*eS|2aN&wo$imGXLWN2gNB$g9;)H zzFV#oX=C zkN6S-!U#3`P!r5vP|q-`6GM_7$*Z^kN5C?15voevSCX0s#(#BmEMPKNOMMw+@^I zcEh2*E{}vcfK>igfd;KwVZckBL--N9)ByS6-+B*!cRppWe3Oy`{$d{BFaFOa@*mm^ zfBa!*#csLZQVg&`LS?=bMB!rekQ`Hos=E+IhC&RAy`7cRblsJjO<$AH=~LY~6Q9l*{KJ6%Xabzax=-MxlMBF$IhZ77lEXkP*uFD>?jJC$*bUz;pEO zH_Jn+))I-|E?w6wqGv26msSnd^GqTqrp*>P#LiD+lySf^cA@{mH~UJF%w_M`yR{}> z3-j2>Fq%A*<$?S@?rKo5l^+=%1%}RQ#mKUds$ZIpW_vtZ>xwPoCh=6sispY~u%Ju+ zsnX~v6zA~l$dN{9CCD(2DJB+izb!`}-)X2TFI7I=Igz4`($6lSE$uQ^A2mb8Y+zLA z)QV8;a3U^^`1wu#m$77Z?D4cax551TzvW_nUxdon>^eu_MI-_*;;;Jk|74NY1~wLU z&Q=D$rK{-0EUf;m(Krg2CIe$c@II=tw*EF>ep^5QBdR5cPOpbTuPUg)t8vt=y%Nku zI-Y!5^o z3?1mM@#owdW>Wt`j$|N`aQ`qo@TN*wUYbsVQgRM6)eEeH^e>vtv%W{o@q z$F1y54aSDCS01E|v`n317@n#d9XD2NnL+G#-$uh}-IZK5JRDk{Fm)MiE=+Ou8by-3 zn|eeMHrAS11_-MkTbaLe3A;_u!2}OvHi&F&ZXirxZ8BJpXV=57=^R9>oE)1jQA?(P z00!cj*v%XkQ5zh?ORQ~%aX0ryR9zI)v+d%EMXEPwm%nRzooXNGKO}m==ut4v4Uq^F zHTS!^FWeWV=@JF3)#EZ@(&EV}=$bSNdLfs+jo_0tv((^NEdVsQBD1m1|=DgIzm6s_U~fJdk~IMdH$57T2ZMJIUA-FHrVb&Wca3OxE| zVdwqWzKTgXSeSBN2l1#1dJ#5RWjNGr+c9CsTJC4GI8Gv08)ZjpJWE700aK+#pJHdT)ZLoXZdMBU)9x#0;<7pWz3#lu2ZLa}P-h<=sbIJEp~Xy`WA@xrLQV94AO z=3m`2_zKs_YOLmjn1lcZf3@5T(UJ7y_VOV0z)!P0X_Ukb@Wij5BIhnZ!d94w zM!|A&8BYtM61jqHOD9X9MyKu-vH9FyPs9(mst4Jwpl<|)!!^vz0s4s>ZT0{NnwdRH zVHz%qcm(^SKGi3b_hBmLBIjw!0(-c1)oA8YxCio`=?ioWd7*G)OmsE={O$2tH*xs> zj8ZK)Ld;x`DQU;lmRm&iB>1+Uev56Je|(F?IEjE0MJTy#DQl`zoH+HMJs?*B#Xr+i=3@F$sv;&n-BKG5{ zAo9QkR)%2d>meuaf%}B}L~HYpcdvI4eF%D|Lk)#X5phU3)Cf@u4W&yJaXeTo7MgDi zDm+F*-AYFc!tgO_oq<2a8Nd>!jfef;Ys`>Hk+ioVE(G!ez zMS_k`s$-e~e$QbB#cavzHuo*Km7}*mPpj;3TPtBLAYU0U&05;T%BM-ym^Qr{-1C`L zYK4T@tz4a~o~rPn*vL6hX+LR>*11D3+GWuRrL)Z+0Q4z3lYC_tVTAFd_<}4gOpYd{5OlA=AZw z3tsZD*1G5hn^xQ4~OHbqR`5!#= zzZ&18q6LBZECkVa73)SAk4P6IgtgX%B#P1&`B4f=)+83x$^9NMHws2YJIYUh>-UQ{ zhM0r1Px}6XfqH?d2zV+M%Lp^ZnrQ_TSd|qFQ43aml3$!{q%2g6`ghadTIJ1GZC%da{)F|v1d<6A0PYTxO5#DCm*VGT%chFagfaLnx&`8U1i<5ouKmc ztS&(Sej#ct1Z#c3J@JUy7M=NN%KP6mczz%K*hA_UJn-20z>n*HJi46iZ&_VOB@=4{ z3!A?S@5Oe?^)jFYOWs~W1y`Mc4QkwD`4 zh6t?{hK51I5AunNZ#JGEEIvc|8d-@S8e$lt7)CHqB+W9(Cs8-D!n3Dne zs8U^PJ!;?*fgh|K9{W$N^GiT)Eb&nZ@lT7%9vc>~sZ2P?1&57eP-9NKk>8Y)>mtb^ zpX?hdGE20qVEhyzjM7_Zt$08-G%P8v7~xixu&&Z$YP8y67ILz+OewQm?{ays!lm7- zkE{(2wY$pU3{(t2Xk~G{%rJz<-N63!f%{_X8n@j2sfxC*tX}H#*E0>R5c!P)VN(Xo!~E~g^sfQBC?#22WFW8Iu&O&_ z%Ogzur34xnkJg7&RR%-hTPm@QFxOt+s3eZfedU439}bHi%Rw;lLeaMrhVVsdE`WE} z{d(ic{b2FeFa8fsHMj+ltBC20LTh1m>^+?yX@f_yRc6ka6IZy!0S5B;u)(+ARd#e4 zF=4L#;F-%=p16K4BeKtA9rRCS4`qS?=D~^rk4$(bAyikqt;L302#)$tK1q@33|qw6 zQ#VRMu4ou&Wzh*I9uFsCD|xy=o)ir!6PHBK=|-R9Fo3u9)--lZI`f*iO`XR)if0?^ zM8)6t)=F5r*6xV%^V;8`GlWbXs6jatw$NqV6Rn_(Q6bTU|Fngr)L z<4LkuT#c|$p<)do(Y7&WsZmN(%%J3TJj0#Bl7bknP=8+jf08^`1_YpW3ac)bj1BKQhXrknk(v&d%g^Q!j)ayPNo=URfb2l19W^_F1j zmg7sTDn+!|&68|*Fm~^?KH6}?Ci5Qx)Wzphj_PlJ3wGKV=t1Uy&fW}IeEy%E{coWE znKn;K)K;EV00#Nww1u+DHfZ1wB0pz}gA`N}^ZY}1L)E+lFx~CR=0XjGW+ait`NB85 z(Fb4y#yFmiLmbv*zx-6H<-5t`^=$g_ex99hy?c;S{UN;N8$pyI67<+mOR^APQTeb7 z4znJH({`kV)JRScNmMU|Pl-}kGg%YiAd&AMCuuQ1Y8n%dFZP}!6Wt1P8XT9?_H z-`v!aAP&$!&gj*dy9(+Ptm=?A%R$hz(@PfCTXF7xsj0W{kdKnh;NdlCHe5OhHoI&) zk9@AKO!rmdRO_qlT0j1^)w*BzK9)KAg}GeSQ$4qNq6W@P+NZA7TJ6P-U$G!sjA;Njh}prX}Jo$;6U+M0@!V@YaJK6(OG+q5wH_r~mREdivc1w+t)?4mJ7 zBhZ3MFEQG(j17ugXwYLAD4JEVO4EgwKt9y0L!?8lWkx@l`sC@#gHf_r%b&$*FPhs- zoro4lzkEf0K@Lw#&-P{!Z*ta=8c&I_nF!yxU-6V^=4(#h5jMP#OL#Vf=j9B1O7|1& zV-#sH08EwBhYtkBjxY4b@<}vFIqnU!+yoC{4Ul4Ko$rVaaupW<>|Zz6c=OnpK~ zsX-sO55XL?zzK-7Hq<)eBPt&o)|S{x?|scx6V0*-H{dqOB$pIq)8m`IP4 zOB;L-7j?(5I1HIm|1PU6=}NSw9!DyDthMt^<$$l;aTd#DQ!jVZY>2%3h*BH#~E>whv~;LZ&s1C+0N2BXAcMFit9)O0Ok?PGOLX>TgyC=+`!{JHq^P7`%VLvoKl*Ig$$C$BTH zN2@pazk;?z@nR~Dg)juRd#xqdk-C8+Bdo4*;zG2kY>U&O8czFu@8+; zjihFB!=NuK1}=|TGvPP6^rF)P3yldkG9k5q?nK)p0U#Ksr1XC%St&`uxU}o z3oIya&|03!R|YlyeO7elSWczQZ%6T8P-df**Xb=#Rvrb&)5Sp@FMaAgcF0}8xzxtM zWC=2-;jHVQY(CdJoFa!Bk9BCRDAHza>KcW3m#Tvgto8$2h+#eSOd4;}%TvnH$d{a_ zbUc>$w3mYNO%EEvJFCi|(n+WAbIhe!Ew$SeNz!d#EG-Npciv{jf*53_glWgdWdSRu zx}i_4pJ`DzV$8MCMx#S|IZdR;mAMnccUKynG6VyhV{O`E+p-34x}z}6MXZ#4*FVOF zISPMMnIozl(X9XSvynB6yQ-x#(=gYcdP%_!It3N5n;$3(p^ZUq^2@61*d;_SUyiyZ z%pPLZjdH6UKjA{E8=$S^?3gUJtr`ieM+4U-$_au>LR8ll=%d?$+hkfwns2@Xm$mv7 z{Ns&ZJvKacs;Eia_4JvUMu}j7(Qq?wxCd0 z`dX~;HNR*clF2#dht_hrymh*vK|Kc#$4KM}rb$yv2~`4cj`9P-EENvbdV{dqToYIW z->ICrJJX9s_8G$5#qDb*j;SCi*Ck~*!-}z2a-av-@wo-zCGSk-5SFF!3Ty-Vo|Rbv zu@hVS#t};dNgy;xKao6+a!fHsS!c!BJq)BZ+dwe@`v38jDmmNyt@^9HDu>O8!25|%T6pAD z3x?$;FHlPNNudnsW8jLIP`H*oBD}XF8ySaIN77m4LnR;KZ65wqOgR@D;WjXf*N}bb zHo?i9z5e6<>pRE=UiBzOw}-DfNI9TLx2$m82xGY-ixGvNl(w5;IabO`mOeu$=gL$j zE=>&S@*&dl=x$wqT2G?)qABjsWl1uOVy;X{D1@r^N=IyML?mdi?2CjE1nwz=jD`VC zkQ~jTS_4LTM$BbSP*}su_7-hR1%HO8Wru^zx(o6IAWHh+k82JZuNAX8^77l|$+6NZ@85 z>%6hP5A?G|N+m)8j!Sm5Uk z(c+B@D)TBaMq;Lcl;paAzt*7QAK%p|e2W-74NH9wX;hkNp9N%KFG`K-B za8$FbtM%2(Ak?YpsaR(9)HZL1LQ{B z3(Z8>`I&HLkCs8JkhcR{!m)$yW!I=`Ry9NtOl5nD8J=W>@G+8d{u(yrFoy?102%Vy ze~qMnrj?77rEP&K5pQhvMmyXP)I(#eE5oDxFCnDhZhr_%brG}UXv$#fOw>D#r+_n`H6zFoXN7{SA+p2IK41qj60c%Rr8)&#UPX3K2q%ZC5Bpy z0*H{RoO}QvCPEwk;yVX=>C=z!2re!9tuI?qCnHldk#ZlsF~fur$qUzu2qQxB2Wy^E z$Rf=K0|zgj-XSl0oK`jE-?O@n^}h`NnwFoAU|Tp8RX+?$Id)!G^L06{U6@J_l6^MW zX;Li4Pjy{mW-!|YkPe#UD89v}O(0fI0oObgh|NtrxX;x}JfmtsT2vwF_B0~yF|XW` zsxCf;&X8juQ&4jsD)4ZwDcNxN&#pPsAa8-UL?(?rL#i>a%dYi++EY6*1-yKVz4KG_ z&xqjvThw(u8OZz_Q-}XGrkMZWmqp6|R32$zvzN(eQpgpsuz-nLABc)|qZASMKokSn+SCm+j z?g%eDoGT3~Z>u>JpmoxqS8eO`B@ZJQb#Yf17gvdHecwRm4Dag_4qje+4j@lZQD6{m z7fCbQ5GC|~E>P0tg(t>Xr-<;r6e{1rLKkR?d4w)$It}@XK+1&k9qEYT7<;K<%HKK< za@OCE8tr(Asm3}FE+aZ89}W;R>goC@kV!fBI(nQhbOOnP({|u(VxBZ17xc-P#)C+* zoiavw+Dzkl`~%%*JTSW6jQ93vpNi%L_}fiV858?Wd^BXE!{r=G4=jmV~XVuOjWA<%TA@TS?3A3Cn1>|HQN&t(uqox zejzEG64v(Eo~dk?Y+|z96Nli34fF5w!|#d_8e5S>ma`|ZazChLuD>21d%Dlb`SGEl zR=FPs@5E$W2tuBwVz(?TILr*tD2>PBp#y0_g2C2iFn3RZK7@ zeMO5kEyI4|;n^ zj~f=I)B|L1$n4uGW?^Z#&QXCYRD+mUj#$^sHDyK+6IMB=+nZF_eEl;Otj$ry~ zL)F#e@CEL|AdqFZvypZN?EyDS>sEv180KR z6h!-+OOJspM8K%&jZ7UD&V!JDp=f^rz;Qj9>pl&3YeO7U#j3>-Wsno5f%F z{2&drs{JH*-%OT+!^qjP4f}<9d#HrZGDD*9QVg;`1~`(hGh~}^9Nr8ShbZh1d{ybcoJ_s1FSt}AL=4L{I zdRz{Zh<=ciNM4r1xwuFrS2{`&6E^Ao0C~{3vkvE;4pV2998-0fd6hm>lEck34(^Ak zMS9gPgzg862arm-UWw}7ct#0@KPG6b5qmPoB==iNp=y1KBG4{*$yC<7%O{9b#=PAO zwL);Et>8BAaaIUA>*}F}Vzts(a+>m&-i}m+3`YMs9nwKwg;M^ud7K%(0Pj9`UyW>R zo@{ESaXKu56UMSCIr}1mTuOJ`99Qghoa9-dF2N#UD9BBj-(OQbiK2)L)n z2gVrq@C|1`SS1&da;1q}rW$*js%)ViIE6Hzv!|K2Hd~APuzCVie#kwwM zEOu( zRM?Ua*UF|L!|ZpNV{E`ibvBihi8`cC`x8A=W6BB9fDoGz$A^_qhn&0blc~vO^FfUnwHME@h5)zMu=R{o(pb2_lio zJSIg~Vz|)Ma9OsvO1oV2x5ERd7HEFstY~-89IV&W{+IU#su_&)dmY!e=_f*U-uI4b zKvd6i*;G|zzn{d+dUm+sG;n$EKU^OyU+?H2t}p4g>x;CJVFkLrNWq30iR#tDMZNO* zn}4`I>payUVW8{NrkI77Y2TnsZFdQeKdGgs@EOx34@(ESKG#&D>oho8DAy0QP_{C>lVPKX!oH>{5TYv;%QC#=SQOSu6_y7f-_Z|CPXBlMf3 z?}LUAk*H`v58nv^-I_%&%rY8D_z5 zKqcb{&ovz^BF|~e{QNb8e=YujB!x>6UDX@%&;ld>_FOV9s+c{M>aW(JC;P#k^Z>Gd z27Go5QO>Z~pS0|b9-vpcF7&EzuT698DO6ODvO|OU~2MbO5qQLWvTw7Uh*cVjYR=6GLNmcCkIog zDv}r>1X7lq->`Gm4SoB;K&pp?vPb?B{Q|fQjcfPeG=RSkpYR+SVq^;O3wJ$dyP4}` z^Jf?NuWye}xB@8jU>}K;1c|T&Xl)?uu)&gA0=lKv`ePC9N!HNydXdBe`KSykK;bVK zK49(==?e+T^pFH>YEGZseH7*}&>B7dGBJfaKY|I_tkUarL&{sg*=A9C%}IQ8yoOa= zgP4Ugi1E}e9eSdvf6+hYnwdwIhs~3wt-YtFr9Bp3L}y^yaO!V*Bs7Wb4T=|#Ig|XL zh^4fLl15l~8PrxQwR z5Do&cm2$Tvt-*GNzp)Yv3}w1WLXlQbHk}x`u+XhRr&&5f7a1`ZD2U{mi%^y5X^0e0 zjYCMe#E>T;F&-nLH2Nfu=|MLZANk3NX%5}}mMNRCZ|d@w&TM-2xTa1|MKCC86{_$;!h-8S)} zs6^?gxn8+8?b4WsbrgY1+g9*{2_8+4M4mWE`c1gWcl6m`z?rppn@g7FEUyp-ii5a} z`$D_Vu)5ogP6ze+3M{;pUKgR5xzIL5*1jz8ykJrf%seA_9o&WPc437%UcPENWR&eE zAF6UOcU*Dvyn=ZXyQL?AHaMI9;;bN&5OE_UXB$i6BBlewd+Jp1me7#1PLjeZCwF%{r&nLIp4=!9I$|Ix@-_iqY!8`>ybW8HYoA zned#cx%TI;H%MZF)<3YzcCdI)%ux&J4^(qPzS#NveSn!Q)%@lQ(AtLs{+DUrzrMzz zluh7Lbd2DMlaYuw@{CN)|JC`egDRI8JolXJ+ip`@FxvZb5$XUJV2xE9n@;oUbIE!U8QWh;Kr@{ui z$k3rtr=q9CG!%8L8l})?I8v7j0YMw|%_1Pu47`K502}oCqf+$CO-WR~4%IJPX-C;j zx>%BUI+NR;U>htR*FZkc#oXLMEpbI%-oe}hhxuIa0dX!3Q1K;QJL}bplXRGyG>0EI zA`3d=SHYBvg(eAl0}Ha+``}fqVF!Kc}5;I5!3Kb0_4(T~=32#4pLB z)rwT9RVlLI{4PT7SRNfYhSl z%xS6l(;M~UkG-iib2Qg*(gacic0O12hJdygfO2smV7AWEtoUfTqM>3tEDX9ln9X5O zwqtrW>8HCC0)*Tf9?3cqpqSY2t=8j2hQw^&6~_M?jsYAUazTbT&2;G|PLq&pdhDm+!O2xZ2Dp%OD`dXQJea#hO)? zuSrQ`&qnlnqzKaU299CASty|vC0_zOa$=NVMjhicaT3-JZ#*@q{4zqe{)=qgE* zNZ{xv2-apFE!2xI4R1x<1FYex?E~*a`M~U4JBD{gOCiU!k#0zDf#ez)66su8p8)cX zD$%D#f{p%=PxgKby;_~(hZ{1HxcMcZm57{@#rTVap1Q{LeEIB=nLRfa#tMYOs5fjx zzmS=nA+PXEQLd1~X9{9taEvn-)^BmTiEpL}Z-4LzX}G%;_)F|c(h~ZbaFwCz42Wfw zw46|$gZtzR@Et!NruDBKnE)ur(Wx-3bOwyH#O@+Z#%Ap=nb6V+3t%2iA<(hoM1@vp zW6Mkr(3OXzQFUxY-Xw-{v@$n)O@~^9zN>a8iS11Wz7#=RDL40#Nrrsu%elxZEi+nh zblP5Q)4FPJY|uz~+|b(hq`a;6m>znJVtT*7X5wFqnk-$536n%6p6c)8*Gc>gP3*kw zL|Dmy=asiY3Q*=3{{da4oY#4FJ$3j%e|Te1f^YX!Iy;!j_jTrdU{#Euw?B5ju%280%r-50j{~R(wJ{E?F`65i31E6A#okHVdDEYgBB0bSPiz z%p^O#5yoa#W6C_iXTFHxA_fQp8@S?t4P0v&KLcy^_zyKa@Pr~eWtCaEebO%MQYLGq zV4nl0uvXXlkEPISvVItaz&?_!n&*phyvgJDPA$BYi>mTjH3ugHVcw88_LU=SQubN2|}H)V|86ZbOEnqP?OCgqv|v>2$)c z45`=L=OH?>uX;nfE#54~b{^9r42fW6eX0)JNFH6{gpBh9Sl4z#jSY|JN2zI%n0NjX z@~`ef6W`?$k+|+Ad+Z1dk()6c*cY<%>Sp5dE?4jDFRgXosm~kQ3hyWI2Mi623k}g% z0YTq0scevB)zhhom$_Z2s_{uZXy^)^>Ad;R`pP5hVvUwweL#Z)Ocbez8+Nv1%5x-$ z>4MTkk%L$2-t~(MJh@@+;_~ooBBqON5`R**lko{NZgPEv^dw3Qk}gT9gPUQkP0m*d z0#%L8cSad56ImLNHw{oos}Z(GMis(TfnHQn`S)Rp-+|e#1-;n<@CIUmEc&lINB?Lh zcBB`wvNf{&hmahLu$6(MBd|gX9L@c+3>Wq19;{>=%>{*AJp}qv)m0Bo#f>jsHGU$> zgnlE>PME8d^~|O&FmE)n9VC1YU|tJ9jCi<73BVIu_qi82`Tx;QjCyaT(B}|p zp#xhRcmiSr-ZHG<0G2kN&A`GvaJRcHA&tHox6osHDQyz}x@ZfnWl5cFvWjOLx9BLj z1sg1WJG_q74(M-MMg}CVqC|W49$poTm4wB~i_<`w zMr1Wd=hLJa9#t>kxXT5ad>g0DJIV^Kh9k%R0y%An0o!fXqh;{;^@fkmZ1B%A4i*<5 zo^Z9@A7i+KSrS1mH!49M-^mONAq;fmI4h=hyO)}KJ9VVlSnskbhbpSnmq_0(G8E7%Uv{B%|k)u=3J+(JMxk7-&={NA#@F2;MaHX?T zKO_%6$pnp5+0C8eVV$z>X83m^R;jr53w00e>+{e!noXzRd?ZKFYBRii>$)RU`qUSa zugIMJktU)~h+FM*Uy)116QpIQaGr694C=t%g*rycu<@@6l!BGh@dzz6#~rBsElcI4rJ%JKPJY z!+si{#U};?Sdsy@up$0E`~r_{m7GB+WZ?+=ZWDn8lFWE;VxZEw_6&9Dp! zuZY-vT9^XQnk84;IgQR@s}Q7`MxW9bs$c90Xv-~_Mb=Ll){Stay>SBS9C3Tej*e*P zsAHe4zHy;ouW=@_h*Ei`iE$I6M2L(j)FrU=bW6D96m=$Dy3tHjv%Xnj7(y2nU$;`B z?~UPvK309+YA~L~v-nn1u`Fuk-B9`SCeql8A~Et33tQ=%WkFo0WkDLg^i!Gc=;W+1 zJK65GxlhQ!9vU;AHrB664o*{o)S+UvQ`-$8bQ#=}y%K#E<2DZ`5L0t?_tiNmU;PnW}^a>NclKTyc{LUS91iL|iSx&F+~;t?$>>aFZ)tcDN(d4W}N zm|GLZJ?^IHP5T+SV|J8aD7~iE&Yg*)fi8W8uQFA)xbwnl0p(0yU z(rzkp%VtS$=6~i&zwUU!E!k)+b?)2JFwyct#%p421;>nYGIX-#pG4E@M)CpK_qb~Q zVLpjtu}_tm7P3T%-wb=5+SNwzxveluB&&GYIufp5c)z@6PZ9a5#H1dg(9foV)sFi- zS7;W8>$#xeE7*HcB~?*4Ky?gKeHTmi5ui#$T~sb%aCbz?9XvBfp(m8h&8m_%1E*RA zkd0zf2`Xo?BduamNx~{9`yxDFss$FHKUX!>At)TBx(g6NWR6YTmz@Df){CciE|oBR zc3}$^c^T*vu%eh*88n;60>FQL9Fr=NtW7D;j9`k z%u%XF@DdR1HF$-G7(=_e4J4@&kp4QFMyJ9REZDFqt zy-=MuqO`NpJ0V>lQ&&N*`o95hs5CQcC5T1`o<4zm`l6+3$FH#t5%|7-)2r8EzCZ!U zM_JAdsNN3HPDNz}vqo(T57uksxEiNW8zo2d7SwcKXs*~g)jPBc1ur8RTz9om=%G$o z5gFo${htc5CNo*ZCyx~c@gaO~NP=dEO|~0j5|?T#riabx+~*Twd*bTZ_G1}==oO;} zE+LBU24OuEDuOkI`Jsu7Y^YW0K&DLW;(3%=|Cb?<=EEvq!G@kwX8A5lxrnKKP3g7&6=r=1IVRY^9wBu%=c#AQt^ty`yA)9 z8(5IfPLj-LWzHg1=FJD?BVM65JoEN@GA6C^4lZRp#%A|6lgYJ*x$ReS6DF%dr!FvET)e#U0(BlT-%>=BsY}yIgZ=)3D8y$qOT+kE7gE zZ&uTe6maM6s)i74H6VA@zM~L`T1bZ2rsr}4fB68C=lUgrSjdLlnwuJ#(FhrV&{&c6 zF8YKl>PixJ@GS9jgIJgsmx+>WXS*xI-jGf9N&%AW`}f1hcZ!N)-3jOCni{6i`6ca* zAcOrknLQ;<`UzMDf<*l@L6w1Zzs%H6EXtpu^Ea|&Y>VWdT_Z3D&GJtF)y9sE7A>Z5mXyof?5KT3sw2tzRZd3wFaB> zMY;rpEg6xxKqFrI2q8SetC$!D{hfr6h~Wewbz0{s0kQ#O0mjghg?wJHj4K!^95Gm_ z+Au)bAYi`$oz`!uaI$u7Zrk~1*o`-+{OCLYP_Fg;mO!+bpp#S&buhY@zM(z6yR>^r zf*g0(UyU(Q@5Lcf>D%XkEm}=%zZi2^Nj$E>v|qiW5xZp!RWXO)ZRIHd1?33ac%N-kPR4U1tg^m%l%WM~_JnTMzsT@|92| zv7M6xPAq0c%%e`iu1VM*$f11}ss789U`{TR*(->REJ9n4DP^rIgN*~d1@Ouxza;FS zYvSW~t_;WI_^f{M>D>nttzBD=VR@@UhxNf|zx*Z3X0M+71&Lr~iZWRP58^8Ot23;p zpCth$rpEE?C;VD_1T=R0vx_Z5_zoG2^kv4PvrB^h8Qc*)X}{1my^tK-*I*2<_|F^J z>eI3NKe>u+T;5(~{-}Ht4#VsDSAzTt12KTI4nEMUcm`c>m@-dAnU-#dgOq7C?EDYZ{7 zEGIioIHZoWi?)7m=3d9^0%4V@!l{O~$dn^ncn!<9&nzokb4EBk~)@_q+!a>E^i=JwIV|(L3kk#(RW1Ag`OQjzLhz4-4>cW*6c>9MFzwZX)j! zH|=4|q73Y0*V+8oX<-qRBPb5<@c{O*Os!&RT13(?aTFSJk*?8!2PCMY%26t37osJh z(K7Hk#aeR}s+$pExWj}+;?ry3a+?HEA&QDHRt~rjKp})FQy^kC|Cv;i|1su-B z%!)Y8lGx3XO!HI4nBsMj)7I^0HjZ*yGwDY~97^|(-vt0@`py`gMwrjE6 zGhsSsE2HxZF7W$|$sgoUHr#GXoy`GV!53!97iQ^}ix5SvxHkt@NiNL|IK$>cRgkd8 zgFfnn13s{KO_yjl__J)KFgyJ)iw@W|#wf}<=FWPlhd^pa2-FTCD4ZCbxS$nZKtX(N z)8R89@7usqsJi^C|9X?=9l@0n{k};Perp;34#DwXIfDOX=5dmrmH8e*;|}aK`c9ek z^#&5yGuXon00k#W8$^@e8rQ0!W0|uO`J~L2^861z#AOj|+X_kNah8X>`?|MhSLZLb zp)Own4Gt=7tDrl%-vl`HDcYu^xGk6Wdiv2`IKuw@=>9A)*IYqugg>tt)Tg=K`j2_& zrAZxIdG{4cKGGNVJmBfE*mAX2#se~}Qh)n?<30D1>f(U}0fiIj7_Ikc728F!>9~gX z)vha;v0EuzZCfNL`f#TwbV@}A@HcF+4TYKQF>Co(MpFGkZCj~wQ;QX~goTy-f}y$h zy3bIXo~H}2o60J(vaK?1LEbuTMa>VF4tc+y2N_i(WecE)y(E3Tg`q{_+j1(TR*`Rk z!wz-+B3}f`!E;oKjHMM==!eH7mdfQqC@2X>W;B79r_gf-oCPq4wSR{g=ZL$~3LpIo z1?9YjNeS)yFF5`F{ChD&PTyYN%J_Rm3gB*RMD#!3{wwJ;Fs4`Hn+_55x1q^mxvcSw zUkE9d+m+7siKxw>cTGW+HfxR}A;D6mZdJgG36{qPmUv1>BT(R%xXDZRD{1_7_B8E} z>O-8RXooz2-ZAKE3uqSRhhzr(NkFW_LP!R1U59JrSk+G$Ex6;cZJC6F+ zo>9S3vHT0QvQ|7$Oa1W^i5wQ?BE4%f;I-)poXHkEG%nt6b~Kf3LkE$(wN%#V{Gq!g znenvIlMK{iyPf@ZJ9G`HZB}b-29k=$DTKx7;obIt>3xJLg#cT^} z#>@yL7OmI#UUQ1tEH?sN$xT(BmU6|dIzO~i7c4u3nkFd|oIyU6EjO1Os zY0_W!fS@5n6K7yCkAxxD!6$)Cv8b0LCeesD=FBPHym_&-DlN$`e4E}4k{yh)Fg$Mh zCn4ID#4cSE;Px@IS#P?88wu_*wEF~Fi?3{< z<2)Zw{kt8c0|(FiZEMskoAr4MA-*nJOE@jGCvl-i4OEI+NIy#r7>=mC2HC0F+%6p! z)mBY_@)15NFpf@j0&0t%9(&N$Wnu?n095CzvBl(=lECn!m~@i9ZZEl;iW>YkPzm6+ zC!@Tpp+nACUo&w@$0_b%up5U6m8p+5@t&8UUgav20*^esPcR}xlL_i6??;NIk!6%3 za~W3Uz;?Z?WXwpKXr4KLd|<5|>+{yg(ISE2C zSNC%$@ts8%8habkk&01EsGL)mvUAH@*>eQcx^WJnOok4Rc;u!k0v&gPd-qLtv}O5$0O<_da! z_Ocf6gW1t6&yQKcVf~BaDQ_uHdVSn!t#((>lT9p=WIPd13PR@Bw4}x;`L@$21%I43 zJpf$a>i0eqY5Hbbi%&(A6XJ7i?!IqSFiBT$GegPsNy9ce%+;Bz(VoW#UnCutSYYUI zib=`~Z+-y&Vw-kj&!T1lhiY@Q-$v;ey8`>dG_2BN)d))>XtgohC=KJOkx0aejM(J{ z7koq+LkneyhQHLb>y=2qI))|NUq4i1eg-Ev2Jer+A3>iuy3@1GhpP*|grzKA^UeiM ztT;SDG6rO%npM;v12l;R@p`K)uqW1Bg3bBe!H_o33tba47^{R0x&7r1acxZ};dR2h z*|Lo?v)T+8lWV>#9>%JVRu&FABa(I6P8hYwJcv*5IobcgMSC#t0I93R!4B@Fd`@|CY>l4~lv? zm3AxwZICwOr3~-4*Uq(`tN-z<{v=n|>{m)ZW`VSzVhDU(P62%eLAwHnG!{o9lS~DZ zQNo72U}mTsDVS4|Q6yTo`u+#X=J{m{EcsUPjCXGr%m?tk_!n!+edsUk?tG7~`m?HHx@!2K z(dy%qO#$6qc7$o$8`;BBRIe4?{n^T&U7{G_VKq4~BQb~x3D0Cuq1l%DMWf;pb1@p1 z3MF4c-71HC7g>gUZI)3kg*01VY0A)uEo$}5f=xyVqKLs|w-Mr36e*cfRU!!hO{K+r zp>r>dtMV6*KscoDaq{>VEZoHuppS_(A;t zeK!B6LR+c2s)?wI^j8}U9j!=WMe7H!Ffu%tdJZcWMDlhd|t9q9R6uhu7f5il@t>0e6DXX3;{Kf*}ds6b?8T!WNnmB?L5po{_FBzM(Q1N4~E2Bj0uE4%yPHly~l zc2rhdxwYWLW~+hl9wy%u6a}YAq#KO>w2U{~KOI7a`(caNDunogvn4cJMOrbH>|^gP zgMu`m_4eDRlZun%XEFoXYr2X2j3MM%SU{+tJUY1U>oafiphG0~%Qm+!!ig`ay!Bi|azTs7? zcLtolNc2H_Qtx7Zne{e9VJ3@b_8m{5g_S170lBbQo{(a}RBBXMH{*oLt+M0J-O3f^ zEmbJq3~huHrU$S|qPV{*5}2UraA|0ENM7$aI@_lPY(McQOZL}MX0U;R3+*)$jCP|h zOI|}v?bw$-uC|WiQ&=amCV$U8Af%SBHSm-^Ob8LSmC8`Yst0Yl9UbA%7ilH-S81me z&C|#We2QDIWgLG^bwY(L{vMtkOtm8|w9|E~N)n@^O8+$$Va)0qXAgLiEM%n}K=4Z` z_*{!153kY#Og(VD z%l8B{QDQfgN@V*JA1&uHCezG-9JtoeG-L6r;2NH3rrDIxt5`vsT`}%qRud>qUT7bs zArEd{{2uf78x}CkOPWo-9!_8vaEr*X`~%?zk1kdpSJ*ow=efpJPQdKw_Q5;Q6>vy? z6MfWNQk$EY9hdEaBYwNv_4M_qD*ngA245C`gI0uMNe}uP7q_I?RBrfzcZMjYx)+ki zuiSNCPyljnkDx1BjVNbrc+3*QlIRT?{BD@L&I=Nb7m8yomHaj->$;jM@zNHwi6`fb6 zrZ}o%_`ifrfd#<_O_jv|dTaG17ZjcPzAklr_kaH#lG%awyI422cKkoPzTbJ>-y}9P z?)ge;s{G239b`zAL4%FEirYXlfeL7#zV{mJ(;erfi^9;q;L=if7&tFLUu65KjUpD% zk?9wnoTgJ58P|2&UD=txR(kTk4Sm|pRPQA_S<&leO0^1uWj~DbjtwKWnD~T4uneh!HhO)-97D_wN3-K|; za#jCh3V%Ibx-$pxw`5V5M2$)}Fjt0M=aK~jYYQT{RjIl?14sm=2jBA;Z*^+?!+o-I zSk0m`Tc9B;BX8mD=QSfftZIvj*zYL$eTwjFjI)-Z7P=s<;Pe<_s>lFNBxln)CxK1G zgs!{~%|%*E&w^OlKV;+J#_S4Dw)r*Qh|Or@AGp_gT{G}f4X)n*YxeD*65^6E8Aj?` z!+82O@BRPS5&t)v&jvvr?h8gwwMjF)agag-5bo^T1nKHwrieQug3uu(whcQDj#YON z*O~HifO|J6RDRq04-3ODdA5e|gXNmdNZs6>#U-kRcJXZ?MIn^Vr`L=utgYXlFUHtVq(UH4 zVLVE)3-hxm^RTnLgLxe@YGkCwm<9BMx*6;0sX{f=x2C^ST(Y(|=BBJHE|j}b(NL^u zy`V_5?)Z*QVF3^?^+0x<`A0ZZ;8g9A4HL)xi)R-$MAXJD)+SuARHBU|soOq3`(vUJ zn>NP!IuPt#N3}o7S6dBaZU%ZH-#|`u0cvCT7c?xi(QU|-=Tf%uNQP{JzMDo7lm%+M zJp7aHiE=$#qX7jApzLb4)hZm1Oo?(KW7?E;<982+y=oLeaPXW%Wzuo59U`rxu-nE{E9_EOGv>DZ!cPwR1vp`g1yS-a6{VbE@}QG}LdJD00SKPz z+wUi2apJLIG4fXFJG5k;49Geh(9!IcOc41s3hM!V`xbEx0+Ry1Ou3l|HWPXXFt*a`4kO(OAUPZKYkGXKb5rqb3*-R zMVt9Qo`ck6H#Z`DaC~1dpr0g+zCZ|rAm32u+I}(d0g!U16gP1kDU-QWaJcrC_0Gn* z$hERfsm3)w34#LT_SGdCmCI#~=gLKM?KN{%O77#Xf1C&S;`d(nS6P( zuPgIieyQOnxz^ygls>TK8T^X6J8uEq9(+dHsO*b0?68NmdFk@Qy?GG?=H0s;{&?MD z`1s9B-9K%M%j;dWgGy0$Be``$>Af)>txM_3H)zRKvV)KO$n_;MsPz%W%QF$Z%~&t$ z`UEzOqkM~obG%II`c&Xo{Bj6D4!?z({tk-6`pVgf?zrplLq+-sEvCI2PJX#H1*R=m z^Ua6Qk)I99?|7l;_mb|_RjTOIbvv~AaLr`x=&kQAe*yg}jRX2B+}l3d=Y`l(nhpI+ z;VRi{C(H*gz;}7M6kqx{E5|@yLk1`N@ah6R7?HqBj}(3yTJYyvgwFT&m^aTm-!u|Z zbQjPQ-}3&;M`i*ABP>Wxh;yI*P9(0%MNf?2fE(MgjMiXU$tUfgr)nlUf(t$P_CXSq zbosOD@wZeCf!@Hw&P>s#2yhzcv|RsLAwNCG0xrui2U`S)^+TJxz9u>=F#sibE99QS}%3J zAQdx8G@rwIRa1bz#Lm7v$vG|whH>nvInY;5nNz9t{;$(|eO>X^|&0pj4D z%&U%-Sm4*&ma9Q?Ya$*hy0mkGL{s{yP>_Nh54Jg(NKn!eVK>GoO;#}Q01U^$FF;E1 zfpEoiZJhq@bwlx-TKT;tv+{zJm;4uhYS@a_udES%^OV)9@S*;8;3gJXQV3F|Kqt^Z0A=Qfvr3o9Yk}gt&?>q5{jENK zW+#$h6P8PeER#wCF{jnrJX91(nv;=g&NU8d8g+XBPQAScNn=19GyfOKLid9 z6?K%Ac4+|oc|J6TmF>d7;3OjDMMc=5(2!cw3cT2mYr$ zKlFzErb@U1%X+JZxOhVE%}y1`S%secKzE4K3nFGnMZ8*fh}4C66x*6nCIdu2^X`=Qm?*${Sw~ z5GmyFqz>UzfBrltE7iWu6;dPBfEZ7e;ZCAwfWGGA>rZTv=ttSe(Px}e5sD=VgNIY2 z10)%gvvh2|retwfR)4o?hAJuThPduk!l$mfAIlOV~Lfkl%j$rpi3 zPvlIQg&}Jq9_9)3BcmSv{yJEuY1!qEVLbqh@!dJwC44C%F$tp(R?!5vArZZH9S`4cVK z3?w^i{gUq~(_(ymdd-!iaTQS^hnt(2vnFzg-8ei&t5&e`FG=)vQbqk-g>QPu1CC(uENZglnjK81wy=#b6U|Lj?g}ML|6wOKaWH>Hj z24nc)am-TJ+k)>>+Rt+lY2a)9-*-+3&AK7UuqDgerYM6X&n0UBcS` zXieMmA*|3DqBAtFqi1HPqt|ix8%*3x!iiF%-!x;D6C0ac2P;C)t9oxozPeDg5Ld@- zama;k?1)**=B$AwnPN!O?ty(FakrAFcJbR~2c;c;+_QYdGm>Nk*hOC-Z#%6qiP=kM z3?f`)mdXCZP4^1WhKua#!_e!W5P@4)xh8;qsW?~mn2Mey6@@% zeKi(po^n)p>32dw1rZ|yMDk7p8fPdqHKIAjk%)ysIZ%g*_% zjEKX7JJ_%;O!~^mq$!kkF>DHG3Xtl?&5nO-SgTzyADn~Q`*QQdr>t&R)4=UPt%Tws zm`0vCdbE?q3hb`&?~oj>`S_s~Ji@=PHp>{4IBdzfI9Bk1z^zMCTfJk{AraPL(r(U^ zy2bSa8Ai2nHD_IHW)(&?^<7%EQ9Wlq(E<3gsz3RHNsh>^6}@W&OIW$8OD1H?wg9M^ zdNz_)F@8ttmo+E!%;grtRN+A6DaP=u2u3p~8-~m+c5kU4R7s>EvI|TxHfMriDC=p= zXR_7}N+<5Hr$Kh_jF~=J;qPQkM@(v{BUZw4UEABu)xJlLNGejj{jvLW)^!^vuC7R2 zY#xY>#pB4Ff_~=j08-pXE{m(aQ^%9vuVufA;{&C&ljP3=$wW$R^>fL5RmpC`6&fI6 zIRb*_1H%~2v`9^MEahpOEJ?LYXIiomc;t79#;=vttlzoyH1&RUg;lGg?9Az1v3}yz zSoOAdWu3;Hh`OkZBcQ5%J6%=0D6j#UH|qDG=m_f$BJ(E&(SPsIQ8Y$z}l;PKx#DYGa#lc!|E zl)_Txvh`Fz;lBTYv<#*-*lbd4PrvM2*gG_bmw7NSr)LO=ff3i-(|l-0ZdM0lL9pTB z$g*>MlEbPTFU2zG%C~pDqYz!&AUU^DP1@sRGs`@WnrOuloW*Y?RE*WAn|i>1m)f2x zjegnS2VObYcR^yYtHDcmL}y$@(zJy!REjcO*tf@~$iuSya!Tv}SEa@}xOj*0TdBeO zzMKC$5~u^Mq7%T;nCL&A|Iu$X{_nPS?D%(E8!70o+4+h_qj_Uk2ti>9B>QIID{87>OXDmtW;r2hCPDOSBI_)O`h&8-XB_e%l$>cR5ZFfkAdIjP zjUU)`br%9A=>1PI>6O5AIH_Tsd_|CgzedoFKUdHN?e6NR$f&8CiDhWl#d%fRX63UxC z>8Vcf`I+ApUwro0?8jZlo!8vY1t0I*xPO4yqOyfIl5T)_km$Q1U4*D=Rz(qbhDZ?z zTGpX~vL(=b`f!Zlk--^Ih)dKAlFCAi!8>P&pbUullROaKa_dE<19}b4E@~``Dmqk zifgQ@DqoWKm#l|X(zve%F~EdWp)LMwj*6!FE%h^R{!v&W zmC8JbW4RATGS!D0Uo37fX67u&XZMG3dCwyI-g1b_ zqmA^vUSq1cjYn80)p{k9M|WOT9gz?r>IxAg#MQhyM)pj|RDsWJ4hz1c1yRHmgja3u zX?Vf&iIu{H&Jx*kk27b1l)-8!D%~7@jnC*zXUC7~P^sYFUIxAKL5X@t1%0PF8%+7> zZbubwr36}v0#WMt2B#Dgv%J|Q{!7_BR8S~rge80{`C zUMEG!R2`DGA_*7PM0Dt<;(Va}DQ&=Wp1HDAWre*Kkg1 zIT=js$ccs))p~L>VH3OVtSbGg0O!NMk}r%#ra`g`3$1e-!@O?5Ok_%Hr=5pzb?c-j zOQLMpA%;bgElRDIkkXrjdcp#0@?d&5QR|Yl(^k^*Sg|6ngtR$yID0ydzDt#qu!` z%Dvv$JyWQn@#2ut#-F~Ag5~d=?+sqIme3JT3XD(0+E+1W?AtlT5X_ZFmn#>d-&{q= z@L0K~5c2L(aONQ55p!hU;gb)XC1@m&BOWOq`2z%!jHz2uw4&EspTeUEcIY^Tw`dSF z-R%eAbODw;$sQ1ZUz@TW2MDrvES<9V1prc{;gdf=H}I0QH?!a!;VF&YkK&gGI*H4-^ z0+>1knHaL2*Oj&!5Y?xjWJX)-$QNY_6ql%R`*mpWK9-{YQpM{-h=-b8$9U~ZNr=VCStkAhJ1leGexc(-L`meaf}!rwy_z4FU;IbQ3ap6fEMIpC-bZfL|Cd)Lpm5V8X> zhCe`q5&!-RzSLeW1R(hR%ANg|!~Y$=)PdH@#>m)`R^%UJnTw6Rg|xAwnT^r^%*QEO z+01=MZqV$sEmBy*WnQP}`S+>Vb`6wBLg|Bpn=94Pdbc^MlC?J!P+NXcN()8ee*Dub zX$1ylkTRS1u%33CdS~zU{`&%+6ERFVV=IcS?zFL38{xshQd>wE+ySB}=*y35n+n~! zje!3>>)Q{y5w~HbUY(AuA1pf@g7fUgswdW+4XO^YE)zpde{i0)UB}_I3{KsB-PQ+N zQRPBb&?x)1w{jn?6IOGHO;KnH)BA+Bb%3(OaqcO@_4+GFDDVM2&S@CA`fao52D5`a zP-3>em20Of|7&<6AS@dQN<_M~S`6p6A6uX>;dqjAVHs)DNnq452u2u26S|7{dF2Zp zIgKeEg_cB+6wMzNGiXkuoy_HDtJ>?590o=j=LDESB`2#>;HY(sT4ps62{OzUpKuVB z985OYem;a}=!-qypkNT3T&YcUHuRuP@FhFJ-FB@hvd{FTl9)hooi8!V#SI{3E#yLY z=~X}^8VkuuT0-97A>=v=KOL~REM8>OHFordC3One;x_)XXrB9=A~Pn~YwWJLbuE1w z>*;Mq8cn9CorxrI+UwcgKBv{4jhD=`{^uVCjYN5rl^kK6qRXgag|gXi^p}%R={r&A zY_d?;3B~492uX;^L?7G)6%0IMb8txdcFYS_?(&INUMnbs*gQb!8LBfmv`Tait!js2 zwKeG6uzean+7@sRx#E&Rh>%bFg)EtEGJ#S&QB*uZ65`-Lu@Q08OvXI8K47JlmoB3K zJ$n!Of7T+@Cxsnn-?$THgdabs|E(PUZ};PW)+UK6?;h(a=-$Yjjr-=-dpdK(=3Y+SG7_pWc-j zA%~-2S$*^HSzhwrMCKbQFx@abzv2Fux)(2&h~t54RRXgPifmOxZdy=ceHJ= z{d9d#%82COkL&QB!|ZR?XxoUivca`zL&kP5_K024xB<6!w!r09!(9N9cn)a0*t|PPxs5dW0(=vf=m7|8`Q zr%C~ohZ&DzD>LPX%;mCuQB$1t#3V$&qtDQl`-=3btD}&PiiGrLANtiVckje8?rptp;)AF;l%xC0|79iW~tdU1E!kYmijbkgE9EcXV zHnVs4Z|qKbxiRz7Ryvc~2{&?u_@qT9 zJpvlkYH3-lf-l5`eA0vs3VlfwltWa4n7^Or$CFr=Q;W zX?|D{y%kBdny|luHnYza5vlEvIduGt8A6-JrN%Te1NArs`lnwSdmozhRRw+a6NoZ# zX5viFWnM4^S`gKu9Mxt{R!nZ%V1{t^!@`cX4F$yd`^S&1=$4+f%~ormUK)UBkdW9k zY9iLIO=bL`AAOGOBm;b1SgI2Q!%S*Uh8Ep}6n$kH!5qOKih}4Pq3B&fB0A1%$vaudjdYVDtxK3_hDww&{G%8wW`cRV2mnWI2 z#Ll;Qg`jQhEMj2mY46Av(()?;y2La5PtBltX$5YSFT7K)xZ~{h{gY(oSr+0umfJW_wAI)mAX!^$Y__$S;V4q~KVyYvR`fWH>+Kr=tn4Q>dL>P*aqJK~&E z7xPZPR{n<$hz9(Cvp2+cWb}4*e@gfkjpuG|MfH zX5z6{9aMhgu&<_Y){3U6A%A0#6h^>b^0mp>ADgdq7M+v8M-o>6NBgT1Vi> z0R+p?0m7BN%?=I9p+a8~GSjw@ux{8%W$yaCaPTeCMP56o%NOr zT-F>C@v41AhxNCy7Vv>{V|Z&k8A46$t*USZe-d;;SJJ09;~aQ|3kf@-Pg!H%9P zxJR6)#EH=pXi~dMOiL!xIPxt9+lIcPPA|;ux*Z;%nwZGyN)mc*&f_l(jfaynFD69J z+~>U65R^0C_*BlUpE^sN!-PqsQ_Ovt9_dwnr>T`D2)8DPm83AWLq%JNY%6r77o#(x zW3qqJmXQiu>TD-O|EcZqDTDtM9VLfWyNfty(M1tKXsC9#?}hf_2~$j98?;bit;|KS zRt$C%D6OGIa{3%GS53%wszGmf>+?s?9Ao$@Xc(j??D6|Q%0>+_p!@Mq+8 zDn|=8w?n}#XJOYTd3VN7+uPXxSK**IYmLB<#Qh7BlCmiQLP?{tq_JkD%FB9wKu_8{#485@ zGaCf!6rpW>;;QVi+%m7%?BSnO(@b?Ch)aL2i-}go;|&MvAl>fn&)+qH)Q})JMz+uv zBsghmsx9WZAnSPsn*)SFT6hKHpjP<5mY;R5c#ZX@(XE+0X~9}in_lq{$Om|b^tv|V z=aPZw)4jf;IOR`ZGKw$*)}d09*6&@>#CvOaoH`Kqfu7x`c55HD@2B`IuMsFa_uZ{q z#%t6vlPVg~BZB@0JshQ1k?IJMV&lUiC*p5Ev>#-||LM!mgU4w%vd%vp&zg@GTZxT5 zmghPSa0Hp+NhGUzj}1mr3zo+jAXC20J6S!|)%RH2Q1(qY7I50DL6%rPKXvDr@i_E4 z${1Qk)b|(l#lw9yw{q@kOx;^lY}D{3YTrvOpP&Ro~FE@tmy?8?#DN3@dMZzA3p!bUJw8{Cvf5;ep#{v)zCuSQWBj!ccnDHUmC5R6>5 zIp6;N=U*&ETv*>D&)@nP4CKELYWeT&_n#&+0VjZ^(f_0vsYq*nbHKbwr5GGj=I&xu zDi#(55E1Yi*Oo{^s2dyb3aR;H=3s;AdS>)NOurB6c9-ip>E;Kwh7ztOPSh`uKY_e_ zUe^ z)@@-KAtWkOly6$Y*eA+genL_xZJ-8+_wD(*av?>FLg18t+h$!~6)wywCFNM0mTSCZ z`)W&_K1;KzUy2fG(Y@vSV&huP&%Fnki5`}-qXMdvtgDZzHQSCOjYPxq8^j}0nogr7 z%toOm#AB*C$AfxUtPI=gYK>az-{OSDj}sJ^D%m%g2R(=qKAGdC<`kpa({!uh$gWi^ z*KIpLKX z=$LMuo>C4?06`%95?{ibtZJQFCg6#c-@f?}tIqc=4M2QUUtQZ6mvUh=ADB;0z6JqK zm|3QJ5J3%{6yx;}YmvqVRMqZsF+X`avEB}v4`&DDW?I5XLlc)32ZTq$g$Dz}Ic_GL zh89^;SJ%E3^ggg+&^+yL%Ie#Be?6#E7#>FFSndj ztq%_}SklY|1f;C0T2=mdOFKW)g#UUqxm#w$wJ`en+pj7qGf0iOZ(>`1PIFSzGdmML zfAQosq1o0v1fQ1+YGZLC*d0(svK)wNzg-P@53)E{al+ZK)gI2IXTe@(yR8vjs1W##3Ivu&i>lP!Gjbfl<1bl|* zFS;z0+GeasOt>n1P%1Te6LHLsz81AJ1!Sr~s4!I+Nc)!RW6S>Lm+S|Df_BSTwnfLa zc=>^QWt`LHj=?~{{%OMmO$^1fRZ?Uqw$Y#OG@mh_<{!|h91a&Ght)ED>-8h~*>&-z z_z{{um7$R^|Dc^pw3Y@nHzMA2(2muSqdgALpk}$(if&yOS_wu54@33}#cPAXn|C2R ztE(k@OC99$GMgYodG|^~oNu-Z!U5ojUG^8EAma=l#+#onLOY!jwuk4aLFzr_L; zsrsgquWYc#IE*1s2qXr2#4%vXUmM1M0IduGF>cqq1;Dea-+;hP_;)^MPF3wvk(ebCP6&OOZBJ}ASAas z9*Gg#)RTXO5H(Eqx8sa`;)`v~wtlEw<*{sc52#w8F55?PLwiV6{%2P) z(Nv@ALargtID(^0xYzQGGd~Oq_Z=k#G1$EDAPtd!BMbDiE64bKtGN}J8u0>VA^$~H zO;D|mhFCkRgqW*J1t7h1A>w9OAFlAorm9j4vi-zFm&E3{C|E})PLpOZ{hl6WkEzyW|N+2y9QUxWZfM}0?Q zt8atcf4<2BV`~42l@z|Vm@f#JNlL;kQS$)`M_&N$Me3a?Ye%eDk~bhECI3J{MEHgK z&A!U|?YH;L6DF$FIJRZAvi2ZCVKc%N`G<(v;a#u!^Q> z_D8!vyZZ;Q_ah%qmc@un4Z``(1@gljwy0J=%$4B?^Q(0ajsYIt|5e(Vz{Rw_4}8cH z*`lN(Qlg}kij-)jl@?`-rkXUGre$VSh&wGJsq7KCQdyHMNg`ZAn|;f^B(jx@o1g9f zyfe+zJ9Exy@}K(|b$y)gv%JsyywAIwbMlr?pbtE((Wt@WyfDOFD7Q%dqJuoVI%EK~ z3&nRZ3SF4%^L?&Tz4G#;)4lZNMjakCD7>r5VFk9c`ubs-)=Kf6^K8Zj8}_L@YoLEB zaItr8=rNU>OK+|@O%L1W>TJk75Sq|W{YJ?DEPsxJuiXFo-a7N7>fO8Baj%lLelw`I zsE@rGRrBr4xB3-NYCAVB|M4j4pIPggB8FBR_TaOZ*_2wnu{E8)J|cIpPi%UV?$GX& zeOG%g%j>`MqG{8T+2!>K_v#tT&L#OaXQzK#A02zLzveRgV`ubq<}2nGtiE&C{;j%A z_4tc#my9@*7*^Sw+P8X^;*O6!`5#x`*`K0re8%wU&ne}76EE=S@2A!^7dD@1_-A^! zXZdvddS%suE6rQGe0(@#o@=i5I}P6%hWnotZ_DVLX**Th%jLqW0sGh8G41gs@!y~4 zIwhM_tz|lxm}jcFHN>yByD?+!EMx0f)6L6jS6%!kpuyPQ@MYTPEgl(K#%j*0KX*IE zT9u}|T}U~c<)&>iNqN3g&7!8p!-ou*Th{+CoAK-NSw(*NgQ2@$)2=U8y8dSS`llMt z{rO`yUn{@qJZ_uSzM2c>9v0hD_BQFxOj~_s((9YIrro+>xJ!5Hu0z!qkFQcJ3iT}5 z|Mq?VuRDI1*+h)7)@0h*%uZR`bJydq%VYaADcatgskLv-2nUn$`$gYN=pN3hTOWPW zpHrgt>EuEEh0X7DBa_2VHaef4XkoFn>ch^)Nv1sByL-R$qPlAK=pK1+Z)!!jw?$!5 z))RjE)nTVnep^KKN<5|NXfS3^?=gnME@}K#<#z4%rpB!ady?fo@|V4?+_qtu;p~$m z=swo|*M0@qXR6i?JbroIf9nJK-+Df%cJ=-4pR5x%Pb+-2{f4);WmEXqgl#1;)rY$u zzh9U#@`01rO8@#hfyxh5_fOVN|L^5{wd5R~4V4?N>~{QTn!zRmR=vh!*Libn$Ghfi zF?}>IZ{4EAb^G*sS^GNYzQ`Wb%*p80P*UQ5$|*I6=j%N7t8K2f)8?3S`DI*Fy-#;z zH;+z;UGHgDQ<7TKzxyoProBAYm3fogRwyLBN_H8vMBm8JNxrMw$mgSN4-Q$Gm3mm? z=#jcBK|PnHt~#rHW%26KGa9B{UU0o=?W)A$Sc?anXYtHl=O4Mmv)F%pz?EYf*H;ES z|9kJ^)J^~R=f=(dv3-2PyBf;_dD)idm6y?mdi5*+u5|F3ivHW#wpvZaW(DQlzkK`L zfA@>#x>ZH2naBI=n$%CRK~B+BaoUY){@x|-0nQ39i>KfFnHwi>mHpJG`FP4*BI&%+LLts>`TpFS6tMDjbM9eCTQC z*Zkh4y7M!QAA5wWWTq7NKX>S9TJ+p==9Y*26h2)lbkyg@Tbgk7W_lfscsT#rn+Y*TI6b>JFOAHY?8exu%3ohM$`(^3Rtju6G z_xtHdvBshAwy`&kKfF}#_}$VQwWn9)KYCE&DsNzUC90p*nam!QX==y**7)vdaQ1hR zSxWX0_rZbBf-fl#wi!C&YQN=5Gbh9?|J5hUdSupln$OPMs+-Z>G`v^K4GOHR{6Zg` z%Sp(6F<3o&z_cNk?#16%GxLp#d*7{Q_NPf3PrO<(c)V3*(ulRO6BY03KC2tAlyjn? zyrihxywmKmQ{QyH^1eNq6r1I@d*OgDmM6zQEqkQ{dD`r@{Q2Wu6wW_(Zg~Hro8!!W z>VH?9ewgo>@Qi+H$A$9Zyf|(bBbE9&F8=3u><}j`5jn}1i;VHbK?Y=vt_JS6pxKr8vlWT%j##ZWlJr$|wld1l@ zSA0mi^@NQt^8Sh+>!+m@tTcdm)**mC;p)J&3F`69$zOQq15}4~ugEaTKQZ{ImFG*P zC_j@+fja_@^cgy4tggcmoyp}%3-^V7iVHoW>y=c*JN9IX^4#wC=On(HAOGM>Nx=Q& zr25E%X6D|R$*auj6n8uu5V7h^MZvv_fe(%c>}vWDRXEqKYS+7{Bg4H>>Agg zUzS(rWexv*l>1Ym>Ic)(rhAaw?u*tp<7N+VHIG=7vD^%_a&tpOPIjtS z+JNCkH3ojy9fkx=AN%jB&ORAB<8=D1S)${rKO!Qvsm8Cq)@ZI{{)|t3qeCp%tM5#l zcvLO_aSWL`9?42Q~!PQcGVm(_i7lTx5ed6 zCE8}})LBWcCsb}Ung!hFAo!)_j~+Bws1bbn(cW95UtI0Itj9RIIT-$`puy}~bg4WI z-69cxO>37s{G$c%RYL!|<&(oluSFGK>T2!g=wR>ZW#H=2N`S}QN(hHH4Yz!d@I&xB zyg!}Eh1y9Zl}1Ca@Du$j^ixs%Kj@kp@PEQ<7|~n?n*(b}a35Kl%Oyp^xtf*_y1Wxq zw8G1SM4PIVSHr!|ZLT&HUmYoUQfUV+og==K3ySlY*rhSykIh7K&`(hd(P&8LM7T68 zav^qwq?Ndyds?mtriTVZ!Xq*$FNMv%mXE-{l9vXAMKUO_A1Jz9ploMY3Pj3^MKjs( zNE9}mMad9`Dgq%L%vu=Iu_0-;3MP9#b{!)+9G=C3W+&|kSH~b5$RVNhXi6)FVxTH= z5VQ%8#ifp09M%Kwp+s&Kg?<~;grP_c8-{7-Kn~*uGr}U73~HJ#MoW-^CQ}fglZV0& z3W7=*upC}^IE%@Mq*fPZU~RYqpmVi)QYOU)i>?<$ryViCU%0eLtqM+BPD~1=a|43g zGYTga6O$qt5j^Pr)H>ne|A~Yo$amBrP0UTBVNsUA&!T7*o+O}3+~@{T;Rl7oB5E8* zv=TwBA|48dFs4jy#|NV)7=U0*kQ~dI1`JtBYDL52dr2;XIaLmxMCg;4CL1 z7WP1SDqrJcz)AuZwOTU?%ohCNOf%}h<`>UH2sSi%>7a`^9n;^Js) z@8)T5z>Vg%sxL1n5jGB(k@O!7R<&^PDDh=9S`Oa~MiWt<6qg9r0bJ%{23lp-B{-7}rVq!6>B=NTPX?D4 zE;@=P$qR2>T;2e@-k{+yjCTx%Y(fnMJYsu2y8Zm3-vg>ixVAO#p{9PQDx$TPbJiSq zVFHQg3RZ>qxPe{<;Jw!229a!_WrTW3lAywLpfg#Fz&3l9lJ@4^T4t&T5j+(_uXS`p z+(Hn+wkpEd9kRs)I4_8s_}PJ&MH!UGSo^=; z1k=2sa}LK$OmHH`xiC49+{xnc=C!CF=YVA^mC&|06Z1R-H91)f9ylMY zx_qR`0IWO-2@%&#k0FA!lqxn59Vps71jQjSE^{mWmjal25x#iCZdojWYeA7WEK<*S zPxZ6Kz={Od;eFwGlmyQkYG_E_#CqNNlvrsAgZvyQeeecNj}dWNX6nMom=P(MD-hFu zDh3`7hTOjyM#~{sgZ7M*piwyt6-4JuHx_t6q#XvuaEIlm2+KwB)EfEUj=>3tWQLv6TC?S-PN@8~|~}E^d>6wQJaor)op>!0#$3|8%a0=k73187Chaa3J!SQ6Uf`s<@GuaD?)uJai`1}U}&xYi! zEn>mX9KO*`NgNmAbYZ&=yOysXRs<387P=5bKrLbr5GhgxC`J;;ai7 ziCE$EfDrmZhCwhllqH$T4qdhgI}Uo)L5t$m|NL?ZmUz9%Ix>#j;61a~+~hYjLroYT#&?n|RNj-=5BiWNa_lfRB}NG73(u})Rv(=Twn z4Ri^d(c_r}gGUs;h>^VCu~R+Bj{!ue48+8?tekye&^uu8fzi4Mh-~q$ zlV(sj#gP~LJ{{sHTmi}q%qdHu*;-e)TIanja{=wvzoD23BYShKF5U75pA|wE)5Ju~ z2NNhn5SxCqb4ji;n0;Q#egA%Fi*sDaCUsx3+Wb$daD57V@!+;>Y|B6epSD{Vo1_&u zx34sX17aCihi|Z@G)ZEJjoGakJ7xx4?Ey_-h55$d-?jvNLj;~y&tfrH$nQMpHi8G% zqrVUq^F;F?)D8>QTkh2aIflK2Z^agg%i-64`BPcMR?*(~>5b;*gF)IPkr?=y!=L%R z0@$+ z$y3U4rAH&Ywh>uq@og&lPXp)dhc2#%kxhEaMke;m>|tKZ_rdC+3#=ZF!nhZD$-*V3 zE@${Gg_@Lx1{J(1kHR}%TN4u2l*r%UhiR~M0aFk%N30tcB=-v3djg8X$(X`>Rb)kb zz_H9wf7t(IFQlGNH>iAzp9;bl5R!P@yj7P~7|L+MOiouGaUc4PIi`iP%O7b$>{Z>(_R9JoVh@Z|_^=oP zTY4l}Ox%aOS`M~o3x0{QW(Nd^!JDSZJge~X2Gka|gcoaLHZSzTDOWZK$SZ1WqT|)Im~s<&UoDLg4s7 zE}Vi{cQ5Hrq_m7^1e^OvTIS27tsg+z6p&_!Nn5a{t+du)K#QBLYdfSnzXaT=y zk3fPWn-LAWM6CwcM#9q%BbjvKkRJTSpg0q_#qia}`1M-|`GO+~o-xqCp~S=m@~5tQ zLIAnKxUPi}FJurBVe-zR0-pS&$#@0%_&w|rkHCPlwh;oo;E*!)#F25osGBi(mDW=- z1o^uNk>UfAu$N@V2%^IY*coBajs2M{crpNkgWa1gnJEiZa{Wv|nlE%`ybTre+L6YF zQ*bCsDESIM?2J!=$HO5K@mb`i{nUKn5+ODH_28(B3ec8*U;!TESqEjJ3l?9gw%NU0 zoGn#Bf*MG`yXf~r)Di^2IF8aeJ?fU;MiZm%;2a!IFO&gpLJ7a6ypaW?D=iPS$7fyE zN2%d%uu(*be*Yn!=?B!-e@pcv_sec{>f6^0XA# zyTLVh4q#rVW;-xhFnD@U!LuCq&+P|rYfv1|zLB@6;htfUTnH9Qx>xO`w5^~vAC~v= z3Bxt0(g?gRJl@1H6nZ6$9>^rwyBVpsa7KS1f0o+#I{J{3EGQu1pl^%z6z8YbZrI^q z3ITruzIb{Z^qf)zD!O3MquBqm-e5OB8N80RKJZZ~;{_#}^ie*NqxMOq!SM$n&S7&y zV&Redic*4bP@2$Y*dt42?`p>W>kbAuK-!ssbtz7LM@39$2@YKgqzX>Ew!3=XO?{Jm z6?EpON|O2C_I=gC9|qJq;iV>Cp^mA#s*>^-MOvu0Qv&$3HS)ls@J=Ars4|+cn?7b zCtnIGo8^~m4~fYGN>4oVb(Ze{o>=$NZn+=0pgX!h0EchvB|DtN@jnAjtndb{XG3)2 zxnpJ@nc>8GAGY&~af10&XkW>U{Z&N_|6I3!lMU~kNn z4d99ykY(_N@iaq9u<&*pR0Sf{VS|?$1b5023wfda*PK#_LVFN|FRez6lR=0pOy!v2 zEI1M`xb2{w>9}fOc8_Ebb{#?Y+YTL<_`9Z27B=0Wu%3yf{^Eko5pp==L)nd zj?R|hW|YJ6Eedb7F$2-3v%TP6*f1XHUP89vx$0^V(g|uAyjd1b{v$!e_SD}k`*@NUv_g%AjU{SKU0NzS8KNql~#-@+ZhYX;sh zOut!l0{sN7feyV$TZ>#*aI|X-N*ru(A5I$wlTazwwajtI3gO?qlYbaNBjhSd9%wz! zBBv2+_R#XyT{t&StAsD!sD>Ou7P_6COtB<|k?GzL#Mfci#e-O$OAe!6d^9*Pc`3>u z8(>r%f;B{T6e*L~R&&i=zehqV^ng~t4+8ryB|`DoK1^<~Gz-OBR_y^N*o&m0gSEI? z7vXrHbc>SA`w+@&dDamQpf&;uFM-^a6QHoWhJ`b3qV_=K&-Kp-egkR|Brcq+@Ry8a zf_f8?Z=cW`GY813K-R-r#VuYoGO=5)o?~q;0G=ZF17Fu@Oq7jFo+28SIDPC3+-&&b z`%!OKw#Rl0L!}i5&RW5e6-AYRe4}k0c{CYpD1k5Tb&pl;$w7-8U|3F8p{wG_TEqa*ln(w;}o z8Lbc!Lj(M8DSTJBHAQykm=NRluCs7}$u>c8hY*z}>Jh9d3H$iNdGu3=vzXG%@RKv5D6pV7-Aa z?uFp9L@exBh2YkMPzDS{BvY2IH3w*x(DPHk6E;|j)tqaeE?&8TBn*ez9Ks^S(n;jW zn_OA)0p$JDTXMI2(WQ3f5j%*lYdaP8U}$F`Oz==4`!IkrsP?MNjKVK5?e0$Zb?!5$l=*pULsUn5En`mwdc*D|jYMOr$%5(BGb-M?4Wb jL-K*ktd0)d~ diff --git a/lib/jsonbeans-0.5.jar b/lib/jsonbeans-0.5.jar deleted file mode 100644 index 1dcd9d85904bf3244d82b5fb7d4a92dccd9baae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49943 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 diff --git a/lib/kryo-2.23.1-SNAPSHOT-all-debug.jar b/lib/kryo-2.23.1-SNAPSHOT-all-debug.jar deleted file mode 100644 index 30112ce39a1223370fb35ef7418e3f71d2f70ea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323639 zcmbq)18`;Cx@|hPZQHhO+ctNsj&0kvZFih>Y}-yc>DT``x88a0-go{wRd4TwsyVCn zUiGc4NbW-x-401y9QsQDNs`PT=Uq66= z9^|GbWo78-=iy}NsAr~To0J)Uvg{r?(@V?IO3BT;R)RvMpJ5H-WKvmzrX5qgnv-K3 zVQ8SI6(6J1cpQ^mSlv6{Ie!CEl!1U0sO1fl`17xSor?eVVJQF1nmE`on7KFr%$%)E zTpY{+?ncgL3^vZ54h#}z_Wu~9H?cKxami7&Qdv|)<+BP%P9*MviKGH{3!)~bB&2u! z*kxZH*fW8g#ZE0w>h1hRlZ}LBCjME>@yM}qZe>zB}=Akv#9Sa5r_0~z7 zO6R}6-As)JCvjb)!%*#`#+~){p`L-2BUW~(-FOZI$I@3vA6l1{s`CS*TPiWIZk>~rgV;l9)!kK2ehxq&lR-(KJIy?ZduciMAJfUX3+Re0&b zB=$P=cBbMxt_E+peGT;Qh?Y*NVumGREwkB@FNumu-Yo8D-W05s0FpLS(1om@GXCdA;n35$g zG=%_zW_t_x{YNa!;dp7Rta6fYinV28hdtPkz*J%BJ{1<8D#ZV7a>9V{L_#(?um8zA|M z9{jFp-Xog*0}AZd+`}DCT0x%Rn37IMQMK+dN4WF_Vb|TG&yy!+b$f=gTHxbCqa*kL zHIGa8@RS6)eY-#BN-AM|C|Y$}+R zc6k78<_t`w7Z#?;(x~h6#^#*8IF=FtlH`inpHP2!8GI_N4I&5-P&D}8c^Us7FLQ9V zU~n+D{^Lcp*vQ4oghAfSUFsjBCT9P<|8w@gd{0?RVNek9 z3w=(yg4kon1DtVPqi7U^7)q)L0U4PftuugaHL+Fyw=_zeD2nfk1eOI2_3oWv=FH69 zGzSaM$Nl>)X#a3zEWhkG*1{dgHE1G4t%Z6AgPn^)cA9Vk zqFBpR{oT$07I@c~spdz}72cv0(sX4CS=aM8<96?c^Ono(Qm18KdRf{cL@4K{l`GO? zC2=v%DFv6Hdcq}Sj@K7HZJ$@vxNEpnBCcSvDLB)9gvqxc)0p0(1Y-W+OyiQ6iVHg@ zbxMVTg*P10Ys8*L{CSsluefasVZuwQWhIjkUaiW6k7}echhWwag|b+c1LRHG@eKOfOC0i`)7Qr@<#pi6B(fL9cq z>w6fqoA{iNE?G;tmrwV50sqP*+IJaPP%mJJV3R9NFnp@d@x?}C7Bo)MNA2%(eKj_2 zBt_j83a^|vvrAQp;!6mP1!6Fqxme3W>^&oz8x|AW;BG0;Zs^;|CU1x6>hIyn729iX z4iASAs3#jwIjuAFkZ;4ioYQ7z>5lhf-VIz@yWx&a54Fl?hFgJ*zYyU4@?6{n;`)em zZ@Lp5Tb81e1y2o8k`X%*m0at04q>gThsu!;S7jPcr{@)#82++!Nd8CC^&dNO0soz) zIsTocoz2W`%}fABE_Mt;CMISsE+T*BI9UfHQ#0p(nzTj(&IM%!jZYzwP6r7Sbaj;z z9ufGRIdr!a$_=-F*O(Y45LY*Y+^ENo9VT&Es|HneqgZaS)Xp-C-3~d?uf*WdWi$Y5 zAeoBs2{z-b?v&x|v3skMdqD!1zh5RN;7nLCMfz-51l}D;o8QaQBjd-o=c3|Dz{u4ve-MrM+e#PeJ8sCOl zu(k|G*TBe?p*jK!OuALXKm?p2OY!my_bgC$TI{^+c0phvTO`Zmy3}S|vYkfM9k$b` zn6UZK8lvVxzGw+Vb;XTAOHsuwKIs>~BEwY>V7z&?@!^@^JIq!ZZXR^%=2ovj4_!ld zK46-%LCr7<;nk2W;0=65Jt5JI$x~{`J49p2_&%}+bFI+%tH5hLG9-D#kK{!^XnvK# zU4@kf9TQN9xhnl~nTwI;P$? ze71*7p;h1p$|a?Wlk{>ajy&M7bFqhh^z)Kcm0;l6T{SYsw!`J6>cHJtNE|T@NE2d; z9KHTttx+4IWJf7OJ*9P-6_9zSB?bC}svo;Ho6t+K40HH;Jym_N9I7~<;AXTo9f`aX z?DN=o`scePiK7ntIz;BTbOGdp-pCHx5%P;SyLLeL&jf|I5r!L<^NV}{^_vc=iTO10Az8l${n=&0;(0aOA+ zbPnXIB?{{eY_8j1?cBWkHWvuBPLw98w0iJZToG5Yp5OCY{Q%_(5RkuO75G{2GIl7s z1q%4-Ioa>p;4iH1yai>80-pQ5?{uQyx!EbGPunAXSLWZa+zcc%+z#_*K0`Nd%{u&0 zcpUOsxcuSd&JKNE^yp{k(p~30XZeN~wqE9!^n~v5eIP)t0zNFQ5lBx?bfa>az)}e3 z2EJ!@#AvqiIie`2-~LQDajz%h+SztY``Kzlpx}IaLuJ7WjHkgVzmI3p9q67jA183T zE)(Y@dMgHw-4B^Nw8%N$!t9>QGbT76<`)Y```aP|Gr-0N+68cxSMW)|l{8AO-!@kp zljo)5xgyVww>og44_Ii7;^Y~(q~IeMgP|>T;tkNK&$=ueCz^R7zhzG}U6n)Xq)JQz z=oT{i#X23cTp#j~rvJ2AEoIJ7&WNt!B~wk6Kz^9$%3COkao7;6(_1}==BF?p$(EF- zbxe2X4CJ3U0a+dIZee;J8|N6+Wi|P()JYrbtlEpzTN_B?t9s9my%Tu)dcpii2xAey zO#ki`_STe**AH&|_A{+4jI*DDU~H6giSOA8tz;=@BwpqF`OI|pAPkpH(A0yH_y|hs zEA)kH?73V|gk)vlB3icxT1>)EU1H|eSI*I~%Y73!`rOm*h$fdM4hMIpN{8zajoU;N zR|fr3b^b7s;fm;kpPuQJx%tXezam(^Y3JUuFXVahK}?&xIE?1|{74Wqtvn-;wD?Sz zmt{xf%9~)QG_dI)^;5h3pm4#L$G&GwAndL5c4AYv{EAfPLRzst^y|1LZKgML~$FetbJ99;n-mag_TW~Tp4 z%Pp$2DmbpFzkQ%4>{CPHzawV`FO;Ul12xPoqZ8W|7*c&pHl)$dj;A#un;4xI|2hA| zUW)i zo?z~vK3GlG+z-IH!>=R(*J4$ckf4p`OPUU_j!E72aHm`!uTycJ_yV@GlNc`Rj%@68TS@Zid{r5(W3ALKfPEoa&oHCB zW6u3%eg%WOgZ&b3IkgVA;i@vih&EF}N3%Y5Vk+V!Yr23Wp&kj3_12t28msT`w=$x^ zxiSSd0jo-6KTkDTH7~Hg;)d|tki6L-&^c3!Y%PIpD?cC(McZ6y2sXPXng$Ks>_75p zNj7gYZ)u)moD>^MrJvgP&~#(bjt85GJ@)`XDAt_6L#*O%)Ld+cg>$PokP`*-O066z z_4Jh{^z;j`OVpW$8U7vA&~I3V1Xa#fWzVj)M_dgVtTP1A*;sF?0pVhBpTXcEuS{QR zRFk%-K@RI_@pN#K66~G?n_RKZ&g(ziAz`1$#F@<<+Q}A7#(80=Ki8B)^OpX#7>}+$ zHiOYlW`c+8P8pH|CLQ`f%&@mOXOWhICdG zY!LuiA`S{U@7Mnn-pWg_!hmGJyfDBITZh9FtvUHc%}c+pP`Zh#XQ5}T$h6-X-K@J0 zxEohas<4Czo9w1>vTi@~NrUI9!EHEX;@vS~^bEYto6GVA-*Gz!{c)pOE&)*TuzA-s zPQ$SezUik)hB{Xf9YqpMOp$HeqKfVWxYp3LA6lsAXA$`TV)M+=S!$I1lQUQZhJK?a z#6QFGZBWdK^o*TG;gUE;e;FVaOIgw__`e?Fyi%0ob7qD=`hSsz4~g`OzNaX#{3cje zZCWtD=(+@I7pE>=n}&sIk7c!2+%E1ODFWb3rjKCP-H|ho8{yyV!AG`7`4+O#?t*NN zS#+})%-zduN7dZ|89bQ!M5+1AR^5U0kcE8n$RnZ8B`M#PrbV|=IXil>_C}+rA&N~X z6H1e!D-O}OMmjNiV~AFbWsy8N&2X}32E>kU3~v*?hr>Lli)_2uDD6S<15T*QlWe0u z!Tu`I#lH4J%l;6d$-iaCx_=u4{!cO_YG!WaY76)m9daQRaj^ZXjJI;IcM-F51bE6B zIsR+`L`=b#%@VZj&K%;gdl{+pOZDEHybyj2d?MHw^p{UcT^Uov=c?Dn2(lk1!$rq@rB@{PK~_^z(fa z^y+0&+?rXE&G#w~2 zQk(#BDFw|7o2%<skb=} zXC_GSOv4~y+`!`WiiYh^+57wTwn^<~i9T)%X@>pc;g~!ivPu^Ry6eXC_yoU5&x!7x zF-O~z=7xGlagzN&{=&;u8mUd`AMz~tx8zy)4_^LeHO1Q5!NkT2z#y&skGrgyg^`Kp z|6EZiQL|G)(LnX1AGU3z2i_}LjVv^V6GBN?k1R$7U8p2d6t)8K)k!6zCGVOs7dj)j zx0y#zcU$)ZlnN9J6fK@yi)%{FA((}F&+?sgyl^>q-@o+reL@j}=!xOJphnY-S6U8~ zQEM|Hjd}W@51GQMKwnQT0$^FFU$i1-D_(I8C_VCb3nJlpmE$$$qqrg{C11M(!Jyui z2MPlV1IYq%GkcBX)u>~c`dZDfx3kaexG#WjPTC&v_*CYvoJZL>s9DW`H`)b;+P<{AB&4VpEw=hz(0WT(x9iyqahKapr}yPdcCQns&ox&rTH!`WC$QZE`V!-?(2 zh0)v*V)-s=Tg)`!FeAA>Th+)`riD6Kq1M@3u%LS*5kLUiVbQo6#dD0#0{3{4-A0|x zWQ|RsEUfdSJ%etA313J5c(1VUWV+G*k{^<2+;f>d51e`^*;It6HD8u_k;rUy&ryy&;dmJmVH;6#bxdfF+5-=}r)j6;OF-rbW~n z#M3>9K_zY;^St0Lns`%ATnJ=Psc z0nGy&ZQnL=9(|KsF1vuE-y`1&V0iklLIYf>e_G`TNvaAok)#i8E8Co7JTjWyeEMV~ z2a?HQyq_nZq>~sXW`3NGJ|gM05ln=~-PECs9lqwvEueWQERZSFW|3Ob!QGHJe`on7 z5xity;UelQcYk_C3Gy*MoA!7F&wq>$kc7>{eUj*Nuvmdi^_f*TyfXpOy?OV<`9Sz9 z^tix&b;5uG0m=Sp*!=r-JF)*bRsFYhJ2iV3BXct~fR*jPauV>LoU}4E9rt6(E0XY5 z$Uqy?Yn@V*5mrR<(pUS&-e!Y-Dmvt|>`M^g^Shra>$Q03o(MMxiwpfpuJ`ebk56w8 z2%jrIVgLWstV<-G}(Bc)gJ22Z&yM% zj!dTMHmmo5#OA%8n8R+30pqx#a9KPw*=38_9d$ zq^j?7PgjCd%Ha#ILIXMOPmFbYT_osF4_dv&i+HFo7r%uu%yi{36}Z6><(13{#2+jy z68iM>UbGqp~Q7I`(^mTo1NpGr_q@ zH@I1lBpjG-7wlUA@J#>dt`6ll;1Z(+)j5TOth#$;b5n6&m(iPI4|cjaVIlLWp|$Db zORm1(6S<#HCl?$*A|5sQ=#_zt#L(|^vrPGd!m8bt#?OlBLa{`#5@?v}`MXSGC}7{B zAz8Eom|`&{vIjWqOXVyQ2dYAM7$sGfLkAR77#ByC-5j>+HJ+YOYsUZ3gt=FFIno-w z>2b|iqpXSOmNVSb)`F{b0$RHO*G^K*?26lDp>V|>S&7hrohXz1@@D`DcwC9@16 zQv*B1I(D@mO`s-Wb2N(VFiY+*L+ipOvoWZOQqW@xKHlv{?9ZR%8Ue8V$n|E}{ zLTh!h6+_P_Ap*{CZ&1W~T+Srtf28hBt-pUgC#SeYi`<`S3`J}}7m`0I1BK$Z$gb$> z73OI>@?s?YF0zmE)Ek{=F0jYyUg&|GpZ8btUxL z+WH9?&;uZDDMVVnHx)lwV=)8rL$Af|JO)H@67BNa*s-x%jlgXnxh$KtD&rXKTet|iy3ku9vG|W) z|0w&z>iek){E#;o+64U}#RO?OFT#tK)I%jz7JjJ4%MszIiOS!ejFwq=c6^%t zG|WE7(&~WJ9TkRH>8T!ripQ4fzg%Xd2ikwu)BoU09Eh}0?V znTKtzTMaqa>T&OAFIz*}1~%BWkUw(K=H4sk7`JMPd^iwu&ED-PR!?#nw>@rj52zx} zi9S+oSci7)FjaB7eByA}-QA+sZLXb?x~r6cb9Xmjp9L0v<|v_OefYI-rltwmY4N}# z2*=64?rD~5j4{{AO^tJZ0kdv&4Z?=oT=cyF5VhGK2Z&bDGurKXFt&^D87=8J9%b)V z6Wbi06HagE;6nxbhy%C**>erSjj?8`sF>XLyQP6>cx{UFPB`v>>`~aEDNJHKtZZe+ zw7rQ#(@&zZJ8x`HEZcIHVhK2}EvI0N7NJ+zx1!__#a_tsEqlzzF-HB>L@_lv=-!Dd zMbRJ~lX1KPk>IFOO>=UQCDZZ{0RxiIijaZY#b)^P%Fd25DbiN5N>wc==B{A5EOs5 zF-B6m>|eKYYN<4E|814L1F+~ZkOL)Uq?p-y19>@Qbzk{tn- zrbcfd6;W}*<1nSIYLC#Nwm*oCOiDMG{G2KvjzM9*X6AkM4Zlv8|6mKu=CrUy5nC-# zr;Fkdy6>2b=aFTGJaVpEzxmj9oGbQ`DQ31>*u&{OdoX0Rfn5{%8R9sQ9XW1k{?MXc z@PqN?@Dks;;P*s!paRK*kxsX#!GsuzMr z8btJYqVOc#6j~|KJN_0~s+*WW4G^3~Q77tE*~}@(%KiP(6jt?AahL6k(Z#W36dVA3uCXCr`_g(ris zk<0%jLs0pziGP-_DJps@C`_n)1tFo0sG3NM-v$thzv~S+h+&qC=@>=nomMr`HPA2G zr*9==`K2BN#UgwG`6nO9l`DgLI=YcloNRh4BxYUC8tnK3Io9WjgKNcxu%b8oj1$^C z8Mgv(;#=w-YtFyMA0&*9QSnOcSwYWYDwjxe{jO~vGjt$$AM0Iw911zyg0@ zj!q${tlY7Mi9Lah;JD@=gUR&xpobtMbB9Uc9Rn5V?0hKDF83H|lvx&yyjIU3QlV?F zn@nj^+^OjAmq|XfzeJVPfg2R8Nx1Q8l`i%4B*YAD4N`2sQkN6;_N$?Kn0&zDkC)4+)h;*N@x*5isTH>(G=@NjzO_lj1#+iBn_xDJ#+-m zl(0%U=NVs@h<|;g4w>L$|6rJ+^ObEM0K=O1Glzq7ZJ+{P9_O+EyHf?*V%mS?6vPXo zH_(@TPlxpx%L%v5s#zYz5yBmc>-Y=3j{}L&=EX;3A12YQZh)W1EPmq?eDV3akPJir z6tIaYWaIw$LPy#uE&N)o;$!aG@GpnIfI2w=O)vfjsIPxpvj4qI?N6UT%KlHA;Gfu> z)`s#(URv_I$ze;9Vur#ZoPs4K22KL924y1+mx2W!%mgB*L{9uBo+K+v4yFr~va9~$ z8$fK`fQ_04N)6fSTA}l@Y^|qVvqZnH-Qo&$EO0WDbCe}J*vB{fdot<6cc|b zko)%I44R^MZZ}{`r$InKem!F^`b|32xjcY#^c@__*>CS3+wpAgo!r>H27xTz())Lh zO%uF5_%6S)aws@GP+Y(E2O!*8_-gTo_Y(^iLc|WZFq1zEdjlsca4!ZpHPz6DQFhjma&uL9%jK-c zO3y@s0-**`5}~!lJ;Y`RFJM&toBOn9%#L+7I;>n(Y?4J{=YpXQBd<(9tJOX8Hy5#T zF2Z;<6k8bDQ)@lE({dZ#En(D$V(aTRS#6~m1suLAG_%Lz1y zL;dq_(wf>9gu1m?3OYFc9159JmZr!R-1C)6N#qDd8s-+rG;0!&YZ1B_e~41BB{vfK z2;=c}CS>h$Z2!BV4$Ij!ufQt(E~klzN`B57q~SxRp^OY{i1oeP`zfUE9NOia=ACf} zYS#i9WQ`Iw&NzLhL%mp$w2RGhx%xwYN752=YcO}k%1qA@&d@iu3&`o zDvaf3RqoTtczKGR8ucX^dP7OZ`kgMN=o(AN*040NRhmj_AOdO%SDlIy#bxZ&IaE#_ zOWh=vjH%6>XV{aFOeE`d7Uf=(A_b{}CRzA;Lf*<1<#XZcp`AbXQ7RHoRMz?xy7bYt zB`%83Lnmm)tG;T=CZLTUJJ@{+Rywr>POK+>%$1WM&KQWV#K%M~*x0>FPu7G7!-&<+ zCB;qAOV>2-*&r+9oS$1ltAcs1!?)CwG9Sy+jv`YWn*^XNaV|!%C>{-SY0luufW<~I z$hykN7}}Xkp5fVaX@l79t(q5t$%d=E9s1i9IDVZA`srxMOsb|X-V6)V7DBdW_V_T4 z;i~hdWqFo68RMm{Iu1uTFz$-t2+Icx@i>ao%F@ct@ikEWmQD_59z}W$8K5PhpY2dq#cpsPRo%#?FlYKyv_FC{mAfHVs4rY;J6cZOcJFwD zwmj>tm53CGqIMU}k!&`du7Ssit=4H@8^1}j`0gjJyl&ukxniCW71LV?s2-3u9w!Qp zwt@+A<{V;~_SYavj$LsI`%yai%^2_O)mXgdZIK}?xVZ?L1k7AAo+eX;RGP~6ilfly z5buTE`k??~7Wtf=@qn?P*tUyK#oW26s3KdPv2$Lr?bgLD4LyAQ3BJmvLYc2zk{HR0Gu6FzHa&%- z$XE5`QtP+irm6sqa4yxAo}1DfM`^97BV(XKcm_9qdlPiqb&sI!MMOXnD2UgR!Kjoa z5wvwUZ}M}l#Ow5oRn^&HU$L(YgS_t~zX#*EJw2gbkw-lWE6n!LgmrCjKh?^qOqn6d z1!ov76B^-Z02w1i#I_%l?wphQkA8w_vL#)mJdDdZ#<;r|RT;V^nK+t|Q1geDwlv<_ zbkf~xlin(X%^u7+Cyos*r=_3H~#WpRKa@{tneQB16)kJ6qdY;;3lVvcx3~z zYu1veUFw-gRowjSIgh7+DL)5>Y`;1OHHJ6oJtF<1W_{E55TnYmcv-gwS?3v~!`z|? zuCW9jdBT&&Bold(vcrljLT0Hm>Fg@C55i;u?OzIm-5l&HRmAl9ZfMvl_1uYCYjql9 zsSTQ4mZ`!&9rin3h-lUjW{52>pi;myU!c!3!pP|id7qkA0ShTo{xjF3d{WqJfyb+* zn00t#$1eaB-idUM#eATS-?-KgItQ0hiFn0sa)137%odHO?99ZXg(sz`ISI6# zN$V{YViu%P+k%B0$Yy%9wy5{e)Vi{l=vLq=Bti$s*v%23w&c`ia>&CVL+e)-x7n+Q z=Cgk7KYl$uo|El3dv#Bj(Tl~>J9W{4 zf$k8;{N(qlb@DB`dM8YYtLTH06R`uq#F_U|-rwY1aDLEzwF|_|Z<|UxJ|b`07n5g_ z!u@`Ex@H!u4AZwNIg%EfQ^Zc+ArAlaubhm3SOU#uT^xC^7-3KJd7HP&XWQ)QHv&SQ0TYtpw7dFH#I6QU!R{aZ!j_lPK=^dK$*vk;j!UBq6nr@TT zDuvBzo@C(GBFa6EnE~DhE*T9RNY=3Ra=4T~VA86D=xi6d3Z@9&edi`q(Fg-`6JE z1OR4^+eMBVw=LMXHKSwp7(9yj^7(OnIYUcoq|sjrW}KYC%(%40emKVy^N%1sV#J=6 zlaBCOXXhH5vSg|0S~0p9Qq7F^m$oNLntnj~P!+Qz4jKAk>S?;vGVE%@?lQDBK!5YrU=ZwU>FI&5I1%?5Lc&A^9-Z+(f_6 z1GKHRp^zk3T>4<~Ks+bmAhmGWpTe3dexQl{sGD$lueg5?UAP63wmdFF%2g9K&Sf-$ z$_bf4R;{?5?w%+L$HpGlY(=bSOnL+S!jiKveG5xSR z8wv()E8$V>_1^t-@{S(RnOlgoT@{0;!VFL%#^B!*@5RJ|EBTB!&l94<>uz2bdmOQ0 z4%9pKY*`ymiX~B~^o;JbHMMu6)vdZ$@i0W;{{f-u7uhh51g69n#bu21Xqyk9a0NrU zt5Wh~ImtK8J7+SNWNp-HFQREgx24gF(ZcyFk8z#xw~R5&LMc-9{YD{-@(@dj*U;z#&10pQQ_QyF zDO+7+cNe=Y)uZ-fSdKt-LL436=whsUo_5;}MWLSOU+fAq}2aW~b<0#)_xxLAKr^-lnT2YinQ5LWOAo6gwbmHYg z&1#Vj$U^b#Fm5OQOi>tZF`7mTkh3_(!5`ob5DgkY5Ifk_dLKZWYeXuunI zw66p@q7R51o1?=Yd)kNEq{$r~D#TET;_oJW-g9jrxQVzqaJfSTAO6-tToivGt($PE zO5?)Sdj8{yqw{g6nqB2=w+Fvr@OlU0w?0CL9k;<4s`A_PY@t?fSiu*KVyM{HLnWeI zfX?M~Mx%R`)%W5bBE5Q!uf7QzLCzKSt3Lp1l z$;0}^!{wH&RPC1z*7;yR_>f zh|RG3Y@8zwROCJKy|>`xQ9B6&-BM_$I_2mNDzsh@Cy_fz3cms_{V=jdyxXNkXMmES zKF)$j?W3^i8k^@|$S{2+cr^*8AD1C7lz`G%ST%rQ!9-lh0vf(kD~IyN&~5SE^7L)2PqJl&>1`gAf-FPbRaOU6%SqDUwc9$5vzkgmh))8d zQ?SwrS(wz!3p6_!Ma&OWxq#IcVz9ZOpPZXBe`}^gyb21A@o?|!S&@L8DGHw?Gnv*W z@qJqB7Gd<{RPQ&1t~*x4)Y z3gT@+jcN`gDD0^Tk z4(op*)_dPgG*KcPGwPfgQ|H3ckP)a&QK=V^9}(h$3p;}Hkk1WgI0X36S?uC?HpW&y zlSoorT7hkTYSLZS{!;1PZ{q!3ThbFr?c;jZ%B)Z6UGd#w(IUOVZ>M7LG{PIEhjrR` zROc!#0HNH=p1&*oc__ve7Y#;^zpl=cAX26}0pEDT*(9gaaHi>+joeO4cyyX{mRhWo zR-`sN#_1j)n|#EnuWndcJ*?{qo;pEY9q*FN1USdZXEjt>+1H?U*l(I@Q4%RHZKV{+ z)d0%M@+P?`Lw2u_5PSHDIBckn3U(o$(hw4}!)cPb%7bn3ukPBVch<4&LR~yhA5n*) zn=^Q=r3fm4hlgdE$}JS(*;5;op%p9Tjf!|S^~*Ku6^Lu;n2yH&yb_g1qR?*3h&O4Q z_#;N8ATT97o3a?Eg9F@u&z3NprpQO%3bbbniZ3t&F@i1;co;Khwa>7A7#Gl$m)D%sG}WgnP-Cmg;>S*wpVM6=34Ba&!cCSM>wNN{W!6Z0a4< zY?*@U?$J2&vIw>dA;no>gix?OOPwTlZMJr2gOa-$Z!n z{DU^(B!`u%aUNw8aGaSWLr28wiAIc1p7@!{<(d>)9RZ=GOA-NpdydzH@aubuo zG%Y&DIZ@Q~K-VW6+rYj)cf)C`stNAcXD7=zdy+9<#jm;|<-Bc?f?v z`apd-9{;)OCkTM<-1a)*SdhMvHy-IEvu>9T9^z4Z`YTKvAW$aU?8Cm{A5RJts`th% z-78q85Gc-k#yel>~QV0wl+?(7d^r^T$BXrXW4B*`7c^LRb#vNL` zs`}9v|4JK=|BY_{2KM$NZIGc4dGTnaQ1&?r+EbJ^VJ93sNv@i0?a3ie)Yh;Ksh!46 zg+;Pfn{oQ+GbkeRPKXOCG>+{g!8uo0X^>XoXtAs=sMJ7ON?p z(vYm(NnjR-eNb$ryU>0^`YYZyM!lF%PB_d$qhvR2+lz%(xX&1r^!g3nF z@DPO@Pq5+kTg}LCzO}z-YYhgItqO@wD3EL7>^5I?CC5 zF{Rdu?1EY(Kn2VBlxv-prgjp$fsSXQb&E;wxV#n+RJ-u!H!BJCQi?BN7u2LWD`7kF zF^eyRd>rca)Prgl(Gd!4@XsoV^d6)%;LfxS=bq*W^$?0I>T6kpYS$)1=hS36&m~us z7t|y=Q?US7Sj87eyxf{;Bl#DPB_gNVLY*_@dMEL zh@F{|8Z2kf@wMg)Eu;AtcS4=HiU)bW{viW$OkxG$LI(os`=d<%_c9>S|G0In@Mp)T z3EbU9S1MPAMlc)pzVf8IM9f-{3j>@M?H-ltqr}Ffu8OS zqKUNNqi}M|bhYUv*%s0=*e=i?7vF_#TXormS`XE!OAG7SvJG4b+RqYo^yPIjD?kD| z446k4?M}?^#r*l~sQoN~>oo6f!UQ@4r0T%3{5pjXQ@itI6)WKBZG)yHT^>TuQ*)HU zF@)RN-IhKF?3eAQs9te|<_~$-e(gSusL{9BE6>n{`qguhZ$#`-##;HH4Z)$Z9-F*k z%N|Yr*3nvOaphL!%X|Jzbee3*cDo5dzD*sq3#lkIu?;On&$q#t*R&jPavOoe#&bZ4 z;elS9=BBTH71DgjUX5YBrq;DwezJXQIhYa8zmtQh82>mr8dbGLiE+@86stY#>QZh9 zV!fs^&2r^CaHt2i?oDzqEZbRc8a&*XTGKJzJd|H4hhKP=-*cWU>BGzakaMgw``vxp zg-ys)s*wTH?aJ_okGbKhg*uU=)WU5+k!z6NHQx8!tQc~)XWm7&p=_Z?o7yd0Ne?8G z(#0V(G-#K>Mw|F#lxn7$!_v`)Q@WF5IKfY%; zT_gNtbG>`;r#O1c6jH0f>Z~c#&T=|I~Da4!$pJJ$k;9L|0SABHwBL@V4uPyXko(=oIK z9nNU)sU_?tOvb1_#-Kjtus)Z^yvIkxn*#>&b1?B&utZ025}`9?K126@j~DaoIVyC3FU)7$k`h|ndbZ!Nm4=loh%lDnlqKFR~>0kBsMwHkGAR+ zJnm3K8(-jf+_AbGbGS{}H|2mQwmK3<^War~M2uI7DVl)OPn9W@&6AJfv)1L;@EuFg zIphYb^s$W*%cdkobxyh?Z5ljGtQx=_PG`9FN<*F2yFAShGNmSLa22t2sDBx2X1*tq z4tK2iht-{O@+s#CqAu%Xsdt_c_h#1783nBL!a5=>h*c9U^HNTC{Ytb?ggkIp>)ArD zUt)tqGpT%hmbz`pxq78NagSLyt1(&8FXGn39b~YT2S4%)?2xN5@e!BvhR5Xblh+Vs z5v_t?#Irx!d|t7pen*h0@q?3TG2>D&Z9&BfxddlfJ=6xTknIw2%emFp1*_nvfmPi{ z8odFMb4&q2`Q|m1dWe&yQ)A9%@6J}`tyz;v#hdvm7zB6wR3Gu4&66yqf^ z=0jkXph57X3y+k!WZvY>7#EQ{`xO!@XJvKYr>Sy8uFmixSNFsOZ)|V3*y?6> za0d`6?A{~G(eK)Zzn0u$1?k(;OTE@7%C%B!tqZEJxrJb>zz@1Mg-K#PC%1%rchYx* zc)y?U+q?S7Y>5z9ie$flUFshNxGwVLRECJ6{J0f+<^Pp%%Ad@~U3MaJ0SPBRH?Cs2 zA7Tlb`@a}_rzlIerCqnuwq0r4w#`c0wr$(CZQFKM+N`vlC)b?&KWCl2_grn=jP{N1 zZj2T^qW2!}`@|4gaBc#Vzv;w0XMC_JEff5x@K$UT>-7>sBqhxC#^g^y9IqQbpu9}n z*(8od*IK{NOx$}R^-NJG9?6tM%;}TP;0E{FV83lT_$v!tx{{|QyH8qfxq(^SHYxl7 z%EmZQnxl05nB}~YBvT** zcCDMh6m>hT&yQGzr2?;D+v)i+z{}=I*(OB9NX>l1bDV`7!j(Hmd$=3x*U$Y|s6tw5 zMKq4Zr-hgUM0v;JU`i{gdM3Vh=o~i?hcBIf<(x6_a&w4pWwFA4%sEW|EX7cCH2in_ z!vChkP?}I&(1ri<>O>SckavTE}!-0f)k3g=O)qD6jJRC1jc*fL8c?m3(8OgEGBLwB+?ZTAYEwy zB!Ff{3N~v^fKK}C#uii_RA0crL<}w~38($#ZKd{%6I7X4kmEh?(BY01@GsEs+Q&D(>|)SVxHz%eqVz5cQP<({Rtoby{rr%ZyM z`A(uRmqVuYO31h%GQSXFdE=H!Pg}t(g2I9$DV%>?U07q`7)INDg}n)cO?FsWGl4#Y zEC8D{*JRGVK_i(`S9=%`)o8G_h5;RX?vA!}jyzqW*%Vap(BR=Dn>a@9-DvoVB^VLI<@zvcAw6}KBO_}gr=+N&AO9J!| zyT9`6#DsCsmF9(uIU(})gAJ1nl5UbqT614K@>Sf;a>dQE6$_gBbD^@k1X;+;;oC}@ zEJM$fQ-|7E_RwZ(PLstRjueV4IaM+z`Q>kYT>}^?%P@v}^(0^*(BAHYb{=tjNvyW- z=dDRfeg(DzY8`Lf8npgqxEwAK4#snp+yCnYMHz3lIlx>e%A|We;M!0ZZI8ue#a;Di zl=_N)@3P%0dJOl`5-i2@!O(kf9v0I(H=wX)?rzDUVeAg(s&Aw$rE793GsDw3ipW14{ zgXji=QrkrRNyldv!+J9>`zH9&?dkpt^k2&f&!4>a;#)8>_#c%`->%dD53(d9t0XQc zToo-1+0O?Z^yCok;%hF6&{u@aKa?Xq_u!bmCYH50)_VOY^9z@+!PRdhCFX$Lm^Wt3 zA#?hndM$U~Z-)qYUfy%!Gng!tn}19gHAWcfRIbFBTRmmj567*@vR;$y1UTuA0O-we z6w)MVR=l^ZErHZ1YnHdus=Hre*kwlpPabv1K3PAg3%=S}j4zn_rMDD_JH4-)5nHSi zrfNs*)zhwVIQ6eXhz3hjO!4;*kouOg|MMY4_P^ex{B1t?>k#snEy024?>FC>#LU{{ zuUG%em7t_0i}dYEP+YU_s8lCI=DmiJb6y|MF9jENGZmOGu7eA`TEA$dv342r7Q5C- zOEvf8D+nWb&WUtsSqHZQD0rh|e45O3IKJdgE6~Y-1>ou}4xMNv*rTWpLm#okB&Y`4 zg#lm{-srbNa7cxV1p#mYA%h-+8DQu%fo`z3`sGnjR&3m)9MU3H?QxdeH)SmDHU>|- zEM{Zp_W7shZq9OmBQEC z_V9jQ)1PUkNFD<@yQ*H(8pXlWLg?wqkOzqdCD#d-!R;iB0wZ}Qtx1(6KT z2RtobBVbvv>mmNFeh^Gr1tJ4z`t+iA(OLntIyiI>QF^C15&8{Iq9YRlhSX41itiR~ zJ%~Qa-4((W!41e5O(6g6FR48&{De`F1AU?C`?f@uC1Lm2m#k%8@U(u%K}~)N!|D69 zzN~_CLg47w0a^7!Q=9?lCCGM>Narivxa?)S^t+qIzl2_N5mc6{-|N=)KdxKJe+ue< z!?ie=eluDOY5&IpXyE8#q)+=Vj>}(>tYYS1_Kn5)JD{uLrES*u;DfgTkh-OQ`gsdv z*fYwYeEldFlNY936ysLfn_c%uYX|R4>I&)+F8ZMW%l$Zur|h)M=U{Ww*Rb!#bv0S> z@$mKu=1bWK(G`~s#xN%`Y@T>hrxvaXT8BMzFdAxzOQa)2Ho!NMzz0|IZbu&CN8PDt zj|!`l9~pi3Q^1M>l^`|D6wy;^jH^Dd^0^#*k<@S)s{d`h0NfdZ)JCarlDY5ZH49)j zV1-xVYPwe#;SiC*)(yZWB`0|&_lzJUf#BD)=7D@|2}fRgZO@ia97{hL4nm;Io9+lH zQibXK$HvPO0G>NuvEvPR%tfRucnPQ10LOrhNd457j~LEcp$ON21LZssvO=6Ta=WYE z=I9P_#+ORSyqUw^b<%jQ-p6i&!RBr%P@N00ch6pBG!-M?md!kB(p7B?$hb%D*df(O zd5`dvO|{)+k9L9G54U}8*S=JcKc6_5yz+Is^-X;XC{>SivfUvX8%yKM&bI79tfn|? zw;VnXFV)4bmytA9^y z-(UZ}a{0HcmZfavfTWD<{axu693}CK;`5WQ6~q>T`J()(^NHo60(Hgt|6pxd)11yv zSsS|;l<^K=e1tP{1Vnr15?aS{+-`mq?zd&67Mqa`8QSYib04!Gb3JV&^nAMAlKPq@ z7K9Qm#R#S*4k#g;Wvax6?MNYeu~9xP+#WQM)w^o-VaY@9WMWT?UKeMY9NbtUqg|^2 zf6Fkf%wD7Y+1YgzY}NWYpm(9#%R107jN?J3%8dgJ+WME7N80zR?KBKkE}SU$V?(iC zfAu>v+_lq<7d7iT@1Y8knIwS>$nmoZ*J*2^J`(7#h#{7NudwQ}rBQ7h>fA>5O-UTR z-fHEwH6U>cLkAG2SX8XIRs|t+*~=m^|7wvE?el=V1^&~hC;Q-gu`32zrq<-7A4m3c zHeR`fnZ8C6Zool?d87$t*MOs>s4ZL`TjhqQx}0n$-9JD4&$BN!PeySCQ)2+}?~J2z zv#K6JxcFgjy&H>)b+p1Xh#{1^Q_EU_lM~6ip3Q%9OKqdDLd6XSpF!Ref-x zc>9OCaM|lJ{~0CE=yhmIfg!ZkDt`mN-D}j@sP@w{uxmF1? zs84V0Am&?4L0OEg``{tF=UbhY0c_1E-dl7+L0AsXMcOFE>wT8`CGjNemvR_8-9)tF zq~WEe{n8ME?Jh;@d(r%Mwk2zoHzY(T2M184jKF0F9w|oMCT%f}<}5W^v@5xUcJW=d z+49@*s(Zz?9)9r?b(_qiE((CbZdD{w?Fsh|*_X}!Sr_wPv_)F?f|u@5*}HzQC_TX^ zrlpdDx$r&0+Qc6LV_CU|h;~&+>B*g%+Ks0#^n;uR>Y8;`%&S_Sd-Y$(^gGbZzu68* zfk`qzqG%T`(E;y4`pd>Ze}h(`Yv<9QNnR=5eMA%0=tn*(d@=Zcj>Rn!0s}tP#hhEr1wH)ehEDMCfeSlJfm+ZvP#Y3(S|V(gY`s&IHfw4s%Tj

oX8#LhcR#XK3O(!3yN<|(#n{WD1C)H0zFcbCh%;PWibIDq4iLFJx{XB6o(sL!({ zbUy8ptWP27FXYT|MAdmxTfnfwJ{t9pBkv<(nq*&$}Usf65sD zP2u>GjkcikA`gmP6{nqzd?&cISdL{&vRz>k@dP6l5tr3ZKG2SrTO{n=-p zTubC<$ZE~PwMa1kT=`JN%)_4-x7?h29_3Gqws1ZQROr((HW*rIB=+fv$Ox-Daq z?<8i-yXU2QpWS6TGmV|m!T2b1=$L2S2mXgKr5m_W)Nb>;t|%L3WFwPv;ED(BN;OY$ZhX7@TPO?Lfr}f~|qA6OU|SGbjg#ijcZ#5e$5ur(vSG28VjS z9)Xd7oMehhmc!QVEmTGLujQY)+d_MY5%PB5GWfmnTg+ezCLBIFm898R$UObA(Lq(z z!qrhVAxq{a5pxSuivd#gdUnjpqO00m3?bE8^XI|$IbEy-HOVRnz0Xl{W<`s<=IAv7 zbEvYq;T1&-;ZfCknp*tWZA@_H!xbSy>O2zdMGl}a;YET)j#A+=Cju(m zZqK1SIX2AD=0L&ufz%67bF47~Q9fn~57kW!7=||KMHa=5RCW5Mcm#G?VaZx2X@O-0 zb0cu55ZPJ^bSqd=d8(4;RCVqq33EyKN@41};!3ktoK%jm?T z$&7ys_C*Ph0k^n>8hN7#z#HQ-g~m-ZuvwWtM^ z**k_oE*zXtQe;9exH)17r2jUPZe^Sot8-3%5_%lQO2aqvN@{I!5lQ0|*p!6(Mnxkqfs7a6!%USYk-npH+AgxBKpNFv} zwD=-H>5N~dw!=W0!@#El?t0Bs67nt}$lWm^%~)g#Aw0m2AX_XN1>N@L{0+M4_^FUw zVrh%kFG+raYQdo267NP8vq4ArY{p zbYO{!59c{~z#kYNr`Xun!lsQlWHTUWxBVC*0CZeqn|ds3N~wc;&P_3yJaViDT%wC_ z4icErH2^&<9$TbuLI@!#kUA(&DJcwM2$a>5lCBubK@5TBy$I2Dt;(f1N&&U2Vgre^ zFBZ`q$ULs7z_Ydk5xCy1>HwWr^6G9DN19~|4=bODhDr_>$3CC02g@@QC#K7o(!%c9 zm64iTTgixQWd@aOV-DTyaNX1gSGoqTFQc|TkC}-G6H?L$N+8`==FH}qDIi4Wvkc*N zoeAl%tHe_<6M?xhqqj?XPDVTXV0;mbfN~oEn+nMrki!{zO{>HP1DSd#+39t(AmWKy zH14AG%-nhYbG%1hFFI1FhK+1}PIyKc5muBlKaQ_Mb6ziG1p%9xS~`!fkrAJ~f|#AN(}2L5k7?ZhB2L%f zCnnJjLVMNI6JyR)o~Z-f+PrB9@0>C(f=vL?XbyW{ECW|?kQ--(MnD*oBpV*SA;!Yz zY%o6j=UJieCtylPnca)>_uf#4V`w|=p10L9)yDm@;REaxQKTu17g>3CyFT+7uAr!{ z+^m5@nuPsUpEf~4{=+{Ml3pkw%-m#WoQ&9U2nVq0;N6sPMkoWaB=kK?~*^PjEYg)Fv!7ef*fi434PKEh+{OktC*IG!L?g39Fb)PQuPu2e}qLh_#uW;TL3 zNG6PJh13d#<}jcFEL=g;^X4ycxxZ@mG`W_-9Ihn;PLvyifrM&&31-!CNmP_dT|u)? z2N&vMmlWe5ACT+Zk6;vL;%!UEg73rus+c5dYn1BHB{N%nw?ia4lge~;rq3zK%1M8x z1aXoRtv&P8T1BCg3Xv(+A);~4&A^EfZ`CV>%1sea;Sl*x*0FFsl{(PfB985FKw6~! zxsB`Ox(WIn+~jy{11VxL3Z|?%7GeUjj9-XUN%eaU-OQ}SKn7wq!{MAqNi*p9&Y!jc zH&6&Io^oD+Co@hiH;HzO0+eXk97RNus@(1fPUBM8Zx*xpN?nFo1&l?Hk#|VyXpY1C z38_HEI~$3xy~qaB+A9O{%k&sWCy5Y>49nMZv)%8*Ej(-6w#x7E@#jjUo8ar}Y~iRa+CH%m3@x|$E?@2^9#qS9{{-2I z$bh}f(8OvlmTd-7!FA>hs7RC8ed+wS%-sTFQol*_(0Aw^QishFC~U)}Dq++UMz6vp z@KGYDt7jUkLz}0_u2}9yL>_Bb8oWsRON2 zdh0$5S#lJ|(2i<*=l3^}(pQi7=0&*^?8>O_sz7k(5K{Tv5G>%bWRbDg;rR;vVbX~7 zQa^q>k;v#ABdq5Y0hg2BO$7ZX*e1K8itlO$5YAN5F7v_C_L1RSAY9q=&r4$*FBdu3 zL@KM+kuVR8Q^?NvI9z(I|CA33+ba?Fw6Tq9Zwv5oALNxcgt`XlqTi57akL5zyubq_qVe__hRb>e z_#9%ZKwf7kd!~eGX$lf#&bk1i9W%+yZ4WM``wGvw?*1AM!ui4u{z7-$m!Qb{6rKxf zlT1zvfK&k>GXEO>vSoXZ#CyN#?Zn_nhTFWi_U{mkPIPPT8Y0ej~8DN_m64X$8`gOXR$nRDrd-6 z5=}rl@Zv{)92Y8o15Zv07bwi`)JhW~m1Yn7$c_Lrf=p{Hty_A|`byd>_>_=HQBqF2 z(RqRQv8((-+I9F)h6AbOI;*ifWw+PQd)GLqAuA)Jsm^Ua-xwbsilB^nX`m!k#2=sq z9g=^M#gtGs3T8;?GDhvuc}x%&lE(obs<}6o8Kg@hnfkF)YYj|Rd)&cb(sk7)QN2HX?~8L=M1tv**jzPNtZ|tkUediNDdg!+ziXn9n6a? z{qr<^_i=w&{#X254k$=Iuhu=ryDW*24w?IoDATJAZcrdWswn1UQ4OVd2jl~q1%}B} zKj0L00OG}u#HEM+e)MN%4jI|rJ#-~AgFN+hFlDeBbssP2Y2wVGzy>PN38aCwL0cnz z)f%I;7RP|84IpDh=;@VuD)Ah&bCmizDKtz5qXeP%t6oiYXIiEMa}MC94Rj{)N%~o6 zYS1GTqOPphDRmX-Ws6mM(*>p+ShS&B!MmZ{1%t}~N9ns%r{Bm0((Y6tea2@1U{Szp zMYtAt$ZnNjS3!VL?dXru*-r&6k=I{L9Sj}XNi8)o^bT|xq7}$6 zF8XYWKPhZNmqRxz?;^3e>Vp0x{Cn#!gKEz8~`AX`=>k%y2_K?t#+> z>NZFzdHZp{Y^LVM6SFF)v5mJq2jIHVn>h_fy(r7}0}PBV?EYnu<|L?OkFp!?a5&s? zw`6gT=8cJquw?SjD7efSZSD}U0nMLnh*PlK8k+r(uImC)Eu_@T1$A;DRV%>|!9rQYOcqr4%5@BStYqj6ovXL;VJ!75k}H!v6!_4mJ> z0a+RNV2&qsUay}#F^%`O(-a&`K)nw$k3e~{XKg!YiMG}h$qJ+T3-O#9$k__dH5C#r zELa-eZ9TPu8ciIxv7e%9+B}UHKHHM_jCL~Vl_yW2GluV z%aqlxW~(?T4nr4m&XQEaXGlfAfs0r>!%SamCr;x#p_BmsQBGWq=H2Cf=HXW^7Mu%+ zmgioBgv;#fs2f};LiYHNJ@7m=7$*B@fjy!PJw8-tM9F~P6vf2+hqyY-k7QXU1U24@ z)y-lTnwGPd4944-OzTFI@q&j~(}rq_JGz4{#QE#=xmy-tB|+W9oc0Z;kx$iw4KTS{ zv`uam{Oax6Bn929@Vh*cx80feU9wcqy4U_)!QMPl%QIVn-aBzbrHlW1809CuK8ryD zFaygFOu8gL;t`*`2%m{_h{m`U1&t<=j64m-0OKnwAX}0hl@pjHNt=!Rv>K$ zpILf?P?v!Spoek1HNYsJ4UmiQi9B-=#=stKmk6h1a-rUd%MA{|L~I8d$ArXJ8{+;f zHRZ>2a_=g~5vi|3d!Jx0J4ZIE>}uH9!eRJ=6IX?1M)m$GwB}DgC`T&Fx#F|dSU+!w z`#-A6WrruOus|tJivC0=_1au9J--|WPVd|DDP%`p0VCG;>@7*5U)%Xcg1PT6n7XlE z)>FZ6=ZmdVg(Ne|8#}#z3s`YCv6$=O5PHDsHeUX)F8wnUmDZ{@Qgd+DsytHjsK1iH z5P!!Rjc~9jlJ6j=-(T^x%M6Fn=M5AHlW0_EFLQ%pIB|HSDTGtApReaeyCo+~P8CBK ztTvKC-lWy#|L3QS7x6>pn*`C86_FY3Rvar|PLw($@P~Q|bzknXE?ovjt0lwCzLsEZ zsdVjcgHb%pSf5!`tau@GFKh(O5v0C{Hlf~*5LA3NF{lgB@gk*l2XAXq^@r*@HJHpi z81gf5NZ7y-J+iKd^=U|Yetzvf5bNA7i|u8DT=U=XnoEM5QXRqd(RebI6+t_ zSUe9Z7nc<+?jTG)vcWlz0ut4!tl#)9ZP%|t(r_Er>04$`o82-wcsix!c6Ph{q;47L z`N$k+=Rxm^0R^T8enrESR&o61X`!1+SO%lyHhYtEk=}$o<#J!N>X40oL@R!{ z@98T50x2*1xtVq8%-|5RekNnXmgJuFW_TXbF`woJmzsL38myz3I}ch(?^*@MG|y68 z*GylhHbW9jD2azDw^pr2jpWiV;CSdL$KcdF}o zvJO;p3{)yXiOX!>H)S8L_6i;7NCN27Hg<&DB6lec0HZ2gyd68xqBR44=$sxexGjAG zpF%|~7EcG0F=?JEiv3dNX{QS`<3=Pcrx*g37n5k>4paeYOuxW8X?+96`IkDJ+%x6Q znL*LIeWIaCOcJq!hKv{k<))r0gN0^&R;vXWxBQqNF9y-N5|C9G0ye5G)x`Ww$p|nn zB}fmIOw$+RGx5CIoLt<4A&yU+lpBpAiA!6W-a&RwfOn_Aj(KT!A_D23=LxnC^KCu( z=I0Bc91?Fr@++*LYSgW&z({xqPsE|Wum&w)_L4dclcQ@$kZ9p=<~e?T{2`qd+{GIX ziJW-cA2ND7mV{yLjRO6!8@^Z?D}mX@HvD9T&cuxOduo##%{@9Ip7@D!su1+UGisfw zkaRix0#@PR#P7hCf*l`r+uF`7KLJAsNwk&dBuvZTb!a0AF2+G1 zuxrj(o926@|CJ=L=hu#Nsxd-;R8;eW_CJeFl9kS1f<= z*!>oSwF*g#4ak8kUZLTpQ7EZa0FLbl1k8u-}osAR_V$ZIP38lsW(k^REIVNooSZa1e=iXd$r zggv?`kWyx;K@QkR?+PB2+0YZq1ljW;37EtFSzj91W1+AI64c_%C1hldn6H(_a*b_| znODc*Fx*QSvyNs$v5=B_WMlz$RpL&?nS$!BHDqC}zEvb=cb)wh8c!(R`!_Bc+E`%4 z3gyR-if=gEKVS0xi&yf`(~6wF>3Xz(cYnSqutX|)mQF?vf8Xb3DX%La@xya7woySq z@dHBc!3b{xGef!(gCYnQ04PyWJ(!7!Xo)+QZNh}V=6eUgdHd1wh$TrRsk{JqN8#y~ zaZiv05vde;o@Sq(@|3)tOWl5~q}corv89Zr!H&WALmH19qzk8S;wYOeV@q4WoG!gy zWm~hA5guNmsGyjkOjw}%p1U$245J7=S80}}9lcvBPqvm6>1ZX(VLaD_=PDaW$S65o zo>k^<%+A>Itcu!&QOA|7t_v=^N<0=zmYSSdrGi@Iph1;Pj+nuUr`}(|(THn>!<5n8 zMVEb-*Cg7Xl_bj@92?gzs+8PwO0N(!qAzSX-tUf%9L*>ciLA`fm^O&dwXXMDd*Yt_ zmOs-TG#%H_%XshMTzmwf0-E!4{4M}wLD>@LE}M)-zUQ-%h-IMqXpDK0r+_>W)3N2| zO27%%$#6(Jt{b*7ifulLNQiUp_|L$Z+eG}dl3HuEBgU2?+BEZcqQwg*v=!hC3*bwa z735o4p^)cF57%t97YvDdaF|+2J9f}*yimjF?e;P(1 zdc5@FJblGFfGKzE4{8lK^Tp1PDkVXx0h^J-e@o&ha%r#QcjIo!_OUvvD%tUBq7kE$R` z3B3mU&F>M-!*MzyQ(tb)>L$Vy{|Wxtt&OV8ZyjG$gC{2ij0}{B`5H>sHY$c+wL!Y~ z0d4gxh?9$@2UwaLpmB1@^7>-mTZ8_jYxAR>ap(9HPGhv|rw`r*=*NrFCr;oyNpN@m z#ia;gozoyx`A3Twv?A6wa(~xLLYIoLHRu zF<218Hr>5!k`oK3YZ-HhcVebbNb%1#FxUk(m^<5*LU(o;|C#~=tBFZr329d83rjKL zWtjH@wxc)b=;s3acA^6G;MWYyA&|k(zr?bS*y?oj-;I~E|A=uD`HySz-&?i+)|e&w z`&r!D@!$HiMafo*SjyjOcvdPk)n+cVP&gEF0pIz?CUZ%1EB;yw^3uL$xpJC}3`f1y zsdH<-cld4>$6;2E(kjLx#gw(_MxL%)LH2A9BmvjbMKcBmhs$qJ%U#EDc0)$bm)kRX zFF7(35uIiX4faZGKLiY^orILmiY=y1=&m%1O&ME39s5To7zZ9rn(m5r` z@65C)vEz>Cw5@oBB$k(kj3~nHI}`y7M@H;|3xyZAWqY@PPbQNfAxutgxZ^O;USngz z4ntDx#Tl~Fv{d$#QgG+W^rrhc8lCWK*;u8m`TF5`&Py$V-aiU2ii#uj^3aQ)AcSH= z81l@hwdkSZqvpjncvvAW&H=1po=&wDkIp|p?cYQR-6LFW`no)1DeHo`sDhXh9?`& z@ep3?Q!%Jkq!V6s?_trhHyDDI-}jaM8oosY6#;}Jy`YW;t~st;)8ofddz*pbT?NltNAH|vC|M7#J$^w~OfOwggJm4U5C?>0>2eo2*# zmXJT;h!?bbjiVyh*$v&Bp+U*N?z5|Qh%0oAy%W5I;fXR8Pd-xEYP47Mc8v0(Ij|z z*w-koDWJI%rwK7;WZg(dT(!qhlW-W$^u<7gljBk_gh(h9)8Qu4wj1Ouq8}n-vhl-R z0uPp;N^yajdWIQuht7S6Gpv=rRqWt3Lsa^rxAgLM>=C$jUR&)I_4=QHCj_i;xw{|Z zo8#4NAAsBW8sqex5}##UroYJ7a28`lcStU(KOipz`zPpc6_D_~t#G7Kgn^xKOp0;y zyq#T<)697fo7T3`8!lW_?8)FyOBm@JS!7m^V$ASY-gn7@v`E?)WI3b^5 zDY{FTDi_vp)IR{k-^H$ma_Az~Q%7c8qbkqx9GN4_PdKHmU&jiCys^TGa%kgP#HaE5 zxv=vLwEAbc1WGb_;GX6CHzB(Dcb;a$-Wne%PrdQ0L$$XuTBE^Q{X#T$vQVx8pp*N0 zr~ zl0e;gIez>FbWJ|yV1fJA&X)d1D(^q0p#P@#E2d{{X!$>V-y(&-5t1x7gyJwvc~GtJ z>L-+T1fKgp$OLS65yF5F6=E`6krayR4pc8d!nOr8$X5uKDDn|k#NNsJClLp6@Qk}{ zj&G)-yLf%Pz5sR*(gA1QZuCk^?8+15eK6tX4U$gi<^t+2OU&KTWq8ZQMD;SE2U=bD z`V2Oq*l#4H^Xp_Z!TpwioC^Ev(xC@jibsXz`N-z4KA(K6&rWX?<4@xr#t8h>pSBC1 z%ox(4+xQZ?NU*>=PmZ)gfwN2s#>g(fk+G)WaIJNl0HKueGex{#I`N2Xd>FqVajSRT zF+eKaYV8^X&QTdd3|xRYUaC*@Hw7WIFvq(Xr_+B6!Wk*0T6w7M zMguy7RHoP!)`^2fY_$m*W5F#msHzhdVplvT04yGYDq=MRu;U*N3#?($?$Z23rKZI$mouDie$& z_{ebneHmw7iSSIb;Lw2lH%GpEB`tndg}1o_Br>hzhQ@cO-4+%krE;!KH&sGts}E z#V~BG24PZ~5n)_*IZU_dG<*ln3utbrQ?Q4!#|&ci1w@Im(?$ErVRS9FyiG*;$R_uM z)opsITJu8f`8bW1v+z)SFVI$5QxN2E?C-;xwxy%2;HC=)r9cey62*K)y;O>?Jg%Ee zm6AGsz9g9_y*-(Vh1*Mp%0ERuZeI=t=X8Ni2BHJxnbCrMg~8w?`r!C^{K87^ikSL- ztOfYEt_@0E_?;!4yQI0+1<2Meoc(&Kb5V9y6@#vWPeMDJXf#pu_}Vzv%@eWn6C){g zdR$)?!u$j%P?*#E0@!GFVdE@q>l^hJ0t1K)x3>&h?#_J1sod4uT%{{P1p+Yxy+lsE zPfx-j&1$nF=OtX)-Ff&i{*$%+u}dv72Ws&yLHLciqISx+lBBmalAkaz6QdGWBmo3q zgA^B9c~`Rh0z8Or5HCXAQ7~2;E%J2ka#5c)iiw0;f#;cSp^V1OF@lSXK{&3yt5pIgckdn+)wnux(K{KjqGIABq4LWQVlGUBQ&Wk6 zvr&;FBZY;TM8*%~w&K$Whp808)m!8@jcZNPhfnp&_#hPmjm5)kB1oLT0V3k>=7>NxB<4j+Q+EUJ={%@Y>DM%dCxmH-X^`=9;dT!i+3Gxa9XPg{joTh zHWul!dZ{OgY!MsGQzHztOI{+_NSHj!grMv;RB}1TrR2p?of2yc_0$G_ae&(X3Mdnz z#Oz-FM)G3?YlrZDgP6DNExSiQ$~Sb;X?SXJ)q~Oxl^|)hEA7^4nH&|N?Y?eUa-1n~ z1-I3~TN^)pZGlf(ERv6ll1QqUPBEHDW$|r)5?Ju#FfM6u`+iC2VQ&|&I?=I{lOslv>Bq; zbRCHU%I|lzQfw!-h?rlZ+|W75Hc?iWxUZ#nU043OIUyzz)m7uvQdnshp>UF!LzC{1 zs9PsoRy`u&mX_Fc;GV3Q*5SFIE4*pBZ(h|z-dPa`(f0MT`YWAI|BSy9P4yDmPFzxV!X77lRsJ@2~VJvM`>%<2??aUpv z;2rC}Bs7j_N%}e4-VjZ^h-+Dn1jvY?cFy7w{{h;|u$ZN z4|s~beh;L=PF+6UkpVCEI&hjo;zWH%KOvl%Kp+oPxlzifI|Qi*Svip%g}Cnr&?dSy z=n4{@OAyhoB}HsDyq{XKJN68{a4cHG%2@bW_Dbd)5=J=zwtcJ{WWNXrShiw_4{Z?@E`Y8|JB%9!SBgC zj`mLf8b$hlW|=I-zYPU~E7e-fjh@Ov6Di;w)JF2!k?1<*BqR}BVq%FUrwqyXe`r=W zAwLOpnB~Qo$qf-JA1}Z&zw{1s``Pah+DRo@K7T$q=>yGlq z`bpt3NU362E*#r+>Rr*9PT9)RC2C@Xnq;j|BUs%f%f`{O-naG)5SC4M{VZTk+ja9i z4;v5)1|T;Z>yE^@?9f|u?qBu;7osu{jmN?zici2R`R-sD;qXjt6l2@KiR(AcP@v$3 z7SOCAm1A-StP(KO;>X@_oeO2V5+to=_{^y(hmlCA=25u36*@9WRrb@%4}uRo`yW#wF+3L1>^kWD}T_fs$#J=H$(zjuGy@ za3Ok3S+-PZeAF0yH2{^=N40d}1&NlY%pX-~r%%*c!nk$=;NjlMISlH~&o8|*A7 zK^VQ_6)n))-vb$&m*_TeyhZ0B9q{mbgzO!m9q3eM3Vc1{Pth7+|045=yk1}m>HSud zl3UMBA(EJqRMeWmrLSRUK{b+)2RzI7G5_3@-sQNV-)o(7xQU;IR4(%h6v3^|&b{7J zzI7s&C6mKBN_!PMYvV@+IpPF{b%piQ0?bMlWWf9eIKi_ zt4~{_u{a=86V5s}$jZsaocM>RQIvzv!!Oo$DFoX!)lB4;JE{9@+l@N*j25rJzfi8& z49CvjoW=h9v9I{^AdTRfcYR^K^U&{g33V6sHO;6KYl>ZG<6+DRxhl_>n1$Nlh^Q_#gWZTX?Yp>{-YhlkZO2|3HK+As*~!f)L`ZHf4L>M!CPQs# zx*zePaw_P*K-)$@F7m9la8EFqL+s}J2#7##nesQjyDwJ((7~QZuHZ$#=Vtkc3{VSB z+xugnegX#1+aU^+@&!(L^FqRb$&lNOI-dF6cTZ=D4KkY3Bge>N0}caWjgVw97d5=_ zw!lvXX7&S@T#D~G$LJMXN}I2X`ecYs@^`D;PWX<+$7hmMg(H6exIZANDr5X~;=?RT zJ7Ah8V$Jgv6bz|UngMR%V+&HLYG&ed|6v5aU^`Ar|OOY{gwDF75}gCL8*N(A79?_=SF0MW&n}5 zyeBuAEB2C>nbVk@Z_B5vZwZ5hYN8#+FT>GRbv^(|c@ODfr;S)Uq?UYVwf^ux<=~Cv zi?u$Mf%vsmM&8tPgZ7T}88Fxuz^U4{g%wI03HZG0$QuJ* zK|GJ`fgzB%yLEvuAhNY(xd2-Ir~?xTGx*>PIB$ecK`guN_JQcpCZP2Fa+!gN$$#v7 zPE!SJ`(|Hx8_-Wl=NlAj$H!jvbUDMWVUrR|=&aF?mLx<2t63U@lFnzzc@5w(+;7D6 zD=u|^y4t#}yy(&B1i&_NapJl!ppi4h7{D11PwVBtT2oXRdT zYUXxe^IFV$XT@S5BdOr1?Ews7)}1ZQj7G-d;ImF|kW4cQ7}K*(bCJZCFbQ~PzGS9K z3w#fM)T<`MW0V}3JPGpAkOfCq?S(3*kLXjJ`qMEN}Sd{wwOIMEqazerL z9l0?7F>5%-F6X&m%%l9oVzrDTQ{~AOdrD9?GJvE!>kCvMe{(8SESA9Ifk&z^2 znt(wmOmXlJyIQ*da!{bMmH9PrLvgjL$gCrN4S}_5QnL)65=Mvw@&ybI!IHjWKaPdz z!WrHRsRcYQ;w&B#s|Beq$Kng*6PL?sLwupf-)R++q;g#18R?i!pE(qs zWNUU?;DSLKi!@WElV>w4YEU($YY56Wx@5T(VX&G3hrh^-RG)C1&qKD46mFU%U!c(K zv(Ol_oUgqpTVvnF0YXyH=43S#ybBbXvby*vi6k!|G%zIP$Xv39m&k{)aN1nD_99P&;5jWJbGnAVQ^aa|GsCHRS^!-uogewQC*mIR$WV4)lbxAWL;dXm893E4No4jjVzaZiS0sC0}z$`ZD$@&nGQ!BM4X=D95A&>}iZ*9n5)Tl^~2|iw?+UXBnQNt9X2p%fiq4r@cM z;CuJU4#|&7aKF4S6VBGu_5qjnBL$_bz4~1SNSfk?4E&M?VtE8^gm%Dy-(EKGji4~L z)af;mp1!GrZUC%9(9QbVQM9pW1<^fDdqi=p<-mXrL|&4akw{Mmn2`VqW@WKrt%w%* zeVpb>bEpX53e?nSfH>8?0jeqVv{BRY(n=i?_DqfgE=h?Xb0i9M=IDY-qI#-U2ox-B z6wwKyWZOhagW7~?O}dYo#Ij7`YGi}{1frXL4pHW4R9rt)BencSya$Ug^t*((5`k1b23+;iXkteCyiwY#f*a5o@c^2S_=gG zI19$!NA!`hTv|)r=S*IUWtaY;ju|nt!H)g9865q~$}vFoW`zXs-|Wdl%YNfs? zP`gLA#jGE9xD`rm1(ml@*P%#uu|sgRYtMVg2iz|c$dMLy(in%*)Iq9R1U{N#W?}pY zto(D&IDG1HKM8=uF@VGqO8bxjnW8I<{XtKN^3zavJc&39wIE*oM~NdB_)hvZ8dBHu z!kgrT$zXrTmjE{A4eD|sD^XlG=Kc(00G}kPHLOb(^gHIy89~61)CD+BPwD%VDV*iE zL!ZYkLuDx~bOtBPt5GoEa;!db7Vvm^E&#^?v@BJyJ=L1Myg}3h z{0l3ut3@hBezbm(V-EfRmu0CeFkoERe14!7KwF!KR5Hc7M@P}>lsr;)fq_d11^s_2Q3NAk$P^Qj$+7aTQ3Lp@>HGp%~ASzdrk;xl}zcU0ST*{1%?abRC zb7(zwb#hyz%Dr^u{TyMnRL?py0fA)!XRCfI6ie=?po|^d-F#B{^o>>FGqYoK1%XPF zXMw4!!7b9tQs;`aeuVP?>ke{O<;0Df*C(dghM1G)!fO(PKuGDf-{c>@u*e0N*oTha z7qlL~FNbTp_atDHIbXPy7XKf<&M7#vsC)C>v2EM7ZQHi3j&0kvZN9PXq&sh%bZqzJ z|IO6QTzz%wRGo``x%b(t)_R`b^W4Ougux42wo~LewT*ecd@%W71&k?;XjQA&Z{1c% z$ovIGbE<8E;0-Y^ZS*W8#T!wQmpt;${svSGyz*DT8Ytz6_0Bo0o-`4R*g&xCK)J*l{P|^v71)3%su!;OBmPd< zfMkddZtg!&kOxViL!j9odY!m#Rcom?M6SU`#I8m|5WC~aev}J#kS8JRr=ZTO{Y$Yc zy^&ii(D=Vn)k3vDZVUE3g?4`|A@{*n2K-zZ06G8TMA#S6H$ZB7ebE04arc%G9Z55d zIQ-{TiO4eW-+yAz&W>6A5EixBoBV#4mYXVOt0(A|U5Q zk*SC{NQ5dh9V`-6jU4InVr;6Wc2qi*5h!BRkMJ(OP z8vk|sagLL>#p7$|&nHAvjQH ztn1Y(G%EKHC4ZbpMKiaH0==bZpf?`pZo{=#tM$W!%<5(SyQV*-5F3pFfO@tI<6G4%RDZ^cJmmr4_C@V=rq48!-N3q3JGwCAiV8l`^? zTJX@yYQpy)Os6;zHkP4@i79KTVqkq|xB)nE9Air4LS6un7f_rO1L$gPl%{F-mYz`WmM$Q-_`$wgR_ngC*&D}OE%@eN(O@i< z>Se3Fq)Bi6N`8nw=B5+)kFeqf7G)^HC~5ehxeq5{6qUWI0q<0N`ao=$c{MM=uxCxLb^s(5 zpC%9#-9i1uC=5~kg()mS=|w8+gnFm`MkFjjc z0Q1T(G+_lbP7wfGG=mza3cxy*Zyi7%M$i!WNTq&N4(*Ndi*!H;Xu#@KO3`Tul!r02 zgdm(sZ>WgCooS4x!L4#>!sbvqQmM9M86H*Zilxz=X^f)DP(6ZSwJVxZSL@n>(^NXr zsn)X$uc>kYRd3G*@;pUF{W04Y)O?wR85o7*yw#m`A{~g!?A;x?X1e7?{~eosvVD3| zPu7|DCr$!zT}1FqVe;qwbjX9|lO*cTJR#FP{)ce(tZ3=)Jhd%xLBt#&@mC~(ux!eq znok0sfO8mRe;+#37xD9=tiW&Ouk-n1Y1DOvj4X-c5oG02VH6?DZAGPSPL!bi*psDH zVFa{c3?L!%rNzQ4J0weRyg>5>md%&4>6PTOSIp0l@&3npN7#E|uN-TIIb`k5K^ zAG*4~e4f83=pUxrKPbK_{=bVi`{Z+bP4}-+f}bmoJRk0TSpR|kBYk{hPy0MbL5g#Ox&Lfx^RFiAUmOkByJFO_CEL@r*b8Ck^}X1{@xRjcfUK8+*$>#S zZ$w-Px373+e|fv(!s1Iu=#?PF7yi(-{0F4S9qDJ{^X-9!#U5qlf#OOKo_b&wJjN2} zpTc&|#+W?{;d)BAXeN`q*d-zqv?4NQ@yx_dDY3E8O|oP;5%w6fB#~WJ^dt)uzZtr; z5b4sK&`~lLC0>$cvbSt8!IaYkzL;9FBzlO#L~#V;NpfG%Djq6ntx+QYn;5ca5@RbQ zb8I-=xOFtL8jdvvN0KGV>&mPH26%Czzr^Cam3XZ3h!zB>Or9;C{NtBP$NaU^yFS9e zxbD$2&&OOhJlu*)$MzY0mFJ7E0%1tM_X$nK`cb8){^3J<*QddSWu=~;@=)NcS)$(l zq7uFH3MV)Cn2M26b*^Dw^qW#1Gg8cyh4HgX5b+IJNa)mSO=FmiAoHmzu6)=~X*7=F zuvNwU!T15+ z9=kGp@(zMB4dG^eP|zz4CBIHai!@Pwqu*9^=KcMQ$#tJ7U)D94B9bPlx#6;bRu{Av zctr5b<52Sn1XTqkfjRGM1RT`iUTXX0FJC@%`Ih*-r7SkhfH7zK4i#Y=O#al+CwL|~ z0hecJXu)vr%MEH;+dMUl>BGhQE8AvLTrzn*#LeY=1^v}#Pyza09^tG*|E+mfIdFb= z4u-osm=LqE6}ZzsC^)eiF}BHDU+iorV`@)W?;1OE@3ze)#>N~Q>Y(c8EtVsV4@R7_ z^}Agq)BbMfm%#&_Tob|ZGF1+&cN(c`hvX*Opv7QBY)Ns;h`V2sEA`seloQIsCKg)H z^&BMq+A6@dvC-V7H0n^(&i)im((GQkt-Z+rxJ6=WMR5xk)umwn4)5>f)_Im`^Z3G> zJB*)utN62Qg)A=?@|ycPtA}}ti$RYvbW984n}*XnLQ7<$DAKzm=>T1LX>)Kic>7kx zLWi()J65DR(>J>>^moVljsik^rjto2l50NVv+tF=R3umq6I4g6qp=eFqXjg#1Qswh zy|JvL48rMo#wL!fFSBDVZ;z2j;*3>`-B;GeEZDPk)*Dggx^{7PHb)}H2Qg$(((<1F zmRp^h*f`6;iMzqmo41*Oka+Mi#s+O1uC8N3sP;&jDsMCgsu7qg?GOn6%3x-4deHjR zuW0J7VC!a05^t}6x`bGgV~d?K5-4QPSf8TOi3g$!Fd%0DOrl*cGUW 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

gLcT?_;yX}pVo2MMzZa}xtUskUX&QLI56*G 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

Q-De$oC#Y+~W? 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

>lS(hnvdkfxFxkCP1#)q)LuH9C48MdaFj7iU~~l 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 QNcd;k2uWJC2zD&}A4EM|XaE2J diff --git a/pom.xml b/pom.xml index 29fffde8..4d982645 100644 --- a/pom.xml +++ b/pom.xml @@ -1,68 +1,79 @@ - - - - org.sonatype.oss - oss-parent - 7 - - 4.0.0 - - com.esotericsoftware - kryonet - 2.22.0-RC1 - jar - - kryonet - TCP and UDP client/server library for Java - https://github.com/EsotericSoftware/kryonet - - - - New BSD License - http://www.opensource.org/licenses/bsd-license.php - repo - - - - - - nathan.sweet - Nathan Sweet - nathan.sweet@gmail.com - - - - - https://github.com/EsotericSoftware/kryonet - scm:git:https://github.com/EsotericSoftware/kryonet.git - scm:git:https://github.com/EsotericSoftware/kryonet.git - HEAD - - - - - src - test - - - - - - com.esotericsoftware.kryo - kryo - 2.24.0 - - - com.esotericsoftware - jsonbeans - 0.7 - - - junit - junit - 4.11 - test - - - - + + + + org.sonatype.oss + oss-parent + 7 + + 4.0.0 + + com.esotericsoftware + kryonet + 2.22.0-RC1 + jar + + kryonet + TCP and UDP client/server library for Java + https://github.com/EsotericSoftware/kryonet + + + + New BSD License + http://www.opensource.org/licenses/bsd-license.php + repo + + + + + + nathan.sweet + Nathan Sweet + nathan.sweet@gmail.com + + + + + https://github.com/EsotericSoftware/kryonet + scm:git:https://github.com/EsotericSoftware/kryonet.git + scm:git:https://github.com/EsotericSoftware/kryonet.git + HEAD + + + + + src + test + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + + + + com.esotericsoftware + kryo + 4.0.0 + + + com.esotericsoftware + jsonbeans + 0.7 + + + junit + junit + 4.11 + test + + + + diff --git a/src/com/esotericsoftware/kryonet/Client.java b/src/com/esotericsoftware/kryonet/Client.java index f4585970..69572926 100644 --- a/src/com/esotericsoftware/kryonet/Client.java +++ b/src/com/esotericsoftware/kryonet/Client.java @@ -1,534 +1,535 @@ -/* Copyright (c) 2008, Nathan Sweet - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -package com.esotericsoftware.kryonet; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.NetworkInterface; -import java.net.SocketTimeoutException; -import java.nio.ByteBuffer; -import java.nio.channels.CancelledKeyException; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; -import java.security.AccessControlException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryonet.FrameworkMessage.DiscoverHost; -import com.esotericsoftware.kryonet.FrameworkMessage.RegisterTCP; -import com.esotericsoftware.kryonet.FrameworkMessage.RegisterUDP; - -import static com.esotericsoftware.minlog.Log.*; - -/** Represents a TCP and optionally a UDP connection to a {@link Server}. - * @author Nathan Sweet */ -public class Client extends Connection implements EndPoint { - static { - try { - // Needed for NIO selectors on Android 2.2. - System.setProperty("java.net.preferIPv6Addresses", "false"); - } catch (AccessControlException ignored) { - } - } - - private final Serialization serialization; - private Selector selector; - private int emptySelects; - private volatile boolean tcpRegistered, udpRegistered; - private Object tcpRegistrationLock = new Object(); - private Object udpRegistrationLock = new Object(); - private volatile boolean shutdown; - private final Object updateLock = new Object(); - private Thread updateThread; - private int connectTimeout; - private InetAddress connectHost; - private int connectTcpPort; - private int connectUdpPort; - private boolean isClosed; - private ClientDiscoveryHandler discoveryHandler; - - /** Creates a Client with a write buffer size of 8192 and an object buffer size of 2048. */ - public Client () { - this(8192, 2048); - } - - /** @param writeBufferSize One buffer of this size is allocated. Objects are serialized to the write buffer where the bytes are - * queued until they can be written to the TCP socket. - *

- * Normally the socket is writable and the bytes are written immediately. If the socket cannot be written to and - * enough serialized objects are queued to overflow the buffer, then the connection will be closed. - *

- * The write buffer should be sized at least as large as the largest object that will be sent, plus some head room to - * allow for some serialized objects to be queued in case the buffer is temporarily not writable. The amount of head - * room needed is dependent upon the size of objects being sent and how often they are sent. - * @param objectBufferSize One (using only TCP) or three (using both TCP and UDP) buffers of this size are allocated. These - * buffers are used to hold the bytes for a single object graph until it can be sent over the network or - * deserialized. - *

- * The object buffers should be sized at least as large as the largest object that will be sent or received. */ - public Client (int writeBufferSize, int objectBufferSize) { - this(writeBufferSize, objectBufferSize, new KryoSerialization()); - } - - public Client (int writeBufferSize, int objectBufferSize, Serialization serialization) { - super(); - endPoint = this; - - this.serialization = serialization; - - this.discoveryHandler = ClientDiscoveryHandler.DEFAULT; - - initialize(serialization, writeBufferSize, objectBufferSize); - - try { - selector = Selector.open(); - } catch (IOException ex) { - throw new RuntimeException("Error opening selector.", ex); - } - } - - public void setDiscoveryHandler (ClientDiscoveryHandler newDiscoveryHandler) { - discoveryHandler = newDiscoveryHandler; - } - - public Serialization getSerialization () { - return serialization; - } - - public Kryo getKryo () { - return ((KryoSerialization)serialization).getKryo(); - } - - /** Opens a TCP only client. - * @see #connect(int, InetAddress, int, int) */ - public void connect (int timeout, String host, int tcpPort) throws IOException { - connect(timeout, InetAddress.getByName(host), tcpPort, -1); - } - - /** Opens a TCP and UDP client. - * @see #connect(int, InetAddress, int, int) */ - public void connect (int timeout, String host, int tcpPort, int udpPort) throws IOException { - connect(timeout, InetAddress.getByName(host), tcpPort, udpPort); - } - - /** Opens a TCP only client. - * @see #connect(int, InetAddress, int, int) */ - public void connect (int timeout, InetAddress host, int tcpPort) throws IOException { - connect(timeout, host, tcpPort, -1); - } - - /** Opens a TCP and UDP client. Blocks until the connection is complete or the timeout is reached. - *

- * Because the framework must perform some minimal communication before the connection is considered successful, - * {@link #update(int)} must be called on a separate thread during the connection process. - * @throws IllegalStateException if called from the connection's update thread. - * @throws IOException if the client could not be opened or connecting times out. */ - public void connect (int timeout, InetAddress host, int tcpPort, int udpPort) throws IOException { - if (host == null) throw new IllegalArgumentException("host cannot be null."); - if (Thread.currentThread() == getUpdateThread()) - throw new IllegalStateException("Cannot connect on the connection's update thread."); - this.connectTimeout = timeout; - this.connectHost = host; - this.connectTcpPort = tcpPort; - this.connectUdpPort = udpPort; - close(); - if (INFO) { - if (udpPort != -1) - info("kryonet", "Connecting: " + host + ":" + tcpPort + "/" + udpPort); - else - info("kryonet", "Connecting: " + host + ":" + tcpPort); - } - id = -1; - try { - if (udpPort != -1) udp = new UdpConnection(serialization, tcp.readBuffer.capacity()); - - long endTime; - synchronized (updateLock) { - tcpRegistered = false; - selector.wakeup(); - endTime = System.currentTimeMillis() + timeout; - tcp.connect(selector, new InetSocketAddress(host, tcpPort), 5000); - } - - // Wait for RegisterTCP. - synchronized (tcpRegistrationLock) { - while (!tcpRegistered && System.currentTimeMillis() < endTime) { - try { - tcpRegistrationLock.wait(100); - } catch (InterruptedException ignored) { - } - } - if (!tcpRegistered) { - throw new SocketTimeoutException("Connected, but timed out during TCP registration.\n" - + "Note: Client#update must be called in a separate thread during connect."); - } - } - - if (udpPort != -1) { - InetSocketAddress udpAddress = new InetSocketAddress(host, udpPort); - synchronized (updateLock) { - udpRegistered = false; - selector.wakeup(); - udp.connect(selector, udpAddress); - } - - // Wait for RegisterUDP reply. - synchronized (udpRegistrationLock) { - while (!udpRegistered && System.currentTimeMillis() < endTime) { - RegisterUDP registerUDP = new RegisterUDP(); - registerUDP.connectionID = id; - udp.send(this, registerUDP, udpAddress); - try { - udpRegistrationLock.wait(100); - } catch (InterruptedException ignored) { - } - } - if (!udpRegistered) - throw new SocketTimeoutException("Connected, but timed out during UDP registration: " + host + ":" + udpPort); - } - } - } catch (IOException ex) { - close(); - throw ex; - } - } - - /** Calls {@link #connect(int, InetAddress, int, int) connect} with the values last passed to connect. - * @throws IllegalStateException if connect has never been called. */ - public void reconnect () throws IOException { - reconnect(connectTimeout); - } - - /** Calls {@link #connect(int, InetAddress, int, int) connect} with the specified timeout and the other values last passed to - * connect. - * @throws IllegalStateException if connect has never been called. */ - public void reconnect (int timeout) throws IOException { - if (connectHost == null) throw new IllegalStateException("This client has never been connected."); - connect(timeout, connectHost, connectTcpPort, connectUdpPort); - } - - /** Reads or writes any pending data for this client. Multiple threads should not call this method at the same time. - * @param timeout Wait for up to the specified milliseconds for data to be ready to process. May be zero to return immediately - * if there is no data to process. */ - public void update (int timeout) throws IOException { - updateThread = Thread.currentThread(); - synchronized (updateLock) { // Blocks to avoid a select while the selector is used to bind the server connection. - } - long startTime = System.currentTimeMillis(); - int select = 0; - if (timeout > 0) { - select = selector.select(timeout); - } else { - select = selector.selectNow(); - } - if (select == 0) { - emptySelects++; - if (emptySelects == 100) { - emptySelects = 0; - // NIO freaks and returns immediately with 0 sometimes, so try to keep from hogging the CPU. - long elapsedTime = System.currentTimeMillis() - startTime; - try { - if (elapsedTime < 25) Thread.sleep(25 - elapsedTime); - } catch (InterruptedException ex) { - } - } - } else { - emptySelects = 0; - isClosed = false; - Set keys = selector.selectedKeys(); - synchronized (keys) { - for (Iterator iter = keys.iterator(); iter.hasNext();) { - keepAlive(); - SelectionKey selectionKey = iter.next(); - iter.remove(); - try { - int ops = selectionKey.readyOps(); - if ((ops & SelectionKey.OP_READ) == SelectionKey.OP_READ) { - if (selectionKey.attachment() == tcp) { - while (true) { - Object object = tcp.readObject(this); - if (object == null) break; - if (!tcpRegistered) { - if (object instanceof RegisterTCP) { - id = ((RegisterTCP)object).connectionID; - synchronized (tcpRegistrationLock) { - tcpRegistered = true; - tcpRegistrationLock.notifyAll(); - if (TRACE) trace("kryonet", this + " received TCP: RegisterTCP"); - if (udp == null) setConnected(true); - } - if (udp == null) notifyConnected(); - } - continue; - } - if (udp != null && !udpRegistered) { - if (object instanceof RegisterUDP) { - synchronized (udpRegistrationLock) { - udpRegistered = true; - udpRegistrationLock.notifyAll(); - if (TRACE) trace("kryonet", this + " received UDP: RegisterUDP"); - if (DEBUG) { - debug("kryonet", "Port " + udp.datagramChannel.socket().getLocalPort() - + "/UDP connected to: " + udp.connectedAddress); - } - setConnected(true); - } - notifyConnected(); - } - continue; - } - if (!isConnected) continue; - if (DEBUG) { - String objectString = object == null ? "null" : object.getClass().getSimpleName(); - if (!(object instanceof FrameworkMessage)) { - debug("kryonet", this + " received TCP: " + objectString); - } else if (TRACE) { - trace("kryonet", this + " received TCP: " + objectString); - } - } - notifyReceived(object); - } - } else { - if (udp.readFromAddress() == null) continue; - Object object = udp.readObject(this); - if (object == null) continue; - if (DEBUG) { - String objectString = object == null ? "null" : object.getClass().getSimpleName(); - debug("kryonet", this + " received UDP: " + objectString); - } - notifyReceived(object); - } - } - if ((ops & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) tcp.writeOperation(); - } catch (CancelledKeyException ignored) { - // Connection is closed. - } - } - } - } - if (isConnected) { - long time = System.currentTimeMillis(); - if (tcp.isTimedOut(time)) { - if (DEBUG) debug("kryonet", this + " timed out."); - close(); - } else - keepAlive(); - if (isIdle()) notifyIdle(); - } - } - - void keepAlive () { - if (!isConnected) return; - long time = System.currentTimeMillis(); - if (tcp.needsKeepAlive(time)) sendTCP(FrameworkMessage.keepAlive); - if (udp != null && udpRegistered && udp.needsKeepAlive(time)) sendUDP(FrameworkMessage.keepAlive); - } - - public void run () { - if (TRACE) trace("kryonet", "Client thread started."); - shutdown = false; - while (!shutdown) { - try { - update(250); - } catch (IOException ex) { - if (TRACE) { - if (isConnected) - trace("kryonet", "Unable to update connection: " + this, ex); - else - trace("kryonet", "Unable to update connection.", ex); - } else if (DEBUG) { - if (isConnected) - debug("kryonet", this + " update: " + ex.getMessage()); - else - debug("kryonet", "Unable to update connection: " + ex.getMessage()); - } - close(); - } catch (KryoNetException ex) { - lastProtocolError = ex; - if (ERROR) { - if (isConnected) - error("kryonet", "Error updating connection: " + this, ex); - else - error("kryonet", "Error updating connection.", ex); - } - close(); - throw ex; - } - } - if (TRACE) trace("kryonet", "Client thread stopped."); - } - - public void start () { - // Try to let any previous update thread stop. - if (updateThread != null) { - shutdown = true; - try { - updateThread.join(5000); - } catch (InterruptedException ignored) { - } - } - updateThread = new Thread(this, "Client"); - updateThread.setDaemon(true); - updateThread.start(); - } - - public void stop () { - if (shutdown) return; - close(); - if (TRACE) trace("kryonet", "Client thread stopping."); - shutdown = true; - selector.wakeup(); - } - - public void close () { - super.close(); - synchronized (updateLock) { // Blocks to avoid a select while the selector is used to bind the server connection. - } - // Select one last time to complete closing the socket. - if (!isClosed) { - isClosed = true; - selector.wakeup(); - try { - selector.selectNow(); - } catch (IOException ignored) { - } - } - } - - /** Releases the resources used by this client, which may no longer be used. */ - public void dispose () throws IOException { - close(); - selector.close(); - } - - public void addListener (Listener listener) { - super.addListener(listener); - if (TRACE) trace("kryonet", "Client listener added."); - } - - public void removeListener (Listener listener) { - super.removeListener(listener); - if (TRACE) trace("kryonet", "Client listener removed."); - } - - /** An empty object will be sent if the UDP connection is inactive more than the specified milliseconds. Network hardware may - * keep a translation table of inside to outside IP addresses and a UDP keep alive keeps this table entry from expiring. Set to - * zero to disable. Defaults to 19000. */ - public void setKeepAliveUDP (int keepAliveMillis) { - if (udp == null) throw new IllegalStateException("Not connected via UDP."); - udp.keepAliveMillis = keepAliveMillis; - } - - public Thread getUpdateThread () { - return updateThread; - } - - private void broadcast (int udpPort, DatagramSocket socket) throws IOException { - ByteBuffer dataBuffer = ByteBuffer.allocate(64); - serialization.write(null, dataBuffer, new DiscoverHost()); - dataBuffer.flip(); - byte[] data = new byte[dataBuffer.limit()]; - dataBuffer.get(data); - for (NetworkInterface iface : Collections.list(NetworkInterface.getNetworkInterfaces())) { - for (InetAddress address : Collections.list(iface.getInetAddresses())) { - // Java 1.5 doesn't support getting the subnet mask, so try the two most common. - byte[] ip = address.getAddress(); - ip[3] = -1; // 255.255.255.0 - try { - socket.send(new DatagramPacket(data, data.length, InetAddress.getByAddress(ip), udpPort)); - } catch (Exception ignored) { - } - ip[2] = -1; // 255.255.0.0 - try { - socket.send(new DatagramPacket(data, data.length, InetAddress.getByAddress(ip), udpPort)); - } catch (Exception ignored) { - } - } - } - if (DEBUG) debug("kryonet", "Broadcasted host discovery on port: " + udpPort); - } - - /** Broadcasts a UDP message on the LAN to discover any running servers. The address of the first server to respond is returned. - * @param udpPort The UDP port of the server. - * @param timeoutMillis The number of milliseconds to wait for a response. - * @return the first server found, or null if no server responded. */ - public InetAddress discoverHost (int udpPort, int timeoutMillis) { - DatagramSocket socket = null; - try { - socket = new DatagramSocket(); - broadcast(udpPort, socket); - socket.setSoTimeout(timeoutMillis); - DatagramPacket packet = discoveryHandler.onRequestNewDatagramPacket(); - try { - socket.receive(packet); - } catch (SocketTimeoutException ex) { - if (INFO) info("kryonet", "Host discovery timed out."); - return null; - } - if (INFO) info("kryonet", "Discovered server: " + packet.getAddress()); - discoveryHandler.onDiscoveredHost(packet, getKryo()); - return packet.getAddress(); - } catch (IOException ex) { - if (ERROR) error("kryonet", "Host discovery failed.", ex); - return null; - } finally { - if (socket != null) socket.close(); - discoveryHandler.onFinally(); - } - } - - /** Broadcasts a UDP message on the LAN to discover any running servers. - * @param udpPort The UDP port of the server. - * @param timeoutMillis The number of milliseconds to wait for a response. */ - public List discoverHosts (int udpPort, int timeoutMillis) { - List hosts = new ArrayList(); - DatagramSocket socket = null; - try { - socket = new DatagramSocket(); - broadcast(udpPort, socket); - socket.setSoTimeout(timeoutMillis); - while (true) { - DatagramPacket packet = discoveryHandler.onRequestNewDatagramPacket(); - try { - socket.receive(packet); - } catch (SocketTimeoutException ex) { - if (INFO) info("kryonet", "Host discovery timed out."); - return hosts; - } - if (INFO) info("kryonet", "Discovered server: " + packet.getAddress()); - discoveryHandler.onDiscoveredHost(packet, getKryo()); - hosts.add(packet.getAddress()); - } - } catch (IOException ex) { - if (ERROR) error("kryonet", "Host discovery failed.", ex); - return hosts; - } finally { - if (socket != null) socket.close(); - discoveryHandler.onFinally(); - } - } -} +/* Copyright (c) 2008, Nathan Sweet + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +package com.esotericsoftware.kryonet; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.NetworkInterface; +import java.net.SocketTimeoutException; +import java.nio.ByteBuffer; +import java.nio.channels.CancelledKeyException; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.security.AccessControlException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryonet.FrameworkMessage.DiscoverHost; +import com.esotericsoftware.kryonet.FrameworkMessage.RegisterTCP; +import com.esotericsoftware.kryonet.FrameworkMessage.RegisterUDP; + +import static com.esotericsoftware.minlog.Log.*; + +/** Represents a TCP and optionally a UDP connection to a {@link Server}. + * @author Nathan Sweet */ +public class Client extends Connection implements EndPoint { + static { + try { + // Needed for NIO selectors on Android 2.2. + System.setProperty("java.net.preferIPv6Addresses", "false"); + } catch (AccessControlException ignored) { + } + } + + private final Serialization serialization; + private Selector selector; + private int emptySelects; + private volatile boolean tcpRegistered, udpRegistered; + private Object tcpRegistrationLock = new Object(); + private Object udpRegistrationLock = new Object(); + private volatile boolean shutdown; + private final Object updateLock = new Object(); + private Thread updateThread; + private int connectTimeout; + private InetAddress connectHost; + private int connectTcpPort; + private int connectUdpPort; + private boolean isClosed; + private ClientDiscoveryHandler discoveryHandler; + + /** Creates a Client with a write buffer size of 8192 and an object buffer size of 2048. */ + public Client () { + this(8192, 2048); + } + + /** @param writeBufferSize One buffer of this size is allocated. Objects are serialized to the write buffer where the bytes are + * queued until they can be written to the TCP socket. + *

+ * Normally the socket is writable and the bytes are written immediately. If the socket cannot be written to and + * enough serialized objects are queued to overflow the buffer, then the connection will be closed. + *

+ * The write buffer should be sized at least as large as the largest object that will be sent, plus some head room to + * allow for some serialized objects to be queued in case the buffer is temporarily not writable. The amount of head + * room needed is dependent upon the size of objects being sent and how often they are sent. + * @param objectBufferSize One (using only TCP) or three (using both TCP and UDP) buffers of this size are allocated. These + * buffers are used to hold the bytes for a single object graph until it can be sent over the network or + * deserialized. + *

+ * The object buffers should be sized at least as large as the largest object that will be sent or received. */ + public Client (int writeBufferSize, int objectBufferSize) { + this(writeBufferSize, objectBufferSize, new KryoSerialization()); + } + + public Client (int writeBufferSize, int objectBufferSize, Serialization serialization) { + super(); + endPoint = this; + + this.serialization = serialization; + + this.discoveryHandler = new ClientDiscoveryHandler() { + }; + + initialize(serialization, writeBufferSize, objectBufferSize); + + try { + selector = Selector.open(); + } catch (IOException ex) { + throw new RuntimeException("Error opening selector.", ex); + } + } + + public void setDiscoveryHandler (ClientDiscoveryHandler newDiscoveryHandler) { + discoveryHandler = newDiscoveryHandler; + } + + public Serialization getSerialization () { + return serialization; + } + + public Kryo getKryo () { + return ((KryoSerialization)serialization).getKryo(); + } + + /** Opens a TCP only client. + * @see #connect(int, InetAddress, int, int) */ + public void connect (int timeout, String host, int tcpPort) throws IOException { + connect(timeout, InetAddress.getByName(host), tcpPort, -1); + } + + /** Opens a TCP and UDP client. + * @see #connect(int, InetAddress, int, int) */ + public void connect (int timeout, String host, int tcpPort, int udpPort) throws IOException { + connect(timeout, InetAddress.getByName(host), tcpPort, udpPort); + } + + /** Opens a TCP only client. + * @see #connect(int, InetAddress, int, int) */ + public void connect (int timeout, InetAddress host, int tcpPort) throws IOException { + connect(timeout, host, tcpPort, -1); + } + + /** Opens a TCP and UDP client. Blocks until the connection is complete or the timeout is reached. + *

+ * Because the framework must perform some minimal communication before the connection is considered successful, + * {@link #update(int)} must be called on a separate thread during the connection process. + * @throws IllegalStateException if called from the connection's update thread. + * @throws IOException if the client could not be opened or connecting times out. */ + public void connect (int timeout, InetAddress host, int tcpPort, int udpPort) throws IOException { + if (host == null) throw new IllegalArgumentException("host cannot be null."); + if (Thread.currentThread() == getUpdateThread()) + throw new IllegalStateException("Cannot connect on the connection's update thread."); + this.connectTimeout = timeout; + this.connectHost = host; + this.connectTcpPort = tcpPort; + this.connectUdpPort = udpPort; + close(); + if (INFO) { + if (udpPort != -1) + info("kryonet", "Connecting: " + host + ":" + tcpPort + "/" + udpPort); + else + info("kryonet", "Connecting: " + host + ":" + tcpPort); + } + id = -1; + try { + if (udpPort != -1) udp = new UdpConnection(serialization, tcp.readBuffer.capacity()); + + long endTime; + synchronized (updateLock) { + tcpRegistered = false; + selector.wakeup(); + endTime = System.currentTimeMillis() + timeout; + tcp.connect(selector, new InetSocketAddress(host, tcpPort), 5000); + } + + // Wait for RegisterTCP. + synchronized (tcpRegistrationLock) { + while (!tcpRegistered && System.currentTimeMillis() < endTime) { + try { + tcpRegistrationLock.wait(100); + } catch (InterruptedException ignored) { + } + } + if (!tcpRegistered) { + throw new SocketTimeoutException("Connected, but timed out during TCP registration.\n" + + "Note: Client#update must be called in a separate thread during connect."); + } + } + + if (udpPort != -1) { + InetSocketAddress udpAddress = new InetSocketAddress(host, udpPort); + synchronized (updateLock) { + udpRegistered = false; + selector.wakeup(); + udp.connect(selector, udpAddress); + } + + // Wait for RegisterUDP reply. + synchronized (udpRegistrationLock) { + while (!udpRegistered && System.currentTimeMillis() < endTime) { + RegisterUDP registerUDP = new RegisterUDP(); + registerUDP.connectionID = id; + udp.send(this, registerUDP, udpAddress); + try { + udpRegistrationLock.wait(100); + } catch (InterruptedException ignored) { + } + } + if (!udpRegistered) + throw new SocketTimeoutException("Connected, but timed out during UDP registration: " + host + ":" + udpPort); + } + } + } catch (IOException ex) { + close(); + throw ex; + } + } + + /** Calls {@link #connect(int, InetAddress, int, int) connect} with the values last passed to connect. + * @throws IllegalStateException if connect has never been called. */ + public void reconnect () throws IOException { + reconnect(connectTimeout); + } + + /** Calls {@link #connect(int, InetAddress, int, int) connect} with the specified timeout and the other values last passed to + * connect. + * @throws IllegalStateException if connect has never been called. */ + public void reconnect (int timeout) throws IOException { + if (connectHost == null) throw new IllegalStateException("This client has never been connected."); + connect(timeout, connectHost, connectTcpPort, connectUdpPort); + } + + /** Reads or writes any pending data for this client. Multiple threads should not call this method at the same time. + * @param timeout Wait for up to the specified milliseconds for data to be ready to process. May be zero to return immediately + * if there is no data to process. */ + public void update (int timeout) throws IOException { + updateThread = Thread.currentThread(); + synchronized (updateLock) { // Blocks to avoid a select while the selector is used to bind the server connection. + } + long startTime = System.currentTimeMillis(); + int select = 0; + if (timeout > 0) { + select = selector.select(timeout); + } else { + select = selector.selectNow(); + } + if (select == 0) { + emptySelects++; + if (emptySelects == 100) { + emptySelects = 0; + // NIO freaks and returns immediately with 0 sometimes, so try to keep from hogging the CPU. + long elapsedTime = System.currentTimeMillis() - startTime; + try { + if (elapsedTime < 25) Thread.sleep(25 - elapsedTime); + } catch (InterruptedException ex) { + } + } + } else { + emptySelects = 0; + isClosed = false; + Set keys = selector.selectedKeys(); + synchronized (keys) { + for (Iterator iter = keys.iterator(); iter.hasNext();) { + keepAlive(); + SelectionKey selectionKey = iter.next(); + iter.remove(); + try { + int ops = selectionKey.readyOps(); + if ((ops & SelectionKey.OP_READ) == SelectionKey.OP_READ) { + if (selectionKey.attachment() == tcp) { + while (true) { + Object object = tcp.readObject(this); + if (object == null) break; + if (!tcpRegistered) { + if (object instanceof RegisterTCP) { + id = ((RegisterTCP)object).connectionID; + synchronized (tcpRegistrationLock) { + tcpRegistered = true; + tcpRegistrationLock.notifyAll(); + if (TRACE) trace("kryonet", this + " received TCP: RegisterTCP"); + if (udp == null) setConnected(true); + } + if (udp == null) notifyConnected(); + } + continue; + } + if (udp != null && !udpRegistered) { + if (object instanceof RegisterUDP) { + synchronized (udpRegistrationLock) { + udpRegistered = true; + udpRegistrationLock.notifyAll(); + if (TRACE) trace("kryonet", this + " received UDP: RegisterUDP"); + if (DEBUG) { + debug("kryonet", "Port " + udp.datagramChannel.socket().getLocalPort() + + "/UDP connected to: " + udp.connectedAddress); + } + setConnected(true); + } + notifyConnected(); + } + continue; + } + if (!isConnected) continue; + if (DEBUG) { + String objectString = object == null ? "null" : object.getClass().getSimpleName(); + if (!(object instanceof FrameworkMessage)) { + debug("kryonet", this + " received TCP: " + objectString); + } else if (TRACE) { + trace("kryonet", this + " received TCP: " + objectString); + } + } + notifyReceived(object); + } + } else { + if (udp.readFromAddress() == null) continue; + Object object = udp.readObject(this); + if (object == null) continue; + if (DEBUG) { + String objectString = object == null ? "null" : object.getClass().getSimpleName(); + debug("kryonet", this + " received UDP: " + objectString); + } + notifyReceived(object); + } + } + if ((ops & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) tcp.writeOperation(); + } catch (CancelledKeyException ignored) { + // Connection is closed. + } + } + } + } + if (isConnected) { + long time = System.currentTimeMillis(); + if (tcp.isTimedOut(time)) { + if (DEBUG) debug("kryonet", this + " timed out."); + close(); + } else + keepAlive(); + if (isIdle()) notifyIdle(); + } + } + + void keepAlive () { + if (!isConnected) return; + long time = System.currentTimeMillis(); + if (tcp.needsKeepAlive(time)) sendTCP(FrameworkMessage.keepAlive); + if (udp != null && udpRegistered && udp.needsKeepAlive(time)) sendUDP(FrameworkMessage.keepAlive); + } + + public void run () { + if (TRACE) trace("kryonet", "Client thread started."); + shutdown = false; + while (!shutdown) { + try { + update(250); + } catch (IOException ex) { + if (TRACE) { + if (isConnected) + trace("kryonet", "Unable to update connection: " + this, ex); + else + trace("kryonet", "Unable to update connection.", ex); + } else if (DEBUG) { + if (isConnected) + debug("kryonet", this + " update: " + ex.getMessage()); + else + debug("kryonet", "Unable to update connection: " + ex.getMessage()); + } + close(); + } catch (KryoNetException ex) { + lastProtocolError = ex; + if (ERROR) { + if (isConnected) + error("kryonet", "Error updating connection: " + this, ex); + else + error("kryonet", "Error updating connection.", ex); + } + close(); + throw ex; + } + } + if (TRACE) trace("kryonet", "Client thread stopped."); + } + + public void start () { + // Try to let any previous update thread stop. + if (updateThread != null) { + shutdown = true; + try { + updateThread.join(5000); + } catch (InterruptedException ignored) { + } + } + updateThread = new Thread(this, "Client"); + updateThread.setDaemon(true); + updateThread.start(); + } + + public void stop () { + if (shutdown) return; + close(); + if (TRACE) trace("kryonet", "Client thread stopping."); + shutdown = true; + selector.wakeup(); + } + + public void close () { + super.close(); + synchronized (updateLock) { // Blocks to avoid a select while the selector is used to bind the server connection. + } + // Select one last time to complete closing the socket. + if (!isClosed) { + isClosed = true; + selector.wakeup(); + try { + selector.selectNow(); + } catch (IOException ignored) { + } + } + } + + /** Releases the resources used by this client, which may no longer be used. */ + public void dispose () throws IOException { + close(); + selector.close(); + } + + public void addListener (Listener listener) { + super.addListener(listener); + if (TRACE) trace("kryonet", "Client listener added."); + } + + public void removeListener (Listener listener) { + super.removeListener(listener); + if (TRACE) trace("kryonet", "Client listener removed."); + } + + /** An empty object will be sent if the UDP connection is inactive more than the specified milliseconds. Network hardware may + * keep a translation table of inside to outside IP addresses and a UDP keep alive keeps this table entry from expiring. Set to + * zero to disable. Defaults to 19000. */ + public void setKeepAliveUDP (int keepAliveMillis) { + if (udp == null) throw new IllegalStateException("Not connected via UDP."); + udp.keepAliveMillis = keepAliveMillis; + } + + public Thread getUpdateThread () { + return updateThread; + } + + private void broadcast (int udpPort, DatagramSocket socket) throws IOException { + ByteBuffer dataBuffer = ByteBuffer.allocate(64); + serialization.write(null, dataBuffer, new DiscoverHost()); + dataBuffer.flip(); + byte[] data = new byte[dataBuffer.limit()]; + dataBuffer.get(data); + for (NetworkInterface iface : Collections.list(NetworkInterface.getNetworkInterfaces())) { + for (InetAddress address : Collections.list(iface.getInetAddresses())) { + // Java 1.5 doesn't support getting the subnet mask, so try the two most common. + byte[] ip = address.getAddress(); + ip[3] = -1; // 255.255.255.0 + try { + socket.send(new DatagramPacket(data, data.length, InetAddress.getByAddress(ip), udpPort)); + } catch (Exception ignored) { + } + ip[2] = -1; // 255.255.0.0 + try { + socket.send(new DatagramPacket(data, data.length, InetAddress.getByAddress(ip), udpPort)); + } catch (Exception ignored) { + } + } + } + if (DEBUG) debug("kryonet", "Broadcasted host discovery on port: " + udpPort); + } + + /** Broadcasts a UDP message on the LAN to discover any running servers. The address of the first server to respond is returned. + * @param udpPort The UDP port of the server. + * @param timeoutMillis The number of milliseconds to wait for a response. + * @return the first server found, or null if no server responded. */ + public InetAddress discoverHost (int udpPort, int timeoutMillis) { + DatagramSocket socket = null; + try { + socket = new DatagramSocket(); + broadcast(udpPort, socket); + socket.setSoTimeout(timeoutMillis); + DatagramPacket packet = discoveryHandler.onRequestNewDatagramPacket(); + try { + socket.receive(packet); + } catch (SocketTimeoutException ex) { + if (INFO) info("kryonet", "Host discovery timed out."); + return null; + } + if (INFO) info("kryonet", "Discovered server: " + packet.getAddress()); + discoveryHandler.onDiscoveredHost(packet, getKryo()); + return packet.getAddress(); + } catch (IOException ex) { + if (ERROR) error("kryonet", "Host discovery failed.", ex); + return null; + } finally { + if (socket != null) socket.close(); + discoveryHandler.onFinally(); + } + } + + /** Broadcasts a UDP message on the LAN to discover any running servers. + * @param udpPort The UDP port of the server. + * @param timeoutMillis The number of milliseconds to wait for a response. */ + public List discoverHosts (int udpPort, int timeoutMillis) { + List hosts = new ArrayList(); + DatagramSocket socket = null; + try { + socket = new DatagramSocket(); + broadcast(udpPort, socket); + socket.setSoTimeout(timeoutMillis); + while (true) { + DatagramPacket packet = discoveryHandler.onRequestNewDatagramPacket(); + try { + socket.receive(packet); + } catch (SocketTimeoutException ex) { + if (INFO) info("kryonet", "Host discovery timed out."); + return hosts; + } + if (INFO) info("kryonet", "Discovered server: " + packet.getAddress()); + discoveryHandler.onDiscoveredHost(packet, getKryo()); + hosts.add(packet.getAddress()); + } + } catch (IOException ex) { + if (ERROR) error("kryonet", "Host discovery failed.", ex); + return hosts; + } finally { + if (socket != null) socket.close(); + discoveryHandler.onFinally(); + } + } +} diff --git a/src/com/esotericsoftware/kryonet/ClientDiscoveryHandler.java b/src/com/esotericsoftware/kryonet/ClientDiscoveryHandler.java index e2f28ac4..d31cb1cd 100644 --- a/src/com/esotericsoftware/kryonet/ClientDiscoveryHandler.java +++ b/src/com/esotericsoftware/kryonet/ClientDiscoveryHandler.java @@ -1,15 +1,15 @@ /* Copyright (c) 2008, Nathan Sweet * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following * conditions are met: - * + * * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL @@ -26,41 +26,20 @@ public interface ClientDiscoveryHandler { - /** - * This implementation of the {@link ClientDiscoveryHandler} is responsible - * for providing the {@link Client} with it's default behavior. - */ - public static final ClientDiscoveryHandler DEFAULT = new ClientDiscoveryHandler() { - - @Override - public DatagramPacket onRequestNewDatagramPacket() { - return new DatagramPacket(new byte[0], 0); - } - - @Override - public void onDiscoveredHost(DatagramPacket datagramPacket, Kryo kryo) { - // - } - - @Override - public void onFinally() { - // - } - - }; - /** * Implementations of this method should return a new {@link DatagramPacket} * that the {@link Client} will use to fill with the incoming packet data * sent by the {@link ServerDiscoveryHandler}. - * + * * @return a new {@link DatagramPacket} */ - public DatagramPacket onRequestNewDatagramPacket(); + public default DatagramPacket onRequestNewDatagramPacket() { + return new DatagramPacket(new byte[0], 0); + }; /** * Called when the {@link Client} discovers a host. - * + * * @param datagramPacket * the same {@link DatagramPacket} from * {@link #onRequestNewDatagramPacket()}, after being filled with @@ -68,13 +47,15 @@ public void onFinally() { * @param kryo * the {@link Kryo} instance */ - public void onDiscoveredHost(DatagramPacket datagramPacket, Kryo kryo); + public default void onDiscoveredHost(DatagramPacket datagramPacket, Kryo kryo) { + }; /** * Called right before the {@link Client#discoverHost(int, int)} or * {@link Client#discoverHosts(int, int)} method exits. This allows the * implementation to clean up any resources used, i.e. an {@link Input}. */ - public void onFinally(); + public default void onFinally() { + }; } diff --git a/src/com/esotericsoftware/kryonet/Listener.java b/src/com/esotericsoftware/kryonet/Listener.java index bd9ab148..f07a554d 100644 --- a/src/com/esotericsoftware/kryonet/Listener.java +++ b/src/com/esotericsoftware/kryonet/Listener.java @@ -1,189 +1,189 @@ -/* Copyright (c) 2008, Nathan Sweet - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -package com.esotericsoftware.kryonet; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import static com.esotericsoftware.minlog.Log.*; - -/** Used to be notified about connection events. */ -public class Listener { - /** Called when the remote end has been connected. This will be invoked before any objects are received by - * {@link #received(Connection, Object)}. This will be invoked on the same thread as {@link Client#update(int)} and - * {@link Server#update(int)}. This method should not block for long periods as other network activity will not be processed - * until it returns. */ - public void connected (Connection connection) { - } - - /** Called when the remote end is no longer connected. There is no guarantee as to what thread will invoke this method. */ - public void disconnected (Connection connection) { - } - - /** Called when an object has been received from the remote end of the connection. This will be invoked on the same thread as - * {@link Client#update(int)} and {@link Server#update(int)}. This method should not block for long periods as other network - * activity will not be processed until it returns. */ - public void received (Connection connection, Object object) { - } - - /** Called when the connection is below the {@link Connection#setIdleThreshold(float) idle threshold}. */ - public void idle (Connection connection) { - } - - /** Uses reflection to called "received(Connection, XXX)" on the listener, where XXX is the received object type. Note this - * class uses a HashMap lookup and (cached) reflection, so is not as efficient as writing a series of "instanceof" statements. */ - static public class ReflectionListener extends Listener { - private final HashMap classToMethod = new HashMap(); - - public void received (Connection connection, Object object) { - Class type = object.getClass(); - Method method = classToMethod.get(type); - if (method == null) { - if (classToMethod.containsKey(type)) return; // Only fail on the first attempt to find the method. - try { - method = getClass().getMethod("received", new Class[] {Connection.class, type}); - method.setAccessible(true); - } catch (SecurityException ex) { - if (ERROR) error("kryonet", "Unable to access method: received(Connection, " + type.getName() + ")", ex); - return; - } catch (NoSuchMethodException ex) { - if (DEBUG) - debug("kryonet", - "Unable to find listener method: " + getClass().getName() + "#received(Connection, " + type.getName() + ")"); - return; - } finally { - classToMethod.put(type, method); - } - } - try { - method.invoke(this, connection, object); - } catch (Throwable ex) { - if (ex instanceof InvocationTargetException && ex.getCause() != null) ex = ex.getCause(); - if (ex instanceof RuntimeException) throw (RuntimeException)ex; - throw new RuntimeException("Error invoking method: " + getClass().getName() + "#received(Connection, " - + type.getName() + ")", ex); - } - } - } - - /** Wraps a listener and queues notifications as {@link Runnable runnables}. This allows the runnables to be processed on a - * different thread, preventing the connection's update thread from being blocked. */ - static public abstract class QueuedListener extends Listener { - final Listener listener; - - public QueuedListener (Listener listener) { - if (listener == null) throw new IllegalArgumentException("listener cannot be null."); - this.listener = listener; - } - - public void connected (final Connection connection) { - queue(new Runnable() { - public void run () { - listener.connected(connection); - } - }); - } - - public void disconnected (final Connection connection) { - queue(new Runnable() { - public void run () { - listener.disconnected(connection); - } - }); - } - - public void received (final Connection connection, final Object object) { - queue(new Runnable() { - public void run () { - listener.received(connection, object); - } - }); - } - - public void idle (final Connection connection) { - queue(new Runnable() { - public void run () { - listener.idle(connection); - } - }); - } - - abstract protected void queue (Runnable runnable); - } - - /** Wraps a listener and processes notification events on a separate thread. */ - static public class ThreadedListener extends QueuedListener { - protected final ExecutorService threadPool; - - /** Creates a single thread to process notification events. */ - public ThreadedListener (Listener listener) { - this(listener, Executors.newFixedThreadPool(1)); - } - - /** Uses the specified threadPool to process notification events. */ - public ThreadedListener (Listener listener, ExecutorService threadPool) { - super(listener); - if (threadPool == null) throw new IllegalArgumentException("threadPool cannot be null."); - this.threadPool = threadPool; - } - - public void queue (Runnable runnable) { - threadPool.execute(runnable); - } - } - - /** Delays the notification of the wrapped listener to simulate lag on incoming objects. Notification events are processed on a - * separate thread after a delay. Note that only incoming objects are delayed. To delay outgoing objects, use a LagListener at - * the other end of the connection. */ - static public class LagListener extends QueuedListener { - private final ScheduledExecutorService threadPool; - private final int lagMillisMin, lagMillisMax; - final LinkedList runnables = new LinkedList(); - - public LagListener (int lagMillisMin, int lagMillisMax, Listener listener) { - super(listener); - this.lagMillisMin = lagMillisMin; - this.lagMillisMax = lagMillisMax; - threadPool = Executors.newScheduledThreadPool(1); - } - - public void queue (Runnable runnable) { - synchronized (runnables) { - runnables.addFirst(runnable); - } - int lag = lagMillisMin + (int)(Math.random() * (lagMillisMax - lagMillisMin)); - threadPool.schedule(new Runnable() { - public void run () { - Runnable runnable; - synchronized (runnables) { - runnable = runnables.removeLast(); - } - runnable.run(); - } - }, lag, TimeUnit.MILLISECONDS); - } - } -} +/* Copyright (c) 2008, Nathan Sweet + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +package com.esotericsoftware.kryonet; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import static com.esotericsoftware.minlog.Log.*; + +/** Used to be notified about connection events. */ +public interface Listener { + /** Called when the remote end has been connected. This will be invoked before any objects are received by + * {@link #received(Connection, Object)}. This will be invoked on the same thread as {@link Client#update(int)} and + * {@link Server#update(int)}. This method should not block for long periods as other network activity will not be processed + * until it returns. */ + public default void connected (Connection connection) { + }; + + /** Called when the remote end is no longer connected. There is no guarantee as to what thread will invoke this method. */ + public default void disconnected (Connection connection) { + }; + + /** Called when an object has been received from the remote end of the connection. This will be invoked on the same thread as + * {@link Client#update(int)} and {@link Server#update(int)}. This method should not block for long periods as other network + * activity will not be processed until it returns. */ + public default void received (Connection connection, Object object) { + }; + + /** Called when the connection is below the {@link Connection#setIdleThreshold(float) idle threshold}. */ + public default void idle (Connection connection) { + }; + + /** Uses reflection to called "received(Connection, XXX)" on the listener, where XXX is the received object type. Note this + * class uses a HashMap lookup and (cached) reflection, so is not as efficient as writing a series of "instanceof" statements. */ + static public class ReflectionListener implements Listener { + private final HashMap classToMethod = new HashMap(); + + public void received (Connection connection, Object object) { + Class type = object.getClass(); + Method method = classToMethod.get(type); + if (method == null) { + if (classToMethod.containsKey(type)) return; // Only fail on the first attempt to find the method. + try { + method = getClass().getMethod("received", new Class[] {Connection.class, type}); + method.setAccessible(true); + } catch (SecurityException ex) { + if (ERROR) error("kryonet", "Unable to access method: received(Connection, " + type.getName() + ")", ex); + return; + } catch (NoSuchMethodException ex) { + if (DEBUG) + debug("kryonet", + "Unable to find listener method: " + getClass().getName() + "#received(Connection, " + type.getName() + ")"); + return; + } finally { + classToMethod.put(type, method); + } + } + try { + method.invoke(this, connection, object); + } catch (Throwable ex) { + if (ex instanceof InvocationTargetException && ex.getCause() != null) ex = ex.getCause(); + if (ex instanceof RuntimeException) throw (RuntimeException)ex; + throw new RuntimeException("Error invoking method: " + getClass().getName() + "#received(Connection, " + + type.getName() + ")", ex); + } + } + } + + /** Wraps a listener and queues notifications as {@link Runnable runnables}. This allows the runnables to be processed on a + * different thread, preventing the connection's update thread from being blocked. */ + static public abstract class QueuedListener implements Listener { + final Listener listener; + + public QueuedListener (Listener listener) { + if (listener == null) throw new IllegalArgumentException("listener cannot be null."); + this.listener = listener; + } + + public void connected (final Connection connection) { + queue(new Runnable() { + public void run () { + listener.connected(connection); + } + }); + } + + public void disconnected (final Connection connection) { + queue(new Runnable() { + public void run () { + listener.disconnected(connection); + } + }); + } + + public void received (final Connection connection, final Object object) { + queue(new Runnable() { + public void run () { + listener.received(connection, object); + } + }); + } + + public void idle (final Connection connection) { + queue(new Runnable() { + public void run () { + listener.idle(connection); + } + }); + } + + abstract protected void queue (Runnable runnable); + } + + /** Wraps a listener and processes notification events on a separate thread. */ + static public class ThreadedListener extends QueuedListener { + protected final ExecutorService threadPool; + + /** Creates a single thread to process notification events. */ + public ThreadedListener (Listener listener) { + this(listener, Executors.newFixedThreadPool(1)); + } + + /** Uses the specified threadPool to process notification events. */ + public ThreadedListener (Listener listener, ExecutorService threadPool) { + super(listener); + if (threadPool == null) throw new IllegalArgumentException("threadPool cannot be null."); + this.threadPool = threadPool; + } + + public void queue (Runnable runnable) { + threadPool.execute(runnable); + } + } + + /** Delays the notification of the wrapped listener to simulate lag on incoming objects. Notification events are processed on a + * separate thread after a delay. Note that only incoming objects are delayed. To delay outgoing objects, use a LagListener at + * the other end of the connection. */ + static public class LagListener extends QueuedListener { + private final ScheduledExecutorService threadPool; + private final int lagMillisMin, lagMillisMax; + final LinkedList runnables = new LinkedList(); + + public LagListener (int lagMillisMin, int lagMillisMax, Listener listener) { + super(listener); + this.lagMillisMin = lagMillisMin; + this.lagMillisMax = lagMillisMax; + threadPool = Executors.newScheduledThreadPool(1); + } + + public void queue (Runnable runnable) { + synchronized (runnables) { + runnables.addFirst(runnable); + } + int lag = lagMillisMin + (int)(Math.random() * (lagMillisMax - lagMillisMin)); + threadPool.schedule(new Runnable() { + public void run () { + Runnable runnable; + synchronized (runnables) { + runnable = runnables.removeLast(); + } + runnable.run(); + } + }, lag, TimeUnit.MILLISECONDS); + } + } +} diff --git a/src/com/esotericsoftware/kryonet/Server.java b/src/com/esotericsoftware/kryonet/Server.java index 3bdd7f43..74d1016e 100644 --- a/src/com/esotericsoftware/kryonet/Server.java +++ b/src/com/esotericsoftware/kryonet/Server.java @@ -1,601 +1,602 @@ -/* Copyright (c) 2008, Nathan Sweet - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -package com.esotericsoftware.kryonet; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.nio.ByteBuffer; -import java.nio.channels.CancelledKeyException; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; -import java.nio.channels.ServerSocketChannel; -import java.nio.channels.SocketChannel; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.Set; - -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryo.util.IntMap; -import com.esotericsoftware.kryonet.FrameworkMessage.DiscoverHost; -import com.esotericsoftware.kryonet.FrameworkMessage.RegisterTCP; -import com.esotericsoftware.kryonet.FrameworkMessage.RegisterUDP; - -import static com.esotericsoftware.minlog.Log.*; - -/** Manages TCP and optionally UDP connections from many {@link Client Clients}. - * @author Nathan Sweet */ -public class Server implements EndPoint { - private final Serialization serialization; - private final int writeBufferSize, objectBufferSize; - private final Selector selector; - private int emptySelects; - private ServerSocketChannel serverChannel; - private UdpConnection udp; - private Connection[] connections = {}; - private IntMap pendingConnections = new IntMap(); - Listener[] listeners = {}; - private Object listenerLock = new Object(); - private int nextConnectionID = 1; - private volatile boolean shutdown; - private Object updateLock = new Object(); - private Thread updateThread; - private ServerDiscoveryHandler discoveryHandler; - - private Listener dispatchListener = new Listener() { - public void connected (Connection connection) { - Listener[] listeners = Server.this.listeners; - for (int i = 0, n = listeners.length; i < n; i++) - listeners[i].connected(connection); - } - - public void disconnected (Connection connection) { - removeConnection(connection); - Listener[] listeners = Server.this.listeners; - for (int i = 0, n = listeners.length; i < n; i++) - listeners[i].disconnected(connection); - } - - public void received (Connection connection, Object object) { - Listener[] listeners = Server.this.listeners; - for (int i = 0, n = listeners.length; i < n; i++) - listeners[i].received(connection, object); - } - - public void idle (Connection connection) { - Listener[] listeners = Server.this.listeners; - for (int i = 0, n = listeners.length; i < n; i++) - listeners[i].idle(connection); - } - }; - - /** Creates a Server with a write buffer size of 16384 and an object buffer size of 2048. */ - public Server () { - this(16384, 2048); - } - - /** @param writeBufferSize One buffer of this size is allocated for each connected client. Objects are serialized to the write - * buffer where the bytes are queued until they can be written to the TCP socket. - *

- * Normally the socket is writable and the bytes are written immediately. If the socket cannot be written to and - * enough serialized objects are queued to overflow the buffer, then the connection will be closed. - *

- * The write buffer should be sized at least as large as the largest object that will be sent, plus some head room to - * allow for some serialized objects to be queued in case the buffer is temporarily not writable. The amount of head - * room needed is dependent upon the size of objects being sent and how often they are sent. - * @param objectBufferSize One (using only TCP) or three (using both TCP and UDP) buffers of this size are allocated. These - * buffers are used to hold the bytes for a single object graph until it can be sent over the network or - * deserialized. - *

- * The object buffers should be sized at least as large as the largest object that will be sent or received. */ - public Server (int writeBufferSize, int objectBufferSize) { - this(writeBufferSize, objectBufferSize, new KryoSerialization()); - } - - public Server (int writeBufferSize, int objectBufferSize, Serialization serialization) { - this.writeBufferSize = writeBufferSize; - this.objectBufferSize = objectBufferSize; - - this.serialization = serialization; - - this.discoveryHandler = ServerDiscoveryHandler.DEFAULT; - - try { - selector = Selector.open(); - } catch (IOException ex) { - throw new RuntimeException("Error opening selector.", ex); - } - } - - public void setDiscoveryHandler (ServerDiscoveryHandler newDiscoveryHandler) { - discoveryHandler = newDiscoveryHandler; - } - - public Serialization getSerialization () { - return serialization; - } - - public Kryo getKryo () { - return ((KryoSerialization)serialization).getKryo(); - } - - /** Opens a TCP only server. - * @throws IOException if the server could not be opened. */ - public void bind (int tcpPort) throws IOException { - bind(new InetSocketAddress(tcpPort), null); - } - - /** Opens a TCP and UDP server. - * @throws IOException if the server could not be opened. */ - public void bind (int tcpPort, int udpPort) throws IOException { - bind(new InetSocketAddress(tcpPort), new InetSocketAddress(udpPort)); - } - - /** @param udpPort May be null. */ - public void bind (InetSocketAddress tcpPort, InetSocketAddress udpPort) throws IOException { - close(); - synchronized (updateLock) { - selector.wakeup(); - try { - serverChannel = selector.provider().openServerSocketChannel(); - serverChannel.socket().bind(tcpPort); - serverChannel.configureBlocking(false); - serverChannel.register(selector, SelectionKey.OP_ACCEPT); - if (DEBUG) debug("kryonet", "Accepting connections on port: " + tcpPort + "/TCP"); - - if (udpPort != null) { - udp = new UdpConnection(serialization, objectBufferSize); - udp.bind(selector, udpPort); - if (DEBUG) debug("kryonet", "Accepting connections on port: " + udpPort + "/UDP"); - } - } catch (IOException ex) { - close(); - throw ex; - } - } - if (INFO) info("kryonet", "Server opened."); - } - - /** Accepts any new connections and reads or writes any pending data for the current connections. - * @param timeout Wait for up to the specified milliseconds for a connection to be ready to process. May be zero to return - * immediately if there are no connections to process. */ - public void update (int timeout) throws IOException { - updateThread = Thread.currentThread(); - synchronized (updateLock) { // Blocks to avoid a select while the selector is used to bind the server connection. - } - long startTime = System.currentTimeMillis(); - int select = 0; - if (timeout > 0) { - select = selector.select(timeout); - } else { - select = selector.selectNow(); - } - if (select == 0) { - emptySelects++; - if (emptySelects == 100) { - emptySelects = 0; - // NIO freaks and returns immediately with 0 sometimes, so try to keep from hogging the CPU. - long elapsedTime = System.currentTimeMillis() - startTime; - try { - if (elapsedTime < 25) Thread.sleep(25 - elapsedTime); - } catch (InterruptedException ex) { - } - } - } else { - emptySelects = 0; - Set keys = selector.selectedKeys(); - synchronized (keys) { - UdpConnection udp = this.udp; - outer: - for (Iterator iter = keys.iterator(); iter.hasNext();) { - keepAlive(); - SelectionKey selectionKey = iter.next(); - iter.remove(); - Connection fromConnection = (Connection)selectionKey.attachment(); - try { - int ops = selectionKey.readyOps(); - - if (fromConnection != null) { // Must be a TCP read or write operation. - if (udp != null && fromConnection.udpRemoteAddress == null) { - fromConnection.close(); - continue; - } - if ((ops & SelectionKey.OP_READ) == SelectionKey.OP_READ) { - try { - while (true) { - Object object = fromConnection.tcp.readObject(fromConnection); - if (object == null) break; - if (DEBUG) { - String objectString = object == null ? "null" : object.getClass().getSimpleName(); - if (!(object instanceof FrameworkMessage)) { - debug("kryonet", fromConnection + " received TCP: " + objectString); - } else if (TRACE) { - trace("kryonet", fromConnection + " received TCP: " + objectString); - } - } - fromConnection.notifyReceived(object); - } - } catch (IOException ex) { - if (TRACE) { - trace("kryonet", "Unable to read TCP from: " + fromConnection, ex); - } else if (DEBUG) { - debug("kryonet", fromConnection + " update: " + ex.getMessage()); - } - fromConnection.close(); - } catch (KryoNetException ex) { - if (ERROR) error("kryonet", "Error reading TCP from connection: " + fromConnection, ex); - fromConnection.close(); - } - } - if ((ops & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) { - try { - fromConnection.tcp.writeOperation(); - } catch (IOException ex) { - if (TRACE) { - trace("kryonet", "Unable to write TCP to connection: " + fromConnection, ex); - } else if (DEBUG) { - debug("kryonet", fromConnection + " update: " + ex.getMessage()); - } - fromConnection.close(); - } - } - continue; - } - - if ((ops & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) { - ServerSocketChannel serverChannel = this.serverChannel; - if (serverChannel == null) continue; - try { - SocketChannel socketChannel = serverChannel.accept(); - if (socketChannel != null) acceptOperation(socketChannel); - } catch (IOException ex) { - if (DEBUG) debug("kryonet", "Unable to accept new connection.", ex); - } - continue; - } - - // Must be a UDP read operation. - if (udp == null) { - selectionKey.channel().close(); - continue; - } - InetSocketAddress fromAddress; - try { - fromAddress = udp.readFromAddress(); - } catch (IOException ex) { - if (WARN) warn("kryonet", "Error reading UDP data.", ex); - continue; - } - if (fromAddress == null) continue; - - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - if (fromAddress.equals(connection.udpRemoteAddress)) { - fromConnection = connection; - break; - } - } - - Object object; - try { - object = udp.readObject(fromConnection); - } catch (KryoNetException ex) { - if (WARN) { - if (fromConnection != null) { - if (ERROR) error("kryonet", "Error reading UDP from connection: " + fromConnection, ex); - } else - warn("kryonet", "Error reading UDP from unregistered address: " + fromAddress, ex); - } - continue; - } - - if (object instanceof FrameworkMessage) { - if (object instanceof RegisterUDP) { - // Store the fromAddress on the connection and reply over TCP with a RegisterUDP to indicate success. - int fromConnectionID = ((RegisterUDP)object).connectionID; - Connection connection = pendingConnections.remove(fromConnectionID); - if (connection != null) { - if (connection.udpRemoteAddress != null) continue outer; - connection.udpRemoteAddress = fromAddress; - addConnection(connection); - connection.sendTCP(new RegisterUDP()); - if (DEBUG) - debug("kryonet", "Port " + udp.datagramChannel.socket().getLocalPort() + "/UDP connected to: " - + fromAddress); - connection.notifyConnected(); - continue; - } - if (DEBUG) - debug("kryonet", "Ignoring incoming RegisterUDP with invalid connection ID: " + fromConnectionID); - continue; - } - if (object instanceof DiscoverHost) { - try { - boolean responseSent = discoveryHandler - .onDiscoverHost(udp.datagramChannel, fromAddress, serialization); - if (DEBUG && responseSent) debug("kryonet", "Responded to host discovery from: " + fromAddress); - } catch (IOException ex) { - if (WARN) warn("kryonet", "Error replying to host discovery from: " + fromAddress, ex); - } - continue; - } - } - - if (fromConnection != null) { - if (DEBUG) { - String objectString = object == null ? "null" : object.getClass().getSimpleName(); - if (object instanceof FrameworkMessage) { - if (TRACE) trace("kryonet", fromConnection + " received UDP: " + objectString); - } else - debug("kryonet", fromConnection + " received UDP: " + objectString); - } - fromConnection.notifyReceived(object); - continue; - } - if (DEBUG) debug("kryonet", "Ignoring UDP from unregistered address: " + fromAddress); - } catch (CancelledKeyException ex) { - if (fromConnection != null) - fromConnection.close(); - else - selectionKey.channel().close(); - } - } - } - } - long time = System.currentTimeMillis(); - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - if (connection.tcp.isTimedOut(time)) { - if (DEBUG) debug("kryonet", connection + " timed out."); - connection.close(); - } else { - if (connection.tcp.needsKeepAlive(time)) connection.sendTCP(FrameworkMessage.keepAlive); - } - if (connection.isIdle()) connection.notifyIdle(); - } - } - - private void keepAlive () { - long time = System.currentTimeMillis(); - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - if (connection.tcp.needsKeepAlive(time)) connection.sendTCP(FrameworkMessage.keepAlive); - } - } - - public void run () { - if (TRACE) trace("kryonet", "Server thread started."); - shutdown = false; - while (!shutdown) { - try { - update(250); - } catch (IOException ex) { - if (ERROR) error("kryonet", "Error updating server connections.", ex); - close(); - } - } - if (TRACE) trace("kryonet", "Server thread stopped."); - } - - public void start () { - new Thread(this, "Server").start(); - } - - public void stop () { - if (shutdown) return; - close(); - if (TRACE) trace("kryonet", "Server thread stopping."); - shutdown = true; - } - - private void acceptOperation (SocketChannel socketChannel) { - Connection connection = newConnection(); - connection.initialize(serialization, writeBufferSize, objectBufferSize); - connection.endPoint = this; - UdpConnection udp = this.udp; - if (udp != null) connection.udp = udp; - try { - SelectionKey selectionKey = connection.tcp.accept(selector, socketChannel); - selectionKey.attach(connection); - - int id = nextConnectionID++; - if (nextConnectionID == -1) nextConnectionID = 1; - connection.id = id; - connection.setConnected(true); - connection.addListener(dispatchListener); - - if (udp == null) - addConnection(connection); - else - pendingConnections.put(id, connection); - - RegisterTCP registerConnection = new RegisterTCP(); - registerConnection.connectionID = id; - connection.sendTCP(registerConnection); - - if (udp == null) connection.notifyConnected(); - } catch (IOException ex) { - connection.close(); - if (DEBUG) debug("kryonet", "Unable to accept TCP connection.", ex); - } - } - - /** Allows the connections used by the server to be subclassed. This can be useful for storage per connection without an - * additional lookup. */ - protected Connection newConnection () { - return new Connection(); - } - - private void addConnection (Connection connection) { - Connection[] newConnections = new Connection[connections.length + 1]; - newConnections[0] = connection; - System.arraycopy(connections, 0, newConnections, 1, connections.length); - connections = newConnections; - } - - void removeConnection (Connection connection) { - ArrayList temp = new ArrayList(Arrays.asList(connections)); - temp.remove(connection); - connections = temp.toArray(new Connection[temp.size()]); - - pendingConnections.remove(connection.id); - } - - // BOZO - Provide mechanism for sending to multiple clients without serializing multiple times. - - public void sendToAllTCP (Object object) { - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - connection.sendTCP(object); - } - } - - public void sendToAllExceptTCP (int connectionID, Object object) { - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - if (connection.id != connectionID) connection.sendTCP(object); - } - } - - public void sendToTCP (int connectionID, Object object) { - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - if (connection.id == connectionID) { - connection.sendTCP(object); - break; - } - } - } - - public void sendToAllUDP (Object object) { - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - connection.sendUDP(object); - } - } - - public void sendToAllExceptUDP (int connectionID, Object object) { - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - if (connection.id != connectionID) connection.sendUDP(object); - } - } - - public void sendToUDP (int connectionID, Object object) { - Connection[] connections = this.connections; - for (int i = 0, n = connections.length; i < n; i++) { - Connection connection = connections[i]; - if (connection.id == connectionID) { - connection.sendUDP(object); - break; - } - } - } - - public void addListener (Listener listener) { - if (listener == null) throw new IllegalArgumentException("listener cannot be null."); - synchronized (listenerLock) { - Listener[] listeners = this.listeners; - int n = listeners.length; - for (int i = 0; i < n; i++) - if (listener == listeners[i]) return; - Listener[] newListeners = new Listener[n + 1]; - newListeners[0] = listener; - System.arraycopy(listeners, 0, newListeners, 1, n); - this.listeners = newListeners; - } - if (TRACE) trace("kryonet", "Server listener added: " + listener.getClass().getName()); - } - - public void removeListener (Listener listener) { - if (listener == null) throw new IllegalArgumentException("listener cannot be null."); - synchronized (listenerLock) { - Listener[] listeners = this.listeners; - int n = listeners.length; - Listener[] newListeners = new Listener[n - 1]; - for (int i = 0, ii = 0; i < n; i++) { - Listener copyListener = listeners[i]; - if (listener == copyListener) continue; - if (ii == n - 1) return; - newListeners[ii++] = copyListener; - } - this.listeners = newListeners; - } - if (TRACE) trace("kryonet", "Server listener removed: " + listener.getClass().getName()); - } - - /** Closes all open connections and the server port(s). */ - public void close () { - Connection[] connections = this.connections; - if (INFO && connections.length > 0) info("kryonet", "Closing server connections..."); - for (int i = 0, n = connections.length; i < n; i++) - connections[i].close(); - connections = new Connection[0]; - - ServerSocketChannel serverChannel = this.serverChannel; - if (serverChannel != null) { - try { - serverChannel.close(); - if (INFO) info("kryonet", "Server closed."); - } catch (IOException ex) { - if (DEBUG) debug("kryonet", "Unable to close server.", ex); - } - this.serverChannel = null; - } - - UdpConnection udp = this.udp; - if (udp != null) { - udp.close(); - this.udp = null; - } - - synchronized (updateLock) { // Blocks to avoid a select while the selector is used to bind the server connection. - } - // Select one last time to complete closing the socket. - selector.wakeup(); - try { - selector.selectNow(); - } catch (IOException ignored) { - } - } - - /** Releases the resources used by this server, which may no longer be used. */ - public void dispose () throws IOException { - close(); - selector.close(); - } - - public Thread getUpdateThread () { - return updateThread; - } - - /** Returns the current connections. The array returned should not be modified. */ - public Connection[] getConnections () { - return connections; - } -} +/* Copyright (c) 2008, Nathan Sweet + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +package com.esotericsoftware.kryonet; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.CancelledKeyException; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.Set; + +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryo.util.IntMap; +import com.esotericsoftware.kryonet.FrameworkMessage.DiscoverHost; +import com.esotericsoftware.kryonet.FrameworkMessage.RegisterTCP; +import com.esotericsoftware.kryonet.FrameworkMessage.RegisterUDP; + +import static com.esotericsoftware.minlog.Log.*; + +/** Manages TCP and optionally UDP connections from many {@link Client Clients}. + * @author Nathan Sweet */ +public class Server implements EndPoint { + private final Serialization serialization; + private final int writeBufferSize, objectBufferSize; + private final Selector selector; + private int emptySelects; + private ServerSocketChannel serverChannel; + private UdpConnection udp; + private Connection[] connections = {}; + private IntMap pendingConnections = new IntMap(); + Listener[] listeners = {}; + private Object listenerLock = new Object(); + private int nextConnectionID = 1; + private volatile boolean shutdown; + private Object updateLock = new Object(); + private Thread updateThread; + private ServerDiscoveryHandler discoveryHandler; + + private Listener dispatchListener = new Listener() { + public void connected (Connection connection) { + Listener[] listeners = Server.this.listeners; + for (int i = 0, n = listeners.length; i < n; i++) + listeners[i].connected(connection); + } + + public void disconnected (Connection connection) { + removeConnection(connection); + Listener[] listeners = Server.this.listeners; + for (int i = 0, n = listeners.length; i < n; i++) + listeners[i].disconnected(connection); + } + + public void received (Connection connection, Object object) { + Listener[] listeners = Server.this.listeners; + for (int i = 0, n = listeners.length; i < n; i++) + listeners[i].received(connection, object); + } + + public void idle (Connection connection) { + Listener[] listeners = Server.this.listeners; + for (int i = 0, n = listeners.length; i < n; i++) + listeners[i].idle(connection); + } + }; + + /** Creates a Server with a write buffer size of 16384 and an object buffer size of 2048. */ + public Server () { + this(16384, 2048); + } + + /** @param writeBufferSize One buffer of this size is allocated for each connected client. Objects are serialized to the write + * buffer where the bytes are queued until they can be written to the TCP socket. + *

+ * Normally the socket is writable and the bytes are written immediately. If the socket cannot be written to and + * enough serialized objects are queued to overflow the buffer, then the connection will be closed. + *

+ * The write buffer should be sized at least as large as the largest object that will be sent, plus some head room to + * allow for some serialized objects to be queued in case the buffer is temporarily not writable. The amount of head + * room needed is dependent upon the size of objects being sent and how often they are sent. + * @param objectBufferSize One (using only TCP) or three (using both TCP and UDP) buffers of this size are allocated. These + * buffers are used to hold the bytes for a single object graph until it can be sent over the network or + * deserialized. + *

+ * The object buffers should be sized at least as large as the largest object that will be sent or received. */ + public Server (int writeBufferSize, int objectBufferSize) { + this(writeBufferSize, objectBufferSize, new KryoSerialization()); + } + + public Server (int writeBufferSize, int objectBufferSize, Serialization serialization) { + this.writeBufferSize = writeBufferSize; + this.objectBufferSize = objectBufferSize; + + this.serialization = serialization; + + this.discoveryHandler = new ServerDiscoveryHandler() { + }; + + try { + selector = Selector.open(); + } catch (IOException ex) { + throw new RuntimeException("Error opening selector.", ex); + } + } + + public void setDiscoveryHandler (ServerDiscoveryHandler newDiscoveryHandler) { + discoveryHandler = newDiscoveryHandler; + } + + public Serialization getSerialization () { + return serialization; + } + + public Kryo getKryo () { + return ((KryoSerialization)serialization).getKryo(); + } + + /** Opens a TCP only server. + * @throws IOException if the server could not be opened. */ + public void bind (int tcpPort) throws IOException { + bind(new InetSocketAddress(tcpPort), null); + } + + /** Opens a TCP and UDP server. + * @throws IOException if the server could not be opened. */ + public void bind (int tcpPort, int udpPort) throws IOException { + bind(new InetSocketAddress(tcpPort), new InetSocketAddress(udpPort)); + } + + /** @param udpPort May be null. */ + public void bind (InetSocketAddress tcpPort, InetSocketAddress udpPort) throws IOException { + close(); + synchronized (updateLock) { + selector.wakeup(); + try { + serverChannel = selector.provider().openServerSocketChannel(); + serverChannel.socket().bind(tcpPort); + serverChannel.configureBlocking(false); + serverChannel.register(selector, SelectionKey.OP_ACCEPT); + if (DEBUG) debug("kryonet", "Accepting connections on port: " + tcpPort + "/TCP"); + + if (udpPort != null) { + udp = new UdpConnection(serialization, objectBufferSize); + udp.bind(selector, udpPort); + if (DEBUG) debug("kryonet", "Accepting connections on port: " + udpPort + "/UDP"); + } + } catch (IOException ex) { + close(); + throw ex; + } + } + if (INFO) info("kryonet", "Server opened."); + } + + /** Accepts any new connections and reads or writes any pending data for the current connections. + * @param timeout Wait for up to the specified milliseconds for a connection to be ready to process. May be zero to return + * immediately if there are no connections to process. */ + public void update (int timeout) throws IOException { + updateThread = Thread.currentThread(); + synchronized (updateLock) { // Blocks to avoid a select while the selector is used to bind the server connection. + } + long startTime = System.currentTimeMillis(); + int select = 0; + if (timeout > 0) { + select = selector.select(timeout); + } else { + select = selector.selectNow(); + } + if (select == 0) { + emptySelects++; + if (emptySelects == 100) { + emptySelects = 0; + // NIO freaks and returns immediately with 0 sometimes, so try to keep from hogging the CPU. + long elapsedTime = System.currentTimeMillis() - startTime; + try { + if (elapsedTime < 25) Thread.sleep(25 - elapsedTime); + } catch (InterruptedException ex) { + } + } + } else { + emptySelects = 0; + Set keys = selector.selectedKeys(); + synchronized (keys) { + UdpConnection udp = this.udp; + outer: + for (Iterator iter = keys.iterator(); iter.hasNext();) { + keepAlive(); + SelectionKey selectionKey = iter.next(); + iter.remove(); + Connection fromConnection = (Connection)selectionKey.attachment(); + try { + int ops = selectionKey.readyOps(); + + if (fromConnection != null) { // Must be a TCP read or write operation. + if (udp != null && fromConnection.udpRemoteAddress == null) { + fromConnection.close(); + continue; + } + if ((ops & SelectionKey.OP_READ) == SelectionKey.OP_READ) { + try { + while (true) { + Object object = fromConnection.tcp.readObject(fromConnection); + if (object == null) break; + if (DEBUG) { + String objectString = object == null ? "null" : object.getClass().getSimpleName(); + if (!(object instanceof FrameworkMessage)) { + debug("kryonet", fromConnection + " received TCP: " + objectString); + } else if (TRACE) { + trace("kryonet", fromConnection + " received TCP: " + objectString); + } + } + fromConnection.notifyReceived(object); + } + } catch (IOException ex) { + if (TRACE) { + trace("kryonet", "Unable to read TCP from: " + fromConnection, ex); + } else if (DEBUG) { + debug("kryonet", fromConnection + " update: " + ex.getMessage()); + } + fromConnection.close(); + } catch (KryoNetException ex) { + if (ERROR) error("kryonet", "Error reading TCP from connection: " + fromConnection, ex); + fromConnection.close(); + } + } + if ((ops & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) { + try { + fromConnection.tcp.writeOperation(); + } catch (IOException ex) { + if (TRACE) { + trace("kryonet", "Unable to write TCP to connection: " + fromConnection, ex); + } else if (DEBUG) { + debug("kryonet", fromConnection + " update: " + ex.getMessage()); + } + fromConnection.close(); + } + } + continue; + } + + if ((ops & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) { + ServerSocketChannel serverChannel = this.serverChannel; + if (serverChannel == null) continue; + try { + SocketChannel socketChannel = serverChannel.accept(); + if (socketChannel != null) acceptOperation(socketChannel); + } catch (IOException ex) { + if (DEBUG) debug("kryonet", "Unable to accept new connection.", ex); + } + continue; + } + + // Must be a UDP read operation. + if (udp == null) { + selectionKey.channel().close(); + continue; + } + InetSocketAddress fromAddress; + try { + fromAddress = udp.readFromAddress(); + } catch (IOException ex) { + if (WARN) warn("kryonet", "Error reading UDP data.", ex); + continue; + } + if (fromAddress == null) continue; + + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + if (fromAddress.equals(connection.udpRemoteAddress)) { + fromConnection = connection; + break; + } + } + + Object object; + try { + object = udp.readObject(fromConnection); + } catch (KryoNetException ex) { + if (WARN) { + if (fromConnection != null) { + if (ERROR) error("kryonet", "Error reading UDP from connection: " + fromConnection, ex); + } else + warn("kryonet", "Error reading UDP from unregistered address: " + fromAddress, ex); + } + continue; + } + + if (object instanceof FrameworkMessage) { + if (object instanceof RegisterUDP) { + // Store the fromAddress on the connection and reply over TCP with a RegisterUDP to indicate success. + int fromConnectionID = ((RegisterUDP)object).connectionID; + Connection connection = pendingConnections.remove(fromConnectionID); + if (connection != null) { + if (connection.udpRemoteAddress != null) continue outer; + connection.udpRemoteAddress = fromAddress; + addConnection(connection); + connection.sendTCP(new RegisterUDP()); + if (DEBUG) + debug("kryonet", "Port " + udp.datagramChannel.socket().getLocalPort() + "/UDP connected to: " + + fromAddress); + connection.notifyConnected(); + continue; + } + if (DEBUG) + debug("kryonet", "Ignoring incoming RegisterUDP with invalid connection ID: " + fromConnectionID); + continue; + } + if (object instanceof DiscoverHost) { + try { + boolean responseSent = discoveryHandler + .onDiscoverHost(udp.datagramChannel, fromAddress, serialization); + if (DEBUG && responseSent) debug("kryonet", "Responded to host discovery from: " + fromAddress); + } catch (IOException ex) { + if (WARN) warn("kryonet", "Error replying to host discovery from: " + fromAddress, ex); + } + continue; + } + } + + if (fromConnection != null) { + if (DEBUG) { + String objectString = object == null ? "null" : object.getClass().getSimpleName(); + if (object instanceof FrameworkMessage) { + if (TRACE) trace("kryonet", fromConnection + " received UDP: " + objectString); + } else + debug("kryonet", fromConnection + " received UDP: " + objectString); + } + fromConnection.notifyReceived(object); + continue; + } + if (DEBUG) debug("kryonet", "Ignoring UDP from unregistered address: " + fromAddress); + } catch (CancelledKeyException ex) { + if (fromConnection != null) + fromConnection.close(); + else + selectionKey.channel().close(); + } + } + } + } + long time = System.currentTimeMillis(); + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + if (connection.tcp.isTimedOut(time)) { + if (DEBUG) debug("kryonet", connection + " timed out."); + connection.close(); + } else { + if (connection.tcp.needsKeepAlive(time)) connection.sendTCP(FrameworkMessage.keepAlive); + } + if (connection.isIdle()) connection.notifyIdle(); + } + } + + private void keepAlive () { + long time = System.currentTimeMillis(); + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + if (connection.tcp.needsKeepAlive(time)) connection.sendTCP(FrameworkMessage.keepAlive); + } + } + + public void run () { + if (TRACE) trace("kryonet", "Server thread started."); + shutdown = false; + while (!shutdown) { + try { + update(250); + } catch (IOException ex) { + if (ERROR) error("kryonet", "Error updating server connections.", ex); + close(); + } + } + if (TRACE) trace("kryonet", "Server thread stopped."); + } + + public void start () { + new Thread(this, "Server").start(); + } + + public void stop () { + if (shutdown) return; + close(); + if (TRACE) trace("kryonet", "Server thread stopping."); + shutdown = true; + } + + private void acceptOperation (SocketChannel socketChannel) { + Connection connection = newConnection(); + connection.initialize(serialization, writeBufferSize, objectBufferSize); + connection.endPoint = this; + UdpConnection udp = this.udp; + if (udp != null) connection.udp = udp; + try { + SelectionKey selectionKey = connection.tcp.accept(selector, socketChannel); + selectionKey.attach(connection); + + int id = nextConnectionID++; + if (nextConnectionID == -1) nextConnectionID = 1; + connection.id = id; + connection.setConnected(true); + connection.addListener(dispatchListener); + + if (udp == null) + addConnection(connection); + else + pendingConnections.put(id, connection); + + RegisterTCP registerConnection = new RegisterTCP(); + registerConnection.connectionID = id; + connection.sendTCP(registerConnection); + + if (udp == null) connection.notifyConnected(); + } catch (IOException ex) { + connection.close(); + if (DEBUG) debug("kryonet", "Unable to accept TCP connection.", ex); + } + } + + /** Allows the connections used by the server to be subclassed. This can be useful for storage per connection without an + * additional lookup. */ + protected Connection newConnection () { + return new Connection(); + } + + private void addConnection (Connection connection) { + Connection[] newConnections = new Connection[connections.length + 1]; + newConnections[0] = connection; + System.arraycopy(connections, 0, newConnections, 1, connections.length); + connections = newConnections; + } + + void removeConnection (Connection connection) { + ArrayList temp = new ArrayList(Arrays.asList(connections)); + temp.remove(connection); + connections = temp.toArray(new Connection[temp.size()]); + + pendingConnections.remove(connection.id); + } + + // BOZO - Provide mechanism for sending to multiple clients without serializing multiple times. + + public void sendToAllTCP (Object object) { + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + connection.sendTCP(object); + } + } + + public void sendToAllExceptTCP (int connectionID, Object object) { + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + if (connection.id != connectionID) connection.sendTCP(object); + } + } + + public void sendToTCP (int connectionID, Object object) { + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + if (connection.id == connectionID) { + connection.sendTCP(object); + break; + } + } + } + + public void sendToAllUDP (Object object) { + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + connection.sendUDP(object); + } + } + + public void sendToAllExceptUDP (int connectionID, Object object) { + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + if (connection.id != connectionID) connection.sendUDP(object); + } + } + + public void sendToUDP (int connectionID, Object object) { + Connection[] connections = this.connections; + for (int i = 0, n = connections.length; i < n; i++) { + Connection connection = connections[i]; + if (connection.id == connectionID) { + connection.sendUDP(object); + break; + } + } + } + + public void addListener (Listener listener) { + if (listener == null) throw new IllegalArgumentException("listener cannot be null."); + synchronized (listenerLock) { + Listener[] listeners = this.listeners; + int n = listeners.length; + for (int i = 0; i < n; i++) + if (listener == listeners[i]) return; + Listener[] newListeners = new Listener[n + 1]; + newListeners[0] = listener; + System.arraycopy(listeners, 0, newListeners, 1, n); + this.listeners = newListeners; + } + if (TRACE) trace("kryonet", "Server listener added: " + listener.getClass().getName()); + } + + public void removeListener (Listener listener) { + if (listener == null) throw new IllegalArgumentException("listener cannot be null."); + synchronized (listenerLock) { + Listener[] listeners = this.listeners; + int n = listeners.length; + Listener[] newListeners = new Listener[n - 1]; + for (int i = 0, ii = 0; i < n; i++) { + Listener copyListener = listeners[i]; + if (listener == copyListener) continue; + if (ii == n - 1) return; + newListeners[ii++] = copyListener; + } + this.listeners = newListeners; + } + if (TRACE) trace("kryonet", "Server listener removed: " + listener.getClass().getName()); + } + + /** Closes all open connections and the server port(s). */ + public void close () { + Connection[] connections = this.connections; + if (INFO && connections.length > 0) info("kryonet", "Closing server connections..."); + for (int i = 0, n = connections.length; i < n; i++) + connections[i].close(); + connections = new Connection[0]; + + ServerSocketChannel serverChannel = this.serverChannel; + if (serverChannel != null) { + try { + serverChannel.close(); + if (INFO) info("kryonet", "Server closed."); + } catch (IOException ex) { + if (DEBUG) debug("kryonet", "Unable to close server.", ex); + } + this.serverChannel = null; + } + + UdpConnection udp = this.udp; + if (udp != null) { + udp.close(); + this.udp = null; + } + + synchronized (updateLock) { // Blocks to avoid a select while the selector is used to bind the server connection. + } + // Select one last time to complete closing the socket. + selector.wakeup(); + try { + selector.selectNow(); + } catch (IOException ignored) { + } + } + + /** Releases the resources used by this server, which may no longer be used. */ + public void dispose () throws IOException { + close(); + selector.close(); + } + + public Thread getUpdateThread () { + return updateThread; + } + + /** Returns the current connections. The array returned should not be modified. */ + public Connection[] getConnections () { + return connections; + } +} diff --git a/src/com/esotericsoftware/kryonet/ServerDiscoveryHandler.java b/src/com/esotericsoftware/kryonet/ServerDiscoveryHandler.java index 42fa6864..be7ea98c 100644 --- a/src/com/esotericsoftware/kryonet/ServerDiscoveryHandler.java +++ b/src/com/esotericsoftware/kryonet/ServerDiscoveryHandler.java @@ -1,15 +1,15 @@ /* Copyright (c) 2008, Nathan Sweet * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following * conditions are met: - * + * * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL @@ -27,24 +27,15 @@ import com.esotericsoftware.kryonet.FrameworkMessage.DiscoverHost; public interface ServerDiscoveryHandler { - /** This implementation of {@link ServerDiscoveryHandler} is responsible for providing the {@link Server} with it's default - * behavior. */ - public static final ServerDiscoveryHandler DEFAULT = new ServerDiscoveryHandler() { - private ByteBuffer emptyBuffer = ByteBuffer.allocate(0); - - @Override - public boolean onDiscoverHost (DatagramChannel datagramChannel, InetSocketAddress fromAddress, Serialization serialization) - throws IOException { - datagramChannel.send(emptyBuffer, fromAddress); - return true; - } - }; /** Called when the {@link Server} receives a {@link DiscoverHost} packet. * @param fromAddress {@link InetSocketAddress} the {@link DiscoverHost} came from * @param serialization the {@link Server}'s {@link Serialization} instance * @return true if a response was sent to {@code fromAddress}, false otherwise * @throws IOException from the use of {@link DatagramChannel#send(ByteBuffer, java.net.SocketAddress)} */ - public boolean onDiscoverHost (DatagramChannel datagramChannel, InetSocketAddress fromAddress, Serialization serialization) - throws IOException; + public default boolean onDiscoverHost (DatagramChannel datagramChannel, InetSocketAddress fromAddress, Serialization serialization) + throws IOException { + datagramChannel.send(ByteBuffer.allocate(0), fromAddress); + return true; + }; } diff --git a/src/com/esotericsoftware/kryonet/util/TcpIdleSender.java b/src/com/esotericsoftware/kryonet/util/TcpIdleSender.java index fc43cb31..f9bbb911 100644 --- a/src/com/esotericsoftware/kryonet/util/TcpIdleSender.java +++ b/src/com/esotericsoftware/kryonet/util/TcpIdleSender.java @@ -1,47 +1,47 @@ -/* Copyright (c) 2008, Nathan Sweet - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -package com.esotericsoftware.kryonet.util; - -import com.esotericsoftware.kryonet.Connection; -import com.esotericsoftware.kryonet.Listener; - -abstract public class TcpIdleSender extends Listener { - boolean started; - - public void idle (Connection connection) { - if (!started) { - started = true; - start(); - } - Object object = next(); - if (object == null) - connection.removeListener(this); - else - connection.sendTCP(object); - } - - /** Called once, before the first send. Subclasses can override this method to send something so the receiving side expects - * subsequent objects. */ - protected void start () { - } - - /** Returns the next object to send, or null if no more objects will be sent. */ - abstract protected Object next (); -} +/* Copyright (c) 2008, Nathan Sweet + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +package com.esotericsoftware.kryonet.util; + +import com.esotericsoftware.kryonet.Connection; +import com.esotericsoftware.kryonet.Listener; + +abstract public class TcpIdleSender implements Listener { + boolean started; + + public void idle (Connection connection) { + if (!started) { + started = true; + start(); + } + Object object = next(); + if (object == null) + connection.removeListener(this); + else + connection.sendTCP(object); + } + + /** Called once, before the first send. Subclasses can override this method to send something so the receiving side expects + * subsequent objects. */ + protected void start () { + } + + /** Returns the next object to send, or null if no more objects will be sent. */ + abstract protected Object next (); +} diff --git a/test/com/esotericsoftware/kryonet/DiscoverHostTest.java b/test/com/esotericsoftware/kryonet/DiscoverHostTest.java index 3934d540..6bd0aba8 100644 --- a/test/com/esotericsoftware/kryonet/DiscoverHostTest.java +++ b/test/com/esotericsoftware/kryonet/DiscoverHostTest.java @@ -1,179 +1,175 @@ -/* Copyright (c) 2008, Nathan Sweet - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -package com.esotericsoftware.kryonet; - -import static com.esotericsoftware.minlog.Log.*; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.nio.ByteBuffer; -import java.nio.channels.DatagramChannel; - -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryo.io.Input; - -public class DiscoverHostTest extends KryoNetTestCase { - - public void testBroadcast () throws IOException { - // This server exists solely to reply to Client#discoverHost. - // It wouldn't be needed if the real server was using UDP. - final Server broadcastServer = new Server(); - startEndPoint(broadcastServer); - broadcastServer.bind(0, udpPort); - - final Server server = new Server(); - startEndPoint(server); - server.bind(54555); - server.addListener(new Listener() { - public void disconnected (Connection connection) { - broadcastServer.stop(); - server.stop(); - } - }); - - // ---- - - Client client = new Client(); - InetAddress host = client.discoverHost(udpPort, 2000); - if (host == null) { - stopEndPoints(); - fail("No servers found."); - return; - } - - startEndPoint(client); - client.connect(2000, host, tcpPort); - client.stop(); - - waitForThreads(); - } - - public void testCustomBroadcast () throws IOException { - - ServerDiscoveryHandler serverDiscoveryHandler = new ServerDiscoveryHandler() { - @Override - public boolean onDiscoverHost (DatagramChannel datagramChannel, InetSocketAddress fromAddress, - Serialization serialization) throws IOException { - - DiscoveryResponsePacket packet = new DiscoveryResponsePacket(); - packet.id = 42; - packet.gameName = "gameName"; - packet.playerName = "playerName"; - - ByteBuffer buffer = ByteBuffer.allocate(256); - serialization.write(null, buffer, packet); - buffer.flip(); - - datagramChannel.send(buffer, fromAddress); - - return true; - } - }; - - ClientDiscoveryHandler clientDiscoveryHandler = new ClientDiscoveryHandler() { - private Input input = null; - - @Override - public DatagramPacket onRequestNewDatagramPacket () { - byte[] buffer = new byte[1024]; - input = new Input(buffer); - return new DatagramPacket(buffer, buffer.length); - } - - @Override - public void onDiscoveredHost (DatagramPacket datagramPacket, Kryo kryo) { - if (input != null) { - DiscoveryResponsePacket packet; - packet = (DiscoveryResponsePacket)kryo.readClassAndObject(input); - info("test", "packet.id = " + packet.id); - info("test", "packet.gameName = " + packet.gameName); - info("test", "packet.playerName = " + packet.playerName); - info("test", "datagramPacket.getAddress() = " + datagramPacket.getAddress()); - info("test", "datagramPacket.getPort() = " + datagramPacket.getPort()); - assertEquals(42, packet.id); - assertEquals("gameName", packet.gameName); - assertEquals("playerName", packet.playerName); - assertEquals(udpPort, datagramPacket.getPort()); - } - } - - @Override - public void onFinally () { - if (input != null) { - input.close(); - } - } - }; - - // This server exists solely to reply to Client#discoverHost. - // It wouldn't be needed if the real server was using UDP. - final Server broadcastServer = new Server(); - - broadcastServer.getKryo().register(DiscoveryResponsePacket.class); - broadcastServer.setDiscoveryHandler(serverDiscoveryHandler); - - startEndPoint(broadcastServer); - broadcastServer.bind(0, udpPort); - - final Server server = new Server(); - startEndPoint(server); - server.bind(54555); - server.addListener(new Listener() { - public void disconnected (Connection connection) { - broadcastServer.stop(); - server.stop(); - } - }); - - // ---- - - Client client = new Client(); - - client.getKryo().register(DiscoveryResponsePacket.class); - client.setDiscoveryHandler(clientDiscoveryHandler); - - InetAddress host = client.discoverHost(udpPort, 2000); - if (host == null) { - stopEndPoints(); - fail("No servers found."); - return; - } - - startEndPoint(client); - client.connect(2000, host, tcpPort); - client.stop(); - - waitForThreads(); - } - - public static class DiscoveryResponsePacket { - - public DiscoveryResponsePacket () { - // - } - - public int id; - public String gameName; - public String playerName; - } - -} +/* Copyright (c) 2008, Nathan Sweet + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +package com.esotericsoftware.kryonet; + +import static com.esotericsoftware.minlog.Log.*; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.DatagramChannel; + +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryo.io.Input; + +public class DiscoverHostTest extends KryoNetTestCase { + + public void testBroadcast () throws IOException { + // This server exists solely to reply to Client#discoverHost. + // It wouldn't be needed if the real server was using UDP. + final Server broadcastServer = new Server(); + startEndPoint(broadcastServer); + broadcastServer.bind(0, udpPort); + + final Server server = new Server(); + startEndPoint(server); + server.bind(54555); + server.addListener(new Listener() { + public void disconnected (Connection connection) { + broadcastServer.stop(); + server.stop(); + } + }); + + // ---- + + Client client = new Client(); + InetAddress host = client.discoverHost(udpPort, 2000); + if (host == null) { + stopEndPoints(); + fail("No servers found."); + return; + } + + startEndPoint(client); + client.connect(2000, host, tcpPort); + client.stop(); + + waitForThreads(); + } + + public void testCustomBroadcast () throws IOException { + + ServerDiscoveryHandler serverDiscoveryHandler = new ServerDiscoveryHandler() { + public boolean onDiscoverHost (DatagramChannel datagramChannel, InetSocketAddress fromAddress, + Serialization serialization) throws IOException { + + DiscoveryResponsePacket packet = new DiscoveryResponsePacket(); + packet.id = 42; + packet.gameName = "gameName"; + packet.playerName = "playerName"; + + ByteBuffer buffer = ByteBuffer.allocate(256); + serialization.write(null, buffer, packet); + buffer.flip(); + + datagramChannel.send(buffer, fromAddress); + + return true; + } + }; + + ClientDiscoveryHandler clientDiscoveryHandler = new ClientDiscoveryHandler() { + private Input input = null; + + public DatagramPacket onRequestNewDatagramPacket () { + byte[] buffer = new byte[1024]; + input = new Input(buffer); + return new DatagramPacket(buffer, buffer.length); + } + + public void onDiscoveredHost (DatagramPacket datagramPacket, Kryo kryo) { + if (input != null) { + DiscoveryResponsePacket packet; + packet = (DiscoveryResponsePacket)kryo.readClassAndObject(input); + info("test", "packet.id = " + packet.id); + info("test", "packet.gameName = " + packet.gameName); + info("test", "packet.playerName = " + packet.playerName); + info("test", "datagramPacket.getAddress() = " + datagramPacket.getAddress()); + info("test", "datagramPacket.getPort() = " + datagramPacket.getPort()); + assertEquals(42, packet.id); + assertEquals("gameName", packet.gameName); + assertEquals("playerName", packet.playerName); + assertEquals(udpPort, datagramPacket.getPort()); + } + } + + public void onFinally () { + if (input != null) { + input.close(); + } + } + }; + + // This server exists solely to reply to Client#discoverHost. + // It wouldn't be needed if the real server was using UDP. + final Server broadcastServer = new Server(); + + broadcastServer.getKryo().register(DiscoveryResponsePacket.class); + broadcastServer.setDiscoveryHandler(serverDiscoveryHandler); + + startEndPoint(broadcastServer); + broadcastServer.bind(0, udpPort); + + final Server server = new Server(); + startEndPoint(server); + server.bind(54555); + server.addListener(new Listener() { + public void disconnected (Connection connection) { + broadcastServer.stop(); + server.stop(); + } + }); + + // ---- + + Client client = new Client(); + + client.getKryo().register(DiscoveryResponsePacket.class); + client.setDiscoveryHandler(clientDiscoveryHandler); + + InetAddress host = client.discoverHost(udpPort, 2000); + if (host == null) { + stopEndPoints(); + fail("No servers found."); + return; + } + + startEndPoint(client); + client.connect(2000, host, tcpPort); + client.stop(); + + waitForThreads(); + } + + public static class DiscoveryResponsePacket { + + public DiscoveryResponsePacket () { + // + } + + public int id; + public String gameName; + public String playerName; + } + +} diff --git a/test/com/esotericsoftware/kryonet/KryoNetBufferUnderflowTest.java b/test/com/esotericsoftware/kryonet/KryoNetBufferUnderflowTest.java index 622df42a..4f2dcc49 100644 --- a/test/com/esotericsoftware/kryonet/KryoNetBufferUnderflowTest.java +++ b/test/com/esotericsoftware/kryonet/KryoNetBufferUnderflowTest.java @@ -1,89 +1,88 @@ -/* Copyright (c) 2008, Nathan Sweet - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -package com.esotericsoftware.kryonet; - -import java.io.IOException; -import java.lang.Thread.UncaughtExceptionHandler; -import java.util.concurrent.atomic.AtomicBoolean; - -public class KryoNetBufferUnderflowTest { - public static void main (String[] args) throws IOException, InterruptedException { - final int port = 7000; - final int writeBufferSize = 16384; - final int objectBufferSize = 2048; - final AtomicBoolean received = new AtomicBoolean(); - - // Creating server - final Server server = new Server(writeBufferSize, objectBufferSize); - server.bind(port); - server.start(); - System.out.println("Server listening on port " + port); - - // Creating client - final Client client = new Client(writeBufferSize, objectBufferSize); - client.start(); - client.addListener(new Listener() { - @Override - public void received (Connection connection, Object object) { - if (object instanceof String) { - System.out.println("Received: " + object); - received.set(true); - } else - System.err.println("Received unexpected object"); - } - }); - client.connect(5000, "localhost", port); - System.out.println("Client connected"); - - // Catching exception - Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { - @Override - public void uncaughtException (Thread t, Throwable e) { - e.printStackTrace(); - received.set(true); - // Stopping it all - System.out.println("Stopping client and server"); - client.stop(); - server.stop(); - } - }); - - // Sending small messages - for (int i = 0; i < 5; i++) { - String smallMessage = "RandomStringUtils.randomAlphanumeric(256)"; - System.out.println("Sending: " + smallMessage); - received.set(false); - server.sendToAllTCP(smallMessage); - while (!received.get()) { - Thread.sleep(100); - } - } - - // Sending large message - String bigMessage = "RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)"; - bigMessage = bigMessage + bigMessage + bigMessage + bigMessage + bigMessage + bigMessage + bigMessage; - System.out.println("Sending: " + bigMessage); - received.set(false); - server.sendToAllTCP(bigMessage); - while (!received.get()) { - Thread.sleep(100); - } - } -} +/* Copyright (c) 2008, Nathan Sweet + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +package com.esotericsoftware.kryonet; + +import java.io.IOException; +import java.lang.Thread.UncaughtExceptionHandler; +import java.util.concurrent.atomic.AtomicBoolean; + +public class KryoNetBufferUnderflowTest { + public static void main (String[] args) throws IOException, InterruptedException { + final int port = 7000; + final int writeBufferSize = 16384; + final int objectBufferSize = 2048; + final AtomicBoolean received = new AtomicBoolean(); + + // Creating server + final Server server = new Server(writeBufferSize, objectBufferSize); + server.bind(port); + server.start(); + System.out.println("Server listening on port " + port); + + // Creating client + final Client client = new Client(writeBufferSize, objectBufferSize); + client.start(); + client.addListener(new Listener() { + @Override + public void received (Connection connection, Object object) { + if (object instanceof String) { + System.out.println("Received: " + object); + received.set(true); + } else + System.err.println("Received unexpected object"); + } + }); + client.connect(5000, "localhost", port); + System.out.println("Client connected"); + + // Catching exception + Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { + public void uncaughtException (Thread t, Throwable e) { + e.printStackTrace(); + received.set(true); + // Stopping it all + System.out.println("Stopping client and server"); + client.stop(); + server.stop(); + } + }); + + // Sending small messages + for (int i = 0; i < 5; i++) { + String smallMessage = "RandomStringUtils.randomAlphanumeric(256)"; + System.out.println("Sending: " + smallMessage); + received.set(false); + server.sendToAllTCP(smallMessage); + while (!received.get()) { + Thread.sleep(100); + } + } + + // Sending large message + String bigMessage = "RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)RandomStringUtils.randomAlphanumeric(532)"; + bigMessage = bigMessage + bigMessage + bigMessage + bigMessage + bigMessage + bigMessage + bigMessage; + System.out.println("Sending: " + bigMessage); + received.set(false); + server.sendToAllTCP(bigMessage); + while (!received.get()) { + Thread.sleep(100); + } + } +} diff --git a/test/com/esotericsoftware/kryonet/KryoNetTestCase.java b/test/com/esotericsoftware/kryonet/KryoNetTestCase.java index 036a742b..908b8855 100644 --- a/test/com/esotericsoftware/kryonet/KryoNetTestCase.java +++ b/test/com/esotericsoftware/kryonet/KryoNetTestCase.java @@ -1,116 +1,116 @@ -/* Copyright (c) 2008, Nathan Sweet - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -package com.esotericsoftware.kryonet; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Timer; -import java.util.TimerTask; - -import junit.framework.TestCase; - -import com.esotericsoftware.minlog.Log; -import com.esotericsoftware.minlog.Log.Logger; - -abstract public class KryoNetTestCase extends TestCase { - static public String host = "localhost"; - static public int tcpPort = 54555, udpPort = 54777; - - private ArrayList threads = new ArrayList(); - ArrayList endPoints = new ArrayList(); - private Timer timer; - boolean fail; - - public KryoNetTestCase () { - // Log.TRACE(); - // Log.DEBUG(); - Log.setLogger(new Logger() { - public void log (int level, String category, String message, Throwable ex) { - // if (category == null || category.equals("kryonet")) // - super.log(level, category, message, ex); - } - }); - } - - protected void setUp () throws Exception { - System.out.println("---- " + getClass().getSimpleName()); - timer = new Timer(); - } - - protected void tearDown () throws Exception { - timer.cancel(); - } - - public void startEndPoint (EndPoint endPoint) { - endPoints.add(endPoint); - Thread thread = new Thread(endPoint, endPoint.getClass().getSimpleName()); - threads.add(thread); - thread.start(); - } - - public void stopEndPoints () { - stopEndPoints(0); - } - - public void stopEndPoints (int stopAfterMillis) { - timer.schedule(new TimerTask() { - public void run () { - for (EndPoint endPoint : endPoints) - endPoint.stop(); - endPoints.clear(); - } - }, stopAfterMillis); - } - - public void waitForThreads (int stopAfterMillis) { - if (stopAfterMillis > 10000) throw new IllegalArgumentException("stopAfterMillis must be < 10000"); - stopEndPoints(stopAfterMillis); - waitForThreads(); - } - - public void waitForThreads () { - fail = false; - TimerTask failTask = new TimerTask() { - public void run () { - stopEndPoints(); - fail = true; - } - }; - timer.schedule(failTask, 11000); - while (true) { - for (Iterator iter = threads.iterator(); iter.hasNext();) { - Thread thread = (Thread)iter.next(); - if (!thread.isAlive()) iter.remove(); - } - if (threads.isEmpty()) break; - try { - Thread.sleep(100); - } catch (InterruptedException ignored) { - } - } - failTask.cancel(); - if (fail) fail("Test did not complete in a timely manner."); - // Give sockets a chance to close before starting the next test. - try { - Thread.sleep(1000); - } catch (InterruptedException ignored) { - } - } -} +/* Copyright (c) 2008, Nathan Sweet + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +package com.esotericsoftware.kryonet; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Timer; +import java.util.TimerTask; + +import junit.framework.TestCase; + +import com.esotericsoftware.minlog.Log; +import com.esotericsoftware.minlog.Log.Logger; + +abstract public class KryoNetTestCase extends TestCase { + static public String host = "localhost"; + static public int tcpPort = 54555, udpPort = 54777; + + private ArrayList threads = new ArrayList(); + ArrayList endPoints = new ArrayList(); + private Timer timer; + boolean fail; + + public KryoNetTestCase () { + // Log.TRACE(); + // Log.DEBUG(); + Log.setLogger(new Logger() { + public void log (int level, String category, String message, Throwable ex) { + // if (category == null || category.equals("kryonet")) // + super.log(level, category, message, ex); + } + }); + } + + protected void setUp () throws Exception { + System.out.println("---- " + getClass().getSimpleName()); + timer = new Timer(); + } + + protected void tearDown () throws Exception { + timer.cancel(); + } + + public void startEndPoint (EndPoint endPoint) { + endPoints.add(endPoint); + Thread thread = new Thread(endPoint, endPoint.getClass().getSimpleName()); + threads.add(thread); + thread.start(); + } + + public void stopEndPoints () { + stopEndPoints(0); + } + + public void stopEndPoints (int stopAfterMillis) { + timer.schedule(new TimerTask() { + public void run () { + for (EndPoint endPoint : endPoints) + endPoint.stop(); + endPoints.clear(); + } + }, stopAfterMillis); + } + + public void waitForThreads (int stopAfterMillis) { + if (stopAfterMillis > 10000) throw new IllegalArgumentException("stopAfterMillis must be < 10000"); + stopEndPoints(stopAfterMillis); + waitForThreads(); + } + + public void waitForThreads () { + fail = false; + TimerTask failTask = new TimerTask() { + public void run () { + stopEndPoints(); + fail = true; + } + }; + timer.schedule(failTask, 11000); + while (true) { + for (Iterator iter = threads.iterator(); iter.hasNext();) { + Thread thread = (Thread)iter.next(); + if (!thread.isAlive()) iter.remove(); + } + if (threads.isEmpty()) break; + try { + Thread.sleep(100); + } catch (InterruptedException ignored) { + } + } + failTask.cancel(); + if (fail) fail("Test did not complete in a timely manner."); + // Give sockets a chance to close before starting the next test. + try { + Thread.sleep(1000); + } catch (InterruptedException ignored) { + } + } +} From 3394fae37f0959e135e3c635e25a672e29682026 Mon Sep 17 00:00:00 2001 From: Pyeroh Date: Mon, 22 Aug 2016 08:19:35 +1100 Subject: [PATCH 2/5] Compile shaded --- pom.xml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4d982645..7e899061 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.esotericsoftware kryonet - 2.22.0-RC1 + 3.0.0 jar kryonet @@ -54,6 +54,22 @@ 1.8 + + org.apache.maven.plugins + maven-shade-plugin + 2.4.3 + + + + + + package + + shade + + + + From e545ca65a7c7f667f0c3803e83a3daf5a8af1273 Mon Sep 17 00:00:00 2001 From: Pyeroh Date: Tue, 30 Aug 2016 08:20:44 +1100 Subject: [PATCH 3/5] =?UTF-8?q?Cr=C3=A9ation=20custom=20du=20jar=20de=20kr?= =?UTF-8?q?yonet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 178 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 94 insertions(+), 84 deletions(-) diff --git a/pom.xml b/pom.xml index 7e899061..eb7c5ae4 100644 --- a/pom.xml +++ b/pom.xml @@ -1,95 +1,105 @@ - - - org.sonatype.oss - oss-parent - 7 - - 4.0.0 + + + org.sonatype.oss + oss-parent + 7 + + 4.0.0 - com.esotericsoftware - kryonet - 3.0.0 - jar + com.esotericsoftware + kryonet + 3.0.0 + jar - kryonet - TCP and UDP client/server library for Java - https://github.com/EsotericSoftware/kryonet + kryonet + TCP and UDP client/server library for Java + https://github.com/EsotericSoftware/kryonet - - - New BSD License - http://www.opensource.org/licenses/bsd-license.php - repo - - + + + New BSD License + http://www.opensource.org/licenses/bsd-license.php + repo + + - - - nathan.sweet - Nathan Sweet - nathan.sweet@gmail.com - - + + + nathan.sweet + Nathan Sweet + nathan.sweet@gmail.com + + - - https://github.com/EsotericSoftware/kryonet - scm:git:https://github.com/EsotericSoftware/kryonet.git - scm:git:https://github.com/EsotericSoftware/kryonet.git - HEAD - + + https://github.com/EsotericSoftware/kryonet + scm:git:https://github.com/EsotericSoftware/kryonet.git + scm:git:https://github.com/EsotericSoftware/kryonet.git + HEAD + - - - src - test + + + src + test - - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-shade-plugin - 2.4.3 - - - - - - package - - shade - - - - - - + + + ${basedir}/src + + **/*.java + + + - - - com.esotericsoftware - kryo - 4.0.0 - - - com.esotericsoftware - jsonbeans - 0.7 - - - junit - junit - 4.11 - test - - + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.3 + + + + + + package + + shade + + + + + + + + + + com.esotericsoftware + kryo + 4.0.0 + + + com.esotericsoftware + jsonbeans + 0.7 + + + junit + junit + 4.11 + test + + From 0649c3d4f0e50c424ed2cb9f9f547950c43ef336 Mon Sep 17 00:00:00 2001 From: Pyeroh Date: Wed, 14 Sep 2016 11:48:49 +1100 Subject: [PATCH 4/5] Add equals and hashCode to Connection --- .gitignore | 19 +- .../esotericsoftware/kryonet/Connection.java | 706 +++++++++--------- 2 files changed, 376 insertions(+), 349 deletions(-) diff --git a/.gitignore b/.gitignore index a30a0043..055f7887 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ -# Temporary Files -*~ -.*.swp -.DS_STORE - -bin/ -target/ -.idea/ -*.iml +# Temporary Files +*~ +.*.swp +.DS_STORE + +bin/ +target/ +.idea/ +*.iml +/dependency-reduced-pom.xml diff --git a/src/com/esotericsoftware/kryonet/Connection.java b/src/com/esotericsoftware/kryonet/Connection.java index 13934ed5..fff75caf 100644 --- a/src/com/esotericsoftware/kryonet/Connection.java +++ b/src/com/esotericsoftware/kryonet/Connection.java @@ -1,340 +1,366 @@ -/* Copyright (c) 2008, Nathan Sweet - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the distribution. - * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -package com.esotericsoftware.kryonet; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.SocketAddress; -import java.net.SocketException; -import java.nio.channels.SocketChannel; - -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryonet.FrameworkMessage.Ping; - -import static com.esotericsoftware.minlog.Log.*; - -// BOZO - Layer to handle handshake state. - -/** Represents a TCP and optionally a UDP connection between a {@link Client} and a {@link Server}. If either underlying connection - * is closed or errors, both connections are closed. - * @author Nathan Sweet */ -public class Connection { - int id = -1; - private String name; - EndPoint endPoint; - TcpConnection tcp; - UdpConnection udp; - InetSocketAddress udpRemoteAddress; - private Listener[] listeners = {}; - private Object listenerLock = new Object(); - private int lastPingID; - private long lastPingSendTime; - private int returnTripTime; - volatile boolean isConnected; - volatile KryoNetException lastProtocolError; - - protected Connection () { - } - - void initialize (Serialization serialization, int writeBufferSize, int objectBufferSize) { - tcp = new TcpConnection(serialization, writeBufferSize, objectBufferSize); - } - - /** Returns the server assigned ID. Will return -1 if this connection has never been connected or the last assigned ID if this - * connection has been disconnected. */ - public int getID () { - return id; - } - - /** Returns true if this connection is connected to the remote end. Note that a connection can become disconnected at any time. */ - public boolean isConnected () { - return isConnected; - } - - /** - * Returns the last protocol error that occured on the connection. - * - * @return The last protocol error or null if none error occured. - */ - public KryoNetException getLastProtocolError() { - return lastProtocolError; - } - - /** Sends the object over the network using TCP. - * @return The number of bytes sent. - * @see Kryo#register(Class, com.esotericsoftware.kryo.Serializer) */ - public int sendTCP (Object object) { - if (object == null) throw new IllegalArgumentException("object cannot be null."); - try { - int length = tcp.send(this, object); - if (length == 0) { - if (TRACE) trace("kryonet", this + " TCP had nothing to send."); - } else if (DEBUG) { - String objectString = object == null ? "null" : object.getClass().getSimpleName(); - if (!(object instanceof FrameworkMessage)) { - debug("kryonet", this + " sent TCP: " + objectString + " (" + length + ")"); - } else if (TRACE) { - trace("kryonet", this + " sent TCP: " + objectString + " (" + length + ")"); - } - } - return length; - } catch (IOException ex) { - if (DEBUG) debug("kryonet", "Unable to send TCP with connection: " + this, ex); - close(); - return 0; - } catch (KryoNetException ex) { - if (ERROR) error("kryonet", "Unable to send TCP with connection: " + this, ex); - close(); - return 0; - } - } - - /** Sends the object over the network using UDP. - * @return The number of bytes sent. - * @see Kryo#register(Class, com.esotericsoftware.kryo.Serializer) - * @throws IllegalStateException if this connection was not opened with both TCP and UDP. */ - public int sendUDP (Object object) { - if (object == null) throw new IllegalArgumentException("object cannot be null."); - SocketAddress address = udpRemoteAddress; - if (address == null && udp != null) address = udp.connectedAddress; - if (address == null && isConnected) throw new IllegalStateException("Connection is not connected via UDP."); - - try { - if (address == null) throw new SocketException("Connection is closed."); - - int length = udp.send(this, object, address); - if (length == 0) { - if (TRACE) trace("kryonet", this + " UDP had nothing to send."); - } else if (DEBUG) { - if (length != -1) { - String objectString = object == null ? "null" : object.getClass().getSimpleName(); - if (!(object instanceof FrameworkMessage)) { - debug("kryonet", this + " sent UDP: " + objectString + " (" + length + ")"); - } else if (TRACE) { - trace("kryonet", this + " sent UDP: " + objectString + " (" + length + ")"); - } - } else - debug("kryonet", this + " was unable to send, UDP socket buffer full."); - } - return length; - } catch (IOException ex) { - if (DEBUG) debug("kryonet", "Unable to send UDP with connection: " + this, ex); - close(); - return 0; - } catch (KryoNetException ex) { - if (ERROR) error("kryonet", "Unable to send UDP with connection: " + this, ex); - close(); - return 0; - } - } - - public void close () { - boolean wasConnected = isConnected; - isConnected = false; - tcp.close(); - if (udp != null && udp.connectedAddress != null) udp.close(); - if (wasConnected) { - notifyDisconnected(); - if (INFO) info("kryonet", this + " disconnected."); - } - setConnected(false); - } - - /** Requests the connection to communicate with the remote computer to determine a new value for the - * {@link #getReturnTripTime() return trip time}. When the connection receives a {@link FrameworkMessage.Ping} object with - * {@link Ping#isReply isReply} set to true, the new return trip time is available. */ - public void updateReturnTripTime () { - Ping ping = new Ping(); - ping.id = lastPingID++; - lastPingSendTime = System.currentTimeMillis(); - sendTCP(ping); - } - - /** Returns the last calculated TCP return trip time, or -1 if {@link #updateReturnTripTime()} has never been called or the - * {@link FrameworkMessage.Ping} response has not yet been received. */ - public int getReturnTripTime () { - return returnTripTime; - } - - /** An empty object will be sent if the TCP connection has not sent an object within the specified milliseconds. Periodically - * sending a keep alive ensures that an abnormal close is detected in a reasonable amount of time (see {@link #setTimeout(int)} - * ). Also, some network hardware will close a TCP connection that ceases to transmit for a period of time (typically 1+ - * minutes). Set to zero to disable. Defaults to 8000. */ - public void setKeepAliveTCP (int keepAliveMillis) { - tcp.keepAliveMillis = keepAliveMillis; - } - - /** If the specified amount of time passes without receiving an object over TCP, the connection is considered closed. When a TCP - * socket is closed normally, the remote end is notified immediately and this timeout is not needed. However, if a socket is - * closed abnormally (eg, power loss), KryoNet uses this timeout to detect the problem. The timeout should be set higher than - * the {@link #setKeepAliveTCP(int) TCP keep alive} for the remote end of the connection. The keep alive ensures that the remote - * end of the connection will be constantly sending objects, and setting the timeout higher than the keep alive allows for - * network latency. Set to zero to disable. Defaults to 12000. */ - public void setTimeout (int timeoutMillis) { - tcp.timeoutMillis = timeoutMillis; - } - - /** If the listener already exists, it is not added again. */ - public void addListener (Listener listener) { - if (listener == null) throw new IllegalArgumentException("listener cannot be null."); - synchronized (listenerLock) { - Listener[] listeners = this.listeners; - int n = listeners.length; - for (int i = 0; i < n; i++) - if (listener == listeners[i]) return; - Listener[] newListeners = new Listener[n + 1]; - newListeners[0] = listener; - System.arraycopy(listeners, 0, newListeners, 1, n); - this.listeners = newListeners; - } - if (TRACE) trace("kryonet", "Connection listener added: " + listener.getClass().getName()); - } - - public void removeListener (Listener listener) { - if (listener == null) throw new IllegalArgumentException("listener cannot be null."); - synchronized (listenerLock) { - Listener[] listeners = this.listeners; - int n = listeners.length; - if (n == 0) return; - Listener[] newListeners = new Listener[n - 1]; - for (int i = 0, ii = 0; i < n; i++) { - Listener copyListener = listeners[i]; - if (listener == copyListener) continue; - if (ii == n - 1) return; - newListeners[ii++] = copyListener; - } - this.listeners = newListeners; - } - if (TRACE) trace("kryonet", "Connection listener removed: " + listener.getClass().getName()); - } - - void notifyConnected () { - if (INFO) { - SocketChannel socketChannel = tcp.socketChannel; - if (socketChannel != null) { - Socket socket = tcp.socketChannel.socket(); - if (socket != null) { - InetSocketAddress remoteSocketAddress = (InetSocketAddress)socket.getRemoteSocketAddress(); - if (remoteSocketAddress != null) info("kryonet", this + " connected: " + remoteSocketAddress.getAddress()); - } - } - } - Listener[] listeners = this.listeners; - for (int i = 0, n = listeners.length; i < n; i++) - listeners[i].connected(this); - } - - void notifyDisconnected () { - Listener[] listeners = this.listeners; - for (int i = 0, n = listeners.length; i < n; i++) - listeners[i].disconnected(this); - } - - void notifyIdle () { - Listener[] listeners = this.listeners; - for (int i = 0, n = listeners.length; i < n; i++) { - listeners[i].idle(this); - if (!isIdle()) break; - } - } - - void notifyReceived (Object object) { - if (object instanceof Ping) { - Ping ping = (Ping)object; - if (ping.isReply) { - if (ping.id == lastPingID - 1) { - returnTripTime = (int)(System.currentTimeMillis() - lastPingSendTime); - if (TRACE) trace("kryonet", this + " return trip time: " + returnTripTime); - } - } else { - ping.isReply = true; - sendTCP(ping); - } - } - Listener[] listeners = this.listeners; - for (int i = 0, n = listeners.length; i < n; i++) - listeners[i].received(this, object); - } - - /** Returns the local {@link Client} or {@link Server} to which this connection belongs. */ - public EndPoint getEndPoint () { - return endPoint; - } - - /** Returns the IP address and port of the remote end of the TCP connection, or null if this connection is not connected. */ - public InetSocketAddress getRemoteAddressTCP () { - SocketChannel socketChannel = tcp.socketChannel; - if (socketChannel != null) { - Socket socket = tcp.socketChannel.socket(); - if (socket != null) { - return (InetSocketAddress)socket.getRemoteSocketAddress(); - } - } - return null; - } - - /** Returns the IP address and port of the remote end of the UDP connection, or null if this connection is not connected. */ - public InetSocketAddress getRemoteAddressUDP () { - InetSocketAddress connectedAddress = udp.connectedAddress; - if (connectedAddress != null) return connectedAddress; - return udpRemoteAddress; - } - - /** Workaround for broken NIO networking on Android 1.6. If true, the underlying NIO buffer is always copied to the beginning of - * the buffer before being given to the SocketChannel for sending. The Harmony SocketChannel implementation in Android 1.6 - * ignores the buffer position, always copying from the beginning of the buffer. This is fixed in Android 2.0+. */ - public void setBufferPositionFix (boolean bufferPositionFix) { - tcp.bufferPositionFix = bufferPositionFix; - } - - /** Sets the friendly name of this connection. This is returned by {@link #toString()} and is useful for providing application - * specific identifying information in the logging. May be null for the default name of "Connection X", where X is the - * connection ID. */ - public void setName (String name) { - this.name = name; - } - - /** Returns the number of bytes that are waiting to be written to the TCP socket, if any. */ - public int getTcpWriteBufferSize () { - return tcp.writeBuffer.position(); - } - - /** @see #setIdleThreshold(float) */ - public boolean isIdle () { - return tcp.writeBuffer.position() / (float)tcp.writeBuffer.capacity() < tcp.idleThreshold; - } - - /** If the percent of the TCP write buffer that is filled is less than the specified threshold, - * {@link Listener#idle(Connection)} will be called for each network thread update. Default is 0.1. */ - public void setIdleThreshold (float idleThreshold) { - tcp.idleThreshold = idleThreshold; - } - - public String toString () { - if (name != null) return name; - return "Connection " + id; - } - - void setConnected (boolean isConnected) { - this.isConnected = isConnected; - if (isConnected && name == null) name = "Connection " + id; - } -} +/* Copyright (c) 2008, Nathan Sweet + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +package com.esotericsoftware.kryonet; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.SocketException; +import java.nio.channels.SocketChannel; + +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryonet.FrameworkMessage.Ping; + +import static com.esotericsoftware.minlog.Log.*; + +// BOZO - Layer to handle handshake state. + +/** Represents a TCP and optionally a UDP connection between a {@link Client} and a {@link Server}. If either underlying connection + * is closed or errors, both connections are closed. + * @author Nathan Sweet */ +public class Connection { + int id = -1; + private String name; + EndPoint endPoint; + TcpConnection tcp; + UdpConnection udp; + InetSocketAddress udpRemoteAddress; + private Listener[] listeners = {}; + private Object listenerLock = new Object(); + private int lastPingID; + private long lastPingSendTime; + private int returnTripTime; + volatile boolean isConnected; + volatile KryoNetException lastProtocolError; + + protected Connection () { + } + + void initialize (Serialization serialization, int writeBufferSize, int objectBufferSize) { + tcp = new TcpConnection(serialization, writeBufferSize, objectBufferSize); + } + + /** Returns the server assigned ID. Will return -1 if this connection has never been connected or the last assigned ID if this + * connection has been disconnected. */ + public int getID () { + return id; + } + + /** Returns true if this connection is connected to the remote end. Note that a connection can become disconnected at any time. */ + public boolean isConnected () { + return isConnected; + } + + /** + * Returns the last protocol error that occured on the connection. + * + * @return The last protocol error or null if none error occured. + */ + public KryoNetException getLastProtocolError() { + return lastProtocolError; + } + + /** Sends the object over the network using TCP. + * @return The number of bytes sent. + * @see Kryo#register(Class, com.esotericsoftware.kryo.Serializer) */ + public int sendTCP (Object object) { + if (object == null) throw new IllegalArgumentException("object cannot be null."); + try { + int length = tcp.send(this, object); + if (length == 0) { + if (TRACE) trace("kryonet", this + " TCP had nothing to send."); + } else if (DEBUG) { + String objectString = object == null ? "null" : object.getClass().getSimpleName(); + if (!(object instanceof FrameworkMessage)) { + debug("kryonet", this + " sent TCP: " + objectString + " (" + length + ")"); + } else if (TRACE) { + trace("kryonet", this + " sent TCP: " + objectString + " (" + length + ")"); + } + } + return length; + } catch (IOException ex) { + if (DEBUG) debug("kryonet", "Unable to send TCP with connection: " + this, ex); + close(); + return 0; + } catch (KryoNetException ex) { + if (ERROR) error("kryonet", "Unable to send TCP with connection: " + this, ex); + close(); + return 0; + } + } + + /** Sends the object over the network using UDP. + * @return The number of bytes sent. + * @see Kryo#register(Class, com.esotericsoftware.kryo.Serializer) + * @throws IllegalStateException if this connection was not opened with both TCP and UDP. */ + public int sendUDP (Object object) { + if (object == null) throw new IllegalArgumentException("object cannot be null."); + SocketAddress address = udpRemoteAddress; + if (address == null && udp != null) address = udp.connectedAddress; + if (address == null && isConnected) throw new IllegalStateException("Connection is not connected via UDP."); + + try { + if (address == null) throw new SocketException("Connection is closed."); + + int length = udp.send(this, object, address); + if (length == 0) { + if (TRACE) trace("kryonet", this + " UDP had nothing to send."); + } else if (DEBUG) { + if (length != -1) { + String objectString = object == null ? "null" : object.getClass().getSimpleName(); + if (!(object instanceof FrameworkMessage)) { + debug("kryonet", this + " sent UDP: " + objectString + " (" + length + ")"); + } else if (TRACE) { + trace("kryonet", this + " sent UDP: " + objectString + " (" + length + ")"); + } + } else + debug("kryonet", this + " was unable to send, UDP socket buffer full."); + } + return length; + } catch (IOException ex) { + if (DEBUG) debug("kryonet", "Unable to send UDP with connection: " + this, ex); + close(); + return 0; + } catch (KryoNetException ex) { + if (ERROR) error("kryonet", "Unable to send UDP with connection: " + this, ex); + close(); + return 0; + } + } + + public void close () { + boolean wasConnected = isConnected; + isConnected = false; + tcp.close(); + if (udp != null && udp.connectedAddress != null) udp.close(); + if (wasConnected) { + notifyDisconnected(); + if (INFO) info("kryonet", this + " disconnected."); + } + setConnected(false); + } + + /** Requests the connection to communicate with the remote computer to determine a new value for the + * {@link #getReturnTripTime() return trip time}. When the connection receives a {@link FrameworkMessage.Ping} object with + * {@link Ping#isReply isReply} set to true, the new return trip time is available. */ + public void updateReturnTripTime () { + Ping ping = new Ping(); + ping.id = lastPingID++; + lastPingSendTime = System.currentTimeMillis(); + sendTCP(ping); + } + + /** Returns the last calculated TCP return trip time, or -1 if {@link #updateReturnTripTime()} has never been called or the + * {@link FrameworkMessage.Ping} response has not yet been received. */ + public int getReturnTripTime () { + return returnTripTime; + } + + /** An empty object will be sent if the TCP connection has not sent an object within the specified milliseconds. Periodically + * sending a keep alive ensures that an abnormal close is detected in a reasonable amount of time (see {@link #setTimeout(int)} + * ). Also, some network hardware will close a TCP connection that ceases to transmit for a period of time (typically 1+ + * minutes). Set to zero to disable. Defaults to 8000. */ + public void setKeepAliveTCP (int keepAliveMillis) { + tcp.keepAliveMillis = keepAliveMillis; + } + + /** If the specified amount of time passes without receiving an object over TCP, the connection is considered closed. When a TCP + * socket is closed normally, the remote end is notified immediately and this timeout is not needed. However, if a socket is + * closed abnormally (eg, power loss), KryoNet uses this timeout to detect the problem. The timeout should be set higher than + * the {@link #setKeepAliveTCP(int) TCP keep alive} for the remote end of the connection. The keep alive ensures that the remote + * end of the connection will be constantly sending objects, and setting the timeout higher than the keep alive allows for + * network latency. Set to zero to disable. Defaults to 12000. */ + public void setTimeout (int timeoutMillis) { + tcp.timeoutMillis = timeoutMillis; + } + + /** If the listener already exists, it is not added again. */ + public void addListener (Listener listener) { + if (listener == null) throw new IllegalArgumentException("listener cannot be null."); + synchronized (listenerLock) { + Listener[] listeners = this.listeners; + int n = listeners.length; + for (int i = 0; i < n; i++) + if (listener == listeners[i]) return; + Listener[] newListeners = new Listener[n + 1]; + newListeners[0] = listener; + System.arraycopy(listeners, 0, newListeners, 1, n); + this.listeners = newListeners; + } + if (TRACE) trace("kryonet", "Connection listener added: " + listener.getClass().getName()); + } + + public void removeListener (Listener listener) { + if (listener == null) throw new IllegalArgumentException("listener cannot be null."); + synchronized (listenerLock) { + Listener[] listeners = this.listeners; + int n = listeners.length; + if (n == 0) return; + Listener[] newListeners = new Listener[n - 1]; + for (int i = 0, ii = 0; i < n; i++) { + Listener copyListener = listeners[i]; + if (listener == copyListener) continue; + if (ii == n - 1) return; + newListeners[ii++] = copyListener; + } + this.listeners = newListeners; + } + if (TRACE) trace("kryonet", "Connection listener removed: " + listener.getClass().getName()); + } + + void notifyConnected () { + if (INFO) { + SocketChannel socketChannel = tcp.socketChannel; + if (socketChannel != null) { + Socket socket = tcp.socketChannel.socket(); + if (socket != null) { + InetSocketAddress remoteSocketAddress = (InetSocketAddress)socket.getRemoteSocketAddress(); + if (remoteSocketAddress != null) info("kryonet", this + " connected: " + remoteSocketAddress.getAddress()); + } + } + } + Listener[] listeners = this.listeners; + for (int i = 0, n = listeners.length; i < n; i++) + listeners[i].connected(this); + } + + void notifyDisconnected () { + Listener[] listeners = this.listeners; + for (int i = 0, n = listeners.length; i < n; i++) + listeners[i].disconnected(this); + } + + void notifyIdle () { + Listener[] listeners = this.listeners; + for (int i = 0, n = listeners.length; i < n; i++) { + listeners[i].idle(this); + if (!isIdle()) break; + } + } + + void notifyReceived (Object object) { + if (object instanceof Ping) { + Ping ping = (Ping)object; + if (ping.isReply) { + if (ping.id == lastPingID - 1) { + returnTripTime = (int)(System.currentTimeMillis() - lastPingSendTime); + if (TRACE) trace("kryonet", this + " return trip time: " + returnTripTime); + } + } else { + ping.isReply = true; + sendTCP(ping); + } + } + Listener[] listeners = this.listeners; + for (int i = 0, n = listeners.length; i < n; i++) + listeners[i].received(this, object); + } + + /** Returns the local {@link Client} or {@link Server} to which this connection belongs. */ + public EndPoint getEndPoint () { + return endPoint; + } + + /** Returns the IP address and port of the remote end of the TCP connection, or null if this connection is not connected. */ + public InetSocketAddress getRemoteAddressTCP () { + SocketChannel socketChannel = tcp.socketChannel; + if (socketChannel != null) { + Socket socket = tcp.socketChannel.socket(); + if (socket != null) { + return (InetSocketAddress)socket.getRemoteSocketAddress(); + } + } + return null; + } + + /** Returns the IP address and port of the remote end of the UDP connection, or null if this connection is not connected. */ + public InetSocketAddress getRemoteAddressUDP () { + InetSocketAddress connectedAddress = udp.connectedAddress; + if (connectedAddress != null) return connectedAddress; + return udpRemoteAddress; + } + + /** Workaround for broken NIO networking on Android 1.6. If true, the underlying NIO buffer is always copied to the beginning of + * the buffer before being given to the SocketChannel for sending. The Harmony SocketChannel implementation in Android 1.6 + * ignores the buffer position, always copying from the beginning of the buffer. This is fixed in Android 2.0+. */ + public void setBufferPositionFix (boolean bufferPositionFix) { + tcp.bufferPositionFix = bufferPositionFix; + } + + /** Sets the friendly name of this connection. This is returned by {@link #toString()} and is useful for providing application + * specific identifying information in the logging. May be null for the default name of "Connection X", where X is the + * connection ID. */ + public void setName (String name) { + this.name = name; + } + + /** Returns the number of bytes that are waiting to be written to the TCP socket, if any. */ + public int getTcpWriteBufferSize () { + return tcp.writeBuffer.position(); + } + + /** @see #setIdleThreshold(float) */ + public boolean isIdle () { + return tcp.writeBuffer.position() / (float)tcp.writeBuffer.capacity() < tcp.idleThreshold; + } + + /** If the percent of the TCP write buffer that is filled is less than the specified threshold, + * {@link Listener#idle(Connection)} will be called for each network thread update. Default is 0.1. */ + public void setIdleThreshold (float idleThreshold) { + tcp.idleThreshold = idleThreshold; + } + + public String toString () { + if (name != null) return name; + return "Connection " + id; + } + + void setConnected (boolean isConnected) { + this.isConnected = isConnected; + if (isConnected && name == null) name = "Connection " + id; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + id; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Connection other = (Connection) obj; + if (id != other.id) { + return false; + } + return true; + } +} From 6108b3b55b2a3a6776258a1f8ecf5287e1e15ac4 Mon Sep 17 00:00:00 2001 From: Shreyas Date: Wed, 4 Nov 2015 08:59:43 -0800 Subject: [PATCH 5/5] Fix UDP recieving on Android 5.0+ --- src/com/esotericsoftware/kryonet/UdpConnection.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/esotericsoftware/kryonet/UdpConnection.java b/src/com/esotericsoftware/kryonet/UdpConnection.java index 732a4f07..64a423d7 100644 --- a/src/com/esotericsoftware/kryonet/UdpConnection.java +++ b/src/com/esotericsoftware/kryonet/UdpConnection.java @@ -91,7 +91,10 @@ public InetSocketAddress readFromAddress () throws IOException { DatagramChannel datagramChannel = this.datagramChannel; if (datagramChannel == null) throw new SocketException("Connection is closed."); lastCommunicationTime = System.currentTimeMillis(); - return (InetSocketAddress)datagramChannel.receive(readBuffer); + if(!datagramChannel.isConnected()) + return (InetSocketAddress)datagramChannel.receive(readBuffer); // always null on Android >= 5.0 + datagramChannel.read(readBuffer); + return connectedAddress; } public Object readObject (Connection connection) {