From dc5956b90956e39cd66578a19618f20d6f8ea0f3 Mon Sep 17 00:00:00 2001 From: JUNHWAN JANG Date: Mon, 18 Nov 2024 17:20:57 +0900 Subject: [PATCH 1/8] =?UTF-8?q?week3(=EC=A4=80=ED=99=98):=20=EC=84=B1?= =?UTF-8?q?=EB=8A=A5=20=EB=B0=8F=20=EB=B6=80=ED=95=98=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=84=A0=EC=A0=95=20=EB=B0=8F=20=EA=B0=84=ED=8E=B8?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.gitattributes | 3 + .../.gitignore | 37 +++ .../build.gradle | 62 +++++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + .../gradlew | 252 ++++++++++++++++++ .../gradlew.bat | 94 +++++++ .../settings.gradle | 7 + ...ringbootOrderPerfOptimizerApplication.java | 15 ++ .../order/perf/application/OrderService.java | 52 ++++ .../application/dto/OrderDetailsResponse.java | 67 +++++ .../com/order/perf/common/BaseEntity.java | 37 +++ .../com/order/perf/config/RedisConfig.java | 39 +++ .../java/com/order/perf/domain/Delivery.java | 55 ++++ .../java/com/order/perf/domain/Order.java | 51 ++++ .../com/order/perf/domain/OrderStatus.java | 17 ++ .../java/com/order/perf/domain/Payment.java | 32 +++ .../java/com/order/perf/domain/Product.java | 59 ++++ .../java/com/order/perf/domain/Refund.java | 45 ++++ .../order/perf/domain/RefundMethodName.java | 13 + .../com/order/perf/domain/RefundStatus.java | 15 ++ .../domain/repository/DeliveryRepository.java | 7 + .../domain/repository/OrderRepository.java | 7 + .../domain/repository/PaymentRepository.java | 7 + .../domain/repository/ProductRepository.java | 12 + .../domain/repository/RefundRepository.java | 7 + .../perf/dto/DeliveryDetailsResponse.java | 42 +++ .../com/order/perf/dto/OrderItemResponse.java | 40 +++ .../dto/ProductBundleDetailsResponse.java | 18 ++ .../perf/dto/ProductDetailsResponse.java | 34 +++ .../com/order/perf/dto/RefundDetailsDto.java | 34 +++ .../perf/presentation/OrderController.java | 27 ++ .../src/main/resources/application.yml | 54 ++++ .../src/main/resources/data.sql | 69 +++++ .../src/main/resources/schema.sql | 58 ++++ ...ootOrderPerfOptimizerApplicationTests.java | 13 + .../order_detail_api_setup_guide.md | 180 +++++++++++++ 37 files changed, 1568 insertions(+) create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/.gitattributes create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/.gitignore create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/build.gradle create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradle/wrapper/gradle-wrapper.jar create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradle/wrapper/gradle-wrapper.properties create mode 100755 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradlew create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradlew.bat create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/settings.gradle create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/OrderService.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/dto/OrderDetailsResponse.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/common/BaseEntity.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Delivery.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Order.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/OrderStatus.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Payment.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Product.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Refund.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundMethodName.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundStatus.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/DeliveryRepository.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/OrderRepository.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/PaymentRepository.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/ProductRepository.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/RefundRepository.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/DeliveryDetailsResponse.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/OrderItemResponse.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/ProductBundleDetailsResponse.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/ProductDetailsResponse.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/RefundDetailsDto.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderController.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/data.sql create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/schema.sql create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/test/java/com/java/springboot/order/perf/JavaSpringbootOrderPerfOptimizerApplicationTests.java create mode 100644 activity/week3/itschrisjang/order_detail_api_setup_guide.md diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/.gitattributes b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/.gitattributes new file mode 100644 index 0000000..8af972c --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/.gitattributes @@ -0,0 +1,3 @@ +/gradlew text eol=lf +*.bat text eol=crlf +*.jar binary diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/.gitignore b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/build.gradle b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/build.gradle new file mode 100644 index 0000000..abad4ec --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/build.gradle @@ -0,0 +1,62 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.10' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +group = 'com.order.perf' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + +repositories { + mavenCentral() + maven { url 'https://repo.spring.io/snapshot' } +} + +dependencies { + + // spring boot + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.boot:spring-boot-starter-jdbc' + implementation 'org.springframework.boot:spring-boot-starter-webflux' + + implementation 'org.springframework.boot:spring-boot-starter-cache' + + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'io.micrometer:micrometer-core' + implementation 'io.micrometer:micrometer-registry-prometheus' + + // Spring Boot Starter Data Redis + implementation 'org.springframework.boot:spring-boot-starter-data-redis' + implementation 'org.apache.commons:commons-pool2:2.11.1' + implementation 'io.lettuce.core:lettuce-core' // Lettuce 클라이언트 + + // Optional: Spring Boot Starter Validation (Redis 캐시에서 validation 적용 시 사용) + implementation 'org.springframework.boot:spring-boot-starter-validation' + + // test + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + + // lombok + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + // h2 + runtimeOnly 'com.h2database:h2' + + // mysql + runtimeOnly 'mysql:mysql-connector-java:8.0.33' + +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradle/wrapper/gradle-wrapper.jar b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradle/wrapper/gradle-wrapper.properties b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..df97d72 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradlew b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradlew new file mode 100755 index 0000000..f5feea6 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradlew @@ -0,0 +1,252 @@ +#!/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. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# 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/HEAD/platforms/jvm/plugins-application/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 + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# 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 + if ! command -v java >/dev/null 2>&1 + then + 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 +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + 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 + + +# 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"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# 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/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradlew.bat b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradlew.bat new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/gradlew.bat @@ -0,0 +1,94 @@ +@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 +@rem SPDX-License-Identifier: Apache-2.0 +@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=. +@rem This is normally unused +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% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +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% equ 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! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/settings.gradle b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/settings.gradle new file mode 100644 index 0000000..71a2d74 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/settings.gradle @@ -0,0 +1,7 @@ +pluginManagement { + repositories { + maven { url 'https://repo.spring.io/snapshot' } + gradlePluginPortal() + } +} +rootProject.name = 'order-perf-optimizer' diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java new file mode 100644 index 0000000..36186e1 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java @@ -0,0 +1,15 @@ +package com.order.perf; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; + +@EnableCaching +@SpringBootApplication +public class JavaSpringbootOrderPerfOptimizerApplication { + + public static void main(String[] args) { + SpringApplication.run(JavaSpringbootOrderPerfOptimizerApplication.class, args); + } + +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/OrderService.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/OrderService.java new file mode 100644 index 0000000..e287036 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/OrderService.java @@ -0,0 +1,52 @@ +package com.order.perf.application; + +import com.order.perf.domain.Delivery; +import com.order.perf.domain.repository.DeliveryRepository; +import com.order.perf.domain.Order; +import com.order.perf.domain.repository.OrderRepository; +import com.order.perf.domain.Product; +import com.order.perf.domain.repository.ProductRepository; +import com.order.perf.domain.Refund; +import com.order.perf.domain.repository.RefundRepository; +import com.order.perf.application.dto.OrderDetailsResponse; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Transactional(readOnly = true) +@Service +public class OrderService { + + private final OrderRepository orderRepository; + private final ProductRepository productRepository; + private final DeliveryRepository deliveryRepository; + private final RefundRepository refundRepository; + + public OrderService(final OrderRepository orderRepository, + final ProductRepository productRepository, + final DeliveryRepository deliveryRepository, + final RefundRepository refundRepository) { + this.orderRepository = orderRepository; + this.productRepository = productRepository; + this.deliveryRepository = deliveryRepository; + this.refundRepository = refundRepository; + } + + @Cacheable(value = "orderDetails", key = "#orderId") + public OrderDetailsResponse findOrderDetails(final Long orderId) { + Order order = orderRepository.findById(orderId) + .orElseThrow(() -> new RuntimeException("Order not found")); + + List products = productRepository.findByOrder(order); + + Delivery delivery = deliveryRepository.findById(order.getDeliveryId()) + .orElseThrow(() -> new RuntimeException("Delivery not found")); + + Refund refund = refundRepository.findById(order.getRefundId()) + .orElseThrow(() -> new RuntimeException("Refund not found")); + + return new OrderDetailsResponse(products, delivery, refund); + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/dto/OrderDetailsResponse.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/dto/OrderDetailsResponse.java new file mode 100644 index 0000000..bfe5292 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/dto/OrderDetailsResponse.java @@ -0,0 +1,67 @@ +package com.order.perf.application.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.order.perf.domain.Delivery; +import com.order.perf.domain.Product; +import com.order.perf.domain.Refund; +import com.order.perf.dto.DeliveryDetailsResponse; +import com.order.perf.dto.ProductBundleDetailsResponse; +import com.order.perf.dto.ProductDetailsResponse; +import com.order.perf.dto.RefundDetailsDto; +import lombok.Getter; + +import java.util.List; +import java.util.stream.Collectors; + +@Getter +public class OrderDetailsResponse { + + private final List orderItems; + + @JsonCreator + public OrderDetailsResponse(@JsonProperty("orderItems") List orderItems) { + this.orderItems = orderItems; + } + + public OrderDetailsResponse(final List products, + final Delivery delivery, + final Refund refund) { + this.orderItems = products.stream() + .map(product -> OrderItemDto.from(product, delivery, refund)) + .collect(Collectors.toList()); + } + + // 후보 3 + @Getter + public static class OrderItemDto { + + private ProductBundleDetailsResponse productBundleDetails; + private ProductDetailsResponse productDetails; + private DeliveryDetailsResponse deliveryDetails; + private RefundDetailsDto refundDetails; + + public OrderItemDto() {} + + public static OrderItemDto from(final Product product, + final Delivery delivery, + final Refund refund) { + ProductBundleDetailsResponse bundleDetails = new ProductBundleDetailsResponse("Bundle Name", 10); // 예제 값 설정 + ProductDetailsResponse productDetails = ProductDetailsResponse.from(product); + DeliveryDetailsResponse deliveryDetails = DeliveryDetailsResponse.from(delivery); + RefundDetailsDto refundDetails = RefundDetailsDto.from(refund); + + return new OrderItemDto(bundleDetails, productDetails, deliveryDetails, refundDetails); + } + + private OrderItemDto(final ProductBundleDetailsResponse productBundleDetails, + final ProductDetailsResponse productDetails, + final DeliveryDetailsResponse deliveryDetails, + final RefundDetailsDto refundDetails) { + this.productBundleDetails = productBundleDetails; + this.productDetails = productDetails; + this.deliveryDetails = deliveryDetails; + this.refundDetails = refundDetails; + } + } +} \ No newline at end of file diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/common/BaseEntity.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/common/BaseEntity.java new file mode 100644 index 0000000..9e687c3 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/common/BaseEntity.java @@ -0,0 +1,37 @@ +package com.order.perf.common; + +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseEntity { + + public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at", nullable = false) + private LocalDateTime updatedAt; + + protected BaseEntity() { + this.createdAt = LocalDateTime.parse(LocalDateTime.now().format(FORMATTER)); + this.updatedAt = this.createdAt; + } + + public void onPreUpdate() { + this.updatedAt = LocalDateTime.parse(LocalDateTime.now().format(FORMATTER)); + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java new file mode 100644 index 0000000..9586df7 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java @@ -0,0 +1,39 @@ +package com.order.perf.config; + +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import javax.annotation.PostConstruct; +import java.time.Duration; + +@Configuration +@EnableCaching +public class RedisConfig { + + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + // Key는 String 직렬화, Value는 JSON 직렬화 + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + + return redisTemplate; + } + + @Bean + public org.springframework.data.redis.cache.RedisCacheConfiguration redisCacheConfiguration() { + return org.springframework.data.redis.cache.RedisCacheConfiguration.defaultCacheConfig() + .entryTtl(Duration.ofSeconds(30)) // 캐시 만료 시간: 30초 + .serializeValuesWith(org.springframework.data.redis.serializer.RedisSerializationContext.SerializationPair + .fromSerializer(new GenericJackson2JsonRedisSerializer())); + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Delivery.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Delivery.java new file mode 100644 index 0000000..70ba330 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Delivery.java @@ -0,0 +1,55 @@ +package com.order.perf.domain; + +import com.order.perf.common.BaseEntity; +import lombok.Getter; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Getter +@Table(name = "DELIVERYS") +@Entity +public class Delivery extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "delivery_id", nullable = false) + private Long id; + + @Column(name = "recipient_name", nullable = false) + private String recipientName; // 받으실 분 + + @Column(name = "mobile", nullable = false) + private String mobile; // 연락처 + + @Column(name = "address", nullable = false) + private String address; // 배송 주소 + + @Column(name = "zip_code", nullable = false) + private String zipCode; // 우편 번호 + + @Column(name = "store_password", nullable = false) + private String storePassword; // 가게 비밀 번호 + + @Column(name = "delivery_memo", nullable = false) + private String deliveryMemo; // 배송 메모 + + protected Delivery() { + } + + public Delivery(final String recipientName, final String mobile, + final String address, final String zipCode, + final String storePassword, + final String deliveryMemo) { + this.recipientName = recipientName; + this.mobile = mobile; + this.address = address; + this.zipCode = zipCode; + this.storePassword = storePassword; + this.deliveryMemo = deliveryMemo; + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Order.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Order.java new file mode 100644 index 0000000..4a39ede --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Order.java @@ -0,0 +1,51 @@ +package com.order.perf.domain; + +import com.order.perf.common.BaseEntity; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Getter +@Table(name = "ORDERS") +@Entity +public class Order extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "order_id", nullable = false) + private Long id; + + private Long deliveryId; + private Long refundId; + private Long paymentId; + + @Column(name = "order_number", nullable = false) + private int orderNumber; // 주문 번호 + + @Column(name = "order_status", nullable = false) + @Enumerated(EnumType.STRING) + private OrderStatus orderStatus; // 주문 상태 + + protected Order() { + } + + public Order(final Long deliveryId, + final Long refundId, + final Long paymentId, + int orderNumber, OrderStatus orderStatus) { + this.deliveryId = deliveryId; + this.refundId = refundId; + this.paymentId = paymentId; + this.orderNumber = orderNumber; + this.orderStatus = orderStatus; + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/OrderStatus.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/OrderStatus.java new file mode 100644 index 0000000..46be96e --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/OrderStatus.java @@ -0,0 +1,17 @@ +package com.order.perf.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum OrderStatus { + CANCELLED, // 주문이 취소된 상태 + PENDING, // 주문이 대기 중인 상태 (결제 대기 등) + CONFIRMED, // 주문이 확인된 상태 + PROCESSING, // 주문이 처리 중인 상태 + SHIPPED, // 주문이 발송된 상태 + DELIVERED, // 주문이 배송 완료된 상태 + RETURNED, // 주문이 반품 된 상태 + COMPLETED // 주문이 최종 완료된 상태 +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Payment.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Payment.java new file mode 100644 index 0000000..f620340 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Payment.java @@ -0,0 +1,32 @@ +package com.order.perf.domain; + +import com.order.perf.common.BaseEntity; +import lombok.Getter; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Getter +@Table(name = "PAYMENTS") +@Entity +public class Payment extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String paymentMethod; // 결제 수단 ex) BILLING_NAVER_PAY + private String paymentMethodName; // 결제 수단 이름 ex) 네이버 + private int paymentAmount; // 총 결제 금액 + + protected Payment() { + } + + public Payment(final String paymentMethod, final String paymentMethodName, final int paymentAmount) { + this.paymentMethod = paymentMethod; + this.paymentMethodName = paymentMethodName; + this.paymentAmount = paymentAmount; + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Product.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Product.java new file mode 100644 index 0000000..92d7812 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Product.java @@ -0,0 +1,59 @@ +package com.order.perf.domain; + +import com.order.perf.common.BaseEntity; +import lombok.Getter; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Getter +@Table(name = "PRODUCTS") +@Entity +public class Product extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "product_id", nullable = false) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "order_id") + private Order order; + + @Column(name = "product_name", nullable = false) + private String productName; // 상품 이름 + + @Column(name = "description", nullable = false) + private String description; // 상품 설명 + + @Column(name = "price", nullable = false) + private int price; // 상품 가격 + + @Column(name = "bundle_name", nullable = false) + private String bundleName; // 상품 묶음 이름 (예: 크리스마스 선물 세트) + + @Column(name = "bundle_quantity", nullable = false) + private int bundleQuantity; // 해당 묶음에 포함된 상품의 수량 + protected Product() { + } + + public Product( + final Order order, + final String productName, final String description, + final int price, + final String bundleName, final int bundleQuantity) { + this.order = order; + this.productName = productName; + this.description = description; + this.price = price; + this.bundleName = bundleName; + this.bundleQuantity = bundleQuantity; + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Refund.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Refund.java new file mode 100644 index 0000000..4c9ca05 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Refund.java @@ -0,0 +1,45 @@ +package com.order.perf.domain; + +import com.order.perf.common.BaseEntity; +import lombok.Getter; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Getter +@Table(name = "REFUNDS") +@Entity +public class Refund extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + + @Column(name = "refund_id", nullable = false) + private Long id; + + @Enumerated(EnumType.STRING) + @Column(name = "refund_method_name", nullable = false) + private RefundMethodName refundMethodName; // 환불 수단 + + @Column(name = "refund_amount", nullable = false) + private int refundAmount; // 총 환불 금액 + + @Enumerated(EnumType.STRING) + @Column(name = "refund_status", nullable = false) + private RefundStatus refundStatus; // 환불 상태 + + protected Refund() { + } + + public Refund(final RefundMethodName refundMethodName, final int refundAmount, final RefundStatus refundStatus) { + this.refundMethodName = refundMethodName; + this.refundAmount = refundAmount; + this.refundStatus = refundStatus; + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundMethodName.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundMethodName.java new file mode 100644 index 0000000..d31d65e --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundMethodName.java @@ -0,0 +1,13 @@ +package com.order.perf.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum RefundMethodName { + + NAVER_PAY, + KAKAO_PAY, + TOSS_PAY +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundStatus.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundStatus.java new file mode 100644 index 0000000..b5423a8 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundStatus.java @@ -0,0 +1,15 @@ +package com.order.perf.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum RefundStatus { + PENDING, // 환불 요청 대기 중 + APPROVED, // 환불 승인됨 + REJECTED, // 환불 거부됨 + PROCESSING, // 환불 처리 중 + COMPLETED, // 환불 완료됨 + FAILED // 환불 실패 +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/DeliveryRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/DeliveryRepository.java new file mode 100644 index 0000000..5c3bcc7 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/DeliveryRepository.java @@ -0,0 +1,7 @@ +package com.order.perf.domain.repository; + +import com.order.perf.domain.Delivery; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface DeliveryRepository extends JpaRepository { +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/OrderRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/OrderRepository.java new file mode 100644 index 0000000..b655035 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/OrderRepository.java @@ -0,0 +1,7 @@ +package com.order.perf.domain.repository; + +import com.order.perf.domain.Order; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface OrderRepository extends JpaRepository { +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/PaymentRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/PaymentRepository.java new file mode 100644 index 0000000..903db48 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/PaymentRepository.java @@ -0,0 +1,7 @@ +package com.order.perf.domain.repository; + +import com.order.perf.domain.Payment; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PaymentRepository extends JpaRepository { +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/ProductRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/ProductRepository.java new file mode 100644 index 0000000..ec11c5a --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/ProductRepository.java @@ -0,0 +1,12 @@ +package com.order.perf.domain.repository; + +import com.order.perf.domain.Order; +import com.order.perf.domain.Product; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ProductRepository extends JpaRepository { + + List findByOrder(final Order order); +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/RefundRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/RefundRepository.java new file mode 100644 index 0000000..706344c --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/RefundRepository.java @@ -0,0 +1,7 @@ +package com.order.perf.domain.repository; + +import com.order.perf.domain.Refund; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RefundRepository extends JpaRepository { +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/DeliveryDetailsResponse.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/DeliveryDetailsResponse.java new file mode 100644 index 0000000..e9170cd --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/DeliveryDetailsResponse.java @@ -0,0 +1,42 @@ +package com.order.perf.dto; + +import com.order.perf.domain.Delivery; +import lombok.Builder; +import lombok.Getter; + +// 배송 정보 DTO +@Getter +public class DeliveryDetailsResponse { + + private String recipientName; + private String mobile; + private String address; + private String zipCode; + private String storePassword; + private String deliveryMemo; + + public DeliveryDetailsResponse() {} + + @Builder + public DeliveryDetailsResponse(final String recipientName, final String mobile, + final String address, final String zipCode, + final String storePassword, final String deliveryMemo) { + this.recipientName = recipientName; + this.mobile = mobile; + this.address = address; + this.zipCode = zipCode; + this.storePassword = storePassword; + this.deliveryMemo = deliveryMemo; + } + + public static DeliveryDetailsResponse from(final Delivery delivery) { + return DeliveryDetailsResponse.builder() + .recipientName(delivery.getRecipientName()) + .mobile(delivery.getMobile()) + .address(delivery.getAddress()) + .zipCode(delivery.getZipCode()) + .storePassword(delivery.getStorePassword()) + .deliveryMemo(delivery.getDeliveryMemo()) + .build(); + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/OrderItemResponse.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/OrderItemResponse.java new file mode 100644 index 0000000..3a39fde --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/OrderItemResponse.java @@ -0,0 +1,40 @@ +package com.order.perf.dto; + +import com.order.perf.domain.Order; +import com.order.perf.domain.OrderStatus; +import lombok.Builder; +import lombok.Getter; + +import java.time.LocalDateTime; + +// 주문 항목 DTO +@Getter +public class OrderItemResponse { + + private final Long orderId; + private final int orderNumber; + private final OrderStatus orderStatus; + private final LocalDateTime createdAt; + private final LocalDateTime updatedAt; + + @Builder + public OrderItemResponse(final Long orderId, final int orderNumber, + final OrderStatus orderStatus, + final LocalDateTime createdAt, final LocalDateTime updatedAt) { + this.orderId = orderId; + this.orderNumber = orderNumber; + this.orderStatus = orderStatus; + this.createdAt = createdAt; + this.updatedAt = updatedAt; + } + + public static OrderItemResponse from(final Order order) { + return OrderItemResponse.builder() + .orderId(order.getId()) + .orderNumber(order.getOrderNumber()) + .orderStatus(order.getOrderStatus()) + .createdAt(order.getCreatedAt()) + .updatedAt(order.getUpdatedAt()) + .build(); + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/ProductBundleDetailsResponse.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/ProductBundleDetailsResponse.java new file mode 100644 index 0000000..37849dd --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/ProductBundleDetailsResponse.java @@ -0,0 +1,18 @@ +package com.order.perf.dto; + +import lombok.Getter; + +// 상품 묶음 관련 정보 DTO +@Getter +public class ProductBundleDetailsResponse { + + private String bundleName; + private int bundleQuantity; + + public ProductBundleDetailsResponse() {} + + public ProductBundleDetailsResponse(final String bundleName, final int bundleQuantity) { + this.bundleName = bundleName; + this.bundleQuantity = bundleQuantity; + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/ProductDetailsResponse.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/ProductDetailsResponse.java new file mode 100644 index 0000000..bbea4a9 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/ProductDetailsResponse.java @@ -0,0 +1,34 @@ +package com.order.perf.dto; + +import com.order.perf.domain.Product; +import lombok.Builder; +import lombok.Getter; + +// 상품 상세 정보 DTO +@Getter +public class ProductDetailsResponse { + + private Long productId; + private String name; + private String description; + private int price; + + public ProductDetailsResponse() {} + + @Builder + public ProductDetailsResponse(final Long productId, final String name, final String description, final int price) { + this.productId = productId; + this.name = name; + this.description = description; + this.price = price; + } + + public static ProductDetailsResponse from(final Product product) { + return ProductDetailsResponse.builder() + .productId(product.getId()) + .name(product.getProductName()) + .description(product.getDescription()) + .price(product.getPrice()) + .build(); + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/RefundDetailsDto.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/RefundDetailsDto.java new file mode 100644 index 0000000..7e61e4a --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/RefundDetailsDto.java @@ -0,0 +1,34 @@ +package com.order.perf.dto; + + +import com.order.perf.domain.Refund; +import com.order.perf.domain.RefundMethodName; +import com.order.perf.domain.RefundStatus; +import lombok.Builder; +import lombok.Getter; + +// 환불 정보 DTO +@Getter +public class RefundDetailsDto { + + private RefundMethodName refundMethodName; + private int refundAmount; + private RefundStatus refundStatus; + + public RefundDetailsDto() {} + + @Builder + public RefundDetailsDto(final RefundMethodName refundMethodName, final int refundAmount, final RefundStatus refundStatus) { + this.refundMethodName = refundMethodName; + this.refundAmount = refundAmount; + this.refundStatus = refundStatus; + } + + public static RefundDetailsDto from(final Refund refund) { + return RefundDetailsDto.builder() + .refundMethodName(refund.getRefundMethodName()) + .refundAmount(refund.getRefundAmount()) + .refundStatus(RefundStatus.PENDING) + .build(); + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderController.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderController.java new file mode 100644 index 0000000..501d55d --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderController.java @@ -0,0 +1,27 @@ +package com.order.perf.presentation; + +import com.order.perf.application.dto.OrderDetailsResponse; +import com.order.perf.application.OrderService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Slf4j +public class OrderController { + + private final OrderService orderService; + + public OrderController(final OrderService orderService) { + this.orderService = orderService; + } + + @GetMapping(path = "/api/orders/{id}") + public ResponseEntity findByOrderDetail(@PathVariable final Long id) { + OrderDetailsResponse response = orderService.findOrderDetails(id); + return new ResponseEntity<>(response, HttpStatus.OK); + } +} \ No newline at end of file diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml new file mode 100644 index 0000000..0b52621 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml @@ -0,0 +1,54 @@ +spring: + application: + name: spurt-test + datasource: + url: 'jdbc:h2:mem:order_perf;MODE=MYSQL' # H2를 MySQL 모드로 설정 + username: 'user' + password: '' + driver-class-name: org.h2.Driver + defer-datasource-initialization: true + jpa: + hibernate: + ddl-auto: none + properties: + hibernate: + format_sql: true + show_sql: true + sql: + init: + mode: ALWAYS # 데이터베이스 초기화 시 data.sql을 항상 실행 + h2: + console: + enabled: true + path: /h2-console + metrics: + tags: + application: ${spring.application.name} + cache: + type: redis + redis: + host: localhost # Redis 서버 주소 + port: 6379 # Redis 기본 포트 +# password: # Redis 비밀번호 (필요 시) + lettuce: + pool: + max-active: 200 + max-idle: 100 + min-idle: 20 +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + endpoints: + web: + exposure: + include: health, info, metrics, prometheus + metrics: + tags: + application: ${spring.application.name} +logging: + level: + org.springframework.data.redis: DEBUG + io.lettuce.core: DEBUG \ No newline at end of file diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/data.sql b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/data.sql new file mode 100644 index 0000000..b6ea70f --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/data.sql @@ -0,0 +1,69 @@ +-- 주문 데이터 삽입 +INSERT INTO ORDERS (order_id, delivery_id, refund_id, payment_id, order_number, order_status, created_at, updated_at) +VALUES + (1, 1, 1, 1, 10001, 'CONFIRMED', NOW(), NOW()), +(2, 2, 2, 2, 10002, 'PENDING', NOW(), NOW()), +(3, 3, 3, 3, 10003, 'SHIPPED', NOW(), NOW()), +(4, 4, 4, 4, 10004, 'DELIVERED', NOW(), NOW()), +(5, 5, 5, 5, 10005, 'CANCELLED', NOW(), NOW()), +(6, 6, 6, 6, 10006, 'RETURNED', NOW(), NOW()), +(7, 7, 7, 7, 10007, 'PROCESSING', NOW(), NOW()), +(8, 8, 8, 8, 10008, 'COMPLETED', NOW(), NOW()), +(9, 9, 9, 9, 10009, 'CONFIRMED', NOW(), NOW()), +(10, 10, 10, 10, 10010, 'PENDING', NOW(), NOW()); + +-- 상품 데이터 삽입 (order_id 포함) +INSERT INTO PRODUCTS (product_id, order_id, product_name, description, price, bundle_name, bundle_quantity, created_at, updated_at) +VALUES + (1, 1, '베스트코 왕교자만두 1.4kg', '쫄깃한 만두피와 씹는 맛이 살도록 굵게 썰어낸 속재료가 만난 환상적인 식감', 7500, '크리스마스 선물 세트', 10, NOW(), NOW()), +(2, 2, 'CJ 햇반 210g x 24개입', '100% 국내산 쌀로 지은 햇반', 23000, '추석 선물 세트', 5, NOW(), NOW()), +(3, 3, '풀무원 얇은피 만두 1.2kg', '고소한 만두피와 꽉 찬 속이 특징', 8200, '명절 선물 세트', 15, NOW(), NOW()), +(4, 4, '비비고 김치왕만두 1kg', '김치와 고기의 완벽 조화', 6800, '가정 간편식 세트', 12, NOW(), NOW()), +(5, 5, '교촌 치킨 양념소스 500ml', '달콤한 양념 맛을 그대로', 4900, '소스 패키지', 8, NOW(), NOW()), +(6, 6, '롯데 찰떡 아이스크림 6개입', '쫄깃한 찰떡과 부드러운 아이스크림의 조화', 6000, '간식 세트', 6, NOW(), NOW()), +(7, 7, '오뚜기 진라면 매운맛 5개입', '칼칼한 매운맛의 라면', 2800, '라면 묶음 세트', 20, NOW(), NOW()), +(8, 8, '농심 짜파게티 5개입', '짜장 소스가 맛있는 짜파게티', 3200, '라면 묶음 세트', 18, NOW(), NOW()), +(9, 9, '삼양 불닭볶음면 5개입', '매운맛의 진수를 보여주는 라면', 3500, '매운맛 패키지', 25, NOW(), NOW()), +(10, 10, '빙그레 바나나우유 8개입', '달콤한 바나나맛 우유', 5600, '음료 세트', 10, NOW(), NOW()); + +-- 결제 데이터 삽입 +INSERT INTO PAYMENTS (id, payment_method, payment_method_name, payment_amount, created_at, updated_at) +VALUES + (1, 'BILLING_NAVER_PAY', '네이버', 7500, NOW(), NOW()), +(2, 'BILLING_KAKAO_PAY', '카카오', 23000, NOW(), NOW()), +(3, 'BILLING_CARD', '신용카드', 8200, NOW(), NOW()), +(4, 'BILLING_CARD', '신용카드', 6800, NOW(), NOW()), +(5, 'BILLING_BANK', '계좌이체', 4900, NOW(), NOW()), +(6, 'BILLING_NAVER_PAY', '네이버', 6000, NOW(), NOW()), +(7, 'BILLING_KAKAO_PAY', '카카오', 2800, NOW(), NOW()), +(8, 'BILLING_CARD', '신용카드', 3200, NOW(), NOW()), +(9, 'BILLING_BANK', '계좌이체', 3500, NOW(), NOW()), +(10, 'BILLING_NAVER_PAY', '네이버', 5600, NOW(), NOW()); + +-- 배송 데이터 삽입 +INSERT INTO DELIVERYS (delivery_id, recipient_name, mobile, address, zip_code, store_password, delivery_memo, created_at, updated_at) +VALUES + (1, '팬시', '010-1234-5678', '서울특별시 강남구', '13579', 'qwer1234', '문 앞에 놔주세요', NOW(), NOW()), +(2, '민지', '010-1111-2222', '서울특별시 송파구', '54321', 'asdf5678', '경비실에 맡겨주세요', NOW(), NOW()), +(3, '수현', '010-3333-4444', '부산광역시 해운대구', '67890', 'zxcv0987', '현관에 놔주세요', NOW(), NOW()), +(4, '하준', '010-5555-6666', '인천광역시 남동구', '12321', 'qazx1234', '배송 전 연락주세요', NOW(), NOW()), +(5, '예린', '010-7777-8888', '대구광역시 중구', '99887', 'wsxc3456', '뒤편에 놔주세요', NOW(), NOW()), +(6, '지훈', '010-9999-0000', '대전광역시 서구', '11223', 'edcv0987', '문고리에 걸어주세요', NOW(), NOW()), +(7, '채은', '010-2222-1111', '광주광역시 북구', '77665', 'rfvb5678', '인터폰 눌러주세요', NOW(), NOW()), +(8, '주연', '010-4444-3333', '울산광역시 동구', '55664', 'tgby8765', '아파트 우편함에 놔주세요', NOW(), NOW()), +(9, '다연', '010-6666-5555', '경기도 성남시', '22334', 'yhnb3456', '문 앞 화분 뒤에 놔주세요', NOW(), NOW()), +(10, '재민', '010-8888-7777', '경기도 고양시', '33221', 'ujmn2345', '차 뒤편에 놔주세요', NOW(), NOW()); + +-- 환불 데이터 삽입 +INSERT INTO REFUNDS (refund_id, refund_method_name, refund_amount, refund_status, created_at, updated_at) +VALUES + (1, 'NAVER_PAY', 7500, 'PENDING', NOW(), NOW()), +(2, 'KAKAO_PAY', 8200, 'APPROVED', NOW(), NOW()), +(3, 'TOSS_PAY', 4900, 'REJECTED', NOW(), NOW()), +(4, 'NAVER_PAY', 6000, 'PROCESSING', NOW(), NOW()), +(5, 'KAKAO_PAY', 23000, 'COMPLETED', NOW(), NOW()), +(6, 'TOSS_PAY', 3500, 'FAILED', NOW(), NOW()), +(7, 'NAVER_PAY', 2800, 'PENDING', NOW(), NOW()), +(8, 'KAKAO_PAY', 3200, 'APPROVED', NOW(), NOW()), +(9, 'TOSS_PAY', 5600, 'PROCESSING', NOW(), NOW()), +(10, 'NAVER_PAY', 12300, 'COMPLETED', NOW(), NOW()); diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/schema.sql b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/schema.sql new file mode 100644 index 0000000..f72ea96 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/schema.sql @@ -0,0 +1,58 @@ +-- 주문 테이블 생성 +CREATE TABLE ORDERS ( + order_id BIGINT AUTO_INCREMENT PRIMARY KEY, + delivery_id BIGINT, -- 배송 ID + refund_id BIGINT, -- 환불 ID + payment_id BIGINT, -- 결제 ID + order_number INT NOT NULL, + order_status VARCHAR(50) NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL +); + +-- 상품 테이블 생성 +CREATE TABLE PRODUCTS ( + product_id BIGINT AUTO_INCREMENT PRIMARY KEY, + order_id BIGINT, -- 주문 ID + product_name VARCHAR(255) NOT NULL, + description VARCHAR(255) NOT NULL, + price INT NOT NULL, + bundle_name VARCHAR(255) NOT NULL, + bundle_quantity INT NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL, + FOREIGN KEY (order_id) REFERENCES ORDERS(order_id) +); + +-- 결제 테이블 생성 +CREATE TABLE PAYMENTS ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + payment_method VARCHAR(255) NOT NULL, + payment_method_name VARCHAR(255) NOT NULL, + payment_amount INT NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL +); + +-- 배송 테이블 생성 +CREATE TABLE DELIVERYS ( + delivery_id BIGINT AUTO_INCREMENT PRIMARY KEY, + recipient_name VARCHAR(255) NOT NULL, + mobile VARCHAR(20) NOT NULL, + address VARCHAR(255) NOT NULL, + zip_code VARCHAR(10) NOT NULL, + store_password VARCHAR(255) NOT NULL, + delivery_memo VARCHAR(255) NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL +); + +-- 환불 테이블 생성 +CREATE TABLE REFUNDS ( + refund_id BIGINT AUTO_INCREMENT PRIMARY KEY, + refund_method_name VARCHAR(255) NOT NULL, + refund_amount INT NOT NULL, + refund_status VARCHAR(50) NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL +); diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/test/java/com/java/springboot/order/perf/JavaSpringbootOrderPerfOptimizerApplicationTests.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/test/java/com/java/springboot/order/perf/JavaSpringbootOrderPerfOptimizerApplicationTests.java new file mode 100644 index 0000000..a30785a --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/test/java/com/java/springboot/order/perf/JavaSpringbootOrderPerfOptimizerApplicationTests.java @@ -0,0 +1,13 @@ +package com.java.springboot.order.perf; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class JavaSpringbootOrderPerfOptimizerApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/activity/week3/itschrisjang/order_detail_api_setup_guide.md b/activity/week3/itschrisjang/order_detail_api_setup_guide.md new file mode 100644 index 0000000..bcdd852 --- /dev/null +++ b/activity/week3/itschrisjang/order_detail_api_setup_guide.md @@ -0,0 +1,180 @@ + +# Redis 캐시 및 K6 부하 테스트 결과 분석 + +## 1. 캐싱 전략 검증 +| 목표: 자주 조회되는 데이터를 캐시로 처리하여 성능 개선 여부 확인. +### 1.1. 결과 기대 효과 +1. 동일한 orderId 요청 시: + - 첫 번째 요청: 데이터베이스에서 조회하고 캐시에 저장. + - 이후 요청: 캐시에서 즉시 데이터 반환, DB 호출 없음. +2. 성능 개선: + - DB 부하 감소. + - 요청 처리 속도 개선. +3. 확장성: + - 주문 상세 데이터 외 다른 엔드포인트에도 동일한 방식으로 캐싱 적용 가능. +### 1.2. 테스트 항목 +1. 캐시 적중률: + - 동일한 데이터를 여러 번 요청할 때 캐시 활용 비율 측정. +2. 캐시 만료 정책: + - 캐시 데이터의 만료 시간이 성능에 미치는 영향 분석. +3. 캐시와 데이터 동기화: + - DB와 캐시 간 데이터 불일치 상황에서의 처리 성능 확인. +- 해결 방안 + - Redis 같은 인메모리 캐시 사용. + - 데이터 변경 이벤트 기반으로 캐시 동기화 설정. + +## 2. 실행 개요 +- **스크립트**: `script.js` +- **테스트 시나리오**: + - 10개의 가상 사용자(VU, Virtual Users)가 1분 동안 루프를 실행 + - 30초의 Graceful Stop 기간 설정 +- **테스트 목표**: `http://localhost:8080/api/orders/1`에 요청을 보내고 성능 데이터를 수집 + +--- + +## 3. 주요 결과 +``` +connected_client : 1 +``` +### 요청 처리 성능 +- **총 요청 수**: 32,442건 +- **성공 요청 수**: 32,424건 (99.95%) +- **실패 요청 수**: 18건 (0.05%) +- **평균 응답 시간**: 873.23µs (약 0.87ms) +- **최대 응답 시간**: 169.56ms +- **90번째 백분위수**: 1.35ms +- **95번째 백분위수**: 1.92ms + +### 네트워크 데이터 +- **수신된 데이터**: 24MB (초당 346kB) +- **전송된 데이터**: 3.6MB (초당 52kB) + +### 요청 처리 +- **총 요청 수**: 32,682 +- **성공 요청 수**: 32,600 (99.75%) +- **실패 요청 수**: 82 (0.25%) +- **평균 요청 시간**: 4.08ms +- **최대 요청 시간**: 235.79ms +- **90백분위수 요청 시간**: 6.17ms +- **95백분위수 요청 시간**: 8.06ms + +### 네트워크 데이터 +- **수신된 데이터**: 24 MB (351 kB/s) +- **전송된 데이터**: 3.6 MB (53 kB/s) + +### 연결 시간 +- **차단 시간 (Blocked Time)**: + - **평균**: 31.39ms + - **중앙값**: 62µs + - **최대값**: 19.51s + - **90백분위수**: 153µs + - **95백분위수**: 214µs +- **연결 시간 (Connecting Time)**: + - **평균**: 31.37ms + - **중앙값**: 54µs + - **최대값**: 19.51s + - **90백분위수**: 134µs + - **95백분위수**: 189µs + +### HTTP 요청 +- **수신 시간**: + - **평균**: 65.89µs + - **중앙값**: 18µs + - **최대값**: 66.81ms + - **90백분위수**: 87µs + - **95백분위수**: 151µs +- **전송 시간**: + - **평균**: 10.65µs + - **중앙값**: 4µs + - **최대값**: 1.71ms + - **90백분위수**: 15µs + - **95백분위수**: 27µs + +### 가상 사용자 (VUs) +- **최소 VUs**: 1 +- **최대 VUs**: 50 + +--- + +## 4. 관찰 결과 + +1. **타임아웃 오류**: + - 총 **82건의 요청이 `i/o timeout`** 으로 실패. + - 서버의 동시 연결 처리 능력 부족 또는 네트워크 지연 문제가 원인일 가능성. + +2. **요청 성능**: + - **평균 요청 시간**(4.08ms)은 낮지만, **최대 요청 시간**(235.79ms)은 일부 요청에서 높은 지연이 발생했음을 의미. + +3. **차단 및 연결 시간**: + - `Blocked` 및 `Connecting` 시간에서 최대값(19.51s)이 나타나, 특정 요청이 심각한 지연을 겪었음을 알 수 있음. + +4. **처리량(Throughput)**: + - 시스템은 **초당 479.68 요청**을 처리하며, 높은 요청 처리 능력을 보여줌. + +--- + +## 5. 문제점 분석 + +### `dial: i/o timeout` 오류 +- **오류 원인**: + - `localhost:8080` 서버가 요청에 응답하지 못했거나, 과부하로 인해 연결 실패 발생. + - 발생 가능성: + - 서버가 실행되지 않음. + - 서버가 과도한 부하로 인해 요청을 처리할 수 없었음. + - 네트워크 구성 문제. + +### HTTP 요청 실패 비율 +- **결과**: + - 총 32,442건의 요청 중 82건 실패. + - 실패율: 0.05%로 매우 낮은 수준. +- **해석**: + - 현재 요청량에서는 서버가 대부분의 요청을 잘 처리함. + - 하지만 서버 부하가 증가할 경우 실패율 증가 가능. + +### 응답 시간 +- **평균 응답 시간**: 0.87ms로 매우 짧음. +- **최대 응답 시간**: 169.56ms로 특정 요청에서 지연 발생. + +--- + +## 6. 해결 방안 + +### 6.1. 확인 사항 + - `localhost:8080` 서버가 테스트 중 정상적으로 실행되었는지 확인. + - 서버 로그를 검토하여 요청 처리 실패 원인 분석. + - `redis connected clients` 가 `1`로 확인. + +--- + +## 7. 모니터링 결과 +![average_api_response_time](./image/average_api_response_time.png) + +![redis_monitoring](./image/redis_monitoring.png) + +--- + +## 8. 결론 +테스트 결과, 서버는 대부분의 요청을 안정적으로 처리했으나 일부 요청에서 `i/o timeout` 문제가 발생했습니다. + +--- + +## 9. Redis 캐시 타임아웃 문제 분석 및 해결 + +> 추후 진행 + +#### 10.1.1 타임아웃 발생 원인 +**(1) Redis 캐시 활용률 문제** +- **낮은 캐시 적중률**: 캐시 데이터가 요청 키와 일치하지 않는 경우, Redis가 캐시 데이터를 제공하지 못하고 데이터베이스로 요청을 넘깁니다. +- **자주 발생하는 캐시 무효화**: 캐시 키가 올바르게 설정되지 않았거나 데이터가 빈번히 변경되어 캐시가 무효화되었습니다. +- **다양한 데이터 테스트**: 요청 데이터가 캐시되지 않은 경우가 많아 캐시 적중률이 낮아질 수 있습니다. + +**(2) Redis 성능 병목** +- **Redis 서버 부하**: 높은 TPS(초당 트랜잭션)로 인해 Redis 응답 속도가 느려질 수 있습니다. +- **연결 풀 부족**: 제한된 Redis 연결로 인해 요청이 대기 상태에 빠질 수 있습니다. + +**(3) 서버 병목 현상** +- **데이터베이스 호출 병목**: 캐시가 적중하지 않으면 데이터베이스 쿼리가 병목이 될 가능성이 있습니다. +- **애플리케이션 병목**: 비즈니스 로직이나 기타 I/O 작업이 병목을 유발할 수 있습니다. + +**(4) 네트워크 문제** +- **네트워크 지연**: Redis와 API 서버 간 네트워크 속도가 느리거나 불안정할 경우 타임아웃이 발생할 수 있습니다. From a136b0a88683afb70d1bbdfe30ba011fcc97f833 Mon Sep 17 00:00:00 2001 From: JUNHWAN JANG Date: Mon, 18 Nov 2024 17:24:54 +0900 Subject: [PATCH 2/8] =?UTF-8?q?week3(=EC=A4=80=ED=99=98):=20md=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=B2=A8=EB=B6=80=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EB=B0=8F=20k6=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20?= =?UTF-8?q?=EC=98=88=EC=A0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../image/average_api_response_time.png | Bin 0 -> 35269 bytes .../itschrisjang/image/redis_monitoring.png | Bin 0 -> 147884 bytes .../week3/itschrisjang/k6/script/script.js | 17 +++++++++++++++++ 3 files changed, 17 insertions(+) create mode 100644 activity/week3/itschrisjang/image/average_api_response_time.png create mode 100644 activity/week3/itschrisjang/image/redis_monitoring.png create mode 100644 activity/week3/itschrisjang/k6/script/script.js diff --git a/activity/week3/itschrisjang/image/average_api_response_time.png b/activity/week3/itschrisjang/image/average_api_response_time.png new file mode 100644 index 0000000000000000000000000000000000000000..03b589cff5476aefef9dfd583efdc36a67a058b0 GIT binary patch literal 35269 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® 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.AP{npA@>|s zL2+D6%6X`%X?kS$Oze}zn}Lq)ux6W85fNj35qSv+^3dHocyRjwgjQgMd`cKbC4*@; z2EXu-tS-Ew(oqKbBbx4&wH&7b$NEOj=K0^!{Q_1VP&^?pNFGQ5ZoijhZNAXX)oI8{ z=K)$yeVALce}e+c-^O3$30vCGN1Q>=E8-N+TuyNFdbdg-gS*v{a5Cww;_N%Smu9Tq z<;4%Tm37~j^Phm4_rDd~(lo2}-gvn;9)%d-InrZHO1 zTdpZQPGJk^==poqc0s`EZ;&1bs($e|fQy^ElIAx=E8*tF#-fmgxNmKD%0fnglSF02 z0-#=XDkm$AAZY$9oJw7wMtE<)4@_zNCCHBmd#OXAIay23bCPVpp}K~+I|>T~i=$tj z?4o@Od6?m#=SkWEsI>mEc-9AucGbo|cGCPM1vxf{XEHp_atTfTqkE}rSwh^ljSAFb zvPXyid)GSRpY2Y80d$V~G9^iRapyP}@EtjaVfR58NRHT&2IbaD{5y1_{U!lQ?|G9tL8h*T?Pd?qHxywh(J|I=;O{%Nnus?W3$YF)=`1MnOX1T7S>yED?ol?fH zko#<`zb+nv+@90T{)QMHrk;kJ=pbwnvn@-`Yig}P6ihFRXGE{FRQEx}3F9q!0LmbQ zkZGr*r@tg%(B1sy zG%z^$&Vqr+srbwLFAT!MZ7|rChHk%#M+(WCVt@(?Ngx@$Ww4{LA}VfBaZ0WS9qSo2 z?l+Nrb#5w~d+@2Uc%bv~&8`teJv)nqg}T%i2R_J1w^GBykKZ)+1yNK8<1cE&W&J$GO*7bL#e zm^XBEbY$FwO+pO4_)ssIpC1(-Z+m-x?~;*p#I_r`njyEg*MmJ}uTP1a#*&qVCyGP7 zqqHhe+2zU^kc%-S1x(S=;ddIU3~;Dy|EU+br~YM^*$X(7p`f-ug_3 zFAu3ZroI&ZDV-UK_fnD&`AO;R zgk^5Gf2^d~Z|sQ6c`G*KE>+F<=cdWi%xz-o#Sa>Y8uLpK(#A$Z*QC`VIX#)htmc} z5|mP(_3IZcI6Ym0PBA^}v-Yui9a^ggOTbQgii)_MDdpW}WxUT5)gQGl;)4}~yxvKq zsJf99I522dV4HpNqlynOww_~VW|g5bmD zMXB0ZPHDAH*nQ&#?`3o$Y3{F{^~=6azrq)W+q$Z%vL7PF_KPhuvpT=2f%kv^ep+`3 zvn1=;Xl2f^h7-JboUCEBRw~=v+Q_XSe2?9ukX>`hk>7XsIH337qALLb|zf0z_zRmj=qN8Ps?%}Gt< zOq?nMNd=Q5Zi%B=zeIqTGA^J)rfk>Mx$k(%*1Zwu1XI-h8x;`+Tu-@0X&~JZ z+TDqD4LbUF^H3)4T<~J@_6w@TnxFqhzy2;MoK92OZ)8WgMlI;Gh^7 zGBCh4N*OQu5Cr@3rS(K0L(PXyuOBv3_~z4;I)Q;4IlQiIS^08)1z$SE7+EW{e=bz4 zzNlkHF7y+;q1G$i8q@oI=l=)zt7yFzaKxVvMz|!CA8otkI9{qvw`jdbXL54LZ4^E4fdI@!%YZ+pvUiyBC|o zz*N^cLd~p47K2TD`rZ*Ep#0K|ArrD7jFCLz72(iSZ z+)3!}fEHiCWL_zVI3BT)e3froWK_b1S9qj>k36!bWV)xR*&8ayQo!MeYcukX4trN0 zH(q``c$U)~yGEqFeo|92HWjI(!EH&?j9G(skduWOq%1;ZxPC$+Mp7O^wMuT3A2M;? zLx;47i80^pV-OwX92G9Nwd$)UVV`TdS0$CH9^Rx`VWKh#BIKsKi7yTC{66>8Xap|2Oxy!g&-B92HU6!S_wN?E zA&lpA7MDO8Q{|!R^W~ZM!4!~upqGe%jGip>@7L*_imJ?X~Ju4O!tgpUy zTP0SgP_Z+`SOp(cb0o4mF)|6jq9yEW!Wfm`{HY!wg0t^a7BFMbPK`YFbqtj?*?^g- zcvCD?X@4gXG~rl=DS5Kyx+S_fE+P{>sUFm~XOBjHH+`d3`jHIM5z{?0aya z`f`XW3!`;&3#&mJlpNu9V{>!RydvqAO~mp-c86+O{amujRUzJXL!w`C)3-3=7@5jl)84fJIPlRNB6}cI^^24FN7eCR#HEus6O0be`a=#%{9&) zMfhA=?QAI|VacL^lqnFeQrn1HXJ2(bC{pM;&a}>Z#v~u0{S7d=tzIlnVaQ}zZUkDI>uU1ld)zX z5lRyietHzVI^~WjC-p)5F1DJ6Gk&t)eYkom^MWd|QWO3okg#z?-!Sv>q`6gz zMA3EF_a1f#WlL8#)Cv#_8YejJsPy;E7_aaMCW-$EX7#5WMK zgY$g29rGq@ma(=jv{e;MEJQ;`)^wQDH^lgg_u_LY_p4j~XgApVsu&U|#Ry`_z34@;>U}Nq(QdH#0H|Q`84P~Kkyj?KV4NFe1+7Brpe8L23HJN_eQR`vFK?Li#NKz#T_tWOQniG8czRZ| z(!VXHGPv7dw^Ap>q#ds+uG#eGdjmywyHjain zInrZW2Mr6^1C%v&B_#v`vfg~2GkNE~?5r1u>%A>~Ue`0Bn`YRU=DdXK(zTrWU>l&@ zcM!ohb43^xLzQo48BMlf(F$(Ko#MjRh$8-3MC(&l_o(lgL3N*!i%;<9SJDe}MOUtY zkGwe*GNdrgXhBOvWrAe$Cf4dBz*|VMxrnFEejFxfRm0uhSk6N_2pZhS8~f*H1sJ7d~E- zkEITH1f@5)WjqXP4b(!dg<8C?@{83hluZg*)JIND0D7;ydDk}OlT4{7Vg+tz{b~zP zQOwQampUy{5Yh z`RbzCQ!kf~-MG08cJ<2PJ7r*#i^V(Fy@%7bvK%MOXgsY*LOHcU#lpT2`W2&^7(C`j z2z43#$x#B8pbid1GKNY}((TxmGd7pYegR6nEZ-UYN{f{L`gB#wXf#T9gpOe&&$d(zD|n!`Lv5ldgwc$!C}C% zxlyA>Ps5qqy5U01@7^`$qOK*$xo^8*j77Gp$o7XE%j9zL$F$9<**YHCtfE|xbLO~K zwWY>$`6=tw^sJfQOYdGP+f68D50&*xt<_nxOnX6{s-BA0ZK**cr6}U@S)de8bNPWP zg)0}Ba-1@H(**z7kwdFNJ0928S(oJCK`mOv;M8_vmiT91O2jmG>W?iW%h?ZZjXWc@ z3Rx75A(aZbUMN6h-*t&}n>11MO!E2ryYVRhNXd?Kx?Am?91?i4NbxJB%K!XD3&mN$ zVdcTG<9>)dtzyPU>>zIRLj7x$N?~hOpr0nkw#QH^QjBPv|Fl(ITkqP)Gto)-q@|(?W|Cv49Jdm38B*xlgl~V@mrptn3V6`t;^IxL z_;`PxIye|NZ9Mtvsrra|@7B$JFr8cB!bb7%EetBD>C^hKLUf7#+vj1Kc%k00{shh? zA%f(xGmbd)s@-jNMY_Kqaew%eq4}G2ai51*S*4}bHWRu{AAxC3)yDP2 zQh&G~ueb4tdM<5RBfHsh)R*FRc5ceu1{E!dd?MqP*YQnIcE%E zdvd&v^PMVUoBH}NqoP@Pw9xVuh~8c?NsS!Y5;7SH8?8{?>2mt+?(9rBSWpiXb#<`- zwXCB9=N0?iiNCwU&RDHy%Sl+sq5%mzYNn4CyD z4r!gKu~z%>`~w*bu8Fp2J&SX}<+K{xw&RGAD{e+?w63IOn%R)QC>lM5-~$>DzRInH z3STF_>V8W#wOIk+rVE#lvquSX{R@o(emtThj}LKdy<)7josE@zMOLhMG*e5bSM)I- zjmWPMc%IJ>PURO`O_^|UaOjz$1`*Izv9o|aC)%pFK*uqyjt1F)!)quM+TXjVrPCWC z_o`nw0rzb>pL;fz`}Ah-gKM4DimJ}rJj=Y;Qhy=0gFsb7yQSs;l(~GR(F`B@7`pv! zRu1aGI{Q`ewhE&{eLL!|TFY)lB%{u60|SFc6;>pw16wKbgj}ZPV;ZH}amJCc)=!${ z_Y#S*6`8^pzc%~(bHM{8JKe0GEOvD2I54#IU~E*m!3hR(kms(?(UbM7Bl)Y`k39q5 zR2?$KS8_RGl7IQW9}-*W$-KZ0N_I-XeH?iO*(&mRxSmQHtOi=P%)4vM_9^ep@7Oa$ zM!!=^dFwE69EK}RiMvZm@}={-N;bO1-NT)mg#)q`S*-#{R_;B7N=-+9z=hhr%KVU) z#&tcCsKl439lA5>GmYd@V>|1f0bU(36)`$7T~0va7mE^iRx|Vs82Po*nlq#zC#(<~ z8!ONQrxDwIwbaI_Y4y6WVa}sl=1@)&LM8PUT3-=LoN#f=ZnuZ@!>*ltVB-mF{zV&g zqenVPrY$lg#Ehx$V`1d9E`iO$tl3oy)v0ZVbcHa1L{x;6Q8g`-*JBNrdru(^uZy@* zc$iJUEDxFNLYp3FVXo?38lSuT7F)4r!fviciQlvjLL5Acq=yi+t8c+)c%^j*Ns{vY zjM)$YyZWLn(Cwq=!t?r{An*$~eQ6QeTbiz}E)57}sR};OH_Gtl{l-j~$B6Ir!S+D6 zvWEvYFnn(}VXZg8gq&s@qx(E?EAzxhT0uQ@LZs9%F8*~Dy9J^GKDUI9ug3-IX)s#b z6E^D{lzN)lbB1m%pr#IYE8g-QyY$rt)f zc`^ja25Uu~0b&NL{qGVwBL?HHvQ$6+Hs~e6m>&kF9-ZAhRJ2haOAgBtUe1L&eh#Ep zS0KFP%l&j#F06*kw6){+8;vQ#BEFb7G~fRb820k*dB|ld`#oL$)?$?{k$GO>B8}7x z50OL^GuwAZUiJhDG9#4(5|x1pXKuwjHoHjjfdSs5gNmf54kFPgbmFB7aZMbMu2Ud! zD7*HS4Pn!2s=yiT`Po@^5NccQOT_phzqUcfUXI3sN76ArB&JV(YWuqN4!L0_X1p$N zRNfCMeJZY+s#gc&->$1PGU#=>-16|mW5-$z5D(@kVjY^U6#1MVlU#`EuIn{)V0%FDruAKTnTzNvLbCb{!H?Yy}`((Ln8 zE77zs0tp|6z-R6!Ewf~QEiZjV#4g4?k~}H}7*;|~8+}X34pF6^G+xqai}t3=8lBW? zXY_yiwSYhG{{iV1+VS2{u{+M>`iQkiDbtt3xkH^$z>41I;+VKjteEcuZK~|g?RKK=`;-9h;4$z%=2@t7d-pUjL$P52aK>idKB&rC=8LZiJtb@u7_9~jm}}L( zO7mzBU%Z6nUO93UDm?X6^33Wq5(rO{4Van91#a2AoYXO}oGb5_x8fLTbMu6qdkeBqQ z3$7eUuSVUaDAL*_fCfc)KiYPFcux7mQ8xy6OOhlyZGJXS34Pm_Ilj|m{|x~_K80!~ z@BpdGGFIth!v`Pz9FOmHsnX{koQW+*sq3**K&Uy_A(Z=<6>53@xYjPzIS>ny+%XNM zk>qUrBLGK&1-+xmVR#C7^1>wJvvtq}hbH&qd7AxUo6}m<<`jui);Sz`og14p^HsJM zHo7kl>4s_JnbAl4wzhY?)#VX^Uo#>ay#&}3801#7t*XS~d;hjZ?P$nb7d@r>1Oy-B z47|)QG8oyboGRJUXn9!!*Wt)gD*`1s$fGU{gQ8<;1V)1H?xBg`i6N79=nI>=g0gJzgfkWg|`JvVQGVmwZm3}@P0*%kz7 zcNl%M8Ed@bo1x7ohc1QGdR2L8LnxLW?dv#?Op*_@4&7ZgJsR0y5CrhDI9;Gy@&U3vFzl0xd0{=JTA z9bWvei=3bX#{)1ybE3FXUCu)8wf4C>FIKex8JXh>>OP3`If9f^Gm;nD7TeG|{^baU zGvv3~#>M)KUtvgrLf@!xjElB)Ww=%vh0)>2`9$F-qp+|r)l^Szi#H#$DI$SP z{P+>x+f<;AU2J!BTh({Pldm^Z%0r1|o=)_-#W^47zcQ_Bx#4s?v1KRKJ5Vy|wpItU zOm523?7*Fnql~6*jgsFdwt<%8qk3B-6Sp#r*B*xM~L~o&48Y z%PiC0*B8}dX}v;ZK-F){NW>Peic*ihAZc=4b^fVxjdso#)4#HKwttlt!UXLkEcz#tqE#yU9_?g z9KhG(DkasdX>0-jhcZ)E{pnnR{+p}A#Y|jyUZ8eal8}GL%bkrY^oIQ|!FL1M7#aHG z;{OGNi#0Nyj}+zfQOXRfzbKyPwJ?3J-hbQbVnn8tF4ezYRS!LfYmh76*@UZy#wpsMpIsAc2#xsm3-ih%E(a04UHb1 zc&vP2x%OGOTmth1m$kLEek=LGP<&~x$Lq|I&~(pJ0>4_saKNxgL^mkKdxcLh2$iQV z29*Gv7 zMn^+U%~0;PH0`3Lcbgn!c>hk%M4diQyni;tfFYxQ zDC?;-0;@hq5=>=z%}MYu`&_5n=m_>@k?$(YIohUi==y^R4K7)wj1H`A9&we*C6*st z@F=A)XS@94qp2K( z;3NIrizao0-f(2T;)kX2T;S}Z>&|_3y`YquZR7SPuXsrT@3!By{nk1DuuD1vo9@gt z9=xDDx7XL5I zLy8KcgQ$Ax6tOgLta zfyK>Q5%i>W)mT!Ro8cPa)$ehb;(naNg~}iN?ujS%ipXo$eKPB|A)u@2lGdyZBf@e< zobO|!6{SC7Ds3tK?YG>=Vs2bvd{(n zR>adpa?eZi#1FtId^P)oUZ#O`68UYbD@P`6gvY&m+uq5*Gqq{jHq?30QW)-_6}cXo zl}nAwc7@G^_t4&<6=mUJN5pKYLI3e%Zk&|&Rv+Q6TA>o5Y?M5K&Y^8oOs=vfmKC%? zO2=%g8Woh>p3>oSp*xM}_ju-AOBbcxj4u(@1*-@ShFbo-PS-nNmNJQbvyz9r?9nOi z{()PD0og1~_xcb^GYq{H++Ay{#SpYwFia%vImIrGpayA*~%Al3?ED zkj#-!Xl&OgfiSr@+I3Ha-B=I``=Tg087dGQ{cs%LAWMKwCv3*nw(jgbER?4&%3O~^ zr!u<)DNk$-q)%*fE^DZn7>d7v;WKD_Gn|aDB?6h_@CQewv@U#DIXD7acfB`(DsoTO z;;sQUJv?MHb93F#2ysD-l5tetr?%JEoSx4mOjMqV91|X9wvX|a=`N()U4$bgGLt(4 zwhkZVUsZgTt#)JCNS7yv>QJZm^K5RF{21K^x<2#*Uf*idWs#xIk6Ti){S#I9kCr44 zyFuY~-wL^|9^Va3iKeSg7sfQmCr9{A;ZXee^5tE3Me_uo7_DhHXaHW56dYa< z@RbP69M*9E7R@AiV-y?Z{9L<>HCi{OnIJA;=&=_>R1}U#QIR55rFRtp=}MIrl-?sAErh z-pou8(aQK!8#d+8aU<+t0Yh@=LHF^iHS64Pf8Y-kt7w(8Tomi89*Av{SHPHlOW~eu ztW}6jX09+|6UsIQPu5+Vu1ZXwe9Pk$b0zVAD2}(-uLyj?cOy(R1RZ;xewXflxaVgX z%H$FGph{>{s#~UCUGNEz*JFc@G0EN87!((O3=#z^ef@CQit4pti~~M66KCdB$1Pg1 z9=uTed*aI_oaXE!DQwHnh1Yzy{S;EtyBwVQh5cpu&?3Tk29Wu>bh1U48(+1TX6_2m zwQm-<`2zIq*$y;c5-h`&R2`4hOy}2)7g@LQfAdjB^O`deq;F_uLN`0iZjNa{C>7VH zZzsH@4@De-^cSJO=e^gFe>9uIt(}{b)H1c)|1zHBFqEzA<^zo_doH7J%Js?rpp*W4 zz4gcG>r71T?f)-s`F|mpU+6N?*b~?C8VuN_#7=`w{wzUh+Wr59RAw2u`@d0Ne?9z- z$r}o&5Ho%A<_#_|w8G#IW*zLI%1Kp-bY=KC@VZ_j|Lcw@m~@CUsdfogFov2dx`N{k2%3V8*E;P{2Oog zZ|MC$h(;h`mbl^&%DQ2)l)A0 zKas2e9eYm6yN^<48e?Pw?#!3^Y1&W2tqgY$4t&^yg&|j5CWME)t}wZ`mpyF*(>P1^ z6=1heCoT}%s9~{jhHoDm^q>5FMU;O-;cR&`1f5;5G)}y$bkLt9bF+@a*-XJbw7MtTacKg4kb$&RboYj&*U9DM6(p#H zKc-*qH)+v5OvXRYasRDFf!x_}DpA=?Xm0Up$8&dU$%TiA8nNLw#Z#O7rWV(W`bUuC z10W=qmb>@JDI=QBL58lJ4J#$Xi+3_ElE3NpTXdrpo-dps6d5g7(KAg59E@O7*5RX( zeS?YfNqA-lyW04S1mgH2C1Al&BniRTvY?O=fC}RHd&Yt?3PC?` z{M@}hy`Uc`tJuOecNzvecauGle)J&2H>Idi}L* zZO|U#A;LDZ)3f07Bl$-5fob3^MD@U5P3=~TnV&}s=u&&2FutzFVwr$Xr%qgPd3E~1 zUBxf(Q^%)-g@r#cnWmz?r2W0J&!4ZjO;*aB**(?L(&9K578bTXX9k`5V#vn_9#p=E zcmOaRSFUUuR3}DS?2f`RmW3RvhOks4dOBz2sw9(kU3qDDvFMD}_D)lm0W2|;@*t$G zxiRwV=Uta4Gn$F6;k&cb-%^hI>zM6arkJvkXKnf0IzfJB`E$cX|7^l-wTwe~)38!D zn>0SWb66NX{m}Zp+9O^U3@5MUm#R&dBTX6i8i!FoYjn*UdPP$*{?O56x*+JDk$U^{wPl^%P1+&)1DC0`V3|WYLODEJ z)z~GwU&MRQ6z9X2%rtE@7Qb2HSCk+U?r!UFNtOrGwB%0{yDwfeKK@8#3BfctOV6KB zU+2e3iRS`tmX0K}4t1(_F8hy-{~{WyJSD5W3rt^Rk^^gYXJ?XLhsicv{|L24NxN_l zqsG?nxDGEh?(GjcgynAw>bsCk?W=68);$N>zh7hD%E?e2u3beE17@C;3uLTdCabEJ zy_Zrh~2kB2y`^o!JY&k;!3f5mZrjx6(e_d1N#{yd#onxKa|fQHOc-0G)kc$UDC}L+gNUt83}%i~Ebuyo;KON>hW}_sC&zrtOo^ z(U0#YX4iW)A=+B#?4*;(ap)i}uf$C)%#i zj5mb1PH(mJN2g&d;R2F-h53>w(_q@*_&aF6Q2l+Z_)f@SGWAPqYZeo~fPhX<=6j6t?8$4cwkjss<=t?m8^h+9-5 zO@N)3z0a`3747umJ|ay&D>Om<@cDh`IX}_)x3p&>xZvD+soE!q&Qtj0XvPyJUz`mQ zAFATaF`Q3M*I}C3FiHgV@0#%X+!msW(SFt3T(Ov#1?ukdvxlO#2aA}x+P*O{KE4fW zlE=4G{SQ3SefmqM_E2!0y1Je2lg~7IG)UVe? zh$mb}ZhT3`jDiVmV6(j+^j%R@MHcnlK6V?aWmI@_d|i{f4dI4ehbtU7T>yV=+yjM*~F4*A{(s9KK)zfE|?6Lo4hx7tD{|B zLIN<4NIf9(XP@^q5fcdx?^LzNO{o>d_SGb^FV~{`4YVyEU5ZB`$1;106sKI< zp}J=ylWlEgX224Dn4wBJJk|4SKb!b6)cS)?*w3F~=}E^|5~JD5jXXTK4XTMoE`>t_3Z^>vBx=wDpUqe670qk{tYO3uIyDWvu&9kp>7pQdmJW&-i~N^CvAB z5)sr2MdECb8hTGsS-qkndMyEiHBO}z7iKYN%9O(;Hd8JYL6PxIwQL6&Xl8&4+5sXK znN+s1KDmFY+2rE+^MxUV&Lj)JVq*3xQt~*ObN}?Vl9NIM2po3kt%}2e&53zug3g#& zR@b^D`_RY{7Je9&mX{%6V9?J_tyX=O>(RceKKO5lIpibIj9o4xA1tbm++CmoQ<^&8 zROmx@uCc_AmGoB14vh>HpW|)Uy3eU+krUo>j{$KV!tIoUIY*-zAaj8uv7|FauzgyGc?W4+&6R0hrL(fHd ze*^Ca?jZ+>$B!Ott=w`Y7x4ID;cRBz3U~(76@h6vjTTlodX2jQ-FXPjl~FZf>?}dX znFX71l9k|#^+SCVYK+~r7m2ugez&X5zE3tsdSB7Lqt~>to*Y5?7U)v;X!o>RTf8yqR*haqclf1%So*=@` zDz#OQ`}vng5>}~f?%p?gYRL@oow@*QeG5?GBO7KR$7527o2~t?*2$Q74+Cc@_ZpY0 zmlC?VTzbV*T@Ugk*D90kCq4o(HS@x1YDrFWve{rf5HhtX@kJ8mI^IP;MRn~ebr14> zaliIhLdOQjzMkr*8`_LO?{8E4a*1}4LqKH<3K!36%+jsC zB#2?q$&llO)QU5rLz|ApH(n5fEjy0N7yJeCTVYbQRl?7nB@1#~1Rk$CwnuXA#ys7M z@-`o%cKj{;u&$xKyRIY}Uz$+Fl7ADPYtJ1ve z#8W~D-1Co07C}sv9Dv&nxPNfO#>%xfezs||GSn$=p!HsZv53P|W7vw17n`xIZQc0` z%#8Jqlsb*HvYgpg_nJ-v8{2A=Dev$Ju^)|3W1c$ojd-rF^0TQGRdX?c0v->c3#~;s zM?5-hy0ijg%min{x98l`wKeWg`t8|9X>9YuQ?fRqeQh(1V9`FwJ?}e@?#A8_LyZ*Gu33Mr>)RgTY3cr4iV!Kr&CN`&?r4(?VgCBnWXg6rxn<1us?qEk}_feDGvyl7vF*qmH6Q0i-a(rU{MWY?= z5oLV?H6dNDJeq`yd3{0uo&WpRKZC&LCk9TXR96Nu<_(2E+j?D$yJ(t2p%d@ro`}0! z7>;Q~6cA0( z^6U03#c;YZ2n9B8IFqbg=(y^X`YJMy*&Z-ps`=b^!GG4tlxW|Vv>jK-#uNg*?XKms_QQA#FfWh z%E%bY1rC?mzyiOVn}k})p--D_4r1S>J6M+(O+eFdd? za}6eT&FfMrpiDlyGru83&#R+G_H>>)NBy7J_hUG^&l65xayxq11=2NFeU)6;H*B$M zuN}ZW)}pxgF|A`rNMP%wX|gFDW1|EB$?;@r^pXlZnKe_trM&$)`|~`JO{obtxl< zh?CRL{f1(A2Hn^bbeoa>02SheWK_pzo>AZRfVui=Safs2KFz)mvxz-2HY=>PZ2ADE ziVAAL0*Ms`2|a@*AH=%XdRXps9yuif9#-;zzhhpt1!$x%F*h(l;IbdnhrYioc*j&e z%2cd2k6M#`m{w4rX?3We(>0im7+^OqUk@sXABPEb1}NXzExoHR$Q94{1p0exPeyc*Bi$4hmBeWlPDgF)k(` zabdsa&xc03MmS?)drH5N4Vh5oqAt#!EuZPrdDI)-=(b-=5(&}xe4DUjWSlY?nEWIp zqN5hX^#9b6Kuz*Y^Q4~+nVB=gew}~>ckuqC3jl6=wc*AW+t=c#;}e>6Q-MP@-=O2~ zJmIBpluwAqogJ4NPv_RLd@1erYb%ic-Hc*9opLN5n-H_4p@6eANjD5xcNSSacyPnL z7+<}ae%p+{{=qKK0qM3x@gP#-%Tn`9;CfoF>)K}|p6|Fu#OKZZwS-$4<8FP+`CVz# z~kj&_f z$V27T0{GUC(w{FC~tm|TT z%q+VNdL|~gPq@jTt*OYE4Ymbu$wzat%!OlZ@rkpHFJe;SHs}87!WZ7T%B=gHfWkl6 zULR7g%J7^xJ-Z4XDe>tHis4)21XRDnCvyr;Z|Z;0I|lwBDJA?FCZM19Hr1#;w54#- z(dB5@kqIQ%CozS!6>KCB?=;548Rl>5MMH$1X=v;W7CsI;uf1fdRr}?*>s8R(tsl3J z1e{7Jprfy%uf7=#r9#@)TUvQUSEH?W?!$dd_kF6KU8VzxJ)Dv+8(qF}@uAx-mQs;y z2ODxVCE?0DdG&uXL7g(7y?M;~H9H)-+Cs{0=3YuTUt!Bac10pGHZgj-++$_hZ~r7y zy0DnnrN>R3*P}UyUX62VQ}a8u29XnWdW<9O&RPYWVfU(85S{* zV&zfHGjEeFW1~}>Me5zBEsWcpl|)jm@%Ny>6*i9ge|+Y7+}Hj$VtaY+=ZyI z!pud4?Il+>R`~-(jR?JiK|X-4kvP$#;o6eB;>SX`p=Avlt#>aYPrGtjJjWE-7gIcm z;RgUiq#>~#{_2fGMa@jm%xYKU9{#YdL^@#8fAb`T<2UhbL4C`2OE|VulA)F z@_)1dMha9)=7PZk{e=r~$@{09LUHHuzik|)++p=?9<_{zNgCX~s()&%XXEEO*@*Ms9tuc z)YfcEbobWH{|DJF3Hak9<<4!k`}HrW5t|3vp#y=2o>R1F<9u=MP;I)JI?U)m zRn7X~n=rN}(HaURW~Kf9_qNMBvNSYhs}8q{8PJ^yBRSE~Zhw7Z0j;%D!H@Lgjib#2 zhwTS7#hju5hscq82m0+b^-*?;)HQxXBc?2=%D!LZg__NfJ+crV#0m)3ONCe?t4?O3 zZ35{Piv#7mdaL1AeJOVj0)x?{og0LYhj=_)jiDA2c+z?DQ0?vUteDJ}lzv=5x-j)x z#b#Ir!shDBPtVHqZ{0O2(zx~1A|)mE?z1V6UqWGb@6T{rHWBq{V4_t1Y+H*j0q*Mz zK2nB5LWmaNJyld2Sz&dW&~kN0M{QPbBZ4V(H=CnH%kM(5OpkOc+IBccE0>@n zk$x3*>0$OE=^WS02ld)-9XSE@T|zVNx-f?|C*EtrkD4B5O4_=OCm)T;$hwvO`nE7% z`W+NFErD+g_kez@0%ff_ohQ$4s*;2C*KD1_U|k@_N)L&BL~u=sKVDxmtmSxIOTJ}J zPszgD6Ykb-H5q+oNlzeMt{3j-{yZ)f&`>XP2No3-NS}OyW8$gU*o# zlBiQ$G)9hB1Tx)lxPA>&;U8aZi|FNO-+0Gj$*#)(W}zd<2;vv(dSSOSUWN^B@W8&@ zf#hXK-7(bDJ5NEz%DXt8+$z>QXNmD@7?HDo9vtbcnbc3ix*SNlSYH-shW@v)7Iz@cQdw;a|#C`&uugj zqz;!jE%Do9X3|B}puL2^O>aE8G0Ft(V;T{#VLjEo!F-i(zT;r!%5&^p{b48i>Y2Tr zoE?2{7A&Pkngk+>kZo%2Z=U<;P~NfREA2mk-jI-1kx~{!L-Zf6q7WKc0g~klb*B-& zghX92OcWTiIc+=ZzLD9cmVMC;mAxeHOlU(+e{mM1!O$fEp!6KeC!I$JqS>Coh|#@j zaVh`Xd&&HoNSY1b6`p0A+NP`g(fwJOwqI?|ICV>s4(IU7T*e8y(FZnLK~?VU7p4G` zBH6wj{u=>p1M%UH7-Uk02f*9SW4D@#XUf0;!nIXtoBXqPd)*ZfuF2!NUo5IJp!yrN z;U{yIdi<=ctD5gWt~Hxq&QD6UU4d|t99E9;y^|9gO43qTTg&I9q@#tmbidHMtYMhd zCXDorEy9bwp0S5e5^VSapl>Vw#9X_-73>GxlPGn==knl($i2MD4}f`0I(FwQ^vbV@ z6`-orjgR?Dv0vpIn3@>xPf9+H%kWU_2~JH*Gcjq@6#}&%;GLz)syGVQgh1!*Kd34T zyFPm5sP8+@$T1VQ6n=ra6sFoO%~Rv*hQf|7UX~KZD!MWSkZl0eD_(Ef?=?Wphh$0b z^QWxGKEL+r)=Ydi<}^j{40JB!n@orN@$}q-iJC@IUu}I`-Pn^b^TSIbu5uZt7?FEp z(Saj%k$Vc{JQfe9{V6l(=Iw382Zu;|!K@u0J z`C&%J!>ml#!~4cUvxtxxzt5ujagal+#AGC*%jR#ns?pWsivsQ!K`#Sc0vfiGtXNQTo(9BO#yK=J zCV=nlhoHhzHjIzxN2*r`nAk(fDdTj zUwh5c;Qw|qPNH3JMBb!-L-ul}D(Q)B7?RA41g?SU+50c;5sm4&SQW0?%}X)oHqnvp!;9Vi(G|k!)`C4@6B)HVdId`IE>GSBcVe?U-EcZovxYB4Zx%~0JSxP# z&ZdtDHM^IL*1S6jm9`dDicD@7=lOA%WxqZ{2q!f(7a#tj5;t2}#(MSp#PiY?V5wer zE3fEtHzFJ2R;=w{r_s{2^Be-%=ll%bHWx)a4ty9P7r0e?N}lh5jhLDji&$d@T*>1> zgfuyNE5#j-Pkzkk&};mwcjKLU5^@^6rC8nn>okr#8XG2adE^lV5P^QWF6E1= zgkEPl?^(cD0 z4x@lMBD6jOd1meB+3)Su&&n=YD9^#bolWT#ejOaF+1d;O>C5c6nd^wW;LLbkIO2)o z^l=n0wKGZ0#VXDvGsG~wo{OHXRAe0^@F;zE zmWb##hp==J^)k(Zd1YKQP$wWEqJdv`6w-zW8>5p8scvL5O8GCFRMp16pGSmPD1FC};~>a!<~nbu$X69DK_v2&mVnxHql8nL;GPNs!7UiAB~ zcGmE2P(QEkDDJRY!$wXgnQy((5DmTdk8jub8DWrivP5e;%rsThx-R?3+N}v&MN}DQh77ezy1sw-$|;+Ji)UtD(sOps zIcJ{jAyj52S2drU^YG0$j05e7(>%Yrq}u#ewTc0F!?)=szD-0h%yML412a&Iy`+li zjMweb>vw@2M>zw+HFAAefJFPxYkP$qNv;$`cR+3t$jY6QAC<_>&p!NzHPLd*_t0CiQ7n*0&(1vPgKmHwPLW&Y?&OUKt=xjo1NNr;MFew{USux+> zZXV1|bU_=+FIm{uNTlKW^3TR)@91b=3K@%kvRgI~%GMNt>dm!GaA#Pg3ZV_nN_pU8 zRkn=N#_Y8n;-!<(TH*BlzN^eSZQFZg%9`bS-7 zY|s}&J$(ySucfzmb(Zbj#X!SW68l!uVaSZ6lV8-s5P-w&J z*Egk}oKp|@aCxNWRG<6k(-S<5qE>vE^ICjQ`(&WOy^Ze7|}tYIp1n2-!3sPc_x;h3;_ z)l)7WBL|yn^!eh@UJ2k!Uu1j*Oe|;vS-G3wu|roDWd{`Kys$MazAuLbL3o8+PFoqnZ?G<_jjlzUI{RYj&J}k|xeme z^}?xB=k{fmx#Y3h5F_N9a_y^ znma7M|B1`hy~TC-@6iW#%eQBT_6e|=0aJ4upgYb*tu%=o{whq0?YXaFD>^CQl$^)f zo>7?&rOmd^F57QwYQgE_JiffTt%y(h?cp!!diPA_gG2R43^w$p!XSx#K)$w=uO+D< zcT-QT$n}N$x%sKe1b7rF3N&Jf)kV-j9@hp~@Xour#DQ7JR1t(x{amRpw{x0rWA9lZ z1b^0et%}WG)@$xvH#w84805UJcT>6*F+`W3-O&dy(~@7Q$?nLl5_<`8z;XE{Rp~5` zCC$~DlSik~o*$bHCM@4kXzA!XGww**e2MoZ8hv;Tm>EX?2n*YNN*Nf&Lf_)~^Q;UY ze1S6qvF=r`>hA6F?B(GX8=_R=H6Z@xEd}|T-z!InIOcY99do;5Gz!g2gPG-|8@4v4 zr>Z6&l-X=mTX)X+J_K!NypkT9_`{I6vEW<8o%Q9^b6d~d&y>HBv?~hd0){27Fx{H; zYk^)DySTClSs^Rg@>i2PM1N)i8Xa>Md>x#)3p+w4vXiC{F+#|pY`z?4jasKLdyB?M zE6X{rg7Tq8@#_sPsUByUPTl>PCk1pfQb3TG5ew`uMpK5%Ur<#ipJ>fDHIpEEupeVw zrwvA39fu#U5`Nm*$Wc}ZXDbiLDlsNTv zzC!?XW$HO{Wg@he=u}HA_-C>CtUYYklCo1jwwIDjG*MY`3ICmb-fPLz5iO!Je;!@; zrQA-ntv}BbwxYQ75cph(Dpot{Nq2&rf*&=EEG_; z7K{JSf41HJDd7@>jHET_{-uKa7? z{~XZy+n;YSPq!SUNPYINegD(ql$pN$9`}3s1n$%Sak>8cpvzH@3q)P+Tgh5jE(Aw+ z_uLp@O*+|tN;Oox@%^N)tW@Cb(#WABT<=VoZe~nyi-1l>eDJgj$50YppeZz{!VDTL z9c}(I!!-~nRACA;c&{XJ`8;!W{gNkHM_hzgr4`f=&*ThyrD~58H$W~85V^sd&UyD^ zVl>La;Ou*)=B>|hWuevph1y>oS)5{@v$BMHVg=3^UfR1aN>tx<4^~*ovM=+i7=M#? zaiv=7mUP-JuU75Y>jS+g_NVJnOc*}>Nz`1$Y3F~}-cnhJ7S|iw*x>_Ra*epRA_lbI#uD*V{Ie-_q1V6d&# zqQ9ND4K7a5I)s*@R2au`Cowj}bCkiq!Xip6#0|yRC0IYk{bWMXbXODSarqTer&eJG z`R$MF)>!72KStQ|GVg}Z`X_UUVXfq)l)StY{g8gET=6x;l4L@djpbZubYAcv-p9Tn z*KzdkH%E))$$?BqS*)#cMXO&2k^U)WL{x3D$;fHfd91g`9WgC4ywTdQ%lnN7=nTt2 zpw>W;5G4Zn7eQ^G{)AW#>6H1tNdyH2EdOczBg@5H4L5=I;FdNpaG7t1!kx#cSKz?0 zkn^knvKYW?Bw(&KNtyJ{=qhS*&=*qB5IP&OeQPa~PY8*yVu^(v`4tJM*iQ8+B$SL_|IuyHcX`?*AJn6G&^x3RT# zp2ytRCxp&b*=!Z+#@_*PnZj55#m)!@cX%IU8r4|8uBq8D)m3+geVlqX&`+^69vb*t zK?&_!ysAkqUmc$=2p~+iVAu73CJLhP&1qfzO=Le{xKd|#5HoD<_ zDv*sD_!DN%nRc5mm-nfq^|P58EWKlV^y;}^IY0g9c6J1Zx!dXa8nlD*J@|_2@qV!H zIp4#Tj>P>l`7IAFVz1`!fw?ws7HwLHsfGHa-9}6mn%!Ce?^>;yn6AV6S5PN{F6>+=#s+Z(lks=*+vhf_-E8Mw z6|JiUi_J^<{M_Ejv1p?EcV19K|HhlRrXrQ z+*I34*zAH+m@k`rF1zPW@i&F=_c!kV=L88Mr)sHs35G7b6EP(X)1#=OAXXt;jvOLp z-;-DL9+uE;i;7gD36z)iJ7xmjppqMaAl6}_Ae`15Qi(W!B!vJeBHeN@hw|SfCBn$0 zcEFl~fAfuXTtSWMSd>fBtRyc0|B}4r4_ERY_pJ@!I&R*OQ<<0`(v4f@2@BNaHB0|e zUrfOGlyaQH`WKP$P8-hLRRT8fv)J(-o6XSK+1(Aw%A(rELt3IYm1{#X zT;_R0Td7x%f)MuTe0~Re=w(c<+E`beM<@_h&1^wOk$MHn-#GNNe5=JGnD4La z9PdAN_!U~-@?g+uHxpB)JP31j(VNo^NRAwj*=E!BIV@nR#)cnb8(7lVSpuack9Xz% z;y*jcbRZLf^M&dqRs}LK6%y`znqj*GT0S)u4^z@i^a6+r_7_9EQkm}HgF&md!ZwNr zOc_4*;Zs|*M{i$*AJLX>Pu8&UADlUhe6mOvE|Xvn7+9!9Ft0vRY=;@=_8c(DShDc z+AVCA7GH&%Mq|;L-=kH4=y=uEyaU4ZAYA&G z>>g=O%Dz-5-R5 z7Fe$Kc0UfB%CVl~G#rMB$$UvX$0u{fwMVZPR>JLW`BRzE_59}k9CAvZ+~hW?}8+DwhUaqA`7^Q(8Eb-h_aY~zahz`id)gx=_ z@vo5?`r}3RR@3#44Wx%MFHvq;^v}UexS3!C){GPy8Py3%e~ue89Uksh4LWEm-y(l< zdP*CwZ;s_fDBck*V9 zEy%Nx1d>+CSCe!57`nHW*^G;2mxS}mh`T6K->#hVS+Pjitj?Ble$F_NG&ow$*0LM3 zyy9VOn@`#$ubVDr;l16y>GzG02O;5%ra0TsF@f>9#$NOTMpDrD#`~HBP%EQj@oMm} zVK^{n)xTmERA|oUI(}$PWqQkhZ~wcdJ#b3^r++8N+4#p|dd7Y*`62*I^bMnoSR>K6 zaxh)g@bad+)!~FPZ2HTC$)+8%;ZZ~~f8g!Jn^!^l|9JU2Ji_KXw zl(*1H7ZX5cNT%DZyw9Pwa~%!6-l3>Y5*ussL$bS?Xe+@nnH#w_UI;`0VdhPk73$oP9^yD#QNpU( zBvG~9?6zTx|As7@OCEk>J8Nudd8;DT0beg58(u}`ctW-oZ)#weW*_A=5^3 zHX!K5uoMNSJ{QCax8+eT1rNKo@?T9$+88yJfGuClB`$dEc2cg`u-G4uV_8aiXY}DJ zj#0`x%k~E+sxT^P3x>ZV@XjciaGZ@*ZQA~}0g#cFn6c|37SMm#Z{$+j>JN&xQ_6Hp zjaQpxMZy4K2c}y;#UmeA$~2(vyv&uHRszseW2%i{q#{RN?zmmUQza7So4t3&}YTXP^g@0Ywpg z``LB{?=MM_-$q2M-mwkeFAEBIV9FtpCz*5r>ZhNrmL)q=;?=?KZOqrt7T$kV+3JW+ z1)fwXkVoA{(y}7k@P|lh|g!|C<4*Aq4q0b>%`?bJ;$m6=#1%5Eb`@bn; z9b?|71Q7}X+a~4wACF=*1y}ii64B)P9 zI4v?Scm^LZ#eS+F!&I=r#|DkmOUN4=C$+Emq}_kLK35Sv;Ai%E)(Y#uQZ|^Dc>IU4 z)#agwY)+F~E!eQ+XueIMaN2(P@Fk^45xIr84dUIo4|Zg-AN-P0GGwvnDr=avTySME z@@wM+glev1)E0Ve(3HP~_|l(5PzFBA^(sVj9mvf2FFKYsWj8)pZCj1XJvsP<$v4x6 zaL_Kh`fK^Rf-q3o)bg9#Z)Z)Hh9M8s(e)gOHeu6~&7%U=T;sVTqwc+U=2Fr-nm}By zs%a6|Xsq2rN+Jdqq}|+;p|i~co=`#~zM_7h`XHz=6W&YSnze6_ZyiQ^)1vkdHv-T8a86RRCGk<{>>pr*amxwO5qNKULgs9#xGG zYQiBbXLcGge zU+y_D%1_0uvw9{0^2>}dA)b6IGg`G#StH<$95PG-<@GL6+##r%7y)^`E`cRJtZn4} z)VPs=^)HuGH@qCG$0euQ7gn3^VClCXw7E_0G&_G@#S12GoJwp!sWoGTY{OM_d8OyG z6^a~UjCTKyAjd6~egv3@VLkxNDX_zpQj9*A4&(BsvzK4FLH^x&y>AD_JuLad$eMW= z?!%r$eEWg*YmJ3}$_(9NFB&w(@7s2!9K#+ioe^(Gk2?-NubR!tB_8eg;KS)C)k|cg zyFzljU=lR_#PROhNI)07cUOr(&)=ikAlI?pDp8}MU?nh~x!g?**=QDz-t!x_%27UM zJK!~1#lGIH>{PT9HCRU;ixFfVN&|Hqq7Yi@HYGo^EQQ*Kw_L=bsY5M#-=dm%>re_gO<&_aLc&)&`;erTAm0drn*S*Q zJ%Pd$NP0xnWRM&eSLxC!i}>F#2Vdtc7hsZ{NA|k^&PM5P7-g9jzM@0FEX!_$d*buP92+HT|RmFpls7E1J8= zId{kUWBGz~UiK5e%O{uLXIV8$chIgY9H=!FC!)b%iF7_d?gp$Qprll79GEpjuR9GD zCr(t3#&>%|Hn>?)s&ZY&hYMm6=T!K$Fx8Ga3^q9ipv|WZ^x|kzu3?!VyR}83{N+Py zmnqhV8LA4vk@r9kYQxKPGMaC?Z%GAU2sSS@d});Z-Oau4A2KE_Nd~Xl9qK?E6TIG# zq@bf97~2-RDPL)D&mEbj5AmTZu6qwcTcAB-q;}G|{1I8wJ{!8}^VFAc`gA4^!Jv(( zKA6CLKO>$s?%3GV1=y=>+C)g}tJgjdSC`HU-K}uSJ-2)Zz4+uiokqnq8jpN#S;%ov z(`uk&u%Y+ehrc_s<|M0aHJ&|y)5$%Y;F+oCl(6HEbS*wKv&*P&wKv~r`19AktRwQeiE8wBM>C}tJjWWnms%jB z?vAg+TIEp6N)zpPg`llT?Snh?)s=4>Wto8c-=o-4SR^}sEL@ND;ln;<0gid+xuHygD{+WsF@IX_#ag&>jUe#y) zW?j+R4Z{TLK}bKu(LZqWds&gTAZ?f;NaI$Zg5`+jRM~%`B2&hhITeY<$j=*7wGFQN za;0qR`P)NM-cNc3U~YhG5O&RZ z%O5@PDnEp9w7ZBb>28~vzcrcR$L!`ZDK!HLa?KB#dI0s}>6c5hSum&J^sdPFhL`1b zB-||*8~1F)QgSh|tJ11iYhd&+sYsn^%6&3!goYEc`1-n&Ry}_qFKj0JK11xpS1u0pf^Ciby}4fF z%?Td|o6WsFSF4;pLPjRFV)lcHO@@q+$)8@Z@AGH|jqEmdZi0)HqqtEWmGWxH@8PW! zIp4+QOiXBaFKl-)4yE%DZS_$}Ui?}YPhe}P?;7o?ukrhV3jng&$UZ@=gbV~4=G&>Q z`z8kOug{W;@Ypuu7zc4|jsb(gg1v_tcDue{mZ1ZDKRh=AXTwt2SUDR-E3baHO}nv@ z9lOv#jeP4BwsFXln+l#f>E`KJ+ZRmr^j!8pD}95Z%X|Ik#s3$3Zy8YK*8G902Sh+X zN$KvA4oRiEyF@yr8$>`rlxEW*-La(`=`LwDDBVa%ZQ?$tctGFxyAcrSKs>I{N%rvqU|b z^zwZ3(CB=F7nhX%qP^QQFFUveS`((bm-GD1Z zm~Z*mk02|45?e-$1yWS$Q-h+DnDj{ZbKmIFA{?^i#hC8JvJUwi6qQ^uCaw(&j=sXN zm!J7C`rFi?#x@Q!E*w2wRmC&&s;?*U>GJaw2Ok=Yw)RDu7%OXtpJZD~KYMMu@`8YK zJCZzTI39C-ozS14axHZ*-)lhmONO5=1tH!&?wMC;`?s_B$VR<^^0+fPY<|ytmh}Kt zk8j&B4o;t%L-v{dgvL5tGX1;{2=o5Y3U)s*jXwsG5p{IB^*s!^?In#okNdj5Eg1~Q z0g<%rj&QVu?Sw4_nybMivQu!DY%)cjN?|B%VdbPflSBN9z>3qXom-FmevQoOyXhy@ zdwu1$5H^m16(p7rCL--8f#e z_x({X#r&+02(nufdksp#!=)Kng&ovP^G}}Tw2ijZiwji4(i7SR+hy85Rnc}0Ug=J{ zKqh})3JvO}PvdN7O}p=rtzK#KaevaTuwJb%85%ccx8k5p;HGsVZD_*tjNdI|(O49z zOuK@s+iJF6JD3F`W%3Q`IaY|sYLeXQ*~Ddq&)7y98($iIF2J~7(N@RXU@mBmW)}Ts z5a!JDGaSZzTOD5S+|R@lw|5W@`uploVVhC`kuiAHfuX&oK4$xGcD9|Z(Xm$PGrh&D z2hT95rw<9g?rK!~nCy;!-CY?JV*YIffJXJJc%C* z$MVkcR14LFmn2Tk;)4URS2-pvQ>W~cjnD9?QE=i=cDl`1%4=T-6Whok!$68GXKJa7 zvsF(JdjQ9jbeY6nyQp6Wx?iJ;q|HCgduDa$vH77^k(05ZHgoHv&HSE)A=lw~8DiGJ z-f~jWcJpHVv*EOlR_W^yb%uSu?oJ2)OFxHFL(v%8XAXsKF>AYxg-ge?$0C?GNx~*~ z8CTbq&p6wB&O3;GTCs(nAZ;*_H(PSN)mZpo>bN_1nE{8R2+F^yve8cHbx%mUhK&Ds zVc4Tc7JoL^SwS3%uSnD55dcZy+Ind!8*MXd3`=6O@*eC0aY{6z!S?s`_bbdxmSsNN zH0(W6LE)bqHfJ9OuA#i2QtJ_*wPBX}Nr*g6Uo6WE2Yt(@UB@gT35kn?AFKG)w)X8}1~zhAfLoIiHF9$_IkXDw~8(0sMI#vgYmO-grtw ziL97W;_Ys=J-uxhmh)EzMC7X{+ypWc;Lh^xSrH?m!KzHhVBMqrz1Z?8uz@c}o3xE`&KiMb`8V(9Xk@tRX?~q4wI1tC`Ujs=4k|qwXLgbW%LPC_%gP!` zbIR^+j&U+E)$tF%Tvm&xPIl|_TOvMt!E8B+K5VFI*iW_6tY`TU)BGFD&^r%X3D+@G z2dQdxYYp_(N(}D8U{zIz5704Btwh$zFYn%zgCddHaTt(Rzc1D6?0b|p)$v=36cp6| zK&|pZX{R6%YRY7z@`>!_C)QRmLLm zJ1Ts|XZOwT9^M~j7WbJ_8eW4qLCmwp3f%H@#1C?@|H%SVvraH@#O}y0T_nwfw=+E0 zP0q}@i-gnZQ@72b{iUF|faNLX&efplc=D1a(#tahcf|Q$bvAywzYZ zfM(@JA=Kyh!g=1XuAsSK>O@5uS6KU5waB69OBARqRID9hbG~1F-wC4aCapNgfaH*m zi;pHUT!>a1?6x(Xyty%2Fg2;Vi6DPirT3M`xGY803Fn>@Jxl@ml27pP_lf0Xyul&z z9-5w~z?A?(RO7PU!P|0$K=u`IwM=D7ncKygQ(Yu&GLBWr{oWw*qQx0OmD5ZE3c^gA zouFq%p6!tK70>OyL%$^!7Tcn)Gnr#hHglCJ5HXha5#gW&gDZbj7?i8X@=dpo>*BMg zdpNGMOiQg}wd|Hzy-8HjVO5t2gmlXm zB`enz+k+;{-2A1OG1zPD*RYkoEjvtq9ZDjIe&UTHv^~ zM<(zz)g4%Qq7%v(V$q@k#ZP5&@ajCdAsR1J_yH)>Gv$%{4_1+vs-kj;HHQ}#>o~|`nZMGei}Q1%QdZ(%&z#FSp`5U$L^%{eiCbNT?ndfEQzm1UFB zv9l1u=ouIdxB$=dW}- zbwjZX9P4?qizT8-kwMay;srLTFLs>$f~1D$Mk^|i?0Ye)rM@IMYf)C`Cl4AY_eN@3 zS2goY^QlwB?LEH2?G_7!usm=tpMri(V*XUR6mxJOdQj`my2m@k4CHX)SY2Lss@*Ne z8^Hxo;D=eXX5H~s{u&=Vo>#}M&02>-l18)Fp+`OxXf>Kvb>AIhPe$+KHVlAtwn`s8 zwr>>+X{M!LKkOA5HiptNzDL=Rt(hD6!meGq!ZT)PhB)VaX%bp)` z+vsK2z{|$cp}}un{?)xW%q9kUVKPRKowK+q-b24iau&a<4~*2Y$F}r9GcaNv)b2S* zEWX60w%KE)d}U;*f0x98RFcSFlY7>`UH#d7FO@5LoZ;5@uWuZmg)Xd3Hi`e^X?pyP zU}*N(qarhs*0}mh_1Hmd5d_Ec3a$DPds)IKSaHE&np7n7LWQ+%O9aZB_5#(Ed*Dk; zujk{7s^P{LMlU6cwudR+_dkTMD@;K0t;J-+Kxen+naw**A=HqnEsHd5DxJn@^g9oi)SPtAuEX<2^%)mSCu>n^^EPoCr{47*yBgQc z;dLG5cHxmP!IG?p``#XLH3GfM$1cZPPakjLlQZ*#L@0qrFskcCQD%1!XT%n?e<@SgUcwff^XMSyoy(%j6Qdpz z#qm@@#Ffmt2+yLzWC*=0L+uyT9NX+W>kEOa1;?K?+j$+}mXlg}rDy#m8T-JV?Mppl zcZvg-2y}*{XI_}!e)C4HKe=$-$vS24Gzn#e2Pv++%+0O=+OVI2e6j81Vb&^+Pq^zj zEV05k{IT7Op}u9N!I94%1!T~6aG%$T_u%EB#nw8*KDJP$d6UN`L9olW8e8g|%)I0M zB(>Me-{3Ey2eo&E6}ptcRgG(G!_eMd%eOh!{lzE)M(&Tbx2p5Bay^zRa`=qR@MQhm;!?5+he0q8+V1EW5?hwrFk!G6s zmFKfvzuiop_ska)b39A&)E5DjKIfr2vm3UD=>gjSCV?0}^SfX=6WJ+ydaM9sn<1;X z$5^m{>EhI`C?*aH5r#fN#&WVONGUUWN?!_k&&}o0Qtgz%J|#Ul)D!h&Wgma(L+&W| z;J1$Ev!2FRs|BbDi$)&DvG`Oo$N6mPPuoLHT|MlkoHiV!8Bw~@*SIy%M6JydzBmOt zq%=8Xu0L_27*iM3Et4!=8!;arMcZ1%cG)&gmu_au_F+i#2qC_s?RlnS(rJaFhU^xu0OTtarw}lTKMY6w0aQ5(8vuTe%f1rPc ze9wu_b1Wl{B939^(|h@aXwccgvJ=FQf&ct_XKL@oY!ds#{c!VosMc8FM~l)a+pOE# z9HZu6b13~|HT)^NfND2KAy=ol7TQb93?XbO#(dXeH*Z>DgJhsEnlyRtX40OWSt?(t z#ppf&&WplIufjGikc!<`Y3w^M!!4QQ)D=Dfia_WN_knvX7wN-umJ>dOdanH$4%$Me1}Fi);_|uTVFBbz z)wcJD+w6>o;2{MzTR>^8t}8arOW(k5KDYjDi{|Zd`}(CS4$H|0=w8NkJ@qGx%Oju9 z+#AjLJrBKfx{Vf2+`Ue+4ysh+ju|FRs@t5BIUtUerC8P0lt`SzFRCz0<+AOvw#xO3 zY6iw8D2gs`6rZC~se>aore3tIG4}`TY6%AMDOr#18v#g|eHALd)s~m}q6jM~o~pVd zpGSwr;_#2@@8fVz?>D)>E?DIE{4{P6bbf1CVIE-FqeoOsQ;scf5Pe_ix(;Rxl^aM!p((0gb9Gbv zevFlD1Zn!1!9zZE>~`HGvn)(bhn(UE@H+ z7~b0lYq+PgD!hGMRC90_n`Z%jmH-E#Yp2~6Pew2Zc<=`66SmRDyh7&CimGmJDp*yA zleh)Q`PwQI$zqi*J&r@UsfQx^EEPo>uJ8s`b(6GG~tNp(ql1=C- zDH(c6s=@zjC|d!5Har0%tZP&dJy1{4sY4@SY(c&LUtb9@ASe}RNbmRKQ<>P9eR_po8;u>S(f@de3hx z**hC1;VI}C@jTR0(}y-tegGAN7?Jqe#{!P`JZ*Sm74T^vvgFN}_bC%ef7TwIof_WW?>fM6?tWaHWRP@@1-W!-5V#Gmhey>3re54ka zc)j0}lK*NZA3y++%Rwdi%~QyO48QPS`}IM`KY&66m21T|d_kEgcL;hPrYng_Sqpuh-QRf`>eka7J_qIg);=_y9})Jk-wi+eW)1Mtsykv?F%<-+N4 zwm+cD`l$ENOO>+K#NWm+gU(D%nJfdMt`B<)5GvrgCb3QhLxZ#GvRDZE`lXfncYH3A z2UI5FG)ZLZV?_~wTr712PrzUM{T|T+8o8Fw=ecqp^j8e{Zhq{dLS*s|6G44IJYwbZwKVBgix^AS$9&(-J zYZG1a99H$x;<{OJG5?RDI*fol0At7W-dw_*jdTcaJ>!h+8CDteDlZCcU%zc zg6sW>EcC-`O!@%Mt;&V1rft<3%t2&hyeUrdS}CDBWjjTkn1{AvFQu`*^;$ z$Q=VEYYRY`xc+34TLu&GR4PB#Iq^mQv1VcQZZ#=_21CsTf_jy$Ur#bWW3k5isAYyh zVE9m`WnLreaxd(%t^tB&E*IhEdY3Zo!g`UhIMgxGaC6ctU9`W?`qb~PnzoweOq9RLqAo-&n;rUMm1xW^AIx3`E);fB)B`ki3uiwNUb`BVv3 zMnt(C>qSBInzk*cJu;QYnIK2B*|^sjVMXsDwwhlQn$fHGS7tP+UUud`{zKZY?e~JH z_kE1gY2ZCfg@ze;!S)if0t@G zIap?ZCL-2`V;pfB5LvXgW5)E*9Q*1-TE(>UFk7DmG%ikKrd$C&&UxioRirK0qx~R7 z-R)o_EM8NK((P~)DNd)_9(w|SP;boC(VA5632KH0#1akyO_V}&tIJP=*Oh)wu&07mK50kMq zI#T_peEjdWG6Sm?26O2L)b2mq3s^Ox%-0|Q^!)Z*+I`Pq z`1PFrAm~wGU|_kxLh#g72k^w69s(0889lvpW*v)gTm3;e`Dd%lyC^usKt&R&CHzPC z;~}C+4$68`NhxB%<-*N{$`|XB4ef9efvDsg%zzC=qpuw=u@fEOK6#~!s0JKwWLb%h zZ{9c0)HV6B3DV-7r0f)^eFz`RkI6KZOg_x=qLJk}j_Eny!i{A%ttKPK;MdpGX#D7~ z4kFE5hhYOMVoj#N#(lCEY%h8?qTghWgak9~jZRtLEl?~qk*}IYx7T)DjdH}_wB7tL z1G%izNLLNpm1N3tD;aQczv-S_w;d@d z2rYoj=$TY#N73LLB65_DbRI8jlX0-tOgQFzZ+f?CyNEG1-XDZ{Mn3Bf&A5yxFu_s) zATu2#Sw>HuVCh%yxH&ZZ&PGA&vPQUm#s&(pZO3=&wo7{hNAGI42O7#AjHyA|g+&QVxxV-b3l8cZJcBkz}Iy%IdQOgK@%|VfS&S zbw>-;Uo2zMYxFo~u{%r}Kqt;-`$9jF9M&S?vX56rQR#dNZcp7qPKRyR&B9=ze`{s# z5Dh>o?qJfJ45nWCv&L4jM2$sj8-yva3e3 z>tE)*aTeY;gh>C=`^f6==Xg+OsFJbBNs`jA2KL~e7*yB9rn6ubp*MQ9Ghl`^z zJuP8Xx9Et?KKD(Hf?Mqjb2xEy=ez9v{O||KdI-c@Wd#zYn#}kDI_)um=%tUB9x1*8 zvgbD5!VsUnZAgtM@US>WOqO+NRPO{*JdCs*U%u9HIDLvO-;<(w%32z)^D=>IhfTv8 zcHF(8y*8^t(}Lkf^_F^yILv2bl`d`X3c~f<0#=U&u(&=7KC9Y!gSq?dnMcM2TFBke zJ=ft(OWLXT>RMX07PCowa&=?2eWl8IDiVunxnjNM!62^-hzaF-B^ywe3c@#XkJ~|O zBak21HA%j0TTLxzgAi+{*caB&{L@3QZm;_`tID8(Ab#948s+*|Jd=!K(;FEs-pA+zUQ zwwrBFDxI&Mo;fix4)=frj_QsaKo`a1xXNQWs2wlE;i%N6oub#a!6%2clFudTdc(fZ(%6t&d zVQt&r_1O(SB%=g-VFp4zUh%O3oD9JoHGJA`YxDoEZJ2QSM*&Sk4YNe6Gn==oph;7U z!~I5+-qUbMc*GGDvY~g46Ue3G5{xyhYt5=-O_QgY&j6)&jXgJ=6oDsGhwN?2kPq0h=cBC1wE#JWonxp z+8P^;wxdt@U-jzV0<5Ua+aRZJGVnXNcpA zGQB2u&5l&Ksr4qP;kU-G<*;u(&-eOa%b_Lz6mAtJc(42OocWqI4T@Gnl4m4@Yx-PW z#}%tJ!9PA|Ak;%4FSpOM?+VQ7z<$IY^LfuupeGvb6yZexYoLtX-ePavl9bG6)v z7vE+l`ZQmlIpgkUnvIy*D(-1oV(CvJm~?5PEw-S^mP55ZE)gCdMW7g-xD88T8PvQU z?e0U7xh>(^4Z_I`HS~idI#Mr{+S`CS`<#m{|C<+k8)i37AS}{0YJ>D*jm^BP+QIxI zou`Ig%6yt{Fm~#bY`G7qmKmx4^oSxX_Bhi(rJd9@D~v1zoGiJ(o@d-#=SOIZad}12 zm=)~rOKGtOtcxS*)D?i@nHf9v&D4BBpN~AtrsnbWA%_PE(P4q@_?okrxhAR>MYX%B zbUNXDnY~rZIz${C*3>yUIYXJ7mZI;_h8y2;?1^o+FP1-v!<~AkZb;_Yr$z_(C$J2Y zciK%M;bEJ_bl241^9~RaghzEpLwk+5ul;u*OPU1(E=VDl#U~FFycTYHyORRNsP$aR zLg?4s`*#9(2>)F|E)8)Byxah4Jg)im49Z_VQK<#c$pE?-KAJKpBYj)E3o#ls#YL({<(` z)B(vhKR)o(rx=JqVUjG{>(OoYy8y={){@}`uKlOpA`u|XfqP@SP zqM|Yv+ke$Y&+1qvAbm%ID5Ue+9(_VAx{(@;Ch|xaGoTh`l?oij;H_vcLwBR>{ocYG zU|C!#I;lc|c;k}iv#>H@{lquFF`#_+_$}Q77x*E015)ifSt|)@H?yi8NWijf1?o&n zQn`wwPa6;uNRpr3{H8Vs+hSa0d;$Sq+A* z30`-ST`sFmug@*u`7mX@_|!Htfb!}GIRTirAgRbm9K+Ya6d58DDgEw$${bO{J>c|c zNT8kzyc%!8?l!$1wR(MeWS+W6dC@F&M%Q*^%gX+3MvPi)0AF4T6E@ER*^tyX6IX%JcHr4^jz5ZH``qR>k$CK z8;A=^KGg^E-pLfU-}J@<{4^PunB)&OX9;a^pF1^5{Wjv>JmhkvzUBJV#B4o{hf!;) zp@i)hH1VJ;tXz|?62}OOhQqEv+VitGDf10Z-MWK~+My&UIhfj-?pVMLvYC;8fXF;3M#~2_PfYijBv%bZ zsCGoMC=xA_@jk5m*CFX}yF;!R6m*{WQdoOpXPZG?uNoeDC`Svb#nROGz1rnpq9d>b z!>l}T3AoAp-ihOK6h<)gZKG}I?A(8$3?PnPb9xY=V!CQsi%8dlSF){kzn1kffT`TH zqE@%9ysT`dQO>0cilz&vgyUlX5>o7th)p|d(BZ!vcM&5h5qcd-r}}g)Nmo%}J-s89 zF?yFeUwYvYvPnWu+B{;5O zGoRI&dYguUpq4X?mlgV$!)XKTqjpWK#OXOsGHD#g5y|4BAl+KFF#Rbmvwr)>^@6?D;@daa1b>hv}g^09XD|%YOISAoM!x(zrHU~$dpnSr`Hv%zj$6= zMim`rR)dOIq4m_gHo;+Z!VwRos)J8&C=ne61cj0jZOap{L4eqG&R*n$D&ON8jC2`> zI}%CLsOFM1NWA=^*izmyB|L7(5|MP&876*cJEvdJ!^9qcq5=ynkc)|iy|;%?AbIj! z$@%@;Xi4T5#blCxuAN|~L%w6v4fhG4wl0!JorYPW1MmzUJV*{X9yC4N;>{#KVMr#` zXTCD8KO8Q(moUJ#Of+~koE}Uu?j{E@ge7|=ks|f+NIGtf6BBx#dXJb6)<#{Hak`(k zX4Q9__SV*D%#zZo7K8>`%Y>rI@=VOUqgSsUx0(m8?WdSDfZnhPtXB5H7LaOn&-2+3 z(Uo;1EuH$nVU5Iij$yyHhm;HkcVvi(2nd;W1>j?S4T^S^ zs?cKRQg@7b9sbUj|NIDo8O&_FDCT%km&XjUIT@5EHD5cL&+;c3n;vDE5#6`n~!x-ep6E4%tw9$+q$o?7s z5(oUtTMILwYW=ZOZH4vh*15^7KXCafRJ53YQ4wR+bo$hj!C>bJ#Sg^k51Z86Ti$}b zwmoAnzUmLZHB@xm4BouN1^#RN?-9un!2luSgRC&0-@b=F)_@8SfGaFd<0#Dc&@j98 zTu|u+CPuLROW_X=A;ew=i5tFll~)74B29s%Yn8e!>8H`DFrS|bc5J%qvfb35I8poO zysre%frw7XyM^THV*x=lF&b^D+ysSAdkhuvgKcpZh%bFOQqU?zeoCToFx+*i0agyZ zyw~)6aqxRV3)tSishJp(tEsj<$7~r!&AH5O`~B#}3$Y)c3EkLJAPhU9IYemvA0?0zM%b=ipP$=1e?zG9b}(BXJ{lOo@wGgV=G zXcAy}7x>FO`2pjUQxEbVL_eSsx{QKTBYHplVyD2@hg3!gYBVFVQ5t}_P0swYD|0A| z*xzKA{wLK7DVIT8KyTsIpa3c&K=xe(YNxmY6xivLYz5{Ep9X`oRB7NT*784Ziv>Ph zUhEDexguY=#0cT9FpJ4RR5TbN;$d%`5=i!DE+p%**|Lc6N!tH%9g+ZW4Y_O*Cduzm zQiw5BjYK{;S662Zkabfia!39{{(-mTu6&^Dh>pu$CsG8~ZSXcE>PiB=r_lfz6*qj_ z$+SEc$s8rwy}f-Qep_-Y5&7UoH#R`P#V&Iq>6A&$zm9D0Q(C4pP01ks~?Uvs23Zu|0eLav!zZB^{p7- zV&r(K<8vL%Y3we3BlNukqWfgX@~6NVlmG&!e!pw!x4@~v&dmjh)ta^{?2IdMZOu)B zNA1zrGn)NNto}o;g$NF?Or5t49Dfrggepdb!x$x-PvpRuOAa@T9Aotfv#Xkam4YrD zckfCzu9()eOl$Q6nUC73Aob~gdK1uz}sNXwSa?d~$xEv2g2T&9W3JO4{ zv0kv#tj%YWwUesRV@vUHZ{R2tRIP&ZT_5J-zk z*(`EDvZx^zqm+;Ew;a{d>1mb#doNQ7E{rTvl<{;k_RiO?WMUMJt^6~bdnIreW{$bo z;tl5JKz-20WSOGI%&1gbJ-bF>Rc0)@EDb>|l46YQHgDoW4Pkv4W`z#ro@X*Gey=M| zcsE)1g|=f^?fx!RRhc0Ra90or6jM<)SKL(fSisW*?+e` zGn70ei81xJt^377Acs4lIG|5J_c>QtG_wv00)h_B%m$8Ld-!r$91b&7^!~^N194_Q zM#kF53J0-Pts)`Vr{+bT-;*BVvN5-USo@&u$6E>qNic18}g8zjlC6><1lIejB%p8@n zYAFw61wHM5gC`f6MkV$@St=4r9glpa?0A|WJ{@AO^J30^;fQ;G(=rNgASoy*A;E>) z>;XN5)vvbpinA<0jnSKlq*a}9O#3ijGG3zDvo5$-YA`@XQl z8L#$8pO`Hc8hrBEzVpeq7)-Jx_UBzu-BM%ETho;~6~G=)_8KW5Tsrk~JG@P37{>SV zRD2trnE3W;of9q%4b59B;RnJ(7R&0z6&LDT8?H%pZlfP**bI__ZocpJ5_km(!9?f+)JbJDKN2=X|TU2p}P4~rfPeFW5 zF{Y~{;)ieF=mxt+KA5_!$z{Ki@{Z7{gzm(~8|U0S9p>)ct_l|8fQE*KY5V5QT>uu8 z{k6$6e3fH{8tAY;idF-I9eY$axlwYCM|*Bc9<7g+zlno`=}4eHQNHTIQK3v8(Bc=hp<@MK!IOFTaRj>3c+Mm|?iP z??n)XFmm={72IljvPx=jBJI@GJG`y%?45GQ1)sCzclXXcJYKV_Q=nHi#q2(%DTG#p zT-`NiK_ZUM-OOdrE~WKKWqh>BuK7FA%jC- zJr<9B7428jC&B0DDp?F?y7{!@RYroc0VY%)o6Hk2Tl;uXXB z3QclT^Y2~_tOgF8n7@ymtBG0b1?tE(=%l;*I>9_;d>Y|&qZn)Ay<|a#@mr8NllYAL zA^(nh@4gZ|W}<=m(Sq%8gs?Q%UoPRTJH1*dGida^)6q*;&K25&fo9+D4cQgx7P1i` znI2gh>CALw>T!*+8Sqy_Ur~csb1M+^g2Mpi*AD|iuypX4kXq?k%RC$ksb1dyFylQn z7_m|{GUwk8kp;|Mtg-))lzCFu}%P7Sp#sEUEd@9o^UEBtZtl->%&ockTR7C#Ia zYxaG=PR>`)x4T;QF(XwA1x|t^)U&vq(5{B^`ZHF4L z5lRYU!-JOaAC}&Lh+ob+c85$u3s?TmFE=BuQsBadH{)WQ0BpF$z=qZB7@?PwjwOl4 zzs~yCecs`{P!pRFQn#zzBO`jiHa6**Qh4iFzpBwRrzjGdiaeWA3|6@x&7XenD}j07 zYg0U@;4Ap{d%6KHEtJ6R5efE-Vnv0|kDo7QV7%8NMgGHc0>ZHwsxRyBqcZ!hcC2v_ zq2eu&+EYsO;+L)aTJC$ou96>{E8=l6jy4#5(=sjp15KHYp%d7 zVvVGGk=jK4%aHU9F%Ec8m+c#P^Uo2Vnr_-Am&!6yIU*~icjXp+Mn5cs z+|H|<&ds9$haz8!rc11tHS1AI!L@0BteW)=pge7I%Q3%x_`-fWQE!#Ey5{H@+HpX5 zC;=v*$d7scY5HzY@Ri^7+tqE%0pvN0$KpzhWHDEsRLAe*PAP&Ks$_;7jl@iCsO!{t zj(z1hZk!8%_Qa(C6H_=VnEr~3rL`OP^|>124e)!y)GvDL4!K1VQ1qxeGKfEJ_Km`fnqchF_;XqyNWTrJKI<)J|0_@Z z1=dQMYw|?)x9(l!(;ao_&KaEv^CM2sH z>0;#SYJai$)@@l-qQNK(U{^!!r*@?Z3R z69DKXa8}6v#pqt;6y*w&RR=3o`1^>F$FdBn@E`^1PDaZ@yi(lXTYF{SY6Sq<#7ZE` z4fwGf0lNnSylQiE4gu3jLBIKuu2@VO<|fyoc4tG*wu?#?56oZaQ+{0Qs(};?|4!i+SHAHj4DYSTJdINXR9T-eVsM(0*uzkLH9Khbx3Q(+_%-(CeCh)LlVi!X_^#N z6t)uIe;EB!$%zK?VK+j6H#5VZH_JqMK+zTsks3PV${Hjj%)kk@UEege2?o4U)-sq? zf!@WWv+iep*hUr|U*@H&eBchdYqlGx0VH2!QT@5p{x|)HU&D+vEi7ooCHV5gId6xD zhm%23$UaYU(EgI#MmHFHMv!6=A&uZeZ}3utG$1MH)E!i0opZcdp>cnj>{kLv-Y?b$ zhtfnD)hkVsBBMaDkgf50<-7MEsck-Rtt@^S#i_p2tuQP}&cUe4%&Z{&)M%uLcHw=6 zPT2IcR!(+yXlJxmVUjUmp$jKOl?)KE$GwW}*T&UpMh?o>Rk}5|YjrFyYOgk|A8P;} zl(cM**&yIGQL&anW-S?=I<4Pd#L0GL$gU}o);&DMRB}#EC4^nXe19sc4ps3es&(_T zbVK`hM<+)TGFHJ39yaoUEoE<6ida~fd*&UyYQ*pE6Y9Sq23n?L)YX2Q8#bE(DGVzb zeM^})T#L*zNQ#>^Y*-U+zB&tLhzHCKj04xPX`w2V5|c@E)P2;Ma6wK9+-AS8dw*LI zhXZ4bmZ;i;cKRkMXE+z`-LScm|N7Y~uv z4F(#CbDbp2;qM`YT0vYp=E#*hBL|m5l0ttt2X7p;UbHwLKqrp ziERXS8*{U8CC9^Ns{;{u1U=4;Pvqc^QdJr)u!+2xo3GXS5`#)l=>9F(-sOneWh2Zh z2nSyZ(3*uk?Bqw`0O=s0RZi!qW&9%0YcsTFyH-}md5aAm5hbEE*SLGMKp8$_XP!dB zStwm9;bovi8-L<$Di`O2uk1X4ga)3LQQK`U&pxJ?>& zf$(saJS;3MylBa$v#TpIJUkcvC86`TB#liONlCVK%rj11_S_FGB&2C%l$2AoMfs(r zDnKpNPv=Zv9-+nFl$f_~jSd#u54?~u5+0v0mXAjF-i@8}ChG6<1J?9QQ%plkOU|^D zf_K1cfJ%Q-W;jvi7OkG88=d>S4uB_^zd2_{gG@zE#TU2lf;2*4kB`Gc8?x3s7JCn; zip%uWerC^J!NDiEZ|cF{JBava9a(aB)P6Xq)hAa}`S0V|+Z6*)$)F4)46~KOxFE}+ zR&c>7RRp;xl&{;y<;tcUBHBM1)sW%-&>&Hm-UT9bln?{~u32`^8Jzy_aOq#4;T0TW zCHdf7(`K64m1}0?9n(jj4h@hQB4LnFsfX5}=fVV?KfiM8uNkelG{Cu9avn8h`FV(n zQor0C@oC{7*F_zp?EI>{8Xgwv5a~8&c|#F@p76sDhz5sP`$!9Z+RGFjSfCAom9b;w z=S^&|!#M-nsz;cRaB23~3$Wd_DX(llF5q1`H>;-x{~Ve%T%cRVEaq{P9{hXcFg8M~ z$k#n2Q3llcxza+U%5R(hIt*^zAs_>sa37hw%0Cy@7y(nAJRuJF933CtcZOFnYJySi zcynAo!~S&=Klpa<($}%U$^P}+ND}D)_yr=@PS7V=4X&sQe1AI-j1Dt@(@rvZnkkCNMGK`=%;APIgSpNkAc=EN-Q~6)_Nx|X* zhx)6ouA+c*7S?O$mf*g7s-HNfR~3jW1av#RFUVZn;ta@?fXFahcWtvb z_5AN|1=21fLv%;vpOK+JGop}_+~ur98Gac+$U`vVL#~U2E%G|!Yd?(Wl^XmO8ShMB zpEIZvr6+$f`xXA}2tBR>9~j?b$*zO@K)gg#m2)4>$p5YK-*Y!UL<}|I(r2FeX(nDB z-m{m72k9(3gy9DrNVL^kbSlDQ^6u~={^>*lL%nhXM6|L!tnR0c`63UvppwywQ3Jtt{u_A3 z|3YvZ5J?YlZsGmB8TBT`TuDczD{yNE_LWXtE18V?2}`guVeQRy>`!aeSO;v+^m^ya zPl8|82n0EXF|W+cgjexv9^`WparxV2P*t>Swm4_eFq$(3hHI9en1bBY>?jejECVy3_L0x9-W_`-!9KwU=AJIiQI*UacUIrs3jrSd5RK(tq%n^Lo^VmA zc35ZVR;7#T=(tzq-W4@BKmP*KhxSuMWcTBdEDCs*y_%v7yR1S~92^x(!e1dl;}k4+E&&~H z-xf)$nMtun9@Hne?n$OMbyb(DY093q@`1I-XIUdN3N_qiXft9WQ=YRV%ryY z%uL|6sI-_YZ8GD0+4x|PrNUymQU~yR7sl9VTW9-qT@N-$fx4Z@5I#>`WV~rcLqkJm zlYs}+KvdBj8l^Vd|BE}d>M6og_e{M$+03o4lS0SHa*x$)rL8fotFL?l5tU=#b|I_|Rpp77TFjR8 z<`Z%_zP@}ca(9q&I}c2zaUY@KhvL+#G=}TJ2i^})Xm$Z|`f7jW?1f(Jb8xp4i!w-z7jN7iYNkE=#) z)B5TJ+TJHp@t;1{^walU%gKcT_X3lJyV=WMpMO=*QreJr*lp?hvT%~G=No2z zdyG7QbWEgL$b+kl-~nmkn~JDX%ZczZQdwq{B{3Jr4593Xh?(-w(P0%_oOz5QefGKK z&le`eqQ8kyLeT0eW4!(u+q|!M1AY!LS_hS$tBNZ;Dv>x%M4QOmOZWdN?YqO8%DQ*Q zE;cL(iWHS5(iDWy0xC-Hy$B3lYNSITAR-_lAPEq9@1aN+FrZQcgx*3Z(jlRffP{7r zj`RD*nfdPXd+y~A9`cZ!vvc;|Yrku~?^=rmAV3kTZ|)q@eBX1QwBoG7;Zdk)43H!< z9fxvw@7&4A<2>ulk>1H{7I+a)YL+&G4!nurH~Gp|;@#NE@7v8FU>6e}9N7vZwYXj5B9*|Kw>Nw zkmXjkdOYWJzv1~@AUs$9TGecQOS#d(1;gKdd%z&~VsG+$snoJyQtsWncRaE4v@|etoM@8MT9W00z*|2OIx=$z9 z$%M{ON%rCQ+8l&atoULMT`QpiynJOLcsh>jz@ei#p{mqkBRcQNyP4w)BF{+S*}QCd zmCBBe5!u?EW`qC)QN!<&bm56-$eUr$ZY*40b|HW&f?hv4so)@=#0pVDwjaZ}qFx6f zow6f>K;#@$P=u}MyTf-1_hW;9bqybyo$gaedkQkgbV|w_85Po>VN>_fK*##7@?=u1CFI7PIYq7CW0fmzkJSFW*Nsk}S7Nn_J)UNfubZlOnWj8GjnR)hB)z znkyqVrSP(zasi75Ub6gKbFyke!R{*JI(>&_wEhee{QOH;-w&!#Mnf~*)?*REcJrpH zd|TfKBVTqEmlBKa@Ux2Wr#hmX+aI=z+j~v%?~`fq$%w{^bDe)2;HwY(a;Cm!j=mS_ zDKU#=7>>DpeWyeVo@q@oU3*|l_`5b7n7IcPKd6=STs%C*0JTC$ZM5NSwDI8id9r^p zOj!vSWn;aoyWV@oe5>Tx-ER2elG4Ayv)_&?A18pjC#Q$({%}ZBFsJ8@xM95Wyiqez zCBCC37{!+8#{l5qpF;-z!`}XOGz@@A!f=zHNxQBW-`HH?wLeuE-9>v#9d2;jONR}p ztE$a7CU@x{5AE>4zj=u65}pqKafaMEy3{Yuy@obrl`K`g0Fe`60T3We zJ8bI*0)HUp*D_$z)Y1pZxnO6aRhFW;rYFPfEJ)@h%xZ#{gQ9j|M=g9 z6C`l}dNjsSEo)R{1G*|j&UW*ddqKb3{cV{XzKjb7ye>uKs=mPvik{>I`47oZ!!~HFJZk9ZFDnb_w*TZKYdx$5k`9j@Z{a2j(O{lT@rt6l!sHX#5T5OO^Hv`5ZEbMKf~4}1l5-)|p| zh_tGCJLh{w^L5DdjL8)D&3jH+8s%7_ZuJ;FS$L!1b+*6nIbiu%0$@24mjtC>UO0N` z?iZ(#mmX9h7a|%$G3rLzxBQMAf&1Lk*en#jnOk%1Ys;9(JNv6#*16W3LdDA}N8Tj_ zJ$~MHG59&71A6R2E;0OHTt#5QWPr!Zfce1WCrtxH1P9QjnHechdam#*sk2!aR6i+y z1DEoGe|LkiB;B|$N;*NhXmX^SoO;eq`(PlZFK&ZpX_E z*8$|J2cSC>rM&t0x~Ky0f}&C9Cz}9x+&oSyZzfx+1iJoWw|^M#-;N5NkS*(@nGif0 zdJ{mP_LOG182XZ&vX6=vAo3BBiPu9_uUzUwINRdOeQS#P~( z66(q?%=^!+{lh4#ssQsupo$(9GCl%KOszW?6+i+xA+%mu+yH3c8|TaZlvw_4gTz$> zyEw}y(AwCaYKUF;F4t3dWrkc&McGL)iBrEuAOG^n=N^DZb{^7kDL&;P(Wv-xb|BTp z+NDEZZn_{Bj@0iuZXl2N%lm(|aCX3o9J1-_-ROarK!=@shYLWWCywtZ$c6ww@j~=2 ziK6nsBVA2OhEuw*@%~TE1=TNllDzmUf0I-<9mbk&5^NYaqeV}9WFwXv;bnqKXG-4^ zx|+;*CKIKbhY2iRlG26fd;iNT1|H7GZ?i}Ij+}o%vm*H#2+Gn%$!$)2I$6IZoqn=@ zd*dM>3u$gC2ND_)wm@>C6VJEmJlTwjsE0p8l!Kz#oE5UJ%v%hyrSKT<59V1>6?&c0;~l4e*igZ55_3HKz+KqZ^2 zJ!}{j+^XsqWD6_J%I)55)l5O1krCNVaItr!Dstau70dF7Q$cQLdiAatCMuIdtcE4J ztXwQ%#BmJw(`*0JCIDyozAxB*wzDsE0HGrORKL=JB{uf@`bJOkIoTgLcf|*A1le&S zA|+1!{BkNPsDS>WmERVI%WGZ-1t>Te73S;J$X{TVV5Ruxsfdx!0oq06%a;!^9UbaB z`)X&-*mUB1vfX_baHZL=12q|m$S6q#Y3V=_ZG6Sj^!HSbygiwiy@P6KCMySXp%zfp zushvLWnnZsSu;|nWpSlWFi2dR1C1C%Q{=;w(5&KR)h1Y>#^&;9gfavBrArZTWHN_A zg&jPx#x2HlE|h`iR%+@%CE(3tK5dU17=v1_oGNx9aAqsS3pEGVCD#QPH%jsW)B>Tt zb;090&@QDXPmAj+-y=8z!BhP#^(~Smm`!Fa2fuQuc=~hBttr{$kSl>n=94)o_l(_^ z#@OP83P86esT?yPv`G@XiW@kfc8(>k)(n-4FK&t$TZy$w;NeNrm(}x(&B)4X>1?A7 z(bSIH!|%AR%Vo!PHuc+Tx28%3XT6bWh$sy9*A>;yW~mzEwqz7@iT>grByT!-gbezo zQwp7bKa~mFQI5Vn>p1IftmS36!pCrpkw|u9mF_6yR0+;(+Q-jwYbR{?d+q98_;xdF z#IYdJhjQBb>J5(l{Uft0Q$X*!jE@;ZPUgh)QeDRiY_)%&$K+=W<6yj4LPDdS)ar|K zzrfOz+%w+;UcZ*izd_fZ7BD?G2kLjLwj0E7B(rPq#!1J1j5BR4u2c_t<(6E z-Lc=wi6{EZp4*7d0e7O9Zm+?V_GqIrx>--@rVB6>(A>!dr`;wOf9KvYxCav z@+EDG4Gh-W%<;&z9m|$aA2yGGQ9S#=f~+e z=FGIT$Ktob4!!%SW+lzwVF5NC9>X)z7@hWO!_p_2ti$jVHcY7P*6) z(L+PpPWXbY7Co!5NF`r8pl$M2ylK)!nd;k{rWi(LS2VDSC<422D9C#%I;G3TWY4-u zWTqvef(cls7|rAziU6nLo}u-8r^6q^YiPj<&QKLkQ~BZ(8s7>?Dx4eGN=FMjHJ1<6 z9o*c26r71#Jb&)AsxNc1EL1vfQE5m6CD&ovh^x>S%WJ;62^bV~RU1Yxp`WEqZAt&Y zi<3iaCugiJ{x9Ybz^Q?>DKc%zlY2XxNGw4*YuVLQPg!`M_4Y0}< zpHFGZG$LUG?z#3ZZjBGheULAsxk}fnW9(~E>&nDDE-jq{c~`eK+t!1!Vh#?sWeJzq zOsR5w@s)}r7J}f@71kl^ztI5eQd-_#m5gtYL&a#Xj~$EwjIIv|Oy424a&-H9??LRX z+tLZ1VV^d};r-1~`6t{NY2A%QBR@ngciyTxk25Y3&RTPauAyUfyD zqha+w$;h{Y-U{@Vw2G!!+Hy^intY9g=FEpM*>SJswB526Ov>i7Pu#_9#3l%uW&o1S zf;7ZgQOs5P%MS1#@i>=$f!va`Pq#eVix(SvhVEa{V)UQh=#=CKYq+fV3E20(9s2l(ZT$^Cel1z!`Q4kpdT;&SX*R9nTlfF++BkwPf<*I=AIXYVL76FK2DNyVYy zW0X`F?Ha5BUfo<$cn`7i$%H<&1htwEY`#k{gj6_wTilqIeaB#^k#t!hX|)oomoL0t zdQ$(Gcrl&K^2Y&Q2JnFQr5S(fF*UH8b35`3`!ko^-7*i8a$k-UdA`Xal$}hkufoFv zT?fh~bJJl&ETi)9SG@$mhu0iW|7xu;XTA&Jq8Ux`+H$^aCBxMOjPRe^= z9#SV>%{#xv5t9{wg1l5g@5&4ADrWZ&tNHDdbfHO5le&3cKCQ>RTh3 z3ZUy^v$wB<36HI_FH4T}Vmj4S+JSMnw^3yY`QaT=zWBsExbggv*-_fCleRkG-JJ!LJaopLR7H-8@}hpco* zC731g9&Tj1y=nVSBK*42X@7>>j=c)XO-N>N5ep2=xo%`iKE`~1bJkdV3s zRBzN)DD#kKSP&f!VRIMmCqsK(-`HN|L#iZY!9RsyU-&{3ErP?swCj7HVq(rVht#Tx z>c)adrkyP~vgM6a9TF-8o9V^4^+?_I*LC(`rj4=2Qcdt5#)$U%^-SnGZH~z~gi@!? zs6qLXpon&QV}*f8!lqkN`xsUxqJsj<1?{u5dja z8Z$2^Q{$=@e8E>zAYl*)fh$J5hIyHn#@%?rS3URWYc1O5G^!A&{@s{2_Xr}A;L>8J zpb<=)$WUdsuIZX?|LRGe=Oxm6HE6fg)-Hv3CQ(C8E{b7$EjwTmb@?Pqr-<=VdQp4a zUMMFhW&9zh78UcTnG_%NP4e5f@(TsCVb=3cE4jc06b8YL1UvkEd+uYhI0lQ=v1cv_ zY@_EuYvM`o^`M*@Km&E^tKh9rBU-*~wa|$q>)HI+7u{^@Qrp4^mvnA1jkOXK4se{ncfJwbm@}QwuMe^l6f79Ny{14U#~GKtJ7-4 zT~(i3I2fy%GM*1LQ-2Ocy4&hVmFsk35ZV|o^)u%#cs5T{(TlysEpCCF0fLW{t z1z@~tPtcbypSdKwiIe<@|Q&ZKitya=kIZ3e|)AyW2mm52Ce>N zF{`zv1zIOxl!DZ41XiyJk5iO=`$Ha6i@2#`4L^8b9xrsKSCTZOA{H>iGVg?Cy!&@q zN-aCp$6Y!E(bs`kND5L zZ7YfZxQZ4lV{h|{s3>GB(%6@MXKO_O!w1&+s?}SFKpMjaNYLC0|C2syxzLLY65g_7 zK3lHN=3wTQ6Y0&UR5e`baOskB3Y_E zV{BAY<;mVQX{nvB|C5FuyGXtl9{qjfhUK--S}5Q9$tOa|Z8-Amavg+n_G}n{e1Vft zx+0mQL&74r*SwpV=sx5h0d8RA95fh8AfQ4x0jL|@!^Cil5AEf6m z`^9IL#|34U(yJ@-Erk(pPH94}juNMLn1Q55;$WPo-ealyzL8V@edqlzZ%+j2u{*+J zJRVl(QLT_Kr$UA1J+HN=Et?Xmu4Lsx#EK|nI)VI%TE`SRFjYm;bI&(%^-p}gpfU98 zG7wxLVU8+9fCDci>P#5UM9H!8=nAXMqEfpD@(tP4Y%YY#_NPl#R{7RF%G&aCfFw)o z0U}8oOp79rIObVrlcuS~&dT~kS==YaWxneRYvq}6ur)3(FApazYxO(l{x~=gX1PBs#IZh)eW-(9 zVV+L+s{m)scC4B+&xu$O`8X(p>&lqI`ECTO^K83zvfPFu%i7!@q3zNMkoX zcx@?*EcNw1Jy3D2pg(B?2wHpA;JN$`BTrm6ZmIw>%{xHP@CQ5dC@A_c$7h!~vD1fb z(_XK%E!3%(e;Sus)gj^)S;Yx57_}SR(J!jyfnhRoXJh8V7zzS?zW0k}MB?;V_MK+U z@zPex@s+!`tgSg`@nmSeH#iyFVTi{vfYfYuH@UKm3ZS%T``S@xVs@Abo`FY)3K=f-f;|mK>WBn7V-+ z8qz(iqNf;TXU17=p%D9Eji2i5SrB<({Ow>c2;C_1jcbC)8O=liG1E*D-@gxR70K1i8`IW#egc6w;P9#V#U( zi#xqChR$9HrA_DFAuaO(^;+QAyB+jij&5jNlV52kqMCl;^{aH-R>VQAh(KQWPf%gj z90Ayft}fLLNJh%`qaJ=y?L9FL39 zozR{9{%6qSN01bd0sVBAF9FVS?CU=K4VQd!_}h0hqeSx%`T;H$7DMvmJ5fX0js)L* zGjpVTT6@e|Zq<=71DFA>Ia_^TuVNsQi;D+&nrxKl4Y0ydRU4KVKmSvGL%UR2pm#~h zEY(jHhY`4dLTzEQFH+_&ttEstgMdqS`^DfVIX9oQA_Zp zPd)`+^otrBh}TbFD>Pq7R5F!QiADtxy63*ijOrE(GinY5^^Jh4Z0_W=BLm8&-35c%7l9c zEA4;aj^t5M2Oeq4eO6XQq1=f%ZIqEGR8HLGb9?ZWY>B~jtrD0Y0i2282`wI?7pWPu zn|g?JCRG{gr0?!}2PI>ZXca=YE3s<%^Algh7X&auhcOmL)%rq$Q9VUK4)(DHQdgjM z5J(w&cDo`OKm4V8oKGc$#n97$!~Gd#`9%-eiN*>VpUp#2;1I##lC*jL#%B&)T?O*a zAWhje`JeiIAPDjhFhx~ zIHfGDE0@YA^I=c}!zo#0Z*dx=5625-RuTy#c|WwU5pLiYoKCgqwjYqJD1MHco$uC| zk{ztPRRofeh$d6?Ne!K>UW4&y;VvQrEQtXF>@C|?4KqwqghUY(2J>bYd3zOhAz@q3 zwBSC|sAIu`i9WdtD!OK0)8{g97?>!vuh_AFH@9iJAX@}-7ZG_|+VsNFMR9K?^VrU& z$Z$LK7q{?p`k}hAZz1KEN?8xn0-_TBKQlUh#xDR_C2*-8Tng_m zJO5XX+I{76c^GDG7?+G)14&yI8@ynMwR36XL*zV>9 zD57`ou93+RF+;jQnJBc5pU_roU|>LSxXS3)yEkt>JbLu#sPt^X8W2*rd1b}He-+M{ z2xRU$tu-PCM2tRV=xP4aN98}`i39pzEx!TXY~5Lb-K|#<>t$H;^A*3XBEH$K#)!5G zH*#8FLo)Y!5s6Brmb{S)97++mah@`!$sN6r>5mml`9-5^(T9w{60_cgPH$ z3ymPHuWX;~ZU{gBkXz$c%)L3njkjYy@H|N8othy{_~M3YD|tJK`r*}!#B^%QmdLik z2bczqWDjj+iS4rLPX*m=!XZbjqHc(ij$b(j+TF9<{ zZ2Tu}u=?akxO|z*^KrG^y`$5V8%1!ySM>a5ywy@rIsW^I3m+BCe@u<<&HFA@A{M$A zctu%QuPMAvcXw|uud2DBL38IM8ns6N5sm0Kqgz_;c%c#t+d4YjstvbRKd>^|(7I?+ zkDhI*0P=~8lFLJVd|H=Oj>)WqpAOIQyt7elxx)}k_^KjKDT|DbZi&pjGP7_X&O4Xj zoWvkWV!iG<7BFiG1^nX4Y(ggTKAjOO*lRPQX1P|+p_aVTlWRs-0IlfW7My+H#)N0FPA`P4AuA1 z|I{+!LypfL_lQr(zI;ML;x-N!%fA<0hic~T21`5C%@|RgJEw{X;791{l8H{v;#PI7 zZEb9VJUG?}o9JFprm@HV`9pCUuFP!C4e_RnkEFCqm*i_m!Y;0_pNSRRvGv?SAH*@S ztBCI>96xm`c5C;0?@`Z*#)Fu-in>YtMoc?oHvYzp*Oko{p1W14bfYy>oA|t8wKO;@ z&yFSz!? zg=e0q)#o~#_Eceexu(dxdorLk_t}|^vzhtRMYiH#ps=fd-sIr0aMEAx>tC0m5$lUS zu>NC%K-ut1iGd^+O;7j*&Lx&AUjhEW_K$zH7zR*1ok>v9Q@#t60{y zOpT^CY~`+!sX+z&kQPvp*na5b>Q zWdJ4L9Tf@khi6VWVSq1*vetQK20b+b1DaQ64i7%PBGWct@7rSNzF)tn(8(b%wV~JV zL;9c_J=5Wpg))P@7hA5zl(bSj+DJ7ShWO3(N@7-CLqk+gm4;4tJ@>*4h9e2V9rZ2N z1#``Fc{^K^FXBG?0>38t8jjQq)d&ZTdq3@rR*7~MztL`4LAzIv9};VxIHobS&*L^u<%&240L~2Gn|I8 z5}1OB;lb@RGieUJ<(dQKs`WUGW%7Z0r~m9)w@ea0<}OTebl{ z&)Vhe%P%ytmEc~>XhW#Wip8whwqie<$oBi)jW5kJslH%dG56*7hY@6Su(y_a&$z?k zI+J)dnd;BJY1v7s&_6eC#1&R}LPN<_qEKsXce4i4>bFPbG>8VZZArFA`hva3lM7Vk zgrXX#sLvt+##HaW$&ij;TxIu5U+#9=1lMOgt*NF)_ig+h)?T~95hMhS;Tx@=1SFA8 zx|X@}C+CfhCd2k4=)(wSqGIN68dN$6f%V2b$cB1oXl8Zr4)sRCUYwXGxg0qS58-GN zIPiRWUaMb^d^h(4ZE@vzud;}gy1Irrkd3HV6`y5n%S2|lU480v$``426%XClgv^WF zx4zsuEUZ&hyY|YpjuO0l#7u8<8E2ogj4N#emYDGGpKt0_>{`hw%Lx%lj;E+4#>59V zlEv4D_SAJX?sOuhA zkpv&L#A=Lp`s}mr`nrWAxoWzA(oB_={aNWfkU$-c7kl)UsB>v#?zV34;;?NYvR8%q z7Ep!t{!>?&>q;2X*i#vMeLdhhf%v>5dAXZ3qm#E4sPED~Z*-$KYj38Kl?o-eZf796KfYiPojKF|Rp>4WkVZmeCtA z@krazwiV)F?3k&_!OjW9@p6Z6zxLqz6G#HWIkuxRiO;EmoyMdxEq4r~l0`PS7RJhv z@2(3Nu^C9@Y`blUu5{igqns?Y5b;=jIdX5$rs{i|g2fPLHgF0U-9#!f+2ZVA-b5@l zD+`N~c7Z;x_1#Ck7^FKHHB)`D+lCZ z(4FFYcBLKbTp|lE5(6{U6OU!|uy3bdc@({WJu5wsiLan(9cZ2^Py7x9<02dLI9lYZ zmWOZHM&>~EG8~o-=*pSVlD?9@Uf3(f%#yL0P+kV{560)W1e?xDxh}VC^o!rt(RVjl zkxP@GeU=GzBrSm+Ryg2p7opcH2viZzi*od`gL--ppNSi5`#TU3ZuhbqHgO9vYl2*i zD{H`vCb>71eBb8M$bAp4L0z_{+~?xzEy2yCr|bG`R{1K#V8tJaTBlBB0#r*0cwoR@ zOD-eN^9>+Gm$;l06jdr`H-vg!I@CK8(*NFJlh$hR6|b?ny6K92{{UHsD*cWi1nW;d zYG4oM`wwLP^)JXJ)k@oN2fh7SeO#4?aiXt_r&UO;r?}NJHy}E3)6O5Lh+vVypxq^J z0@=wx`u73YQa6V;u}1EZNiF@|T$|-n;Omu4LJOJ5WWoAt<@Wf(0Uw*f?=t{*{5%VY z?4Y(zwzTn~+1&F)9u7csQI~0=2=Ti<>jPqtmRo}Ea)2xY3)<&uLO^t^Y2p(N`ThA?dblxwE4qVh$X6-9buem@qTNk(HKQGsB(AWeVV{Jte z*@5G43))QbErjg8W5w$zguHEi(mf04a-2Q>0O(GFmI+K2dW=P`fAHQ}Lbj%ca@yMF z=_tmEV@0QXS*XEmD!JRHqz}JW&%I9yndTDw6o-DgCFHr*2r_RQP+DI(5VvvvDB!hH znok^rqyRN(8rOT4(+gsmdK9+q=+&C$mMZo#x|R7L@Q;T3Q%STTGtA?M2tnC_Xt&w z4@o8_-+UV<&r#w`gv^SDlxb932p^cGa>N@M$7N9_r|i9p@ye2b>K6L$qikwvZBGza zpKO@}Ep@FjytbIu*Mf}W+*ud#T#!#|X`cHp>CX@{>Bb@%!6~u>&wA?WUSeKp*&K|Y%^;u}wuhW?3WTc7&C9idQYOA0=WnpW0a{y??W1#rh^x?rH ze%sl{XuU(Cdch`)5k0i2%g<%A3!P66Z~OYxxd4G59I`VSj$638LE9d2K5wpDkEKJ+ z`AZ~*vtAil+9^6HEWY1R*X|WY*u@DGC&ow#An0j9^gI(Iw3ZevzB_+xeNlifBGYU^`!VBLC_*mpKi2Xs?#@h?tZc1?c2ANAScku z$hEbNi1v5q@VAwdiAkp>Od{Be)k;&AVIX=Cao}2O<>wPFq^qvOsA5Xu%X-R(;*XR?i*Wjh5H1c&CjC zC+XMp4J<5hDg%$xsUR`;Dxm6`EQ0FbI=oDa5|rM= ztwyh8Ignv&n6$0M97fEA%MjY$I5}E$(c&Wao+>1yHnk|+SOAm8QM1yI3K!p4MD&N* z^WjW5RhfZzK@ww}T%O4cM2jxS$gEi!G_8*qJ?<#McBeDFY9E{A-n5CXY597ARw5d_4}-0zf7|Mj-Q?0$frM=se29d6D1>DPNbKj(LFitDSEdcujA Skl%nGxu?oc3LpRe>i+;e6rMi- literal 0 HcmV?d00001 diff --git a/activity/week3/itschrisjang/k6/script/script.js b/activity/week3/itschrisjang/k6/script/script.js new file mode 100644 index 0000000..6cac457 --- /dev/null +++ b/activity/week3/itschrisjang/k6/script/script.js @@ -0,0 +1,17 @@ +import http from "k6/http"; +import { sleep } from 'k6'; + +export const options = { + vus: 50, + duration: '60s', + noConnectionReuse: true, +} + +export default async function() { + const url = 'http://localhost:8080/api/orders/1'; + call(url) +} + +async function call(url) { + http.get(url); +} \ No newline at end of file From 52f67757b09b45530902fb96d0e937a089a10b64 Mon Sep 17 00:00:00 2001 From: JUNHWAN JANG Date: Mon, 18 Nov 2024 17:35:58 +0900 Subject: [PATCH 3/8] =?UTF-8?q?week3(=EC=A4=80=ED=99=98):=20md=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EB=AA=85=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=B1=95?= =?UTF-8?q?=ED=84=B0=20=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...{order_detail_api_setup_guide.md => README.md} | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) rename activity/week3/itschrisjang/{order_detail_api_setup_guide.md => README.md} (96%) diff --git a/activity/week3/itschrisjang/order_detail_api_setup_guide.md b/activity/week3/itschrisjang/README.md similarity index 96% rename from activity/week3/itschrisjang/order_detail_api_setup_guide.md rename to activity/week3/itschrisjang/README.md index bcdd852..63ad4c5 100644 --- a/activity/week3/itschrisjang/order_detail_api_setup_guide.md +++ b/activity/week3/itschrisjang/README.md @@ -154,15 +154,11 @@ connected_client : 1 --- ## 8. 결론 -테스트 결과, 서버는 대부분의 요청을 안정적으로 처리했으나 일부 요청에서 `i/o timeout` 문제가 발생했습니다. - ---- - -## 9. Redis 캐시 타임아웃 문제 분석 및 해결 - +> 테스트 결과, 서버는 대부분의 요청을 안정적으로 처리했으나 일부 요청에서 `i/o timeout` 문제가 발생했습니다.
> 추후 진행 +--- -#### 10.1.1 타임아웃 발생 원인 +### 8.1. 예상되는 병목 원인 **(1) Redis 캐시 활용률 문제** - **낮은 캐시 적중률**: 캐시 데이터가 요청 키와 일치하지 않는 경우, Redis가 캐시 데이터를 제공하지 못하고 데이터베이스로 요청을 넘깁니다. - **자주 발생하는 캐시 무효화**: 캐시 키가 올바르게 설정되지 않았거나 데이터가 빈번히 변경되어 캐시가 무효화되었습니다. @@ -178,3 +174,8 @@ connected_client : 1 **(4) 네트워크 문제** - **네트워크 지연**: Redis와 API 서버 간 네트워크 속도가 느리거나 불안정할 경우 타임아웃이 발생할 수 있습니다. + +## 9. Redis 캐시 타임아웃 문제 분석 및 해결 +> 추후 진행 + + From bb73c521b0b58160802e564fa001c104901ca381 Mon Sep 17 00:00:00 2001 From: JUNHWAN JANG Date: Tue, 19 Nov 2024 15:56:04 +0900 Subject: [PATCH 4/8] =?UTF-8?q?week3(=EC=A4=80=ED=99=98):=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EB=A1=9C=EC=A7=81=20webflux=20netty=20=ED=99=98?= =?UTF-8?q?=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- activity/week3/itschrisjang/README.md | 4 -- .../build.gradle | 28 +++++--- ...ringbootOrderPerfOptimizerApplication.java | 3 +- .../order/perf/application/OrderService.java | 61 +++++++++++++----- .../com/order/perf/common/BaseEntity.java | 37 ----------- .../com/order/perf/config/JacksonConfig.java | 25 +++++++ .../com/order/perf/config/RedisConfig.java | 55 ++++++++++++++-- .../java/com/order/perf/domain/Delivery.java | 39 +++++------ .../java/com/order/perf/domain/Order.java | 45 +++++++------ .../java/com/order/perf/domain/Payment.java | 35 ++++++---- .../java/com/order/perf/domain/Product.java | 54 ++++++++-------- .../java/com/order/perf/domain/Refund.java | 46 +++++++------ .../order/perf/domain/RefundMethodName.java | 10 +++ .../domain/repository/DeliveryRepository.java | 4 +- .../domain/repository/OrderRepository.java | 4 +- .../domain/repository/PaymentRepository.java | 4 +- .../domain/repository/ProductRepository.java | 9 ++- .../domain/repository/RefundRepository.java | 4 +- .../com/order/perf/dto/OrderItemResponse.java | 2 +- .../com/order/perf/dto/RefundDetailsDto.java | 2 +- .../perf/presentation/OrderController.java | 27 -------- .../order/perf/presentation/OrderHandler.java | 28 ++++++++ .../order/perf/presentation/OrderRouter.java | 21 ++++++ .../src/main/resources/application.yml | 42 +++++++----- .../src/main/resources/data.sql | 2 +- .../src/main/resources/schema.sql | 9 ++- .../.gradle/8.10.2/checksums/checksums.lock | Bin 39 -> 17 bytes .../.gradle/8.10.2/fileHashes/fileHashes.lock | Bin 39 -> 17 bytes .../buildOutputCleanup.lock | Bin 39 -> 17 bytes 29 files changed, 367 insertions(+), 233 deletions(-) delete mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/common/BaseEntity.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/JacksonConfig.java delete mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderController.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderHandler.java create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderRouter.java diff --git a/activity/week3/itschrisjang/README.md b/activity/week3/itschrisjang/README.md index 63ad4c5..1446cfa 100644 --- a/activity/week3/itschrisjang/README.md +++ b/activity/week3/itschrisjang/README.md @@ -33,9 +33,6 @@ --- ## 3. 주요 결과 -``` -connected_client : 1 -``` ### 요청 처리 성능 - **총 요청 수**: 32,442건 - **성공 요청 수**: 32,424건 (99.95%) @@ -142,7 +139,6 @@ connected_client : 1 ### 6.1. 확인 사항 - `localhost:8080` 서버가 테스트 중 정상적으로 실행되었는지 확인. - 서버 로그를 검토하여 요청 처리 실패 원인 분석. - - `redis connected clients` 가 `1`로 확인. --- diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/build.gradle b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/build.gradle index abad4ec..d0cc007 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/build.gradle +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/build.gradle @@ -20,12 +20,19 @@ repositories { dependencies { - // spring boot - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'org.springframework.boot:spring-boot-starter-jdbc' +// spring boot +// implementation 'org.springframework.boot:spring-boot-starter-web' +// implementation 'org.springframework.boot:spring-boot-starter-data-jpa' +// implementation 'org.springframework.boot:spring-boot-starter-jdbc' + + // Spring WebFlux 의존성 implementation 'org.springframework.boot:spring-boot-starter-webflux' + runtimeOnly 'io.netty:netty-resolver-dns-native-macos:4.1.90.Final:osx-aarch_64' + + // Spring Data R2DBC 의존성 + implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc' + + implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-cache' @@ -35,8 +42,10 @@ dependencies { // Spring Boot Starter Data Redis implementation 'org.springframework.boot:spring-boot-starter-data-redis' + implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive' + implementation 'org.apache.commons:commons-pool2:2.11.1' - implementation 'io.lettuce.core:lettuce-core' // Lettuce 클라이언트 + implementation 'io.lettuce:lettuce-core:6.1.8.RELEASE' // 버전 추가 // Optional: Spring Boot Starter Validation (Redis 캐시에서 validation 적용 시 사용) implementation 'org.springframework.boot:spring-boot-starter-validation' @@ -50,13 +59,16 @@ dependencies { annotationProcessor 'org.projectlombok:lombok' // h2 - runtimeOnly 'com.h2database:h2' + implementation 'com.h2database:h2' + implementation 'io.r2dbc:r2dbc-h2' // mysql - runtimeOnly 'mysql:mysql-connector-java:8.0.33' +// runtimeOnly 'mysql:mysql-connector-java:8.0.33' } tasks.named('test') { useJUnitPlatform() } + +def void exclude(LinkedHashMap stringStringLinkedHashMap) {} \ No newline at end of file diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java index 36186e1..ea221e1 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java @@ -3,9 +3,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.data.r2dbc.config.EnableR2dbcAuditing; -@EnableCaching @SpringBootApplication +@EnableR2dbcAuditing public class JavaSpringbootOrderPerfOptimizerApplication { public static void main(String[] args) { diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/OrderService.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/OrderService.java index e287036..011b06c 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/OrderService.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/application/OrderService.java @@ -1,52 +1,81 @@ package com.order.perf.application; +import com.order.perf.application.dto.OrderDetailsResponse; import com.order.perf.domain.Delivery; -import com.order.perf.domain.repository.DeliveryRepository; import com.order.perf.domain.Order; -import com.order.perf.domain.repository.OrderRepository; import com.order.perf.domain.Product; -import com.order.perf.domain.repository.ProductRepository; import com.order.perf.domain.Refund; +import com.order.perf.domain.repository.DeliveryRepository; +import com.order.perf.domain.repository.OrderRepository; +import com.order.perf.domain.repository.ProductRepository; import com.order.perf.domain.repository.RefundRepository; -import com.order.perf.application.dto.OrderDetailsResponse; -import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.redis.core.ReactiveRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import reactor.core.publisher.Mono; +import java.time.Duration; import java.util.List; @Transactional(readOnly = true) @Service public class OrderService { + private final ReactiveRedisTemplate redisTemplate; private final OrderRepository orderRepository; private final ProductRepository productRepository; private final DeliveryRepository deliveryRepository; private final RefundRepository refundRepository; - public OrderService(final OrderRepository orderRepository, + public OrderService(ReactiveRedisTemplate redisTemplate, final OrderRepository orderRepository, final ProductRepository productRepository, final DeliveryRepository deliveryRepository, final RefundRepository refundRepository) { + this.redisTemplate = redisTemplate; this.orderRepository = orderRepository; this.productRepository = productRepository; this.deliveryRepository = deliveryRepository; this.refundRepository = refundRepository; } - @Cacheable(value = "orderDetails", key = "#orderId") - public OrderDetailsResponse findOrderDetails(final Long orderId) { - Order order = orderRepository.findById(orderId) - .orElseThrow(() -> new RuntimeException("Order not found")); + public Mono findOrderDetailsWithCache(final Long orderId) { + String cacheKey = "orderDetails:" + orderId; + + return redisTemplate.opsForValue() + .get(cacheKey) // 1. Redis에서 데이터 조회 + .cast(OrderDetailsResponse.class) // 2. 데이터를 OrderDetailsResponse로 캐스팅 + .switchIfEmpty( + findOrderDetails(orderId) // 3. 캐시에 없을 경우 DB에서 데이터 조회 + .flatMap(response -> + redisTemplate.opsForValue() + .set(cacheKey, response, Duration.ofMinutes(10)) // 4. 캐시에 저장 (10분 TTL 설정) + .thenReturn(response) // 저장 후 DB 데이터를 반환 + ) + ); + } + + private Mono findOrderDetails(final Long orderId) { + Mono orderMono = orderRepository.findById(orderId) + .switchIfEmpty(Mono.error(new RuntimeException("Order not found"))); - List products = productRepository.findByOrder(order); + Mono deliveryMono = orderMono.flatMap(order -> + deliveryRepository.findById(order.getDeliveryId()) + .switchIfEmpty(Mono.error(new RuntimeException("Delivery not found"))) + ); - Delivery delivery = deliveryRepository.findById(order.getDeliveryId()) - .orElseThrow(() -> new RuntimeException("Delivery not found")); + Mono refundMono = orderMono.flatMap(order -> + refundRepository.findById(order.getRefundId()) + .switchIfEmpty(Mono.error(new RuntimeException("Refund not found"))) + ); - Refund refund = refundRepository.findById(order.getRefundId()) - .orElseThrow(() -> new RuntimeException("Refund not found")); + Mono> productsMono = productRepository.findAllById(orderId).collectList(); - return new OrderDetailsResponse(products, delivery, refund); + return Mono.zip(productsMono, deliveryMono, refundMono) + .map(tuple -> new OrderDetailsResponse( + tuple.getT1(), // products + tuple.getT2(), // delivery + tuple.getT3() // refund + )); } + } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/common/BaseEntity.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/common/BaseEntity.java deleted file mode 100644 index 9e687c3..0000000 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/common/BaseEntity.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.order.perf.common; - -import lombok.Getter; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import javax.persistence.Column; -import javax.persistence.EntityListeners; -import javax.persistence.MappedSuperclass; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Getter -@MappedSuperclass -@EntityListeners(AuditingEntityListener.class) -public abstract class BaseEntity { - - public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); - - @CreatedDate - @Column(name = "created_at", nullable = false, updatable = false) - private LocalDateTime createdAt; - - @LastModifiedDate - @Column(name = "updated_at", nullable = false) - private LocalDateTime updatedAt; - - protected BaseEntity() { - this.createdAt = LocalDateTime.parse(LocalDateTime.now().format(FORMATTER)); - this.updatedAt = this.createdAt; - } - - public void onPreUpdate() { - this.updatedAt = LocalDateTime.parse(LocalDateTime.now().format(FORMATTER)); - } -} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/JacksonConfig.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/JacksonConfig.java new file mode 100644 index 0000000..8c4014f --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/JacksonConfig.java @@ -0,0 +1,25 @@ +package com.order.perf.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class JacksonConfig { + + @Bean + public ObjectMapper objectMapper() { + ObjectMapper mapper = new ObjectMapper(); + // Java 8 타입 모듈 등록 + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + mapper.registerModule(new ParameterNamesModule()); + // 필요시 설정 + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + return mapper; + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java index 9586df7..d35404f 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java @@ -1,27 +1,62 @@ package com.order.perf.config; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration; +import org.springframework.data.redis.core.ReactiveRedisTemplate; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; -import javax.annotation.PostConstruct; import java.time.Duration; @Configuration -@EnableCaching public class RedisConfig { + @Value("${spring.redis.host}") + private String redisHost; + + @Value("${spring.redis.port}") + private int redisPort; + + @Bean + public LettuceConnectionFactory lettuceConnectionFactory() { + // 커넥션 풀 설정 로드 + LettucePoolingClientConfiguration lettuceClientConfiguration = LettucePoolingClientConfiguration.builder() + .poolConfig(genericObjectPoolConfig()) + .build(); + + // RedisStandaloneConfiguration 설정 + RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); + redisStandaloneConfiguration.setHostName(redisHost); + redisStandaloneConfiguration.setPort(redisPort); + + // LettuceConnectionFactory 생성 + return new LettuceConnectionFactory(redisStandaloneConfiguration, lettuceClientConfiguration); + } + @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + public GenericObjectPoolConfig genericObjectPoolConfig() { + GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>(); + poolConfig.setMaxTotal(200); // max-active + poolConfig.setMaxIdle(100); // max-idle + poolConfig.setMinIdle(20); // min-idle + return poolConfig; + } + + @Bean + public RedisTemplate redisTemplate() { + // RedisTemplate 생성 및 설정 RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(redisConnectionFactory); + redisTemplate.setConnectionFactory(lettuceConnectionFactory()); + // Key는 String 직렬화, Value는 JSON 직렬화 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); @@ -36,4 +71,14 @@ public org.springframework.data.redis.cache.RedisCacheConfiguration redisCacheCo .serializeValuesWith(org.springframework.data.redis.serializer.RedisSerializationContext.SerializationPair .fromSerializer(new GenericJackson2JsonRedisSerializer())); } + + @Bean + public ReactiveRedisTemplate reactiveRedisTemplate(LettuceConnectionFactory connectionFactory) { + RedisSerializationContext serializationContext = RedisSerializationContext + .newSerializationContext(new StringRedisSerializer()) + .value(new GenericJackson2JsonRedisSerializer()) + .build(); + + return new ReactiveRedisTemplate<>(connectionFactory, serializationContext); + } } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Delivery.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Delivery.java index 70ba330..0263160 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Delivery.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Delivery.java @@ -1,43 +1,46 @@ package com.order.perf.domain; -import com.order.perf.common.BaseEntity; import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.relational.core.mapping.Table; +import org.springframework.data.relational.core.mapping.Column; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import java.time.LocalDateTime; @Getter -@Table(name = "DELIVERYS") -@Entity -public class Delivery extends BaseEntity { +@Table("deliveries") +public class Delivery { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "delivery_id", nullable = false) + @Column("delivery_id") private Long id; - @Column(name = "recipient_name", nullable = false) + @Column("recipient_name") private String recipientName; // 받으실 분 - @Column(name = "mobile", nullable = false) + @Column("mobile") private String mobile; // 연락처 - @Column(name = "address", nullable = false) + @Column("address") private String address; // 배송 주소 - @Column(name = "zip_code", nullable = false) + @Column("zip_code") private String zipCode; // 우편 번호 - @Column(name = "store_password", nullable = false) + @Column("store_password") private String storePassword; // 가게 비밀 번호 - @Column(name = "delivery_memo", nullable = false) + @Column("delivery_memo") private String deliveryMemo; // 배송 메모 + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; + protected Delivery() { } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Order.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Order.java index 4a39ede..eb1dc31 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Order.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Order.java @@ -1,39 +1,42 @@ package com.order.perf.domain; -import com.order.perf.common.BaseEntity; -import lombok.AccessLevel; import lombok.Getter; -import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.relational.core.mapping.Table; +import org.springframework.data.relational.core.mapping.Column; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import java.time.LocalDateTime; @Getter -@Table(name = "ORDERS") -@Entity -public class Order extends BaseEntity { +@Table("orders") +public class Order { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "order_id", nullable = false) + @Column("order_id") private Long id; + @Column("delivery_id") private Long deliveryId; + + @Column("refund_id") private Long refundId; + + @Column("payment_id") private Long paymentId; - @Column(name = "order_number", nullable = false) + @Column("order_number") private int orderNumber; // 주문 번호 - @Column(name = "order_status", nullable = false) - @Enumerated(EnumType.STRING) - private OrderStatus orderStatus; // 주문 상태 + @Column("order_status") + private String orderStatus; // 주문 상태 (Enum의 이름을 문자열로 저장) + + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; protected Order() { } @@ -46,6 +49,6 @@ public Order(final Long deliveryId, this.refundId = refundId; this.paymentId = paymentId; this.orderNumber = orderNumber; - this.orderStatus = orderStatus; + this.orderStatus = orderStatus.name(); // Enum의 이름을 문자열로 저장 } } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Payment.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Payment.java index f620340..be8a452 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Payment.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Payment.java @@ -1,26 +1,37 @@ package com.order.perf.domain; -import com.order.perf.common.BaseEntity; import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.relational.core.mapping.Table; +import org.springframework.data.relational.core.mapping.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import java.time.LocalDateTime; @Getter -@Table(name = "PAYMENTS") -@Entity -public class Payment extends BaseEntity { +@Table("payments") +public class Payment { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column("payment_id") private Long id; - private String paymentMethod; // 결제 수단 ex) BILLING_NAVER_PAY - private String paymentMethodName; // 결제 수단 이름 ex) 네이버 + + @Column("payment_method") + private String paymentMethod; // 결제 수단 + + @Column("payment_method_name") + private String paymentMethodName; // 결제 수단 이름 + + @Column("payment_amount") private int paymentAmount; // 총 결제 금액 + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; + protected Payment() { } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Product.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Product.java index 92d7812..ed5c4a2 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Product.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Product.java @@ -1,55 +1,55 @@ package com.order.perf.domain; -import com.order.perf.common.BaseEntity; import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.relational.core.mapping.Table; +import org.springframework.data.relational.core.mapping.Column; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +import java.time.LocalDateTime; @Getter -@Table(name = "PRODUCTS") -@Entity -public class Product extends BaseEntity { +@Table("products") +public class Product { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "product_id", nullable = false) + @Column("product_id") private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "order_id") - private Order order; + @Column("order_id") + private Long orderId; // Order의 ID를 직접 저장 - @Column(name = "product_name", nullable = false) + @Column("product_name") private String productName; // 상품 이름 - @Column(name = "description", nullable = false) + @Column("description") private String description; // 상품 설명 - @Column(name = "price", nullable = false) + @Column("price") private int price; // 상품 가격 - @Column(name = "bundle_name", nullable = false) - private String bundleName; // 상품 묶음 이름 (예: 크리스마스 선물 세트) + @Column("bundle_name") + private String bundleName; // 상품 묶음 이름 + + @Column("bundle_quantity") + private int bundleQuantity; // 묶음 수량 + + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; - @Column(name = "bundle_quantity", nullable = false) - private int bundleQuantity; // 해당 묶음에 포함된 상품의 수량 protected Product() { } public Product( - final Order order, + final Long orderId, final String productName, final String description, final int price, final String bundleName, final int bundleQuantity) { - this.order = order; + this.orderId = orderId; this.productName = productName; this.description = description; this.price = price; diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Refund.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Refund.java index 4c9ca05..6d824cf 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Refund.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/Refund.java @@ -1,45 +1,43 @@ package com.order.perf.domain; -import com.order.perf.common.BaseEntity; import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.relational.core.mapping.Table; +import org.springframework.data.relational.core.mapping.Column; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import java.time.LocalDateTime; @Getter -@Table(name = "REFUNDS") -@Entity -public class Refund extends BaseEntity { +@Table("refunds") +public class Refund { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - - @Column(name = "refund_id", nullable = false) + @Column("refund_id") private Long id; - @Enumerated(EnumType.STRING) - @Column(name = "refund_method_name", nullable = false) - private RefundMethodName refundMethodName; // 환불 수단 + @Column("refund_method_name") + private String refundMethodName; // 환불 수단 (Enum의 이름 저장) - @Column(name = "refund_amount", nullable = false) + @Column("refund_amount") private int refundAmount; // 총 환불 금액 - @Enumerated(EnumType.STRING) - @Column(name = "refund_status", nullable = false) - private RefundStatus refundStatus; // 환불 상태 + @Column("refund_status") + private String refundStatus; // 환불 상태 (Enum의 이름 저장) + + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; protected Refund() { } public Refund(final RefundMethodName refundMethodName, final int refundAmount, final RefundStatus refundStatus) { - this.refundMethodName = refundMethodName; + this.refundMethodName = refundMethodName.name(); this.refundAmount = refundAmount; - this.refundStatus = refundStatus; + this.refundStatus = refundStatus.name(); } } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundMethodName.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundMethodName.java index d31d65e..613bf07 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundMethodName.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/RefundMethodName.java @@ -10,4 +10,14 @@ public enum RefundMethodName { NAVER_PAY, KAKAO_PAY, TOSS_PAY + ; + + public static RefundMethodName fromString(String value) { + for (RefundMethodName methodName : RefundMethodName.values()) { + if (methodName.name().equalsIgnoreCase(value)) { + return methodName; + } + } + throw new IllegalArgumentException("Unknown refund method: " + value); + } } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/DeliveryRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/DeliveryRepository.java index 5c3bcc7..956677e 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/DeliveryRepository.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/DeliveryRepository.java @@ -1,7 +1,7 @@ package com.order.perf.domain.repository; import com.order.perf.domain.Delivery; -import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.reactive.ReactiveCrudRepository; -public interface DeliveryRepository extends JpaRepository { +public interface DeliveryRepository extends ReactiveCrudRepository { } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/OrderRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/OrderRepository.java index b655035..f6aecb8 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/OrderRepository.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/OrderRepository.java @@ -1,7 +1,7 @@ package com.order.perf.domain.repository; import com.order.perf.domain.Order; -import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.reactive.ReactiveCrudRepository; -public interface OrderRepository extends JpaRepository { +public interface OrderRepository extends ReactiveCrudRepository { } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/PaymentRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/PaymentRepository.java index 903db48..c312c41 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/PaymentRepository.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/PaymentRepository.java @@ -1,7 +1,7 @@ package com.order.perf.domain.repository; import com.order.perf.domain.Payment; -import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.reactive.ReactiveCrudRepository; -public interface PaymentRepository extends JpaRepository { +public interface PaymentRepository extends ReactiveCrudRepository { } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/ProductRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/ProductRepository.java index ec11c5a..06afad6 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/ProductRepository.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/ProductRepository.java @@ -1,12 +1,11 @@ package com.order.perf.domain.repository; -import com.order.perf.domain.Order; import com.order.perf.domain.Product; -import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.reactive.ReactiveCrudRepository; +import reactor.core.publisher.Flux; -import java.util.List; +public interface ProductRepository extends ReactiveCrudRepository { -public interface ProductRepository extends JpaRepository { + Flux findAllById(Long orderId); - List findByOrder(final Order order); } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/RefundRepository.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/RefundRepository.java index 706344c..b4276d9 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/RefundRepository.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/domain/repository/RefundRepository.java @@ -1,7 +1,7 @@ package com.order.perf.domain.repository; import com.order.perf.domain.Refund; -import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.reactive.ReactiveCrudRepository; -public interface RefundRepository extends JpaRepository { +public interface RefundRepository extends ReactiveCrudRepository { } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/OrderItemResponse.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/OrderItemResponse.java index 3a39fde..41d318d 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/OrderItemResponse.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/OrderItemResponse.java @@ -32,7 +32,7 @@ public static OrderItemResponse from(final Order order) { return OrderItemResponse.builder() .orderId(order.getId()) .orderNumber(order.getOrderNumber()) - .orderStatus(order.getOrderStatus()) + .orderStatus(OrderStatus.valueOf(order.getOrderStatus())) .createdAt(order.getCreatedAt()) .updatedAt(order.getUpdatedAt()) .build(); diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/RefundDetailsDto.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/RefundDetailsDto.java index 7e61e4a..1d81bda 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/RefundDetailsDto.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/dto/RefundDetailsDto.java @@ -26,7 +26,7 @@ public RefundDetailsDto(final RefundMethodName refundMethodName, final int refun public static RefundDetailsDto from(final Refund refund) { return RefundDetailsDto.builder() - .refundMethodName(refund.getRefundMethodName()) + .refundMethodName(RefundMethodName.fromString(refund.getRefundMethodName())) .refundAmount(refund.getRefundAmount()) .refundStatus(RefundStatus.PENDING) .build(); diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderController.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderController.java deleted file mode 100644 index 501d55d..0000000 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.order.perf.presentation; - -import com.order.perf.application.dto.OrderDetailsResponse; -import com.order.perf.application.OrderService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@Slf4j -public class OrderController { - - private final OrderService orderService; - - public OrderController(final OrderService orderService) { - this.orderService = orderService; - } - - @GetMapping(path = "/api/orders/{id}") - public ResponseEntity findByOrderDetail(@PathVariable final Long id) { - OrderDetailsResponse response = orderService.findOrderDetails(id); - return new ResponseEntity<>(response, HttpStatus.OK); - } -} \ No newline at end of file diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderHandler.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderHandler.java new file mode 100644 index 0000000..992b2f3 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderHandler.java @@ -0,0 +1,28 @@ +package com.order.perf.presentation; + +import com.order.perf.application.OrderService; +import com.order.perf.application.dto.OrderDetailsResponse; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Mono; + +@Component +public class OrderHandler { + + private final OrderService orderService; + + public OrderHandler(final OrderService orderService) { + this.orderService = orderService; + } + + public Mono findByOrderDetail(ServerRequest request) { + return orderService.findOrderDetailsWithCache(Long.valueOf(request.pathVariable("id"))) + .flatMap(response -> ServerResponse.ok() + .contentType(MediaType.APPLICATION_JSON) + .bodyValue(response)) + .switchIfEmpty(ServerResponse.notFound().build()); + } + +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderRouter.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderRouter.java new file mode 100644 index 0000000..94a8923 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/presentation/OrderRouter.java @@ -0,0 +1,21 @@ +package com.order.perf.presentation; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.ServerResponse; + +import static org.springframework.web.reactive.function.server.RequestPredicates.accept; +import static org.springframework.web.reactive.function.server.RouterFunctions.route; + +@Configuration +public class OrderRouter { + + @Bean + public RouterFunction orderRoutes(OrderHandler orderHandler) { + return route() + .GET("/api/orders/{id}", accept(MediaType.APPLICATION_JSON), orderHandler::findByOrderDetail) + .build(); + } +} diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml index 0b52621..af55b7d 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml @@ -1,22 +1,28 @@ spring: application: name: spurt-test - datasource: - url: 'jdbc:h2:mem:order_perf;MODE=MYSQL' # H2를 MySQL 모드로 설정 - username: 'user' - password: '' - driver-class-name: org.h2.Driver - defer-datasource-initialization: true - jpa: - hibernate: - ddl-auto: none - properties: - hibernate: - format_sql: true - show_sql: true + r2dbc: + url: 'r2dbc:h2:file:///~/order_perf?MODE=MYSQL&DB_CLOSE_DELAY=-1&DB_CLOSE_ON_EXIT=FALSE' + username: sa + password: +# datasource: +# url: 'jdbc:h2:mem:order_perf' # H2를 MySQL 모드로 설정 +# username: 'user' +# password: '' +# driver-class-name: org.h2.Driver +# jpa: +# hibernate: +# ddl-auto: none +# properties: +# hibernate: +# format_sql: true +# show_sql: true sql: init: - mode: ALWAYS # 데이터베이스 초기화 시 data.sql을 항상 실행 +# platform: h2 + mode: always # 데이터베이스 초기화 시 data.sql을 항상 실행 + schema-locations: classpath*:/schema.sql + data-locations: classpath*:/data.sql h2: console: enabled: true @@ -50,5 +56,9 @@ management: application: ${spring.application.name} logging: level: - org.springframework.data.redis: DEBUG - io.lettuce.core: DEBUG \ No newline at end of file +# org.springframework.data.redis: DEBUG + org.springframework.data.redis.connection: DEBUG +# io.lettuce.core: DEBUG + reactor.netty: INFO +# root: DEBUG +# org.springframework.web: DEBUG diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/data.sql b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/data.sql index b6ea70f..2630ba0 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/data.sql +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/data.sql @@ -41,7 +41,7 @@ VALUES (10, 'BILLING_NAVER_PAY', '네이버', 5600, NOW(), NOW()); -- 배송 데이터 삽입 -INSERT INTO DELIVERYS (delivery_id, recipient_name, mobile, address, zip_code, store_password, delivery_memo, created_at, updated_at) +INSERT INTO DELIVERIES (delivery_id, recipient_name, mobile, address, zip_code, store_password, delivery_memo, created_at, updated_at) VALUES (1, '팬시', '010-1234-5678', '서울특별시 강남구', '13579', 'qwer1234', '문 앞에 놔주세요', NOW(), NOW()), (2, '민지', '010-1111-2222', '서울특별시 송파구', '54321', 'asdf5678', '경비실에 맡겨주세요', NOW(), NOW()), diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/schema.sql b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/schema.sql index f72ea96..9a5cff6 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/schema.sql +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/schema.sql @@ -1,3 +1,10 @@ +DROP TABLE IF EXISTS PRODUCTS; +DROP TABLE IF EXISTS REFUNDS; +DROP TABLE IF EXISTS PAYMENTS; +DROP TABLE IF EXISTS DELIVERIES; +DROP TABLE IF EXISTS DELIVERYS; +DROP TABLE IF EXISTS ORDERS; + -- 주문 테이블 생성 CREATE TABLE ORDERS ( order_id BIGINT AUTO_INCREMENT PRIMARY KEY, @@ -35,7 +42,7 @@ CREATE TABLE PAYMENTS ( ); -- 배송 테이블 생성 -CREATE TABLE DELIVERYS ( +CREATE TABLE DELIVERIES ( delivery_id BIGINT AUTO_INCREMENT PRIMARY KEY, recipient_name VARCHAR(255) NOT NULL, mobile VARCHAR(20) NOT NULL, diff --git a/playground/itschrisjang/week2/.gradle/8.10.2/checksums/checksums.lock b/playground/itschrisjang/week2/.gradle/8.10.2/checksums/checksums.lock index 800a8409060b4c16829fb2225f235142c50e5884..fa6e4f19ead5526c7bd9ef0e093e244e1f2110f2 100644 GIT binary patch literal 17 TcmZQxcJ%JrTaTA~WPkzyP3Q(o literal 39 qcmZQxcJ%JrTaTA~WPk!@28IvK$wn*xNuQo}n}OBB*woUDfdK$CgAHf^ diff --git a/playground/itschrisjang/week2/.gradle/8.10.2/fileHashes/fileHashes.lock b/playground/itschrisjang/week2/.gradle/8.10.2/fileHashes/fileHashes.lock index c2e77972514cb68ee6e5745277502e45c0877323..a59ef6f26a451b65807d062c48fb985ea6406600 100644 GIT binary patch literal 17 UcmZSnWWN7X&B+2y1_ Date: Tue, 19 Nov 2024 16:23:57 +0900 Subject: [PATCH 5/8] =?UTF-8?q?week3(=EC=A4=80=ED=99=98):=20=EB=AA=A8?= =?UTF-8?q?=EB=8B=88=ED=84=B0=EB=A7=81=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EB=A0=88=EB=94=94=EC=8A=A4=20TLS=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/perf/JavaSpringbootOrderPerfOptimizerApplication.java | 2 ++ .../src/main/java/com/order/perf/config/RedisConfig.java | 2 +- .../src/main/resources/application.yml | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java index ea221e1..7ebd484 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/JavaSpringbootOrderPerfOptimizerApplication.java @@ -4,12 +4,14 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.data.r2dbc.config.EnableR2dbcAuditing; +import reactor.core.scheduler.Schedulers; @SpringBootApplication @EnableR2dbcAuditing public class JavaSpringbootOrderPerfOptimizerApplication { public static void main(String[] args) { + Schedulers.enableMetrics(); SpringApplication.run(JavaSpringbootOrderPerfOptimizerApplication.class, args); } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java index d35404f..4c5b6af 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/config/RedisConfig.java @@ -67,7 +67,7 @@ public RedisTemplate redisTemplate() { @Bean public org.springframework.data.redis.cache.RedisCacheConfiguration redisCacheConfiguration() { return org.springframework.data.redis.cache.RedisCacheConfiguration.defaultCacheConfig() - .entryTtl(Duration.ofSeconds(30)) // 캐시 만료 시간: 30초 + .entryTtl(Duration.ofMinutes(2)) // 캐시 만료 시간: 120초 .serializeValuesWith(org.springframework.data.redis.serializer.RedisSerializationContext.SerializationPair .fromSerializer(new GenericJackson2JsonRedisSerializer())); } diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml index af55b7d..a59bd5a 100644 --- a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/resources/application.yml @@ -54,6 +54,8 @@ management: metrics: tags: application: ${spring.application.name} + enable: + all: true logging: level: # org.springframework.data.redis: DEBUG From 443f6a4e5b85e35fb0a45554db60ab46c5d16389 Mon Sep 17 00:00:00 2001 From: JUNHWAN JANG Date: Tue, 19 Nov 2024 17:34:46 +0900 Subject: [PATCH 6/8] =?UTF-8?q?week3(=EC=A4=80=ED=99=98):=20webflux=20?= =?UTF-8?q?=EB=AA=A8=EB=8B=88=ED=84=B0=EB=A7=81=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A9=94=ED=8A=B8=EB=A6=AD=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- activity/week3/itschrisjang/README.md | 82 ++++++++++++++++-- .../average_api_response_time_webflux.png | Bin 0 -> 138420 bytes .../image/redis_monitoring_webflux.png | Bin 0 -> 146746 bytes .../perf/filter/LatencyMetricFilter.java | 31 +++++++ .../week3/itschrisjang/k6/script/script.js | 27 +++--- 5 files changed, 120 insertions(+), 20 deletions(-) create mode 100644 activity/week3/itschrisjang/image/average_api_response_time_webflux.png create mode 100644 activity/week3/itschrisjang/image/redis_monitoring_webflux.png create mode 100644 activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/filter/LatencyMetricFilter.java diff --git a/activity/week3/itschrisjang/README.md b/activity/week3/itschrisjang/README.md index 1446cfa..18ee332 100644 --- a/activity/week3/itschrisjang/README.md +++ b/activity/week3/itschrisjang/README.md @@ -33,6 +33,10 @@ --- ## 3. 주요 결과 +### 3.1. MVC +![average_api_response_time](./image/average_api_response_time.png) + +![redis_monitoring](./image/redis_monitoring.png) ### 요청 처리 성능 - **총 요청 수**: 32,442건 - **성공 요청 수**: 32,424건 (99.95%) @@ -91,10 +95,77 @@ - **최소 VUs**: 1 - **최대 VUs**: 50 +### 3.2. WEBFLUX +![average_api_response_time_webflux](./image/average_api_response_time_webflux.png) + +![redis_monitoring_webflux](./image/redis_monitoring_webflux.png) +- **시나리오:** 초당 1,000 요청(`constant_rps` executor) +- **테스트 기간:** 1분 (`duration: 1m0s`) +- **최대 VUs:** 100 +- **요청 성공률:** **100%** (59851건 중 실패 없음) +- **총 요청 수:** **59,851** +- **평균 요청 응답 시간(`http_req_duration`):** **1.05ms** +- **데이터 전송량:** + - **수신(`data_received`):** 35 MB + - **송신(`data_sent`):** 5.5 MB + +--- + +#### 3.2.1. 핵심 지표 +| **지표** | **평균값** | **최소값** | **최댓값** | **P90** | **P95** | +|-----------------------------|------------|------------|----------------|--------------|--------------| +| **응답 시간(`http_req_duration`)** | 1.05ms | 254µs | 172.64ms | 1.44ms | 2.1ms | +| **요청 대기 시간(`http_req_waiting`)** | 1.01ms | 231µs | 172.39ms | 1.4ms | 2.05ms | +| **요청 블로킹 시간(`http_req_blocked`)** | 5.08µs | 0s | 14.64ms | 6µs | 7µs | +| **데이터 수신 시간(`http_req_receiving`)** | 26.68µs | 4µs | 8.59ms | 44µs | 53µs | +| **데이터 송신 시간(`http_req_sending`)** | 13.33µs | 1µs | 9.12ms | 20µs | 23µs | + +--- + +#### 3.2.2 성공률 +- **성공:** 100% (59,851 요청 중 0 실패) +- **Dropped Iterations:** 149건 (약 2.48%의 요청이 예상보다 높은 부하로 인해 처리되지 못함) + --- -## 4. 관찰 결과 +#### 3.2.3. 로드 분포 +- **초당 요청 수(TPS):** 997.48/s +- **최대 활성 VUs(`vus_max`):** 49명 +- **평균 요청 시간:** 1.05ms +--- + +#### 3.2.4. 문제점 및 개선 사항 +1. **Dropped Iterations** (149건, 약 2.48%): + - 일부 요청이 높은 부하로 인해 처리되지 못했음을 나타냅니다. + - 원인 분석: + - 서버의 연결 처리 제한 또는 네트워크 병목. + - Redis, DB 등의 종속 서비스 응답 시간이 증가할 가능성. + - **해결 방안:** + - 서버의 연결 풀 크기 증가. + - 종속 서비스(DB, Redis 등)의 성능 모니터링 및 최적화. + - 백엔드 처리 시간 최적화. + +2. **응답 시간 분포:** + - `P95` 기준 2.1ms, `P90` 기준 1.44ms로, 대부분의 요청이 빠르게 처리. + - 일부 요청은 최대 172ms로 처리되며, 이는 특정 서비스 병목이나 스파이크 부하로 인한 결과일 가능성이 있음. + - **해결 방안:** + - API 처리 시간을 줄이기 위한 DB 쿼리 최적화 및 캐싱 적용 검토. + - 스파이크 부하를 위한 Auto-scaling 정책 적용 검토. + +3. **Dropped Iterations가 일정 수준 이상 지속될 경우:** + - `maxVUs`를 늘려 요청 처리 한도를 높이거나, 부하 테스트 스케줄을 수정해 점진적인 부하 증가를 테스트. + +--- + +#### 3.2.5. 결론 +- 서버는 **초당 1,000 요청(TPS)**을 안정적으로 처리하며, 성공률 100%를 기록. +- 일부 `Dropped Iterations`와 요청 지연은 고부하 상황에서의 병목현상 가능성을 시사. +- 종합적으로 성능은 양호하며, 향후 병목 지점(DB, 네트워크 등)을 정밀 모니터링하고 최적화 작업을 진행하면 더 나은 성능을 기대할 수 있습니다. + +--- + +#### 3.2.6. 관찰 결과 1. **타임아웃 오류**: - 총 **82건의 요청이 `i/o timeout`** 으로 실패. - 서버의 동시 연결 처리 능력 부족 또는 네트워크 지연 문제가 원인일 가능성. @@ -110,7 +181,7 @@ --- -## 5. 문제점 분석 +#### 3.2.7. 문제점 분석 ### `dial: i/o timeout` 오류 - **오류 원인**: @@ -134,7 +205,7 @@ --- -## 6. 해결 방안 +#### 3.2.8. 해결 방안 ### 6.1. 확인 사항 - `localhost:8080` 서버가 테스트 중 정상적으로 실행되었는지 확인. @@ -142,11 +213,6 @@ --- -## 7. 모니터링 결과 -![average_api_response_time](./image/average_api_response_time.png) - -![redis_monitoring](./image/redis_monitoring.png) - --- ## 8. 결론 diff --git a/activity/week3/itschrisjang/image/average_api_response_time_webflux.png b/activity/week3/itschrisjang/image/average_api_response_time_webflux.png new file mode 100644 index 0000000000000000000000000000000000000000..ce6e28590504e47b1139e94ecb233e522abeb733 GIT binary patch literal 138420 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 literal 0 HcmV?d00001 diff --git a/activity/week3/itschrisjang/image/redis_monitoring_webflux.png b/activity/week3/itschrisjang/image/redis_monitoring_webflux.png new file mode 100644 index 0000000000000000000000000000000000000000..e37a59f0b02122e00eac7caad2d25dc03b30d8bc GIT binary patch literal 146746 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
    T?TM{~ zF>6zF2J6WTl@s$$w>4In(7Ds)qJV+6==^gv;wGbI-p1kOstF<|&P?p=z}k)mhDFjq zMXH1ghD289yP6kKzNf7D7?hl_Zc9K&ziV!QK+QGZmD_d{`+Hx@hd#?XSjE_bI_{Mj zHV$0QuIp*zO`YTxgd0JI;#BQNk38Gy2lyalJf=Nyv{Qo=TDiR;$(C#hRP-W>(g+1f z&s+r8>>V;5U-ii%*o^O+%4^rInJNsG@vuT)UqnZIZ7K{B9l9b#-Y1>nGcuaLEUF#{ zc2CiTx##5zSz94IchrEQd83YgLjJoV&%-m&M}40pil}3tx<$@w9h7M5p0^SK?W5t9 z!6mrC^6AnIc4iIM(5=M*DKW8+3RA7zXxC3Q%c#=C8dfNyWAz8n(TXjsxcvO8C#^*E zc!%AiN00m$G*wh+)zsAd1AN!9vZ@Bm?hJBYT{N{T6c#TCNY-QYi{Bz!*di?6*Bs66 zRLaul>uY>!=HVkAFP;%_op+HlY~ebaW5JMS;#cKWrHu6Y_I-kI*Eg~d7MlUHvOdAE z1@i*%RT(y4l}PU<24O6wc*ba zFYqpZCcW%`acAAjBwAZteP)_W%b90=19{Ti#p^RQOD;0SAU=L0B+>Tpj`!58Al7(C zjpY!pXOp~7)%_0-J;6j6NZPLmJH&SH5L)9n$^7F;4uJ0ccj(fGmvwgA81KwnXoY6+dP_?!K#8 zQ9~@;l+1BBpSGWYlMrz_XqvtYqMF+2`PP-TJym55#ZIJyeB6P5sG=W?ydnvVk)&h)(n}M6^Wj-H3>i=)Jcf$}kw+=%NilL}y5%m(hFuZTX&i&bjw~&;9?O z$1~X@W{kZ*dwte=*ZaQ9S>o%?Uonqc_0^I7rWIegyKyRqhT{L)&i;g9;77|N?vOT> zL)xZ|h>KZc>q|6C-{u()2bnpA5 z1a%2Hzyj8OTHAyx@bU-gm++gG{p{!R^5bN}N1GbU!2}D*RTlV((k6j+S1$gIC#}X- z7sutJ)r!20tJ`hLK>Qoi(I0^CwDJ6C&9EJ9iV*kiG`}?#RRZKqiAhQQfQ2j|Ln;?O zo9j+Pzl=dQx*HVKdz_$a=5jNqH!^O|0Hk_YgvDB%$mXb!9+c})(#Ka`@FLp!?F_Z6XjKB>mfSOF3J?<- zkCLS`B({I6qFpPZmA`AJ(_L}Ad>g?NU;GxM-0I=&3Z#3Ab$hGdr(KYK%F$)?pY9Fd z`yWVy9_g=b>sW2wBS11oqzvj4dOT_jxHtyJ6g~bJqY*pb;;Z857@e4yNUn(-$0kE8 zw3be(sVm2AZE=<8*_p7JaekEeY8jqFYe~WBPe7Xv&lSrLHNeiy}4YPfP%2qG3*kCp_6tyo+6{$rv3 zb({US#~?lR+-?w0g;|?IxviaL=d-X0VDdaG=yU$(<>=Y%geh{5U=vf0z{VY+e#AUC z2=1OTlm$l!>LZIk%@|BKx`i3-&vV>nn`>)t(w;aaXBX*#SW|$MDeiDR;g=A!n9pq3 zj3vZ2Euzx-yTsx~qt}jmK3!eJK>s(P^)uQB&&7g*5`HX0X2G8htziMTi-GVZx^1bg zCCZC(Tv=GoTC$$5V50}|f1P=u+cU4Ht1D=`cOtEt;ITQ0IHooRJg5|C0+%ovRZkiM zw)QZWy8|WJ0VM-W+^*hzb4HG)`9@3h_ijJT1#sNW{`Be7`N8;@4n$VOXy$8ORaC_H z05?0`JQHJMxUgE`*$3DZ$RvOs$k>Tg?J7W?& zW~l~WOn;3b=T`>LUP!X@%X^}Ro~{$Eb3k+H%w~GKDe4E4l9B}6`}o|lf$Ze5$}6}? zLf@~phEwm4+GNAONGdh>PvnoFy+%0j`TQoOy=3C`sj7UhT$3eR?k$t2$W=MZRZ7|Y zgKXMqj2KY=kifclX+4R<^kM*W=Tp|@p^Ion@ttXU)-#`B-q9z-^K8lV=sDXT@^k82FUn%=_WKmY za5|ax#C|aoUSC$DgE%Ub6$vpwdWlF&OJ|l+33xbgZ-t($^V+p7jD2<;HJUn;Gw2@@ zE?rucl!oEZz#UXx7u@^`SgI#`>(EB>U`O8sx{ znQ#-dyIN~Qr#?+o9!n%XKU)>QT{jh$a$TJSWn3Y;~PWyj7swdkArUkiTJhRkY6`I*70tJ5R>F0%BO54DHmloF!jfR4V;@fmAD zQ)l>TR>C-24qRk&?vg3!1=9$Nlpco)2V>P+`-gvOAkrWZ;EvL+wLZ$vC|~Z5(^I+H|P~npAIL| zk#Y3BuEYTI-(;2lSj$+9K=Ku;Wm8qk^piViC|F!8ZIfGKh4J~eI%Qzl*tI&N>i_{^}_s+;V`zwZC%FwyJt*cRcqrwT2 zu3TpSk8ea5j|CLpN-h0$vF~uuu41+reKN33zV7~o%gXRQXh-db=G67ITf8l#90b3b z{aYUIy zmEd1_3=PrR7`s|eq?G1uAz3RZ2sE=^8&*0)0b%x*7MO+Me_ft8lIU;pW_{1oxg848 z1@Lzmry(UH4u!~J>)WhaB&c-XmVHKxt7M&>-c(yJ=C3WD`N4BV#er)^#euvq)%a2b z_S+wI2`*>=mbdzg5Hbs*^Yi*bLPmzDb1*KD z3yY3VOym+3HH_{LxXvEqe&!pq!vhK}Qc}%$Gkt!c&dxi(LM9K<)vG7UVs284{L0dE z+EOM{H?Uw8moxmEC$4YAHlb~q;IJI#jpxT3ar^wC)rePPI8$gxY{ZM-t0F7+VW4ZC zfq0yGMSoh}z7g@zIF8`lXCY88fesTU!bj-mY8%`?Xwyj_c~~*u-X#D6`)+nQO4=zY zDB+?%Gli^P57%D!Hrmv1pgD|pyQmD-mdxfk!E{Pe!jtibtO{vop1iWc06r2&#HD{q-wVsNIhMeF z+BNZ%Zo7sv0g8{fS+mb64naH&LFRnR48*66kKOJ~^8_X>bCEU2oJyI-njetg*SH=Dxz;M3&AB z{%L8**s*Bp>9Hh{CJ|H4_B4D@2XI--+CiY$j~g8gon31e4D>NAtcg0B$8&Q~3i-;c z|3due=RL0ht=jJl%UUnvP* zFf`1)M+dZ*nV$Wc*fF)Lb{$u$K*kWMSfJ$Ul6hKPCR5K&c*&4NO>$4yiu>k$4<^5r z-d~ZL5{IuEsMs(TQxbbjlr}a0KZs99$qfTH$ENM z`Ev<*A}-Szr=dR-7~~*o*U8d^wTRz>TSl!CqK`k~mJ4a!myEkJ`IaHhoNwkig*&%d zHWi*upyBea)NiGV26eemXrs69)6`2(?r+KOQFyCv*%Pw~?mBC}vi%WHHNW6xX7V`9 zOwtd{>d^UQTvhXC>*~Qzgl4pR6coc=+38`(f9F9;4HvH?J zv&XV5AL7?*x;9C*(tb*Cdy@jlf2z#0XF*!?>QXD{jcc8p1!@^}FdL0O_O+#@k2wv2 z?f$TVU^{N$c^z+Q{AD>t&$s>TOo6rrV7%nVupscq zn|5)tkb&DmwX_krPFJKKFR7LoK3no(S!h4s!-+RJ&7!X`U+9s+yp1X;Y>c}1NfmW^ z)j_tX%EPsBV;IbHT3+#RkMTyLqv*I+!-3U>dS)^wpUo{sC+VE;ZiTe=B5x1}r{;2Q z2=LD+!lm1B{Q_e7twt?;U**MSCd;(pG+5NDASZFlf7AR=VjjW*Hvpk~?&9TJtz$wM zT&a9P0*_8z<} z$MMc;5fpux8v=b2*V0DT($dM&Q{6>9# z+<*MZ_}FNFZMH!pteS;>OpfOO)-J*VT4{wb9dZsn{ww!5eVz-{LXWu9Syjfr3CMbQ zSURK-zeVkpRJZi0f=y-I5VE1_GU;atmq24(-c`W;ZXrcjUj;>_eSCZ#9ytL)LQYt& zeSBOFUaB<}OP6)KYur=fGp!$spYvVVyexv$B5lIV<1%LI9dG8ExiMgFTFHqkCFS+B z?}4>>jAC;8=Gc~Gl@!c^UaAHJU0dyf>Vx2^y~MxnMKE2Zn@e&5?Tqoc+LqN&>t2cj zn9XW|y{eMERs*&$AS;RtEmV5x;`gyYC=MxQXggFd(@(uY!ZwYglYyqI&IGfIj=V4C zz|{KYP8R~v1I@qpO(=7KQF_5I1~GPT$-mK$*x3u`zf<0Nx%!3JFL%|6-F}E&LLH}&zbt6;1ahKns3(ddo>5lwh;m`2 zW_Mr^kLfO#%3~(Dwhluphh1{}>4{!DYUd(8KKDFA>*Kx4tf{U2aAcpMoDWz-ivRz> z-Z{BR;WVt0xnHne-51YhjVWLUt@?e@Tg|LLjc=FrWgn0GwAzTIyI3gAC0O>kwz8T)knG zzW)L}g2I{FCEXce#?x&7^?yMxSSl^R*7rgjw|iu#pZ<_`Oc6g+kJnlyfb_0cz|eH@ z9}^eD7|JtWSdx8oz)qaQNC0Jsh{dAaXkvf={+*bblv}V?5L`b}@qk2H-%1g|Z+5Y87=&;E8p^W)rTL#fGqH#%*dFCnQ@VS({A!kBSoaI*P zy(k9r`Q~YuHtX{E_%-!!7IrVrPa;MbPP{n8X@prE<$Mt=u_nBc1 zv(^++{so8I6rOOekuet#GGu!#%AgRtZ9QJCnTP1fF|SB(aGAq9u>-{g%-P_!SU zyr?h@P+d6O`aWQC0km7RqTLD`8j7z;pwOVLOs*6QIW`3CDe3rX>UA6}+ zO@2ym-CPixsMV3T<^0$P*--J8B=6XZ15|AnkB-VUt;)TW^KkE zJaO~F`TdO_;AijQB8t|r&)|OLaFJd&^nE{76aUV8o)|3a_uQ5GY2a^Y2>8+V9_-;c zve4_b#6t0>eHJ7w6+P!4?sBtQ0TeJxvZgHnCS(e|FKfdW^dgpWdaA@^w-ox-XTvO3h1j{c zio?d?US^`_#q6U{P-dA?i)^k8Vy+g1jlIvTQ0~ad!7<3swt-JBsFzeFE{NPezg+B9 zi)F-@R=_^Y)XYZJFR)El+r-$<)yy}4kOm{zSG?mmVnXp|huMA$In9r($-7@Y2;OB* zy)0Xao(YW11kW@IxUXU9esPLBDvhn*%%IY(3GyiZ06?>ST8gT1KwGmA=iYt9HZl!n zJMIcn<$Lyp$}hgrGoMLWVGZpr8&Te&7cQnoDjOyhpI)8A0>^B$<5CL{_P&DyBfjhnqw#4h)(-rl2s2DFc16hl|*B zy8@r_(CYB+;-E)!8$vci$U)~7Y9gcT?n{5Nq^OuEdA5S#(Lv zQJ}X?r766$2x)_C4#UEbn2alrh%H~BX(u#7h%^j%~SIS8O^Dn=t?8`^2Qb35Qf|rH3 znh)HA+IicqUy+OoN1zUVEyte=0(pg6m%HWWo}GI|shhM{e6LThztFbN`rtkwJF6BW zoE+^8IVkX!sS-uUIg#mq6~r-=vfiMVyN^F$Z1OOF+=xtBBr*eF?8MQ6Gg;a$1weq= ziF@^~)iT2BOHSE2=EalLOJ|hqym?;qg`U=TsZAH>DoV!p-v+Dv1EYcy@WqvPAd<`V z(`|hxKic?lo>qpJw(%JK5}EqaaS)Ca5piyR)k2Fa6!Ee3bl<{)+k2+OhSG307v~j& z71d#{;8w|{d?$JMrf4cIqdAp3IJ$qbJC9PR%uPJSpvk^!kLRatYo+W?!uAR=KE|guf(REjfzcY;~%!kY!r3T^LGxGQfssE*g4gT25L{ zNpih1pP55U85o>r&$azC{!#Lr@mRb|Er)K^D>_h;NUw(Iw1L;+^88$5btDW28nzd| z4Gd#XZnZs1EqV02a-{n`x@JZid7=Q<09^y%m&3j z^JZ!n98p{j{Dj!UN^x;owsXNdG;*st`qTM zFLm?e{?j5F9IhjW-tf85?b*#I7{4OgdY(PSFjXE=wAuhazPo4(7&II1cDhuqyAXP* zaJdIVz;kX@-gg9&8ct}49xUdzLCyOzSpNjT84CN*I6iza>E7@$A<>j6XtwUw3Xb!n zJz3a=xCEoY0fmI|4AO3KanWIMThvp^qf0$Y4q)-6W9jp^QPqwtM;jq z>n~!cEKK4%nYoW`LSXby+`1_C;3rg4ITdp+N{=juA+v909#LtAQ`!2mTELi$Qo)&0t}WaSmsC7CLC ziWTnyw~L#4?yI`Uo7a*=TL~Lbr;UgA&v3Y&9Z@%GL5*~Sh{s{coe}eZYGToq@&YDH zFKW@_uIoseP8KlWzIUfgy$Uq-?rt!^)C=1@d0jgXdd;QkR|pNzKR z>_B0a$7LlYLI`Xw?04M)LzraiC|#GJ5E@O~MU!q{DxNGi9SZBCd!w%}o&T(rcHAQc z$`L8fwPW|Y3D4NjcF88C=Gn&lN(PO#o%3)z1OfBHdVSX8$@0;fs;Y|(+i_8YoQ{<+ zJ4&dS#Te|YegQ0GA^(X7OSX9YDi_rgo)dURZ_xKRX|uwGkZ0`ICmQIFsv^l|XPJ(m zy{N@pn?<@M^hFAjdQ+dXBkQ}QCi-2R&$4~P!aw|Lr+kGpSj@QyFS-pwUjwFeorP11 zbyC(m4>0V7&B?+RqYo$yW@eFga(hy$Ay7`GU;O_nTmD(ty(vV`{rVnex81y8`Ne4N zx4bBcRm<4X>hQ+#L%(JDg+&Sij|eH=ngZ_Sv)tL^=(~Is+UH4b!UlJ|xj^pjq*9St4{Ai8km7FNt+N z^1CkGjnB@ePePCmn(K-fBsEVBd)FIj!Z$NCt+5JqedN>Z=WD*R6`G@bh774At+-7a zI>rUiOko`xl*(oX^@%j?iO=Me$tv|4!aWm6LG8EK8 zNWY*7W{{Z<+PBpq`al-q>B8cIb%UuQaOp7BVEP3Dx7_l<>Gm9^X^E2UY{LJJZqPZ| zuM$@kt)a6iSwJaa*?>D1;PuP&G4#6&xB7@=gx}^h^nh%zWCv59+|#Dx_cYkvIf*qf z+Pq3B*OHJonZFe^CW&Y}-DjjI@{1s#;``b#82Xud;bA6*!+FoY*) z3Dasj^*iQcm20i0VyuZ(gYb9VIL^zC!U_f+c;my#?Jgr=st-vg@8#W&rt@`vekL6ja~6%c?w^o%dL*asN;0(gO2wor8)3#2 z9TXcTBM>>}LP&-D#>^K}nZethk0k;7Io&;Og62kHC$+e3igSird%;KA6pQ55v>m zG|`RZ9=~!m@5jcVIu`km#B}_F8ejld^N!mi7n~M*JOuOtEtsVcveZAZ@vs|&&IK@% zO`;~ zyKvM@x*8P91D1u>Tf3$b$Q_3R_4UVN*>`&)M%b<}RRT=B>?X?vaKtJnZH#rDe~KKh zJeRgd8r8RV#r41AOO~!-j1`#DTE^#D6<+WB0Az3wzg=94^5m0PIkum86JUt-Z(T~ z-Q=l2tuAt{qm6Gma)LdUO{w&>S zbLJ=t)FQX+oz3ykJOm(D^dgwaKn{sdDu+x9T_12-Zgn*)m3sxA?ol4ZJ2V?T#n-ZX z$!3=q{-JD}okz$OGlVzs@f71D~d6JZPLXben?UMjW}GvBP~hrYo) zJntYbY~N77WkYoHeTxI#8bm5|IsFWpx<(IxDKq?z#lPbBQp^I!cKkL@U_2us4=Xcw zim-9Gvfp)*>Ge;^ktH8h4p9r*Mw)=9kF4o2xi-y-@Ur!!Wwg*C?!7-9?VVN0N*C_2 z2UCt`aVDZzsRGj}XyF_4;L68ne$B<9&A(?tJxM3t#L$*+-y2O9A3Zv5WJL8!nA?db$dU zzxFE=R(Lw^t3B*F4)~`oli%TtER(}Fl}8_tEuQr}w$%|h69G)67DYVX6K)i~hZ_!h z5>1gcqNxQCFJAbPZHrO?LSI`t4giEU(48BAxi%PhuFZ%0Pw<8UDw`ZcH~JPM#aUHH z2`feS3dzhY9Hk7XBOeUxxLFHQgi((7vt~Q$Im!}Uo>Sh$0Yk9}0F)$wF7ig@ufBl! z-20!pSzFCE8lIM`l6MzeUmiEFD*id%aeKK9kXX=KmkYK4s*cH&haSdov;(wUC}GUw z4eqg>F2?;}KeWm_UCN#fE*N408h?xlsCy z%JWcJazBON-TaB20lJR$>!QD+Ywc1T6(;s*aCWlkW&va3r>o9nWU{9l5HuAS6Nvn7 zgcnzQyI>;pQI6)<*R)80{agCFsG-9ne2@b1c#=!jdc`xJ??e2(M={~S#P_zpmp71m z5N%BnRDShpz7HEu7t35CK=phk>N5#Jv;%V3do01mN4^ehkR%0l`hi$uZ&vb=z{=s37;qQDVF~Z!AlYVRr0yb3mEjIigU$0%k*U!?_yW5H zoh6$AF5_D&cmL?1jDs&L#1qxg5CB(e{IKYMpT-P86;gwzy7PvO1zwp0Dd&kxg%_ET zNuJ*ch+tz08s?I5xF47u_jW-oDM3R_Zb)*K_-ysZO>qT|P+=GjIeOXXRd3huT9=vG z+2N0qrKtLAyXXba%@*Gu)J!*iM`ld|-tkRO$?3e1ZuwOcwGmxiC;2ztL#pUSC1|Ie z2Nfe>6RKyk3p?YI?5`abRfEj0%^I4WAIJ|{t_D=ZQcwG6wAW`QO75J+{W-qKOcaM5 zWWRF~W%mPUSY)0+>u{l0ZTUm|qfc~fy}5(W+MUohgA?(tl^Wwj0Y zkee)vg*Cb5<3}xK{s^7fk=b*b++I11f*+uB;!k{zW$()+H5rIy4!#(rmz*Q)`T86J ztJk|Z?*2vP!O)@s?Z9?L8R#KJKSxHwKUHs#AaXo#T>`e@q3KV?{M9k~=VN*HyG0choKQ}y_YikI z-&KvtvlI68%pbz5b3;DCSF^fEQ2oLInH_W=ZdU{mYfz!Jb%|Df0da(qPt`u$$u2ED zZV7~mV-7vAd!gR}%7h%|c@FA_zKJPXb#{b<+C++QmKUg>`^67XSM~_JqwQAKehElT1; z`9BV@h|stl^D%{XwC`cz$Ej1=N#>W+5CJI*7v{v|F82XC=KVA|v2-pd)MA;y-(KT?UhIEA z$dk?OCT)T~t}`sR5_U9UJv;L$jg3mc8G@@SL{oA1_p=KaaNFMc`I8kN@sL1)+MH44 z#Ec0L*YFi}_8dh#8WvtyT>Q<<%c}?swFlZ%?cJfh&eOPFqU!+{X*JV^aArkP1W?w* zbp@hk>Yq^dh*M#oRlG5Fb#?8Vd_uzc!gKxvdpa)b1l@l?Y5JD1dVAbFtkeiFR3Drs zC%{%E+hkyz6>KT{FxMT_A8RJR*5jbHK#TuXTNuV^e6CvJIg2e*J@U zdC)jc%l=UeU`!_iwYGQ(%X-(f-K3{{lt7UGX9Qe+n)VyfuyOn=_7QT%&{|FkaPLd05r+? z+CAoLFKh7;O02q``*;uu^Uw}JDMU-OH<&5-HmHJEk&{c!ZoF~gj&O}8uO0R$;543$ zG1tielUn}^WQr@I-v)6vzb8GwZQ*8D4bXZCD}&$-=gM1G@5!)#9ly*2M&xpEaAan5 zF3=Fti4)LGGtrAv^3hPS0LP6=vS7!bPl@C`)$X`HRP+4r$KHhU;9KRltf$Z`@6^Ac zMx&{=J7FVPb9@biN+4Dr8V|tQoO7?0l$C`Z6-oZ-U1n zEn=Z<=u!#9wVLkFT2jVldj2S})Xv)sn|@OXfzOHs-FshL*eX0>KS zSDkHk=;`U{Bh-R(Vu~hwMFIs+e&KbL6qpEJzcT)U-o`VL}_wZg95S;}&V+9FS9LQ})Q!l(;$>E_t@h9Tx^@hq7~`T8QqYZ<_V z`B$$_gWrzk`&B$*@1oXbTOFyWxZ08Pxf+it(8zJuwsv=qygb`(!`^Ti1`(uLWQl!w zOTCaFY<8g|<$Yq;c)XEe|D)-*HL>{BWQ#EYBQF5WZjt=hEn>_F<=+nUF(NpzDT(lC z*6VV(bY;B<*vEY`Q|P(lbNQW2r-XKqhja0t%7b(|nGnZ^@6f2JA3o%CaIY{A#8jn1 z0aXQDBF|Yub4xa_oEwB`b|C>sC1&azj2r=OLLtzM;(_e&3|WN|icPf!_uAFIeFrI{APU9)sy_2cJ`RsjK{$^pidj^qUQHYGP1GommM4uLn zUk^q^R0rZe=oYGfo`uHj6(=$u6qtKj``j#SQFLz4gKTw5&+9}R@C;cEU)s^s`F48d zcXpmJoIbAFeA(kc4RQM_r(ynZW~TjF z7cFnng7wYo-&<406x0J%kO;V47jz-h$8b3)_`t)uyYbwe`NrFfs3oN(sTWEUULO(s zp2VR}Hu1UO+C48H)J&K}HlKV`o}6M|qJ>8MP4j-UiF^Os_=F7ZlR3kp=9X1x8)Af> zkx5!wV^gQTYgSEop8mU-e(Og1!E#|rPF#O)CLO5BT|2~Su?E_Zr@9KT2*cu1rrU02 z=n!dX-S;Qe+ zHi-cCaR+*e^cYt2ZIgV?pI8DY+5Y+} zExFZ5T2YQ!Jxpu06fWR}5Z`HmCS->?CSu}~bFprG?dNa4Ug7kGf?cP+=2H=r0wTj>oHZI^U7WJ38R$fBAE(BOP-okGqJ*RyzvvR#v9 zXgCm@mNQ;v2w*%9<@k{@NGmI`VL0oh-Z78QLHSL|oWj7g4T!E~3`IebeyeYv5WlfO zI7>ZXaqRNwqR$Xl3KC6WR_OVRX1l2frC# z+lAer_|2S3fgMmvHO*z!sw}UME1cNY%px0Bcz99=sRoWGQ@w7%sJ<%&iV$xttvvtJ zz1bD;hJmL@jL&tGwPYOJnRbWnUdPfZTktQD6;ZQlhoi>MgvKEFY9MgKH_st80Nr|a zzM#L;B(#NuWJw5KQfbS@j=WX4JssBc#t(Uk&O4stvq7pG=`OfB*BTHp=RP2~lC~01 z`+m08uBg#03COnQe5x^qGrdi3tY=d8fs$76gx^5LT>aCc-2{}R+1UvYcDhAlXE_1- zFl9rZG*J|FJ+k5;=xXrE;R-k9a-BF-_>nPm!+Dnb1o0u5CA~>>sKl}Pm%5V5ru{yR z-{42r@g(8Yr=+CIuB(#52*5kfMCfiNAT0CAuPKE><9Lg}Too?S8{a;{_IIv`^&-EvzkPWK@iOTXHr3VUZZ-L#^b zk9*pdAtgD={n?Tn_2VzUxEhqee)2T$&fWCm37hiVyN?@B32oB_CIjJNO7PBsC-H7M z?hP9UK+;(83}gyk7OkHQg-Chy;yfzUY+_V<_N;ZzbM@$GxXTme!h93`Hfxy(NAmh4 z@J2uh+IX%Yx>CFtWwL7LBfQ`nMe=B6fSon#?Yvwrji8|5{$+$lpT?6`FNyNA>s7z& zFN^X7jMcoYhZ+ezjRDcF+Yf%!dqm&Vhh-uVwbMX!mJ?<74xl0veALw9cLYoxTdYxYfk>BttCp;Kha6t> z%ZcZywjLdCq8~_oU}T}@w#oE_o&mjF?6U*2^tx~_-I$*-W_T6D^$XV(&3iMfFqwsE z$?GMvsBYHqn9SKWcr02DS6-wS8?Xl8Mc)f31f6^7_ zi$prE2!0m}8$uxLok8Z8)o`0vWnaa!qf19xP(#w;oZz)PVK* zxl#LF{XWW*=<2#wJS^z9W3R3b3t7-uAV3xJS=~t4@?a&(_3(Qy4oyvF*Ux8Nz&Nc3 zfa2`^xis6_?#t;ta+YWLicxMuP(;K)L59@aaF)0+ZJik8{l@DjS~9W?>lC7{HG?_Q zy{cb_ek^1|`frLEGtI-H9^i z{%-xW2d9Xnfk@bjzpi={>}gg(1jepxM|{;dL_b{{cNQ+@HCy)$=KBp>^m5l?X;-P& zps3eAuo5t;T8t6z{tAzPNI%2!Z~P70w7j`e7@!YR6+k@Gd7w)0 zGTZo2UL!<36wohkohv0+B;^@&sxU+>j27akJvFV%_USoW@ine_lbwBYr=t^p^{4W- z9B8FXs6BoMrUFd@(8&!mCI%i&n6Tp(y68&kqSe)Tt%pGA!*fRb9Q#tQvAACBYrs^Q zC#@;`euPyh{&bOd{S0B*@T=7mAEI3pX#+BS z8sWa*l%LG2>7BXaZ}$j#xeTp7SaAxB^pW&COa?5oddp_a8s0!7$*TfeB4m2&LN`-a zE9@q;8*x_m@ULj?!O6Ixi>YBv;%3#^LwIwNH}HsR?_WQVS7V^eMNx(;@wvD!g&tZV z3J0W3uYyC8^i2Yy{dd0`BjD;)=-q52E&3)NP?G>;$f#WJ6krTeuJ|#;b`|6u-GKj#Q zz`-E?NxL2!N9jPd%Mag!Ehp-oTxj*q`9YL|&)txx+4Sb5UO#Ae5(%Vz6^BG`o*TCK zrkzDeL@%4%^r~QBb2s0UX~eS0ej>jzc%`PP!B#vZbs_?Kaq=nCcRx*me~0~{o50mD zRDyH<><84Oz-?TQ&9q8{ECMIn@7IIs7sSe$)iv`KmpeWkCK%>`$(F*i>+#7PgcP96Ax>Hh*Zw*UP)=l9w>AO%u3JuUkoLJM+|k>Uw{q%LDeYPR?ax&M{I;c)`71 z^~NQg!UAYnDUlV=*=UY~y!cn7+~zS@)4NHdCxMmMeuS?ujQEX(HfsKZ5OG)G8Sg5S^>~EeficeR%luPVQ zwOQ5};R6h#u1sN)YaABwn!ve+2d*Qha=JnFh96Nlo>wqldFQt7HH1sqJgVX%Ir2N1 z7*^%(9594&f4Jx-Pe3=90J&4_KW;ely8A3>M&01oL}{Tg$pye-9#6rUwMtOO9XNr) zcE%y~J{^aEcV6jSGK6^vL*T^$_@Es6LAP7c-~Tgo@cL`>nhM~p!rOXjfQ^kaI1pjs z{=Jhmr*%h&r(x`Ia&%H_#rnpgxKm*J^H-g2w~A_@_m-GcN?4{PCGJ72ozMF%vqIc} z$R62bm=r2*c@bTXfRAL}<9W9yu-bC6z{h#QTKbuimyYm0-s6`Gn9wDuF{`1cuXh5y z)9w_W0Hrcql=#JT7h)^ss2fu+*g^}fN85nN|LWVS>(^to=ZmQ1?M6!}ch6KD|x zll%l8USRbOlf06~XP%yQsDqoGw&9wnuDNy>@b7K#1`qxb{`kmh`*yt0n;iISucJZJ z1Wse{!aC1KiT&LtFAF1Xz(6mwetnCG;U%_@&e11F|t6v-7n@ugFfk;p|;iw1_4%@KuMzO>X9uyB1zzi`P83js4NQvckr1 zS?`Fwr~aqkXG>q8=IPEpC8-QL4f5`;Qq^t9YI3p2S3=~RvMemu-&+j^5`p!GwV;nQ z0eZ&#R^$03Chg=|Zwi{a=UwchHfh(2J*E%tdPZaB6HZSC10ML8t3}8U>3MIW#CGJ& z0uKsJyihr1T?*^i-56+PLcP(VeQeqM(XXOIq#FXe4~VZb2O2d&;|#f`(RbU-`_F&g z(-@=ek^LRi^lJ7YiyjMn-&w8ne*1gZl~m1kQ@Il>+e4IA3xrhyIHdLERf`O4#*8xVXAIjs4|70Qv33_3a!MF|}>>SdvN+VAaG zmD+MP5x6{&u~Ylm>LbsWp5JaCYB%-PJ5%_rGY`JpTuOp}O`neIA4hcP4ZpyE8-oHZi_ zow;Tjala-&`g`<-xMNjrcSTsJz5!yE`7x2$YGy>#Z!CgD?^oS&PZLS8STmi|H$LWD z&eT+(b7GmVi>sV`4w5~A?|e~y=?ZJwXzXlw*S&=0QmdH(uMbX-1Qd9-e6_qq9M2*N@3(OUN@%T26YGhgQUk&X4s4l!p2}oY!@MHU1df7m+l|m3 zo&)dx7zddJu)#M)bjegiOaaLRHIpO=bW)aF*p zg@WjD5N9KSM_RQQ9`v~Na>GJ*d#8E}w_wYB6x)ia?Eew=&&Yb()=iJwQUGM9CUGG^oOESCnt)j=Sd%C!N*YIB?7k1rdhH!^jnF?$; z6%OwBBj0>9ce}v#Ld&o#JHn4^d5#NV0RZ@DoS(B& zBM#9a>Su4~>q|m#&G!{%T>Vg03@PZ7uy`%B$37X4wltoUOKjA%xdKq#G+xmDbjx(J z9@=&GjQqj63IwdU!{y=sW`cfn+CLB$f%a}mn4>6P$v^`ZSxuoC?=MErc;-$4c~C9p zPo6;UD~op5j($R$Rjhrv^^a%0-(nRR&b855rn@`Hv&3T-0`*8jNl&C$2cy^L6F=p)y7 z+GkO+dy-1+!A4%k*IsC<-Eqa{Yq{=(3#?CMt_5fic(mkV?JcLW-VHF~+oYnod3_x%8R@02?pv1v`$gGDaA zUKC}FmGz1J(+j}!@#Eug_C(jMDC3Hw?IxIVd`Hsx!9hzd81#siOGper%t7rnz+hH=|3dx*n9+ z*n4!Au(nbVtScLgoAF8{?{u3putYcToc^}Dd-p&ie{IA}MKrn_or58saKV_a5UX}b#P;czK4mvQN(L6VZ z7wuO9K-tGOS;yOe#z^Q3sHx8rK+Ys0aG?&Vcm*Y!_AV*E?@6TmVA>On`=mE_OlT+0 zbv$fi&$?}^&R>1XrFGyj2)QK^>VyBfm1(H;`RAn8^9;{=C~l|cgKwi2g;y>PCZXk; zYFQsU$ZB~$;+D$2@{ul~i{c+O3{{VDuc~!fzP{H9RMA5lP`v#y#TW$DlYg zBJ{{$<*dj43vlFHr9GD?bkkdXv-v)i?{;o{mlAw2{P?Ix6;iIsvu2*$?2} zx|dk5q9j#2z?QigGjsRzBZyp+@Zl4?BN2Z`VTPxcb>I1B&_&$4EjUdPsWdD?FTHH2)N^|E1fZ9Lu?Vo$Dd;>RjL>Yi8LPYr*L#*OjTd*b9QuGI3i-Z;wK z^lb}}hW^wd>+gTwCZE`-wcri76bd_`-rUfR?fEfJyT!ew;>i4qV}JUD8V6 zykcm0XqQIZGdG(?UEyYTfx+HKLuu)j`GtU%E0$QHU30biQSW)` z7aDbR)`(By+=9$r0n5nAS|gR!{8BAR%UdFI!iise>r_;2r?wV6?qy3vYB@YM?ffV7 znevIm7hTE=)e$~1;>iJ5rLK7TmT;a8vM{%&JR)z31%}0Bs!X{Y_*o}_)q&=RtM$JU zF93ky$7s}#+d?hDAjCc48(9h02-&&vOO(43jS1BTPHh{Os2@(EgN>^vD$t!|F-S$d z1>Al=6F_tJ$ebv$$W*VZL|A;XZ>~IRcrVV)NB+_B@EYLTzwvZn97cPmckr|9U8k3RPVY-;Q&k1ISI2ON3K>2_bd-g!1(Gmkf}h--W< zBqRFt$gzS8*wv~QC#Z~^T)Tf{$&f=_WaGae>$yFhm-~~A^z28U^LfPloIjeUR}?qC z_H-BDh(`N8jIo(Th9D!RDnQUlI|q|;sw;nCCsb`&yJ4*t9ov$Oj^fs4_wJ+F_X2#johJ}q^+*ZBBdhICSP zhZzR0*<&jvb@c9&WPCr@9~Z`M-@Y{wTu}4G?s}~+b)xy~?oSbsAFIa39>-K85> zv-bIjr$NxCuLXLaX;&N=ZGkp)P>{lpvyuYPgY4aXm_FYyWxn2%>T2?h7AyJ+eqZNp zdCdvhy-7AsF({`Lc#jRyB5_Cmi@U2cWTnIe+vHcnWeg9H#DZEsnqbhc!jXytb7M;BP)aYcz+xn;f_d2I`yNd)YJ##eW zhb8PC03C*lo_xr-DN_uVw(uyCb#rT6_OxBE1xb7qps*WcR8hG@PF=5k7Ea$|%{V_j z;t=^0FKichIYx{-V)(&kyD0&$?(L+K=OLME?NkR+dTwt$H~Yu!g8H-K;8l?yWA+vB zAD8c6u$Z!_@I()GbMKX}m`04{guN@X+GX0R@yf>5X07%Lv}HW1<~XBTsrQ_1)(lfa z<_&1G|D)sfLqgkmo93F$7JwEl8+mEex!SR}?$&FHr~Kv!pK-#q+ZO)(*P1mMoRphm zHv2zq`b%81C@`y#-=@i$a^X({Qp907Q?!DhCu2gg$pw9%v27_Ar0(v-x)#{N7SLlB zP#V^@GW$hL!-J-uYSg;Is$;6|UjuW)lNpt4h-1(@9rh-nYQq|qZ!9BJNsooMk?UX1 zrnRbD;OH$ry;GOM>}|EGRo{2~87bUg65qK1&E>h*T!pGBS?rmUYbUpX-QWAsmb0aI z2hc7{%af9R$vrt*VvAkfuyKT3BoQ#GpmY}M2ckC-9y{MDWa&<=sW*oHo#(_P;bUplXXxz00Xt}$QA5HJkC4T%g&*dUB0oxFhHklW%5{(*guf!y zw$+lN81}EAsu=RqB;UPBmt5}H`F&&Khu-lSR6Mo8mbb@r z_>(Y47Bx+00yY7JC~r`W9Qeb~%zn63;q6J~^mO!ELvr$f?ru5%1F6Se<=vaB4%st# zq>4*G{$XM8A+xg>Q`#-V$i?^84{WmGf-_gDthT-x?UN`k#N5gb(<|h5nhV*>0|VMX z1KJ6YHN71#M$w?lF_inH+f*B063N({H8st5Yz`UD0sYhvDONVLm8$QRw_zm)&!2G& zo}47a-7vQ0-v^D~?W}9Z`&eES=l`bHv_470SM@3PhQNo_+01~!;%n5&PFO%>4T3Gw zPq1&4$ktMe_wj%F1n83gVmi2R?u8a0H8brilm{l<6}or*{7-*UoyrB9uk}1KHUjoM zs5{W*gbSbQ_B0<#-yBWe=k+dT;BNM~mG2z4`R;!Vij<`Hmlk&j%$B9wK;T_Aat%Xg zO8dji8nwFSCf~%&Q-atpP21jY?mMlC+xns7-+cZ&RY0%y&@flUzf4MmWN=~8t+mSq zlX5^!Y?pyV7J7CnLCU)|58mggM)fs^Zh4Z{NXt1u+u|HPnRcZP)k2ww9tHXLUcxTp z;&S4BK;PKrm_mp39HC!gk~SD|psc(vD|_l{ z$_l^zFf)kdN=NTEKgxH*_W?SbeJkI6tf}iM#kNu7cu^VVT+NmBFx{R#Z!IoVT$ozb z+VpTl9N|1CeggwJA8V8P4O(-SaHG`Hhm zf3}>2jaVdN79CvJG0l|UGI2QD+loY0DYJ;tliMXw$%T7|;eRx4zev!#Y;gX|o<)mERLTgx;+sq<%OzI3?5w1DMTcsF zP6i8Cu{1PFvuT(iqfX%tin6?wGsc2!e|TAJk^}a1@h`}8X4AA8BURBU7?M_ZpWpV= zZdP>38X(^Omvq-8pyy}3KmUcitH(Lg!VpcqS=~t>*1JR8ojpZR(NAUR1`^tJP{T7z zB`#i;NZan`voqBlg=JUD7?tbHsUaO(-@5TKhRsK+ftcIWY-ubt#2aG*AGW$Wl$hqR zc$nz3Fps65KpEjvhJt^*iw_>u36jFC7AFQihE_i8Jit^9+BLjfQqydHChS%@@nIq+ zMS#vQMizPtD0~r*lb&%>R2g2Te>Dn(s&Tm7-aj^HI<5fm(<8Sb39kjbyX;d0(+s(T zNF4}3VhYM)J z=QMc80J+Zus}L1~TbBSQ8)d)cqzeT2bZ&W*1K~KjWNtK!Xj5<&{Ov};d4_M6z9;Hs zVE&>rzPC?xArE0HZ(Bal^O$`va)YJNji(H%9vJCbR>_yQp5~5jhttJ0csDxh_a`%T zj&xLhNXj1ZhWz}-vx+GS3f-W-e0h?6vh_uT%1tTURsUEk8Oh+K z5Q1aOW_~NptN_wKk@@&oA*HT-aKSXsd@xSBQy-C+CD@K0CR=`c>rDo!cBx zUG#+5DYb$LyHi7ua$(IQrBlHgCXmuhqjH=+lW57v#C3VES{H6Hg8`tiM4jKOKnpq z%WT)dKw)P5HfEt8L!j?KuIl+vY%^Zwi43Qomk_A5V-B3&|J zPV*nG@;$UJ;!^`)yWZsv!ie=I{)Cj4sv45&ic&NlME2n{5a64kk(f;JWw9fbwhZ-D z=JQoGuj(cSetR)|1Y&2lP=h;Ax$hsXw^a9#A!V;sp*$63{$~N4Vh6YH#FVa_nDMDjh3;(buRBJ9;mUr1aEg=_Zy2# z!&sMHrvtZgXQz3q-?^O!=Bq1dMUINzAZEtIC2UR`=v`I-S9e;=pproycrE)o~HwKEr(tYV)SNK1y%QLr9r<#WW_`&2{T|rBp7-3TMcy6`rDWi-2KbZ zESzzScYCD^opCKwvM63DYj`x+Aql<#7uGOnD`Iyk8>|46Fvzq*ru0*65hm75W`sKQ z6#K33x-r$Mcy2ks7Z2O0e4OF(wySg~wck6$W$eN<^hCT_^zfZ!NU|LRsICeZDsk#4 zm0y`=gzVp>PQE6)U1hfs;R2jCBITZTR*jlGzsv388xONIIMg#62@xx}y#07+fb1DU zfyO2^CxxYxkzX8QSI{-To!-WbHU7fcRvyx7gM8sd>^MJM8Z@TXQvjlrpG!yWIPKlZ zR<8#2uswN!Zp5_@n2A3D(hNEW+YuCJa(p^4{z>wgcPeE}kxia0MUvJ`36CtsG)5nE zGCb>*kLjSmQpjIMxt4k;+sR6*dtO0BND!Ren-9zTFzcvuyG((jIU9QWRf}M!m9D5W zQ7=xc^rkffnuInoo)P;X*Et@$!d|upNxD0Cwm~|>bT@?TWL(&&lzf*M2VwAbi?_{} z43l`~a!4X|SS5X~TpUK8_VP6}$%}?K&n|5ow~J%xoFh*9E+iXNy_2Kaw#z-)dZXGQ zYhtR)L1*32ZNu7GN4INe_t~csuJ6zBZ?8nW_QeZ6onKE%my;ZNP_fl;eXG4{-E^@; zk^Y4qTxu@}u71*f`$ZB(J$+`j7DCQU7o)2g^Pk!Vjk2(n=gU46J>azEwKCCF9P&(b zfg!%hyPa*zJm@1oVT;a>)59QEwCm`%U%R)Cy4jj?vM2vj1O~ z{q-xy-|FS>AeEkTxybkL2Y$Q9-zUETl%hYr?#KkR0RQ*1L!5y#(`POU{O_j$M{j%q zL?us;mAL#SO8uYzJ)QuZ>8#QEm*DaLI)D%70FBN!Ywn`|_3p2wfHM>JGY|Z)zXu!* zIlcGmRXw!}d2g0y)%5_Wv6I-FT8Uk1)x&7`$5B#m67<&J=T0eg_-0 z5HkG1%z!b4y34_A3%`OPS?~G5P={e~d7dBp$Ns-{Mc>bIC9#H#tB(0Q=Q6I}XM#-U z7nenT+&t?S2W+dSd})0jlQidJAH=iH>*Y9<7Hh9#tZ?~Oaira=qAm^HAwKV}C}K1*J8I;{?E*SBJtQ2n-0Ef$@;r(Nc8JL~zl0QI(!oVzn(XiZ zC6cpBKcsMWGp}DN5HO5I)KdY{XS@ZpCti2@Lf1RRCNgP^*A8XUMTVu`$E|n`bT<=i zE;(o8mb%$#FMfnavU3KecLMkbI-8m*<=JCEDST?)Pte>RR%olCj3ID&0V5XRFz&@Msj zq^6~GHHsYRtybtl=D2v&s{3U^tW{s1SC$U*s4wGa*C={F+-KH3%O!c_Vk$+wTr1Dv zfh^H={r)ceQho~Zb|V`Wvo0Hvkw4{*qctc>xamB;Nnp=Smm>{YQkimZ9Lm1R3(}9B zyWkz&p{%5+ILDa0Cj5zmyk|Dl`j;xOUTP-agLS|wjCAcsp9+;1IR~h-OlsKqy2jx+ zN0y~h$$9~l14Pl<4cmTZ-z&GSFEI>1B_%QT9pmrc0nSC(neo+Y%(({NkW?*Ym+tTA z6tlc1DY5b(DdGJ(S89-Jrsr&{bG+2ZX>W8+dBBa3%6x6Tz8tblkDBr+O1DhM#)hBw zljP;k(?wnMnIfN=%GOV_iMZQYXBrE&kfDfLE zldZ(zramNL7I8i_X9-_xIHMY$=>N?nV^#iKR5X#vWM-rm>g^5Rds<$eat1W3v}EIX zUBCYgRMQpl?P*qv2i9jVvx|AcSvRzsKVcraKW1o8$4)$_kMgcGV#}i|l|B=Qhs}QJ zM?$mDlzm&(bhb^Jhsx1>R36By?Tnw@OoEb)BIg61Yi)hM(haFSUmW;Dv2x?>hi7w5 z@aq6|l=ii-@Z6`Y6LB`@O|p!N2wNMp(|}IkBR?f`5G)*}Qs~-ytHfPgv#q18{q>sD z&o6+BY(K^Vg|)p=_Ew!lm<-EHp6OrCbR&Z=O;`1RV_TIPwNbIQo0--H?+LF!qh@6( zWN&r%R~>Op4kX_(AzzBET{;~@ZPTovoHV);Y#!Ra1MgM`#+c^Gx_@{{-3|vzk?y;1 z5t^Heh-lo#Ax$s^vC8s@efrD3-uUvY#)ADLPLjZu#95+k{23}hi#D&eyx4`kQ} zmopBg+CpSzfy>9tCB~_!^QL}LxUf~Mxi4%bD1bpqvYb#QEd{jGwA6M^o|%S4p@m_F zwpP)0nQoW;8V9r;oihG{NN2W>u^4G_q3y2*HVemvYfeBVPF7(O@-4&J=b?5pbT#QiRaz|YyJ>AkyYr-S;;g?QY7C(tjeDd6pvylvj_$%Mo>^#M4 zngRvN#0g;a{f3@8x%8YP@Q&-OFJDn#ORYD2Rvh9!@ZJq#rjqK_R2LRr^E6-0X`P2h z(W?iw#1Wu0B$O$}5s?E9gxJpY=p+pCWd^-;nApVIJo(s4Z>MnHoAWi}kF4LDBGo9#$2+vQKWq27_GS87 zcg+NNSGlj>M|yPXmbv!E3b$Hki%=acqJF&AM8}oU`Vy8Ui+3pUe{u<74QAQJJT0g> zu6;+7B(>5V&bY<0GuV~vH1uf}jCof&mBGtQMg+aXvB_dU`GGxGCG7s)_wtq0zzEd} z??-GpbRX`{<~un_ziR%06noc*`NAs(u(>z8Cby!EE!0Tl&2{g|4}|uTexuG6^T(U- zNzk@!paejwLx*M2<9%+Z=2ICZdYBmI48*tDMoU1kT5NixR$ub2JhOu0sfGlVya{PR zWfC-ndrq;k!FPH=|4ZWquL|m{HC?R1b*pLm-YWDepR)c`abKd&!m}%M^{@SFz=Al> ziU`nZU7i93eM%;=k-M%=wd`O^o~E^`Gk*qCijYBDFB>O^@(czR6{uD0RjfSN$R@5p zplxN1%!UlEY5!s&(n*DL~MV`8|Fn$n}{880Z-Bh^W0; z7ynhwEJqxfd3FNb7J+V9LwgTFv#a+sdLx;SGGa= zqbnXtqKi=!22ikzfVgSXiYnP;Yxjsr)G+k@4yPok1al6*%b*t@@&gpVBD;Q@7i71z zy_YHG$*RUQe@&?=*)ACLjU&+^^+3hiSG($fM^m-+QIVx8?x%u{ZwC=yA&&=zz#gTQ zFV7+JNvi>Z1M<=`rT7jHsIsw22Jib}C!N22-s~1Gt4y2fs)^(rt@R#w#0tRt)pok6 zJ~3`gj_ZmdK^Wqj^Ytp(N8Q#hWN(@!Z}P~}pixiW5h9em4Mn=gxu*YE$> z*!QgGg+2d+#u~g7zONm3};MG>$xP3L<<(ISYC-m9W*y^pJ zgO2gCV4i3-@-Zj$k1SGttua1unxQY#F|n-vsIw#;>k)icXKR^TgxyUnH!W*&;^xUT zoKjn}O|j}DI^Es?pneEm83l`obIIHnM0o8sx6MtJUu)D-8_Den+LZ(kAXQFzYy^65 zbE*dNE2d2J`!7#0s_aaHI+V@xZ9H14i`2U4Q?<&!_R)*-PfZYfezXYa}$$06fNwNg(FmYaoks@l<_uxqU0+4T*%Sur62?TW!Uz7 zB`vx$!Q4(|V1lM5*oix*Y-CWH+M7kWsR&gC9+1Jng8ub|ocX|4x2HfWSrlHON=%DD={b8mLJE%K!^kufM{gyrb+Io4l!D z+DBupHs0d0XJlOb`LD_S27gwJVB1nlNj|7F&E}oYmn}9KQIyHIKh>J{jc3aX`{<&g zZ0CAR0*2yv8mgBPaa!}0A7E0S#pqfzB72|MJDSJR+IJIy__zapMK0B=8<##}kcN*q zs>oP^L1~9`|C^NPnh@-xdS3Q{nYu7W(MttHt@1*mo!5M7jnu=Mn7Ohk9n}gUA5PBV zY;PXDGLXWJK|UOQs#+mNKi0kLD4BMx(RSP3fexKmjnrIyV$C#VV>deRQ6&P$Ho&q{4XNLlvLmq@yM%M!v zjEmdiZ0IwlQDHz|!{zcmbnmWP^a(4r%wo>Eg$*3ftvQy? znV7yCJw8=U4MpFUed2nNWoF`B?cX#Q!gCexJvceY7V#mu0CW>LM0Lk%C|!qMMUe1f zg3ZIsdcXNh1i4vVk*mC=vp#pKi}Ddt!x`D>RUm*$FVjF*KgveDJ`A(vvE@6{?*_K! z`^uVW94`G!oNTPwpP4#!h^e|+dUr!zy>d0-)Q~r(>8k8)=tqlfGn zesrfeXoq%=CW6*aPfPT|B?GKF>R?Jh*-7x~w_NRVBmJl@G4Myz4SPVaY3xT|n7@%sn{1Z(@TdIpAoc}+!Phl(*+ zNYwIP=`d%VGB&bFF*i>{1dLCQ$-z0?M6FbtVo_jNRz8hXIivKtpL}!*#%p$8B3x_R zHh!SPXXz8=Te6Y!(98@!xbi`x%H0Z%pXSgMxC#%SD=JV{EYm0($(Jt(*oAmASlybs zqb{^+^R^CW6YqBrzvQm02B{(&X#Z(O`)OBG%%_!VOpIs1p;(QAla2DRPF_V?ntKCO zN0;U}`>J%D+BdDY*o*MY879F{SnG;m#-|~#Fqp)|E33@1nkG)9-~3DfdLOz2hwI4l zu`6|}V`I^T4Q--L(c?#6 z|L8#KHu7Gr+1l_{_pV*{L-4&tR9aO73KaE%Hz36hs+YY*5Ne_FI~kr3K9+N&0(qW2Xdk?eo@=7Hgiv=oyp zj*HuFGQ^b^ppsp!oawtjUm`o4Y*Z;kxy-h~Jv`7Tl{KI+;#U9mr=3T7u7y^MmiFjV z_AyG?c2cQ2?Lkov90;EMttZvaJ+5DkOEaG1Q$LjnQ$*RK>Ti!H7eP+Cny8VCX>O5i zkF7%oWW@+mt(Hpe!QU_=KA1g*c>CwFpn=|H{o6I_WHpk%@ws>a6LRAV*yu~|>+Hkx z@KM8nTolZw^&D+=dOCWk0ych+Zyabj2ol__+mP=UbRd-zGTAe{9Jm{l_9N;eoE=8hgIh0I+kPC7i8eUXx%Z@d}5cl2guK&%I6K@kF-55 zdY$}Hks{}UJ)N?D=xSBp-iqLfan<9rgrxpa?^1pCf@{yYk_So;$i6LJOgUPE zfY#_m?`p6jyiTiDRAa(QZMeo=fnIQal}#aLC5SJhHaHg>?heio$$aNPJ2 z;sCGKgnj5eXKcNZVbeFXXoaQlZ#)m{bKSoI?)A0>bxuP!^stFFi9dM}&8NNaWzSFo ztcK5`${Jb=?<>gy+S1G0X~ERCXx;72`ZEVtfyOt1TR(!qc?ULPv0@{PFE!`J#7k%J ze7kHNCCEwkpxT9Y`(wWl$uE31LrPZ?9C+}@W^Lg=5*}AVMgkaL?~g-A{P2fA!|RN7 z*{MA^3#n<&Qm$#9;e~7VMz`fS?s-@ASw8_ndbN>a?2>uulC{iwZj*L0OXA#gvQwU) zwdtCK{5i^B4(4|TnUpaO#WSeu2-m?IpupZ@W`%h&X2)p-Qu$S}mH^%~7EFIq5D$NV zusZ;g6a}*bq6$=IH&#WCTIF-hhF>&r+I109qkuz;@eS&%&V}0IpW?y1+Ko-E`;1Qv zF(vq$W)M~Ttps5y)dGd`FL_}+F;~djqq4BgW`nu#3Np%V;cl2STO4J0#4>iyt%~$C z6jV8E%kU799mWH@;Hq1*QehI^|1ZChkuWqq#ARvO@k+wqnRpv#6^U5bItvC>CRFIi z6Q%mn`G;OGny?1p$uxO3?j55qf=Z2jv$=0b&Ad+((sFI+%ct^<9!!U2Idx{3fip`R z7bYmFBW|YVI~nMA@cz}WJbfFMX4~Tg$Ijv4qboTml{pMVSbY<;tst)s0*B6eH~?VK zR7zJ1ldM>AyAi=_%cnsBEEs_|UzwdlDU*iP* z5D+o@BQd-j4mkk@&(JvMJxye3E?E0^b9lP(#l}3lqNeui5&fV%M8)J8p!wp*_C>2Fz$b{f-O`j{Iz9 zZA9cJkDK2o_?G$5`WkntvZCYcf*NGaW=jT4{QEMaNS;Jl^Oi2DqlovgM|zZoUT-}} ztS@qdnyQM=51nr;#c!34zu7QwgGvU^~h zv|Z)lmwO$X0`daSdR0}YdarAlu(uzWxcTaOlUz`N;1AMEvW|@M?zZrgtVq#Ec1K+v zCLDu!AfXbS+sB5#7DLq;YcX+@)5GziOIN~DKxu#A)lf}~H{=p<6S5yG1JE zc$!xjUGus}9}7#V+?@W*Hl)lsy^QUrcG?E$;~8zpxaFMux~0@QI;KXvV9IJ@bYsnT zd;4`_0Y!x$Pcfkj6Ku4D@;)W>kv4T^Aq(M|>hiq5B8S(uqxs{aO{peCdr+NBr6V|6 zYsJI=83FmM{Gm^ni!1YWJvKqdhqBcE*2RWl;6iI%H8a(TWBp2gqQfa(+W=ETM%A~rG2jE@>4etwxJQ#ncbV_?Z{w><1 zbn(S&YQ|IqNd0O*!)sK(94jXd4dq?J_2(exIq%FeyXi2(2aoDvG!$d=M8t+jJh8M1 zbr`cSvfY?xj-8nLJYQa3($>VHX?7|HkF>N&ujG{7lf1a&A*Z@>v!yPB+NgQLnZiYs zl~c%RTJ)YWE}c>d8IJh;ljW}GHsT7^^{{YE(54_T+S~=k^k5se#@WT5gspqKN+@0J z+P3}Hyita?lQ`&?+8T7*4K*1r2c|76{pPq-`5EPuLBq>`XRtz!@|5~S7oLC`*;RH+ zyTK6Hd&reuxr!j#rzeO%{&qdUX5bYwYW!oK}XK86xzhkAK2Dz!6e)59$R`DK)w;9|cxTaA}OVz3V9VfRH}wS6TJfq5L$ z!!LQYZg61Yrvq{4(%DSN$Mz&v31`w3Tramv;<4L+>jDN)hDs~_5|IdPe+ZW;O*urz z-jLiqO&JMxL}osfD}v0sDqYo>m_TC?F0=ln_JLhI_3kFupb3tirBM_!SvBp8oxY^b zPG$I4#12!R-HP2?nk(0B!uAh)I8l=OYkam;RfNh4&H7T=wDx-_m(6ZINPMlIpvk!E z+Oh7;;E}R19l}r~QnIER;jY_5NqD}Bp&;zp+P%+TX6CTri`U`^s+pA#*{c*!=8;T% z9>&mQSl0Hw0)jV*FtlqW8{Y6aD2t+^;YT;HBa^>D4|J`E^2aN;sIZ$!-3qAT;3}W%Nc_UDQl$k>*TOx zc>9kp`t7NYfV{(?*9e5VwbGm=sUUk%CC1SR$s_BLrK4f@arc_bkP5*aw0A9j4>@v3*196q%;Ixk-5-wO?^X z2ib|}osX;n@Yu*(1L^yORK68Ur-&Gg+E583&8bM>xpVsw(Vo zW)yzIUCX%=q#rWl%{*W&h)GTDU)jfS14-V5Emy4|8sL5E|q z@@UotXfuv5DCne`U2v9>FUqB1t^D8_BVd^ff*K+ajnoe9On1(U9?qD9aEDQlyQ=2Wa9LB?TrI!)jf+-6~mDi2yP(|DU8B;%`< z3~(KRh$H~KMJo&*-U?jC7$T>oXR-|YrP(%emaas+J|4C4;pTSD)DY8_y_=ZX9wtzI zXCpqS$+vThR=USW9LGk<@1NPea7UT6Ynt(HRfHZH!_w+r!A;eIGmRhq>3P(vc>$Xt zB-^~824){*(zX}x@cGrR&pv}kDzIF?*yt|CC6jloMZ(NcxY>Xb$9e1>c|J}>l>?nk z)!)l6^GT&OWjo6DJ7ashYrfw13^YZw#$#|2vos+~hT~G%!ThcdmL=q~1F5ot*>5g{ z?gUU5`|)Ed>`eCb!qh&E4s{TmbHE$onk>9e)Rhn&fOn^ENHCkm#g_Mt-6nG016a$D zw(AfGx!r zG12{Y(xfBH*&(-yc@M62|oR#W@@#s&=iuRbtvNroCZR0Ic>|KOq$xc^XbB6&_ zcB!p&i#UMm;Q$GdXeUEZ=?2&K73%uy{i3OGVkvrx*PPtN2$NWXxDczp9{RzQx`YbV zQ37&PM>XfS7SZFGGft(K33K#x0|uzdDu&_F{U%G!RTVq{q;q1~p~C(XuZ(ee@DT2Pm0NZIMO)r^Dc@_me< zuot|CeJ)X_1&va$NG>rA)E5}h*Ipb4R8FK5RkB5W?DGk^`X2MV)>sR-1|0<{t%qjr zdy}={k~E|8*2Q=4_6a^Qyl~{4y!Vd?KIf3j7;KRJT^(m_)Q+`hGu#$#N4J?BBiXS2 zp|}kx=dUkoL~`$-Q-m1hJ&s_%^6Gn0i8UUijk}c7KuW#D1zq_yHp6;8uRynmBUQ=R zSj`|8!o&W=k9+QGTL-MFw*$FxV@mFFUoM|U1Ih~gs9jgP0r@?2pbc8fh)OX`GA z{m_tjGT}NlE0$jMuFt1G=w;~A7)HA~4Fu+T7TtJ;?A-*h)U<4tcYth=7gK5N*mse- zD{Gh52YRT%%r^7WZ53qS>)7^GsKy8GQK%`N{qvmFDKND;MkDD|FL)>^{U;c8^66OwcZ|_eD-{; ztGC$YOHkm50r*Q#2*A^~k5kJO|dj#qK3vU%z|#(p?B;))?Db}Qd5&C8*ynb}FO<{XC; zYm#yV4wb52Z29NrqXjk#No`nQ&ZSy^8?a7=HLzqj(Y?MA7|=1q5nAR zuUuqqwVw1&AC==?BSmM2wli{lmXEsvC>4e@0F}H|P8xemGc_L@O z3UN8ne>KP4p<>1$hTW48@bVJ`&uJG%NcfB`lAcT;PH|bEx^N-Ol);lBrh1_6C!Od799XHl6p<#zwCW56Bk3{%bSRyS3-* zWj(bFy=HeCE?}9Sx7~lqLP*|HM)yvFv+EqSF-GFTsb{rPJ5V`jSwu{4?r^4xD|sM@ zEpZOO->&2&RH_(1*S`KYP0@Gf?&-|-qLW#_ksyy81}XsbFPZ(uAiPoa7YFj|)Te!a zFQC8R>i^$AYkLoLt~fk8`RhaY|6lPwa0gdavo7z%f8k03{{F&|lx2wM(fnQ|A zkX)Jf@$sfHB?jc*`H8y^cPfHmEoD1>xX;J`&87Xdrvo_q5gtIK?yNX;s7%^1LhEmy z;r~3%0aHEhN~_E>sbVp2;(wc<9O=}$k#cbPha93*)~wun$ZrD@l^%Uw$rRo^#V6Dn zZW$t4rC?HY{NE=+Pmu>#H!?S;(%iat`0w}eKhK|P!*zt8I(vQhbZmIS%ima}A5Q39 zR1=wX7yK0f{lkhm$hElB+n2r5NAT(48{GeX@L|cGtGwPT>>Bnl3-s12Rcq>vqyK)! zA0g+sg6c*hHR&g<$|HOMa%|pV!f$i(pz0auqB*;>ck7k2UuCzzF0tPzw&%k1?p`$i z2(-8H(knjq+XMF=el650Yg~tMofohC1uOhBhU|8(uIH5i4tKsEZE^);V;@AV|!FXH@E0HHL&4pmxADD$gyY_sOM?uNuTpLZ!Ep4OEw(1Ja&{P)4_*r|%u zBL%E{%`UtVD{noEMFEO2x0OuLZOxYQR3it9!{@(O`u{w?-u<1ew_8L+_#M`}&lEqZ zf0b>SeMB}j&n+{{>4tmJ&+OqxQvW{Je{k(N(s=;I-*^3HnO*h9{VYHFx!eE2Tn5a| z;lo0=?Ch2wqN(|axc6$^DVjF{`z}FVaR)4i3VW@D_4|?E zt!=LQ_hZ1EIF-o;kIjU?h&v8^|y6!{O%0bj~_oiR69oG zx7nG@3_FJYK7a?YdOZMl)Enrla)O74CniR+JoKMo{~Da0A(!uLPqdU#!okjno8d2i z8`*u+IaY=vIX5=9<1mz%!&W|G(Ee~^Gr_f_woEbA;6+) z7CfGc)Pk4)w$lE`0{-i-tAN=RiwXPP3jXIk^p=1fMXDoN_SCU{6JOmgkO|vR_4zoSY}W6Qf@r0eXeXTbB)6Et`bFnAD*ThE$M)?)t9(_Bl(-9f0bYb0=$hP`apk+~FmT z9q)nKQ_H=4eA1utR8hk>JZ)bpKe|+67r}D<-yUjRy`oF*x+Kd`qQ? zr99r@#SkZc#lDwbZ;Wf#Yq|GFKZ>)x5XUch+MC+C&k*}XNtwgF|I$E0r5-vngXnWS z+f8Kczsy3&UcT?*o%G&xyw8YB-2Wl(E90WtzCaaGLFyzw?l3?F zX&4$*x^sq3$)UTEZjg>4-kGc3`xonde(wvv8RqP>_g;JL)scJk7A`Iv88#U2e!_3= zOs~B=vIklO0#G73J+hBBmjm+Q?PU_v4N@&QofZ{_1Wx-k#aI|!`Wb{$;(8zRawdlg?OwJdN$#MAE(umu9Khf2td0f?q^QOx)$ zIp>HwhgpAZe<@~k@rFcCa+?9r5?i-`!+enRxc$MC&8@B4WMd!zj%6|wz7kaZwB zX^vKfxHNy7PiqW2V6Y~P5DmSfhT$;vDMzqIV_-W!BP=5xzq7A8JNh;Sm(f|mc=k$q z27nGeK={#%#g=XQeNQS_PA+n7%l6#LOH);YS!xnEt^&?uuE~8%4wdw_3spP2j!q}_ zRIBO3r%QlxB39@9?y=c!dn^HQqU%ZIz~g8^@O%KhwvYWMtxQ5)7dv;f0dF){xC$nfHXu17*LQyt}CWIz7 z2mVdvJPV)yh&req^~UW^yXb*AfAykKYyE5N+E~nO$8pxyGCfwSkDN~HV6zd~RDDUbWxV+~E~$9YU&u1YB5rW%{BpKNboZ_cUbILlMtd3ROZ1y`lg zHL^|J*;$Z=<@__Eds{g@Y$~qK@dc9STuU)$OhL+Mm`j$%D5J($544>l)Cx%4x1oy; z1MTTw1jhMo*smY24U}6O1j1?w41|7^G=8G8rU{^0lu~_dM+wuEq#>PDZui3>pKyg} zoqpXFct;brLWt4}cU;W}tsH2)hApRwL1~eQ<(!Ziz=od(e^<%O#(QFX(zCd*bGjzti2ngvEhLk-#Q!9`{R%r)&> z<_trv!m7xupJeRM%a68R2ybp}nkQ^um+`2unKMtv+YRx5srS z;+@yJtwJ4_z(kdBt~&p4$|W$_g;KSf$|)`{N`v5!B|^^Tu>C}zWYtJ@&yOwkq=*3- zlXgC<4#7ZE_-4U?Q8O6SaG7J*rinuNm4)UD51!S+f>;i-UBAw9aI%b=Mf#vs@wyk! z%y5QPh<*Uq(8=t~%wToKB~CIQK`j2--C4xQx`1#0CHuM?JymN!pJG8k!@m|#>QD$| zyhvu3tg$SPIteV=i!+tz?Z300ALA_Ta}_|-WUJ;l&GecpO6GW~T6c7C+7zx{7_{4H zK}M&{2=g_osx2X~Hmp!R1)?FtuPkWU^f6FAEt8>+$fAq2nwSruF%;;~HU zB8Vz}X0RI*$zm{g00`R_T!#xcfkJI%(P|lWv*j3vuNb(293|`ENY2>~ftfk=x(m&^ z7*R~aF!M6#s)a|PhxD=Fw#=5x;Cqp`FmJON=QTvpfZu&7Nmy_}$MQ7gPzRtWe()Hd z?0!Gra`6RYh#(d>Z{bk}Qx((j=(ewZJdjU-@3D43^-p*;X0o>h6#a8HJ6OxEzAgFA z{3~ljEa%|xr|bhmOi>pfz@bTtKSSgw&7@l7oaCUSF@4$^O@>DJG#7KJRIQks!CJQJ z&CM$Rm{y0sT*7Ow!{8XTGF3n6m* z=A4S|Oe$0P6&;VRb)^-UT!RYvDp6k3kT)Ahnm=~k%!61kd=?Q72nC8i52+Gtaya7V zP2-E6EL5$BFR8%(-@C1uTIqfN6jJ`_G!RMmOVLQ_@o6nXKAqPUqNU_b5)*t@vIi_#RK9d#UU;{;h}m}b=E{-!ghXs zRFf3v=o3?W>2~Lm>1=}4?LGptrcxQ$mw=E;n~zCR!uG7gg_cx6oX z?Ql(pMFUug+GNDB2*U9c677FwF-*?7)cLo#_d9eFE08p8Rm2>jmdZzBAi{h&M2sH_aM3Ix5e# zE8AJXKRf|q*u>-Asl)*JCowlcw%;HJtIgN&aWuPDsrj3g(Px}**!R=g2yunBA1;se z14SpuE*>1n!;f&eOjgx_fH6Z0;*t-7ABEom<-W1QtEAed)h)|}joP9tL%37ny4@8c zi%_RUYysCY#m!+(D_!09&8Nwq9n)S-MSOl<4A9Th(S#y9_Rksde;4SUd8xHU!DzA6 zDx}J?3;^NzVL_xnD8jS9h2k}Va4qitUX#IA6b5z6yBKrF1(C2vn`enJxeO_TQ?wDh zPs&rr(vIiD3iglc+kX&s_~UV=g+QRsvtW z3^1;BO6^|PL7ZLOPbUrX1a$Fpc$9zF=bCQ=+T;pZ_3q!NKL;pu=kH6NHG2JLUitnh z7_b>|4vBcK{(buMKpyo4oru5dvgGOjl=1`4jeJe={65vsP&$u_0w}YWs_)-9!!3UP zDhdUlWI%Er8gS=y~A9X?&F z+rM}t1Z7_D$RAG+uL`6m|5?Lt;yUoV*!Nh+@95<97#+B3p$2}72G=^@$8M;%si)!&dHtO(WH5Iu~Kq%QxRo+?VCO6Uis7rM6bDsy^xzVbux&ni$kRS6xH z@M~LVFIFnjFcM~L0aMISqOi)1vcziK$ENq*ATYi1pke*>UGEJHa>|SC_4`E3pYFSR zeM+n@!K)$zeh)@Dd;D*10GF3qtoz}guERfjx(vVMAbAT_Y%H^JmYe@FEi0M&0^6}SHB9cNWA&aB!NdZJb{v6WMIP0XlGLI{}ibL9Lm-V9%YugUIwbs2inJ+w~w%@^BFm zxG`Io4FTAaPbH^mC=C!db@vV?fw-`+vk5oZ-xnu!T~rOkNks*;JG9Q)x~*=0cf`Es zA+fuGLDO-tZ%*J!ky&DH>V39%*Z&HV1WI)B66`TOeNFlc9p#|@Of3qe9$Bg2Il zI1*>Q-ZYX}T%1ZtguRRNccOz%&XquyFO<=rKTnKk!qAToJv!nAbmZ)--0L?Err{O#nFyX?GreqHiR>jS2_3|a?=!VN7THwghe&g!r2uMXv`*#j(nz9iog^|v z*RVZCb#qoZzO-+}7|?oaD^qGAl<%U&b=%ILaCu4 zeEKBibL4fK?(Xiy)YqpXBDtZzuS1f~y4L=(qse zVGG*L?-%%AIDp90&W{1sI`I@~m!V3Vtohn?wrsa(Z6m^Q# zTyo4(D@yMzOy_^^pXL?w_8{9d`$2=pHZ`0-owcl2 z;w9S-yr-3`JPyb_dH;r-Dyd+=r886TCQS>|4a}tm7K7e)U!X=ucg7pI4&JF;<9&BQsq>8hP4Sxu zymb~zqM;!93#C9d1I2KtvevkF=ZT4wrn0&+6;|01N^@H?IuOqt@h_&5f)eb<*i@P6 zcGR{m4-)-G$N*vDh?;^NW?S;3*)^c%U`#%?6^?I|;uG0t(}jkROUw7p-s*2i*L+)4 z!v4~K{4SRZwa}aK!fyx-P-KL6QF4b&^yDn9J;QN93B!PQGYjeyPW0VJde}Kjc=oBU z)YMB67oe_7B7sNW#2C*UP>%(HgsxW5Ixpq#R-SebAhb{XZykKoJiM&Yd$ZNmm0Hy_ zv+Y!Vr_iRF0%R{^`1)OeZ=@ygnpZG>=__)UF*43I1;oOeX%+j84zWmDW& z+oJg2{7&o&y9@YoSVD&`{RWQz9fs_AfMDZ*^l`pnZ0aEjopFzcWuJif%(Z{-)(>2# z1>i;M|FJvLSyVuxr?^#^CXEze4jau5!eHfD!YSJ`ue4V--&uJ zJsGLaf7^p1k5}>t8wa~BM*5h0p5U)3v+Nci684wtw-bL|hV1IarQRIP)x991Un_`S zQAki35gPB_`1Nl8I}~|YfL~rAX3PIB!x~~_#t4#>8q(#V{u<7TcEF~e9A6F+_y%2S z7${^{b^E=#CA-pZa4{Vy`2(XR#@T%N?S?!D77VdTWY+{{66=Y?LT=0tS#)p zRRff7ySPEqX|PP++(9F15S;kxHx!;+2pAvIpJNRW)QP^M_s@>+l5h6HX!1HYkl84{cE1QNQHEb+?;vA)(t!T^fJ$~=ZZla|; zJ=csrQs{mIo2WNvY`e61kbdOXhX}ZAeUbCjihua_ra(!rzODR_5+~^Ic0w)*?7fy+ z?D98&r9TISWaUeSzz?3>rJFe`CVt0_*XpD+=f{S@VEHQd<6>5sf6pD12paR_4hs3V zNaL9;T~5pd)y6v}r=-Af>a6H50!h;P1}8@))(xIpNtz>B~gAW77Q zuiKk44Y|Q89`#(ga%HCf`oPOd)_*zmQwEmukUP(7p@p03yRLLEDYps(-h3L20nl88p-Ma&D5&s zZkzfyfZ{c+Eaykd-hEwCMv4g3pduE-p)q;r@BfBilt+HL9b%E1X<~GKT z5dG3PQXad}Cy7c72TRKx;!cJ}?BTKYqe8&c6hMUygYLvPn{y-65)6%~-|!ApEu+IO z#fZqekNF(|e!R8vvN{E*wy}aR1w>OQjYktQ?_6vcH(S)pfX$p-9q>m2b+5vbrJ_sg z1>GN5RUc6G=)r!V*{5`DXf zpcZs}^o^S^M@{r?? z@(}MUATLZ@Xzls~+&UtN?o+NVZ=q>{OEBt&BFWutP&8eE0~?AR~hT{SNBpEI0@-!Vc?1uj$TIRpBG%MjXc{jLdVoX zR=0VrJr%Ku63dq4G96y#U71d(H#H(u@-=76LLb_W>MXV(YgUieet$Y(&1h+zxq#=56E;#v>>W)%b*GM*xFXo@H{u-<$Uy5W&9%zC zaM_6x#)1&4Q$}oFM+lpFD2<)zKsZc_q{Ks-0W5p~w2TciOa{Vl#$8S^Be{35fz(!o z{wz4M%*;q~lqR?9zoL&j$_{>C2s=jqVVmCXf<6L+QKBgl%5)}OyQ-QVPHdj6?!{9u zFtnZE+`9GhHc(f`O7P(bP<}d+-xeY^R%$2JmUYz0;`c9a=|asn$J9Jb4>0=ltzy}K ztoQ3DQ3kKJ8=VZk38|^nx619{ONC8dI+lr-znAY`OT||k*{uiX2A4yKcKg$zXTKQ~ha5Ej%rNKMpl2vh@3kmQcFU?E-QNruM-JKBFkJsO zgc(Kc4_IW0e0t=%p~u&!&w}Q^BS;tqOo>?>KEXu)7g)3e)Nh2963Oj;6{NiIX**5e z-oeO(NwbAXW7sdbZ7LMGmeu!$jo((TiZbkDxjSXYZk95n{+r$IBF7xxHA4IP%G5hZ z0MVK*^!t5m)B5+u|1al}wLuEiG5T$BUw@X(y4W4vo70bIZ2xt50jLcbpUN5l#OeGa zkbsJAsz}(t`_>}zzYC7v^?+~lkUj!I3ciC*UMr#N_MPB@;JI*x6Hxwz|6R*}<7AQM zE1DaW-+5v>dLkz{&{UPO>etVE0^wY!w)%Q{cfSE9bqQrTJUeGemE7ZZBT4`?50Cc4 z`F7L^>F8{xNm7jSN=4>DB)^6)h}6=HmZ&pJJAUrwG=DAm*9C(xuZdc<@Cjl*XkGbr zz%9Fcf^`0_Gfb1G8HfSJgC2aC(sSA^X*7to;BI=4MsgRkyNAN6?o#A-&)#O^%tUSY z?7wo^XB-uY5V#gr!!NM}ln`~9Jj>fM8_-YHDrmPIs!!11K_a$AnS9dAbVzmz9BOlnU(LFBe`0Fu0+qw=9MT7=|Z~2-<5kdxJ5EXLuDAk8&Khma zxPSS;@wTn5BE&xxS75c&;lhCdUBMM$5BEg>h53shxY&UM_!8*%x)VyDknljg^bg1m|#ka z&2XFLXg9rwl*V8aPMSc7Gu@a}eCdbyvFU-SL=R^e!KnCRAf06Msc))Bb$j{wnjWE`*Qc=_&sDy55lp%Z@_z{S$q_ zzV_A9rUcb>cdwk8pRJF7CVvL5palFYNL80+1f-JT^J_uauNoOTBl3AhgZvzT2D;1 zj_!zU+`3|lEB?^(;oEf~>w*B?qZ7Qhl1|g>#bw5yPZ>7iegDTUpVy7Ks7H13Lioy= zYuKkm3Yhdhp17Hdt&YBPn@_iX_AIE-v?$4T-M(~Hz+pLyrzuml#}L4|B&iQwlw=Rp81`={-i&cD^!}P9Y?1y5q-x)Sf2OQZ3gwG{3N)%D^qZ^+tum4 ze+*`K<0k4q&5-UW)ch~t0N=q~ntuh9Z>tNWMw;@JGgTOw-nl5=#wk!99w6%%@Ci5e(wWt23-GqWq(MTMY~R3Gn(#d+oUdayD3+S z@n&aM^ZYr)pN55z$tGPW4HK+Zx&}%pN5KSJmy{dO|Iu5fC<@TuSA#0(KVkh@#yEHc z5MItIW_3`4+LcZp%Oc*)m0RC+${#@Rbw`TKNVCa`XCM)(ypYZq%VDQfn7+{WYxkW? z{O>HJc1U?-Est#eGPx9Kg{pHmw9Wh1#PI8IuPAbW-%#{7?+i01vwwa zke>|#{=syD3K$hJ6LkUN2x#E2P)|!XlAl74f7s9)!1EV1(N|*MXoh-9Iw#ZCW9kEUfMpz~JItZFF4}D0|q?pjxHcO)2*qhV~6&Pk}?3Bz6@%=f#4GU-Y45mgRNC z?~E(|;Q7B67OyC>z=F4w5VQ6!Bbh&JhBOkulaRCy=ylPD=K+3G^FlcMPmdcS4}Il5 z+4N;{5l>3U>BP8OwTN6fCZWfp8;>4gXoBy()|8`9O&!dmqeXf9oK#%o{PkNG72lEy zU0b~O_M)6N&+aaa^OlPs%{?h@poL`lRx5Mk*fWQcr*})rj{32OMqqjA1bcud-ln$KY#P^2*B`oGwG7Q?+>0^(G3 zAS}%Hk

    wbJZfd31ZLDKP(1#LFT#hnpXff;w|w64I{PpP-Fc+pKb+U0x#RMUwH#c zyOk>%Lv14W!qa zcZlPZ$y;g?e7f(>O=gs=v7x0Tcd40MmO0y)9uDpJZE4Ayc`_S5Gi2||) zkeCD=6&2xxB&}j9ITsgKzFxic!R!FZF|_Yh9kzhDY2WBX8NYylHnPazItvLvKMhb@ zo=AtZowB%FHZRyH{$jH4cc1zliV$&UmfXj1Hm=gNfz1d?sU-6uHiAyRll_oHn-t5< zX&C|0KH5HVCIK1m06co2i{|+1PMskH8s30LbkFxTL*eq)rah3zbyM%WSMc?Ovf1Eg z^QmW`{=Z*koiD!SO(=Uh3E3QTm{953-nK3An0b7#I8U---J|ahi%*dxV#35SA>YFy zAOm74gX(=xzm#2Imy&hdn3|Z4G@fs1ct@~%dH>L&6^URO)w^w6_0GIlzcJ>1ojlaY z>mK%k>0Zn52c?wh05c=?DSsk?T1JmAlRWvB#~%51%eOboAykIJyMzs#1=cvtE#s89 zT2CW0HA)`2pH3?SSpo6p#76)-4ZbOwq1bO*Ql2y;?Me1)cf&VyOOn*-FfqM;9%xq8 z6sBAl@@m4}P<_M{>RYKzjg-F*ckr9+R(YaltqeA_PqJ+6%1Aua$d?ClLaf1y)}~vm zv!!M{65`_Nl+1TMLFiW$hpQf;6UPevc~Y5#CiMmG+M6=wjC~n>f#}%&wizp~RmY|h z%l)eqG&Ev!y!;A45czSp-Q*i8k|3#Q&Y|#f5yGy=Yed|_ru~@|bV~GlBOHM7#EOgf zwk_|ZBk#HjAOs%r2xJ(zjSn;Qw^X`INxcZSZkzP-Q4W(#`1>8*}x2XTi4f zjSI-o2WPJj&0hI<75dKz)<)w5L7ayp!dU-{vj9awr_Gf?DQ%Nn9yNWE(LA_OcRbi` z<@5%qk9={nDquXUC5$!cfQDg)q-SZDsb|%CnJ%YjjI|0VVBEd(NnzIS_I$H1QyU~i zhPy5K^mtFNs@zt0E4j@j({~4FIG>rggQp)57*G6H-s$=u2#yR_4aj-B?e8^o89VUf zpTGK%=@Oo>RVvqKyb3aJJYgnTHZIxQA02?T3tImqQKzErHsh5dqHha; zuUDelxUuj1fy^(PtL0H}NWUyNyZs;DCGG`kMYWaiVu!p2jbZ=N4M$PCIlT}i0NA3Sd@sd;r7$JWZh!ni%l|L&5fuEZDo2YY~NyR(^aB6&j2@6e& zGF~Px2hEn+mc)GFjKuhzqXYoAR|Jq(MqmSbdGpUNM$W?vNMtlf7McfY=V<7Bhv$p= zC%MDx9w6JOqrNuq0)ej&7W*;VO28}Txc@MOlmpmuLxbCA`fIP9yn6k5BLqaGf8%)m ziYlUPz<%G@ih7&yw69 z#!_nnz?B#{o-@5ZXy!GVN#s(&#Pi2ZTwaL5wX`IjAKvvjr08LG@oD~ak1Ew6U0D} z^=$VsR(y0c8B#{@^V^g!m~)qZ?|N}4-_AD^XkrUBA6kJiU;r8Fi*#xo%0&JMx969*1L!;E+3rIIN#bz%L1;YKiDnH z$!al#Xi{jqAG~RGHORNEd|y^*VZ(QRY>=8MMu-NdDN|c4+%4}zs1_gOkNR9_4Cu|f z_t6jt6_5SQum`TDW8_T4T6lcq>B}(3og!SrwVMUxJUr^|h-2Jlcn1^LU4H=JN;=0A z(Sbhz<0sssHuAb*_I^3LKt8F(`osy+WR_E9fKse#zXQ+VHJ(STE2|G{xy8~S?b5-x zY*4RJpZ5waoVoFU*5?mo4!CR78=jUK@DcHBa2n6)P>H+4N9Ua=py{8^P@z+Sq`PCL zb`)dc6MD1L)u3zBbS&wiA>wH`dPns7r`u2cPKa?Da^+*+2FFOsaz;2?TVLU*(Yca` zRrg5e)!?nVYxiGiywks1^W5BD_gd(q?AqKwox2>3%&3xgm2hE`?Xf%*@o|w?p7{*k z`r+1t64=l~O+YZ~SxK&{+4}ryXnWgksdAe96X%@;CNOxB#r0DxQX003LdfpzA16*m z?u_Y;wz5+vk4do#QF-dyx|cfWUR8E46Q+HVe(U(*&HFxAaA-x_cURFJ4eK4m072!Q z?zVT-1^+H&kli+lP{;*CX6ME!j#iesRRd!uXY=2PgVbFBmJV}siZr(GSjCQ{>2q>T zefelunYT?1Ps#Wf8T?R@|gNc34oqMn?_V}TqxJ}LdLxO-`tW5-vU&+zV;>BC>gvS?3MTmzU zkGn2ESsyG}`+#NMDXNsMao0j!dtIq{A#bm#JITWZa`0UU`hjBnKorSKL2oYEBF6d| zQms1pW1nXmQ~ZJ1f2Aq1QK&7U$-c8{f4X`9oUWH65EMlqaW|7)SE>Y68Q3dQs|pTS79MD=-}IUpxZvxBme7&nId|0Gjm_70VA67iZrd zynf^Kfbe5g&M#GkYjq13-%_Hr=xzH0zl)w#a4z3Mp5cdJ^56ND{=<)i*MKl{o7v>y z5cBOP4<7|3P2)u>6ldMPnsU<#-#<@$~zNytX}ysBdL}Yq6nfLw@#$v!??}kOfc}qy9-b0Tl(s zD_))A!a$y&z^5qns#vu|bQ)^q3Apv_w}gl{rf?kN>YY~WoieMJMK`i)p+Qjv)) z^8GP_^`v0;$WNV*#JIRo*d^#7lm`bq6?=5Oe8VNI6RWpbw?ab|#iXQyVtMMrx%l!} z41=Y(Mm2?jXfsK!wvp)=co?f;-+cW!?F;JRQmXP83@=7tR-BFZ(a(Ge<&7!{VW^K%jNv{pXHG2u$mNL{v}Zp<_uHaZ%^*RC87F4~m#riJ&O z=U%jl4Gz}Z8Z37z$YR>u+M}27>UhK(CRicO0F>qvYUxw2R|P8kf+Ok7PAuTVOUk!* zh>Z*qqY<#W{dvb_bG~(zDDmM=)l|bfTYS(lSI*h>^u5|XT+1qz$n`SkyqGlgo|Ucg zzFxGN%IQ8*jWJ-2N=KtkD`nhynaq+Lr#bRsK-GoEu__De^Gz+f_j=!`-QLrzz>ECo zLOfNXb=5Vz-c?3qlSia@g041+i2>k5!ZMNms!p;0>8e`*Qt zPE2#%YQtr5ozdh7d^QkEmiTO1(Bkv*gvV(R&!q`d6oQc>Yp}hZ&EkYZ?gYtmw5ux= zA|!5^g;mKR4kL;;@rJ<9{jx^1K5M3sNL#pj+g79nXeu|L2F67SD95>+(3FjSuJ&fx zUPDmyp&o1pY{;~^NNTx)-8(@sWA9&jgeHD0vt=i+IW;&ytk-w1LoMy?Qe6to4{pHJ zC0p4)JM@JOG(7=qUkvIn(MDf8HNLH>&B+@Xl%FM-Le`je0T|KiENoOa|tH*sm(m_qQ>26L1w?pW_pr>TAnmyG0iIPQ#KPt(du_QU6T z*aFEhIXQ_W2ihiAN=EVa=kB8!xY(~#rNoTZqF&{z86PDov36^uTkR{Vf)>PhjMsDA z508f_2)`q~H*xwUYa$HI<@Qt(;nJ%G65jwb=jWrt#(|-%JJU}r+BuoTW+a}4)dRN8 zI~)dny&38gaqtGfbhZ1i!r%o>2tce2dtal=XUw_xYpjaABgWsRK&y(DZ^fXnSYT9+ zU%u<`E?5wo>(SwMg&fdt!8GL2H(bkbmeVfAdp6;irdgKV@W@~%sxMh<#X_6-OU3Tv zblg3m*i?Q_`!z-eX`V(`vjvQ2T!1*IbFjLn?Ruw8;*raV$89@35(JAb`Rx7cOOF|@ zA=0({ww>%>v5YU*R~xGWt;S~@{GV1Szm%}C38&W%)~kv*;*F&O_eytTrK+>@DeGqxgZ-}ro3D+n!Z3@xr~Uz)>F8|tDN9rOV~NF)wnSZvk%ItJdxzKUoeHgP6n%5D+u*0ZReG+CViyw zRa;vt&&ZMDJ}zXPO?ZJ7RO7H0rUe_Njtt9)uy z>(^pwQ4S;?I~-cAO&Y?~`_lLY(GX?q96J*UN`$iXfj_UtZ9d!UJYm@iYPN2nVUSEf zRP)8b)hO|fre%CHllZG*%N*m5f#AcEnGbX`fCeU(LNL3CEg zDp(P*IXAw?%9M_b_uC!b7I_w4kD;bzdcndC;V|;Vh;??@o^#Nqq^lRGnAaa1SHaVq z>w-2!YUA6}u^VTc=}HY2oPR1`ppYc@@x|B&2jcX~FP7KHNOqr83@&2wVQskNNW_=Zfeqph+;m@?S1QgCVX&gv1wn`E(PbSL}~hc1Xs6p z#AUk=;ctK@=fX>=^9c&&1HN7z)`?X%FA){@G@{nm`6er0)FnC19Q@3lf{?DwyE}&j zOcDdc14FmpScVj|KjE zph6sXX{Z-~m-&yC;ix3|(VoMZL)a31>3s%MFIA038thNY*4CI5lBILcPu2T+z_J{R zF1~y30{@*mcgDjsgG{Ykr4=VHoeLbaeJFVGGiQHO9FG-1X3gr4N8H&)GDz~!c<#G`VW(CuLdJd znClGMr+aL>qyZ*4;cVP%t#-Ix4|NMd%UiiWqyOikQGZIDn8Cv_(DX z-Yl0G1vj*oCt~6}D!aAXRZ#`hkD+sCRMYlOXFB5W^LhoK0kQR$$<5^)ftFwjk4SEv zFxP|G6zkrgxI;#{<$5e( zk|1K`veXbGmf<`a6ZN)yu}n0{NyqWYv*l2OY#p`4Lw?AT!xVa35ty)sR_K!{lcrBh6#%HY-SK;$At@_&75h-h126x3knYAjE@XtU6lm z6tYki$9EVVuGrRAAr?M=Vim`S?RLriaIs9&m?BvSq20Yu{h}P6xA{I1bEhoDXOY_# zu}kk{+s;<9U#p~rZ;_NU!CJF~u`bNKsjJ=RI~>x$Eae|^wda+?NjopsT*P#utFV(x z-y1ciHDB%x*o6CSw>t~fm)@DLldsKQ$+Akjxnr2|WuhY}yzX)8&7H|%2GsikU0_@lIV8*VkMLP?X_KJe5rcST!%&WYB zP{llbE8M-x*V@q$@_bE>Ucxl@p*A%hk9)Dj!+vPnj(yBn%3NDsjfdNL5ET(F?9^gR z%6HRa1&;c{l7v#zaz*z-DOKFleDwbQ`!#UwRSdM@sH2zyru$h;#!Yp}yz6nnnx@5UFe&qnB45>5Hc}q&Cf-QW;euSqiZ8)%`p90%iaT*3g+;*n^Fhe{qL)eHa|K!B}AedY3R0$sk`ryMLgz(2v)>RG58YK0KHKMpV<?u@Lh^Iy^T_=o5AYs#!v>&K@!4HxmAz|i#K(} ziB@Rx!F(Rrx^-}o#igG$Su(OqTT0@DsH}m6iD5@iuJ=uRWE>&TDp-a!d*|_1FerO* zYJ4jx&k#PpfR$%!`-nsp8i=Vs|n6PM8YT z*0yR+9k3=QTx#9Wd?dCAJ>$=+sifD^&S^4=&>BKVpccNa1z#`_B3hU$^qPk-bb7X2 zu7%>Kj0p)fqpKqYtA}B9%7ct%*laauv9{51V~0^X>s3Z8J!4s(b{?^8gF~M^y^%is zJH{yXd@c^5;zoX>Ju*BJCkMtQm>MRY0|gd$qLW7&dK3x$F{PHvU$o){fx(7`+o^A? z6Twe3Q|$R}cCLWaYR5jRzz(VB=ak7s{VxD8XjoVM(E(1_+t z9?bjUtXYzFrglyQ3UT4ht1k{CKJW4+o3(Pz0)0^P!D_;qswW+&GE}9_MfH3_gU@ib zTc3#bcEtT>p?;+vsU~nXOuq%^310JLeu1eH!X?97#;TceACni46H3eXy9<&>cR6NH zSxcG|U%zT|1_%x@}OAePM$Tsfdr06rHUneFGXVnb>|-ugxsaS$@zcdy*=raOBM1Kt5+OM%Q(xZIB%RLB z>IS1Pud{fZXz*Ab0OED(O^4$ut>SqGK!8cL`@nxsNDdHSBARwS^s7#~&tKki5h`Y@ z5IH>M$d5n)S1^@&*frAVmZ$4eM?ts_E4lA5vEmSb92Jlmp( zgK+*A2BU*%!I7%<_Cpci(vxE&WzJ@NLZ1E4bp{Qs&GzcYfNGsSI+_Gi0I5UAehfImT-V-C9 zMvD9f%l&Oe^h2xpw#|AHIBUf9rL#bH<9lL;!RCze@c~) z3Sq6LEaRbd7)<4(Q0l79xAyt&b==X(57CHvWXpPc^7NzGz_igER)t{hhWAkFfyKT7 ztz0Hd!hyob#oCg5HdY2XkNabcxS>XzuV0WHN`m2^{D~~{g>hp%(n8sp&YLJNRCXk3 zwY;9ZX;5t;Xzn{|mQzyWublreBv(78bRE}FstXb7C%aJ(;f#=UY*>LqP)3oOg z9(WV8ICYcF)%$TnSC;T*xU&nSwWA^W{@m$rdQ-LP`s>u76Rykb(YKcc-u8U4V8zPw zH%qtsaMA;Q#@-C?3Oveed$>Trzs@n%<0Oo$}}s!3AvgU9J>z(r_Gn)x*z)A)F1Ow zSy!lZewRx2n)deMo=((Ec0cbspZQa~k5?xO&HE5hx$~>El8ybn;O-f;87~ACe4EC` zg0t`tZ6igB6UGe=EXrOKKS+tM;+ziUCnZ}Wpejffuz(>}3Qn7mDO<2*=N<;AT{d*v zPT|-YZFtSnWB*yu(fUURskne4flw3NVjigp<6&p{7YW?&@c9(ICwQde+^29x`-e3usrv@QpI3E|xu?m|P2TNWnWynAMrjwk~!*_F&n2qiStY zCf$A5Vz#<(Gu)z-(jz0F&d7Vp;xyGf1ck2y>{pXp%Ok`h2x6!fhFw{fGiKRRh-NtB zHZAo<&s%f6)XsO*W`Y!#-!m-Qvn)t z^|Uivu}?9jOMeZ}y09QrBpzM-3d1P2Z_tmHB?u0$md;zZ^rE%xXC1fNGYwg)7`Mfl zui8mYDMZ7*;Dd3q0$SY%XTpF=jN1Vpxexd;Hk7c&Edie-#ZubNXLmsl- zRdkz#DO_c^WmoZF#E;H(e^SI{xn5|(gN&*2D6?YfaSpC;zVy)v;??HCJPDkk0!^*# zv=uI_|J+qXj_T5>yMG}erDAL*)U&eUz>N zQATHM^Ioqn2B#}!EWR;C9ZIqvbIxz@TW^_RlFic-VhuNf5E|~ z%R`?mj@)U;HG{i@C&SkA7bt6zTL9e^v?fg8c_o|}d-*M#IYvl#O|IBg{GL=PR_=xx6w|| z@Vy1m9Rg}sap}N-g)@^7T$zlGkO!1Tbt==2i-4-+;%bGOp?m?3ZTDeuPC(S{b|xXE zX>6+DhX?WV)hr8Tne*3|PCvTBd?6h*aW#Oo0#yPdTm+a%vNoy2;zR7RZ!}#vlP?Fs z?%9ZYQX_y$H>_k$e)`X#_Rps)NPBVMwZ${6euJ?ZuXMv5jmzV2#@_$&TAz9K*{`o1 zkS>t_U*G9f4Afap52djfu?=J~oSL%Lhe{GUePX6CRmoDbOH)X3Z$12kc*AZ!r~;Vi zuB}7l(%Y-_>cy{XTL}vb2k}>JsA$P6z*}^Ei0|a7-m`E#NKyuRF~o+8LOvD!tw- zJIK4lyT|e3{IPdaZkfpH>Y9BOQY?#$LRdHPM#XpEGk0zx`Y1}R%&1xFP{ICzFdOXf zqBo0xKhfXSjL;L;fqUy7%Up`a*R@OD$+OxFfdG0A8~>jK{FPG|5PV5}VG7 z&7&jES%0s+LA$y)DxDBCN5*`T%V+MyTy~J0Sa8ryCTHyg%j+iCzVRh$7}e|`I)Bn*n1;3))Y)k zOrv1Y9CdE^%QqiaIo60#<6gk4VWSHhj3!QL6_@x#IKjkf=O3$EaF#*A{vrNLK#XjiGD!6Djil&izq z_pGY6qMYs~nlUe#o^x>YHfPcDz#F z)<C-Qj#+(z_duhwLqvC$DW?TcKN30R76r^CGXOh@6Etfd8_t<1diKH%LDPfIn z$rTteM9bvP(+(DV-nH35cJf_m8oBFqz(d~1i{NgHU{?iVXK}eczM|TuLW9>Z6*7m}GtParxBSQJJ%a#Mh$e0j#Q8QPNU<9EB* zYxv~u3zKLw$JpcH=Z}4w?xK-U;?OGQpD%J4cN3Jh7_UV=2XEe89qR5u1)ZqFlnRp) zpb6axGHd=sES5)Zn+Le@kDW~~T0)H5!K=f4bEQ(`Rs-99;7C|IVOctQ?oL&OPj8wg z=K`0>xucWoH!1k|1c7vz(KUO1r|yrt`27*(RDRKnh{)SkJW_>Ue3=Boy0EWqjr2P_ zR7W+fmcMYFfYb7R<2s{pyi=vdSZT%RXjVmHwCBu=X`?}%5bm9YacyfGX!N-!PA*tv z!ea~*42Qzbd*zzx$~kwB(QIK^Qaej*c!!%A9nBdz6{PyYQqVo|j>URNd`Kg4yrqnw zdJ@6@mR`4mP5<5jd7GdFO&XSJUtLcZL$UE0`Z1`GsU2G5F8v< zA!SL@J2Ge2SdEzRJVXD zFI$!24JI~iQB~4QJPYmWEAu+DBHH&abK=;Jc{L)YJG3kIWYxiYi|p0>@oL14{vV3$^?_}PYg=|(KLOq|B+ttCUIEuK2` zF5GRf4&E!|KiL;l-B=HSu61#X@h$i9fsl5J#jdiC=ndNUjAMtoEwuxqITf}Z0$uCY z>2qi62PBu@G3)!NvyN4UqZ4;{9NM|GFSprEbi;g2-0&^0*b}Q&5kK3PgKBl=r|p1p zjpeuaCLC=`-}{vKG$*%f&GPl8wRPm~9QLg;UQr7#B1Y#}WWAl~euvAoJT1gje4f!_ z7Fi$+YhcXaLPIRK{T71pONFJ3mJ9zx+5ywn1CmcaR z&~iXzGEK<=eIM6(&pPXL&i(_=T8H0YJwE_zJPug`Ve_m9+d=v) zY1QqybU0bB5$-H?S{G2E40xjcN6GphzLZZY1DxY}3Iuzw0Tv;CG{2So2n14Ifz;2f zdfs(6kEmsB*!ME8f832740LjZmeLr_Q68eiIr$|UgCUbM)LCZ+=(ps!tNIaDCgbeoZ#1=>`Bd+JqNypFwAu2L#kAk^D^hruwP7 zNvtMlxr$?H!_drYbwWtx#1tm56s}GYh7m|1d%m2 z2;(-fqfrLHqlqYme*Baa*8M20%_mM163bVw?{!U0*0J`E1+&Y@EbktBog<#q2++y- z9joFiX&H<(_2B662Bk2`Ek|bYDaXAntsNK;Z<;wAb4gH)CxJbB@ozVI2igRUTFxfL z*>z3b(h&Bi#tiE(w<_Ew9T2T7^(P_48h&k+3P130G*-H?Vdm=mEz%qI9p5rW-jSR{@HPeX<$>c4q@7*gqL*Z6e=ekt# zxbP2xIPwk=%0+{%{=MDUo%IXelNQPI@ROT&*A6yb7a{uSfeT`VA2GUv(s%RZI9mbD zCnT&d6q&Ar34HTD^60x@Xc6Qx^^?LgQeKGz>#MV%7{HY;=vJ#O3g3c1;s6Edt~)<|+BWgMOsEcdqyE-_7DhfeZiY}s|B zFJIIl>s7N?*vi)h2%YkR9kiyz2&8{^R36!`tig<=pTiDqf3Hs^)<+gBj@SMcD^jvl zudfla43Di2>I!YGt767mGbXNcW~AN%+!?K?;?|FP*!&UM`T(FXU@ zR?9z;A1+P4m5x8&aznJjx&-aWOfj8~>`Sr_zK63(9zDAXslb>&E?VhLjZd-*V&Y#y zjCB@aQ|zWPg^@e%%S`QP_RSHO#O|@l{5|wj;Av=(o${_ubQswq>WS{(B1|_hsV-RV z($<9RJzmkW4F2ZG91a(uAzc_tc29>}&*sTYu$)7_jQVJ;W5M_Au*>Q8OxMQR-dB)O zSe8qELh{Z4A=8^9sts}fK)Lsd{IXZIpz*QQNJl=uRQIB9Z`d6GZk0{53Btv#t5Ur3 z4AN}#%qi*Q|x}8^*$Wmhx|?Qb)=n2BW@Tre*HtYlivqvdC>;o?{rcWe~{X z8$IJFdIg;G7g)}4c|Iu8Z+?5I^gzoVnJb?Zzr$pJTbyXUQ2**JW}G+?*a}2#M=G!i zPQ_OW0}?L>)yZH^1UNRT%x5%862aO#py@`(9qCnZw1U!o8U%!k75FSh8Oyl}_`ajHL>9y{jC7J= z6vPuUI=r+3#F1QDHi|MC8(1lT40c^1M4T`%S$Gm=5$`sgXY3A2`0H5WQkwmtl+G`0ADB!#cYc z8}P3q=)~6uaZfY#DE zl&j*h1tmtLtF`1`88%+}H^Vb<4ugOf2k?|gZs*XH=j{xy&*0{|79Dg&&}(27MTgwh zvIJe>6h=8;e(rgG@s!hC8=x}%Uh+0dy2~4!vlPvISS5C%O9^!{KV$A#;%S@GCnGXlZxHV_~{SfJ@_~#M*Iv&zxei&zNz>2^Fs|kE9?N~z5C!+D{IvC z`yfyFuFU6AIqGEola#FX9P4@ZQ6 zI)R@ayuK>#d^%g)ahwpda$RSQU8?tcXX1OkD<$D;TUB(@vyE6RfR{Y8t7yKS-!$jQ zRefoONoBdEyH@L}?}MEJ&8*~d;WrW5FuG%uzNVC6&w6yn`9)|9!Hh%ogjPlNGq52T zMu*7m7U7^S(*S4)a6>n_gzCkZGSq@IB$9hT=h`5bc-lH9vAzrF;UQGTmGLxf5hcYy zV4WKL0X3J2rfx(qf5R{LnHcnwmcoW@Xes@M#Y&m$6LIu6_+ET`zs10IF-6LWZo}78 zG;mjGxeg8v$1uW9W*$GfQLK5Bx)IJ@{*`ThO`w7<+}rn#bFNO>045iQ!uFJmdw9if zMBQ&h#K1b(WP3%ntX$#Pv#`zns=@D}SDgZ}^Ajr+a~CNS^#GI{K=iOTytVmiD#`Xo z8MWD(0e=?W<11h6b==5T)T9^R4=#ei2uPmH;ODMiy%J*o!q$; zW~R>ua;Dn(h>Dyo6`+3_r}fMFCwsOHdUfurc7=t4(+hJ%B+{TDq&j5rWc@vu)bMBLMs6`NpDG@4$u z+q)|^J;mG<4tTd_z8fcIFzyk6oi(~o$?hwy#NBv6I@lHZshg}6ATq4Vu>muo()LW= z4rA3q_hmnKnrqRO>%=7%#j*2cW5=~D^=rL0)Z_hzk2TWaNYY^lmPqA&+iGXbF{(R+ z?zmQ{z5~koz5%29;|#$O2aF0~QxYl!;`b-O)Nho!O)fg z!kU?->^gao78|}}dh}JYqZ#w-=Y6{i>zlFyP@@yL*FIIZHK8;;{B>VzYNF?vrl)@h z1H-#UgfEcrG^T3x{{AAy!6U=kF^k*;vl8Cb1LZ}cOV?@Jm9Iu0KcgH^nUPGWTR!*O zY?(!VA#1qfQrq&%1#6z3+GNh@%d5D#+l<9qNp`d*k53ouODyG~?AaQABnXMnTdA1O zg1?s>8y$lNK}DWmT`!j!E0KdcnphmFDY=&IC_0%lY=Fqz%`sj0MmrZ#SFf#WV$pBu zSYuB?p9N-S*@sY+hYb6|PK_VvvZLY|ON9FYSfap3)7K5Tr*h;$+gb47)OMiqkevY~ z1Bug{v+$6qqoS267aG25LCd9}?ER>*;4Xd9k!H!%yCQp2LIB_3G8m5*-#kwU734cH zHN^`NOI4JRog1b4l_I4~VCPUKo*ZLh^j_cKrc2L1x~+e|m~#<42@PW3GJs2)?d4vX zH@|gIe>E7gY92i}z__gQ=T{4V7&|~s4m`!5aqTVP)APr36JiQWjOD1M;Y&BWOa|Va zny^WxU6SG}GLM=V5$`ABCL-6LPs+k1q!e)SRU=rGV$!XG+g;1&)GAN%!sft=|F!sPIRUKv8XEyDWLU zbP$+gRVM>bYg80ThB*K1wy=^Ig=eu`TPmiFry_@%DofK`NEa8*F=rytLE;lyM zj8yJ4T@Baingv?;0XplLb1bbe0Oi753{BY?ca18SH9tKXfiVD^VnPkFH$&e=$7IIz z;w*h=o?6iLxlsnQSy3J0VqYby>yV^oH5CSl1P}zf)HIH3;+}<-R*6!tl?;sqjWYPv zsD;fvbrSDxL%bP`HG=W8UJ~s~#mpcQmyQqsm-=~4gz8kH{0OBc#d{n>oJBrA)4Gvo##zKDhF|cQ3ntP9Jc8 z@HDD2mTqND?r1t=e|Wh5Gp8JGCM}gt0V!!rsHX+H!!vsB3stRE)+5Nc{5gsx$^th~(h4l;%(sfPx^QP~I-3 z-rs_Ck3*^6K@Rg;McOBr_;+pu&p#?N|GAXdpmwpyy(FN;YHtv;BoMqUm3Utv)wRUk z-`%!$za~K%QbGzB=%|bpjUk>EGnWqo4uKi4T4jy__N5&&OZ^C!Z9{YJ%X#atMp$>M z^s0=6E{H@FifmuTQdX>FzRFW>&zA=v=nHHOhiu45jWxzaHe~j&+#Q=(qyNi7pW&lyJ*l0R_m+--Uf& z;V&rGZr>)ZgyxI~u<>b!hR8{&+7;+`vre>L8L5d#W_-uKL5oQwMAOq0X@OavL-t8C z9il}(p^)6u@0}-k$9p?ECob0Wh>V1aZD+<@ZU-~z;vczFDj;cV%3;YD{`|85En!CA za-RdZf@*Hscl1HZxD)$vk=ObP?GxVVnr2aec(%W{582SUr*Bp>JuPHs7qJGd3ZJ}N z?s4bTVK!&ROsQ_8<*)zVK==x}PShRPG~=Jgy7%lS0(CKX4S+C?`ohRnLa1@{*a?+; zn>p$Rr6E^Q9@r3II7MgW=WhFRv1TlD2XGhUg-I%|&8X&5!pVsZ-L4PpHg4a)t*AO) z+oGfTqLZU}I2;BxQhVhHu|=%otjJZ-+VipjtMVIzZc^MPoqt!b(?Hx8`Z0Sh&wT9Rh^-Ll2qhfXl)*x57QA@WnqkljEW zaa=xQ+dYz$5JZ#o;~O*nE&J@AU&CrEps&CFbSAu6i~3@x_-iK zO?zKB>tFb?`=^ipx3|A3z01$P1k}3+^3Fe3f0>fv-@K(GMbjc8z4R=iM>+6QeDKd} zQvVYM{TC%VtLv0+x6|g*rI$eBK@UuR{|<+<1u~HPO%9xM?r}a>bhYHbXFdNs0K3c* z;!nE21pW2go#ZE5%;dh+&6u<3i0O7P)Hd7NPA@^+PSdIsGSni(GoiEfGES5kf`7ja zj`rcLT`&abvj2a<|GED`u@mUZbxew`9xVpd(G>Cp?lJ>L2LeYOhJlvk^A!yxT%!S9 z#6wW8hZVdQsgxiob;As~z=r*}Bx&cJ3>t S#`hQCWpmEqEdI3jgMR@#zk{g& literal 0 HcmV?d00001 diff --git a/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/filter/LatencyMetricFilter.java b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/filter/LatencyMetricFilter.java new file mode 100644 index 0000000..daaae81 --- /dev/null +++ b/activity/week3/itschrisjang/java-springboot-order-perf-optimizer/src/main/java/com/order/perf/filter/LatencyMetricFilter.java @@ -0,0 +1,31 @@ +package com.order.perf.filter; + + +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Timer; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; +import reactor.core.publisher.Mono; + +@Component +public class LatencyMetricFilter implements WebFilter { + + private final MeterRegistry meterRegistry; + + public LatencyMetricFilter(MeterRegistry meterRegistry) { + this.meterRegistry = meterRegistry; + } + + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + String path = exchange.getRequest().getURI().getPath(); + Timer.Sample sample = Timer.start(meterRegistry); + return chain.filter(exchange).doFinally(signalType -> { + sample.stop(Timer.builder("http.server.requests.latency") + .tag("uri", path) + .register(meterRegistry)); + }); + } +} diff --git a/activity/week3/itschrisjang/k6/script/script.js b/activity/week3/itschrisjang/k6/script/script.js index 6cac457..26cc9f1 100644 --- a/activity/week3/itschrisjang/k6/script/script.js +++ b/activity/week3/itschrisjang/k6/script/script.js @@ -1,17 +1,20 @@ import http from "k6/http"; -import { sleep } from 'k6'; +import { sleep, check } from 'k6'; export const options = { - vus: 50, - duration: '60s', - noConnectionReuse: true, -} + scenarios: { + constant_rps: { + executor: 'constant-arrival-rate', + rate: 1000, // 초당 50 요청 + timeUnit: '1s', // 초 기준 + duration: '1m', + preAllocatedVUs: 10, // 사전에 할당할 VU 수 + maxVUs: 100, // 최대 VU 수 + }, + }, +}; -export default async function() { - const url = 'http://localhost:8080/api/orders/1'; - call(url) -} - -async function call(url) { - http.get(url); +export default function () { + const res = http.get('http://localhost:8080/api/orders/7'); + check(res, { 'status is 200': (r) => r.status === 200 }); } \ No newline at end of file From 36a31b5e41f0a2997778a704a46799f6dac1add1 Mon Sep 17 00:00:00 2001 From: JUNHWAN JANG Date: Mon, 2 Dec 2024 09:59:58 +0900 Subject: [PATCH 7/8] =?UTF-8?q?week2(=EC=A4=80=ED=99=98):=20.gradle=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.gradle/8.10.2/checksums/checksums.lock | Bin 17 -> 0 bytes .../8.10.2/dependencies-accessors/gc.properties | 0 .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .../.gradle/8.10.2/fileChanges/last-build.bin | Bin 1 -> 0 bytes .../.gradle/8.10.2/fileHashes/fileHashes.bin | Bin 18947 -> 0 bytes .../.gradle/8.10.2/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .../week2/.gradle/8.10.2/gc.properties | 0 .../buildOutputCleanup/buildOutputCleanup.lock | Bin 17 -> 0 bytes .../.gradle/buildOutputCleanup/cache.properties | 2 -- .../week2/.gradle/vcs-1/gc.properties | 0 10 files changed, 2 deletions(-) delete mode 100644 playground/itschrisjang/week2/.gradle/8.10.2/checksums/checksums.lock delete mode 100644 playground/itschrisjang/week2/.gradle/8.10.2/dependencies-accessors/gc.properties delete mode 100644 playground/itschrisjang/week2/.gradle/8.10.2/executionHistory/executionHistory.lock delete mode 100644 playground/itschrisjang/week2/.gradle/8.10.2/fileChanges/last-build.bin delete mode 100644 playground/itschrisjang/week2/.gradle/8.10.2/fileHashes/fileHashes.bin delete mode 100644 playground/itschrisjang/week2/.gradle/8.10.2/fileHashes/fileHashes.lock delete mode 100644 playground/itschrisjang/week2/.gradle/8.10.2/gc.properties delete mode 100644 playground/itschrisjang/week2/.gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 playground/itschrisjang/week2/.gradle/buildOutputCleanup/cache.properties delete mode 100644 playground/itschrisjang/week2/.gradle/vcs-1/gc.properties diff --git a/playground/itschrisjang/week2/.gradle/8.10.2/checksums/checksums.lock b/playground/itschrisjang/week2/.gradle/8.10.2/checksums/checksums.lock deleted file mode 100644 index fa6e4f19ead5526c7bd9ef0e093e244e1f2110f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQxcJ%JrTaTA~WPkzyP3Q(o diff --git a/playground/itschrisjang/week2/.gradle/8.10.2/dependencies-accessors/gc.properties b/playground/itschrisjang/week2/.gradle/8.10.2/dependencies-accessors/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/playground/itschrisjang/week2/.gradle/8.10.2/executionHistory/executionHistory.lock b/playground/itschrisjang/week2/.gradle/8.10.2/executionHistory/executionHistory.lock deleted file mode 100644 index 3979aceeccac427216e8b1d90d87f4a4a4d34ce0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZSHcm5yqqLZ7F8K3|FK>7s| diff --git a/playground/itschrisjang/week2/.gradle/8.10.2/fileChanges/last-build.bin b/playground/itschrisjang/week2/.gradle/8.10.2/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/playground/itschrisjang/week2/.gradle/8.10.2/fileHashes/fileHashes.bin b/playground/itschrisjang/week2/.gradle/8.10.2/fileHashes/fileHashes.bin deleted file mode 100644 index 2a3af6abe6bbcae8129b60ff005ce54751363e69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18947 zcmeI%?@JSL0LSrf(v>SKYpsM3D~1}_ka|`=5qmHruohWaU{SPECTxj;#UO$jWg-<( z%rF&c>p?{%K1h1tBq$ouf--br4g4{-XX#uIsvEm6^SJ&3c^}+;zkI&;xx4S{>FpDu zsPM0Lh}>bxO_?Ep00IagfB*srAb;YOLM`$FXc~zbNx$vUNy#H)q%KYMH0+jQg4@ zfAwq6`6P42;@;#B*7a%kf0em8Fv*RULq z85_N+_6@gBg+{v@TB5~=r*7yPTV4OL%B#B-oAx|t`{`@k_~UoWu&yC&*E8?<2ThRr Ag8%>k diff --git a/playground/itschrisjang/week2/.gradle/8.10.2/fileHashes/fileHashes.lock b/playground/itschrisjang/week2/.gradle/8.10.2/fileHashes/fileHashes.lock deleted file mode 100644 index a59ef6f26a451b65807d062c48fb985ea6406600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZSnWWN7X&B+2y1_ Date: Mon, 2 Dec 2024 10:14:44 +0900 Subject: [PATCH 8/8] =?UTF-8?q?week2(=EC=A4=80=ED=99=98):=20.gradle=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week2/app/case1/out/production/resources/application.yml | 0 .../week2/app/case1/out/test/resources/application-test.yml | 0 .../itschrisjang/week2/support/out/production/resources/.gitkeep | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 playground/itschrisjang/week2/app/case1/out/production/resources/application.yml create mode 100644 playground/itschrisjang/week2/app/case1/out/test/resources/application-test.yml create mode 100644 playground/itschrisjang/week2/support/out/production/resources/.gitkeep diff --git a/playground/itschrisjang/week2/app/case1/out/production/resources/application.yml b/playground/itschrisjang/week2/app/case1/out/production/resources/application.yml new file mode 100644 index 0000000..e69de29 diff --git a/playground/itschrisjang/week2/app/case1/out/test/resources/application-test.yml b/playground/itschrisjang/week2/app/case1/out/test/resources/application-test.yml new file mode 100644 index 0000000..e69de29 diff --git a/playground/itschrisjang/week2/support/out/production/resources/.gitkeep b/playground/itschrisjang/week2/support/out/production/resources/.gitkeep new file mode 100644 index 0000000..e69de29