From f68423b40ecb5076990739f09f87ec62f7fd17ae Mon Sep 17 00:00:00 2001 From: Rinjae Date: Fri, 5 Sep 2025 18:54:18 +0900 Subject: [PATCH] init --- .gitignore | 231 ++++++++ build.gradle | 108 ++++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 234 ++++++++ gradlew.bat | 89 +++ libs/mina-core-1.0.10-custom-1.0-custom.jar | Bin 0 -> 334799 bytes settings.gradle | 11 + src/main/java/META-INF/MANIFEST.MF | 3 + .../eai/rms/client/SimpleSessionRecycler.java | 90 ++++ .../eactive/eai/rms/client/SocketClient.java | 30 ++ .../eai/rms/client/SocketClientUdpImpl.java | 180 +++++++ .../rms/client/UdpClientSessionHandler.java | 71 +++ .../client/agent/AbstractScheduledAgent.java | 32 ++ .../eai/rms/client/agent/AdaptersAgent.java | 381 +++++++++++++ .../rms/client/agent/AdaptersStatusAgent.java | 51 ++ .../client/agent/EaiEngineStatusAgent.java | 67 +++ .../eai/rms/client/agent/HostStatusAgent.java | 47 ++ .../rms/client/agent/ItsmMonitorAgent.java | 103 ++++ .../rms/client/agent/JmsFileStoreAgent.java | 67 +++ .../eai/rms/client/agent/JmsQueueAgent.java | 85 +++ .../eai/rms/client/agent/SmsAgent.java | 176 ++++++ .../agent/TransactionTrackingAgent.java | 116 ++++ .../client/common/AbstractSocketClient.java | 95 ++++ .../context/MonitoringContextFactory.java | 40 ++ .../eai/rms/client/context/RmsContext.java | 79 +++ .../rms/client/context/RmsEnvProperties.java | 47 ++ .../eai/rms/client/context/RmsProperties.java | 173 ++++++ .../rms/client/context/RmsPropertiesImpl.java | 225 ++++++++ .../eai/rms/client/context/StandAlone.java | 17 + .../eai/rms/client/dao/AgentAdapterDAO.java | 114 ++++ .../eai/rms/client/dao/RmsPropertiesDAO.java | 22 + .../rms/client/dao/RmsPropertiesDAOImpl.java | 115 ++++ .../rms/client/handler/IMessageHandler.java | 32 ++ .../LogConfigurationCommandHandler.java | 54 ++ .../eai/rms/client/handler/LogConfigurer.java | 130 +++++ .../client/handler/RefreshCommandHandler.java | 31 ++ .../service/EaiEngineStatusService.java | 127 +++++ .../rms/client/service/HostStatusService.java | 217 ++++++++ .../eai/rms/client/service/JMXMonitoring.java | 9 + .../client/service/JMXMonitoringFactory.java | 35 ++ .../SingleQueueMonitoringForActiveMq.java | 82 +++ .../SingleQueueMonitoringForWebLogic.java | 128 +++++ .../SingleServerMonitoringForWebLogic.java | 91 ++++ .../SingleQueueMonitoringForWebSphere.java | 191 +++++++ .../SingleServerMonitoringForWebSphere.java | 184 +++++++ .../AdminClinetPropertiesFactoryBeanUtil.java | 97 ++++ .../eai/rms/client/util/CommandParser.java | 7 + .../eai/rms/client/util/CommandUtils.java | 85 +++ .../eai/rms/client/util/ContainerUtil.java | 127 +++++ .../eai/rms/client/util/QueryBuffer.java | 260 +++++++++ .../eai/rms/client/util/WindowsSystemMon.java | 90 ++++ ...licationContext-agent-datasource-local.xml | 43 ++ .../applicationContext-agent-datasource.xml | 34 ++ .../context/applicationContext-agent-impl.xml | 510 ++++++++++++++++++ .../context/applicationContext-agent-jdbc.xml | 21 + ...tionContext-agent-schaduler-standalone.xml | 38 ++ .../applicationContext-agent-schaduler.xml | 40 ++ .../applicationContext-agent-standalone.xml | 10 + .../context/applicationContext-agent.xml | 10 + src/main/resources/rms.log4j.properties- | 14 + 61 files changed, 5802 insertions(+) create mode 100644 .gitignore create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 libs/mina-core-1.0.10-custom-1.0-custom.jar create mode 100644 settings.gradle create mode 100644 src/main/java/META-INF/MANIFEST.MF create mode 100644 src/main/java/com/eactive/eai/rms/client/SimpleSessionRecycler.java create mode 100644 src/main/java/com/eactive/eai/rms/client/SocketClient.java create mode 100644 src/main/java/com/eactive/eai/rms/client/SocketClientUdpImpl.java create mode 100644 src/main/java/com/eactive/eai/rms/client/UdpClientSessionHandler.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/AbstractScheduledAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/AdaptersAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/AdaptersStatusAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/EaiEngineStatusAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/HostStatusAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/ItsmMonitorAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/JmsFileStoreAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/JmsQueueAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/SmsAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/agent/TransactionTrackingAgent.java create mode 100644 src/main/java/com/eactive/eai/rms/client/common/AbstractSocketClient.java create mode 100644 src/main/java/com/eactive/eai/rms/client/context/MonitoringContextFactory.java create mode 100644 src/main/java/com/eactive/eai/rms/client/context/RmsContext.java create mode 100644 src/main/java/com/eactive/eai/rms/client/context/RmsEnvProperties.java create mode 100644 src/main/java/com/eactive/eai/rms/client/context/RmsProperties.java create mode 100644 src/main/java/com/eactive/eai/rms/client/context/RmsPropertiesImpl.java create mode 100644 src/main/java/com/eactive/eai/rms/client/context/StandAlone.java create mode 100644 src/main/java/com/eactive/eai/rms/client/dao/AgentAdapterDAO.java create mode 100644 src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAO.java create mode 100644 src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAOImpl.java create mode 100644 src/main/java/com/eactive/eai/rms/client/handler/IMessageHandler.java create mode 100644 src/main/java/com/eactive/eai/rms/client/handler/LogConfigurationCommandHandler.java create mode 100644 src/main/java/com/eactive/eai/rms/client/handler/LogConfigurer.java create mode 100644 src/main/java/com/eactive/eai/rms/client/handler/RefreshCommandHandler.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/EaiEngineStatusService.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/HostStatusService.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/JMXMonitoring.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/JMXMonitoringFactory.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/activemq/SingleQueueMonitoringForActiveMq.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleQueueMonitoringForWebLogic.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleServerMonitoringForWebLogic.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/websphere/SingleQueueMonitoringForWebSphere.java create mode 100644 src/main/java/com/eactive/eai/rms/client/service/websphere/SingleServerMonitoringForWebSphere.java create mode 100644 src/main/java/com/eactive/eai/rms/client/util/AdminClinetPropertiesFactoryBeanUtil.java create mode 100644 src/main/java/com/eactive/eai/rms/client/util/CommandParser.java create mode 100644 src/main/java/com/eactive/eai/rms/client/util/CommandUtils.java create mode 100644 src/main/java/com/eactive/eai/rms/client/util/ContainerUtil.java create mode 100644 src/main/java/com/eactive/eai/rms/client/util/QueryBuffer.java create mode 100644 src/main/java/com/eactive/eai/rms/client/util/WindowsSystemMon.java create mode 100644 src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource-local.xml create mode 100644 src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource.xml create mode 100644 src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-impl.xml create mode 100644 src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-jdbc.xml create mode 100644 src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler-standalone.xml create mode 100644 src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler.xml create mode 100644 src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml create mode 100644 src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent.xml create mode 100644 src/main/resources/rms.log4j.properties- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57410a4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,231 @@ + +# Package Files # +*.war + +# Eclipse # +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +.classpath +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project +### Intellij ### +.idea +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/**/sonarlint/ + +# SonarQube Plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator/ + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Gradle ### +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +# End of https://www.gitignore.io/api/java,macos,gradle,intellij +/EAISIMWeb/ +/gradle.properties diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..f784445 --- /dev/null +++ b/build.gradle @@ -0,0 +1,108 @@ +plugins { + id 'java-library' + id 'maven-publish' + id 'eclipse-wtp' + id 'idea' +} +group 'com.eactive' +version '4.5.1-SNAPSHOT' + +def springVersion = "5.3.27" + +def nexusUrl = "https://nexus.eactive.synology.me:8090" + + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } +} + +compileJava { + options.encoding = 'UTF-8' +} + +jar { + exclude '**/persistence.xml' +} + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + + +dependencies { + //implementation project(':elink-online-core') + //implementation project(':elink-online-transformer') + //implementation project(':elink-online-common') + api project(':elink-online-common') + + compileOnly fileTree(dir: 'libs', include: ['*.jar']) + + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' +} + +test { + useJUnitPlatform() +} + +publishing { + repositories { + maven { + name = 'eactiveRepository' + def releasesRepoUrl = "${nexusUrl}/repository/maven-releases/" + def snapshotsRepoUrl = "${nexusUrl}/repository/maven-snapshots/" + url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl + credentials(PasswordCredentials) + } + } + + publications { + mavenJava(MavenPublication) { + from components.java + pom { + description = "eLink EMS Client module" + licenses { + license { + name = "Commercial License" + url = "http://eactive.co.kr" + } + } + } + } + } +} + + +task sourcesJar(type: Jar, dependsOn: classes) { + archiveClassifier = 'sources' + from sourceSets.main.allSource +} + +artifacts { + archives sourcesJar +} + +configurations.all { + resolutionStrategy { + // 동적 버전 탐색을 10분 캐시 + cacheDynamicVersionsFor 10, 'minutes' + // 변하는 모듈(Changing Module)을 캐시하지 않음 + cacheChangingModulesFor 0, 'seconds' + } +} + +task settingEclipseEncoding { + if (project.file('.settings').exists()) { + File f = file('.settings/org.eclipse.core.resources.prefs') + f.write('eclipse.preferences.version=1\n') + f.append('encoding/=utf-8') + } +} + +//eclipseJdt.finalizedBy settingEclipseEncoding + +eclipse { + synchronizationTasks settingEclipseEncoding +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..54228ea --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +networkTimeout=10000 diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..1b6c787 --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/libs/mina-core-1.0.10-custom-1.0-custom.jar b/libs/mina-core-1.0.10-custom-1.0-custom.jar new file mode 100644 index 0000000000000000000000000000000000000000..20274fa63c54c97d202204d00ba769b909762803 GIT binary patch literal 334799 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%0A4@q3XplEKp>-(U%!MLOFEpK7C)$P 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

S(+5{$1t~ zlY-`VA*_P@@Eh#C{Ie!?*YFxuIC3IEiiS~tqjSW8HuZIn5DUGd#`3&s)hUU2r9~Oay#p`CNr67*h z7Nl9rVuw)M8Q9%3?kh~q&T5&Pa1N99`~c5(Tg?SZq2iz4BjQvLSS5P-jN2+j(p^abqV;IRpTzm5s={u*r( zfFq0Ar3GOV0EK2Jkc7z+a3LF(1KW4nSlzK`8g*Jc(L~l(x_%ZX86BhRG+PXVdx5 zpA#A@v=%b93#A(>k*1bQnUqPHOj0GvmrCWVfp_fc%{pGqg314Nc!0so5p=Lq>MByi zz2fgCstorEtGo-dEJJfNgJ%<4k#>r32ZLon0h4jX#YSY73;=9`x2HVA%9IIB?yUBc zw?iU=6JPJ-pCSxbCuEphqhe-`&|ITSfGr*2lEHy3g^l7E7HFv1$Qo(=oAn2kE_w55 zU_pt}1ftl%gbFc5Vzk=jQ$2G3JmyAULM`FHNf7+6J2^(pNjxp7Gk6k zQBTSWq|luxDg~$iHAT-$l-`FJeHSST4}3({xUX#g{IR9Vp0lrktNZE9;POMl(*e2o=Z;Sj5LW7Szca_pI@F|7+DS;go_{6wCAN^bTjpe z)c4A3mu+{->v4LDjmh@b^E&1?Ko)6+H#=G@W7~A>qn#4}1RR|R2Ghu%3+O2NR{tJ* zpe@yF3?Ajp(Xck8%&UBGVOLvbzw1{U*zV)u$14Ec?eRLC`yV3E7lt-oKfFUSNFPi- zB3!*Y{J>m>SB}6?bgrpAG-#jkJp|BRgF8#mUi~}rz)|!cz3r{q>#ch0D8^@hDA}DT z?{^T{SJORmU@69DdcQ6@*Wqa6t0hMc)#xtr=XPwPUDEyR;}r-f9ph_gfG_21YJe|P zS@wJx?roS^NqHt9%XWu3X1$px^@iz_D=dsCa1sGc#q*`Tf3SAFn{Op+RWR7o3IS0? zbBLj!V7-~8X_aQ|EyI9ECtt9+Gz|jaG)OwNgaHlICYR~yJ@J9Y5_ZfmQnd*+R~eZ` zp-5G;ri`N!DFpyg3kfb15~~PjE(eNyHiiu9lBp1)Q5L{-n2h{f2Q(SPLl77+s?+t# zAF~8fuDtkVq7vyXeVXt(6WcAZGtFno#E$ef@^Ug~|HOwGY0@aM$}JMq;51Jnkgmp^ z0{z>e=X^B*-Nj9;QcK9GhGxQR8sjS*LS>@*I#h8*l?@+hq6%xFRDDt>NJ4>ZmUu`L z2Q^H}>qq+%8_U2LDvTvj;FC^u@z}F{;C8n_9)X}_d+kf@%&SWxn?uHixHDw4t7UWV z9^4Y?MC!A=HnqGJdTT+&A|dg-9jaS;o9~;T6tM-Iu4y#7O%XxSs#NyMj;OL83XUep z*cY=-!l3eNgGQ^x1JGLQA~puSG{v8#$>uG7zPigBA)2t4R&+9`+C==3v4ek|lE{Ks z1qy-svt*+b>(AmJz53a%JtlJO5u{=2k80vAQIjWOMt*hi{CpCk@aIFgU`8dC5%Rcv z2S-T|VR1LRLRRW8+Q&0r+Y2Fc`p6+1f$FbrQ;sy7&U?gVquQC|ZSj zlx-z)rG1p*2y(^XfJ>#PJ?RSa({Oi+MN89RAP>8T-hlt8kC0LOn_6dY1Wd=2A zqQY{+Fa|vlbch5sLp~_F`WJy-<#cq6V&QU z-AAirv{JCh>nz$E*e=-&I)m75mFZLGPCy~;{Hvj>LQ&kv5tPYkRV3CnG1nJSB4?4K z8&eu9lZ%6#@+PW99*Zd2=4qPGMd{^v$_cbshRf?_I@68^fKq6Mwe)XrLVZ&@Bh;zBGDhPARN+nlm%N75tl42(itlwP&_n-t;SA;1V~1Q#uijp7C5# zY+dIzr^k(+9wF5*9_?vofaIbzXm6M+k2xttE500x6zD`NRvn5`1Y?x4kHtVVVw4h( z+oo|_H;JC1m_6EHC*n6CI21$)MzbBPid-}XX#?~%s!6*-M;hb|A#;clYEtub4O;V( zW>(Bs^yKs5zWlOa;+SowVXj(?nrtk?-8%=5Szx>P~ zqw|TKuy=3>7(y11%~cMCAtlB#1vr3Y&yJA2@{cKA1!*XN!_>Cez!jSf zp_eI^f&z>wmJmIVoeRrk^+#U22!hk|^AZNC4z19uG5q<2$~`yV>z-F~ftOv>in zTj6P!P@nw{Nd%73j{!TpZ12iRRi8b54w&*Fs6{hgk?zvTQm5O0UYP1gU!AOaW(WdC z7a!zbicSnlJ2HY>lO|bc@uUyklX065!GtVTN0xFV_d;E`QD|_3Qtybi@`i1%4Ag24 z&sr8#*%fz*)dRN|s)tK8;GO0HMp7m6$BG-$Pw)ctyvM)hi9z6sogA}IRYY?MRtu^u zqWc)rRXx;5Sb)IuwArd;K7>be7~#K;ZzK;k4bQUQ^E{3c>{6OBK;ANT7}>9i6A7i4 z%1BN$;X@j_bgGl}FUQZvFV~9==!X15fi7>C9^iV{--fN)23&YsM}*FMgBS&PJJhL_ z7ASLKshwV4@AUt%_Rc|)2XD7$+dXYh+qP}nwrxz?wr$(CZTGZoyZiRs*oeFDZ|`p0 z*mzG=)t~u9WkhCWJ>O5Bqfg_=;4}P)(TR0!um6iJjrZE)?$0d`+K~k5J^xC=b_`rA z9W?1ZzUmR2!sG$td)6dt8-ouzuD!mEJ%i6c(kq206Rn@TikUr0t!C))4G3i90uk;9 zJyeLNu*Hv?+fjaK3QjLG%RPqB)SpZ`3c&)kt3~5TgV!f2{O(4YoZQs$mE7U7K6_PI z9&vhO`kJESA@J8CFwz)}jG2?q?ZdZ^)su`_lg}LtxK75|heqDLOM$Gd9Q1rLTBnUWf(L^k+F4>b zDKwa5(;P3MmRz_JmUL#E_BdI8kG5LMx+b_vD??vIEaP|Ft!R6!Kuw z_j7t>`5_3T|4(}^j?Q*=whm6TLi$enrVjen{Dy|cc22eqLdI6crut6C|MyPSzk&bh zUy*;RisH8b;)fUZ5uQq=k8Sgf4YJJeMT2LK7ar|LO3cd7sw??(V&m9K#pN4elVa=i7vxn{SpF6OIcDC z)5Mq)@AB2bC$9FchwNJEn!mnYC*h}k;VDMp(UnrDb*aqd)Uu)*IEJ_ zUXRl_Yo)c0_MzO|KI=DCiwS4;)f>O_M5A+y&b{*a=Du-=sw%ADBG-mG8jAc;b}Ce; zu=(&%-lix=aGeM;LinQ_I25Z^qB4!JWd|9SRzGe})FKtMn}60=q?2x-;1%+w*or!t37HN%ifqdUf>SLxg|Z?M;t&|L&W!kf=1(TPXPNviP+ zyb0oQ-5kDh1N(S6y56w6EMj>}| zBWYF_FA+#X%whX8B%|d-hON<9(n47x=I2x1!Uu|Yxy!43bRc5Wtn?^5n~sZd_tcxe z>{K`$y91mS+{3~Xoyyiu_v|}XVMUgLJ9sm4dFX-0@vtBUIlwU={EF?LVP?qyoAMYS z#P0pB^htbESY9*tf-c%=9djG}D-uO{QRx6)zq|O(L57VgjV}Hp6)_)$tf6{nmhjF;rwrx+`m%)^snqc4XJ4UEIH&a6Y|DIWkAqtR-qsu8sW}-GJiD0 z{4jJR%Y2MxLv?FcdslwXyRjGG$eF)7QFB5DdjYp=xW-(j&8uYEr-Bi*rY5d4u4}fY z#hLeub0AUMN47!zH+*!scxh zjm4#tZcl)w?`eYXP{7z9;?JL#{Fp} z_gRh)UlYnpp%|37l^e+#F70oL=<#p#vF9rm&W#^U>5_w6joM%w*-7Y>Swa083p@B{ z6R-)gIx1FdKY65etMgeVExZMn44N0i1CTCu)D5v0Jy9!DImU{!zep96_N|7d$(!$u zu)7sD>9yzuB)^Rbqdq1?qew#54(^9DJ}kv+nr0iU&UFZ_4Ci|@S*?uy~lB%V8OfJ>Basa`xC zL@_%%H2hT1eyPp*IxIZRkz<7Um1KgQS%E{Yfe9<48iPz1Wu7iS4!1Qam=jSp;qN+vq*Gk<5C7zF4d{X>v~(|`v)8HYem{mkP+P`N$iEmm zvLAQg5v|F8569I<3ll!Gn(`F9dMP6?THskA;@i=_mHQ&$S^}BQ>Vj@6VYvYWDEEq3 z?-XD@u&OPB;RrPU_>KH)Xl^Nt=X6Pg3h(m*_QKf=NQ9Cab`PxFr z_XrgT)>|I=XW z-{}AJuhKtFscPCHsltB^*L4lA`3@8j?9Mk94v7Ph!qZ6mqV55Z$oLWw1!}HZ$yk#< zRj+9~o(7@fzsZG_NF?P;c$Fh73n#@&*g;b$+zSa8-4Rke(l!c6A77;J@Xhlq!buml zWu>t*I+{$Ye}AmN@dBBRJkp)j`CtUJ45)>;_Otm0=sV%ll-Y=5$1mzbMvKM9))y?D z@GI1J=|8wH(nCg1EFs08snWp@N5v5Mb0D!$#NRDu_FF0 zldeKhe8|jAZO|5(H}qSQ@uJh5oql7HGzf{2!DN!=KwDnRu`#je@YhNEC}%MWntI&) z@3}FWXOqath8#O44g4HwK@gu5b{YuEcnrY@6bHk8%*Ek)D)lrbXKKzub&Ro;K<_lv z5C$uagnoij$N_j2Rh0(ozPs*mkmZxM;Ze0?xcsu+|cV6RHQFODpBdP_18nWi$>09B2cWS29Dl;Mn_58@!ocF zp*^C(3}mFd6}?}pdsh$XtuxU6Aqk;$$_%^;cOy`;q^iFhZeCWg;gGM}IL--SJc+8~ z{0ytdTQ`C)Zy_7*s;h}g&P2(SO3q@-G6vfy>Ju9(cH8A~K>e3v?V5hPPJEo>1YD`E zCoIR{;!1O^<=nujZPM7#PwYJxgVi7APd18Hv)MFvK+uxR2^I$mEr50Wwx*7M#|1i9AT4ONLtF2>ql$qX zHku;n&DBSWiEwggudJCq~<`$mt<2*!@-H%2Sy>B_{zct)K z(;d)3^Q-QIXJbobZm7X6aHMp9Z=&Cu09v#QV$Ob1j#p&?Z+TwaDqqp87@=_v`l)QXD)x~KL-wfz9ciW8`H?3Sef)O&FU%c@U>XCA!N*|?rPJ29GjP~A!}60SR` zjZiL!pfLB6{LK7U!42i=G!^+OAlM}-%0=bv2*#J+4nOK7zCVR*7<*a6x$IRgL@WMt zA|}H$r^?uorA-^SMkfXqSCoQMyhns)hE_RnmW|}KGxhVX^e|;w`7th%E!|&gSc1GB z!2kNk#&@;vMuZRmfKdwoK=Qw9L;hb+PyP-2Pyb5%)0F2wPp!vqcGd*Jo?sO3HUHXjP@o1eB}N>R~nX0K^j#{EHq~P#J)-aSW1@G+T}m5 z=H=z}@}}je^zY}*XA=f-5`2S`>+iC*=V`B>B*Ck-EB0gVw@FnvUI`(j#XcC1^z*_t zx%5ybdDiq)rpNip_+tL_B^!_66^K#cc`d6O4OU|f#%%_-tc?0f+!XZAztUb+xLAd4 zO6e0I9tC|FTnC3!{tT(Pk zP6bTcKZfw#<2xCfi8HJdCff;3+phPhe<>V!;a@aizVbd=mv%O^J_uQ*W2s4QE@|FI zcW^t*8Mb%#IE%i+n0T36=Z0L{PKmlVcK&dA(%L#MICakqJm1f7b!NGW-TU^zjoZMr zxz$F*Al7Dqv9`ITWE|bvuvQ&$-+k!AT_5IPeT2^5lrl}tUpOuZcuS>^6uArJW+T6p z6s}z#0e?UTgEzubiP^*AcRe*fL!b$e0vo|>w;$D;Wvpu3S~4SJ!5>zVRFH1a`}_@q6EPzLONdCuQ!P;Vs0fQQqi9mUU|!SL{CT_XnZ-8|~|B9n*L65t8{A;V5qs z*n#(O&cr4fK?7|OJK4k+rEE`p4mCPCP^JL}`9;Nip}klFjiZb?j9jjkS{?(;q5T5& zIFk~IT!qg318ORjpmE3PNO=s`6(!>*U+Ecb0bso_?kl@oI=}z)xk`Y0Lu7Qn7;KzL zDbqk9y9Um0>Vn_u^jac>n@n0!iF0J3DpASchPm)(=%Mn5-S?kp4R$f>~yzVZrG}rDMSqCJd4Sd3;7DQM8z_LTPW)4?!P( z>6p4y=)b68wA64zhv_=#X>$X5psp zRR^C&v$C0*%ccPpXwGu zuEkgl?nj&v?5eHeR+CeZuP`oD9rx~KV#0tLlG118Y`~(hS>?rOPadRVR6{|`1my9l zdtJ`+8O7O}!$j$|=Gyqwojj74P;7*Y+M{cWKe!jJ;P809;$1m(pF6S zH*Ur?v}IKl2tnb)bIy4URZ4bL_#K$KrR`>OcVeylN`vj-76Wy?53NP1%zFihyh%Q7 zTItx=Rc!i+!!?(**RiHy0|LP%c<92& zrlqIB>3}O5*r7=+qHgY@SeNXMoQ)qyi~bdOvJVWttzcSN@f)XSY}Amnh`K5^+yM2J zMUQ>yr5N8}v5yPHwYF^r0u}sdD3ANj6A!DaTz^LU?KGJNMV!2b1K-$V)(t6Ps z%YqwJ{2E}Sp;&7%r$K1R9qKM=DA#MbGad_^6HmsZd zaZJ5K9OJgB@;#Lit=_}wY5?#Pm2&gNin?Rn6qAHmK=%p4k^3Ew*S^kcH;Ba##>q;P z;bL^CVnkRYF4gPF&e0OVXfrKJW{*m{Xt{>zQEThFPi!1Eo; zEgbG~edlom78vUGUh27kSZ^tPp~c?ZSoIkC8L@pCy$F;ayxNwcE?(HxO}+V{wrlmd zJ&S1CVb)&Wb9M3~QCO@p;BMSVQ#k!9OK0}tnz*EzIm?Ecv@!zRI&!K{$Y;pGB`UZn zja#?-@iWYMQ#D8)seRfdUbot^R)PbA_WNmnPw8DA%=%Yvg|_Lwr7}I@Gd%=nDEKX= zcmmfuir*|Rtd_NLs$*V&?O5%8Y+g1l)c8&3uTSAfKEuAO<~1LR#eIZ;uaD^6tC!BpFh4{p)@L4tQwU}0Pn|si%dr`+9gU}TFRq-9xiP0%>3ktA9GIp8<167>k z?eZx{XRRI#E-!+HJ4z|%%LqQ1lrJoCy~xIh=qNa|lv1y@EX9t+Obz zCkjw2n5IK<%m-T&_t%PX*MF3&G?zg+qbhDALlP?1u=AW)D$7u160&ENQ7pydaLR-e zDMUN6gw`1+Awi8eBnO`hD);~N$=ZrJWV3M5YIx@R-{h#&u*CA&E0Rnokx&ZJ24zc8 zTs(;OGzoXx^E`_+%0GYIRf3Q3zsoLttur zk0xiwMT%<;8iH4rhmS6oRsp27lN$MLg~B`T6t($K7~oSN0UVKs$Th$ zzyqdpTp5jur8LcsK*BxSw%j(u5=RrubaC@qNgfUTl1EdYQcC$mcegz0;V-trb+dA5 z3&uNsMeXWpy2T_sL2cvGvf_3PZNpMaX=iL%y|cM<{%9X=MQ;gkm7@w+DqpU^c{ye! z3ZtyIjpBBGuMs)c^s^3w5ih8XYXveB?*zP_HMwoZrROEo1X9PkvgUGJ^t0sFSLbx& zjI)rvQPT=dX=f~_=n_Vz9npNRmI~aAvtQ07W#0MT77l3^OiS8lHVN-`x{6x`SIkQ+ z?jCjRGfK}BC#Du1c`m7EfRDLlI6yj0ip3d1Z8B*2E@fNA>x84Y$tE>#ZDly}G3n*% z-d9LFUT5@*+|}81O9>XuW!dpvk?%z$#Kqa zlz7RfSe6>jREs@+{NQfeNr621xY{)hhdlI~SVk$&F`2lp2 zj+ogW&lx-fKj#YJ2F?B^wzYt4Y@Ep!zcqM>s(qs=c2#^?l=qZ9OFg>kzrNQG@ESeH zKKhmMDB@ZrJU7_68;g|NP~ituTI^K0MnS5 z$eJLYU(Y zFXKWh20EcL4v|3o_E-3HffpT<23t%}T*q%5oc+0%wVG~lma>5W5C8lPr=$KbJLQzA zJXW@V67f~WhTmy>Qw6iQg70T0y_q)6nGdQs=oSr@gB-t?an{J;U{ujqHt`oDo_Fej zU(^2kpcv%L%3S$bc{c-sZn^-Hn<7=IMoozBcFW0Ge+psCTIX2*3E7?D=RGy zz$j+*C{<>b*i*+Goi$FayR(D>QrK{hF;2k+$D>J?qD~c$Cxo-ggFO^uajd9W?W&{Z z@v5HpL}J_@5v3x(de%t`K&orqz(3s;X($ny+yzaOKI&3nb<8aYTL1+e`9?V@xT3I_ zq1drJeur-%R8Vj?9fEMwxc&CK!J-YtNQ!H+#(js97z{4N;O!R|#&1q!lJkzVd=@h+ z5WT}h+uBXUJZ@59v|{`=V(p=KL&ps;{B}AztLlk(Ng&|F=zO6UqV9rwA4~^~g-H=6vi<-IKMg`qb zRqRp=uSfRg`xsvi5T(!ZA>nsm_%vk)ayT92**SSg0t(%zM54n7Lm~7ncWzF)S0!uR zO_55k!Sg~8j17#nox}Qcy{wn-D}*>5q{^h<#x^B1g;UL2{Aqx7eH$kq44mk91Dry@ z1Ss#?)xa?RG?8b~69VIuD^ldsU}I|+BixL2SSy-mO7NXk2>yJci->yKt<&)~!XqoQ z0}8cuQ)=vmsDXakp**hBmo*i8H9to}=qgv|_g+0Aw5PbxME+9)-6+q3 z^SNtJyU|x?`7jEJb|ljX;K-C+(UQ%Y{hzGBQi?T~`M%#}@Yr4u%C*fc zNdOatcE_SD2HLwp@Ck? z-Z^5^fq3!WPZ7lracgtY^=Q=1J!Q2Knus^eS!2!BeQ#oVV4dd@)Q4J|C|jK{FjjSZ zKRw^Y)0()At|2RFzhTBLC!rpSa{}Nq4sHU~4=l7|#&)R`Nsg)Rj`|C6^7tp4;@i(k zWWHnY1>)4Ycwb~(0+-3-FVY;LmgM*0k`LtWADrYDK9&Q^^1UK-{3>FO4GGX1S<*2so|m3P!1ub%kCP`ZTo5OIPw(V zDMNYL9~9f>UYsdfbC=>9l0%f%f5hwkFt2&)Ej)=Z*zm^6rt2Mq>?@cuvx`l|=4emV z8BUpA)xtvGMn?qNebRL1KCd4-<7aZ5zA3tjk9A8}oxVjq6rXL^J~!G`?}`$yw)1*& zab>7w*yg$Q#CkFq`X^Gf$hl?$lx9cN7r|xZp_GNkcMQf3T&MPMmq>#Ig;5yH?DC7o&#= zZSwP>Y}>u}1g@Q#|6tc|p07&pH!CDlaaY$J?i-jIPVidy!T?U1p~mh%FXVPH<<-wX zcAN-t&j}$t&jlV~8_gnWfbl@q2(;^pou4v1q|BkTZws`{U&e01IVMb7e-mmoBTN0)$c1TFI|qXD05Ts%;VIbi3~01kS5tn;ZF#$cHd zx~xTdRrkuIEMTAbNT|*UI>CNsRu=&~VROrFFEeEFof3ov!szD4oakx<)6R}O*isLm zoglrzolq7@KahKYt@DgrIE`N%j$7wxF~Gd_=hDJ*n9cgYzK!Rieu!GpdGQZpsJONP+P-hCz%g?^wOX}LMrdTVi$gn3*PjU~OpJKLM<7_aRUjERhs zyAWB9B1;PHodJrMD5G);Va!7bq5al~Jw53q!Hfd-m0bw%h)7p=r*v1%}-U z+_4Ec@eR4-1Lb8In7j!a`3&&RveSdhxd{&2np0hP>4e11*D@R6*3PKkQgBKpV_MR@ z^9O0ZXC?UyPws{sE4EwA1CVG-;B!=eB2By5jWM`U&L__D+$nzN_;lJmcAie1!av7& z>LH+Y>!R*+8moCb4btzSjLOTCR=Or}7bm^1F~Ve;65v_e7*rOS<@h>JU8)H5j~Pn< zsn=tMBdDhE1Eh#6cqPvii<=?OyUj(ob`kbN>t zz7q>Ol2H^f?epGWjaSq4Neuph%aZ>1x&t#nk4zZwrkG8j-x6+p>O$aS=5|kLeB*aP zNzN*dP{yIO#|4Px+63iUHvuJMw52X0X?6f5oZ5c9?nBZ2p9gmwzh-NVoN0sF(HhG; zR^(TOjODH$1bd5E=RUj=buT9GIb7#}TKQCs?T7buQ~}XFMKJp`G2h7tEZrEhSG!YC z!`Z+9Tv(I-V9!&>A4zRp~$d_4t;3AhJF+F#TeEH1dc>?Q_oxVCxO3FsCN)p9%%779_gS9t3K^M{Gqp zbA_Yn%WBet69g==;bk9gKsxQtaB)oclsw@_=0%#?nL*H>c;+%|iFfV2gNK}zSL4BM8XuVQ~ zby2hneB4R2alIi9NlEBtQYt6k?$9r28t)*yk{~d~1qc~QwPQYsg=5r=-${0A1x!8w zkWiH+{V21*D(C{Z6VIhA`obrNCXyjRuPvkkSS87!d9Do909ZZov>H{pperTwCFvkT zRsO~VF$Rmb4(IXoXL!}_rJ%Oegd0q(p3x7Eg1dKRx*4NA3fWogDsfh!*8K26{%?MCez5ikceKaqvOk zxh#xl4ThFlQryF1FJ2J^i2^?>h;1gyTn<)soA z5Lp`qvdo_8WQI&Q{H6wK&3-vSOs`JM)_j`>LwM@$Dide&XSGL{oEZ zG`trVH`oWEX|^YSJy{j8ht@mrz{!e9bz4Hk1Z#dAVW!6J^wvMWyjV?chVAVdgJz|& zpP6fyZTEHO_{9nw&WmI;<1d*3JH*QzmN*BgAVP{gA!$y{msEVcOkRZ$EJ&6$zHrfM z&)&=c&<)w5Ca91)3m=21lA_-j47qY3yj*3W8+eMY)d^|?xuW?-qY;s_y)Gc^{?}>K zPP$QMpVGx6i)HxBones;O`sU%XZIPWK1$S_4AZQvGrs=?&zx-#y1Kuz^t+XLFCtd~ zO%b&wDBvCS@P?QvnRV8!JCfvHBz-z%L95$;dWX`STvwRB8%I+YI=`j>_QQI8l-10J zI`Ex0BKQPvC@iwK-70g(p{bi=9zHkISeJC)yxRqDPluKG<;UxFFM+>+|NI3R`^>ZY z)z+*h?Gr^Bl@-oZRu{VvkRy@Z0<855!DzNs&S!1D0Od3@I1|B zA-LYN_HLe}y%K$G)jJ&)49zUr2IQD&gH<_q4Mt9%HaJBU0-P0}GvO*7!Npo&AGIGEVH>2V8zcRWJ9S}dF{fpAt`lWt z7>+E(Htw62m?PUZ$nX=v&4<(N+mK?Pv#%p(mZ3XB&=@R-1ANk%*xiNr zn`2`6BH$^Bm!E8yUm_|s?-_@5wdoei@ZlUe+s_OCn+ z_n!y5;AL>ULW1t3*uZF+GaaXD-l-%vgi4b!0-x!pQrx4(sc3XH`!1l@qh))fKh- zhAo35S0;X~RRZg{*2KW?TQv1+qP){+RIW_TTC|^8s|5Q1#ye}W;fzqA9}1AUJ|6iU zJ{~^LprrY00t_yHWda`EBOe_y8>ex)gQ1Oi1`XzzT6&aXmHp!rJQhDdBweYLDQ}1%DA-AH$uq`C|3I zmOT;wg5w^@S)lv??dk(R<^F==_ks2*u0Nr)(N_tFO&U%c?-L~_g;S-$sbFZ8OXE_1 z+$*DqFfFypj_OAK1X^N^qoE=oJ+>ovav{IbEI{WTGQNSNu_%sk+(mU;yc?z z)s`-Vhqg8pJ65o$uqb%te&iNgySb=F z-GmSJ%F~F>M#JAD5kFz%m?k|2uKpDR%abr_mKUcYGWUhisi~lj*U=Kor;8IviZlBY z9&q6_m6F+64Qi4Re$eK2B?Hx+_+hCs;aF@M04mm+BnahyE-ic=S18jL&>dDQ>e*u{q?a6Q}{1EoI|^)O%%63F)p(r-{7Rm|E+ zSJ*;|rtbhzYJy7Ym{gxac9^Mz4VY|mjBL|IypNg~GyW1EcK$$sH9)!5=BT2^oDcX()pVx@tF95_V(KOo5p7p*YJ~YlWK}S@dX${#LY)O$lq%r~2y-||IX#o`;k>y8RaVvAsi(4UVtpv);*ar9bOF|q zTf4S&F8Cs3qpWoPrv(FdP57xbbI@O9#Z%l9UIo&*<1?eyYDG3l>0^BhlH+o9tw8V2 z^a&(oNLj^_TPJ6Z8P%drp{e8hC7`DY2c6>SokI)!75(4J4Q)D8yG?2hfR;2P=@oS* z(94@)%&vx0UcMXA%y4>B1L(X!tE7PMFnT$_7nZ(WXtmeCPl8E*Lm_0e3R-1C>cr&JRAP(08oIE5uu2nOD0dmywTj}VpMr*ptzZL$|}Shu6lEXiRX zjh8gLC{``$pe?j%Nl7-HG6CG+WBNB@VYE(j38EzKd?i_7k%<~%i>yOv*o9I7ls$z* z1Am(MMlvBGE=wp9K2nt?7dE(TyqeLsxVpw>ZF*twWEmo(S)){Rtp`jRcNWKaf?y7} zzcjDr@DVD(!`;FXM>pC=m?pT3&7axWgZ^ZiwxNn{HgPqF;H(^u*Ea_}^#dnr&UQ=D z-h{;;*mwZRo9XCxFVYTKs=2S(c+?9F%O0L{cx^T!T^ae*bJ~xa$Y^Kt@;#4WuN%H_ z>b*7suUCEM$Jv-YQkTiE@k|RGUPCQq8mRh#IEa(2gE*pw=VcZ60$Y8Y6=S!qt-F(? zig4O$ULu1K^B;!!;t~ltST<0l*;_np=P-l_fbvLoI-o zM-!Y0XoPqtgwHcmh^$n2v_pQPHig?L!#ag%NV}FXH%eC(V4oqb7cDR7H2Gz#q|Dha zig>77=ku0MJtVjP#<3veS{!=t(~!&o`pRtwxn1&bDTm#Z)eZ)*Bm}CI=F+e}0&-^W zToTDHT)rLi&46u1>{SN1;+j+iv|-=r_pKPYUOJQLR?{9jUt9_s#K0NyZj%p|o4f;E z!9z*08|TMe9cu*UDOe2V42g+;hatMK&q0v6!u`s|Ec$Xe*U}MA^l@R0wcnUw(e(MGz|$4y(}cQ>5JPGQ67=q3qlDK=#~ibYXua1 zM^0I=H;vygXmx&9$ewgphyB|cUq+1}U zjhaq!e((An04n(S1bi@Y`c$Pmp2vJdk7z|<>D~_9ji~z5WN|XEWLtAy-)FGQh0(i*=7<{$cQ@ei8_eTu!9z$3_76 z$N`Ty)sLl%v>x+_Evyp*MzJ1yPLomqGfg;)sK^sT6c@LpN#yq>GcRX*L_F+CC_7~w zOD9>hQACKyDR+|&uBTC8-{QAg`blG7>%ms7c`HlpyWbbKrdX#kZGIn+x*g&Z|3FrB);m`6Bl-Qt%@M^<3p=9+g z>-D#p=7$XUWd*}#XE)Uc|KmqbCCAvIx&k$DM_ko-df+$O&t$4OGf!3Q&Enxahyi8n z6}S9HFck7lS?vLdTu&(`p;Mk)vti!I{1SL&A9MiXQeYj$ylXc*ekq zxmz)FpJPok5QtYG&ZifEcNqRVl>RG>4X`C>1l_pLO(O+EmeO(G{1OQA*RD);rzD#} z(B<^>R8GEI^>WP|7sCZ*RVGVER0n%U)SsXCd-|3e+ztE?0@l7;;<;Pn*$2-vIMg;r zI9nA+J_!Pl?2bJ+-Ssc7u(Drz%b=;*vRLmRtW(hYiJX?hZko?L2H*d&9?aZ+^6-Ah z>Ej=YTJgVcJ^Ux6{crex`d8|o{tKiHA0oK{KVDQg#O8|x(PC#ViHJ!m0|ZG#ti_rU za5?ywxx>=NT2PWwS)fxXAC9Y0z-vsfs5}wKMwuDWeIGJR;*j(PO(U<^(FGe3&m8wG zgk*kmdNT6|(>|`m{dl~u0Z6}9M|XDngAm}_uNLMyuo|;Ww?0c#28`HAy7o()nCK)i zS8_Z)=|m*P=+6M#iF^prNkYYEJV)h@7&-2&mD(V#r%-~t< z1q-BqoOWG?*VPz0hAD0yr3Ot278t~rilY#GdBP8;jqEVc&ru0$s$NfIex~8V*T4`@ z3;D@FA8kC_I2JJUHxnGRjVxO5PZN;cZ!xRH%h{GnNQ zR`~B&D%d$_B#nI>VJ-;1Q3KX#bnU!iO2(OalwEIFRc=}tzCtlS0NGYm!6r)#_rz}J$vgv;7s|R%wie#%Jv`?((2aa9@ zcMTL&4iqp_o>8I)vvN?PUJa&!Xh#f~PjFqQIVGN}L4uF(hi?cjIO}gbYGSs%PbXee zydCqydJtaz1qoZjYaYilNi`WO&CW-^tqw>x8?)~lGg`}Q_@m;Jv4~5tZO7XalR2A~ z)jR|17-IBcXyc|lvj(3Sxs^S^iMGWRVq)!*+_6f_;ULJS1P}T;U#aHi%u=Y$P&kgb zu(;Y9baUY2DxaJkmvaAEGo!#alir-F=u4vROKEIV{93ZBD`NZ^fq!B`V~Tles;bvA zwvBK%UnT`fs=pd-a*`<__;AQTtvBAG6oH{$p(0k)=BgV(a@;n!$sWqpg4c*ZlbeM? zFcScOxk=Y+D~jz?gP;R0OmN2@hpTckwh~li+luST^99~t7tDDxbd|S<>c~@Rh;D=} z2Y!~OLL5c+S16HQAJ`xpTsOW6C7C<=6XGASJ)jNpwa;JOu_to^kX{Qetwx53%^oX%Bl&b234LD&}U}Q>7IJ}4RP2WWkSm{ z!Lcj+oTfX>R%=9owr*|mKTSW$5{GGH+*Ho!G z#$Ggsx8ONc@HW_V109M$Jz^npsm0tieYSUz0 zp_r?sp2qeSzysM5*f86`(^JoV-;nV^HM0$%g{7o{n@`Tqvoc53JwK*a?B$d&;Bkos@irT-VX{cqfV`d8zhrhd|p6PKEJ zk4;FnjgFwjeE|l#vFg!HcDj=+tf2`2 zg+T2s-z&GQ-rF_3mMyBhn!1-kr`~hky&8c;{GK5Adw+Y@^3mo$?&`a7hjg83VuLR3aK_VpWth=*@?UmMDfuPHp0sO~}`c z0;mfYhlSsZzQX%f+RMUg z7+)%IzA$yKkFZ`u(6)(2w=ar`JtIPF4>yb+SGJT!S|rbZt(j&ZZ@_jd246cYaQtJx z3mt2apW9x&z4?N1A8rIcYD0SZI168jkz+;&3+h)|Kwjv{yDxXIZ(NNHN-DR=8#)T# zTb*#9Z*08#cert&96M@jv{5ge7nD0?HQtLJ3*~lw8?)p0%*nIk)&dlM-`zBLstso+ zEZ;i>pdF;589x!TpZ}SE>z4ZH-AUPU0{x!dQ8gNiDSW9z=0!-&8UMwbu&^VRw1=yUYF#|rzE;Pf|s0%(Kx zeuIF0B6RSXmBPw0+voIAqBb&O~}W2%;4vu_WIb@4(n*qP=8@KoGM@|}rp z=NK;K_RhVnRhZEJ;qg1m>$v8AAG{0XyJo>0ADd2huTHqN5RPP77eq%0zM}kE|5|j@URg%Ir6-`( zE>8r@OBe7txm)Hk;~l$h$r09=0$$y|_kZz?f=$~(G!3Ww?+&l?QGsCw90}Tc3kuH0 z0PoF-ku91t{ArMWGxieXTwc!)Y0u-uMK*sJ0^X6d)0B%K{ng}^dGSI*5X33-nnZ}c0E=E!b zuxNxm!}N4QCUEf4O!3?wJ$=H!9h*k>?Gu`GXxm$5f|KD_Z!LUR3^PaDNCR40ZVbKt z;fG3pY`_7msCOrrPvwZ{DgQ-MY|p(qTS%e?Y%ngg^kXY-XUXT;%V9^8euH3&P5ZtW z0FGFoi4}sV{I1dHFwlh0GM{~+3+7{XBMM;-^MxLb5Et2((>u!ows+5|`L&lHnR!A( z_gZIje(aReV(5UKUyPHhoZ+NR=qGws?gh* z8zbgo9N5LL>?k=}Pg*w^?b!1Y9Qy5B>f$9X5B)6I;mMm8`4X&-9DZz;)rU{-Xf zRN+NGI)+fpAGWXJa@P#uenwc)UJa1P3f4>)H9d-**-BI^?8Gt;M1pJ;4Ym)csb#Ht zZMJN>9kA$Uj%U?^n_3O=a@JC~`NwC2$~;F7D^%0wm+8phlyi3cD0nyvopmeJ@-}I_ z!A;4k)I{=M58>XPp&Dun=^7CQU{e-3@z_CcJ_6e1$Iv}P^}i88vblygrgDj7WJ$=V zAlVtm%`BmLUS{}0yQGB%Q+ThlbRnHkF5 zW@ct)W@cCZER_^*N|CBK6%i-TBi-T5 zC(lO)CSk{_o{$D!2w`6>Wkj(Up8i)C6V@N$U~x}`o)xkOeEs)?GB;ui10$R3`7z7e z`T}sA!s&&UfT@f=le7)D#iCG;ozcrgiMeqjrl5UJy=t$X*6ll7b-#RfFkF-iqEqL+ zBc;mDlmkAARdYWcK_eO{-Mqu)qlMR~Tsn7p`JNjg`vG~1a5An@BFiHq>%5+eOeQC4_h5E37ITyh z|J@%56QoAy>lFB3B~x zR3kB`q*R*IFF>vcK^j0S0^ccPYLV?1@F9DhdEeFKvOt@-Zh;Z7PKV5q-jtgoT#%)4 zD(xY9!%04T(6muRW*)nH6Ce?K#_^pMZ9ka=Tx|gtJQD>rSeG=e4t*10C&`FkCOA() z=JzCNqkx7C9egZ|qm>yyLfUG8odr@6EfzmBi`Geih-lpVfN{*!iLX3zkXcqLmCK*p&{_EHS+N zVar0ShGlQ9*wO>1|noWmz&V{K>dXZJ<`1G41q<0aqsD+>v2a(N0O1&x0jopfs&?C)3PN z!@Pu5qDi8tP>haa8D5@JVF^}NQh_v;QodHgsgzcSOEYr(91eAW!gq6`@{^ep0vVPy=U2r=m8LWe?14OAt7((tmiP%~pPK&t91)q0?c zK@84XrddPQ5=FRmtX~Vf5N0`5+Btr6*HGYP@*G)7r-GJg`RE*4Nrxh-8yZ~r*iuNx zsG{~e8$0{8qP(Z1hHV+{Tr^RtO}WN9vD{X*74uwGX{*Fm^3>)eY*ATHtrh1So?3B3 zx>;w-qO4QexwYem8v8kMK>1a&(v{K^&N;9W4>^XLxb)D#L7`9BB2yegy;BVxy0~Zc zMWxw!4T)w`8af_Xr$4=|{4AYM(QtF9aOvgST7sU~Qt|R}-9>)$0f$rcm@T zo=&o2X%X*f7_M;53^E#O&GoM&<}x-dUhbfa^a&4;Q&!_QJt)68qKjBO_Ih$Wd4!qM zhJ5F{ZMG<}DngQDku6~0y)Yn^5-1+t2Pa>nNjcKL-d?Te@9(KL5_pSshyMP|^~;Gs z7Z_31kWC{X5?GUz38RVqSgNN@eB189h345l^Ux#5qQpHOy>bi2DEby#{?QE+_>i^@ zHtIHC@c~~ocw9X;F{XfWt(6~zNIRET1@VG6w{Fp_x^0||y>hUQfb!brleXW4&cqfUYlJ!H;BoB?*aPBH-W z%7OYel66RK#z^Va;@ct=@u=y$W>(g{cR~@K9#+V7S>6bL8J>)ijl?cH{X0SYgy`3y zu_{=x`-l4X@d94Eqi3Fd{M!2)l8f+KkzQuBM`N3z9-BuS*rpcxt;bJVotB&24-P&R zfvI5-u{gJ8fhkiV>DZRUVwI!pmU=cn)Tw8XNds`4L?h%RCb-bcv*C3)$rCjqyWIK4 z*o?21po~~6t`2!jZKHR_uJzf?kC84s0c3ATI@S$dDNrNm%&kMMeG4tZnjIZKwdSZ7 z(*c9Ty_ZLU!nfl%owbj_hg4l@PaRiuJH(!KyxD-T*JA6IhfQ9F#%{^L#FK+UA&m_+ z30s7ul<~VRvb1fSRAYx(7@kx442h zj&ZB=@#4$0Jf@bd`QnP^-`dikGuVU5-vCdg};P=ox{MjYwC2SAwz6+@ND>htz zxyd1DKh)F(3pwIZ7srwEIWKrNw1!+9!wHQ<&CyU>+e^z5NXgmfIKdS&)IIl(R=(E{ z#kz*?@~0U&t3;teRV#44XY(PAmlp~t>ot-@+6hD2I$eTS_M(bg8e}{n9>G`lBM)4dwj;1-vVb#NW?{8zu-a zGkz3=>L3Frsjphe0BTs|J5i*Uptj!E04t%Rt*NMMjFt9@r?@Vxls*F5+P?P$Ud0m1 z<*uKT6C0L6j!+gmC)Gcrp_J`^Ku0URHho6%pM&Zae#yosg(#VK;FVTpZV)M3ljAEC zG4vN^+<_^vu-O$`|1J0F4}HN-Q#cH%=>qKg6(yEz5vo(`R{(*S7Ww?s*$?3k(jxsWWJ7ZA;Lo~R zJM=ufvg!SVg>L4yHfsbpi7(3G^--yH1sMYP{l_r6mxC`;d#}Yc9Sxxxx~N_W{yG^A zS*dQilJ-Ec$>rfzI`>a4I)oCN+{8`ZP~Cj|vlrY~hJV7pa)tPcbJsR{Ep4v5&^qr2 zLxM@^6s~}=J6b;Lx|!egH44}SJxFI4#x9wUfuc1%{X_##jb3AIO6^H6nR~K-HZ2Zy zI}P+NV3e0Nap@xgNpS&t;L+`|UNV;t^rOvGS**R4wGEs(|0zWdSxT}k{BSuzOjgC@ zD&zN40@XF+N_LO_=R_pLJ(;*QzQ9AVmQA#kn7CEGz$4z>2H8;+9%>o=*L4C*RMmJqaAF-<11~24& ze4Q7L#-X#)Zj!CFvX{r9yXwdlnM*Lb9+5Su2$KQR#W8zHAQv3IZUq>kZ(SVV^qVlJ zwfuD@P+On)YR{o|LtRk>;|@YsBFUSX=~lS)i+F!nyYhnS8KMX4&ZbM{$@Nax2l-#= zGwBELIor$iJMakKZmd&xrf+3l{yUe6c=aZwoMjl9aAv5WQ8*FeIeOR$I6bw3xn0(X z0+md$40Gsu-l$f7C&t2y69YkSRQe>n2Zv})k<_W>E4Gf1>wL2lzRnLJS03qAIQe9p zvs5RPf8nJ^IpYx@e1 z*^YqvO3NqG`Ap95WD${diywur+4^~^b`A@ zvnJkZ4kvd`!}JGQyusWTkh$dJQx2k=6cH@t-JRltQ$OC(1E?=a;Fnch7W{6qMWQR` zm{d;APpGzT$0WG2zz|dR4?2kMN;Ow`Ks!?aP#@=kk%RMGo-W~o&$XAdXtRp{jc@Uj z^$+&y!~6G<3gdo|4{q-;Kywh~A-l1nG#a8$LTl@?x0ZmMPek1!g*+Gi|bZ0#^ zMXRf2qh(lFa^J4Q&TC~8t-emp9t&<#S9S$0w&tiSwlI})&R}-tsC&|{^Lq%`O)KKssmXixgQ?-I*1}0w#3qm)G8BhtMAG zL;wIC$n7w&yPweAWQgPStm~jQ*x4Z&45p)T3snPjz@JN``W6L2I4YZ$2{TF3Un;)8 zOVSazI2TM3kq78Ey!g{OhvJ_jzi(c;Zo`ZmgioL?NXm`$+Symx5EwJs006ZENDtdl zW6Bmf*%+`YKTqnzb5X=LTF}>Uh3GKHY+0-`5QZ-XF=uswIlx^D3L=gZa^7krNYbz- zLqI31K1veJ5R;t@>SOd#Je305X_VKo=!npeY(CEtW#%0arELR4RAnUOGOv~D87*3n zLo&@3%=XRPuaQ0?QDc?40;(>U6Z-@AltcX3b#DhuO2ZhL!)NE13t$PC{b@Q-z||Rw zmKCeE*!zL*mjh(Es@FwhbSxlS7SDy0TbYB2skI*AH4%nZl~a3yf&|6e1JMJ+tPE6L zoVs?)h7Mn$LopcQ?&>fE>n*vkh@+$^yJhiij0+!4@xhifE}b5k&CbFEPlhj@WVd2s ztXzP*KjI?m*9~Rnobgx){-n%tRar%n;MfW5Bk9kJyZyFb${iI-Ae)2C5ht@l+FzA` z)Q~zg7RFd~XPiDvG-s774!%iH31d#Vfz_O0Du+iJZP%9Y;mxMqb#F>OSv>0UtJx3E z7>eZ2K|+LztRo}9sMjQ0Os`V^^ADL5&7l*68Y)|axwNr3R@ z!au-iRmkT7tc%+6^nh%3@DwvA&shpmo8F*LoK!O>(G|^mAu&H2W(=h+F!w~s3i067 zuRHW0EBA&3yrWs}U67CHEhptfc)}Jhf4zjt96mFbgq|Eu2F^VLKwmYGXF3@m)r3|P zk0B1DX1`X_gjn~F!JkJ2XFL+}rMc|HXf`Q+G@=;0rw(pa@Hr!dzAlASf+JDV_Tg$? zO1k`Gm~7kEZ5u$?hNb8N19z~YpKL3)&mGjz#)mLhlAq`uFpnrLcK$5WKTeJ#YX@;9 zW{xR{675cS3_;qxW!)FnY84QpT^C!hTxK*^=f>5n8q*d!F~6-GYRL3cWO2^A5(V9+ zf(mP1Rtu=NS$LrXrV-LnZ(X3!@?L$-r-Piqcz~iHf2)9f_$BU8QYSaCF_r(ih&OcR zYcVi(curQ(`f}gXoM8Wg&$cBeq(9kc0ACL|^RxVKm2 zVxI4ZGtar`M@xww=@m!3=&e2`>klw5#zPHe3kq(-0UK6Qi*@6R92g>AR4VE#49KSw z9BymE_hV@CNSGnqoF==*%hAA}_TraLe_bXANVSzAVAvYLG|X+X(^~0fv3sIJA`})& zsPU_%S|(xqS3o8zSCVL!leXsTh32j;2TF(*Gy*3zg|i}^1Or&vt^>|2L**~Qk)Hak zd7v7dflMzfNajMz0&{Fyw zYCKv;LF)i5n0&qpEVj{P{TGq;l8}~9SdAdQ6?q?5BFr%k(Mq(78tXne^t1vx zb#+-*?N_N}?M#iy);T9vvx}7FB`-PR>XO6@+B0sJYjrWyh);)Xnxj$rlt6S3Cr#;` zMw;U`Gb+7>x!I1K5X<=pX@L6*v#SK5;(IMx2iKPPj0@R}%S9tkS$9rh4$s{BuOAPU z^wlM+!s0=GRt(BEc;k0#?HxU^6!#BhwPNek4`y~?30<8Wa+c($ICk2?*SF(}chWUW z-clVo0=E3(9NF(e?D=Ylbnju%&t&q;xdYU_&?^7Hi~giKA%8+gJ+ml3JT;|#@>9LA zw1uw{>in8}5f46iCwoQyOs73)J;U}1?U}hI((y$&d)SH7?2T=D!57c`ln8y%yZ8PG z^NG3n#{$OttBl(N=b`f*%R3C{l&Sc4zCKZMVkmi_7!^jW8X%|2;l((4w6xqSC)|Vg zoGH%1S5C|lPz18Z9Wlz!%{E8nLKSo9MUA>65=sGE+AD=@Q6q^7*+gyOdh4~pk;?Bz zYB4k59r}C5of3mc9r1)aHyaX*gbJ~mo&R5~JTNY#;+TX>$!q;1S?wT7z=UBgO!C@i5M@%0E!kNFG2P=;Q?_KD;6;j4kbGzs;w_bgO z&I%Xu5X2y4QcIbrOK7)KxmV$AXgr^0ck}#yvs}4yd*er$>}~JB{(`p?&xdW_PPF2M zS$Aeab>`Co4U0+aVzqqIMjj`8I)%Od@derpqdP@scUzM+-IhXB0f5&$vtZw49o~-% zZxJ^*=CWyd-P$x;Wp-Ua22Ivo!|~j#=i&E{^`P#i^klTij_S0O9z#Wu7XIjSh~!KU zUSZUZgGL0AFo;DrOsN6A@S5w=>?WKhSmJJupx)g1i~Eu-U;Mk!xL&D$NWY2358v{h z-z3n$6cCHxh+45>LC=f5Sh650k(gDZi%^!$GYUrLC@gWORS(KVW%5`oiEQK(%?l~> z>nIDWEg5wRWD6>nP&*{DK^$ZXJC|TP^rj2Mlu0j@9nD)aWIUJ7?wQv^mz+4OWDC`R z?wI=CA?Rz3-evl_z|(s3|M4F4DmJF6kajNNK9;RzRmz?SvLIM;GwpG)yN-Cy@1GOCQfvL2k`V&Aq<6|(eqluc zcXL{oB~-L9k1S2`Sp_FeDmM$(W>&@ch=;VGShBnYEocbY&x3TXKc#Urx2N+W#VEfB zRpl20CFz1fYRdg7dECMP31bR;CS2CT;uW#vWCZvlJ8X}O@Y&p6jl#EwczCXoev2x4 z#|m%_xx#*p*ro|f>2aS&ai5xFpO$03c!$1lhu>$O!%yo9`I9+rXMhR?{(W9fN+q0f z<$IGZOPn5yqBx5}B(!4Xy0{Hx($wh4x2;KjCRRCOJ3q%&aPQOjPdelBxdnF!*;MjB zXyH2oJ_E&+WH?&{I}z` zzTLl7tg5Akqk_4GA_(ylR6KaSNgSqoj7L>-9c0*nrk)ll z+LKb0WywgIcjV~a`z3Aeh7>Tw5KaNNm=^EYXg{@=AK?y1BVPV2DMSUZQ12@MqaFT> zDW}Y>@>g2Gdb5GXSFryf2YhszG`hf`CepaSA^Hmy3mua!&0(?Uo?;aHP(vOj%Vi}f zFd1MHS)3P#bkz_)?s&WzV1)gGHrRZ4-928`YwHeOLfPiMTGw50@G3FOz!sd_L_>B4 zK5S<>auc0pg?e1oMYnn8JlHTw-fZ4B@QCJ=TchmXaa`4rLZ?hkH8;4&^p_J60Ck^a zlgReVEhn$z{u8pBvw-?`-2lO$K)Kdh()Cx28$KsaDoF7o?A5p&T7)}tGXVXT84;Lj zNkIVjS(O*dCs|?^Y^}-;O}o0p(p`EW*)bN0Yc;0V0Tzc_nFB4Sj$3iB?Oa8KQ0FgO#Q zRY#?|7XIS(sQnFu2gO1wiD9WDZRB)NUo|ig8ZL?9hK4@2ROGy@OO@HNHxt%9gw;E( zBi*o;u}&eXC(&*teSYwZ>76nO;UN+l7VoRK_+<4X0)TGQVS4@ZY}RkF=X)*hva z@5s@mjgp;Y)iH1*lDW~0!>|fHawm++94kIBNQg@_my-;jRYmYmGu*AFGQTcQqP3~b zYPq8@H-%5pA8ef4Ft2-wCsBHR{T- zKfwG%^t?J)<92k9OI@2VI+*fop!T<&z`ONRHM@aHIe`HvRQ*+dFuq2a)C@*`nqD|U zhBI=YI?Fp%n)(W+Oq4Y3o;g?aBoBV!#T+=QC83#y*qC@iguQ-{B7*Gn1JuW$KgfFDZ&wpEB7FZ+ z_G%`WVGi|BYcnK<^DN8!zTF$x7Jz*3YF?nSxC@^_>?Y@WkT%S%Gh@Wyl{y?-kUpy$ zaV>-^WPX6%Q@E3SXONL6GOEGC;s&9qOXzNw zR`dC-(1wKFnr2Vi7Yd*0oE4nQTd|4jGaM?wkxSmTkeafPFI$1``veCY>cy!1~-4(e~l3PfW z2ynV#Bt%Q$vx=5wN7i>Lut+IERa|!qZ;x$mm+L0l#(MuKUA88ul_WjoPJ-$_~vZaKghWbeZ0b&oHU*?6z zcP<7*D&8wnPe>AnEZ^uCq1q8dS{0%*1<@p1%Ji7OnBHQP`?|vGJQDg^fZF6za;da& zhQEAvZJi>%U$Pi#`tvF4t@C8_>&WtatnJPH1kne23J?#?<4-i`0NzSNvQcfCEYLx^ ztT1;h&_TKEFvkb87y5a}_#)4&(*%yi$fyI`-a)r z7KArsiP(yUyRyG{cjiW&lNCK1J4J&0_r5D7D{@xMtZ-b}i3Ck8Z;Ij+or{K-MRU5$ zF$!Yw%$z7bYI;;rL550e`NO8!ojE6Lrl{mZYyqR7u)d77T7QQ%C1%!~+ro(%Zh1Cx%?+ulZ}@0!dATn78*DljJuZJ)Tyk1e+JtME^$X&8XIot=B?-m{c3c4b1^A# zZTb@|cyx>b%@x>^pst=KBU61AEid6BBTPw-TD+C6Myh$%#w_^POQ2pVZmCumMEbQn^6_I^ai$~{7G9}z$1ogp@+ci z@k4R}OEi2&j4A3u@_XS$M>MA zVu%vseWZnO2r!nck-WhECj~foU^0%$pJcQR%J!JknE0kiT(qngxze|s3Cqb86)mNf zh6+n2jtzrXS>=3H=<}lKq7C;HrYCVtS%Fr@`wN(-u6xCbwp$8jtPOQ(y-C_c1+BK< zXbv68(b9A$mt41iP!H4e16v;eDy|^0V1m6*wqSy?8sOoOK@RYA2qo8Gsl9eF&a1W} zUZUeZk@yb)_=HcWuj6|7#A8yqBRIbUT^S}?8$wNdu^f|F#``Yg z-i7HBLgxq7KtM|jq?LRD&*AqLE^l+KbW{jTG5bfINl7E4nRC}@UEZXfe^i%y^dUL9 zfjj#P1Iad_H*asdl)cXb(z+nJz!v3Fkv{V@j%ZDoOyuro2O#x!X&O@e3gnM&C)PMR zYmJNO9U`x3yYKmk0?pO*yRZ&AF=+^rq(}27buSPE@XH_J(DBd}0gvfuxq+gNG zDoAcK>EbDTiFA^MKk{aCRl;D~gwNL`Tks`jJY~s>EhJO#*Y|xaTHaS#e)Nf6#1LAf z&fc6KEHqx6+yV6>0{ftyzc4Fb^`>U`CX39CNVzm-;~jAruqN@g7Hd1L>AwE>Pw4mt zD|^nSJobDI>11DFQv81&bR8YPa5VoriTc~~Ti^cQDwgS#1r>nB71|x}A4;ZBl5Z5; z2Q9dXQzVG+@^4g6h4b8A^cWmfxB>P;H3X%>YvCr26=llRyT%8ywcpOOuoE?3waD$} z4j~U(An1DP7~kwVo0i>WA+y5c_e&6F;-}n1gwc3W#*F^3! z8xa{2#y?4_P267*Cy&&x1x?bbeTBR!g+RTFHdE$z!k>{XI8{BbtK2@lJOuBvC`D1T z`(^tjjM2ZWyk&CRfUi$)uB;ag{z-j72FF>~UMF0=*Id2-E>n*JeYbru`Uc0q5l5_9 z;M73OhmC-TZrp(6^lAOvwI2>L@Z})ngD<>1{kaafP2;uX{u+cMOnN<8*lz6(LgVM` z^_aCk;I`(Rtibqmora!{QU=ayD@AP+hKzH_$cYSBkynq;M-@aUC}F4&SDu+J%@sMX zMO8$gvp8r>ve0B0N@6hCuhFB*M4L36!343^lts9Q8~jw{)!so4bd{7EgYD-KNv=I+ ztZe8ZuPGTv$yg*|=q5Rb*4vP!>xC5xjAkq@mmnRk#|%oVn0QszWQI)_M4zOsb(KTz z@HLWT#W0poWj!3%W~8{VKT@fvBwD~Q(l>6N-a=&?DwBM+r<$Ikk(kK{5-PPiC?WqM zB5Pc5-Y-GTkwc$G53zH>y>8Qprdy&KDXtC$kzki3dj~@jkfbi+XzW2QS8~ycD!@7U zw^jYz41*id)yuBm$j5|nn294phRP1h7c*74dW7^a04mm88a7spuNqC@Q#?hIUR^*4 z-+M%Ytb8})vkqT$v*-P?EeZJ-1S#D<;VS}}ezSBw6!mtl9*gM_f3|VvF-{Lp=0YVAQ|F6*tT)md^ z?A)PUzKBF2!F-F0TNqgePlTxj2P0U*is)gXX>Um82#;j?Ua!{=! zj>fzSUl}!!b5=o^w!VeEfqEcmaP1h}s$nj|HZQURTb+kl_v*2YeCjFa7wQUm3ux`3 z<-Y#`_WENxp!5?!d9^ShLhHqeT^9lkL%8|*lY8UFHs1lJ zhs*Ig?|h_>N4eK5yGjJ_9d+FP!W@FP=!F>UZ+-BNG^T(uaR4tBueI6v?5Y4h2k2ob zypfrAAU*rUDJw`OduL*&Hw+7Sa@3v58*9+fssh(+CFgWyhZH|A2%gi#c|INaF3PP> zgs7M3#jM3ARm3xhf>*fMO|yz6#<19>;>-7`okg5$igFzxR#HT5(E)Ps&0a+-qw<&e zN6Pcd6{5DnTXSQNspGOjpW+sP)2#)9%#n%G;yuTUFaGIA&<6nRXz$|l zkC)GqY(9z|J>}6}cq{`9EFO3)o+7MNK#C2c=+mlD83|Sui1Sn=K_xdBmJ#W_-5&xE zeU_y3F6pl%&Vp=ksq;NS2A(J`54YixJS&{&OmkP1FG@tge$0b*%sdJ?H8~i*l`yfD zAc~bJnUyoSg@eMvQ9;mzdedZ^x-`LbC-{N`qJNz%WlW;Q3~7*<99&(kg7SnS3B zwc-=#zsI^Bl~to*Et;tlxT(6k+O27LC8fo%xmmT6MxKp%L9?zo zv>Tzi`}(biuG0HDa~#l^XiWI-_cZ;~^R)fc<4PyT`*dmqv;yVJGBfCjxp_4D!d|v( z%g60TXLMy?M;G`+;ns`4+!o7*FK^e2PYHi}90&`zIS}v~iw(V@|HU`8OAHIoz>eF8 z;;fxT*koknvbR1o8RK%Hs^C#V+Fe0dmHjfwJ z;l`D-+!MESV^4;4Eq-+}Vg}4_fSIPRl#)v1xoiH6Oi=Ge$}|&#l3SlkI2NA}51m#v z7MBZ6{HyGin6d%^Ytts~nxMpGZP6tmcM7VhiD6DBmzRzeU)Hr7t_E)SS2*JjOWAND zNOtK@TSr}p@TxFaXzI)D;%LhRPR6o$DP+?aufkx0g^n#z?&_!WRTC#BZxzwmxx^Xr zdBVgPvVq$qbyUNcpCy0S(IZ2~mW3$`NI44>0<9_P`cxwU3uHS+xripwmpizZ)I#{O z#dmKLgxDq&iC9jI@3%G}Inm|h>BTKvIZLgkA+G15y)8@vX|J}AE3DIDciW<>qJ~MF zIrsXT+((ejOyPIAc&N)pnm^;W8IdHDHo((aqa!069aQx+BVixRi50apB6|vVJE40@ zci*6W@^(X^eMolk=N4ODzyqcyCn-1@@3>Jif+u#T&QxXIO&HPnDsnJAvzm_$F`&pa zY%ImEjt2r3xsz3gO@iUfLyP+u_o+(zmL$Kb%q3QYP?Zt~TFH=YEF7P;vDaygYRk)< z9eM@diXu}e{VHbvWs2k|F|=H)@|POJK*V{TO3I=#AXk2#3YDPFBf_r58kgEQj!wZ9 zBV66t0l8}KG8Z!Dqnr3OsfV_psogWO@_Ha^N89qrx-rN{;Z7MX?4Y2tjA`k}ktTLB zN|@qaqEnq3a5g_h7+JHburuzcyytzUthXLUMzMA*OP)EG0BQg;`SOLKSM9Sary`WU zQGzC{rDT$Ok9 zUZuaD?*ha4_MH)Yd$W`u18u#GSHGg(xDG!0^*#@4sqB*@bTBzzB4Ie=B7FCDpg#)t zd#y9fu-*}7Dcp36)5YaemF+9bH#iQ=OQbC` zYW^+GMx{4d_&ZME(1Xq7v@}Q;+tw(swqcx?qftQGi73lmv93ah;0hB;(TL^DSmCakNy@%?<-T7> z>qE|uv=UP(*O%a|iH%6e-ULhO7K~-Bxm{cH7WFd&*JR6(8SHm-AXzU_6s)3u596lq zEt5`N)>-6nnhf4QywpdRdwGx)t~wnDPKab15exU>869S-_`Oqb%>Z21+V&0i^%26; zqt7V`QE<&oNXZfEPTwYu(@QLC%GcpVbzB*CgcG4%kSReP1Pq|+rO_ivlu&Jp?KrAv zXoq48u^MK~v1C)w_60GTRy0b4P{U)$o4e(qx7Dz&KgUh z*xedaP%M-hQ*h1347Db>aLgFb*xqFHpFklv-lGh@-p;2;Za9^r_5Av{(P(ME=??!D zynn!M=ce!E4!;er_~6QbL=_#`b}aq0FidEqvP;ud4X=c{;s@=g+Uw_Bis!)|!;TyS zoFvd_j$vcOv8;#RGFp>W;5BuIe00Ggb>RxNp+hitp>x&e(mxSJ5QptS!R}IEd+16h z7#WKM&a@=XR;=Za9ANYN)awPm8_KDU(LLH1zZ?GYI9!z)i&eRe&uV3g!>Y&cc z-wbKp3_j~XJ9U>ewc5@|CT>pAxH_I?Zvc@X-cJ9PHRY-E3qTkxnGPy@tk$t@9hWYZ zPL(xPYi}aE=qQ<<%AUTnJHZ{X#p=kV;21XcuI0c!dYSq=Gu$jUX-;3^h{Vk#<8Ih< zjJY^si4(1TS_BE9W)zO~uB=*|o;jp=i%OQj4d{U?hL}CZ1SH=+i&%-CfAr+|u1Y}k zMhohSY|T|ZrW;Sn-pqeO;H`#|x&+!4X={YxGSCe@l6}EnEzVOCU;eC9hDRgd}N)AkJLa}odzcj&9(uQ4UB>X;MDEvVULLR;c>s_UdR84W7j=-mC zO#Ts&*F)u%n2LAX8>VJ?Wpzm)i;=n%QsYd423H6M?nJO#H}xvn*k-H|2a7*T)A4lg zN>2;0nIiU|)~_Q;WmEK zVZ&6tA7v-=2qs-p3%xiO7CPbuw1-9=eL^S_IN6(F_=(LG|F!1L_fD&dBUK;N*OEl? z*TMFGoU*&v*jd<_(5c$Ue_j3`g7JSP7k^uP>)Y;I$?^iSgY<~Fr51{UdGbAd!0fx| zF$5%GLCO?@;v(&xBTb^=cxw`$!%*R%2)hblGP@vbUTIjfS20Kbp1nMO&<~UJ107&` zGCX1xNZB|!4%4%9(qaxw@luA^*F<+%RTeuS7-}RijaQ?Z5N2In@tOXvYBmEB;$#zT zuR`6Xa+qzwL+ z)46xAVJ#eiC={~RJBT&&F(a;}vSPQh@^3f##?lsJ!qY~^bUIOYz6L~7#q~6HYjFsP zLUxm5Fj1`z0~y$Gpp2~)6RBhe?l;l$va84DFsr>_b6zZ-_kXDh^4;SoN?A=FUtRR} zRk7xO(&LQ(*~a;{_|~`Gw~`enB?tLYd6bN-jJ#H!Jm*EK^((5WMCJnI$%&LZ@DF~+ zFf$P*LVqOF3fu4fcvjfYmhb;Ti#_H&&2z%rc8y>A3yAXf)L?%=qylw^`hWvG6-O1L zabgYgF!Z3V(kNc8822eOUsA-I#8h&)Q`WPq0SWP5>mZCGnE*k7@MtLP%SyLo2T?pQ z5}pKUqEU#Zg?Y&(YoOBVYJfonMKb$!s2Wkvp&C!b6svQerwu^r0wEyACKDJ|SBL^> z)pHY5ApX2=IP#5o%t?%d#vp2`qGmbz4}FrFddN(n zVn6!UEcu@ivrFotQT<-nf9`FEv56|gJEEJnGbrjWSm~q8qr~aOxOov!3A&b@X+u+f zjr97zNo{trFrv8M2LN7!oS@baj^$aSP7~s-@sGiB|Cw8TKjIHXcRl_eU+Z9qKtL@2 z_dlxtJm7DGZ+)A6t6S~O5oa0gqlU(!_<@t%#d;qsfPv7SWU?U`h7WRj0cjw8*LadB{lpTvGmV6+CTVNtMH z7U`-dV39wGgBGLZs;aBQ*St`ij7c$(rLnl|D8sTadr5Uu+>T6|pln*?72@h~U<8jh z7-#eu!sZEjh?A?KiB=O*4L zVKE?$&Kkpp{XIeU>7U~^LXWynvn+D9J;JKN;j5-Cs}HC?tA}D?8$!fPmyQ~_HaNv% ztCp6YE-&W*Oj?FuOQo+>Sq$wTGtZu|EMhW5YtRTWPFwI+qC0JnS`%5)m{aH?!Qn2$ zPWL3{*PrxBK?}iJyglHj@F>xwrj!q|4ixryW1j^E}{psHQ7S~Jk)l} z5EO@onLYMl6V5Blez(UP7-l%q&^!IQ0vAZT)lZenLi(#Ys z9CUo=`S$k4mRwc)d+xr#VAftsiUBOP#HkkY$f8ld__^$7MP+r5`D@S{wCyM!bckIN zedk2QhG!fwtmGzr8%seY2zvf`Ds)eXKnM>!Z-=F^VR%4|TzZCpxT*uCy6^B@>lbQA z@S>(7`hs(|?6oeL!noZ)O*zqqPC;i)aQiA_PsdsE6_wlX2ij%`F|<$g4y2k7)t)PK z&L|96l92$D(cf|GWIUD5#g<~Mbfe%k4TYsuPt8u{t$j<6`pGkiKpkk^A*ua`h5$9Y z6hfC|mhxSduAg3>I{i3qN&{NZ+ap|u`fCLS>nc{gqxh&@k$jZu1G%X08p6*Qq1~Eg zgDJ(d5tb@9YVR_qADuzI(0XWIA5~Qow}Z3YlRh@|M6U(5oGF&o zK2)6$!v_~2tMtR2pyI8!JtP^_FxNKxZtCQp`0#!R`=zl<#Wz*MAshcNqU{g87c*&m zF!AzN9JW=j&{^`Z%GCasJ-dk&OvQA0T+Z5i1>^l^J0Tc#4hzQV@3mHmdey!-CNw=v zc-;~(HVSC9LG_oK`X|W~vxgQWqV!vXEd|hX`x;dPxT(8g3)#9~bl3Q1l_=rNPLE4* zqSBm+iu*%$^1oGm#qzq#+*_dUg@MLhPWTB{H73LqEBZaO}vs zO|bpR8305s{Py5>Y$1d-z@zknxJ6NG_oD2f@NVBGepN+`@f!ATerx7QVh9^#2y(C6EubSeX?gSN)&>K1TF zH`u5TM$rCP3<+iT$fe9NW9HQ})lsGl#BZA;v1ONz!S4}8psFB|nmH**%>6=u6vr26 zk1n_-Ij0F4_Yo|{7?n5&n-;alzv>Uf42)o3xX&&&aza9J+DRMW*o;Lu6TGF{M;rr$ zn*rv$WF2XumtYYNS}o>M}~8neRPk<1xG8SH!yX)!vT`? z?4c&64*lTrFu&08X%hbja?Kk|`y4?w0GXK?c^s;2zyUKOJfaRNdb=)^?>03(m!$w*5Ev_lkD{KodNVhL>&Q;h1eD_i&d!#!b!V5#m%3> zn{`A))JTGUEt7GH8=YD6a0VFj0`L%H>F}=>TVm&$DRLX=5WWnHr{- zH}Du}3l0ok(2osULJ9R-cqhcg9Ajh4*>zIxhVS_}vFBa@C0H1xQ10gk`9Zb~O|oPG zf~VQ>Rl4I9kE8GV`#m^6Ad+DyPb8n9n5dcvMF>$7Orw2fA}&!tEndw&d#{NKH*i&I zz#eYWtHD0jpGRLDm3r}^?JU`?n?kTL^5vyC_?=s5t_3%i9tU<$WstdRBWaOU@$2mg zRS|kvbT}n$OIDYl#%b5{Bnk9tMhQFQ0!K2ed&`i?I66&Pl@nIF)u3&9=^9UXHl6Z< zYc}gabdU0SiAl}keaKZE1Nq8FQx)H? zMzV=*$@BEu36qzUstSaDL>eu)OfJI>PJf|u_mz|rOw(iob*Tsabq&LC8x5IK>J_-& zH@@>(2{&A!w8#V41lab^i(G^Iw%x7cs~Wqp=zk*)xOZ)YgMzqf_Lpqys5w0*$+%}zQCGBXF_%NLtGciI9Hj=Ou$VFJASr5| zP2mIuR8O&y*V5;_Kp*8BPcJ-STi(zFNJ?=mqzMM?6Fqbad$5fUYaQ->L2(5oE5#3D z{ugQQ99>z^Z;N)vwr$%^$F`jv8y(v_wr$(CI!VX2laB3l_e;)w_kFnco_F4PGh^ky zHTM`bs#ewfVOFhQI@?J3l?+-j?rIIL)+^@;CsPP*cE%D90%cKCRY1!4%?J$t5k-e{ zI0HVsHezHkV0DD~udCohpMDGSLqMc` zJY4_vRq+4#bpEph{N(t=C*LQM73)7FAR6EQkbpPPaDD#yMxe|{(B;Y@aS;uj{Y~Qa zpAs+ck^Ydv+-R(V0-Ip79auO?-;9hJ}Zp3g-wQ zBp-CIiRwDLSMGqUuaZjtX-j^p%!Pg_XtYt2{GkB_Sj9UEFt%ir8IG2!+bl$zQ*>!b z-Oqw=qFv~>e~Ggvq`v0l)g4r7pCL>$VmE|b=#ty3K?y#yJHFC!kVr%k58nU1@k^tr zY-ZnZle_9d)}J~T_N=WUK2Fr0?I2lG=enP~<^Tvsp+cCt-@-f!lLm-(f{X@$iw%1R%6N_Rlf==jeLBz`2 zc;~~qU1xvASo?*~1`_}n6GxcfP_NVO)Bbt}_fkZ;-!SShGpDqCNc`kA0AI9chvJAH z$|Jo2K>D~*F?%OaSA>@QT~tB>Zul`<+LI(+fEizgJP{S>Y3g0Ei4e3n^C1FD$dkDU z!8AxZ4m5nmf3`MFzu^-|p~fbpU}t@WlTXwv5YHX0&y%%1zdQs@U|C0((iy5>h+wcY zNzK<@{XKYiMl>^SdrH_G+`8_G^s*=q}{FNBN>Zo{)O0AlO&t|hfA zC^8(xB$jil$@YMGpd#O5)N&rZ9$)0RP1$TZeOD(kO$FKb=s_C#4)!xOzZWWVPl{)e ziUYf|;|WULNBD@i+VRIxIYgOpL{(yrt*o)#P&<>+3Z?yJmAT249{{lzP>swHq-=%B zoXIi=Ds?>YZ@Y_>XVoL;hdZqf`j;;p|BZF^kNxG7;S-;1pP1CJc19gV|1;9kHRlOG z1QDT}nj!IRWrc+Ti3Asg^jx%`0}WTD6tP3Q`XFSnrlFH%rb~s&GC^RT(srK1hs*~z z;fMeFx3!Wc%gmnn#{+}uliqg=g}+btQ#E8dEvBmizm;F+y2Vp zkMPd!Z&yb0NJ33SUVuZ%byy@B#6Wa0DufIICkO$S2EyXIK`9*Ak6rb}hRfxLk!~OL z*HZ8-jO_|5;le)Nr9D}-}C^)9XMm%E)Fzlf|lMxD#?^xE{&3j+5lHgox#nbVQn&<8h z7Lo|WGG6b3n7R!|bZpsWY?0L@Nq?lMZMiqt&9E=C`*Xg#V{@o;#2Zx|+}+xEDE##!QA}NMmS`?8ZZKoAp|0(< z&xjquGW{NX3}nD9zrId0&Dmqh=a)L(IiVI^D#eL$0RkjUH&#}oI`6LsjnkbkOjgvU z>H>cR7|A8I9j_+T5&((;4^15RO0rJY*91oi67-kH)Pq-)72QEQ+zE;f$WWtYkf2y74o1PfHhWatkj zv*GgcMl5W_Tvl7uGS6N!f_Z02iGhP~XQfKaX^RhoC1ywto(i;9BgB|oe;eU0BKbO@ z3Zv((j5}&dpaAMLnG_D_YV)fvo_6x)wx!%P9H~^6sn-Hs27SxqA6EmQUDHEP?|J~Q zQH1(ue&H0R@2=!ym)2%;IR2<-BW)JUl)d#bwyll-am~eM4sSH;tWOCu{{BVKWThRhh*dNN(FPi|?Z*s{j>yvNy+bSj$9&FgiJ`sR9feWK{VSuiJ2dy# zL==Yo2>(iyl55hhf*98g!PadbHv8|QeG267aJ4Yc?ZLRuA;AWF&BAChSBTKP1GVJu z5VbPT^uCn4PkhFHJ4Sv<*OWa^=3Vv9e&)IcD1RFG?yn4gX;#eeN#-U`|8A%r`H2nE zc_i=)-9YnCMlJNiG(?_EE!>rNG8Nv~M&N5(Iy=e>=jai9VC4$&WEr;Z4FU^x{q#bmM?a1Fc zo$~uVr?#5BFOQQp(!#L(QN^}n8Op1_wd548VY#{_(LDlcJnRO+SIUvY?zF-e*D)kF zWeeLUbTCqd899Qb)a2n5k8AECXwO#Q1a8egYSV!_wBL#-?NlJpONT%kBK{1)J&K3M zKH=jFcowDp^+_vTAp2+lpP|WdDVuuysqzxp#c!uWkuX+QWQLy8L&ber<_x*1{L-76 zSj2tWRf|1%e zcE?s&uBCA#fOoUDOE-8r~oNT!Fqd?Un`+)h3CEvG7Dk}?!jRltQiWF+q*tw!3@@IyQfo`^%Z|u=;VUC#U@f8BvQaMPM1DiXO zUT{wb=smCkdte~+)iz!_2+gQsV$C&*3u-fa%!laLt3vmkZ(rdIz}9w1IjiJ~~3DUsWj)HTDs7hhpc85{!H))WQ9(U$|+Ie+Bgsf$}N0MyRV zH&jE;EW(}xdvI5nLPln(s|d1(GJwt8UDfQNF5F<0j(4VAK1MKdO?NSp7idedEnwD? zlf0!fvQ6-|Lfd2<;=y@wgC$|Pt{jlRH5_En1KBm|LI5LHm8~$d(rv-E{cCvIF^+n= zZ4WFhclPT}CIy0;xcA3M2utz~+K|Zax_(5zCIAu$+5P^d$tk?u#?nwa{K7v-H^xKs ze*0?p8Iw6+cLoOFxjK#8j_U5$8Y>{Qb{-#;CbiP=g>YVTHto~5WNykEFveomg^XaC zUK48sYQrX)kmCJ+l6TqqD#Litpv2DP@UJ=`}$f;||O52R>8{kj1{owjTAS#Y|?&M|3tILKhLL1!um> zG*!RPb!Bu$cY2aVrR5krb4#&n8di0a$PkM`G=|PV-xsgiM>KhhRkW&;PTryROnrO>W zV8glF@M?DPcLqZ$&j$Z`?0<28C|COstU!qWVvPEKUUcw35C_Hds*T=X#Eb|W6hQ~Y2S32fEQ!GgmYr=9;w zyo=zbttT|c3tM;i=viZ&(`hb*P&`V%{9@9IeLK;3Hh{aDQdS{rq^#$)11sUauv=-m z@?n2!J9WJVRsktk^oYA&{~KoTO6+Dr-f}aj{hdyI^KUYzt_72YS}QpghgA#d7QC0- zuFt_FL$!%@&2T6DdcxYqta}{XNo{-a{@M zqEZqtmiXAecxrY#V&H8~+XCo<+K=>@ZN?kSQh9CfeC~ub1w_~kEOwyzsiiz!jebaT zM>Hrad7!A}I44tD-a0a!USh1S-#=g@YkzHtzA_xy!a_Foiz-vX6Jhk*Jq0Ek*@Vn)^`r%Xj>() zTEWJ5*XxSzkP0F@&wSoEFjo~-=6?T{LJQ|?;;Q+WYA7G7=Ra?X`oEKw|2lX7sWJ4Q z#p@^ACq9`!ksZwsJHUhl+`g;S=H=q%<-*k)mP5)y1AA%==9nw_6jAJue*S{evM$bd zF+pCJJ3cwJZ=iiBQo&ThvSA8pwkqu^A!M@Chf3)fT}|s*$@;qOfPr7m^8%^*#mFPU za;B{Pz$<8tI+` zuYQnb{WJZo9r?&*p?^Xp0DISza049Pp#QqM^B)@{@IDsg%|~_gf8Id*|2jfquBLX* z|5)yyjGy>q|3tIugx&l{&T*g15fzR)AFa$?rO#1#vmv-bxJi{r46R&^Y{+Ua21O&r zb~Q1~7sgMByh57p`OBYBct%Ha6tRLyn9#|O{Nt0O8JmHh-yaY|bbW9!It|5v-z-{) zN$wW;cKxPIhX4{fHmq?*AW4GP0n18lfn-r8@ia?3vrX$>)7ee%8~^S@P?#6Xp;F3F z`91JAnPhM(JjzAOoBfYX1YxOX0>pwtsnya2+gzC`MQi+P;wNDOm+tJTfNS#XgbzWB2M(1V9-Ap65lBP_&EVZe z;%tGs#t-_*!9bPVkzi@8%|RLIG-ynW3^>E*>+QBl6*sxl zrUZUs(A@k6TtsDqVx-DQ^IMGt9u9`QiXl>5jH%T+$E^XF!N#s6=AXGokpOE9%>KHZ zP;y{kVVU3Um6$_jPa=vB8-!H^M}t)a_Z-D=n6jtq-9a~b?YEB8oIVHKQL45{<1`5z zPo+WGgl(xm->?OtUn7n3AaH;(ZEzMc&44xKXt)MUN7IcF((0**OUg7t%3+zAD+A0X z3F!SmI1NWzm^KF-8~Lw6C0+7bFkK=}74USevwUB9UvXpXaV}$&DI8!qMHmr#{y(qU z|Cp1i9uEK1()h{xiO*m7M0L`-6{->%@Nf1$nYfOzj*gdr=DaHJLzQjSl5<2rT#{Ls z=P?_?MUn{$MWR3AL3e?&;zy4K2=WIQRjrbG_!8( zQTh;f-+4{;X!elc*=D_M?}Y|*W$@+ZZtqR2){B+_&-xSFGxdpzixtm7NBYety4FoA z&z>#YrmU3eR$h9k%4m4$U!=A?v(A}e%Iq<}&g*5-IH-F?y93TR!VC^!E1EL1G zLZJ~7@k+R4jWzS1roSCl>vbN{(*5>gR3(wErH>mzdJ_Io&^U`oNaee{8+`FMWOTw)45%%xz| z0jXWm0qWhtfze>EV6Tu^*wPRMs3+(rSj6j}(ivIBQUR?CJG^UeUKy95J|Y4np$ct5 z(@Zzuh}X&D+DZLW`$;wd`dYdLdX#?u_8rFSC$y`L$_-fF;9D?v3?u(W$+9{E(8r6V5cP63dXw%BjF?nXEEU%Susti~!>g9*s z?!&*mkk7wlacGrwx$xE!=o>iisxHgl6_J#1fv zGV>5m`Lg4X3)s0XDx)4UWj_NTV`N$_7c**YgnO;jT?boe(MtfEV3Lbq!V$csFWsa< z(aXoSi^je+2WlNYt>?q! zq9d#WLfG6wFJiHt3x!K4&RQXD!At4y)0KF~g`}D{(Ogz90%lw_I?*j3g7uoT$?Rpn~HD;o1kglCWKl9HjhVkjClg(T{w5gxixe)C% z(hCAc6*uZQcMJ%deg|guY@9ubt5f}Cs6YtT)>WUmZCa~wt=%Tk_VVhxs(@J-ex%Fn zld4Ee<*5uixbYAWmS5U3pxA>P}Z(R$1rGz z4{yN-9`n+HahwC#Do@Ri>bJ#T&%}{7#x#cFU{Q&inT}e7WRIc|goqV7-@Ie-qZIvN zXxHYX({AH`@EAV4E-4yj;&IR`XN*Qfh*7|`lh~EJh}LUc=!DagE>QZ#ct<+T08KrA ze3(nEs*6%IqEb|59HiCq6TG41GZ={#0IG#NHRoX(#p?idGd|q(j6!4D>&9NZCayQX z&T(SRkjE@y0r6HaL!flz3+`yh8h7V4F&v!h#1Ux?(K3yDSm*&euFd-v=q{=_`Vy@L``W%+iUOavoVQ~U|{OMm7RV7ei+VZSkW zpY98#uz!4#D^`ujSC%{MdxK#GKGc=ZsdkjZB?F8gYnat2=<~8@CKOA`M-+Y8F?8UQ zs}*@NzyN#Rx`q{wB-_QphlaGqUSUqQdnCFx6}m4uvReTn#(RxzbE+PJUhGrsi|)!+ zfo&Hs*z!q;sj%!)WwyfEL^Ow$AmXtZHU%LRswzY3l+vupuB!73&MK3Nta9u!=owZm zaL1BPDDZ_5V1_k{!@|jB$|A|>Ryp6XPfb)NM>~Pqh7~Fc!XnvL6=EQrn)J*I$|}i` zU=s@ivl6O-Pv{sF^|IS3YSDlJ4-%iLFnb+eJY>$?(8t0yd#&+cTQduZS&T7>DGXla zWesF>j7fYcIX1VUW=h6*{~>n9_yXeFT@09cqtOc5xfsK~V-+j~YG4@{Tul^pohuY` zZ2djbjI^GQ$wCM1hFa!EGK_JE$`32MN6#g#U5*g$v5SPd7zfr+1F=M}!RD4lG+HaM zFBqL!0@1SK>7qUxSgvEPxB8wxGpWVMn)t;{f#Xi#cxG1+?x_7{x<^2W(gU{$5i&R(rBB|6cq z65aIYoS4h3#_GJ;I>?)+@WiLW9*ZCf;|tM)pd%$9epx(v1Ub9?SbDMlZlJmBsG*XC zXzT+R0rfteG1y>ha8qzcS*GeCp=-8HbRK*@%jhG#hu@^ znN#-V94We+j=QsmlxPlNO&#;?8#V^vzPh;B0Bk`*01Au^Chp?N1< zh!)k;oAN^LD+Z6H$yC7Q&TX@i(XoMK+~$SDq1&*HV%P5DEY+r|c3}bwanpzS9WdNT z&xn5dV6pa5VIsV+lCUrlQeYsxqfHJ)*~YR;#gi~1bcc{4=lRdXB>gDt?!)Kp(@~Vw?}P2HjmZ{wUnccPv9 zw-e<GFpAsAE1t|YZ>O^~JqkzgX291foPlt;rwj?_P%5+S9m;3Tc^ zehsKzrfo~@JM9KCm^ishQ?i(}IUsK8PSx2L=j&LSJbH5$-@$_fR^TGG@jifuZL;xEwUDHqEr*$^VwnElwIsFcg7gl9U^yTGI+<8 zbvr-JJKw=N-{bPZ+TXBsO=e#)CkcFuRKBioZYsBVrjp9c2yyM9X1=TIqmuDDGRVOXl49*Or>~(umn8oRyG>)3dV=PBMM8i z^tLr@b9Wc#Fb9Dk+7=pe>Ol6J=C}-PjG9>c>bLj^|N5mAkFFX%{uxT_5 zvSGio{@f+c=aM`}L=7$>bFhDP6}LoLiG=nF2WAtjJAhRwV(!iJ9ADq02lr>0z%h^p zO@x{{KnoON>t?714Vb{ykOfr&O&zp!gC-KSeSKLbu84xHf%Wg`Qh;Ofpx-2bT6~C< z=_j(Iw9KD)%cze)z@#I(K>}4jj*F@cSznoC! z5Q#HbAIE~6V=KyDd>TMRE%n*RT(*0Gtohw-_KF@y+@!tvl#cr440kslf6j91X_vm; z!Ci#T77;yb*X84G({0o{T)qa|!Ci)CxnQn*2Vb}BrN0`OL3KHda5ZQD5w<@VOOsX5jC&1%1_GL&WCnvEa5yoXY{b&Cx21 z0koD@mh{b$q3^sJoBhgr3`tBb9W!IR?UCW91SR`k>Ar5vi(3)~S0(gU<^x{-;n&1# z-x*buIAdK974#YRkCaF*kEcf4j0GQW)CK%0ukmsQ&fLYlj`2)TmWQvqF(8x_`cfrL z|YV}ekE_br!(o!#&yPWEzr{RmE;0*j z?5(S`!ir{05j(&5K4y;7TSB~>GEs9vn1qic5@R~q9PBSsr~1S!GLqUE>~L z=7SvK9&T;WU+$hvYmkp@AoJm8*h_QSMq|mPM@u9&36JwK5#>EYjgU3Qi^!&k@a73T z6@Sbm`WtdS>}v9d@L!`p1_&HX?H|g3>?5M}pZgd5Z=*j_CN`!j&H!f@ClL!%V{6mz z{~RUzHYMR>rFS};@5bq^*y&F0ABVXVvCW1T z2sZGpP=edy^}C)oEIhdNZ^m^3ALxd88b-J{*0y^JgN)w*S@8+_zYdvq>AUK$k75dz zkET_*|L;QWe;u-azoqk&_!FN$@`+(JgAcy~w7;8iCV<9#q`hzt(d;8D(4doXPn{uqdVPcY0h@1QfN8OYk$yfuu0fJ=CYC=N8bVsVXgAZT= z1KuF8nzDIe31l)bDQZ!MVl13Rs#^UOfthfQvvq-Ee1k^A53S#U=4tRb*4i=gs6D%2 zIcJd@uJet2Ik4LLKkV4-QFUt8buob!;KLA{xek6Q0Lg6^(V!3a=n1D3gi25epg+=e<9$!f9Cy9T}hYh&_=ewW%) z&{>&KGLFHCoKVTKly$7%%JtZcQE)xLj9I2L!drIL>~hI7Wx0psC27qo4%5T8I)?7v z3#O{~>%sFZp?g;WK%daO3w8xK(7h{mS@{&N6$g*qi~7Gs=U;DI*Y+owopMzM?85?+ zNv$k^@j+P2xB{G~P57_1@PqCp=1k7JI#cQ^pdw!}$%8l#xkOnrQ6j)Oj&n>j$k+Gd zdvKw)Ot3C2FWDzr4(sNjYFK_gozb$#12U3M$I|&+N`2AZD$RwL;bLFeJfQN#9)hn< zvw$9K^R%)vfL%qinNxZ0!5fi1{`uTjUTLpV0GL`2>42`SvTt@AwwEQD>`nEWvE8^i zs=A`HrESK--a)!Y`?_rGEBEVqo$FhbqgDp$~(HwE?L#Df; z8}SS2q;OyWmsopVST>~Et3f=uzX{^`$u2egF18-?na@e3SPA7Mo|u1L!2 zQ4h`4mty_KkP0uxT9cGsbUyz{pl{v#{QLcmV?p@+{m%LQ_%X7Unu92Y_%&NJn&Zo_ zZJ23!DsVW|Y|3=81TFsv6ygc8?m+5|KJp~!ZmA|=*vbgVrfq^<1e*JMJJyWX0DLlT0xMkvgY;h` zH_E&*x|)I>6UIO`p5&+lBbZJ~U1r)Q@an7C3@rKv* zrGekyM_zw@Z*&n{1~Kla2x8R1uTf*}lt6K2bK^K>20B#XjHrEG<)LdOJQ@rW3nS|NW7A(KL_%X}C3cADYNNCG(D7Om zJ^AY>87!#nCwHhKq$ms~^j^%>DQeYur82;}`$lg#1DSIc{m(S$!<>kOx*d$zl3JCX0F0DAQPnZ zfL*`gA7=L4>6gVg2acDnCXi*>a$P(m#fC-#>$)686xYlYYu(<9;%tPrZzbBQ8`cdoLc2t^E!bo0jrcuy}n=5T&`>_UV^b+HJ5~{ zu{QiQrz%!5d}oo&|LmyL#YWno-|rR$4ssRb;p4-2#_e%$Pz{xxqG`fGr|K&jAR#TI zJMXE1M@o)SQ8Cq#?E?czUQLtG((2HXZt6jBQ{W^5A|nDhuS)_me|;qPS5iWpbtH3l zRKRn0ov;n4+JYE8tWQm80jV0n1y&3tl$a^blct0xtjgMq zqEhD4f0$K0IDa3Ca^B);Y=U5>ESN4aadS}M?WvF+hf0(L z1}|-vI`st?Ru1SWV&oHy$#L#88_SYDl7)$8gW%j`x8@!zR<`lcHo&M|$$lp`&q zw|=Vkw?ivA@3Q+ck-s>{H9m)2748xYnX7V+hLv6jOE%RT9;*3HLED;7;|%b}&TzE? ze}D#4jXUwr;bagHt=+*EREAYM=>3RH%ENSk0|>CQE(zgLX0pX7S3ciZTwKS+s$3bT z9}phB!|aC~jr>JZp?N^Mf%r+_^NyN95hEb*I10mTaxOxv(ZX`JL}L|syeV-eb>2_i z6}8Mi1a=XHLj+TfNg0NXvdP=`2ibAjtA}zirvuRxotLXby?)-$>JNJ7Qr&uMi~ACW z_S3V1g65OwQg_qkT`tJkI7UGu8B45??jX7a!K^EWKU#(8F=&A>&#;N`dt)SIQm<(e z)v+oGUiTYl2g>*ROE<2CoVW+k=gTKi`^YL1Ap%Av&#)y3o8r13r`SdHL->rIXj9i{ zOeV>~71G4$ib!*o(f|cd*xv!8UtCzGSBbWcXoM8cE3a+Pa6M{aE(jY3GZ92c0pJ^2 zhz-!k4gyfj!dPF)8k?-+)LY>9Qsoc=p-zPRv_|4aJ@~I39&`zBSibJX&Wws|I7W%Z+-FdhAbo26v zumduWB_d0LC(304Wj7e64oFV)Wz92in;ExRg<~)z;7A%M~dbtuBNZuQ>xD_xf6iCmlRJ zU1njJEiT1fYMW_=g6zlBMx-cUSj<2Futw~jx_MbPw;Yw8h`Xn++NxMhepE!GKsF6t z&K!4YAcYojIUYw%>G$hP!XY68yT_O*WP4!iL@Fk(9@=8{_R_uw{aL&Dw-WR{f*xO= zj~2%pwEtF?fHJcgn9(EnxJI zJv3!^P;!nIO$mDX1~Jw662Ia03?Uk*-z0B-1@v3|dH0qXDW;_`VXhT7kR z9%H@pA#U6CyIq5j>dWqQek8LQ>sznxu0hcm8y92UpX(!X$z~$6A}V1rB;;cV34LUR z48|Rgok`8p?u4hcTkjJXrsH3p9ja2ap{alG{VY2rtcJQvF1FqhKwSdlWpOFKIy$(NXe(>~ArMH9zB2&)0X~M2> zS||q%ejZh2QJJzP^NYofPW<}r0MO#tWe|-qbHe_PNvh63gC!sCtWP<8Y07W?d{Z?Zr4;(H^N% z^xtjnXSeufzIxn1L~b2cLMBBYT#MYM&Atxp?p+LXUmdFNv&a1_d@=No16W6m@iaJh zJ)O}RMiHIyq}j;LkUn^{kM8=BOwHk4;UgF$#gK}}?#n%w73wi5_TU{Dy3IBZB;Sul zb8`KbXjjYRQT_)HC@kJa+0pa~?s|spN;-`jJ(TzCVEwy~tBT$hDmo8izGo(HA39kM zVm7UwSDD6O6O`Kxk{cP+|FTb-;`ZSvyU2xe9mjgi^8Icml$I5bb1sx7f;RrQaPcO{ zjACJHs3_4*uE!uO??TPCAvD|anQY1mt1l0@xl$+unf(5%gd`1#4iZSuI?EIlg!2fH z9Hzzb1!}PKg%QKQc|3CwC}00LVw6UBJH|oSK~?Q)wkLrPb!ht&tsXao%U`k!;49e0 zd@cqiVl7|eDB}=}ew0#^vA;(cw*${;^p~$8e5(P__7%_3!0kOZoUOfG+pfahC$7pp zJ@B9hwk{xUTg@)TR-plC=5&#HE=X1P1IuOEZg@fu^~~7@Q(VqmIaY<(4-k`=KK{C! zX*Fun>aIk~h^(s_?sbDvb>c8T_S=4113~=8l+F$FDq!W-j{>T+D&nqJ_WDwc2a^0W zoK6R;`vqq3?&ecHue=mfty4V>+SCiEc57qWiq=CpC{q0QwEW8bEbrkL@LJVv?!69( z-_k2f%Y@Xva%SRKs{LM^MA6>G*>zAl?R3UNEzA;Z83WpAmf(<9)N*QIzg60D|FoYL z`aQFqACSsb(pQClr_f4br7p~pnmgzc%p!y{pJU@rq#8?S6PYRsVsmRi8#50fJ5*sK z$S?Jq>y4+GJWg!QCxe8skVL?kN!!r-M)x9+QDR@%{)N4rRQ(%Y`o^rT=tMgR3V0KR z8yk9FywW;bz&h-&JQvEZmsEzZ^sVxVFSZ+6eJ!|6BA_vIT%y<@#$fvpTfvGmydy!gy#!U4&_jVk`?)d7VW|vtgRm9Tq00G85C@X zpP0)Pm6x_&p|)>CdSzZz`C$YcDGp9(t62iU`Ob{2kq>>Y)N-eNf)Zf@W@RjEa zVO%n(HrKfcvRkSSIkCO|5%c7;X})-1{y?H1yL>T zZr=}C)qi7eD-H895YnmZxT2X#7^I&!_B$*OdsFG}vc4W99~y-e-1uEOBBBRMs5`h7 zP?O)A_eRq)zc>AhAoXxXPjnh(Eojae9{r{-8N&3W_ivlf&88eo$;3?P0iNhP(wc>L zbki=5maYV+e(Bo|yz&eA+zqGH@K(X#D@XGVFWO(ZJ^OIg0xDKnWejSXM>_Q8c)klt z{B+9R%_3wB43j^w#d`*1%w-e`)nr$Q$Opsm^zqB|UN9Cugxy8%gkFfe_CNNL^nRHb z$+RNmfNcxm%_BO-7+oaqJpZ%x+~;BIYbJj1XSJx;N68NJ|0dSv;%sTdC}d}E=V5E_ z;-q5#5rT9U`uC>G&zC>(Kg&*&6ShB^E|EriVQp*iG|HjM(ERfJmoeImklC={mynpF z1^mfgTbf|`ZJtgybD;mm^*rY>4qF&`KgP05JxbeZGu`Z(J(`&d+!-G)U)c+OLA&k? z4gp7XGt3Mlwk9$svL}fNA;W0apEJ^em52-sKnHcho(s6v)89t*-SNC#d{lvW%pz91 zHOXsJ_39#scz#`zb}ZJUVwpI z-ud>d3Mv>~N53(cfpMn2(dq!(sz6$-C{Or(kFjAPNBo}aBu92M00o|YRwLfCH$oG7kSKUbdlT+f6;Y|Tx`A|>+GG; zgKE_1qgz75ApsJOjaW?^(h`zZ1mWD8eR1A9IV+ApTUWz!UD&~w+_3nH$9)+7HdV~j z(>)7Bo;Ld1S>%tFOh2E%p|)9J zQ1cO9fr9z4P5eL3TUUUk4Zz68RMGysv$&<5iRt%$97;dm{KO~AC!*DDKZ7*B95xNi z5a?jYBskU8yTt_`wK+(UQ0%r)KPvMuQca*ECm8HF@(?aGB}(?A_GNX>7Geq$Pm>s( zN94`>QqpfH5q~rPhHjqT6#Z6|?c095;gsvOmD9-ia(A`;_lpCR*_XE&eK5LSI73DO zj0tRTX7F6F9g$ALTo`OjnNUrXukN$dhI%klue11l7|t}mp!2}GjZRc%2*0JTB;_m6 zfe!HH?PL)K`NC0i5%w`O(Y7J=+1=ZXh+l+d@77FRZtaR1jFz|9K`YA& zJ64*S;VnA9ei+#@>q&yFeZO=mtCiw(Db*5IDk?Du+^{NU+uQ3XCvQL{&DgAr!D>nx zsV=g*uWVs>1TQ>~I>Cl+cASvsEK9WdE^D1OBiBrP_Dfu3BB=rwWW{t`8NM!VVz^EtXazR-rN`qh&E1 zz3)+y?$PWN#r_44HaBg0iA8G=nO`p!_Fhwqx4ij`Zc@`MBNINt*p$HEj^U3z!YH z;DSOYHIjme52O%|fw=h^BL!7!mR;xBFjmhYqJw$%tumQi88H8SpztSeRmLtl$Ho_c z%TUJLK#}pFe5At((a1Mx+CRmsLQ#c4_-+3wcJ}su8;oi(>}sla@a2R>5Kmh<<1>TR zTY5Hp`s!5}21tORu<*fO1XgqBMY-c2Z7FEZm5GTN=?RL2;kBiC^+)h3Ip|ZuR48w; zD!s;s^i}M)6ft49(E|_1z2Fhm*pnwq4cOJ>$$Q_-hWg{Ut|{PY2XAP7ZMjx?*^{-8 z*$s@0Cy@*qy1hZaBGTMoJcJ->PkJi;Yj~ab1*$EXG=|Yy{$*_(xzgYD}Z&XLC>eEj_}I(%V=3{pGWH-e7pH^ z#|2yRMiQgmb!gxCm#E_0^!n@ji@y_^5iK8;j!;B5NbzJcPh~=!Wb`?vSp>?sC!4? zQ^Q!R4oD6iy??kG&{&9dJxF)z%yXXOS^pDgn_8z9$GR2)%VDoteowzmv&Z#U^KaB)sb-*1;Myio zeUB#7wXiPN6j@_MocOBF^2s81SmRPa;ed*M&juIQ1#P>I`e`QO%KgnN;n81!fMtMm zR_SJTi$gWm zCebf^g;cP5Aqkmr(+|on-6;ML9l~s<&uDMh*M^I@M__xE<+@f{z5QE%?>W>@B$tog zmv`hZU#R|1yMeIH$LYn=&RogG)a9Rwl|SG4#OM2;2vOH@LK8z1Xnfj)Bi^MT3j>3; z;rIb^BaH-295BqjivuD$c5X+RZsKZ|o;?YUjs}i~j*brg@t{%5(2=Vpg{TQU_XQye zJm;wiXdWtDtMQq;vS?-KKLL7APA;#`uCfF+8#(`W`+|N^@7F-K0G19S1(}yU*nlAn zB3toe_V*l@yCm&^2Vz3UAmf#KP?kNQ^iP0MLhBQ|C-1Nas({s^b_rcm^jikDLTypF zhwi}jcY<9ZXOVMBTnqF=f)S!*Q9g(57zZjqF(7$MUuz)=AP$H@TiyOtMXwG`_gI{9 zqvVhxvQ0J=@611@7i;xItL}RrQ}KIu*t^=&K>-^@TO1hUq9+zI%&w?h@`Uc1Eg^vR zz7PjWF|n4PR#nEyF*~Iu%+;Bz&q?l+z%Ybd$(K&!C@Yy;&M`smOUp|k*1M}OCcF15 zH$RI{O2(GG?mU9f)~Q2RSnkRXo*NlMN1Bp{IY*UhO$jf*d|X@Gu1hRP*1uu#T@zbv zFQWi)q*G;(&bB#$vo;=wg47LeFD_wBl8G^cYEYGRAFD=5+>5Z}EBG3lTwn(^Ja4e8 z$h-p#Pm}oznv;XtO+8L3szQ>XP*Yd%HWrp)37A?3pd1v{HXTmnIG@c_p_$^`r_c7L zl)Yq!?XSPp5k2&gXlAe@B1>eTG?YY;RS#*VljvAaNn8r2`N1`LEx`aioYsi^#E{&bf1ZqF83!(utxR1FvZ-NNgf&RAp-_C293$RBkOv?N}R zE0KQCGGq>DM_my^tRcsKQ2>Lf!nIiPwKIBwV_ubl3Rmv!BiADizPVT47}70NQcpKe z&!ZO=Ju{eBOv)P_m~NI`;nQZ%TR|%&4#a3P04~;v12<<-gBeYp6Fdn*9$5H=F*O=c`}geo7DXeFwHz$gx&>9EBuqnQI80|i!y`xC}f(J*2i z5?I?TczU7nD@W)K=u#XRnY$uh;QO5Ci$l%x-8b^T3bIW;Gv9v0ukwHU7MT2~gXfoK zZNoS!Aj`i8`rLx>M(!+xaF%BEEZTawr-GLzCW0i=LrnG!ocG+?LpiK^#;492E zpe2xy8*mVJ)U{_Lk*FQp53yjCSK!RnN*bG{R{x5gh=dky=l=zTM3Q)Rc=)8o0=>x? zDPeOh*onWzJCw9{vR+ptMZ}y~7WTQuy|&Hz=fJnG$DvGo*c|&A;V5_Pmptq(Jn5rO z2W3}oKbO~z1`iKAnJ71zKrem<jET6#7RoP*IF2z_E#9>aFMm5~)f|SwAA!fC zE*D$nCvcbI)^?PLjIbYR>h|9(PmTM{;E`!vR2;0!e?eq4YG@Sfk^ek1#OUjEk77TV?_Y3=)8}(t zv2qt)#c=6s&yz`vfCRY@ULto- zt;!861=6#_$=?xkbI;IkjoSzl)}1l#csR#@$@;Lo4*BA^XXny9kA?rH+ja4+**VVB zJl6lP(*ehSm!T=kEq)*QO;SbpPD{%&`=im1-nzgr6AN9xX~I2yJD6f5_~4N5<^SUB zEWoPFwui4E4bq)Tcb9Z`cXxM(G)Q+!r*wCBr?g0ybR&&?=iKqmj5DKm{@;2eJP+%) z*SmY~ckQ)ZUb$(CMxJl+jA+)rwnvuvCc&Gi+nwRG%k$&nMoHR?%^2{W;vHaNPX5#3 z%+1k=-^tk6$X*GsM*m}715^SE5CD{jm?3dcK7_!haTeonre zs546(2Bdp*VdJlF$hZU1!QgXL@Wo3pAtZBx9SS=V%PaDmS9vmYo>>~G@u`9JNSYce z8PXN#YIlJM#9*`fI`-M^jGl2Wuz(3Px+KlSYDVm|AAT> zq=b4229G)3abV3jtc4+bGfy9CVsp9h0aV0aOAq=O4sQHVOydp^SVo;`;zTS;PswGe zyuYGp5;=v~svNAHsqRZUZ32L|wjOe?- z!n{s!`A;~{^5g_V;aS<#9dQSNR16-0)jC^L! z$y3Fi@IW?Vh+<%y1cp_Q-ZZdFPbjb=VbRkLui4Xtat`O*vJg#dT$+&%~4pTPrcq_+~P` z?$G?@p`hB-L$XyvBU`x~$-{W(2G$9U3YGOAOgO;&u$!L6lb;bnPpbK!RY2yD57tMA zF7X`AeajvclV`MFQOH%jPeDdCYl$4b3p0^er-uc9wpdqRTrHn~qH}sqsw2@j{$|S1 zUg*=SlIU%va>E>(7A0EJIV+_sS1CA2Bf~71W!N@zn^;grN8LbPxG->S-@D0-4z&4B zY$`KVmP$WZrIoWV^bR%lz;bX*#>>?VlAezV_S=G?MiZN)b!0+rvz=Jru$KnBJ>E!t27_2Ac}};_5RK zmSFf)L57ceO4rOx%wcw%5M^#1vFFRHbQY;b35I>0$Td7M!e?3Np0)MGY1485#=m6@+$<9JKendwAW93xhzq8l+nXBkREY~`B}zu!oZbR+rRM< z1rvjmosWoAEG{Q51oLi;oW?8^qYnXm5A4-OW0c-G!*LBRF}r|df=HiZTI&nRphr<3 zXWvMeUKz6ybEI_Q+mA9{=YP2{G5AitGaOKfYXM)>KWhd;uC`|OdX9kWnIz2|9F461 zyhj661PTxW6r+f$m(Tf7gibUpAQFT8V@W z*@rne=$s57cR~w*eV`*CYib}F453R-f?HM9aIRay#V*=#w<8F@YKKX%j6m&njB||a zZ<*4}WrG^2eLd*6xUW!_LEWI#$OJXvEk1X zk^o`?aU=g?Kk7e^3RrDdzf=l4H9D^L?CKnhUmR1Q=W=TV<=VsYRUz|8 zc=ti4x>@=D1ODgPa@0Exmt$B)epCZ!i*bWhhpTT#t1Bj%Z=WtFTkxNm_Tq90gonS<_9Xdnlv>HX{s{yk1 z*(O%|?m&sFl=)LEj;GqNcG7gkR?qE)N8wttAMnBsUb*f$OD>!+O%zl31JI#pZls!i z0m2k69I=4Ay1_oz(P{zoS~=?Y+6YrJBt}B9ktrz-lEh{m-lh&3)QkX z4>6+5zsQmi=f;4%{UkcW3T+8HP?{Z$HvhWE-L#iZD;`%KLdn_8uAF8cll4e%ndS9T z(*zyd+m6mJoy!d@mr$;Y`k>97p_O|3%R@0EcNx)aki&&1gC z^ByrtEt`j#hXjm6bhTiWxila(1oc+JiDLK-&zs1tN1GCF)^mTPN1NP?RkbD$(WnZ} z5X}RGb$>-(@1($Q*643VN~h;i6t3^CK{{sY9KJ}|1EUt5C~l8gf&7Sm87y^R#xv!Y zKH|t)^9~xu2*l~7C<`k4VWbvP;iN+%F`6za<2!1OGNCLQlNI()xHWI{1Wjm)pg7QU zRMicMq(3M`QH^Y2PaUmDetR<|ZT4Da9}Xw()!BktHO29vYWzk#X<}j$EjRqkCu9kA z#K+24>9k||WCGy<|_KgN|i`lC}zj%aXE{Qwl0{8;%h_%JWMIH z;|iZfHm-!2Dji7Jyq%B$ODoeun*{H1+;yCFgT<(WLPm3qe0*l`zB^}7Vul^Ko?zDK zn6sPmbP|lrX%!fRGt2onhNkp($NWeoH6v#+aiGHWxbOXJS5`F*kr8f%RNS7Wd6-b{ zXn^8ag{JtpC`K}tT6zt8iE9#VV)gz@ix6wiaJMha=`^g-$^2UVvFLM1SA0PlVsFmm zoi*`yI&(Iw>8zosR$B6!9m7)$!^59s!Z$WaB@2#mYpJX>@wBn5?_bPBTf482`U`<5 zRM2sTDoL0#-)yt7 z_KG9nJTl?pq``^9B1%h8RHyT$ z0HN5a)JIE*yYPmW8GmvLrF?WO3VkBCu()-9>Cx+q=M@uVzb=$;nw8?2PG(D`>|n)w zpS$a5S>b54GgQK4q;cqz6zpqJQ^?JmtB=OaSeTxR&N5bX!yA?-N(Hdj~-Z-dNQZb5}Ps{c4*c*lsVMl zzON3S(t?I=d1S_QG}bN=#6zkewbw;Hko9B9`T3CbNXtcPWo-T^rS@#c4kRkpUzwYuPcT-8b6zu} z^+A0=^UE>3!9LN9Dh>)W%{dCWd+Rm96-PW_Zog6O&|KHb=p zzNXl+hWx^!fDjsmmXM<5_;p=EL;*{_5L4X%e?wbJ7CP%!i2TU+ER*jObdHiA_D6a@ zNl4)hm*&KU{+eh^_bJDHDrp*O|eJTh31L8 z8z?q<2x2JA-Mz+$2HEtJR2#|i;v+N^?02;a7%wt3!R1ghVdbE@v5DmjB#@lEngo@W zc;qG!h8&3Y8A9BB1+_@zXurYdFa;HIUUIy7J?h}bzH=syzivfVner&M_4pU(EyyG@ zk}trM6M#9yKLxx0&)eL;%|ZY(5*dASBZEIh76Af)0)zqOgOY{~wh+piz0Txn;4HLpQN2=IzMdkT;o4yi}--Tz?RuB7q8TsER155 z?IzLpj%Y=i&{xc^ovb$=A?fb)CC#-SmP){T#DNkJ9?D*3)RUt33J6-8*w73KO7-K8 zVGB-=!d3~`D|vo5Z)!ZsvsU%3Y(CSuwzL_th-Hr==V++eg)@VxPQu|{g#<7oQ}hh;pn zS>HF;6kKD$UjS|lzE{=~RJ04EkhKIUobPE5XTK0FB>78|-VAWp1TV>YU5|B(po|uk zA?0*^j>sZGNe?7z+r268sz`qQM2Jfs4nvEj-A{=X>F-K|W6NuL!mxOdf&xdojsZ91 zknfP#cQBgbeBc#_P}2anaxOWLFEQ<$7}Q!FDM@BQx9Hqz8DV0zTHO!U0|w`hF-1q! z3*#y$B-G=isI>I)l=};_2SKltB6GOFye&8~1sdw^Q&qBJ{tC#5KF#%v*Cg_LvFwiX zrw(fKbcr2Z4xvq3f~0j7_w`O)EGY>ZsMVJ&MKT!*qsJ=ZhI?)t;uZQhh?6v*g#-t- z#HHdWBf!fr>D^^dDSBl-EZc=gk526|x(guJW>803@snG>lK1f0Eu-#bL8RsC&xR0P z8ZOijwMLh*daXod^;!#u#9|c}bAvgSG@9rZfqaRSVpaB3B<~)L^bA*e{jKC0#2Zkd zUO}?(4LGswQX;$<4n8gl7e9~i-E={2q9$pV7w4L17QH8Y3byb;C?AVX?1PGRx(1VG zt%b}|D<2gL<+`I@lg|4%b%b9B%w-OKt1&E;6AVRWP?RMYe;y>WSHC9v@&VtgUoU`S zGCLiEy1fkx1AR5gw+XaaTS777}v?W!dtDdw~0#Uxmt!BhG- zH73sdS0C0oa=BfcRTK4CUKN}jvb%WEUUOeRe!I$iy4{+1)_hj*#&KhjKLh=o|NR!n zt5ytQ1QUK&@^FOl!F89O;Gv-ry_rqa^~a1-ZB%=ffcb7$T$_N&U{;~ad;XQ!Blv(; z>P39$Tfm+L3_IyoYjh^$ZBaA~|4NYvI?c?c$&DM=N*`^&gZ%hP?4k~oo6P84UG!@3 zw=n({`1OWY4>SR*l#s;I6IgCs6}(a@`57l8=I{KpWh=Yd=|+pPL*m@~SKm**4E8K+WBF^e!=$T>D?bVsSBy&%nSrE)7}O~=8)k$IVq zJRt0@(48auL0f($i85tImZQkzEBV+IDvsn{Twf!1+{na$36sSegU!?Hsmm2>FR`_2!qbu&pcAF9cU3p$vQ2h^MkibK z_S$Y+S!h)S;rB*j!t(8JiyB!5aUfoNkJz z7rE6XGQ(#n6C^QHclVMWp=`4uA*Mp&7`g-xe}JI*HvaL*!Up7)Nz$(aD@0= zdhY^BB&uXB4TVB2-*LZjLLi7#AGfD|>1E4&@})h5*s(*TtyBhmY`_d7TB7m$ce(l& zVM(uKsyh;!gvE^^p!;i@wfHRCqvb?LN7XN`GDf>3mFHCx>ZV7Jvot)O9pD)Slyj5+42h`N-9eFtr@I_=B)zC0W zsJ%9J;_pr&P`!Im`7~thUWh2cuG6F9Lv97#hzhCKM;QqA6-JZN^lQe#_Y!GWzWj;st zsVSp44uZ{IkQ+6)=fd&=^Q8nS$CM?gFbgFut;iuFn8=)OTZYNVTx-Z<+7z^M#WF)q zxY4NE+UVVv;2njTO7n1qZrd*vesfASb^0`{Wn9}AT_*anJW|0vX5J4t&7b2Y zfs8JcFBtZRB&Jc?V62=-f6XFd?#p$#+ZNIA0Dn6ljBf1E`nPFG%UQXC6V|BkQQRpCWBEsm2v|C1;&EOaYN?p>Ud3$33 z${{}fikG>wd>5&Ea=heJ$Ur4q*60xx>w%G8S!vxj61{HlHpX)=rfnlbq?eYYYn>Q7? zc2u7+?=eynKh_3wl*gA9Rmnvu_h#3X)}fNae!4Eh*cu*Sh6v7G$KHAw9ABn~I0jnf zoyC5o!t~NvZt}HyGuos(aea;jW1a806I&oSY)$c0X(ytv;piMbu{N^B_DJjX;uV!f z^=wt%OBeZaL$PMdApz$=pEm=s9LvYJ6@^*N45sOz#e**Z7xvB*qsKcV7fu$-T3M5| zLC<7?_L&{>ChTisMaYJIIuvH$Obz#6(r90%=Gi2FQWVOqi0xQh7N4lhyU4&8D7mfd zvl5t8$f$^Fc;Gt5nRq*#S(p+z(FEsOF8+pz6c>4rP4>yyNgN*DDH86X?EpLBFKDYPmpI<{o3kBS3GQ?w;Ea0gCsa@H>=)#+-MI3jA2H8O=A0`^CjBzott|?f2PrPt1=$` z;wNSK_~-V_i_EBbhj^0J$9YYG!!$3~%_J9S&grisucTdSS1-e_hRgv0F{q#F3m(V~ zac}*l>$~Gs-j_{8HCr6xC^)pgHd?Rd(VMF=JD5=F3oGqv;ca!X_G29pr(N&Eeez>i zUmkDMSl6sP)Lf}S#X_50FYmqP^j9b(!FL+zI3c%5SY7fTPo?ZKHPv|pyz#ON>1xy@ z#t6cF?Av$6UUF3lZjc45xSX5QkNkFP*?Q#cdwvXhGXO%$9q<%;)D;@UamJjQi&n63 z)6PtO)}&DFpd_AAmq07vkuI~K4!NyNkU<$WOnt@04#M=d%g8z2XSG(ZLrCkqVK~VB zYKLZp<$Mti;Pm$6v_kh%KD!6tFggraV*J!s#NYFNmGPEU3uG)jZm8{TN87c>PTGmr{X~a1C+NqZ1q4OS zA`wUx|3;E8di3D|wz#bP7($w`2Kvd6`kcW~U}Hu-EMFh|^pd1X*fMccvhq-vNJ{k= zCd0=4GFF)$9#!t{XyGp5?4E9V4L!KITu2c+P-TdA(3*IP7~1kXZQclHm#z)Uy9;y_ z44k{$QM05j)7g(RgS{G{!sw-nZ|rO6B~o8lVnKNkIF_@gsgfn!jE*6tN*RtPo+@Nu zTocWF$j+5&l1FT{J*Y^kQ%=b@rp6lLLSwaHLEo0QGZ&%SMYUfgH846ra-1Z&NL6lx z!*%_N{l>vfpdq=)FaZT8!g2ofaFU>+RSzP&h2=-_)NLoQvX~?t=;zNVJ7QTvq4(4H z$@kQ!1_zob9*Yx}*Q6K8RIdy9>2DiQ0^s;QVK6FFYXpbowX$LcU2F|eDtX-V?c zaLSRfYfLpP+DlGthu4|ygo`P>sh4>Y>S76Zb_}q?p)TF#yVJuFvcMSlh}LU}q0opa z$PkXQ0!tWShL|j8d-YV7-+;7OtB>i{F>2MIX)W$XV7+*UR`yYO%tM=xNPcr}hNUso z#kfS$A9dycgxVy*RHRl|E0&pG%-4yn!E8}@60t9t1ko;e*HFB3h9JK5`AnM+BSKk0 z)^jgMf^cDO)+%xjw%)ILwXO$*57UOXl9}71`hW{b;4OO2UZ`O9qmCah&pQRIh(M1Jy?vSjiEwAwhJb z_z)V-bB1)mXoIv(j9Zy3%s3|F(6dy<_}FBbmfeKWF~ze`rn-p0jGhwt5w})ly^FL+ zNEt~!{yeWM1lBFisXd*72uA(vtKyAE)}2Utx-o}BBkYiy~wNUtZwy3Y?TNJi~owZ(tm&B)8Vuf140{T3v(1{ zdwHe^yWC1lG2tZZj2$Myj(WRM6qIv2)(IwasRJn*XJ39nm=15Nae9oidkaN=n@2q& zX1S|5sT?3YY}fM*RB!BEQTf8leV&V>C2MQ0p2b#f8%K=-|3maKW!rE0U!yenG%x=#+5f?0%-M@7&4& z9KS|4Q*n97NT!eB&S>*qRXJPE0|C7CWpb=VR$a3I1qu8iv;U%V=5!&g=~0rB)%SO02A-rO+s8Ry`uFbK40+Kv(svrFE{ zi}PlJD(K+DIR7AgW!$T`K@i*J*?;XEPj{28J_BC;f&iS+D1P?FOw14v1=h^bO;pdp zRKe&^yEZ^Apa2O#iBMRSpO!_@GLsOP=Jn-AwQ=p53X>NU%z~8P%2zUZVRw1NG#0Nb z`ku)M+dWMR^DDXTGCj&ZLT&bC?2l2lK|M|scAI4M;zPY*g6^C3p>dPxc@ z9YyS$F6G>lJmo*V4zOJp6fxEq=1YvC2h$P&fwVc(jH$zmTILckLzfeRr z+-8ttC}9x#rn>LzCb+~ETFzh|S3j2Wq3{5URk!gdG7d+!A7R5$4ZpD>)G~?QhY!<@ zDzuSw6NF}1wflXz(Gq&q>rIOC5VAqlK2S^x)ufo-z;LLS9N&1f;~1r`669y=-|KVS z(rH->%|Fq@R994NCqM>&b9#tzmqe(THGr_F?Ca_ezE?+5oW|krVjAN2FI{%K@{r&O+KSCQi6QayL-6?H@?g$!k3L0ZDjd##P zU~L=9FB9>Ox9OQM*_8sADbuTP60^_mNIsu3EYR+{O$y?^ z<|H`EF(ylLibjsGMo+F7U+2_=d3fH0!#Iu?&5(&uOh~ns9)#^IP2x#GEVE4<-UK0T__|V+)ZsM6PwOj;TTYga& z`AC|@u0FI!OTh2#+(4g~HhlS)7&}43W4#!FDFGT_dhpXjEYf;bMzVm*!i?;l0UMt3 zPS)1IlL3FsEr7~E0fK-Mp|~iIErP&B7@&+K(OKQq?~J2{rpihr3fuIlDujMmDiN1} zjcr~?y;oj;zD^zU#`i%WbiJ8%)}xOdVYlbkzr6U11bEviLs6mYpzAAL}Dtp`;fsk{f)fXR(!XsBb; zY7nC0_LXm7kmn7^g&dV=Tj9C{oCFpglwgW5P6eFHfkJPs=f-FeNPEGUHNPw)X z6^wrZMIB)&If_7?*1D`YYq1b^7_y~qI>G2!Nts2$P+>mvO(HsteW48vE*;NR3SlHn za#&HPHDBA-$2`xpPYScUXy}=4yj)Q+$H3+7#O3gr@h0^}TTmqKnAPkkX~y=aaGbL@ zZawv(SZCO;=u)5{(PYm)&gJnI-)HT+8WmX0M-@O@NkR6ar`2mPjwDj8eprJ>HKK#l z*;DPW z8%H>Y9q^+Mq)GLyS!OA%d0d;4VKYzIHDK22xhIUjVDF;J6kf>6X80s!BON8la_YwP z%@c(bHxm4#EJE@v19;2yIhT5wNT9_;k@)N^rRV5;l~^h-4S}@nyF}ZBny(-)f-Eqg z#IVPY0*E4}3=y0Zr((Ft2X)?;Scob_+Bb~(t_Y-091+IeqkhiB5EX<+(C`Acf7lrSeJOiDp>H!7F07`_s74YbsS3ODv4yi8SeQLg}M0V*-pt@jg zj0|K50ur}%g~i)XEf)1}$#_Nt!(w{z*8qp+R+OHHg}5{=r!Kf`Sx%P$}(^z5lwtL8T+oC?k=!mpM7uME{+ynY0C9Y-F3HUll=%| zZuCL(krHSZr<4-BXWL~LEP7dgepPN=W~qs2pUER&d#vxU6CKv`HRC&~GEfv)NrDJ5 z5Xp5CHEE6hnAC6PU8T=!w5m{# zG!L5W$GEgj@?kr6H%rInYRnqWC$Jw^<(POB0$zX-@HrA7Y|+o^@n23(0RI*!Ks}&D zC|g(p!a96AK0b_W!{jmNus*Dtc2dAHX^T{tcaD1_y?+zaxctd%PWk|FaM)$witRwl z1^<AbbLHa+_X?>Zh9tHeOpsY`;_r0w;>%NUP=!RZj86V*R3Gjj3!h@ zVEZy6=wEBxRpe#HT%<;6u+B6)e5&(ICO&4fGscZgG8B!xve2e`@c=OvpUgqDX0_@N z>Krr$^|>r0h1`I%gUP~>_(Tvcv-8nBQkExXnMH5)uOugWA@-2<0S`;mYmV~kR z$?(po;e3x9p-uF+P&RJ{hn)|x^wmTeOqZ}_iPIw>a7S;4)sDt6*p)TLv$s8*`E=jj z&qYl^82dl_f(iIt)yH5vCnL3;5UifRIpkI z-A2GVsQjP9;r9%vdH6j92Q-p^Z-tNe87IUbBuSYPoCwjXBQZ6E8+TXi_x zKOb0%t8e1Csc-ZRMT!ekX6Y8Oj}PVyrN9xu?YHH?b6h{MJuR}dd|*7C^3+9Nr%YN$ zE-4N6$~ZRFBhl|wG8!n(El!pMs{>0=7bC`d#egS7nLqS6Ew7aeW>!)nLLEp)WtNpw zhniZyQ6G7dYmV!?*K9SPy-XyfRIhCVaZuK-p5vUjflz>fv9*q)PB-xct7#5HzqTN! zVHLG`5!>Gr~yL@)j z6n`{_VIK1xWrz1evQ%v4k7m_c$qO^jsKPpeu{=Vk-u4Iy)d=(%x*10KA67*p8%1~U z59$za%~lU8ygbJrl;D11x}cO;gZ3R7>dLb5RX?;-9(t+8Cz1W|TDwJ`GX&dIt1Dw8 zNLMeZp%u|$sK8C4zK1{oX?+}bL3dGWtR)Hw{RV5{o@C5g7OX=^xner?0?vF28>J~# zbWLL>syzaw-JhyGtl*Su&tUMpXU~8{dI*wP0ogrZ1#f&+r07J=3%{PQB9LRQa$4!7 zvfH=l&^3|r&JyW0B~Ih(qG{IxIOiBe2OgWc&3yN8h;APAKOAMSK z(X@!^jEz%Hd`OySY8|ojRLR?cr=qgP3te;_>d3(_D^$)2o^{4)Be_>4v$}1mi*txM z10_dajHwpr`>YFdaG75pc3axgAsfLp*UV(K8No5EMDn>LV$Dc_FH3-bO=LEe&d7NB zi|e_>%GtRrU^^@a;n_3dpUr2!2dk2_G5KQ~0H^>IpfXU>mCYQGMG!m>B&t;%f+?e) z1!53lFKz_(@;);#z+ND!@4<|$tF4|FRTokB6%*~25*-w>w%19Zz2(gs<}G~fkxRit zkucwK0BZJ5sZhLzgORIZwe@&!!Tag{{*@2&4VMq0>vB*oHx5h|%D@M9L|){`37^2{ zZeidbgFnGiy*n1*^uc7)9*W_k$AH#lhsDHB{F0|ioF^t87uz3iESSQYCngaW(;rJh zIY!>aanw`j`Ubf()paDO#;cW@W(9H0<&ljv{X*ZZD=JLiO>9u-YBLmH#nW{n$O4+; z>T7+y6OJN6IIKlMtu4O7fZklBx6n+j4~IBIi}-U+Lk29TP4Ebx|XuzZ4M z2|Pc{HD)l&@5aq<$!{9>uczIVq)?^j^6@)=&mH{%BsI)73E+CWE@7{Zy(KJxoMZG6 ze3)nhJFsVIHY+1Pb&#=326GQzJhebbX3@k=am0AnuDt+^m{r~`E^1mmg+KmauQpkk zZhG)Aak)Ofm#Y7gOn9>gx;R`C;yLMDmAB6zvL{GGXjq7^c>m-=i=UJb*pxs`XiP00 ztMKiHVbvHb&kHD|IVl7E}w|h<(CD3f#ba2>(TKDpVNgeJ=gqu5aT=5a#=WXXM|oz;5-V$xw8~rT@@5_ zdToA2y%zRI=d0Y*LT zL1edfbb=9;wgJ~J^#(dt`o-Epqx^}jcu*1U34VrD^{aic=_!|feKV~o{WG@pc0q`;#DiPdhaCI@MeP6>@-(wy6=V-3EQLq1B^a>B4F2m%IUY#T@eh-wJLCV{Hrr{d&Ew zKnMO*h7-W7fB^C-Qst)9uxVlMb(#<+6zIYJNp^L~IyVUPh`dz~=qQ^by7{A(;_|>K z(o#<;{iycX6ULV%k;)fwn*O~AG}}valGc{gB7GKh{)g@f4O&}0B@z5}x~wWNamqanud$!Bm0jZAB+X1MhY)ez`pNH>3ypg?RsbOU#L13gkxN#>R@ zl2nj{cQ;s+d45Q%o)Ou7PDLf1A#{6=lM~jHXCFWl#pTbL{%%`MGoEu|XC!yB=NY>Y zd6ahTZy%;{(r%3~3ZjD-!A={UV{R>sw2qW%6B%V*^EedG2b+A|rwE{<#qT;7+@%Sq zq{G*nLC!8f=-%)MsKJALerxQAh$oK@^#v+WF9bJGL={Wz5#t`R=@74&5c$k4U|S0= ziavv{3pE_Y;weo2-olSEz0oOz-Cso`6cnWCvzr!|8|#ccL?^rAI%h>LOlu*H{UH*e zTQczuw9E!`{fWA}ZS`thJ3Py;AHZJ?yfOW92G0>-IEW+zy3xW}w*!bc=A^{Rx%EVNhI zqN2gig5q%+tw!gTHx7lb@*%#7d4m@eb15Dr;JA$C@e+KcW?)bP!n7;Gnx2mcZ1&VJMNDx;tX|Cui&}RdZ*NfSbpjeE%VYcGL&V-7 zr;6|ib2F^hh)4dpxQ5xS*Qb*qOPx#k;n6xNs;Tn9_^<&n9vfUD*cNZIMaf+cU4{_{ zWbc?n3nSM8w#a35Vf;eFs8@p`P=R$r)C}?ZJ8W(#nRnB)OL*EyHQKPI@Je2B^B;@j zqlWPJBxfoO0@bK=C|M5^WG3PaJLbN*%8I@{)t+E~N})7xY%tHm+^pJ%@@RN`M(6*mf%hc} zd8kAH%TLkcLfdbS6ij(5112VuZg0*ER_I-WTha3bsUV>%$ zseA$g2J&s@7fqP5f-yc2OMe z!N;@ZlMILB+xD?lKqyU=PAVFcEIk%DPzP{v`;3V-*m2`insH23I$Ldm`5Mmwd+hpE zht~12{c4{ZUfsM6CwJdjD6GWAhB${ElbtUTH87((+D+>1Y8owC8@%vmhXah2?P)u{0bR+w$?AuwPsG&g4wn`GtX~>lJsI_F2%sQFeH9 zW!}+dc5gA4KQib#W+9&>#18SN}ua0LUY`RLX@g-GI z;vqQCl?>h8LM{iNLQ5sCFttH3Ua$bKUovP9Mb#BFsqhi{v5>BP^adKbG5`JQ%Spm7 zI0HSyU7(JK)EUDKI9-#XW3-|aJj3zvrsoe(@?T)b;$Jmo zMk-pj>JG?ZJujW|!>+wBfWCb}DpxQI_YK)ooP$S!UkWKoVTFEJg3bcu#Fn-%iSW$c zDJ}Nas!H`q%*!W!xcFT=^|m*^5XEp(KEAGY*(DtFP=JSojo5OGVH>mQ5zW*pX~q%v zy+y^H6U!31r4Mb<9VOKo%h*cR(7_GD*e7HExlG0VB9b{x19JW`1-r?LB5(*2h%h`T z3a$#9PhvE_i={R$S#czr(hLS4Ddlv&Xg{0P?uH4TCtYC$b#211Ns)m)8z-Oa6b&}n zZ4ta@2A3%6v4P+f){lnr5_}~}4gYfK#5BQmskRl(on6xlpx$|>1_}{d@tC9X$%}Nh&h3qet@qbWO z{JXM^y$Ow;t)79Y5sj6ZwcambYzf}Cb9Q>XXAz-uxCiPwMe?C9@56Q~?gSLT||>T2s`*oB*_oRXMo}Rmk;k~fNtfl`TyUivvRToxLo~@hDz`Q&gK`mf74R2f1s891I2~?rZj$h_=8`fzu)Bbt8Vzmfsq0*f&Y14{^eq@Utv*y$N;;4!2ah5=pP8kX9s{q z2Q72YC=s9~wEz_U$V0%MJHD&x@!T@KwJK(h(I(cV9xV5w7I*bnf^a4_V3A=#O_?;ldCoLu{q@YM6CH&W1t~fK%S_BNk zae&7CJ&wqC8=PqVM39zI1Qg+4AL0g30~)B-_$>e`)_^b8|ET`Lz2xLR5M znGRez&kyO8)&rR6fD~wdX9G*thVk#s>-)Tm-`+;g&_K_@QOxH1Hp_3X0{#kDo-Ph; z0f2#3@JG`FnSKucPk1gtJx4tuR|6wkM?j35f2K$CqkK~bkW~SVKXnHQo&*{Gh z0Q>JfCx12C+TyBe1YooZ0R1CY_07M*GW@f(Ob-6$I{@Su;CSbcSTD|hgJt|@Yy;h1 zjT>NAl@6#KKVmz1{|%PupRw#~4&?E#pFM+>c=imq6#B2^`Nj+U3+z8b3-zh*S^*?l zK<@rn9ej=d1(eSc5Q|jrcSo?lmYdkexC+CU&z?mA>MhlO?FIbI^UXB*7j#*B8&|i# z+kFUVBNg_gVp#wZaLEMd0DqS}Up?oak_9Yn9E^mW9G&dHyUYI7UWfx(|62g79*`Rp zzcYdMYPkHIYGZ8;h&k{xF3{T0-qH0!01pK^${=d=@vUaq06SK1Y9+vOV z`2|exVlril3NZT70~TX!Kcwg9`TvvN-^&`kWzq^q2)gn2#_xy5P!S` z80et^jo`=Tl^OAW;s0~ST(S?B0IStAK;{6t*WV@2cRB7CbU>Igz*OM-C?RiT;AQ|= z_WbM#;*5D}UjaHZallhZ|DFP{N*%@jpVRnWrT=p%?jIth{k3$^pZ8*;0McECefA76 zIQ=epzL81)*R=nhgTM;h=cGOd+&b6-JmHUhDrEXkQ~2Y;#J@vNlarQ6J03@*A`!!7d0)xB7et%sWSWQlBI0OiY*OkN}PJb(h1imLDZKZ zYMRp1b8Mq7PPgyr+w*2%#g9N6)s5u`1qj?!MuoQI@<%?uFLDJy9ROfcVfo2Q^VzQm zzwrIe8MK{f$jYYnn`lo9}vtxI+$Z4#MTOJuFXC(kYJ>bbK}d%ROzi-27t_ zq&4hPT7*b-%~bci!>m+R0W)``AtbCoo~BejSiI?@_v}Hr0KYWXocvLqve_!Eh0Inx z;y|-?&Jc1cgiICp(Md_#iHV}yWJWXNdw;jjVFcUpOC^y}C{L3o31$-h8@HTa1}Vg2 z#Wa}CFOsJ$R}3CXeLd6{)IFg=D(7iuZKrN6XSVX-THBh%VaMD9a_&nUq}h2c?O?q= zP8;cMX&_kkqx4x?Va1cWdeEZdNC=y18hce{xU9677gb;hS0T>e^Sb?74FQA0s-Q(= zM#P_4Y3|omfQIU{Qzs%iu*;us1t1Q6&Gm5cXzbJap%veQKv%x499kUX(ew>p?uTvk zgXPh{eEK&o25zt76Y<)BAc;i6jH6*-{?b#B-CvO10K&kX-?_v!G1$14k;`0CS79v!|nKO zOV&OE4GvCvFGE*+waw?`q;!OSn^qQ5eN@V)nh+ip6%#QyJkj(3N?C7YYt^oPk=+ws zzqf`^2Fb6bs2WdthNVp8OP;+ogXVWv2wuD?eJr0N8X z(U!q`4$@SI!P51~NiwEBr@_2=EHAL{JEIF}`N>Mlt-_^mKKSt(mx!aQ2--9ft9BSC z?MDRUv4E6~DClRwVFBqPz&SP|jb!N;@i13)TmEn!Fn2)Lz65hkjq+kz+brYq$LPXv zJ@!Exz-51exU#NFM1S0X1Cc*$Q%IW0jD@@Bu(6NU!Eqf>Uv5*3(Pa zVN7hU4pLm2$DA(R`V^Vu08WJHwr6AySsd^1#4_Pn9H8FV2@@RQS~FlI6rhopO#lHh zjg;Y=9v7#;w~hg%7qN$b`zQpED#V`nS9$geU|e7aw27eaZzBxIOEp-QbZhgd510sq zq-axl7b;gX~6qrpp7`(Z2|L^(wJTG+rYzZm=$dz zcORmRz7!V;2mk!yACQ(Gkf=TeYHUU^l=QsN*0sg8*?VyG+76X5mD3NQ$`HgoBRs`z zR~{^i?R=@6E<`J%FD0kKrZeIu0pT+2mZH3gkw>u<;{MvHzRB@8J{9N1)A!_0tg+Dz z+MwNsEAg@@rY^GVX^vy`pQUUR=^iS5>gmHL+6*FnxWnvsneVIl*T72-Bt{cWXj+0`%~40<$m`}E@fP8jK-mr6y27m zBCc$KP~L|&XyjV-4VP{RN;zzM^hrr^S|f3ZBUa`i;X7S5Ti_vA5L9T^&Dg901)m@n zm;a2FUq^2S&RyWpcF3NsDsV!yaayE&ajbc@rs>9DXMGC=B;Dv1W-G@M$7t=bYHSj; z{w=glF_xoiAar_@J%woTRXD9KLhGYvjRIY?`3yuHW4Y$=(dmefpTcHodrE(Ri=j!v zgEsNTpk=UPaoTe(uRA>sy70jIX_OyyoJ-p{>g$t?p-UWhPR6rc`XqgXKF(Lm{)dwr z50AKaWgl!f7!idAt|o;tNM`yzY+BipQ^Xl+w(8O@G_~!*07XN+#~CFse%Nm66GX-| zn78~nW?+9dOc4gnQ=inHRRm(t3@&-%^+FKeI| z+Jk!XvkDadm`FT-DA&2G`pf;O=3uQ0iVJ@d@gH1N0XkTln21SRIn=ZYSK3trn=Wvs zV1hcgSOu!tEc@#WW*?NCG%-0ze5!;QP4CPNA(c?#EQJr#P*EE@Do&^{x|$iu-~dv| zq9iV&?^AHbwwkn9pZUl}3`r-xw{LNS&tNQ(R!)2ohf6l`V4}}GreUJmTXA@YHh>t3 z$kdxC>d0edFf!4i@x-g%Spc|*U+Tyso+$$|YG2&NZv3akv&%qWZbr4DEwK^BWMks= zXD+B0hrO|#7FwsFb^UW?^d+@&!e`CL>^dvkHB+rPWN5@F!Z;)yls#v;Is%;%BBGPE=Xe9*P@+>_nGQ72S;TD$l$OlR)^( zSkNdcy$zgX5u7BFNaIlB@-IUJi;mOcijV@+>2vwP2Jsb5cYgOPvc+N=IFDV>4&}?) zhQhXgFVs`zRF!ykS(5M4e;Z=S4fqhPsEga$1W5%h4w6~7sAv*Eoa|>4|0n_Xrkr%(ylUC^wy~H>v`x&y}e0V zHm8Y;(__7-A8WL=fwv7J(ddM0dC?_nh2u94jk3d*FV_mVj(d55C3Rc`WS#sz2>Z-2d|n4D2FAPBEVcslqfVR|+%qPSL*Mu&vv`q&tPc zVKSJO%guqf;q0r8i;2fTFsIkkpx(u#_rV(5XnPWII*zmzW*Ekq8I-)I-gf!MlZ_Uz z4k?YXb4MvfGwF?2=6(`1=EN+>uNAu0K7_ILqt!y86VGHT?iM#IY$@o0R{snq;ht;7 zIF*3nKnqv5O^Ah6G(inWH+OD&r9j*$^XVY>UKu-Agw=wpu?xkt(_C{37szrK-uyzh zu?f<$KVHiaksQP6Ty^NsvB2pBbzvVz?W%&8nr|z!eDQ0IOjs=*+Zk_#seZ2211Xw z@|Ie|m>(H1W{?2AX?nS(`QI|_j3qg(&u753R=~A75-qJlPe5pi958Wlb^pzIA)7ni z3TL86rz^kWlQur$V3^it2ab}%*xKcJVRs>^X)te!p#NG9!9v=2ouP|34;gLNIQW8x z#a2Azu2YD>X>nIx5U2?QLMG}98gjIm3K0yGV7%;5zvtFRKf@gp9EE+WE*sV0h|BBp z_diUS0)*fe!fv7-CwM$_GU}XaM4bN38`s<2f|*W*);)>24n#F>D}6khgDGCar6eEY z-^J1Nnw3}X0cAJPsC}*7uM|xjVNm67-!Fn~ZA2P%CHy@2o{vDgQWm+1Lo5#aD;wiB zcK?ErQ6`$_$w8QQ$L5&Aags%~UE=(KfVP96g1g%ukkF*^2Cd=lVeI(GMaHuZ+|-*Fni(p zzC`){1*)MWy9=`i|Mj95%qzs#ooheoTR<_HQYM|ws)m%@ znxC9jvF-?nv=4lWM$|s%_=x5qTgzJxvb(~h@9s8qL*^+(fkUg(Hf4N2OJq>nx>&Tt)- zmvsK&)@knNpqz`8K*L*)TMDR;!0Rcz?c9KmcTVzzrh7UIh12@J?GWO&n{Y13y(WZH z3@uX)AAe>|+v))$_TmtGz#|$jz)0UTF1fQh_%MLNAuBJU1)slE0!a-V+BGY-V|?8P zUv#iy>Pv-iGNW3qk%ddxa9ejU=1mwY`CBcL6leEJ9sjowIMIkUo&>L=eMKu*k<^%J zOiT)G@ukvJEUx`&h2~vBF`8k}m50V2cU+&Fkn$aP!j%VsHD0J_BbvtWvX<^$-Aah)fHXfCJq!xn+d&<4 zh&CF-aS8I!owtXq4FJcF8VgP5F6J_XQC8G+1mfj|EyifKdf(`x8lcQTK|}YF>+7pR zvz8|d?`a2I{l0)a7h#J>OQ!@ERWMQpdg;eOHJO1{gMrepl7d$Q6i5&t#wmQBg*w*v zZ^&K(EQY=UiG{B0rV`17DQBQJH|meCL>|76l;cH^i+ZX=mNJv4VH@^m!AwR#p0t)J z_D}~WZYReVZQaUVci08D_atoH4^@Z5GZbc(^+G*6vqzxrpmL&yvIlqL6&Q-K(`MMg zTl2--tgpSZ=RWXL3%t=rTh&pDkOK6k)|X!N*%pS?s`OQ-b}$V)n1&CLVHZ4Nr+}-n zSW?DOaOhm;_D*(o3&0r_1wg9t%XUn&itoQ`QQ$>(*#NUwEbMl`fW{I5_g??5plvQ@mM{EZl`q0v5CQ^SOm^10T8z!*P3DAazK$@xTr4Jp zNamlL-_>HIg4OKH`G5Ge!1be1!XxXt+3yHn+!}lQ(P&v7814mYq&|1)oJwFzeIjR$ zy`OepF%#zaArf5}5qg84-Wj&dCNO^LC$&F-3EYDTXvk{XTzqG%k+OlLocts8o7vf| zg&qRQ0t&Cbs|8pa0ZU+aG9$v5VYeHGxZp>S!(XaImaIJ(Wschb)y$ zkLIr``VjoaR>$L~1hrw6cYtbRTD^Kl(|8Gv9bHg}QOi17z5J^X*K}y&M|pUdz;F=R zlW=|tU!dn(mgzC*;qk#S6SY!Z0A{{*G;4OJ0t6i)!N`_JW91;6)34VdDPujcH;u(u z4{Z=OcTx-@F03QYEi*H~!%uL3dj3(+!gh$r$ON2wizD10)A4#`NNOd1=}35CYnu@) zIYq3rVft7xu;QK>KtN|nfPyck+N$)oC>(_Zq;4x=4}*MKPk0feReR+q;_`Yi_1TtC zXk;Fmf>h~8yV`(Z4vI!I7Kiw}=We%bct&jqjK<#Cu8JYbM0%cb)|ccgZ~{w@5szpT z$m~%rJkAgaGl<=v%{e#~m{Vcc14$I<(X0HJ;sYfN*D3#l*h~-+0q+2nS0owy zJZF1abC^+eN1-XX4%l3~5c1E*^2krd+cNAGv0!`&!7oO~y_ovY;dISpgvnQE7_=p{-;3hV_Qvzz zvA9n#G+CR>xqKWtB*rZYs>WQD;I;Ih@f@7c#0&y?dwnq!-)#_=bDzgy8+U-@a0sI{ zS?mfOhb&rm35nVyKFxoXhU6^-t=;(TNNBE^#Gz^HQ^#)2F12WlRM)qTP;c`Sq)0=y zgTp6Ezjo*FWlZb4EPjAKO>vH}LQx4DmR*)M{%#x&7nk;Phwg*kz=yKnLsZ(IU + *

  • 1. Function : IoSession 의 Recycler
  • + *
  • 2. Summary :SessionRecycler에 의해 Session이 종료 되지 않고 접속 유지를 + * 하게 된다.
  • + *
  • 3. Notification :
  • + * + * + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.2 $ + */ +public class SimpleSessionRecycler implements IoSessionRecycler { + + /** The recycle map. */ + Map recycleMap = new HashMap(); + + /* + * (non-Javadoc) + * + * @see org.apache.mina.common.IoSessionRecycler#remove(org.apache.mina.common.IoSession) + */ + public void remove(IoSession iosession) { + recycleMap.remove(iosession); + } + + /* + * (non-Javadoc) + * + * @see org.apache.mina.common.IoSessionRecycler#recycle(java.net.SocketAddress, + * java.net.SocketAddress) + */ + public IoSession recycle(SocketAddress localAddress, + SocketAddress remoteAddress) { + return (IoSession) recycleMap.get(generateKey(localAddress, + remoteAddress)); + } + + /* + * (non-Javadoc) + * + * @see org.apache.mina.common.IoSessionRecycler#put(org.apache.mina.common.IoSession) + */ + public void put(IoSession iosession) { + Object key = generateKey(iosession); + if (!recycleMap.containsKey(key)) { + recycleMap.put(key, iosession); + } + } + + /** + * Generate key. + * + * @param iosession the iosession + * + * @return the object + */ + private Object generateKey(IoSession iosession) { + return generateKey(iosession.getLocalAddress(), iosession + .getRemoteAddress()); + } + + /** + * Generate key. + * + * @param localAddress the local address + * @param remoteAddress the remote address + * + * @return the object + */ + private Object generateKey(SocketAddress localAddress, + SocketAddress remoteAddress) { + List key = new ArrayList(2); + key.add(remoteAddress); + key.add(localAddress); + return key; + } +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/SocketClient.java b/src/main/java/com/eactive/eai/rms/client/SocketClient.java new file mode 100644 index 0000000..49ce690 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/SocketClient.java @@ -0,0 +1,30 @@ +package com.eactive.eai.rms.client; + +import com.eactive.eai.rms.onl.vo.MonitorDataVo; + +/** + * The Interface SocketClient. + *
      + *
    • 1. Function :SocketClient 인터페이스
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.3 $ + */ +public interface SocketClient { + + /** + * Send. + * + * @param serializable the serializable + */ + public void send(MonitorDataVo serializable); + + /** + * Destroy. + */ + public void destroy(); + +} diff --git a/src/main/java/com/eactive/eai/rms/client/SocketClientUdpImpl.java b/src/main/java/com/eactive/eai/rms/client/SocketClientUdpImpl.java new file mode 100644 index 0000000..b68234c --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/SocketClientUdpImpl.java @@ -0,0 +1,180 @@ +package com.eactive.eai.rms.client; + +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.DatagramChannel; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +import org.springframework.beans.factory.InitializingBean; + +import com.eactive.eai.rms.client.common.AbstractSocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.onl.vo.MonitorDataVo; + +/** + * The Class SocketClientUdpImpl. + *
      + *
    • 1. Function :
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.12 $ + */ +public class SocketClientUdpImpl extends AbstractSocketClient implements + InitializingBean { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + private Set dChannels = new HashSet(); + + + /* + * (non-Javadoc) + * + * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() + */ + public synchronized void afterPropertiesSet() throws Exception { + if( logger.isDebugEnabled() ) { + logger.debug("RMS_DEBUG:start afterPropertiesSet()" ); + } + connect(); + + if( logger.isDebugEnabled() ) { + logger.debug("RMS_DEBUG:end afterPropertiesSet()" ); + } + } + + private void connect() throws Exception { + logger.info("SocketClientUdpImpl] connection start"); + destroy(); + + String ipString = rmsProperties.getStringProperty(RmsProperties.RMS_SERVER_IP_KEY); + int port = rmsProperties.getIntProperty(RmsProperties.RMS_SERVER_PORT_KEY); + if (ipString != null) { + String[] ips = ipString.split(","); + + if (ips != null && ips.length > 0) { + for (int i = 0; i < ips.length; i++) { + DatagramChannel ch = null; + try{ + ch = DatagramChannel.open(); + InetSocketAddress ad = new InetSocketAddress(ips[i], port); + ch.connect(ad); + logger.info("SocketClientUdpImpl] upd address hostname="+ad.getHostName()+", port="+ad.getPort()); + }catch(Exception e){ + if (ch!=null) try{ch.disconnect();}catch(Exception e1){} + logger.error("SocketClientUdpImpl] udp connection error "+e.getMessage(),e); + continue; + } + this.dChannels.add(ch); + } + } + } + logger.info("SocketClientUdpImpl] connection end"); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.SocketClient#send(com.eactive.eai.rms.vo.MonitorDataVo) + */ + public void send(final MonitorDataVo vo) { + + // 현재 900k 이지만 테스트 수행수 적정 사이즈로 조정한다. + ByteBuffer buffer = ByteBuffer.allocate(1024*10); + buffer.position(4); + try { + try { + ObjectOutputStream out = new ObjectOutputStream(asOutputStream(buffer)) { + protected void writeClassDescriptor(ObjectStreamClass desc) + throws IOException { + String className = desc.getName(); + if (primitiveTypeNames.contains(className)) { + write(0); + super.writeClassDescriptor(desc); + } else { + write(1); + writeUTF(desc.getName()); + } + } + }; + out.writeObject(vo); + out.flush(); + } catch (IOException e) { + throw e; + } + + int size = buffer.position() - 4; + buffer.position(0); + buffer.putInt(size); + buffer.position(4+size); + + buffer.flip(); + for (DatagramChannel ch : dChannels) { + try{ + if (ch.isConnected()){ + buffer.position(0); + int written = ch.write(buffer); + logger.debug("written="+written); + } + }catch(Exception e){ + logger.error("RMS_ERROR : channel write error remote address[" +ch.getRemoteAddress()+"]" ,e); + }catch(Throwable t){ + logger.error("RMS_ERROR : channel write error remote address[" +ch.getRemoteAddress()+"]" ,t); + } + } + + } catch (Exception e) { + // 현재 AIX 의 udp_send buffer size 가 1M 로 설정되어 있음. ( 2009.02.23 ) + logger.error("RMS_ERROR : UDP 버퍼 사이즈 에러 buffer.limit()=" + buffer.limit() ,e); + } + + } + + public OutputStream asOutputStream(final ByteBuffer buffer) { + return new OutputStream() { + public void write(byte[] b, int off, int len) { + buffer.put(b, off, len); + } + + public void write(int b) { + buffer.put((byte) b); + } + }; + } + + public void destroy() { + for (DatagramChannel ch : dChannels) { + if (ch != null) { + try { + ch.disconnect(); + } catch(Exception ex) { + logger.error("udp destory error="+ex.getMessage(),ex); + } + } + } + dChannels.removeAll(new HashSet()); + } + + private static final Set primitiveTypeNames = new HashSet(); + + static { + primitiveTypeNames.add("void"); + primitiveTypeNames.add("boolean"); + primitiveTypeNames.add("byte"); + primitiveTypeNames.add("char"); + primitiveTypeNames.add("short"); + primitiveTypeNames.add("int"); + primitiveTypeNames.add("long"); + primitiveTypeNames.add("float"); + primitiveTypeNames.add("double"); + } +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/UdpClientSessionHandler.java b/src/main/java/com/eactive/eai/rms/client/UdpClientSessionHandler.java new file mode 100644 index 0000000..d55011a --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/UdpClientSessionHandler.java @@ -0,0 +1,71 @@ +package com.eactive.eai.rms.client; + +import java.util.List; + +import org.apache.mina.common.IoSession; +import org.apache.mina.handler.demux.DemuxingIoHandler; +import org.apache.mina.handler.demux.MessageHandler; +import org.apache.mina.util.SessionLog; + +import org.springframework.beans.factory.InitializingBean; + +import com.eactive.eai.rms.client.handler.IMessageHandler; + +/** + * The Class UdpClientSessionHandler. + *
      + *
    • 1. Function :EAI Framework으로 부터 송신하는 UDP/IP의 SessionHandler입니다.
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.6 $ + */ +public class UdpClientSessionHandler extends DemuxingIoHandler implements + InitializingBean { + + public UdpClientSessionHandler(List handlers) { + for (IMessageHandler handler : handlers) { + addMessageHandler(handler.targetClass(), (MessageHandler) handler); + } + } + + /* (non-Javadoc) + * @see org.apache.mina.common.IoHandlerAdapter#sessionOpened(org.apache.mina.common.IoSession) + */ + @Override + public void sessionOpened(IoSession session) { + } + + /* (non-Javadoc) + * @see org.apache.mina.common.IoHandlerAdapter#messageSent(org.apache.mina.common.IoSession, java.lang.Object) + */ + @Override + public void messageSent(IoSession session, Object message) throws Exception { + if (SessionLog.isDebugEnabled(session)) { + SessionLog.debug(session, "message : " + message + "\n" + session); + } + } + + /* (non-Javadoc) + * @see org.apache.mina.common.IoHandlerAdapter#exceptionCaught(org.apache.mina.common.IoSession, java.lang.Throwable) + */ + @Override + public void exceptionCaught(IoSession session, Throwable cause) { + if (SessionLog.isDebugEnabled(session)) { + SessionLog.debug(session, "exceptionCaught", cause); + } + } + + /* (non-Javadoc) + * @see org.apache.mina.common.IoHandlerAdapter#sessionClosed(org.apache.mina.common.IoSession) + */ + @Override + public void sessionClosed(IoSession session) throws Exception { + } + + public void afterPropertiesSet() throws Exception { + } + +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/agent/AbstractScheduledAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/AbstractScheduledAgent.java new file mode 100644 index 0000000..14ed179 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/AbstractScheduledAgent.java @@ -0,0 +1,32 @@ +package com.eactive.eai.rms.client.agent; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * The Interface AbstractScheduledAgent. + * + * + *
      + *
    • 1. Function : 지정된 시간, 주기로 실행 되는 모든 작업에 대한 상위 인터페이스 입니다.
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.2 $ + */ +public abstract class AbstractScheduledAgent implements Runnable, + ApplicationContextAware { + /** F/W logger. */ + protected static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + ApplicationContext applicationContext; + + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + this.applicationContext = applicationContext; + + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/AdaptersAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/AdaptersAgent.java new file mode 100644 index 0000000..a800316 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/AdaptersAgent.java @@ -0,0 +1,381 @@ +/** + * + */ +package com.eactive.eai.rms.client.agent; + +import java.util.Arrays; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Iterator; + +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.adapter.AdapterVO; +import com.eactive.eai.common.server.EAIServerManager; +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.dao.AgentAdapterDAO; +import com.eactive.eai.rms.onl.vo.AdaptersVO; + +/** + * @author cyyun + * + */ +public class AdaptersAgent extends AbstractScheduledAgent { + + private SocketClient socketClient; + private final int maxBufferSize = 1024*3; //어뎁터 모니터링 maxBufferSize 이상이면 모니터링 하지 않음 UDP Buffer 문제 + private AgentAdapterDAO agentAdapterDao; + + /* + * (non-Javadoc) + * + * @see java.lang.Runnable#run() + */ + public void run() { + AdaptersVO adaptersVO = (AdaptersVO) applicationContext.getBean("adaptersVO"); + initAdapter( adaptersVO ); + checkAdapter( adaptersVO ); + + socketClient.send(adaptersVO); + + logger.debug("SEND AdaptersAgent : " + adaptersVO ); + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + public void setAgentAdapterDao(AgentAdapterDAO agentAdapterDao){ + this.agentAdapterDao = agentAdapterDao; + } + + public AdaptersVO getAdapterInfo() { + AdaptersVO adapter = new AdaptersVO(); + + initAdapter(adapter); + checkAdapter(adapter); + + return adapter; + } + + + @SuppressWarnings("unchecked") + public void initAdapter(AdaptersVO adapter) { + // get Adapter manager + AdapterManager manager = AdapterManager.getInstance(); + + // get Adapter group list + HashMap voMap = manager.getAllAdapterGroupVO(); + + Iterator it = voMap.keySet().iterator(); + + String[] groupNames = new String[voMap.size()]; + + for (int i = 0; it.hasNext(); i++) { + groupNames[i] = (String) it.next(); + } + + Arrays.sort(groupNames); + + //송신하는 서버의 정보 + EAIServerManager serManager = EAIServerManager.getInstance(); + String localServName = serManager.getLocalServerName(); + adapter.setDisconAdaptersGroup(localServName); + + //------------------------------------------ + // 어뎁터 검색 조건에 의해 모니터링 제외 대상을 산정 - 2012.06.14 Edited by Chaesh + //------------------------------------------ + HashMap monitorDisableMap = new HashMap(); + try { + monitorDisableMap = agentAdapterDao.getMonitorUseNoAdapterList(); + } + catch(Exception ex) { + logger.error("adapterMonitorPage.jsp - getMonitorUseAdapterList AdapterGroup Select Error. Skip "); + } + //------------------------------------------ + // 시간 조건에 의해 모니터링 제외 대상을 산정 - 2012.06.14 Edited by Chaesh + //------------------------------------------ + HashMap monitorTimeConditionMap = new HashMap(); + try { + monitorTimeConditionMap = agentAdapterDao.getMonitorTimeConditionAdapterList(); + } + catch(Exception ex) { + logger.error("adapterMonitorPage.jsp - getMonitorUseAdapterList AdapterGroup Select Error. Skip "); + } + //------------------------------------------ + + Calendar cal = Calendar.getInstance(); + int weekCount = cal.get(Calendar.DAY_OF_WEEK); + + // 20190214 dhlee + // BugFix : 11시 1분의 경우 : 111 -> 1101 +// String timeCtnt = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)) + String.valueOf(cal.get(Calendar.MINUTE)); + + String timeCtnt = String.format("%02d",cal.get(Calendar.HOUR_OF_DAY)) + + String.format("%02d", cal.get(Calendar.MINUTE)); + + for (int i = 0; i < groupNames.length; i++) { + + // get Adapter group value + AdapterGroupVO gvo = manager.getAdapterGroupVO(groupNames[i]); + Iterator it2 = null; + + //------------------------------------------ + // 모니터링 제외 N 어댑터 SKIP. - 2012.06.14 + //------------------------------------------ + if(monitorDisableMap !=null && monitorDisableMap.size() > 0) { + if(monitorDisableMap.get(groupNames[i]) != null) { + continue; + } + } + //------------------------------------------ + // 모니터링 시간 조건 체크 - 2012.06.14 + //------------------------------------------ + if(monitorTimeConditionMap !=null && monitorTimeConditionMap.size() > 0) { + String conditionString = (String) monitorTimeConditionMap.get(groupNames[i]); + if( conditionString != null) { + try { + String[] ctntTemp = conditionString.split(","); + if ( ctntTemp[0].equals("Y") ) { + if ( ctntTemp[2].compareTo(timeCtnt) > 0 || ctntTemp[3].compareTo(timeCtnt) < 0) { + continue; + } + if ( ctntTemp[1].equals("WEEKDAY") ) { + switch ( weekCount ) { + case 1 : + case 7 : + continue; + default : + ; + } + } + } + } catch (Exception e){ + logger.error("Monitoring codition code parse Error - Plz check the rule.",e); + } + } + } + //------------------------------------------ + + if (gvo == null) + continue; + + // get Adapter list + it2 = gvo.getAdapters(); + + for (int j = 0; it2.hasNext(); j++) { + + // get Adapter value + AdapterVO vo = (AdapterVO) it2.next(); + + if (vo == null) + continue; + + // total + adapter.total[0]++; + if (vo.isStarted()) + adapter.total[1]++; + else + adapter.total[2]++; + + if (("SNA").equals(gvo.getType())) { + adapter.sna[0]++; + if (vo.isStatus()) + adapter.sna[1]++; + else + adapter.sna[2]++; + } else if (("SOC").equals(gvo.getType())) { + adapter.socket[0]++; + if (vo.isStatus()) + adapter.socket[1]++; + else + adapter.socket[2]++; + } else if (("NET").equals(gvo.getType())) { + adapter.socket2[0]++; + + if (vo.isStatus()) + adapter.socket2[1]++; + else { + adapter.socket2[2]++; + //Status 가 false 상태은 어뎁터는 , 로 엮어서 RMS에 송신 + if ( adapter.getDisconAdaptersGroup().length() < maxBufferSize ) + adapter.setDisconAdaptersGroup(adapter.getDisconAdaptersGroup() + "," + vo.getAdapterGroupName()); + } + } else if (("WTC").equals(gvo.getType())) { + adapter.tuxedo[0]++; + if (vo.isStatus()) + adapter.tuxedo[1]++; + else + adapter.tuxedo[2]++; + } else if (("IMQ").equals(gvo.getType())) { + adapter.mq[0]++; + if (vo.isStatus()) + adapter.mq[1]++; + else + adapter.mq[2]++; + } else if (("HTT").equals(gvo.getType()) || ("RST").equals(gvo.getType())) { + adapter.http[0]++; + if (vo.isStatus()) + adapter.http[1]++; + else + adapter.http[2]++; + } else if (("EJB").equals(gvo.getType())) { + adapter.ejb[0]++; + if (vo.isStatus()) + adapter.ejb[1]++; + else + adapter.ejb[2]++; + } + + } // end of for(j) + + } // end of for(i) + } + + public void checkAdapter(AdaptersVO adapter) { + + if ((adapter.sna[0] == 0) || (adapter.sna[1] == 0)) + adapter.sna[3] = 0; + else if ((adapter.sna[2] == 0)) + adapter.sna[3] = 2; + else if ((adapter.sna[2] > 0)) + adapter.sna[3] = 1; + + // SOCKET + if ((adapter.socket[0] == 0) || (adapter.socket[1] == 0)) + adapter.socket[3] = 0; + else if ((adapter.socket[2] == 0)) + adapter.socket[3] = 2; + else if ((adapter.socket[2] > 0)) + adapter.socket[3] = 1; + + // SOCKET2 + if ((adapter.socket2[0] == 0) || (adapter.socket2[1] == 0)) + adapter.socket2[3] = 0; + else if ((adapter.socket2[2] == 0)) + adapter.socket2[3] = 2; + else if ((adapter.socket2[2] > 0)) + adapter.socket2[3] = 1; + + // TUXEDO + if ((adapter.tuxedo[0] == 0) || (adapter.tuxedo[1] == 0)) + adapter.tuxedo[3] = 0; + else if ((adapter.tuxedo[2] == 0)) + adapter.tuxedo[3] = 2; + else if ((adapter.tuxedo[2] > 0)) + adapter.tuxedo[3] = 1; + + // MQseries + if ((adapter.mq[0] == 0) || (adapter.mq[1] == 0)) + adapter.mq[3] = 0; + else if ((adapter.mq[2] == 0)) + adapter.mq[3] = 2; + else if ((adapter.mq[2] > 0)) + adapter.mq[3] = 1; + + // HTTP + if ((adapter.http[0] == 0) || (adapter.http[1] == 0)) + adapter.http[3] = 0; + else if ((adapter.http[2] == 0)) + adapter.http[3] = 2; + else if ((adapter.http[2] > 0)) + adapter.http[3] = 1; + + // EJB + if ((adapter.ejb[0] == 0) || (adapter.ejb[1] == 0)) + adapter.ejb[3] = 0; + else if ((adapter.ejb[2] == 0)) + adapter.ejb[3] = 2; + else if ((adapter.ejb[2] > 0)) + adapter.ejb[3] = 1; + + // TOTAL + // 1. 에러가 포함되었으면 => 에러 + // 2. 부분정상 이 포함되었으면 => 부분정상 + // 3. 전체 정상 이면 => 전체정상 + if (adapter.sna[3] == 0 || adapter.socket[3] == 0 + || adapter.socket2[3] == 0 || adapter.tuxedo[3] == 0 + || adapter.mq[3] == 0 || adapter.http[3] == 0 + || adapter.ejb[3] == 0) { + adapter.total[3] = 0; + } else if (adapter.sna[3] == 1 || adapter.socket[3] == 1 + || adapter.socket2[3] == 1 || adapter.tuxedo[3] == 1 + || adapter.mq[3] == 1 || adapter.http[3] == 1 + || adapter.ejb[3] == 1) { + adapter.total[3] = 1; + } else { + adapter.total[3] = 2; + } + + //-------------------------------------- + // 등록된 어댑터가 없는 경우 3으로 설정 + //-------------------------------------- + if(adapter.sna [0] == 0 ) adapter.sna[3] = 3 ; + if(adapter.socket [0] == 0 ) adapter.socket[3] = 3 ; + if(adapter.socket2 [0] == 0 ) adapter.socket2[3] = 3 ; + if(adapter.mq [0] == 0 ) adapter.mq[3] = 3 ; + if(adapter.http [0] == 0 ) adapter.http[3] = 3 ; + if(adapter.ejb [0] == 0 ) adapter.ejb[3] = 3 ; + if(adapter.tuxedo [0] == 0 ) adapter.tuxedo[3] = 3 ; + //-------------------------------------- + } + + + + +// private HashMap getDisabledAdapterList() throws Exception { +// Connection conn = null; +// Statement stmt = null; +// ResultSet rs = null; +// HashMap disabledMap = new HashMap(); +// +// StringBuffer sb_sql = new StringBuffer(); +// +// sb_sql.append(" select AdptrBzwkGroupName, EAISevrDstcd \n"); +// sb_sql.append(" from "+ Keys.TABLE_OWNER + "TSEAIAD01 \n"); +// sb_sql.append(" where EAISevrDstcd IN ( '6', '7', '8', '9' ) \n"); +// +// try { +// conn = getConnection(); +// stmt = conn.createStatement(); +// stmt.execute(sb_sql.toString()); +// rs = stmt.getResultSet(); +// +// +// while(rs.next()) { +// disabledMap.put(rs.getString(1),rs.getString(2)); +// } +// +// return disabledMap; +// } +// catch(Exception e) { +// logger.error(e); +// throw e; +// } +// finally { +// try { +// if(rs != null) rs.close(); +// if(stmt != null) stmt.close(); +// if(conn != null) conn.close(); +// } +// catch (SQLException sqle) { +// logger.error("SQLException was thrown: " + sqle.getMessage(),sqle); +// } +// } +// } + + + + +// public static void main(String[] args) { +// Calendar cal = Calendar.getInstance(); +// int weekCount = cal.get(Calendar.DAY_OF_WEEK); +// String timeCtnt = String.format("%02d",cal.get(Calendar.HOUR_OF_DAY)) +// + String.format("%02d", cal.get(Calendar.MINUTE)); +// +// String timeCtnt2 = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)) + String.valueOf(cal.get(Calendar.MINUTE)); +// +// System.out.println(weekCount); +// System.out.println(timeCtnt); +// System.out.println(timeCtnt2); +// } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/AdaptersStatusAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/AdaptersStatusAgent.java new file mode 100644 index 0000000..f900b90 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/AdaptersStatusAgent.java @@ -0,0 +1,51 @@ +package com.eactive.eai.rms.client.agent; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; + +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.onl.vo.AdaptersStatusVO; + +public class AdaptersStatusAgent extends AbstractScheduledAgent { + + private SocketClient socketClient; + + public void run() { + AdaptersStatusVO adaptersStatusVO = (AdaptersStatusVO) applicationContext.getBean("adaptersStatusVO"); + setAdapters(adaptersStatusVO); + socketClient.send(adaptersStatusVO); + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + public AdaptersStatusVO getAdapterStatusInfo() { + AdaptersStatusVO adaptersStatusVO = new AdaptersStatusVO(); + setAdapters(adaptersStatusVO); + return adaptersStatusVO; + } + + public void setAdapters(AdaptersStatusVO adapterStatus) { + AdapterManager manager = AdapterManager.getInstance(); + HashMap voMap = manager.getAllAdapterGroupVO(); + + Iterator it = voMap.keySet().iterator(); + + String[] groupNames = new String[voMap.size()]; + + for (int i = 0; it.hasNext(); i++) { + groupNames[i] = it.next(); + } + + Arrays.sort(groupNames); + + for (int i = 0; i < groupNames.length; i++) { + AdapterGroupVO gvo = manager.getAdapterGroupVO(groupNames[i]); + adapterStatus.setAdapter(groupNames[i], gvo.isAlive()); + } + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/EaiEngineStatusAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/EaiEngineStatusAgent.java new file mode 100644 index 0000000..138fa87 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/EaiEngineStatusAgent.java @@ -0,0 +1,67 @@ +package com.eactive.eai.rms.client.agent; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.EaiEngineStatusService; +import com.eactive.eai.rms.client.service.HostStatusService; +import com.eactive.eai.rms.onl.vo.EAIEngineStatusVo; + +/** + * The Class EaiEngineStatusAgent. + *
      + *
    • 1. Function : Eai Engine의 상태정보를 수집 하는 agent
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.2 $ + */ +public class EaiEngineStatusAgent extends AbstractScheduledAgent { + + private EaiEngineStatusService eaiEngineSingleStatusService; + private SocketClient socketClient; + private HostStatusService hostStatusService; + private RmsProperties rmsProperties; + + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + public void run() { + try { + + EAIEngineStatusVo vo = eaiEngineSingleStatusService.getEAIEngineStatus(); + + String path = rmsProperties.getStringProperty(RmsProperties.JMS_DISK_SPACE_PATH); + + int percentage = hostStatusService.getDiskPercentage(path); + + vo.setJmsFileStoreUseAge(percentage); + + socketClient.send(vo); + logger.debug("SEND EaiEngineStatusAgent : " + vo ); + } catch (Exception e) { + logger.error(e.getMessage(),e); + } + } + + public void setEaiEngineSingleStatusService( + EaiEngineStatusService eaiEngineSingleStatusService) { + this.eaiEngineSingleStatusService = eaiEngineSingleStatusService; + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + public void setHostStatusService(HostStatusService hostStatusService) { + this.hostStatusService = hostStatusService; + } + + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/HostStatusAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/HostStatusAgent.java new file mode 100644 index 0000000..edfe350 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/HostStatusAgent.java @@ -0,0 +1,47 @@ +package com.eactive.eai.rms.client.agent; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.HostStatusService; +import com.eactive.eai.rms.onl.vo.HostStatusVo; + +public class HostStatusAgent extends AbstractScheduledAgent { + + private HostStatusService hostStatusService; + private RmsProperties rmsProperties; + private SocketClient socketClient; + + public void run() { + + try { + + String path = rmsProperties.getStringProperty(RmsProperties.DISK_SPACE_PATH, "/fseai"); + + HostStatusVo hostStatusVo = (HostStatusVo) applicationContext.getBean("hostStatusVo"); + + hostStatusVo.setCpu(hostStatusService.getCpuPercentage()); + hostStatusVo.setMemory(hostStatusService.getMemoryPercentage()); + hostStatusVo.setDisk(hostStatusService.getDiskPercentage(path)); + + socketClient.send(hostStatusVo); + logger.debug("SEND HostStatusAgent : " + hostStatusVo ); + } catch (Exception e) { + logger.warn(this, e); + } + + } + + public void setHostStatusService(HostStatusService hostStatusService) { + this.hostStatusService = hostStatusService; + } + + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/ItsmMonitorAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/ItsmMonitorAgent.java new file mode 100644 index 0000000..dcf56da --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/ItsmMonitorAgent.java @@ -0,0 +1,103 @@ +package com.eactive.eai.rms.client.agent; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.HostStatusService; +import com.eactive.eai.rms.onl.vo.HostStatusVo; +import com.eactive.eai.rms.onl.vo.ItsmVo; + +public class ItsmMonitorAgent extends AbstractScheduledAgent { + + private HostStatusService hostStatusService; + private RmsProperties rmsProperties; + private SocketClient socketClient; + + private HostStatusVo hostStatusVo; + + public void run() { + // ITSM 에 전송하기 위해 추가로 수집해야 할 리소스 + // Network I/O, Disk swap + +// ItsmVo itsmVo = (ItsmVo) applicationContext.getBean("itsmVo"); +// +// try { +// String cmd = rmsProperties.getStringProperty( +// RmsProperties.ITSM_NET_CMD, "/fsapp/eai/rms_util/nettot"); +// String tmp[] = hostStatusService.getInOutBps(cmd).split(","); +// if (logger.isDebugEnabled()) { +// if (tmp == null || "".equals(tmp)) { +// logger.debug("hostStatusService.getInOutBps() returned null"); +// } else { +// for (int i = 0; i < tmp.length; i++) { +// logger.debug(tmp[i]); +// } +// } +// } +// +// if (tmp.length >= 2) { +// itsmVo.setIn(tmp[0]); +// itsmVo.setOut(tmp[1]); +// } +// +// cmd = rmsProperties.getStringProperty(RmsProperties.ITSM_DISK_CMD, +// "/fsapp/eai/rms_util/disktot"); +// String tmp2 = hostStatusService.getSwapUsage(cmd); +// if (logger.isDebugEnabled()) { +// if (tmp2 == null || "".equals(tmp2)) { +// logger.debug("hostStatusService.getSwapSize() returned null"); +// } else { +// logger.debug(cmd + " : result=" + tmp2); +// } +// } +// +// if (tmp2 != null && !tmp2.equals("")) { +// itsmVo.setSwap(tmp2); // 실제는 디스크 SWAP 사용율 이다. ( usage % ) +// } +// +// itsmVo.setTime(null); // use default +// +// itsmVo.setCpu("" + hostStatusVo.getCpu()); +// itsmVo.setDisk("" + hostStatusVo.getDisk()); +// itsmVo.setMemory("" + hostStatusVo.getMemory()); +// +// socketClient.send(itsmVo); +// logger.debug("SEND ItsmMonitorAgent : " + itsmVo ); +// } catch (Exception e) { +// //e.printStackTrace(); +// logger.error("RMS : (rms_client) Exception !!!",e); +// } +// +// if (logger.isDebugEnabled()) { +// logger.debug(itsmVo.toString()); +// } + } + + /** + * @param hostStatusService the hostStatusService to set + */ + public void setHostStatusService(HostStatusService hostStatusService) { + this.hostStatusService = hostStatusService; + } + + /** + * @param rmsProperties the rmsProperties to set + */ + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + /** + * @param socketClient the socketClient to set + */ + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + /** + * @param hostStatusVo the hostStatusVo to set + */ + public void setHostStatusVo(HostStatusVo hostStatusVo) { + this.hostStatusVo = hostStatusVo; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/JmsFileStoreAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/JmsFileStoreAgent.java new file mode 100644 index 0000000..4ad51f1 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/JmsFileStoreAgent.java @@ -0,0 +1,67 @@ +package com.eactive.eai.rms.client.agent; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.HostStatusService; +import com.eactive.eai.rms.onl.vo.EAIEngineStatusVo; + +/** + * The Class JmsFileStoreAgent. + *
      + *
    • 1. Function :
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: + * @version : $Revision: 1.4 $ + */ +public class JmsFileStoreAgent extends AbstractScheduledAgent { + + /** The host status service. */ + private HostStatusService hostStatusService; + + /** The rms properties. */ + private RmsProperties rmsProperties; + + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + public void run() { + try {String osName = System.getProperty("os.name", ""); + if(StringUtils.contains(osName.toLowerCase(), "win")) { + logger.debug("OS "+osName+ " is skip to check status"); + return; + } + EAIEngineStatusVo vo = (EAIEngineStatusVo) applicationContext.getBean("eaiEngineStatusVo"); + + String path = rmsProperties.getStringProperty(RmsProperties.JMS_DISK_SPACE_PATH); + + int percentage = hostStatusService.getDiskPercentage(path); + + vo.setJmsFileStoreUseAge(percentage); + } catch (Exception e) { + logger.warn(e.getMessage()); + } + } + + /** + * Sets the host status service. + * + * @param hostStatusService the new host status service + */ + public void setHostStatusService(HostStatusService hostStatusService) { + this.hostStatusService = hostStatusService; + } + + /** + * Sets the rms properties. + * + * @param rmsProperties the new rms properties + */ + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/JmsQueueAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/JmsQueueAgent.java new file mode 100644 index 0000000..a1952c6 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/JmsQueueAgent.java @@ -0,0 +1,85 @@ +package com.eactive.eai.rms.client.agent; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Properties; + +import com.eactive.eai.common.util.ContainerUtil; +import com.eactive.eai.env.ElinkConfig; +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.JMXMonitoring; +import com.eactive.eai.rms.client.service.JMXMonitoringFactory; +//import com.eactive.eai.rms.client.service.SingleQueueMonitoring; +//import com.eactive.eai.rms.client.service.SingleServerMonitoring; +import com.eactive.eai.rms.onl.vo.JmsMonitorVo; + +public class JmsQueueAgent extends AbstractScheduledAgent { + + /** The socket client. */ + private SocketClient socketClient = null; + + /** The RMS Properties */ + private RmsProperties rmsProperties; + + private Properties adminClientProperties; + + public void setAdminClientProperties(Properties adminClientProperties) { + this.adminClientProperties = adminClientProperties; + } + + @SuppressWarnings("unchecked") + public void run() { + logger.debug("JmsQueueAgent "); + JmsMonitorVo vo = null ; + try { + vo = (JmsMonitorVo) applicationContext.getBean("jmsMonitorVo"); + if( vo == null ) { + logger.error("JmsQueueAgent - Can't get bean => jmsMonitorVo"); + return ; + } + + HashMap map = getLocalQueueInfo(); + if( map != null && !map.isEmpty() ) { + Iterator it = map.keySet().iterator(); + while( it.hasNext() ) { + String name = (String)it.next(); + String info[] = (String[])map.get(name); + + if(logger.isDebug()) logger.debug("JmsQueueAgent - Queue Name => "+name); + + vo.setUdpQueueName( name ); + vo.setUdpInfo( info ); + + socketClient.send(vo); + logger.debug("SEND JmsQueueAgent : " + vo ); + } + } + } catch ( Exception e ) { + logger.error(e.getMessage()); + } + } + + public HashMap getLocalQueueInfo() throws Exception{ + + String instName = rmsProperties.getStringProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + JMXMonitoring monitoring = JMXMonitoringFactory.createQueueMonitoring(ContainerUtil.get()); + if (monitoring == null) return new HashMap(); + monitoring.init(this.adminClientProperties); + return (HashMap)monitoring.getState(instName); + + } + + public static void main(String[] args) throws Exception { + JmsQueueAgent s = new JmsQueueAgent(); + s.run(); + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/agent/SmsAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/SmsAgent.java new file mode 100644 index 0000000..2541c50 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/SmsAgent.java @@ -0,0 +1,176 @@ +package com.eactive.eai.rms.client.agent; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.LinkedList; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.onl.vo.SmsVO; + +import org.apache.mina.common.ByteBuffer; + +/** + * The Class SmsAgent. + *
      + *
    • 1. Function : SMS내용을 정해진 주기 마다 RMS 서버로 전송 합니다.
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.8 $ + */ +public class SmsAgent extends AbstractScheduledAgent { + + private SocketClient socketClient = null; + private RmsProperties rmsProperties; + /** + * sms log data format + * 월일 시간[건수]인스턴스 메시지 + * 1103 13:56:58.715[1]mcc11 HTTP호출에러|MUTMIAS00000170S1 + */ + public void run() { + File logFile = null; + RandomAccessFile raf = null; + FileChannel fileChannel = null; + ByteBuffer buffer = null; + SmsVO smsVO = null; + try { + int maxLine = rmsProperties.getIntProperty( + RmsProperties.SMS_AGENT_MAXLINE, 1); + + String DEFAULT_LOG_PATH = rmsProperties.getStringProperty( + RmsProperties.DEFAULT_LOG_PATH, "/fslog/eai/"); + String instanceName = rmsProperties + .getStringProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + String SMS_LOG_FILE = rmsProperties.getStringProperty(RmsProperties.SMS_LOG_FILE, "sms.log"); + String SMS_LOG_FILE_ENCODING = rmsProperties.getStringProperty(RmsProperties.SMS_LOG_FILE_ENCODE, "UTF-8"); + + int bufferSize = maxLine * 100; + + // 마지막 5라인만 보낸다. + logFile = new File(DEFAULT_LOG_PATH + instanceName + "/" + + SMS_LOG_FILE); + raf = new RandomAccessFile(logFile, "r"); + fileChannel = raf.getChannel(); + buffer = ByteBuffer.allocate(bufferSize); + + if (raf.length() <= bufferSize) { + // bufferSize 바이트 보다 작으면 + fileChannel.read(buffer.buf()); + } else { + // bufferSize 바이트 보다 크면 뒤에서 부터 bufferSize 바이트만 읽는다. + fileChannel.read(buffer.buf(), raf.length() - bufferSize); + buffer.flip(); + String searchString = System.getProperty("line.separator"); + int position = findStringPosition(buffer, searchString, SMS_LOG_FILE_ENCODING); + if (position != -1) { + buffer.position(position + searchString.length() ); + buffer.compact(); + } + } + + buffer.flip(); + + //String text = buffer.getString(Charset.defaultCharset().newDecoder()); + String text = buffer.getString(Charset.forName(SMS_LOG_FILE_ENCODING).newDecoder()); + + String[] texts = text.split(System.lineSeparator()); + + smsVO = (SmsVO) applicationContext.getBean("smsVo"); + LinkedList list = new LinkedList(); + + int currentLine = 0; + for (int i = texts.length - 1; i >= 0 && currentLine < maxLine; i--) { + currentLine++; + if (logger.isDebugEnabled()) { + logger.debug(texts[i]); + } + + if (texts[i] != null && !texts[i].startsWith("[")) { + list.addLast(texts[i]); + } + } + + smsVO.setMessage(list); + + socketClient.send(smsVO); + logger.debug("SEND SmsAgent : " + smsVO ); + + } catch (FileNotFoundException fe) { + sendFileNotFoundMessage(logFile); + } catch (Exception e) { + logger.error("SMS 메세지를 수집 하는 중 에러가 발생 하였습니다. ", e); + } finally { + if (buffer != null) { + buffer.release(); + } + + if (fileChannel != null) { + try { + fileChannel.close(); + } catch (IOException e) { + } + } + + if (raf != null) { + try { + raf.close(); + } catch (IOException e) { + } + } + } + } + + private void sendFileNotFoundMessage(File logFile) { + try { + // 0702 00:00:08.371 + SmsVO smsVO = (SmsVO) applicationContext.getBean("smsVo"); + SimpleDateFormat format = new SimpleDateFormat("MMdd HH:mm:ss.SSS"); + ArrayList list = new ArrayList(); + list.add(format.format(new Date()) + "SMS 로그 파일을 찾을 수 없습니다 : " + + logFile.getPath()); + smsVO.setMessage(list); + socketClient.send(smsVO); + } catch (Exception e) { + //e.printStackTrace(); + } + } + + public static void main(String[] args) throws Exception { + SmsAgent s = new SmsAgent(); + s.run(); + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + private int findStringPosition(ByteBuffer buffer, String searchString, String encoding) { + byte[] searchBytes = searchString.getBytes(Charset.forName(encoding)); + for (int i = 0; i < buffer.remaining(); i++) { + boolean found = true; + for (int j = 0; j < searchBytes.length; j++) { + if (buffer.get(i + j) != searchBytes[j]) { + found = false; + break; + } + } + if (found) { + return i; + } + } + return -1; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/TransactionTrackingAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/TransactionTrackingAgent.java new file mode 100644 index 0000000..71c2950 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/TransactionTrackingAgent.java @@ -0,0 +1,116 @@ +package com.eactive.eai.rms.client.agent; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.TimeZone; + +import com.eactive.eai.common.monitor.EAIServiceMonitor; +import com.eactive.eai.common.monitor.MonitorVO; +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.onl.vo.TransactionSendVo; + +/** + * The Class TransactionTrackingAgent. + *
      + *
    • 1. Function :
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: amjang $ + * @version : $Revision: 1.4 $ + */ +public class TransactionTrackingAgent extends AbstractScheduledAgent { + + /** The socket client. */ + private SocketClient socketClient; + + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + public void run() { + EAIServiceMonitor monitor = EAIServiceMonitor.getInstance(); + sendTransactionOriginData( monitor ); + } + + /** + * + * @param monitor F/W 의 모니터링 정보 + */ + private void sendTransactionOriginData( EAIServiceMonitor monitor ) { + try { + // 2010.01.25 YUN - + // 만일 오늘 날짜와 모니터링 날짜가 다르면 (거래건수 초기화 수행중 ) + // 데이터를 전송하지 않는다. + // 주의 : Framework.jar 파일의 버전에 추가된 함수를 사용하므로, 함께 배포되어야 한다. + DateFormat df = new SimpleDateFormat("yyyyMMdd"); + TimeZone tz = TimeZone.getTimeZone("Asia/Seoul"); + df.setTimeZone(tz); + + String today = df.format(new Date()); + String monDate = monitor.getMonitorDate(); + if( ! today.equals(monDate) ) { + logger.debug("DEBUG_sendTransactionOriginData_today | monDate : " + today + "|" + monDate); + return ; + } + + TransactionSendVo sendVo = (TransactionSendVo) applicationContext.getBean("transactionSendVo"); + + String allBwkClsKey[] = monitor.getAllBwkClsKey(); + if(allBwkClsKey == null) { + logger.debug("DEBUG_sendTransactionOriginData_allBwkClsKey_isNull"); + return; // 2011.02.27 가비지에 의한 에러처리 + } + for (int bwkClsCount = 0; bwkClsCount < allBwkClsKey.length; bwkClsCount++) { + // 서비스 코드별 vo 맵 + HashMap voByBwk = monitor.getBwkCls(allBwkClsKey[bwkClsCount]); + if(voByBwk == null) logger.debug("DEBUG_sendTransactionOriginData_voByBwk_isNull"); + if (voByBwk != null) { + for( MonitorVO vo : voByBwk.values() ) { + if(vo == null) { + logger.debug("DEBUG_sendTransactionOriginData_MonitorVO_isNull"); + continue; // 2011.02.27 가비지에 의한 에러처리 + } + + sendVo.setCmd("DATA"); + sendVo.setKey1(allBwkClsKey[bwkClsCount]); + sendVo.setKey2(vo.getEaiServiceCode()); + sendVo.setVo( vo ); + socketClient.send( sendVo ); + + if( logger.isDebugEnabled() ) { + logger.debug( "RMS SEND NEW TRANSACTION(" + sendVo.getCmd() + ":key1=" + sendVo.getKey1() + ", key2=" + sendVo.getKey2()); + } + } + } + } + + // 분할된 데이터 전송이 끝났음을 RMS 서버에 알린다. + if( logger.isDebugEnabled() ) { + logger.debug( "RMS SEND NEW TRANSACTION(END)" ); + } + + // cmd 객체에 모니터링 날짜를 담아서 보낸다. + sendVo.setKey1(monDate); + sendVo.setCmd("END"); + socketClient.send( sendVo ); + + logger.debug("SEND TransactionTrackingAgent : " + sendVo ); + } catch (Exception e) { + logger.error("DEBUG_sendTransactionOriginData_Exception",e); + //e.printStackTrace(); + } + } + + /** + * Sets the socket client. + * + * @param socketClient the new socket client + */ + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/common/AbstractSocketClient.java b/src/main/java/com/eactive/eai/rms/client/common/AbstractSocketClient.java new file mode 100644 index 0000000..ab41d67 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/common/AbstractSocketClient.java @@ -0,0 +1,95 @@ +package com.eactive.eai.rms.client.common; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.onl.vo.MonitorDataVo; + +import org.apache.mina.common.IoConnector; +import org.apache.mina.common.IoConnectorConfig; +import org.apache.mina.common.IoHandler; +import org.apache.mina.common.IoSession; +import org.apache.mina.common.ThreadModel; +import org.apache.mina.filter.codec.ProtocolCodecFactory; + +/** + * The Class AbstractSocketClient. + *
      + *
    • 1. Function :
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: + * @version : $Revision: 1.2 $ + */ +public abstract class AbstractSocketClient implements SocketClient { + + /** The Constant connector. */ + protected IoConnector connector; + + /** The datagram connector config. */ + protected IoConnectorConfig connectorConfig; + + /** The protocol codec factory. */ + protected ProtocolCodecFactory protocolCodecFactory; + + /** The handler. */ + protected IoHandler handler; + + /** The session. */ + protected IoSession session; + + /** The monitoring context. */ + protected RmsProperties rmsProperties; + + /** The thread model. */ + protected ThreadModel threadModel; + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.SocketClient#send(com.eactive.eai.rms.vo.MonitorDataVo) + */ + public abstract void send(MonitorDataVo serializable); + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.SocketClient#destroy() + */ + public abstract void destroy(); + + /** + * Sets the protocol codec factory. + * + * @param protocolCodecFactory the new protocol codec factory + */ + public void setProtocolCodecFactory( + ProtocolCodecFactory protocolCodecFactory) { + this.protocolCodecFactory = protocolCodecFactory; + } + + /** + * Sets the handler. + * + * @param handler the new handler + */ + public void setHandler(IoHandler handler) { + this.handler = handler; + } + + /** + * Sets the rms properties. + * + * @param rmsProperties the new rms properties + */ + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + /** + * Sets the thread model. + * + * @param threadModel the new thread model + */ + public void setThreadModel(ThreadModel threadModel) { + this.threadModel = threadModel; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/MonitoringContextFactory.java b/src/main/java/com/eactive/eai/rms/client/context/MonitoringContextFactory.java new file mode 100644 index 0000000..8027207 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/MonitoringContextFactory.java @@ -0,0 +1,40 @@ +package com.eactive.eai.rms.client.context; + +import com.eactive.eai.common.server.Keys; + +public class MonitoringContextFactory { + + public MonitoringContextFactory() { + } + + public void create() { + String logPathType = System.getProperty(Keys.SERVER_KEY).substring(0,5)+"G"; + System.setProperty("logPathType", logPathType); + RmsContext.getInstance(); + } + + public void create(String[] config) { + String logPathType = System.getProperty(Keys.SERVER_KEY).substring(0,5)+"G"; + System.setProperty("logPathType", logPathType); + RmsContext.getInstance(config); + } + + public void stop() { + RmsContext.getInstance().close();; + } + +// public static void main(String[] args) { +// try { +// Class clazz = Class.forName("com.eactive.eai.rms.client.context.MonitoringContextFactory"); +// +// Object factory = clazz.newInstance(); +// Method method = clazz.getMethod("create"); +// method.invoke(factory); +// +// System.out.println("RMS CLIENT 가 실행 되었습니다. !!!!!"); +// } catch (Throwable e) { +// System.out.println("모니터링 에이전트가 실행 되지 않았습니다.!!!! "); +// //e.printStackTrace(); +// } +// } +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/RmsContext.java b/src/main/java/com/eactive/eai/rms/client/context/RmsContext.java new file mode 100644 index 0000000..ac566bb --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/RmsContext.java @@ -0,0 +1,79 @@ +package com.eactive.eai.rms.client.context; + +import org.springframework.beans.BeansException; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * The Class RmsContext. + *
      + *
    • 1. Function :스프링의 {@link org.springframework.context.support.ClassPathXmlApplicationContext}의 확장 클래스 입니다.
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @see org.springframework.context.support.ClassPathXmlApplicationContext + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.6 $ + */ +public class RmsContext extends ClassPathXmlApplicationContext { + + /** The Constant CONFIGLOCATIONS. */ + private static final String[] CONFIGLOCATIONS = { "com/eactive/eai/rms/client/context/applicationContext-agent.xml" }; + + /** + * The Constructor. + * + * @throws BeansException the beans exception + */ + private RmsContext() throws BeansException { + this(CONFIGLOCATIONS); + } + + /** + * Instantiates a new agent context. + * + * @param configlocations the configlocations + * + * @throws BeansException the beans exception + */ + private RmsContext(String[] configlocations) throws BeansException { + super(configlocations); + } + + /** The ctx. */ + private static RmsContext ctx = null; + + /** + * Gets the single instance of RmsContext. + * + * @return single instance of RmsContext + */ + public static RmsContext getInstance() { + if (ctx == null) { + synchronized (RmsContext.class) { + if (ctx == null) { + ctx = new RmsContext(); + } + } + } + return ctx; + } + + /** + * Gets the single instance of RmsContext. + * + * @param configlocations the configlocations + * + * @return single instance of RmsContext + */ + public static RmsContext getInstance(String[] configlocations) { + if (ctx == null) { + synchronized (RmsContext.class) { + if (ctx == null) { + ctx = new RmsContext(configlocations); + } + } + } + return ctx; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/RmsEnvProperties.java b/src/main/java/com/eactive/eai/rms/client/context/RmsEnvProperties.java new file mode 100644 index 0000000..9f9aff4 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/RmsEnvProperties.java @@ -0,0 +1,47 @@ +package com.eactive.eai.rms.client.context; + +import java.net.InetAddress; +import java.util.Properties; + +public class RmsEnvProperties { + + /** The properties. */ + private Properties properties; + + public void init() throws Exception { + InetAddress inetAddress = InetAddress.getLocalHost(); + String serverIp = inetAddress.getHostAddress(); + this.properties = new Properties(); + this.properties.setProperty(RmsProperties.LOCAL_HOST_IP, serverIp); + if (Boolean.getBoolean("rms.standalone")){ + this.properties.setProperty(RmsProperties.LOCAL_HOST_NAME, System.getProperty("rms.hostname")); + }else{ + this.properties.setProperty(RmsProperties.LOCAL_HOST_NAME, inetAddress.getHostName()); + } + this.properties.setProperty("standalone", String.valueOf(Boolean.getBoolean("rms.standalone"))); + this.properties.putAll(System.getProperties()); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getProperties() + */ + public Properties getProperties() { + return properties; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#refresh() + */ + public void refresh() throws Exception { + init(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#setProperties(java.util.Properties) + */ + public void setProperties(Properties properties) { + this.properties = properties; + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/RmsProperties.java b/src/main/java/com/eactive/eai/rms/client/context/RmsProperties.java new file mode 100644 index 0000000..9838def --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/RmsProperties.java @@ -0,0 +1,173 @@ +package com.eactive.eai.rms.client.context; + +import java.util.Properties; + +import com.eactive.eai.common.server.Keys; +import com.eactive.eai.rms.client.dao.RmsPropertiesDAO; + +public interface RmsProperties { + + /** The Constant LOCAL_MBEAN_SERVER_ID. */ + public static final String LOCAL_MBEAN_SERVER_ID = "LOCAL_MBEAN_SERVER_ID"; + + /** The Constant LOCAL_MBEAN_SERVER_PASSWORD. */ + public static final String LOCAL_MBEAN_SERVER_PASSWORD = "LOCAL_MBEAN_SERVER_PASSWORD"; + + /** The Constant LOCAL_MBEAN_SERVER_PORT. */ + public static final String LOCAL_MBEAN_SERVER_PORT = "LOCAL_MBEAN_SERVER_PORT"; + + /** The Constant LOCAL_MBEAN_SERVER_PORT. */ + public static final String LOCAL_MBEAN_SERVER_IP = "LOCAL_MBEAN_SERVER_IP"; + + /** The Constant LOCAL_HOST_NAME. */ + public static final String LOCAL_HOST_NAME = "LOCAL_HOST_NAME"; + + /** The Constant LOCAL_HOST_IP. */ + public static final String LOCAL_HOST_IP = "LOCAL_HOST_IP"; + + /** The Constant SUBJECT_LOGIN. */ + public static final String SUBJECT_LOGIN = "SUBJECT_LOGIN"; + + /** The Constant JMS_DISK_SPACE_PATH. */ + public static final String JMS_DISK_SPACE_PATH = "JMS_DISK_SPACE_PATH"; + + /** The Constant RMS_SERVER_IP_KEY. RMS UDP SERVER의 접속 아이피 */ + public static final String RMS_SERVER_IP_KEY = "SERVER_IP"; + + /** The Constant RMS_SERVER_PORT_KEY. RMS UDP SERVER의 접속 포트 */ + public static final String RMS_SERVER_PORT_KEY = "SERVER_PORT"; + + /** The Constant EAI_SERVER_INSTANCE_NAME. */ + public static final String EAI_SERVER_INSTANCE_NAME = Keys.SERVER_KEY; + + /** The Constant DISK_SPACE_PATH. */ + public static final String DISK_SPACE_PATH = "DISK_SPACE_PATH"; + + /** The Constant SMS_AGENT_MAXLINE. */ + public static final String SMS_AGENT_MAXLINE = "SMS_AGENT_MAXLINE"; + + /** The Constant DEFAULT_LOG_PATH. */ + public static final String DEFAULT_LOG_PATH = "DEFAULT_LOG_PATH"; + + /** The Constant SMS_LOG_FILE. */ + public static final String SMS_LOG_FILE = "SMS_LOG_FILE"; + + public static final String SMS_LOG_FILE_ENCODE = "SMS_LOG_FILE_ENCODE"; + + /** The Constant ITSM_DISK_CMD. */ + public static final String ITSM_DISK_CMD = "ITSM_DISK_CMD"; + + /** The Constant ITSM_NET_CMD. */ + public static final String ITSM_NET_CMD = "ITSM_NET_CMD"; + + /** + * Inits the. + * + * @throws Exception the exception + */ + public abstract void init() throws Exception; + + /** + * Gets the properties. + * + * @return the properties + */ + public abstract Properties getProperties(); + + /** + * Refresh. + * + * @throws Exception the exception + */ + public abstract void refresh() throws Exception; + + /** + * Sets the properties. + * + * @param properties the new properties + */ + public abstract void setProperties(Properties properties); + + /** + * Sets the rts context dao. + * + * @param rmsPropertiesDAO the new rts context dao + */ + public abstract void setRmsPropertiesDao(RmsPropertiesDAO rmsPropertiesDAO); + + /** + * Gets the string property. + * + * @param propertyName the property name + * + * @return String + */ + public abstract String getStringProperty(String propertyName); + + /** + * Gets the string property. + * + * @param propertyName the property name + * @param defaultString the default string + * + * @return the string property + */ + public abstract String getStringProperty(String propertyName, String defaultString); + + /** + * Gets the int property. + * + * @param propertyName the property name + * + * @return int + */ + public abstract int getIntProperty(String propertyName); + + /** + * Gets the int property. + * + * @param propertyName the property name + * @param defaultInt the default int + * + * @return the int property + */ + public abstract int getIntProperty(String propertyName, int defaultInt); + + /** + * Gets the long property. + * + * @param propertyName the property name + * + * @return int + */ + public abstract long getLongProperty(String propertyName); + + /** + * Gets the long property. + * + * @param propertyName the property name + * @param defaultLong the default long + * + * @return the long property + */ + public abstract long getLongProperty(String propertyName, long defaultLong); + + /** + * Gets the boolean property. + * + * @param propertyName the property name + * + * @return boolean + */ + public abstract boolean getBooleanProperty(String propertyName); + + /** + * Gets the boolean property. + * + * @param propertyName the property name + * @param defaultBoolean the default boolean + * + * @return the boolean property + */ + public abstract boolean getBooleanProperty(String propertyName, boolean defaultBoolean); +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/RmsPropertiesImpl.java b/src/main/java/com/eactive/eai/rms/client/context/RmsPropertiesImpl.java new file mode 100644 index 0000000..62a1085 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/RmsPropertiesImpl.java @@ -0,0 +1,225 @@ +package com.eactive.eai.rms.client.context; + +import java.net.InetAddress; +import java.util.Iterator; +import java.util.Properties; + +import com.eactive.eai.common.server.Keys; +import com.eactive.eai.rms.client.dao.RmsPropertiesDAO; +import com.eactive.eai.rms.client.util.ContainerUtil; + +/** + * The Class RmsPropertiesImpl. + *
      + *
    • 1. Function :모니터링시 필요한 정보를 로딩 한때 이 클래스를 사용 합니다.
    • + *
    • 2. Summary :Monitoring 프로퍼티 그룹과 Monitoring{IP} 형태의 프로퍼티 그룹의 모든 프로퍼티 + * 그리고 {@link System#getProperties()} 에 존재하는 모든 프로퍼티를 로딩 합니다.
    • + *
    • 3. Notification :
    • + *
    + * + * @see com.eactive.eai.rms.client.dao.RmsPropertiesDAO#getProperties(String) + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.10 $ + */ +public class RmsPropertiesImpl implements RmsProperties { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + /** The rms properties dao. */ + private RmsPropertiesDAO rmsPropertiesDAO; + + /** The properties. */ + private Properties properties; + + /** The server ip. */ + private String serverIp; + + /* + * (non-Javadoc) + * + * @see com.eactive.eai.rms.client.context.Test#init() + */ + public void init() throws Exception { + InetAddress inetAddress = InetAddress.getLocalHost(); + serverIp = inetAddress.getHostAddress(); + this.properties = rmsPropertiesDAO.getProperties(); + this.properties.setProperty(LOCAL_HOST_IP, serverIp); + if (Boolean.getBoolean("rms.standalone")){ + this.properties.setProperty(LOCAL_HOST_NAME, System.getProperty("rms.hostname")); + }else{ + this.properties.setProperty(LOCAL_HOST_NAME, inetAddress.getHostName()); + } + this.properties.setProperty("standalone", String.valueOf(Boolean.getBoolean("rms.standalone"))); + this.properties.putAll(System.getProperties()); + this.setLocalMbeanPort(this.properties, System.getProperty(Keys.SERVER_KEY)); + + if (logger.isInfoEnabled()) { + printProperties(); + } + } + + private void setLocalMbeanPort(Properties props, String eaiInstName) { + if (props.getProperty(LOCAL_MBEAN_SERVER_PORT) == null) { + + String port = rmsPropertiesDAO.getLocalMBeanServerPort(); + props.setProperty(LOCAL_MBEAN_SERVER_PORT, port); + } + } + + /** + * Adds the agent infomation for print. + * + * @param sb the sb + * @param text the text + */ + private void addAgentInfomationForPrint(StringBuilder sb, String text) { + sb.append("# ").append(text).append("\n"); + } + + /** + * Adds the agent infomation for print. + * + * @param sb the sb + * @param id the id + * @param value the value + */ + private void addAgentInfomationForPrint(StringBuilder sb, String id, + String value) { + sb.append("# ").append(id).append("\t: ").append(value).append("\n"); + } + + /** + * Adds the line for print. + * + * @param sb the sb + */ + private void addLineForPrint(StringBuilder sb) { + sb.append("###################################").append( + "############################################").append("\n"); + } + + /** + * Prints the system properties. + */ + @SuppressWarnings("unchecked") + private void printProperties() { + + String javaVersion = System.getProperty("java.version"); + String javaVender = System.getProperty("java.vendor"); + String was = ContainerUtil.getString(); + + if (logger.isInfoEnabled()) { + StringBuilder sb = new StringBuilder(1024); + addLineForPrint(sb.append("\n")); + addAgentInfomationForPrint(sb, "MONITORING AGENT_INFOMATION"); + addAgentInfomationForPrint(sb, "VERSION", ""); + addAgentInfomationForPrint(sb, "WAS", was); + addAgentInfomationForPrint(sb, "JDK VENDER", javaVender); + addAgentInfomationForPrint(sb, "JDK VERSION", javaVersion); + addAgentInfomationForPrint(sb, "SERVER IP", serverIp); + addLineForPrint(sb); + logger.info(sb.toString()); + } + + for (Iterator it = properties.keySet().iterator(); it.hasNext();) { + String key = (String) it.next(); + logger.info(key + "=" + properties.getProperty(key)); + } + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getProperties() + */ + public Properties getProperties() { + return properties; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#refresh() + */ + public void refresh() throws Exception { + init(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#setProperties(java.util.Properties) + */ + public void setProperties(Properties properties) { + this.properties = properties; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#setRmsPropertiesDao(com.eactive.eai.rms.client.dao.RmsPropertiesDAO) + */ + public void setRmsPropertiesDao(RmsPropertiesDAO rmsPropertiesDAO) { + this.rmsPropertiesDAO = rmsPropertiesDAO; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getStringProperty(java.lang.String) + */ + public String getStringProperty(String propertyName) { + return properties.getProperty(propertyName); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getStringProperty(java.lang.String, java.lang.String) + */ + public String getStringProperty(String propertyName, String defaultString) { + String value = getStringProperty(propertyName); + return value != null ? value : defaultString; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getIntProperty(java.lang.String) + */ + public int getIntProperty(String propertyName) { + String prop = properties.getProperty(propertyName); + return prop == null ? 0 : new Integer(prop.trim()).intValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getIntProperty(java.lang.String, int) + */ + public int getIntProperty(String propertyName, int defaultInt) { + String prop = properties.getProperty(propertyName); + return prop == null ? defaultInt : new Integer(prop.trim()).intValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getLongProperty(java.lang.String) + */ + public long getLongProperty(String propertyName) { + String prop = properties.getProperty(propertyName); + return prop == null ? 0 : new Long(prop.trim()).longValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getLongProperty(java.lang.String, long) + */ + public long getLongProperty(String propertyName, long defaultLong) { + String prop = properties.getProperty(propertyName); + return prop == null ? defaultLong : new Long(prop.trim()).longValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getBooleanProperty(java.lang.String) + */ + public boolean getBooleanProperty(String propertyName) { + String prop = properties.getProperty(propertyName); + return prop == null ? false : new Boolean(prop.trim()).booleanValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getBooleanProperty(java.lang.String, boolean) + */ + public boolean getBooleanProperty(String propertyName, + boolean defaultBoolean) { + String prop = properties.getProperty(propertyName); + return prop == null ? defaultBoolean : new Boolean(prop.trim()) + .booleanValue(); + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/StandAlone.java b/src/main/java/com/eactive/eai/rms/client/context/StandAlone.java new file mode 100644 index 0000000..4b40a49 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/StandAlone.java @@ -0,0 +1,17 @@ +package com.eactive.eai.rms.client.context; + +public class StandAlone { + + private static final String config = "com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml"; + + public static void main(String[] args) throws Exception { + System.setProperty("inst.Name","EAIDSG_i11"); + System.setProperty("eai.tableowner","INST2"); + System.setProperty("rms.standalone","true"); + System.setProperty("rms.hostname","ieadad01"); + + RmsContext.getInstance(new String[] { config }); +// System.out.println("RMS CLIENT START !!!"); + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/dao/AgentAdapterDAO.java b/src/main/java/com/eactive/eai/rms/client/dao/AgentAdapterDAO.java new file mode 100644 index 0000000..578dd39 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/dao/AgentAdapterDAO.java @@ -0,0 +1,114 @@ +package com.eactive.eai.rms.client.dao; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.springframework.jdbc.core.support.JdbcDaoSupport; + +import com.eactive.eai.common.dao.Keys; +import com.eactive.eai.rms.client.context.RmsProperties; + +/** + *
    + * 1. 기능 : 모니터링 관리 화면의 프로퍼티 관리 화면에서 입력한 내용들을 로딩 합니다. 
    + * 2. 처리 개요 : RMS_PROPS 프로퍼티 그룹과 RMS_PROPS{INSTANCE_NAME} 형태의 프로퍼티 그룹의 모든 프로퍼티를 로딩 합니다. 
    + *     -
    + * 3. 주의사항 : 
    + * 
    + * @author : + * @version : $Revision: 1.10 $ + * @since : rts 1.0 + */ +public class AgentAdapterDAO extends JdbcDaoSupport { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + private String tableOwner = null; + private boolean standalone = false; + private String instanceName = null; + + public AgentAdapterDAO() { + tableOwner = System.getProperty("eai.tableowner"); + standalone = Boolean.getBoolean("rms.standalone"); + + if (standalone) { + try { + instanceName = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + //e.printStackTrace(); + } + } else { + instanceName = System + .getProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + } + + if (logger.isDebugEnabled()) { + logger.debug("CURRENT RMS INSTANCE NAME : " + instanceName); + } + } + + public HashMap getMonitorUseNoAdapterList() throws Exception { + HashMap monitorDisableMap = new HashMap(); + + StringBuffer query = new StringBuffer(); + + query.append(" select AdptrBzwkGroupName, MoniUseYn \n"); + query.append(" from "+ tableOwner + ".TSEAIAD01 \n"); + query.append(" where MoniUseYn = 'N' \n"); + + try { + List adapterList = this.getJdbcTemplate().queryForList(query.toString()); + + if (adapterList != null) { + for (Iterator it = adapterList.iterator(); it.hasNext();) { + Map tmp = (Map) it.next(); + String name = (String) tmp.get("AdptrBzwkGroupName"); + String val = (String) tmp.get("MoniUseYn"); + monitorDisableMap.put(name,val); + } + } + return monitorDisableMap; + } + catch(Exception e) { + logger.error(e.toString(),e); + //e.printStackTrace(); + throw e; + } + } + public HashMap getMonitorTimeConditionAdapterList() throws Exception { + HashMap monitorDisableMap = new HashMap(); + + StringBuffer query = new StringBuffer(); + + query.append(" select AdptrBzwkGroupName, MoniCndnCtnt \n"); + query.append(" from "+ tableOwner + ".TSEAIAD01 \n"); + query.append(" where MoniUseYn = 'Y' and MoniCndnCtnt != '' and MoniCndnCtnt != 'N,EVERY,0000,2359'\n"); + + try { + List adapterList = this.getJdbcTemplate().queryForList(query.toString()); + + if (adapterList != null) { + for (Iterator it = adapterList.iterator(); it.hasNext();) { + Map tmp = (Map) it.next(); + String name = (String) tmp.get("AdptrBzwkGroupName"); + String val = (String) tmp.get("MoniUseYn"); + monitorDisableMap.put(name,val); + } + } + return monitorDisableMap; + } + catch(Exception e) { + logger.error(e.toString(),e); + //e.printStackTrace(); + throw e; + } + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAO.java b/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAO.java new file mode 100644 index 0000000..0780cf5 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAO.java @@ -0,0 +1,22 @@ +package com.eactive.eai.rms.client.dao; + +import java.util.Properties; + +/** + * The Interface RmsPropertiesDAO. + *
      + *
    • 1. Function :모니터링 관리 화면의 프로퍼티 관리 화면에서 입력한 내용들을 로딩 합니다.
    • + *
    • 2. Summary :Monitoring 프로퍼티 그룹과 Monitoring{IP} 형태의 프로퍼티 그룹의 모든 프로퍼티를 로딩 합니다.
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.4 $ + */ +public interface RmsPropertiesDAO { + + public Properties getProperties(); + + public String getLocalMBeanServerPort(); + +} diff --git a/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAOImpl.java b/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAOImpl.java new file mode 100644 index 0000000..1303882 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAOImpl.java @@ -0,0 +1,115 @@ +package com.eactive.eai.rms.client.dao; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.support.JdbcDaoSupport; + +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.util.QueryBuffer; + +/** + *
    + * 1. 기능 : 모니터링 관리 화면의 프로퍼티 관리 화면에서 입력한 내용들을 로딩 합니다. 
    + * 2. 처리 개요 : RMS_PROPS 프로퍼티 그룹과 RMS_PROPS{INSTANCE_NAME} 형태의 프로퍼티 그룹의 모든 프로퍼티를 로딩 합니다. 
    + *     -
    + * 3. 주의사항 : 
    + * 
    + * @author : 박기섭 + * @version : $Revision: 1.10 $ + * @since : rts 1.0 + */ +public class RmsPropertiesDAOImpl extends JdbcDaoSupport implements + RmsPropertiesDAO { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + private String tableOwner = null; + private boolean standalone = false; + private String instanceName = null; + + public RmsPropertiesDAOImpl() { + tableOwner = System.getProperty("eai.tableowner"); + standalone = Boolean.getBoolean("rms.standalone"); + + if (standalone) { + try { + instanceName = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + //e.printStackTrace(); + } + } else { + instanceName = System + .getProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + } + + if (logger.isDebugEnabled()) { + logger.debug("CURRENT RMS INSTANCE NAME : " + instanceName); + } + } + + @SuppressWarnings("unchecked") + public Properties getProperties() { + final Properties properties = new Properties(); + QueryBuffer query = new QueryBuffer(); + + try { + query.append(" SELECT Prpty2Val "); + query.append(" , PrptyName "); + query.append(" FROM " + tableOwner + ".TSEAICM03 "); + query.append(" WHERE PrptyGroupName='RMS_PROPS' "); + + List commonPropertiesList = this.getJdbcTemplate().queryForList( + query.toString()); + + if (commonPropertiesList != null) { + for (Iterator it = commonPropertiesList.iterator(); it + .hasNext();) { + Map tmp = (Map) it.next(); + String name = (String) tmp.get("PrptyName"); + String val = (String) tmp.get("Prpty2Val"); + properties.setProperty(name, val); + } + } + + query.delete(0, query.length()); + + query.append(" SELECT PrptyName "); + query.append(" , Prpty2Val "); + query.append(" FROM " + tableOwner + ".TSEAICM03 "); + query.append(" WHERE PrptyGroupName='RMS_PROPS{"+ instanceName + "}'"); + + List propertiesList = this.getJdbcTemplate().queryForList( + query.toString()); + + if (propertiesList != null) { + for (Iterator it = propertiesList.iterator(); it.hasNext();) { + Map tmp = (Map) it.next(); + String name = (String) tmp.get("PrptyName"); + String val = (String) tmp.get("Prpty2Val"); + properties.setProperty(name, val); + } + } + } catch (DataAccessException e) { + logger.error(e.toString()); + } + return properties; + } + + public String getLocalMBeanServerPort() { + QueryBuffer buffer = new QueryBuffer(); + buffer.append(" SELECT SevrLsnPortName "); + buffer.append(" FROM " + tableOwner + ".TSEAISY02 "); + buffer.append(" WHERE EAISevrInstncName = ? "); + + return (String) this.getJdbcTemplate().queryForObject( + buffer.toString(), new Object[] { instanceName }, String.class); + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/handler/IMessageHandler.java b/src/main/java/com/eactive/eai/rms/client/handler/IMessageHandler.java new file mode 100644 index 0000000..d1290c5 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/handler/IMessageHandler.java @@ -0,0 +1,32 @@ +package com.eactive.eai.rms.client.handler; + +import org.apache.mina.handler.demux.MessageHandler; + +/** + *
      + *
    • 1. Function : IMessageHandler는 socket으로 부터 수신 받은 + * 객체에 대한 Handler의 인터페이스 입니다.
    • + *
    • 2. Summary :a) 객체가 수신 되었을 때 인터페이스를 구현한 객체가 처리할 + * {@link IMessageHandler#targetClass()}를 구현 한다.
      + * b) /WEB-INF/applicationContext-udp.xml 의 "protocolHandler" ({@link UdpServerSessionHandler}}) + * 에 등록 한다.
      + * c) 객체를 처리 할 로직이 들어가는 {@link MessageHandler#messageReceived(org.apache.mina.common.IoSession, Object)} + * 메서드를 을 구현 한다. + *
    • + *
    • 3. Notification :
    • + *
    + * + * @author $Author: 박기섭 $ + * @version $Revision: 1.4 $ + */ +public interface IMessageHandler extends + MessageHandler { + + /** + * 처리 대상이 되는 클래스를 리턴. + * + * @return Class + */ + public Class targetClass(); + +} diff --git a/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurationCommandHandler.java b/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurationCommandHandler.java new file mode 100644 index 0000000..6ba55e7 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurationCommandHandler.java @@ -0,0 +1,54 @@ +package com.eactive.eai.rms.client.handler;//package com.eactive.eai.rms.client.handler; +// +//import com.eactive.eai.rms.onl.vo.LogConfigurationCommand; +// +//import kr.co.kpl.org.apache.log4j.Logger; +//import org.apache.mina.common.IoSession; +// +//public class LogConfigurationCommandHandler implements IMessageHandler { +// +// private static final Logger logger = Logger.getLogger(LogConfigurationCommandHandler.class); +// +// public Class targetClass() { +// return LogConfigurationCommand.class; +// } +// +// public void messageReceived(IoSession session, Object message) +// throws Exception { +// +// LogConfigurationCommand command = (LogConfigurationCommand) message; +// +// LogConfigurer configurer = new LogConfigurer(); +// +// try { +// switch (command.getCommand()) { +// case LogConfigurationCommand.VIEW_COMMAND: +// command.setCategoryMap(configurer.view()); +// break; +// case LogConfigurationCommand.EDIT_COMMAND: +// configurer.edit(command.getLogCategorys(), +// command.getLogCategoryLevels(), +// command.getLogDetailCategorys(), +// command.getLogDetailCategoryLevels(), +// command.getForeceLevel(), command.getForceDetailLevel()); +// break; +// case LogConfigurationCommand.DETAIL_COMMAND: +// command.setCategoryMap(configurer.detail(command.getLogCategory())); +// break; +// case LogConfigurationCommand.NEW_LOGGER_COMMAND: +// configurer.newLogger(command.getLogCategory()); +// break; +// case 0: +// break; +// } +// +// command.setCommand(LogConfigurationCommand.PROCESS_OK_COMMAND); +// } catch (Exception e) { +// logger.error(this, e); +// } +// +// session.write(command); +// +// } +// +//} diff --git a/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurer.java b/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurer.java new file mode 100644 index 0000000..b6d2666 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurer.java @@ -0,0 +1,130 @@ +package com.eactive.eai.rms.client.handler;//package com.eactive.eai.rms.client.handler; +// +//import java.util.Enumeration; +//import java.util.Map; +//import java.util.SortedMap; +//import java.util.TreeMap; +// +//import kr.co.kpl.org.apache.log4j.Category; +//import kr.co.kpl.org.apache.log4j.Level; +//import kr.co.kpl.org.apache.log4j.Logger; +// +//public class LogConfigurer { +// +// @SuppressWarnings("unchecked") +// public Map view() { +// Enumeration e = Logger.getRootLogger() +// .getLoggerRepository() +// .getCurrentLoggers(); +// +// SortedMap categorys = new TreeMap(); +// +// for (; e.hasMoreElements();) { +// Logger x = (Logger) e.nextElement(); +// Category parent = x.getParent(); +// String parentName = parent.getName(); +// Level parentLevel = parent.getLevel(); +// +// if (parentLevel == null) { +// parentLevel = Level.ERROR; +// } +// +// categorys.put(parentName, parentLevel.toInt()); +// } +// return categorys; +// } +// +// public void edit(String[] category, String[] categoryLevel, +// String[] detailCategory, String[] detailCategoryLevel, +// String foreceLevel, String forceDetailLevel) { +// +// if (category != null) { +// for (int i = 0; i < category.length; i++) { +// parentUpdate(category[i], categoryLevel[i], foreceLevel); +// } +// } +// +// if (detailCategory != null) { +// for (int i = 0; i < detailCategory.length; i++) { +// categoryUpdate(detailCategory[i], detailCategoryLevel[i], +// forceDetailLevel); +// } +// } +// +// } +// +// @SuppressWarnings("unchecked") +// private void parentUpdate(String category, String level, String foreceLevel) { +// +// if (foreceLevel != null && !foreceLevel.trim().equals("")) { +// level = foreceLevel; +// } +// +// Enumeration e = Logger.getRootLogger() +// .getLoggerRepository() +// .getCurrentLoggers(); +// +// for (; e.hasMoreElements();) { +// Logger logger = (Logger) e.nextElement(); +// Category parent = logger.getParent(); +// if (parent.getName() != null && parent.getName().equals(category)) { +// parent.setLevel(Level.toLevel(level)); +// } +// } +// } +// +// @SuppressWarnings("unchecked") +// private void categoryUpdate(String category, String level, String forceLevel) { +// +// if (forceLevel != null && !forceLevel.trim().equals("")) { +// level = forceLevel; +// } +// +// Enumeration e = Logger.getRootLogger() +// .getLoggerRepository() +// .getCurrentLoggers(); +// +// for (; e.hasMoreElements();) { +// Logger logger = (Logger) e.nextElement(); +// String p = logger.getName(); +// if (p != null && p.equals(category)) { +// logger.setLevel(Level.toLevel(level)); +// } +// } +// } +// +// @SuppressWarnings("unchecked") +// public Map detail(String parent) { +// +// if (parent == null) { +// return new TreeMap(); +// } +// +// Enumeration e = Logger.getRootLogger() +// .getLoggerRepository() +// .getCurrentLoggers(); +// +// SortedMap details = new TreeMap(); +// for (; e.hasMoreElements();) { +// Logger logger = (Logger) e.nextElement(); +// String loggerName = logger.getName(); +// +// if (loggerName != null && loggerName.startsWith(parent) +// && !loggerName.equals(parent)) { +// if (logger.getEffectiveLevel() != null) { +// details.put(loggerName, new Integer( +// logger.getEffectiveLevel().toInt())); +// } +// } +// } +// return details; +// } +// +// public void newLogger(String newLogger) { +// Logger logger = Logger.getLogger(newLogger); +// Logger.getLogger(newLogger + ".createdlogger"); +// logger.setLevel(Level.ERROR); +// logger.debug("ignored"); +// } +// +//} diff --git a/src/main/java/com/eactive/eai/rms/client/handler/RefreshCommandHandler.java b/src/main/java/com/eactive/eai/rms/client/handler/RefreshCommandHandler.java new file mode 100644 index 0000000..4631d73 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/handler/RefreshCommandHandler.java @@ -0,0 +1,31 @@ +package com.eactive.eai.rms.client.handler;//package com.eactive.eai.rms.client.handler; +// +//import org.apache.mina.common.IoSession; +// +//import org.springframework.context.ApplicationContext; +//import org.springframework.context.ApplicationContextAware; +//import org.springframework.context.support.ClassPathXmlApplicationContext; +// +//import com.eactive.eai.rms.onl.vo.RefreshCommand; +// +//public class RefreshCommandHandler implements IMessageHandler, +// ApplicationContextAware { +// +// private ApplicationContext applicationContext; +// +// public void setApplicationContext(ApplicationContext applicationContext) { +// this.applicationContext = applicationContext; +// } +// +// public Class targetClass() { +// return RefreshCommand.class; +// } +// +// public void messageReceived(IoSession session, Object message) +// throws Exception { +// +// ClassPathXmlApplicationContext applicationContext = (ClassPathXmlApplicationContext) this.applicationContext; +// applicationContext.refresh(); +// +// } +//} diff --git a/src/main/java/com/eactive/eai/rms/client/service/EaiEngineStatusService.java b/src/main/java/com/eactive/eai/rms/client/service/EaiEngineStatusService.java new file mode 100644 index 0000000..b42c4c1 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/EaiEngineStatusService.java @@ -0,0 +1,127 @@ +package com.eactive.eai.rms.client.service; + +import java.util.Properties; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +import com.eactive.eai.common.util.ContainerUtil; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.onl.vo.EAIEngineStatusVo; + +/** + *
    + * 1. 기능 : EAI Engine의 상태를 조회 합니다. 
    + * 2. 처리 개요 :
    + * -
    + * 3. 주의사항 :
    + * 
    + * + * @author : 박기섭 + * @version : $Revision: 1.9 $ + * @since : rts 1.0 + */ +public class EaiEngineStatusService implements ApplicationContextAware { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + /** The application context. */ + private ApplicationContext applicationContext; + + private RmsProperties rmsProperties; + + private Properties adminClientProperties; + + public void setAdminClientProperties(Properties adminClientProperties) { + this.adminClientProperties = adminClientProperties; + } + + public void setProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + /** + * Instantiates a new eai engine status service. + */ + public EaiEngineStatusService() { + super(); + } + + /** + * Gets the eAI engine status. + * + * @return the eAI engine status + * + * @throws Exception the exception + */ + public EAIEngineStatusVo getEAIEngineStatus() throws Exception { + + EAIEngineStatusVo eaiEngineStatusVo = (EAIEngineStatusVo) applicationContext.getBean("eaiEngineStatusVo"); + try { + setServerStatus(eaiEngineStatusVo); + this.setJVMRuntimeStatus(eaiEngineStatusVo); + + } catch (Exception e) { + logger.warn(e.getMessage(), e); + } + return eaiEngineStatusVo; + } + + /** + * Sets the server status. + * + * @param status the status + * @param serverMBean the server m bean + * @param serverName the server name + */ + private void setServerStatus(EAIEngineStatusVo status) { + + String instName = rmsProperties.getStringProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + status.setServerName(instName); + + int state = 0; + try { + JMXMonitoring monitoring = JMXMonitoringFactory.createServerMonitoring(ContainerUtil.get()); + //JMX가 없을경우 무조건 정상 + if (monitoring == null) { + status.setServerState(Integer.toString(2)); + return; + } + monitoring.init(this.adminClientProperties); + state = (int)monitoring.getState(instName); + status.setServerState(Integer.toString(state)); + } catch (Exception e) { + status.setServerState(Integer.toString(state)); + } + + } + + /** + * Sets the jvm runtime status. + * + * @param status the status + * @param serverRuntimeMBean the server runtime m bean + */ + private void setJVMRuntimeStatus(EAIEngineStatusVo status) { + Runtime runtime = Runtime.getRuntime(); + + status.setHeapFreeCurrent(runtime.freeMemory()); + status.setHeapSizeCurrent(runtime.totalMemory()); + status.setHeapSizeMax(runtime.maxMemory()); + + long precent = (((status.getHeapSizeMax() - status.getHeapSizeCurrent()) + status.getHeapFreeCurrent()) * 100) + / status.getHeapSizeMax(); + + status.setHeapFreePercent(new Long(precent).intValue()); + } + + /* (non-Javadoc) + * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) + */ + public void setApplicationContext(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/HostStatusService.java b/src/main/java/com/eactive/eai/rms/client/service/HostStatusService.java new file mode 100644 index 0000000..f4fab88 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/HostStatusService.java @@ -0,0 +1,217 @@ +package com.eactive.eai.rms.client.service; + +import org.springframework.beans.factory.InitializingBean; + +import com.eactive.eai.rms.client.util.CommandParser; +import com.eactive.eai.rms.client.util.CommandUtils; +import com.eactive.eai.rms.client.util.WindowsSystemMon; + +/** + * The Class HostStatusService. + *
      + *
    • 1. Function :
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + *
     
    + * 
    + * + * + * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.7 $ + */ +public class HostStatusService implements InitializingBean { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + static final boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase().startsWith("windows") ? true : false; + + private int TOTAL_MEMORY = 0; + + /** + * Gets the cpu percentage. + * + * @return the cpu percentage + */ + public int getCpuPercentage() { + + int result = 0; + try { + if (IS_WINDOWS){ + return WindowsSystemMon.getCpuPercentage(); + } + + String[] command = { "/bin/sh", "-c", "vmstat 1 2 | awk 'BEGIN{n=0;}{if(++n==4) { printf((100-$15));}}'" }; + + CommandParser parser = new CommandParser() { + public Object parse(String string) { + int result = 0; + try { + result = Integer.parseInt(string.trim()); + } catch (Exception e) { + } + return result; + } + }; + + result = (Integer) CommandUtils.processExec(command, parser); + } catch (Exception e) { + logger.warn(e.getMessage()); + } + + return result; + } + + /** + * Gets the disk percentage. + * + * @param path the path + * + * @return the disk percentage + */ + public int getDiskPercentage(String path) { + int result = 0; + try { + if (IS_WINDOWS){ + return WindowsSystemMon.getDiskPercentage(); + } + + String command[] = new String[] { + "/bin/sh", + "-c", + "df -k " + path + " | awk 'BEGIN{n=0;}{if(++n==2) { printf($5);}}'" }; + + CommandParser parser = new CommandParser() { + + public Object parse(String string) { + int result = 0; + int psercentIndex = 0; + try { + psercentIndex = string.indexOf("%"); + result = Integer.parseInt(string.substring(0, psercentIndex)); + } catch (Exception e) { + } + return result; + } + }; + + result = (Integer) CommandUtils.processExec(command, parser); + } catch (Exception e) { + logger.warn(e.getMessage()); + } + return result; + } + + /** + * Gets the memory percentage. + * + * @return the memory percentage + */ + public int getMemoryPercentage() { + int result = 0; + + try { + if (IS_WINDOWS){ + return WindowsSystemMon.getMemoryPercentage(); + } + + String[] command = { "/bin/sh", "-c", "cat /proc/meminfo | egrep 'MemFree:|SwapFree' | awk 'BEGIN{t=0;}{t+=$2;}END {print t;}'" }; + + CommandParser parser = new CommandParser() { + public Object parse(String string) { + int result = 0; + try { + result = Integer.parseInt(string.trim()) / 1024; + } catch (Exception e) { + } + return result; + } + }; + + int freeMB = (Integer) CommandUtils.processExec(command, parser); + result = (TOTAL_MEMORY - freeMB) * 100 / TOTAL_MEMORY; + } catch (Exception e) { + logger.warn(e.getMessage()); + } + + if (logger.isDebugEnabled()) { + logger.debug("getMemoryPercentage RESULT : " + result); + } + + return result; + } + + /** + * 시스템의 전체 메모리 값을 구한다. + * + * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() + */ + public void afterPropertiesSet() throws Exception { + if (IS_WINDOWS){ + return ; + } + try { + /* + * 시스템의 전체 메모리 값을 구한다. + */ + /** + [elink@dmccap01 ~]$ cat /proc/meminfo | grep MemTotal + MemTotal: 28597244 kB + */ + String[] commandRealMemory = { "/bin/sh", "-c", "cat /proc/meminfo | grep MemTotal | awk '{printf($2)}'" }; + + + CommandParser realParser = new CommandParser() { + public Object parse(String string) { + int realMemoryMB = 0; + try { + realMemoryMB = Integer.parseInt(string) / 1024; + } catch (Exception e) { + logger.warn(this, e); + } + return realMemoryMB; + } + }; + + String[] commandPage = { "/bin/sh", "-c", "cat /proc/meminfo | grep SwapTotal | awk '{printf($2)}' " }; + CommandParser pageParser = new CommandParser() { + + public Object parse(String string) { + int pageMB = 0; + try { + pageMB = Integer.parseInt(string) / 1024; + } catch (Exception e) { + logger.warn(this, e); + } + return pageMB; + } + }; + + Integer realMemoryMB = (Integer) CommandUtils.processExec( + commandRealMemory, realParser); + + Integer pageMB = (Integer) CommandUtils.processExec(commandPage, + pageParser); + + this.TOTAL_MEMORY = realMemoryMB + pageMB; + + if (logger.isDebugEnabled()) { + logger.debug("TOTAL MEMORY : " + TOTAL_MEMORY); + } + } catch (Exception e) { + logger.warn(e.getMessage()); + } + } + + public static void main(String[] args) throws Exception { + HostStatusService service = new HostStatusService(); + service.afterPropertiesSet(); + System.out.println("CPU : " + service.getCpuPercentage()); + System.out.println("MEMORY : " + service.getMemoryPercentage()); + System.out.println("DISK(/log) : " + service.getDiskPercentage("/log")); + + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoring.java b/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoring.java new file mode 100644 index 0000000..5030347 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoring.java @@ -0,0 +1,9 @@ +package com.eactive.eai.rms.client.service; + +import java.util.Properties; + +public interface JMXMonitoring +{ + public void init (Properties properties) throws Exception; + public Object getState(String instance) throws Exception; +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoringFactory.java b/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoringFactory.java new file mode 100644 index 0000000..fb1acbf --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoringFactory.java @@ -0,0 +1,35 @@ +package com.eactive.eai.rms.client.service; + +import com.eactive.eai.common.util.ContainerUtil; +import com.eactive.eai.env.ElinkConfig; +import com.eactive.eai.rms.client.service.activemq.SingleQueueMonitoringForActiveMq; +import com.eactive.eai.rms.client.service.weblogic.SingleQueueMonitoringForWebLogic; +import com.eactive.eai.rms.client.service.weblogic.SingleServerMonitoringForWebLogic; +import com.eactive.eai.rms.client.service.websphere.SingleQueueMonitoringForWebSphere; +import com.eactive.eai.rms.client.service.websphere.SingleServerMonitoringForWebSphere; + +public class JMXMonitoringFactory +{ + private JMXMonitoringFactory() { + } + + public static JMXMonitoring createServerMonitoring(int type) throws Exception { + if (ContainerUtil.WEBLOGIC == type ){ + return SingleServerMonitoringForWebLogic.getInstance(); + }else if (ContainerUtil.WEBSPHERE == type ){ + return SingleServerMonitoringForWebSphere.getInstance(); + } + return null; + } + public static JMXMonitoring createQueueMonitoring(int type) throws Exception { + if(ElinkConfig.isUseInternalQueue()) { + return SingleQueueMonitoringForActiveMq.getInstance(); + } + if (ContainerUtil.WEBLOGIC == type ){ + return SingleQueueMonitoringForWebLogic.getInstance(); + }else if (ContainerUtil.WEBSPHERE == type ){ + return SingleQueueMonitoringForWebSphere.getInstance(); + } + return null; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/activemq/SingleQueueMonitoringForActiveMq.java b/src/main/java/com/eactive/eai/rms/client/service/activemq/SingleQueueMonitoringForActiveMq.java new file mode 100644 index 0000000..c950817 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/activemq/SingleQueueMonitoringForActiveMq.java @@ -0,0 +1,82 @@ +package com.eactive.eai.rms.client.service.activemq; + +import java.util.LinkedHashMap; +import java.util.Properties; + +import javax.management.ObjectName; + +import org.apache.activemq.broker.BrokerService; +import org.apache.activemq.broker.jmx.BrokerViewMBean; +import org.apache.activemq.broker.jmx.QueueViewMBean; + +import com.eactive.eai.rms.client.service.JMXMonitoring; + +public class SingleQueueMonitoringForActiveMq implements JMXMonitoring { + + private static SingleQueueMonitoringForActiveMq monitoring; + + public static SingleQueueMonitoringForActiveMq getInstance() { + if (monitoring == null) { + synchronized (SingleQueueMonitoringForActiveMq.class) { + if (monitoring == null) { + monitoring = new SingleQueueMonitoringForActiveMq(); + } + } + } + return monitoring; + } + + @Override + public void init(Properties properties) throws Exception { + + } + + @Override + public Object getState(String instName) throws Exception { + LinkedHashMap result = new LinkedHashMap(); + BrokerService brokerService = new BrokerService(); + brokerService.getManagementContext().setCreateConnector(false); + ObjectName brokerViewMBean = null; + try { + brokerViewMBean = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost"); + BrokerViewMBean borkerProxy = (BrokerViewMBean) brokerService.getManagementContext() + .newProxyInstance(brokerViewMBean, BrokerViewMBean.class, true); + ObjectName[] queues = borkerProxy.getQueues(); + for (ObjectName queue : queues) { + QueueViewMBean proxy = (QueueViewMBean) brokerService.getManagementContext().newProxyInstance(queue, + QueueViewMBean.class, true); + String queueName = proxy.getName(); + long l = proxy.getQueueSize(); + result.put(queueName, getCount(queueName, l)); + } + } catch (java.lang.reflect.UndeclaredThrowableException i) { + ; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + private String[] getCount(String queueName, long depth) throws Exception { + String[] info = new String[9]; + info[0] = queueName; + info[1] = "queue";// jmsDestinationRuntimes[j].getDestinationType(); + info[2] = "0";// jmsDestinationRuntimes[j].getConsumersCurrentCount(); + info[3] = "0";// jmsDestinationRuntimes[j].getConsumersHighCount(); + info[4] = "0";// jmsDestinationRuntimes[j].getConsumersTotalCount(); + info[5] = Long.toString(depth); + info[6] = "0";// jmsDestinationRuntimes[j].getMessagesHighCount(); + info[7] = "0";// jmsDestinationRuntimes[j].getMessagesPendingCount(); + info[8] = "0";// jmsDestinationRuntimes[j].getMessagesReceivedCount(); + return info; + } + + public static void main(String[] args) throws Exception { + SingleQueueMonitoringForActiveMq monitoring = new SingleQueueMonitoringForActiveMq(); + Properties properties = new Properties(); + + monitoring.init(properties); + System.out.println(monitoring.getState("")); + } + +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleQueueMonitoringForWebLogic.java b/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleQueueMonitoringForWebLogic.java new file mode 100644 index 0000000..579b4bb --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleQueueMonitoringForWebLogic.java @@ -0,0 +1,128 @@ +package com.eactive.eai.rms.client.service.weblogic; + +import java.util.HashMap; +import java.util.Hashtable; +import java.util.LinkedHashMap; +import java.util.Properties; + +import javax.management.MBeanServerConnection; +import javax.management.ObjectName; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; +import javax.naming.Context; + +import com.eactive.eai.rms.client.service.JMXMonitoring; + +public class SingleQueueMonitoringForWebLogic implements JMXMonitoring { +// private static MBeanServerConnection connection; +// private static JMXConnector connector; + private String hostname ; + private String portString ; + private String username ; + private String password ; + + + private static SingleQueueMonitoringForWebLogic monitoring; + + public static SingleQueueMonitoringForWebLogic getInstance(){ + if(monitoring == null) { + synchronized(SingleQueueMonitoringForWebLogic.class) { + if(monitoring == null) { + monitoring = new SingleQueueMonitoringForWebLogic(); + } + } + } + return monitoring; + } + + @Override + public void init(Properties properties) throws Exception { + hostname = properties.getProperty("LOCAL_MBEAN_SERVER_IP"); + portString = properties.getProperty("LOCAL_MBEAN_SERVER_PORT"); + username = properties.getProperty("LOCAL_MBEAN_SERVER_ID"); + password = properties.getProperty("LOCAL_MBEAN_SERVER_PASSWORD"); + + } + + @Override + public Object getState(String instName) throws Exception { + LinkedHashMap result = new LinkedHashMap(); + JMXConnector connector = null; + MBeanServerConnection connection =null; + + try { + String protocol ="t3"; + Integer portInteger = Integer.valueOf(portString); + int port = portInteger.intValue(); + String jndiroot = "/jndi/"; + String mserver = "weblogic.management.mbeanservers.domainruntime"; + JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, jndiroot + mserver); + Hashtable h = new Hashtable(); + h.put(Context.SECURITY_PRINCIPAL, username); + h.put(Context.SECURITY_CREDENTIALS, password); + h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote"); + connector = JMXConnectorFactory.connect(serviceURL,h); + connection = connector.getMBeanServerConnection(); + + ObjectName serviceRuntime = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean,Location="+instName); + ObjectName serverRuntime = (ObjectName)connection.getAttribute(serviceRuntime, "ServerRuntime") ; + ObjectName jmsRuntime = (ObjectName)connection.getAttribute(serverRuntime, "JMSRuntime") ; + ObjectName[] jmsServers = (ObjectName[])connection.getAttribute(jmsRuntime, "JMSServers") ; + + HashMap queue = new HashMap(); + + for(ObjectName jmsServer : jmsServers){ + String name = jmsServer.getKeyProperty("Name"); + if (name == null) continue; + + if(name.startsWith("JMSServer")){ + ObjectName[] destinations = (ObjectName[])connection.getAttribute(jmsServer, "Destinations"); + for(ObjectName destination : destinations){ + String queueName = destination.getKeyProperty("Name"); + if (queueName.contains("!")){ + queueName = queueName.substring(queueName.indexOf("!")+1); + } + if (queueName.contains("Topic")) continue; + + Long queueDepth = (Long) connection.getAttribute(destination, "MessagesCurrentCount"); + queue.put(queueName, queueDepth); + // System.out.println("Queue : " + queueName +" Depth : " + queueDepth); + } + } + } + for(String queueName : queue.keySet()){ + result.put(queueName, getCount(queueName, queue.get(queueName) )); + } + }finally{ + if (connector != null){try{connector.close();}catch(Exception e){}} + } + return result; + } + private String[] getCount(String queueName, long depth) throws Exception{ + String[] info = new String[9]; + info[0] = queueName; + info[1] = "queue";//jmsDestinationRuntimes[j].getDestinationType(); + info[2] = "0";//jmsDestinationRuntimes[j].getConsumersCurrentCount(); + info[3] = "0";//jmsDestinationRuntimes[j].getConsumersHighCount(); + info[4] = "0";//jmsDestinationRuntimes[j].getConsumersTotalCount(); + info[5] = Long.toString(depth); + info[6] = "0";//jmsDestinationRuntimes[j].getMessagesHighCount(); + info[7] = "0";//jmsDestinationRuntimes[j].getMessagesPendingCount(); + info[8] = "0";//jmsDestinationRuntimes[j].getMessagesReceivedCount(); + return info; + } + public static void main(String[] args)throws Exception{ + SingleQueueMonitoringForWebLogic monitoring = new SingleQueueMonitoringForWebLogic(); + Properties properties = new Properties(); + properties.put("LOCAL_MBEAN_SERVER_IP", "172.16.131.11"); + properties.put("LOCAL_MBEAN_SERVER_PORT", "30100"); + properties.put("LOCAL_MBEAN_SERVER_ID", "epostadm"); + properties.put("LOCAL_MBEAN_SERVER_PASSWORD", "welcome1!"); + + monitoring.init(properties); + System.out.println(monitoring.getState("mccSvr11")); + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleServerMonitoringForWebLogic.java b/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleServerMonitoringForWebLogic.java new file mode 100644 index 0000000..5238ead --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleServerMonitoringForWebLogic.java @@ -0,0 +1,91 @@ +package com.eactive.eai.rms.client.service.weblogic; + +import java.util.Hashtable; +import java.util.Properties; + +import javax.management.MBeanServerConnection; +import javax.management.ObjectName; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; +import javax.naming.Context; + +import com.eactive.eai.rms.client.service.JMXMonitoring; + +public class SingleServerMonitoringForWebLogic implements JMXMonitoring { +// private static MBeanServerConnection connection; +// private static JMXConnector connector; + private String hostname ; + private String portString ; + private String username ; + private String password ; + + private static SingleServerMonitoringForWebLogic monitoring; + + public static SingleServerMonitoringForWebLogic getInstance(){ + if(monitoring == null) { + synchronized(SingleServerMonitoringForWebLogic.class) { + if(monitoring == null) { + monitoring = new SingleServerMonitoringForWebLogic(); + } + } + } + return monitoring; + } + + @Override + public void init(Properties properties) throws Exception { + hostname = properties.getProperty("LOCAL_MBEAN_SERVER_IP"); + portString = properties.getProperty("LOCAL_MBEAN_SERVER_PORT"); + username = properties.getProperty("LOCAL_MBEAN_SERVER_ID"); + password = properties.getProperty("LOCAL_MBEAN_SERVER_PASSWORD"); + } + + @Override + public Object getState(String instName) throws Exception { + JMXConnector connector = null; + MBeanServerConnection connection =null; + + try { + String protocol ="t3"; + Integer portInteger = Integer.valueOf(portString); + int port = portInteger.intValue(); + String jndiroot = "/jndi/"; + String mserver = "weblogic.management.mbeanservers.domainruntime"; + JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, jndiroot + mserver); + Hashtable h = new Hashtable(); + h.put(Context.SECURITY_PRINCIPAL, username); + h.put(Context.SECURITY_CREDENTIALS, password); + h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote"); + connector = JMXConnectorFactory.connect(serviceURL,h); + connection = connector.getMBeanServerConnection(); + + + ObjectName service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean"); + ObjectName[] servers = (ObjectName[])connection.getAttribute(service, "ServerRuntimes"); + for(ObjectName server : servers){ + String name = server.getKeyProperty("Name"); + if (name == null) continue; + if (name.equals(instName)){ + return 2; + } + } + }finally{ + if (connector != null){try{connector.close();}catch(Exception e){}} + } + return 0; + } + public static void main(String[] args)throws Exception{ + SingleServerMonitoringForWebLogic monitoring = new SingleServerMonitoringForWebLogic(); + Properties properties = new Properties(); + properties.put("LOCAL_MBEAN_SERVER_IP", "172.16.131.21"); + properties.put("LOCAL_MBEAN_SERVER_PORT", "30100"); + properties.put("LOCAL_MBEAN_SERVER_ID", "epostadm"); + properties.put("LOCAL_MBEAN_SERVER_PASSWORD", "welcome1!"); + + monitoring.init(properties); + System.out.println(monitoring.getState("mcuSvr11")); + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleQueueMonitoringForWebSphere.java b/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleQueueMonitoringForWebSphere.java new file mode 100644 index 0000000..823b98b --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleQueueMonitoringForWebSphere.java @@ -0,0 +1,191 @@ +package com.eactive.eai.rms.client.service.websphere; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Properties; + +import com.eactive.eai.rms.client.service.JMXMonitoring; + +//import java.security.PrivilegedAction; +//import java.util.Collections; +//import java.util.Comparator; +//import java.util.HashMap; +//import java.util.Iterator; +//import java.util.LinkedHashMap; +//import java.util.List; +//import java.util.Properties; +//import java.util.Set; +//import java.util.stream.Collectors; +// +//import javax.management.Attribute; +//import javax.management.AttributeList; +//import javax.management.ObjectName; +//import javax.security.auth.Subject; +//import javax.security.auth.callback.CallbackHandler; +//import javax.security.auth.login.LoginContext; +// +//import com.ibm.websphere.management.AdminClient; +//import com.ibm.websphere.management.AdminClientFactory; +//import com.ibm.websphere.security.auth.WSSubject; +//import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl; +// +public class SingleQueueMonitoringForWebSphere implements JMXMonitoring{ +// public static AdminClient ac = null; +// +// private static Boolean isSubjectLogin ; +// +// +// private static Properties properties ; + private static SingleQueueMonitoringForWebSphere monitoring; + public static SingleQueueMonitoringForWebSphere getInstance(){ + if(monitoring == null) { + synchronized(SingleQueueMonitoringForWebSphere.class) { + if(monitoring == null) { + monitoring = new SingleQueueMonitoringForWebSphere(); + } + } + } + return monitoring; + } + + private SingleQueueMonitoringForWebSphere() { + } + + public void init(Properties properties) throws Exception { +// if (ac == null) { +// synchronized(SingleQueueMonitoring.class){ +// this.properties = properties; +// Object obj = properties.get("isSubjectLogin"); +// if (obj == null){ +// this.isSubjectLogin = false; +// }else { +// if (obj instanceof String){ +// this.isSubjectLogin = Boolean.parseBoolean((String)obj); +// } +// } +// if (ac== null){ +// ac = AdminClientFactory.createAdminClient(properties); +// } +// } +// } + } +// private static Object doAsAdmin(PrivilegedAction action) throws Exception { +// return WSSubject.doAs(getLoginSubject(), action); +// } +// +// private static Subject getLoginSubject() throws Exception { +// CallbackHandler callbackHandler = new WSCallbackHandlerImpl(properties.getProperty(AdminClient.USERNAME), null, +// properties.getProperty(AdminClient.PASSWORD)); +// LoginContext loginContext; +// try { +// loginContext = new LoginContext("WSLogin", callbackHandler); +// loginContext.login(); +// } catch (Exception e) { +// throw new RuntimeException(e.getMessage()); +// } +// return loginContext.getSubject(); +// } +// private Set getQueueListObjectNames(String serverName) throws Exception { +// final ObjectName objectName = new ObjectName("WebSphere:type=SIBQueuePoint,process="+serverName+",*"); +//// final QueryExp queryExp = Query.eq(Query.attr("process"), Query.value(serverName)); +// +// PrivilegedAction action = new PrivilegedAction(){ +// @Override +// public Object run() { +// try { +// return ac.queryNames(objectName, null); +// } catch (Exception e) { +// //e.printStackTrace(); +// } +// return null; +// } +// }; +// +// Set objectNameSet = null; +// if(isSubjectLogin){ +// objectNameSet = (Set) doAsAdmin(action); +// }else{ +// objectNameSet = (Set) action.run(); +// } +// +// return objectNameSet; +// } +// private HashMap getCount(ObjectName objectName) throws Exception{ +// String process = objectName.getKeyProperty("process"); +// String name = objectName.getKeyProperty("name").replaceAll("."+process, ""); +// +// HashMap result = new HashMap(); +// PrivilegedAction action = new PrivilegedAction(){ +// @Override +// public Object run() { +// try { +// return ac.getAttributes(objectName, new String[] { "depth" }); +// } catch (Exception e) { +// //e.printStackTrace(); +// } +// return null; +// } +// }; +// +// AttributeList attrList = null; +// if(isSubjectLogin){ +// attrList = (AttributeList) doAsAdmin(action); +// }else{ +// attrList = (AttributeList) action.run(); +// } +// if (attrList == null){ +// return result; +// } +// Iterator it = attrList.iterator(); +// while(it.hasNext()){ +// Attribute a = (Attribute)it.next(); +// if ("depth".equals(a.getName())){ +// if (a.getValue() instanceof Long ){ +// Long l = (Long)a.getValue(); +// String[] info = new String[9]; +// info[0] = name; +// info[1] = "queue";//jmsDestinationRuntimes[j].getDestinationType(); +// info[2] = "0";//jmsDestinationRuntimes[j].getConsumersCurrentCount(); +// info[3] = "0";//jmsDestinationRuntimes[j].getConsumersHighCount(); +// info[4] = "0";//jmsDestinationRuntimes[j].getConsumersTotalCount(); +// info[5] = Long.toString(l); +// info[6] = "0";//jmsDestinationRuntimes[j].getMessagesHighCount(); +// info[7] = "0";//jmsDestinationRuntimes[j].getMessagesPendingCount(); +// info[8] = "0";//jmsDestinationRuntimes[j].getMessagesReceivedCount(); +// result.put(name, info); +// } +// } +// } +// return result; +// } +// + public Object getState(String serverName) throws Exception { + LinkedHashMap result = new LinkedHashMap(); +// Set objectNames = getQueueListObjectNames(serverName); +// if (objectNames == null){ +// return result; +// } +// +// List list = objectNames.stream().collect(Collectors.toList()); +// Collections.sort(list, new Comparator() { +// @Override +// public int compare(ObjectName o1, ObjectName o2) { +// String s1 = (String) o1.getKeyProperty("name"); +// String s2 = (String) o2.getKeyProperty("name"); +// return s1.compareTo(s2); +// } +// }); +// +// for(ObjectName objectName : list){ +// String name = objectName.getKeyProperty("name"); +// if (name.startsWith("_")){ +// continue; +// } +// HashMap m = getCount(objectName); +// result.putAll(m); +// } + return result; + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleServerMonitoringForWebSphere.java b/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleServerMonitoringForWebSphere.java new file mode 100644 index 0000000..ce5ad60 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleServerMonitoringForWebSphere.java @@ -0,0 +1,184 @@ +package com.eactive.eai.rms.client.service.websphere; + +//import java.security.PrivilegedAction; +//import java.util.Iterator; +import java.util.Properties; + +import javax.management.ObjectName; + +import com.eactive.eai.rms.client.service.JMXMonitoring; +//import java.util.Set; +// +//import javax.management.Attribute; +//import javax.management.AttributeList; +//import javax.management.ObjectName; +//import javax.management.Query; +//import javax.management.QueryExp; +//import javax.security.auth.Subject; +//import javax.security.auth.callback.CallbackHandler; +//import javax.security.auth.login.LoginContext; +// +//import com.ibm.websphere.management.AdminClient; +//import com.ibm.websphere.management.AdminClientFactory; +//import com.ibm.websphere.security.auth.WSSubject; +//import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl; +// +public class SingleServerMonitoringForWebSphere implements JMXMonitoring { +// public static AdminClient ac = null; +// +// private static Boolean isSubjectLogin ; +// private static Properties properties ; + + private static SingleServerMonitoringForWebSphere monitoring; + + public static SingleServerMonitoringForWebSphere getInstance(){ + if(monitoring == null) { + synchronized(SingleServerMonitoringForWebSphere.class) { + if(monitoring == null) { + monitoring = new SingleServerMonitoringForWebSphere(); + } + } + } + return monitoring; + } + + public void init(Properties properties) throws Exception { +// if (ac == null) { +// synchronized(SingleServerMonitoring.class){ +// this.properties = properties; +// Object obj = properties.get("isSubjectLogin"); +// if (obj == null){ +// this.isSubjectLogin = false; +// }else { +// if (obj instanceof String){ +// this.isSubjectLogin = Boolean.parseBoolean((String)obj); +// } +// } +// if (ac== null){ +// ac = AdminClientFactory.createAdminClient(properties); +// } +// } +// } + } +// private static Object doAsAdmin(PrivilegedAction action) throws Exception { +// return WSSubject.doAs(getLoginSubject(), action); +// } +// +// private static Subject getLoginSubject() throws Exception { +// CallbackHandler callbackHandler = new WSCallbackHandlerImpl(properties.getProperty(AdminClient.USERNAME), null, +// properties.getProperty(AdminClient.PASSWORD)); +// LoginContext loginContext; +// try { +// loginContext = new LoginContext("WSLogin", callbackHandler); +// loginContext.login(); +// } catch (Exception e) { +// throw new RuntimeException(e.getMessage()); +// } +// return loginContext.getSubject(); +// } +// private ObjectName getServerObjectNames(String serverName) throws Exception { +// final ObjectName objectName = new ObjectName("WebSphere:type=Server,*"); +// final QueryExp queryExp = Query.eq(Query.attr("name"), Query.value(serverName)); +// +// PrivilegedAction action = new PrivilegedAction(){ +// @Override +// public Object run() { +// try { +// return ac.queryNames(objectName, queryExp); +// } catch (Exception e) { +// //e.printStackTrace(); +// } +// return null; +// } +// }; +// +// Set objectNameSet = null; +// if(isSubjectLogin){ +// objectNameSet = (Set) doAsAdmin(action); +// }else{ +// objectNameSet = (Set) action.run(); +// } +// +// if (objectNameSet != null) { +// for(ObjectName o : objectNameSet){ +// return o; +// } +// } +// return null; +// } +// private int getServerStatus(ObjectName objectName) throws Exception{ +// PrivilegedAction action = new PrivilegedAction(){ +// @Override +// public Object run() { +// try { +// return ac.getAttributes(objectName, new String[] { "state" }); +// } catch (Exception e) { +// //e.printStackTrace(); +// } +// return null; +// } +// }; +// +// AttributeList attrList = null; +// if(isSubjectLogin){ +// attrList = (AttributeList) doAsAdmin(action); +// }else{ +// attrList = (AttributeList) action.run(); +// } +// if (attrList == null){ +// return 0; +// } +// Iterator it = attrList.iterator(); +// while(it.hasNext()){ +// Attribute a = (Attribute)it.next(); +// if ("state".equals(a.getName())){ +// if (a.getValue() instanceof String ){ +// if ("STARTED".equals((String)a.getValue())){ +// return 2; +// } +// } +// } +// } +// return 0; +// } +// + public Object getState(String serverName) throws Exception { +// ObjectName objectName = getServerObjectNames(serverName); +// if (objectName == null){ +// return 0; +// } +// try{ +// return getServerStatus(objectName); +// }catch(Exception e){ +// +// } + return 0; + } + +// public static void main(String[] args) throws Exception{ +// String serverIp = "192.168.68.21"; //개발서버-일괄 +// String port = "9809";//RMI // 관리콘솔 -> System administration -> Deployment manager -> Ports -> Bootstrap Address +// String loginId = "wasadm"; // 관리콘솔 로그인 ID +// String password = "system01"; // 콴리콘솔 로그인 PASSWORD +// +// Properties props = new Properties(); +// props.put(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_RMI); +// props.put(AdminClient.CONNECTOR_SECURITY_ENABLED, false); +// props.put(AdminClient.CONNECTOR_HOST, serverIp); +// props.put(AdminClient.CONNECTOR_PORT, port); +// props.put(AdminClient.USERNAME, loginId); +// props.put(AdminClient.PASSWORD, password); +// props.put("isSubjectLogin", false); +// +// SingleServerMonitoring m = new SingleServerMonitoring().getInstance(); +// m.init(props); +// +// System.out.println(m.getState("EAIDS02_i01")); +// +// SingleServerMonitoring m2 = new SingleServerMonitoring().getInstance(); +// m2.init(props); +// System.out.println(m.getState("EAIBS01_i01")); +// +// } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/AdminClinetPropertiesFactoryBeanUtil.java b/src/main/java/com/eactive/eai/rms/client/util/AdminClinetPropertiesFactoryBeanUtil.java new file mode 100644 index 0000000..b847081 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/AdminClinetPropertiesFactoryBeanUtil.java @@ -0,0 +1,97 @@ +package com.eactive.eai.rms.client.util; + +import java.util.Properties; + +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; + +import com.eactive.eai.rms.client.context.RmsProperties; +//import com.ibm.websphere.management.AdminClient; + + +/** + * The Class MBeanServerFactoryBeanUtil. + *
      + *
    • 1. Function :WebLogic의 MBeanServer를 생성 합니다.
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: amjang $ + * @version : $Revision: 1.3 $ + */ +public class AdminClinetPropertiesFactoryBeanUtil implements FactoryBean, InitializingBean { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + /** The monitoring properties. */ + private RmsProperties rmsProperties; + + /** The properties. */ + private Properties properties = null; + + /** + * Sets the monitoring properties. + * + * @param rmsProperties the new monitoring properties + */ + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + public void afterPropertiesSet() { + init(); + } + + /** + * Inits the. + */ + + private void init() { + try { + String serverIp = rmsProperties.getStringProperty(RmsProperties.LOCAL_MBEAN_SERVER_IP); + String port = rmsProperties.getStringProperty(RmsProperties.LOCAL_MBEAN_SERVER_PORT); + String loginId = rmsProperties.getStringProperty(RmsProperties.LOCAL_MBEAN_SERVER_ID); + String password = rmsProperties.getStringProperty(RmsProperties.LOCAL_MBEAN_SERVER_PASSWORD); + String subjectLogin = rmsProperties.getStringProperty(RmsProperties.SUBJECT_LOGIN); + + Properties props = new Properties(); + if (ContainerUtil.get() == ContainerUtil.WEBSPHERE ){ +// props.put(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_RMI); +// props.put(AdminClient.CONNECTOR_SECURITY_ENABLED, ""+false); +// props.put(AdminClient.CONNECTOR_HOST, serverIp); +// props.put(AdminClient.CONNECTOR_PORT, port); +// props.put(AdminClient.USERNAME, loginId); +// props.put(AdminClient.PASSWORD, password); + props.put("isSubjectLogin", subjectLogin); + + }else if (ContainerUtil.get() == ContainerUtil.WEBLOGIC ){ + props.put(RmsProperties.LOCAL_MBEAN_SERVER_IP, serverIp); + props.put(RmsProperties.LOCAL_MBEAN_SERVER_PORT, port); + props.put(RmsProperties.LOCAL_MBEAN_SERVER_ID, loginId); + props.put(RmsProperties.LOCAL_MBEAN_SERVER_PASSWORD, password); + } + + this.properties = props; + + } catch (Exception e) { + logger.error("Could not make AdminClient Properties : " + e.getMessage(),e); + } + } + + + public Object getObject() { + return this.properties; + } + + public Class getObjectType() { + return Properties.class; + } + + public boolean isSingleton() { + return true; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/CommandParser.java b/src/main/java/com/eactive/eai/rms/client/util/CommandParser.java new file mode 100644 index 0000000..df963ab --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/CommandParser.java @@ -0,0 +1,7 @@ +package com.eactive.eai.rms.client.util; + +public interface CommandParser { + + public Object parse(String string); + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/CommandUtils.java b/src/main/java/com/eactive/eai/rms/client/util/CommandUtils.java new file mode 100644 index 0000000..7714d0d --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/CommandUtils.java @@ -0,0 +1,85 @@ +package com.eactive.eai.rms.client.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + + +public class CommandUtils { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + public static Object processExec(String[] command, CommandParser parser) { + + if (logger.isDebugEnabled()) { + + StringBuilder sb = new StringBuilder("command를 실행 합니다. command : "); + for (int i = 0; i < command.length; i++) { + sb.append(command[i]).append(","); + } + + logger.debug(sb.toString()); + } + + String lineStr = null; + BufferedReader br = null; + Process process = null; + StringBuilder sb = new StringBuilder(); + InputStreamReader inputStreamReader = null; + InputStream inputStream = null; + + Object result = null; + + try { + process = new ProcessBuilder(command).start(); + + inputStream = process.getInputStream(); + inputStreamReader = new InputStreamReader(inputStream); + + br = new BufferedReader(new InputStreamReader( + process.getInputStream())); + + process.waitFor(); + + while ((lineStr = br.readLine()) != null) { + sb.append(lineStr).append("\n"); + } + + result = parser.parse(sb.toString().trim()); + + } catch (Exception e) { + logger.warn("command 실행 도중 에러 발생 : " + e.getMessage()); + } finally { + + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + } + } + if (inputStreamReader != null) { + try { + inputStreamReader.close(); + } catch (IOException e) { + } + } + if (br != null) { + try { + br.close(); + } catch (IOException e) { + } + } + if (process != null) { + try { + process.destroy(); + } catch (Exception e) { + } + } + } + + return result; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/ContainerUtil.java b/src/main/java/com/eactive/eai/rms/client/util/ContainerUtil.java new file mode 100644 index 0000000..cc917b9 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/ContainerUtil.java @@ -0,0 +1,127 @@ +package com.eactive.eai.rms.client.util; + +import java.util.HashMap; +import java.util.Map; + +import com.eactive.eai.common.server.Keys; + +/** + * The Class ContainerUtil. + *
      + *
    • 1. Function :현재 기동되는 컨테이너를 식별 합니다.
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.3 $ + */ +public class ContainerUtil { + + /** The Constant UNKNOWN. */ + public static final int UNKNOWN = 0; + + /** The Constant TOMCAT. */ + public static final int TOMCAT = 1; + + /** The Constant RESIN. */ + public static final int RESIN = 2; + + /** The Constant ORION. */ + public static final int ORION = 3; + + /** The Constant OC4J. */ + public static final int OC4J = 3; + + /** The Constant ORACLE_AS. */ + public static final int ORACLE_AS = 3; + + /** The Constant WEBLOGIC. */ + public static final int WEBLOGIC = 4; + + /** The Constant HPAS. */ + public static final int HPAS = 5; + + /** The Constant JRUN. */ + public static final int JRUN = 6; + + /** The Constant WEBSPHERE. */ + public static final int WEBSPHERE = 7; + + /** The Constant JEUS. */ + public static final int JEUS = 8; + + /** The result. */ + private static int result; + + /** The Constant containerString. */ + private static final Map containerString = new HashMap(); + + static { + + initServerString(); + + String weblogic = System.getProperty(Keys.SERVER_KEY); + String tomcat = System.getProperty("server.loader"); + String jeus = System.getProperty("jeus.home"); + + if (tomcat != null && tomcat.startsWith("${catalina.home}")) { + result = TOMCAT; + } else if (weblogic != null && !weblogic.trim().equals("")) { + result = WEBLOGIC; + } else if (jeus != null && !jeus.trim().equals("")) { + result = JEUS; + } else { + result = 0; + } + + } + + /** + * Inits the server string. + */ + private static void initServerString() { + containerString.put(String.valueOf(TOMCAT), "TOMCAT"); + containerString.put(String.valueOf(WEBLOGIC), "WEBLOGIC"); + containerString.put(String.valueOf(JEUS), "JEUS"); + containerString.put(String.valueOf(ORACLE_AS), "ORACLE_AS"); + containerString.put(String.valueOf(WEBSPHERE), "WEBSPHERE"); + containerString.put(String.valueOf(UNKNOWN), "UNKNOWN"); + } + + /** + * Gets the string. + * + * @param container the container + * + * @return the string + */ + public static String getString(int container) { + return (String) containerString.get(String.valueOf(container)); + } + + /** + * Gets the string. + * + * @return the string + */ + public static String getString() { + return getString(get()); + } + + /** + * Gets the Container. + * + * 다음과 같은 형태로 사용 합니다. {@code + * if (ContainerUtil.get() == ContainerUtil.WEBLOGIC) { + * ... + * } + * } + * + * @return int Container + */ + public static int get() { + return result; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/QueryBuffer.java b/src/main/java/com/eactive/eai/rms/client/util/QueryBuffer.java new file mode 100644 index 0000000..85e644a --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/QueryBuffer.java @@ -0,0 +1,260 @@ +package com.eactive.eai.rms.client.util; + +/** + * The Class QueryBuffer. + * StringBuilder 이다. Query를 작성시 사용한다. StringBuffer와 같다. append 시 뒤에 \n 를 추가해준다. + *
      + *
    • 1. Function :
    • + *
    • 2. Summary :
    • + *
    • 3. Notification :
    • + *
    + * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.2 $ + */ +public class QueryBuffer { + + /** The sb buffer. */ + private StringBuilder sbBuffer; + + /** + * Instantiates a new query buffer. + */ + public QueryBuffer() { + sbBuffer = new StringBuilder(2048); + } + + /** + * Instantiates a new query buffer. + * + * @param sQuery the s query + */ + public QueryBuffer(String sQuery) { + sbBuffer = new StringBuilder(2048); + sbBuffer.append(sQuery); + } + + /** + * Instantiates a new query buffer. + * + * @param length the length + */ + public QueryBuffer(int length) { + sbBuffer = new StringBuilder(length); + } + + /** + * 해당 쿼리를 page 가능하게 바꿔준다. + * + * @param currentPage : + * 현재 가져오려는 page + * @param pageSize : + * 한번에 보여지는 page size + * + * @return paging 된 쿼리 + * + * @throws Exception * + */ + public String getPagingQuery(int currentPage, int pageSize) { + + QueryBuffer pagingQuery = new QueryBuffer(); + + if (currentPage == 0) { + currentPage = 1; + } + + if (pageSize == 0) { + pageSize = 30; + } + + /* + * 첫번째 페이지[currentPage:1] firstRow : 1 lastRow : pageSize + * + * 두번째 페이지[currentPage:2] firstRow : pageSize + 1 lastRow : 2 * pageSize + */ + int firstRow = pageSize * (currentPage - 1) + 1; + int lastRow = firstRow + pageSize - 1; + pagingQuery.append("SELECT * "); + pagingQuery.append("FROM ( "); + pagingQuery.append(" SELECT A.*, ROWNUM AS R "); + pagingQuery.append(" FROM ( "); + pagingQuery.append(this); + pagingQuery.append(" ) A "); + pagingQuery.append(" WHERE ROWNUM <= ").append( + String.valueOf(lastRow)); + pagingQuery.append(" ) B "); + pagingQuery.append("WHERE R >= ").append(String.valueOf(firstRow)); + + return pagingQuery.toString(); + } + + /** + * Gets the paging query. + * + * @param currentPage the current page + * + * @return String - 페이징 적용된 쿼리 + */ + public String getPagingQuery(int currentPage) { + return getPagingQuery(currentPage, 30); + } + + /** + * Delete. + * + * @param start the start + * @param end the end + */ + public void delete(int start, int end) { + this.sbBuffer.delete(start, end); + } + + /** + * Length. + * + * @return the int + */ + public int length() { + return this.sbBuffer.length(); + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(String sQuery) { + sbBuffer.append(" \n").append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(int sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(long sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(char sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(char[] sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(double sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(boolean sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(QueryBuffer sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(float sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Insert. + * + * @param offset the offset + * @param query the query + * + * @return the query buffer + */ + public QueryBuffer insert(int offset, String query) { + sbBuffer.insert(offset, query); + return this; + } + + /** + * Insert. + * + * @param offset the offset + * @param query the query + * + * @return the query buffer + */ + public QueryBuffer insert(int offset, QueryBuffer query) { + sbBuffer.insert(offset, query); + return this; + } + + @Override + public String toString() { + return sbBuffer.toString(); + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/WindowsSystemMon.java b/src/main/java/com/eactive/eai/rms/client/util/WindowsSystemMon.java new file mode 100644 index 0000000..ba5c87a --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/WindowsSystemMon.java @@ -0,0 +1,90 @@ +package com.eactive.eai.rms.client.util; + +import java.io.File; +import java.lang.management.ManagementFactory; +import java.lang.management.OperatingSystemMXBean; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +// use for windows demo +public class WindowsSystemMon { + private static double getBeanMonitoringValue(OperatingSystemMXBean oBean, String methodName) { + double doubleValue = 0; + for (Method method : oBean.getClass().getDeclaredMethods()) { + method.setAccessible(true); + if (method.getName().startsWith(methodName) && Modifier.isPublic(method.getModifiers())) { + Object value; + try { + value = method.invoke(oBean); + if (value != null) { + if (value instanceof Double) + doubleValue = (Double) value; + if (value instanceof Long) + doubleValue = ((Long) value).doubleValue(); + } + break; + } catch (Exception e) { + value = e; + } // try +// System.out.println(method.getName() + " = " + value); + } // if + } // for + return doubleValue; + } + + private static void printSystemUsage() { + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + System.out.println( + "CPU Usage : " + String.format("%.2f", getBeanMonitoringValue(osBean, "getSystemCpuLoad") * 100)); + System.out.println( + "CPU Usage : " + String.format("%.2f", getBeanMonitoringValue(osBean, "getCpuLoad") * 100)); + System.out.println( + "CPU JVM Usage : " + String.format("%.2f", getBeanMonitoringValue(osBean, "getProcessCpuLoad") * 100)); + System.out.println("Memory Free Space G : " + String.format("%.2f", + getBeanMonitoringValue(osBean, "getFreePhysicalMemorySize") / 1024 / 1024 / 1024)); + System.out.println("Memory Total Space G : " + String.format("%.2f", + getBeanMonitoringValue(osBean, "getTotalPhysicalMemorySize") / 1024 / 1024 / 1024)); + } + + public static int getCpuPercentage() { + try { + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + int cpu = new Double(getBeanMonitoringValue(osBean, "getSystemCpuLoad") * 100).intValue(); + return cpu; + } + catch(Exception ex) { + return 0; + } + } + + public static int getDiskPercentage(){ + String rootDrive = System.getProperty("user.dir"); + File root = new File(rootDrive); + + double free = (double)root.getFreeSpace(); + double total = (double)root.getTotalSpace(); + double tmp = (free / total) * 100; + return (int)Math.round(tmp); + } + + public static int getMemoryPercentage() { + try { + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + double total = getBeanMonitoringValue(osBean, "getTotalPhysicalMemorySize"); + double free = getBeanMonitoringValue(osBean, "getFreePhysicalMemorySize"); + int memUsed = new Double((total-free)/total * 100).intValue(); + return memUsed; + } + catch(Exception ex) { + return 0; + } + } + + public static void main(String[] args) { +// printSystemUsage(); + System.out.println("getCpuPercentage = " + getCpuPercentage()); + System.out.println("getMemoryPercentage = " + getMemoryPercentage()); + System.out.println("getDiskPercentage = " + getDiskPercentage()); + } + +} diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource-local.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource-local.xml new file mode 100644 index 0000000..7480a4c --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource-local.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + PROPAGATION_REQUIRED, readOnly + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource.xml new file mode 100644 index 0000000..a58d96d --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-impl.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-impl.xml new file mode 100644 index 0000000..66976ec --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-impl.xml @@ -0,0 +1,510 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Job Detail + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + run + + + false + + + + + + 5000 + + + 30000 + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-jdbc.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-jdbc.xml new file mode 100644 index 0000000..484678e --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-jdbc.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler-standalone.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler-standalone.xml new file mode 100644 index 0000000..ec96650 --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler-standalone.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + org.quartz.simpl.RAMJobStore + + 5000 + + org.quartz.simpl.SimpleThreadPool + + 10 + 5 + true + true + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler.xml new file mode 100644 index 0000000..5847e4d --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + org.quartz.simpl.RAMJobStore + + 5000 + + org.quartz.simpl.SimpleThreadPool + + 10 + 5 + true + true + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml new file mode 100644 index 0000000..fd22958 --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent.xml new file mode 100644 index 0000000..4031926 --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/src/main/resources/rms.log4j.properties- b/src/main/resources/rms.log4j.properties- new file mode 100644 index 0000000..e98a4ec --- /dev/null +++ b/src/main/resources/rms.log4j.properties- @@ -0,0 +1,14 @@ +# Set root category priority to DEBUG and its appenders to stdout and R. +log4j.rootCategory=DEBUG, stdout +log4j.logger.com.eactive.eai.rms=DEBUG + +log4j.appender.stdout=kr.co.kpl.org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=kr.co.kpl.org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=[%d{dd MMM yyyy HH\:mm\:ss,SSS}] %5p (%F\:%L) - %m%n + +log4j.appender.file=kr.co.kpl.org.apache.log4j.RollingFileAppender +log4j.appender.file.File=/fslog/eai/${inst.Name}/ems_client-old.log +log4j.appender.file.MaxFileSize=10MB +log4j.appender.file.MaxBackupIndex=0 +log4j.appender.file.layout=kr.co.kpl.org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=[%d{dd MMM yyyy HH\:mm\:ss,SSS}] %5p (%F\:%L) - %m%n \ No newline at end of file