From 0c770731a19a9577cc9269ec51f6b4b80588ec26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Ko=CC=88ninger?= Date: Sat, 20 Sep 2025 12:42:30 +0200 Subject: [PATCH 1/5] Add initial implementation of Spring Boot application with Hazelcast integration --- hazelcast/README.md | 24 ++++++ hazelcast/apps/hello-world/.gitignore | 5 ++ hazelcast/apps/hello-world/Dockerfile | 8 ++ hazelcast/apps/hello-world/build.sh | 6 ++ hazelcast/apps/hello-world/pom.xml | 73 +++++++++++++++++++ .../helloworld/hazelcast/HelloWorld.java | 14 ++++ .../HelloWorldHazelcastApplication.java | 13 ++++ .../src/main/resources/application.yml | 47 ++++++++++++ .../HelloWorldHazelcastApplicationTests.java | 13 ++++ hazelcast/apps/spring-boot-admin/.gitignore | 5 ++ hazelcast/apps/spring-boot-admin/Dockerfile | 8 ++ hazelcast/apps/spring-boot-admin/build.sh | 6 ++ hazelcast/apps/spring-boot-admin/pom.xml | 69 ++++++++++++++++++ .../SpringBootAdminHazelcastApplication.java | 48 ++++++++++++ .../src/main/resources/application.yml | 55 ++++++++++++++ hazelcast/buildAndRunAll.sh | 11 +++ hazelcast/docker-compose.yml | 26 +++++++ 17 files changed, 431 insertions(+) create mode 100644 hazelcast/README.md create mode 100644 hazelcast/apps/hello-world/.gitignore create mode 100644 hazelcast/apps/hello-world/Dockerfile create mode 100755 hazelcast/apps/hello-world/build.sh create mode 100644 hazelcast/apps/hello-world/pom.xml create mode 100644 hazelcast/apps/hello-world/src/main/java/de/codecentric/helloworld/hazelcast/HelloWorld.java create mode 100644 hazelcast/apps/hello-world/src/main/java/de/codecentric/helloworld/hazelcast/HelloWorldHazelcastApplication.java create mode 100644 hazelcast/apps/hello-world/src/main/resources/application.yml create mode 100644 hazelcast/apps/hello-world/src/test/java/de/codecentric/helloworld/hazelcast/HelloWorldHazelcastApplicationTests.java create mode 100644 hazelcast/apps/spring-boot-admin/.gitignore create mode 100644 hazelcast/apps/spring-boot-admin/Dockerfile create mode 100755 hazelcast/apps/spring-boot-admin/build.sh create mode 100644 hazelcast/apps/spring-boot-admin/pom.xml create mode 100644 hazelcast/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/hazelcast/SpringBootAdminHazelcastApplication.java create mode 100644 hazelcast/apps/spring-boot-admin/src/main/resources/application.yml create mode 100755 hazelcast/buildAndRunAll.sh create mode 100644 hazelcast/docker-compose.yml diff --git a/hazelcast/README.md b/hazelcast/README.md new file mode 100644 index 0000000..c3a8bc4 --- /dev/null +++ b/hazelcast/README.md @@ -0,0 +1,24 @@ +# Sample for running using Hazelcast. + +- http://localhost:8080 -> Spring Boot Main Application +- http://localhost:8090 -> Spring Boot Replica Application + +![img.png](img.png) + +## Prerequisites + +- Java +- Maven +- Docker and Docker Compose + +## Run Everything +You can run the whole build and start all apps in docker containers with the following script +```bash +chmod u+x buildAndRunAll.sh +./buildAndRunAll.sh +``` + +## Stop Everything +```bash +docker compose down -v +``` \ No newline at end of file diff --git a/hazelcast/apps/hello-world/.gitignore b/hazelcast/apps/hello-world/.gitignore new file mode 100644 index 0000000..b18abdf --- /dev/null +++ b/hazelcast/apps/hello-world/.gitignore @@ -0,0 +1,5 @@ +target +.idea +*.iml +*.log +*.gz diff --git a/hazelcast/apps/hello-world/Dockerfile b/hazelcast/apps/hello-world/Dockerfile new file mode 100644 index 0000000..7940f0a --- /dev/null +++ b/hazelcast/apps/hello-world/Dockerfile @@ -0,0 +1,8 @@ +# https://hub.docker.com/_/eclipse-temurin/ +FROM eclipse-temurin:21 + +VOLUME /tmp + +COPY target/app.jar /opt/app/app.jar + +CMD ["bash", "-c", "java $JAVA_OPTS -jar /opt/app/app.jar"] diff --git a/hazelcast/apps/hello-world/build.sh b/hazelcast/apps/hello-world/build.sh new file mode 100755 index 0000000..9b23c00 --- /dev/null +++ b/hazelcast/apps/hello-world/build.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# Build App +mvn package +# Build Docker Image +docker build --tag hello-world-hazelcast . diff --git a/hazelcast/apps/hello-world/pom.xml b/hazelcast/apps/hello-world/pom.xml new file mode 100644 index 0000000..80ea01a --- /dev/null +++ b/hazelcast/apps/hello-world/pom.xml @@ -0,0 +1,73 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.5.6 + + + de.codecentric + hello-world-hazelcast + 1.0.0-SNAPSHOT + Hello World + + + 17 + 3.5.5 + + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-web + + + de.codecentric + spring-boot-admin-starter-client + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + de.codecentric + spring-boot-admin-dependencies + ${spring-boot-admin.version} + pom + import + + + + + + app + + + org.springframework.boot + spring-boot-maven-plugin + + + repackage + + repackage + + build-info + + + + + + + + diff --git a/hazelcast/apps/hello-world/src/main/java/de/codecentric/helloworld/hazelcast/HelloWorld.java b/hazelcast/apps/hello-world/src/main/java/de/codecentric/helloworld/hazelcast/HelloWorld.java new file mode 100644 index 0000000..af0b7df --- /dev/null +++ b/hazelcast/apps/hello-world/src/main/java/de/codecentric/helloworld/hazelcast/HelloWorld.java @@ -0,0 +1,14 @@ +package de.codecentric.helloworld.hazelcast; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class HelloWorld { + + @GetMapping("/") + public String hello() { + return "Hello World!"; + } + +} diff --git a/hazelcast/apps/hello-world/src/main/java/de/codecentric/helloworld/hazelcast/HelloWorldHazelcastApplication.java b/hazelcast/apps/hello-world/src/main/java/de/codecentric/helloworld/hazelcast/HelloWorldHazelcastApplication.java new file mode 100644 index 0000000..c492cff --- /dev/null +++ b/hazelcast/apps/hello-world/src/main/java/de/codecentric/helloworld/hazelcast/HelloWorldHazelcastApplication.java @@ -0,0 +1,13 @@ +package de.codecentric.helloworld.hazelcast; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class HelloWorldHazelcastApplication { + + public static void main(String[] args) { + SpringApplication.run(HelloWorldHazelcastApplication.class, args); + } + +} diff --git a/hazelcast/apps/hello-world/src/main/resources/application.yml b/hazelcast/apps/hello-world/src/main/resources/application.yml new file mode 100644 index 0000000..fd7af28 --- /dev/null +++ b/hazelcast/apps/hello-world/src/main/resources/application.yml @@ -0,0 +1,47 @@ +server: + port: 8081 +spring: + application: # Application-Info for the Info-Actuator + name: "@pom.artifactId@" + boot: + admin: + client: + url: "http://spring-boot-admin-member-1:8080" # use docker compose internal service name to access sba server + instance: + # if admin server should talk to hello through proxy, the following properties could be used, + # see https://docs.spring-boot-admin.com/current/client.html#spring-boot-admin-client + #health-url: "http://host.docker.internal:8888/hello/actuator/health" + #management-url: "http://host.docker.internal:8888/hello/actuator" + #management-base-url: "http://host.docker.internal:8888/hello" + #service-url: "http://host.docker.internal:8888/hello" +management: # Actuator Configuration + endpoints: + web: + exposure: + include: "*" + endpoint: # Health-Actuator + health: + show-details: always + info: # Info-Actuator + java: + enabled: true + os: + enabled: true + build: + enabled: true + env: + enabled: true +info: # Application-Info for the Info-Actuator + group: "@pom.groupId@" + artifact: "@pom.artifactId@" + description: "@pom.description@" + version: "@pom.version@" + spring-boot: "@pom.parent.version@" + # Tags for the Spring Boot Admin UI + tags: + spring-boot: "@pom.parent.version@" +logging: # Logging-File for the Logfile-Actuator + file: + name: "hello-world.log" + level: + ROOT: debug diff --git a/hazelcast/apps/hello-world/src/test/java/de/codecentric/helloworld/hazelcast/HelloWorldHazelcastApplicationTests.java b/hazelcast/apps/hello-world/src/test/java/de/codecentric/helloworld/hazelcast/HelloWorldHazelcastApplicationTests.java new file mode 100644 index 0000000..dc0a420 --- /dev/null +++ b/hazelcast/apps/hello-world/src/test/java/de/codecentric/helloworld/hazelcast/HelloWorldHazelcastApplicationTests.java @@ -0,0 +1,13 @@ +package de.codecentric.helloworld.hazelcast; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class HelloWorldHazelcastApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/hazelcast/apps/spring-boot-admin/.gitignore b/hazelcast/apps/spring-boot-admin/.gitignore new file mode 100644 index 0000000..b18abdf --- /dev/null +++ b/hazelcast/apps/spring-boot-admin/.gitignore @@ -0,0 +1,5 @@ +target +.idea +*.iml +*.log +*.gz diff --git a/hazelcast/apps/spring-boot-admin/Dockerfile b/hazelcast/apps/spring-boot-admin/Dockerfile new file mode 100644 index 0000000..7940f0a --- /dev/null +++ b/hazelcast/apps/spring-boot-admin/Dockerfile @@ -0,0 +1,8 @@ +# https://hub.docker.com/_/eclipse-temurin/ +FROM eclipse-temurin:21 + +VOLUME /tmp + +COPY target/app.jar /opt/app/app.jar + +CMD ["bash", "-c", "java $JAVA_OPTS -jar /opt/app/app.jar"] diff --git a/hazelcast/apps/spring-boot-admin/build.sh b/hazelcast/apps/spring-boot-admin/build.sh new file mode 100755 index 0000000..4d4d3ab --- /dev/null +++ b/hazelcast/apps/spring-boot-admin/build.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# Build App +mvn package +# Build Docker Image +docker build --tag spring-boot-admin-hazelcast . diff --git a/hazelcast/apps/spring-boot-admin/pom.xml b/hazelcast/apps/spring-boot-admin/pom.xml new file mode 100644 index 0000000..1826730 --- /dev/null +++ b/hazelcast/apps/spring-boot-admin/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.5.6 + + + de.codecentric + spring-boot-admin-hazelcast + 1.0.0-SNAPSHOT + spring-boot-admin-hazelcast + spring-boot-admin using hazelcast as cluster + + + 17 + 3.5.5 + + + + + org.springframework.boot + spring-boot-starter-web + + + de.codecentric + spring-boot-admin-starter-server + + + + com.hazelcast + hazelcast + + + + + + de.codecentric + spring-boot-admin-dependencies + ${spring-boot-admin.version} + pom + import + + + + + + app + + + org.springframework.boot + spring-boot-maven-plugin + + + repackage + + repackage + + build-info + + + + + + + + diff --git a/hazelcast/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/hazelcast/SpringBootAdminHazelcastApplication.java b/hazelcast/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/hazelcast/SpringBootAdminHazelcastApplication.java new file mode 100644 index 0000000..5bbb166 --- /dev/null +++ b/hazelcast/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/hazelcast/SpringBootAdminHazelcastApplication.java @@ -0,0 +1,48 @@ +package de.codecentric.springbootadmin.hazelcast; + +import com.hazelcast.config.*; +import com.hazelcast.spi.merge.PutIfAbsentMergePolicy; +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +import static de.codecentric.boot.admin.server.config.AdminServerHazelcastAutoConfiguration.DEFAULT_NAME_EVENT_STORE_MAP; +import static de.codecentric.boot.admin.server.config.AdminServerHazelcastAutoConfiguration.DEFAULT_NAME_SENT_NOTIFICATIONS_MAP; +import static java.util.Collections.singletonList; + +@SpringBootApplication +@EnableAdminServer +public class SpringBootAdminHazelcastApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringBootAdminHazelcastApplication.class, args); + } + + @Bean + public Config hazelcastConfig() { + // This map is used to store the events. + // It should be configured to reliably hold all the data, + // Spring Boot Admin will compact the events, if there are too many + MapConfig eventStoreMap = new MapConfig(DEFAULT_NAME_EVENT_STORE_MAP).setInMemoryFormat(InMemoryFormat.OBJECT) + .setBackupCount(1) + .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMergePolicy.class.getName(), 100)); + // This map is used to deduplicate the notifications. + // If data in this map gets lost it should not be a big issue as it will atmost + // lead to + // the same notification to be sent by multiple instances + MapConfig sentNotificationsMap = new MapConfig(DEFAULT_NAME_SENT_NOTIFICATIONS_MAP) + .setInMemoryFormat(InMemoryFormat.OBJECT) + .setBackupCount(1) + .setEvictionConfig( + new EvictionConfig().setEvictionPolicy(EvictionPolicy.LRU).setMaxSizePolicy(MaxSizePolicy.PER_NODE)) + .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMergePolicy.class.getName(), 100)); + Config config = new Config(); + config.addMapConfig(eventStoreMap); + config.addMapConfig(sentNotificationsMap); + config.setProperty("hazelcast.jmx", "true"); + + return config; + } + +} diff --git a/hazelcast/apps/spring-boot-admin/src/main/resources/application.yml b/hazelcast/apps/spring-boot-admin/src/main/resources/application.yml new file mode 100644 index 0000000..8ffd2fa --- /dev/null +++ b/hazelcast/apps/spring-boot-admin/src/main/resources/application.yml @@ -0,0 +1,55 @@ +spring: + application: # Application-Info for the Info-Actuator + name: "@pom.artifactId@" + +management: # Actuator Configuration + endpoints: + web: + exposure: + include: "*" + endpoint: # Health-Actuator + health: + show-details: always + info: # Info-Actuator + java: + enabled: true + os: + enabled: true + build: + enabled: true + env: + enabled: true +info: # Application-Info for the Info-Actuator + group: "@pom.groupId@" + artifact: "@pom.artifactId@" + description: "@pom.description@" + version: "@pom.version@" + spring-boot: "@pom.parent.version@" + # Tags for the Spring Boot Admin UI + tags: + spring-boot: "@pom.parent.version@" +logging: # Logging-File for the Logfile-Actuator + file: + name: "hello-world.log" + +# Hazelcast configuration for cluster and maps +hazelcast: + config: + map: + eventStoreMap: + in-memory-format: OBJECT # Data is stored as Java objects in memory + backup-count: 1 # One backup copy of the data is kept in the cluster + merge-policy: + class-name: com.hazelcast.spi.merge.PutIfAbsentMergePolicy # Merge strategy: only add if not present + batch-size: 100 # Number of entries per merge batch + sentNotificationsMap: + in-memory-format: OBJECT # Data is stored as Java objects in memory + backup-count: 1 # One backup copy of the data is kept in the cluster + eviction: + eviction-policy: LRU # LRU: least recently used entries are evicted + max-size-policy: PER_NODE # Maximum size per cluster node + merge-policy: + class-name: com.hazelcast.spi.merge.PutIfAbsentMergePolicy # Merge strategy: only add if not present + batch-size: 100 # Number of entries per merge batch + properties: + hazelcast.jmx: true # Enable JMX integration for monitoring diff --git a/hazelcast/buildAndRunAll.sh b/hazelcast/buildAndRunAll.sh new file mode 100755 index 0000000..df59a3e --- /dev/null +++ b/hazelcast/buildAndRunAll.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +cd apps/spring-boot-admin +./build.sh +cd ../.. + +cd apps/hello-world +./build.sh +cd ../.. + +docker compose up -d diff --git a/hazelcast/docker-compose.yml b/hazelcast/docker-compose.yml new file mode 100644 index 0000000..45683eb --- /dev/null +++ b/hazelcast/docker-compose.yml @@ -0,0 +1,26 @@ +services: + hazelcast: + image: hazelcast/hazelcast + ports: + - "5701:5701" + restart: always + + hello-world: + container_name: hello-world-hazelcast + image: hello-world-hazelcast + + spring-boot-admin-member-1: + container_name: spring-boot-admin-hazelcast-member-1 + image: spring-boot-admin-hazelcast + ports: + - "8080:8080" + environment: + SPRING_BOOT_ADMIN_UI_PUBLICURL: http://localhost:8080 + + spring-boot-admin-member-2: + container_name: spring-boot-admin-hazelcast-member-2 + image: spring-boot-admin-hazelcast + ports: + - "8090:8080" + environment: + SPRING_BOOT_ADMIN_UI_PUBLICURL: http://localhost:8090 \ No newline at end of file From be975d24033672de0ad18b3aae0b3b7d4e56613d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Ko=CC=88ninger?= Date: Sun, 21 Sep 2025 09:37:24 +0200 Subject: [PATCH 2/5] Refactor application configuration and update dependencies for Hazelcast integration --- hazelcast/README.md | 2 +- hazelcast/apps/spring-boot-admin/pom.xml | 14 ++++++++- .../SpringBootAdminHazelcastApplication.java | 14 +++++++-- .../src/main/resources/application.yml | 29 +++++-------------- hazelcast/architecture.svg | 3 ++ hazelcast/docker-compose.yml | 8 ----- 6 files changed, 35 insertions(+), 35 deletions(-) create mode 100644 hazelcast/architecture.svg diff --git a/hazelcast/README.md b/hazelcast/README.md index c3a8bc4..f90050d 100644 --- a/hazelcast/README.md +++ b/hazelcast/README.md @@ -3,7 +3,7 @@ - http://localhost:8080 -> Spring Boot Main Application - http://localhost:8090 -> Spring Boot Replica Application -![img.png](img.png) +![Architecture](architecture.svg) ## Prerequisites diff --git a/hazelcast/apps/spring-boot-admin/pom.xml b/hazelcast/apps/spring-boot-admin/pom.xml index 1826730..b2b158f 100644 --- a/hazelcast/apps/spring-boot-admin/pom.xml +++ b/hazelcast/apps/spring-boot-admin/pom.xml @@ -17,12 +17,17 @@ 17 3.5.5 + 2025.0.0 org.springframework.boot spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter de.codecentric @@ -43,7 +48,14 @@ pom import - + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + diff --git a/hazelcast/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/hazelcast/SpringBootAdminHazelcastApplication.java b/hazelcast/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/hazelcast/SpringBootAdminHazelcastApplication.java index 5bbb166..d5c47fb 100644 --- a/hazelcast/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/hazelcast/SpringBootAdminHazelcastApplication.java +++ b/hazelcast/apps/spring-boot-admin/src/main/java/de/codecentric/springbootadmin/hazelcast/SpringBootAdminHazelcastApplication.java @@ -15,9 +15,9 @@ @EnableAdminServer public class SpringBootAdminHazelcastApplication { - public static void main(String[] args) { - SpringApplication.run(SpringBootAdminHazelcastApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(SpringBootAdminHazelcastApplication.class, args); + } @Bean public Config hazelcastConfig() { @@ -37,11 +37,19 @@ public Config hazelcastConfig() { .setEvictionConfig( new EvictionConfig().setEvictionPolicy(EvictionPolicy.LRU).setMaxSizePolicy(MaxSizePolicy.PER_NODE)) .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMergePolicy.class.getName(), 100)); + Config config = new Config(); config.addMapConfig(eventStoreMap); config.addMapConfig(sentNotificationsMap); config.setProperty("hazelcast.jmx", "true"); + // network and join configuration (simple defaults good for local/dev) + NetworkConfig network = config.getNetworkConfig(); + network.setPort(5701).setPortAutoIncrement(true); + + JoinConfig join = network.getJoin(); + join.getMulticastConfig().setEnabled(true); + return config; } diff --git a/hazelcast/apps/spring-boot-admin/src/main/resources/application.yml b/hazelcast/apps/spring-boot-admin/src/main/resources/application.yml index 8ffd2fa..7667dfa 100644 --- a/hazelcast/apps/spring-boot-admin/src/main/resources/application.yml +++ b/hazelcast/apps/spring-boot-admin/src/main/resources/application.yml @@ -1,6 +1,13 @@ spring: application: # Application-Info for the Info-Actuator name: "@pom.artifactId@" + cloud: + discovery: + client: + simple: + instances: + hello-world: + - uri: http://hello-world-hazelcast:8081 management: # Actuator Configuration endpoints: @@ -31,25 +38,3 @@ info: # Application-Info for the Info-Actuator logging: # Logging-File for the Logfile-Actuator file: name: "hello-world.log" - -# Hazelcast configuration for cluster and maps -hazelcast: - config: - map: - eventStoreMap: - in-memory-format: OBJECT # Data is stored as Java objects in memory - backup-count: 1 # One backup copy of the data is kept in the cluster - merge-policy: - class-name: com.hazelcast.spi.merge.PutIfAbsentMergePolicy # Merge strategy: only add if not present - batch-size: 100 # Number of entries per merge batch - sentNotificationsMap: - in-memory-format: OBJECT # Data is stored as Java objects in memory - backup-count: 1 # One backup copy of the data is kept in the cluster - eviction: - eviction-policy: LRU # LRU: least recently used entries are evicted - max-size-policy: PER_NODE # Maximum size per cluster node - merge-policy: - class-name: com.hazelcast.spi.merge.PutIfAbsentMergePolicy # Merge strategy: only add if not present - batch-size: 100 # Number of entries per merge batch - properties: - hazelcast.jmx: true # Enable JMX integration for monitoring diff --git a/hazelcast/architecture.svg b/hazelcast/architecture.svg new file mode 100644 index 0000000..14755d5 --- /dev/null +++ b/hazelcast/architecture.svg @@ -0,0 +1,3 @@ + + +
monitors
monitors
Hazelcast 
Cluster
Hazelcast...
Spring Boot Admin
Instance 1
Spring Boot Admin...
monitors
monitors
Spring Boot Admin
Instance 2
Spring Boot Admin...
 Service
Spring Boot
Service...
\ No newline at end of file diff --git a/hazelcast/docker-compose.yml b/hazelcast/docker-compose.yml index 45683eb..c733a02 100644 --- a/hazelcast/docker-compose.yml +++ b/hazelcast/docker-compose.yml @@ -1,10 +1,4 @@ services: - hazelcast: - image: hazelcast/hazelcast - ports: - - "5701:5701" - restart: always - hello-world: container_name: hello-world-hazelcast image: hello-world-hazelcast @@ -22,5 +16,3 @@ services: image: spring-boot-admin-hazelcast ports: - "8090:8080" - environment: - SPRING_BOOT_ADMIN_UI_PUBLICURL: http://localhost:8090 \ No newline at end of file From 1f167435150c6ca8b1a58291f74727e4d4f401b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Ko=CC=88ninger?= Date: Sun, 21 Sep 2025 09:41:53 +0200 Subject: [PATCH 3/5] Update architecture diagram format from SVG to PNG in README --- hazelcast/README.md | 2 +- hazelcast/architecture.png | Bin 0 -> 16626 bytes hazelcast/architecture.svg | 3 --- 3 files changed, 1 insertion(+), 4 deletions(-) create mode 100644 hazelcast/architecture.png delete mode 100644 hazelcast/architecture.svg diff --git a/hazelcast/README.md b/hazelcast/README.md index f90050d..ac8b7a6 100644 --- a/hazelcast/README.md +++ b/hazelcast/README.md @@ -3,7 +3,7 @@ - http://localhost:8080 -> Spring Boot Main Application - http://localhost:8090 -> Spring Boot Replica Application -![Architecture](architecture.svg) +![Architecture](architecture.png) ## Prerequisites diff --git a/hazelcast/architecture.png b/hazelcast/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec71591a5654fe5c7d460853841413e62c2297f GIT binary patch literal 16626 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 - -
monitors
monitors
Hazelcast 
Cluster
Hazelcast...
Spring Boot Admin
Instance 1
Spring Boot Admin...
monitors
monitors
Spring Boot Admin
Instance 2
Spring Boot Admin...
 Service
Spring Boot
Service...
\ No newline at end of file From 70655be17068422451791f9e4e7da699f0cf57f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Ko=CC=88ninger?= Date: Sun, 21 Sep 2025 09:48:02 +0200 Subject: [PATCH 4/5] Update architecture diagram format from SVG to PNG in README --- hazelcast/architecture.png | Bin 16626 -> 16242 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hazelcast/architecture.png b/hazelcast/architecture.png index 1ec71591a5654fe5c7d460853841413e62c2297f..e6010a7e45456ed354f5cbdcf3705d4662e817ac 100644 GIT binary patch literal 16242 zcmajGby(D0`|b@x4M+^#Fm#HPbPU}{iJ&MgAc%BJcY`1x9U>*tE!`kUD%~AQh&1n- z`?;U}d-vYQd%XX6FwV@kX03Id*XKM}gqEff9u5@_3JMCIin6>83JPi=_=>A*^p}J;5xxp{I6sc$)mO9< zjNKS>p0eShV#e=ImCj}R-P)XNeyi5Z6q`|D%e0uYtJdfo)Ka_%`|sJt+P1Au>)}+4 zg>b4Sa)@j@!}lU>Ch?PDfrB1$V-iYH`O|mS=x~lp@|);evSH(H5_!45vIr=}1lQvd zy~;dSl-vX<^y5N{OUj!V-!0*%-Rn%brQpiXz6me=wEgn+Wt{YF!*>{jL(czJu`T~j zyC@u+WIfm)<^Vn2of>*tW1YJr9v14W6M{0~bt-;IZyA}2U(8-~c*1hCjtx=Y8oRSD|M%1|h%DS32II3FF4a;1mjYg+pgSd`TBl?n|3*M9 zI3SFL+;1IA>X5JDPY7Xr8@uU`o1M^5Yh|J94B%Y}pPg4#|GfJSylZ(pr@ipcks5;# z!}kgKdT^5&aZtf^1S2@XnLa`+lNrF@2IwMjSY4TI*T-rUq<*^1+OUbQ1QVC} z-Q9kCwV%poZuH{sqW7EPaV1rkE2Z}auZ5HTHl zZe>~tFM8xZcNtR zgJ5OIJ@VP@vHVQ*sY-Jt@xSxVuiI|Us>Oe`Ok4;2{a{;OSv@K>*W`Av+v$6CAbho7 zJvz)*oBpPCX7|UJU(7_z8Q|G2gc8u(UkBM8w%z%r9B${w2{8*7)aJ^C5z$Q7+D!EJ ztQmx=@icb#qzPEXHv3-gd@3)`+M=|S1QVss?cgbS-K#0i=9{y*Oy=r?y1CgItL)cH zq$;W+`29@dQ4d7BsaOPA6oU$TbMFZo!u z!U71G@A{eI8pIs$Hd2hAc7@_Szn-&i{uckfh^--k+$MiT(W4|Ioa3=_DGeB2vQWKp zqnQOc#ZMVdk?%ghq;*p+0N%L$~fzn8b&dNJ*T zN$EiJqs8+CD%6REM`fYR?14+c+fEVPc()uxkP%$xab)(a#ya8MJbM&BHo;bt%Z?fD z?YDH{`X9!A3vP>^R&rujD`E8W$)|nvel70`?VEO3PgH^hCn;q=>lG(zTg~2MFsVtZ z8cgQ05;+WtZICeb+(-r^_fumF1NpTBxsgMFqdK~$`|jjGJBlC8M38!v)aiG*I+G5F zu!2`Nq0-L=$2Gg#>x;8);ztzcS_Hd?Thw^M#~R7Rd>?Ual9|A4f(Dq!iuNWD2Ax!x zcI{6;dsEv*AU&@l>N9Xfm?oRfXRc`7bWi7ZSHq&~kLPtRJ34bdC*M5h+Zix&jU4wY z`(_JN-p#|m`Kxz7lDgG6SWSW8>+D;Esk*V;{W6_RNjw*}$o;Uw$jY_e_ve2ow zf374*|MoQD7wLr6?2^JpORMyVZfl)n=( zL^KRhs{eT(JZ)FwBiwyuhImDX_|MOq>ul@WMB;*1C8qCc>=$NJ8K2!XbYK+so=DWc zSAdWAEO!Jo*5=2G4GPUz5SQwHiuH~?L-XW$RyV9c>Xbu^j;?ZvgYA2hO2tfH*cY$f zz-G7ix!z3`xAxUk=TO4C=7`^2F02Ny`T94;Y^Y9mV1aG2=}cf!I<{6ePJdmO)+`oB zB<;Ol8CH24`WF?8W|_JA?&g=D#BAH$?OyqcZ|4db&x@*SdG!HV{R^-F!UzMbvfoaB zcCDz>`Re5=myYkmh-$oNRYa) zvSE^6KSNkUk$S>G(_Z=EVv3Z{s=S!YL_C6-rEs`G>2eJR+c{?a@^pt7=hct$%u4(a zEDNlii&=MH>Ub*bxIWJ;ay~DSc}7J|S^sbj>>N%tFk|xIS|r_GSV7zq24%Ut8lk7U zB$%?9gC=h41{f2<11j0JWSO$e;(cNDa)&b zLDJFh?}B^tL*AM*52?HBlT7A5J!)I&GAzD>^W&ih#CFPo*4;2U*5eS+Z zRDRF%l`z`09G?Ke$F;8>m+E|s)D8drBbNQ_>Q|e4B#rW87~55g1B_{<%vSq}-)Cr^ zJX73xaEeP-eK{V>O_!un*L|aFi;IZV#E`OMQcyQJAMlK` zPbh+TR)|^Ed4&>)MkFW9ZxJ|SN5jjHL@ti^AE{JoCvScIyEtc%EwgGu6>U>@P`{ML zY@h$78T&e?8_|>_mw;-CCr!1x%r1*?GN{Pm_FK3|l>dB^zBs(@Qise|Qnyf@Z?bcs zYcx(whi*^Z_X;W}+KqfN?F2TspXFk*Lo#kT;bTNqV=$8ugt6`GIskXSMYi# zU4gQV&}Q4l`)5?PkK#2N8YZ)^83Gem=3dul>Z-Eu&<_cyk|uLLc8Vme>>hm&eqcLK z-I7nRekOE^ZhD{JGGL}Z?R@sFP>&g%Thqh|sv(@j4KE8OFT_;~@eeQ7tKdk0u~S1- zX=zczu`N-jlk@txpR-@^C-+R!?`iyu;(D&Bnv9DMCLQ9j=fA3>7^sqDDlrxkq@IDI zR(G4j%~T}{2epwp6plXV4-SmG%ux&^%uG}}5Q})aaz$!ZUR+xDMo-09t9%&?<@1VL zR%H;5A&94hsba1r&plQ`9E+ctd-X4Ee~273?}S!s6s2Ru%oXPCyS!&GQ)Rp4d)p{;M}Tez)esDVrzTB2W!+gj)D z^=Ok9bnwdqv6`vqSl+@4e#xZ8FGeutqJtRINr zb=;EaV%@&5g9Hiy$j9PX#vR>~iN zRk+b7Vo!V+-}DmtPBB&L_~vAV(`+!TzDx)_?g~^$zG4hNGhsMH+#QB>_33Qh`H?$K zZ^`4*`2a5p?VeX6Wb7hKQ2wq}2y^ei7qD<-ix&_ic96g+~o_0Y67An4L<-cjjUrCATAYd4yBK!$P8+g1@m-PRVHT3zsvVUVAnT1`Nyqj`09@VTPmJFRuN3%U#ff$UJqpEu9Gu3vbGhKb9|OcmW} z_OL}Z1joWsSxkw}vtZ@#$*44SL9l`=_fv#O#>QmHV=mjD6}gVXJwX2b8prU1KPn5Y zenEOV`sXUp=uOTn8#)ly>=7us_GRR`4*uPpr?ig0rK`f#MP5QIF;-pnroW|@cfDT( z#XOpcGu}<>Jz_jSMC3IY<64>zJa?rljGC-N6pyS2yDaqG5A!(5m+X(Vge>H#j+OWV zYh=PEd$1d1+I$+w`8K+q=~IUwaA5s~jNsrAVGnaGhu(*jEP`ri`#mQ>yxOKC5F@li zh=`Qv9$Ej)qwb_R-A9s^YkhITB(x%%5IpJF>g}o0l%b&$2{r~9As{y6a!CTb#GY`+ z%LUI9(27lp_+jTcVXIv`$YaPGbc%1$E2xX!MNT2WoKy`$(R~ecgLh>CyCht6MJ3g5 zbd2^~!TFZNm{+qWlJs@d{W_@EPAe3ZP?r#T`2hJ~V34#R#AO7BbA^`1e_9zh8nU%% zSJNW>&+BDrurl14<~GyFn5=Y$jNDRw(B4<;P*;!qP-q4|qKpFC8Fc?5ZvK0yHCf-^ zA4`lLuy`KS{@^bSq%=scH1DJGcIK~mRiZ=32saz-O36~uxIJHs`)o5&*vsSP_PsiL z4QMadP`;V_cc4^=*UsV7iit=I$>wcF33f}t&caPJLu;l=9t#Y&<=jSHq=4RI29&@R zA%s(~(A8s5j5cvy%>>`kUYK<7_?#7(*ig+`+oei?9>)%7d4Xv6a-+sXYtgleq0kTf z=}LRkpKT2ot!Jt}3cUOv5ThqI7>l5C23;1R59w>n2ovWr$F<(jsZDS(OEb7#xc3zK zDp!Z?ugPC{bfg9BjDL)(lu3|e&iEuJ;kH_RMEGYh<%QS4ZwZ@^*(m?A0IMI8Zv9{l zvtrBksagQCar&#bJ5mu7rX2HpJ=Ff7))N%5&@8RCd0a#Sby)TvBu9$2H?;_Z;Dg;JEg4hk$c>THx)n_A% zX>h}2w`F7lT@n~aB~H}u9ezQ55H4m*RT{a83qdyEctm^wfkqI*aA_`XJ}lizYUy){ zH;WQomsP*Q^iy-$#1o&L2P+fIU(KxJl$u00b1fPpbpWM6M7 z2-(VTjx{|Cv5^)$^r_~n)c^31bkzw#&H9ozCjzeuOy_1BsZO814`hW_21{Olrk=#0 zEh|P-tYBGnlbYwL8@_Oxv9za+{=-`+@mALC0FR>@^pc@Tl#f0dIx~Lp7-uhsDWm^$ zr=Ah12pOKwPzU(a0vwMlt3SI_&K=4R%b55cJ}%Y2zeRq1B=O*U`w-OU-RW?gsOjib zNOz>bgs=LV{Z)k}Kyp$xy2e1Ea-U*2*3QLvAb|KfK?g+FF29tT4ov7X-N+0 zb|{bwihKAuF_FkrrtcDW1LG#qaa540;AiVwZ*wX%BE{nX{|mW|Q@vPS1Q#JjylOHh zOFmW4vAlR(9E#p)6vnm;lo=KEKj6sff!T3_^7>;>>;NbfUd(XB(2=aSpcsWOd;GXQ zO~+!FUshk`&*8+UIPKBWFRf1}yi^p#`~<8nV{a9t^V={IV0;*3-@n3?c_Bwd_WAE$ zaM8Z>8T`QZDaa%iK_XmN zE8hnB;$V+vX7+BPvX9QzC=8GK<@S340uLbHsf}+}_!Ep>(A)8@+X*E)NPXUBnCRHlkcOCMgX;c!OLAS#dt$2Bp=8b)BbOm~fH5|p zy%Sx(UO>fF{JBT55kou=I*!(J-|M43xlP0I#|b_U$WKICuojhC%@c~wwm$5-!?}SJoMq%vCae^pJ%&!`PRhyHpQfSv>jdTvLZUgrd*`G)|VO16&X6l0cX; zDg(gwRAI@xYvchjV4|+qx3-l*XOXjdK^=7aGxMg!tG?=-GEwnS8>q?LZ7!l%C z?P4spcjgw+uP5g=FiA6U6;~xDNs@#X6;j6f>ynTD7Ax@*4M&uf%oTmlZ~9t!^3Dmy z_)rD9ejiltmbZV3UyJA_0a#H3nCmpY_&#sf>?IPv()9nG)O|#mNLZM5*!)XMd?QJB zSo-IK+FCsuB(!h0sq%rolRXyn1|oD`oGcKX1s)a$RaW%ic1&n^ zs*t}tT_qeobzq=1xGqwX4(m4p(jx83p1<&=&caCQliWyXKnnuVokadcv{g}2ccJxS zGhL%(?r5d>CpcSo7^0<{#P~2WlN8#W-}DXD6MQT3M~NyC&$n-0N ztD(GjI;dY9Q*3{CI`QZXeD>MU`}+q)`LUeOOjYkA6%$w@fZjp-5W8Q{l!-t2xDeLQ zj_y>#4~VaKCb*y~^1@vtxex{)YhX}&9S9C4aG$MouJ|n*rv{MT>p%vn^0a;&yjgHx zdKl{^vYBdb2MB2ONT&F+MyHK3Ac#fC%qNSqL#JNr)pO|;X_fF_%QyYgnepQVM8gZ0 z{O%T7FL$}FfEa!kI4XU2y>@*2cggQvqF-3DLn)A%??muP3zV{b!2-OuZ&)|;Py;z zNGO$U>m8py=FOnfQk$Qj`=+7cF|=?a=x*pi8?IOKh1BP6LC<50AO3T1+7`;255>GU zlAn|*M3EiBMGODL7a?&fcQO;AQmcrxKiOpv4 zYw_#z^D@Kg`4gZEO{2)}SB*+t4Fi=)Kz;_8o&o4!>{6b)@lD&nl^}V^N)7*jdiV^q z?0K`$i~_UZ9bnDoX#DqWQ86sP<#6v1NSuW&%3QXmbwg6Y|ta#x7===~K{8 zD$zIwV=Mp;y;pJpklHMO^XpQJ$kzW^^~;!(zkY=p>6^!LI&0={fkNjAcT9B=@xy&t ziUUEXKaKujjV2JQ!?x-JmN=f*jJ{w<#18^Ed^n4`_rkG5qryFUp^Md0|276rKH#nv*7WGQ->joV}LZ*k?@Ya+^t5iV>!s z#^3XHcr-(F0vj?Jvq3m6Wc|H8O`sHLFZQLXMUte4K~)7yW>NQX6~heRiNGruvwUJ; zU@d)np8qXddPx#Izz)r(qfe`34_@qFU)U@()uL{*rrVhTIbWP!E+-Z^jAHjG(~a?I zKZE3v*5{`Wc`#Fz)e2%hN~9uVJqs?>)I<-ZFrybm^J(NW*t-TXadqN*~P z4u2bs4wlT;UOU(jV=A@z^RI7~THV@Fu|#65NCxA5f##HP*`jy^=JMO1;oHA$cQe2| zS((0|q^6Wc7UfKFcQhqL<8tTWM!`&T#w17qmImng{21A$m>+9^zLVj=03o!%35#~av-m&0fH z3FqE-(4h|wLsFePi|c~qRAh-^BW0+a2S!h9$JgJi>TWF#a8EgPgm1_Ve>6~N5c9ws`I z-$664-!+c0r-4KU3*NuJ$~(r2z{qAt?1m_X?K6;iHRP!4Qk;I*?vcz&Ac0rmF=)Qb zqB9R>YpVfwp^`;CN|R-d_E6SS=X2r@*z)YXBz7d)m?qZEtBQI+|1-1qSHoItC`(Wn zomYRVueoF~;CY%g@);Oq0LD=kbY*Zd6O}WMo@6khnfg3D$C~xb3QKX$+7e~KqDvJE z?zV5-AQS!=#!mgnbDiNIM4`+K$@;tGK{`y19Z@U_4Y3iGs=8?3H23|UBcpi~RXKJd z(F|I~%wXr;;!jOG5+q~>O0TBN40+Ye!V50%_}+yuqK#A9D#w$kv3BQ6 z3~p}INNvvq4Qh)LYFV}_Z$XQ2?P<98H5xigR)L z=lNSOR@lu{;f=^si@6k4N``XOM-a2kf+l!1iL}Xe?$`b<-dnR75W9xkk2NZ3|U5zjr(O}1wJ z)$7l^^FK>j2WG|ex|)cL-(e-RBjc3{5o1{mzN^coW><1r^s(x*M<1i;Q9r^UjnOEf zkn4?T&{{6SbF2?OYvl$43wnU@rVHOng@y0fO8smCPU#pYt?y;fygK6^ogYDyEfAV| zjk)_Olo2}1JMrleIn6(J*&+wjM!=VAuoep`M-(d+h)uV{N(CxPN)iE3QBi_kn>qCdn=`5&KZ;y|Jk3J(88DD3+7N1`dN7q)3||K)>Oj$52F$Qih*A)bsqO8 zdzjZ|e*zO;-mA%?1V=hztA{JlHPOaetwV5r3nGX?Ksz0K$!eP37x^iL?j&|*-FSj~ zN!BEc3Z^%K3ri$Jdi16SU)mR!S9_w4-V*~1-3M!*rsZ5TFj~$h{fMsDQkf;Edn9)i zd*wlMCC_I`^5}y_uLcL-=cl!UuaguO;$w`D1aXVo>$&M3iAnRMPw;*UVESToJ}z?9 zO^nwSZBWvF6fFao5*Jl-U)rtQ*U3J_6Hvmcs8Q7$D!+!b+3F4PJq)(Vv&!;ho#dVD zl_TI=G%2lFcckWH)ljWTA|y`#@;xmqd4|uZ(a92R-r#A-&&U8-JyP=sV}ATik=^Of zd+OEZ4SznSyl|TC7k!#gIep=ohqSR=B7)1@P(N(>|RuKC#d+SvkT&Pzrm^pYV%1XwD3 zlRXLT6^%+#!{2MbB1_9Q`NdeeC2>?@=-Z0sU1izKkOvOJT3@@k7JUSvgaG=X4KLgRPz=_u-x@&$BG=Lq7l4 zi!F_O2sxMah(`BgWIatF-$^Ahm!lLfbvfXkDnt9{l{*VJN`?u5Z+K=YHc0A$c3Jj9^xbqqYd>7*E%EZbmKvi4?_&bh?-e&WgbqZo`g_}%7$YkqM z&X^A4TVRd~FZoPVr2PHeMIb(I^1JUlXAsxDyNteW9*e?N-jPU4tZ97|^xypih|2fR zoVq9zDdmIZ$7*bJ*A#e_1sQU73}=B@XLAwCXzPHm7z$T4$k@ab1YOdrJ{mRKOFty*-D zUFt?YsjWnG&v2E=aIzz@uEVV$y*b0)yib2hnH*!buA;iKa=0J&G~ZWwG#jX`bf%cA zliP0trjES(-6;OU>5R1qZVL7c3C}8~2g*=C6!Tb8uBKG`J~xu)#0Xo(!#$b_cOP0_ znE7G2LjmtNe{Hx$=nV%nioD|qYGDj7&X5|M9IWOS=fLWqen8M>=i(w&pf)*{0AVnm z95XCsRNvj6IoE%@<%962q?2O4XveKfF)SQZP-7bFw;9V*;K4ShqF?#hYpz=1b}&04 zeI7K!pd3ZuN&`U)gAs+f7`;2tkyXzK4UcfO6Xd%eT8WTXP)0Fphr{uD=$&Nw8F`GM z{xQu`u@{a55YGelks|(VfF}Az)C= zs_=9$`1g59PPq%pwQ~<&SoEN%4#%pLnfTwLytUNZ_2(O^-c$Gt@!z1lCmm%Ylf}Bv z1ZShU7J_JM#RL-9|)-X6!E`IQ807v83}hCY*lPCA4fuhb5L0=I+$-n|S*R}>x2 zX1s}i5bKb1Kec>~5<3P%zL3OF`gnq|MAog$#xy0amNlHXbjybi;W5dP{*h&t{#&jS zet^JKtGUMYvTvS7Mn ziWhFC#-dp;6QZD^>t!G1kHwR}oD%(ucE%=kdwWV3d5?P-75?&PLKe(3B8W-y$#fAo z6aJtqC!AKk%Y{yn(9=`>&4n>ecngIT^Mmna0@J)*P2Y=U16}jTxWA~4OyBZm!Z6{c zI!dEqFLH!l52I*37-yB_MyfZM8;W$B{yHl&hSVW8+8CRxk-g(btMyDH6g*mRTuM!oOD zR7Sa{$JvJBvadQ^yaoMl&R5EZGpl&I)y&%0OW{T>*1ot+EoCM&yXcgdH}Oq@4|piv zzxk`2>Z2mF*eWJQ#D+uS!>ddyx#Sf*%Y{x9hER*ap6vEBuy`@AncupvK+TF|iq|)j1|> zKxYJPek3#oLKK7G-rZL3%PaY?U6q`Tqy>6uMF5B7b>_EQF!~RQK24KxJzf0jO+CnN zZJQc8JpdU1ev$5;p>nQ?e0?aEyoJA!FP z!l{+>dunWkCQ~}R=%Xy$4>&j*qs=3;@AG0~KfuzC#X;8+k1L3c z73DNk8jbu>1el8%xWLGc+%P-EoB}biFbOlJgnUTFMF_^r;(V(UYW;;1jDUTnLLX0o zS5|3+;QIK;qFG*+<*U(t9j@R+V~BSFyhSC<00U4YYF(wavsqh>=`n#7jbeP+cJ=Op z7x5|3Bt4}*vA0x{V<$x351&Hqa04J^j$gp!Fh3&6f}nd4w8W8+d}M?`<#m<%F27EW zp_%OHLkmy>AeuIrlHP7OkvfFba{hnYuYMXxgs>3=B<^n0laQWQCw@p zFcJYNeeSP%0MZdesUNF2??aGO&1Qn@`6?mwQ>+w-VRU7?v$&pio0rpsAW)mPq_2O= zF(jZuk#vqyi}W!AF7g)MOqZpp&`RPu91}qt8MWHA*J&K3Tz4l$-f?;{5~BDmqWxk@ zxOnONV&+*FxDd7shrnb#rEEbPoiib=hvX0&*_@p1>;<>E*V7<7CiqyUClKZQ1e`)* z$dVia1__AprN5!QS&e#72c*}B$+7Caw*a#nNldwY4{SRkijwohr_x02XRguvM4PbwAZ?N1(7Oz zkd?`?Pa5ej%hpI>IR4jz+-c)h7$>7n+1#4pRW*E&bu^*-3-=K4YFrs6W?v zpn%7Z`<;@NEbR4mGRvvvv6VTlr=fV%v*AR$+xbdyBkwnhvSi^5P!c9qr}ZJ)pcErO zTr9-*%BrJnSTS|EiBoTTVo(|a=tTnA8Unw>InPsa%4jmeRA_Gi-V#ENHc2+)W-3z5 z0KD*lxGvf2&X9Wt0Ij&_kQkpMGaQ~-Y~*Z6Os}l8j9tFGXa2bq1`R_nyPhJ0Bp@DY z336{0A7yE2Szy$Uw<)a7Y$E&dKwj}bv0Rk`?7Bydz>_etP?i%Vue zX6h?V=IT=Tq(raSjG`z;Cn+!(Aq&d^R?4=!Zzv-xJ@)g7&~^|F+^=I3v>ERPmK-@i zDOb?~@eRnp#|`lMdws-$xO|al%=KV)>H^7i_45_+>NjN#KpM>s0Ju848UE&#P-;8S zCA;;}y8rY?Ma!saAOEO^cTfi+2Gg3-H!deE5g?!T6fnb#DuPIk?!L1Hkn^-ca=o5< zw|7G9!t5e1TwTZt7y$P3^9gEMXFyK`N#Yo!--i2--$sh6ybjvRy51P-IY60A0f=p@ zY>(5P>xm+#*8kCVzIw0zsQFR0l>N;*uw1H-*81jvjEwO>CgLWv<^W+^z>pvx*%aD5|2jPRPL2Gj}Tg#n&!q(Jsd=G3y|_u z<5G-ZmmqUJZ9Z%oA{3n9j$qgIga#PEa@vke!(Dw>qmW+Z0dyZc#@JL%(G8L(&<_%|wm<4h%bNy~sFOT}9&=Li>}OYMZ|5Q0w?RW_raN_U7VtDX zWYE`r(X%g=|EJ&G&1cV(&Ct__4$FwVS-`5cm2vSz$gC4;!tX%z@+UInxVk=0@EX82 ztkoI41A+k*VKt0?R-8bNKW=9?6U-`hOo-O|NgJsG3JL)la*x1&Okz>SsfySd z5X%+a!x|Czz2^C1*=FIsu~``*DcNUAJ`7}3nfkvrF+k~apQ9RX-9Z9SxaLRvY^>C! zwUX+S7oHoJTF;S&gb=9V7EEQ=!jUL@vNxB1?)Au_5kNZEK#JIv%Ds#rH{3tz1kh8; zBST?X;<)qfp65;jESgovHI3A)@9#=C6^zFY<(9;DiNoWe}ne|1D4bN;3tyr;);slyQ~B1kVj7I5{{7$y~rV zYvy{e{pqSj9ucF-2fjgqR=x_pjZDNN53qgCuJ@lXnNBni84>u?HT zM&96Urv-+FbLcJx?=qkt;|73+eRhV=;teI{%gW6cv(D8>N`JiCe<{!MZ8Wd4XF ztNw6MKM2&T&Oy3|4lX*h+qrw<6dX?zkAcHY# z-*Tkbyqyl4nL{I!t)Bgt856gHVPr&vP3N*#U6*omt!E62!s}7M| zXVi@ZV%+ae4;SVtTH^dbT&^K_{&Z&|vzX_&&{uunB48P9KpNQG<(l*64?miAg)06N zSD%UMeueXYvm)Q`U*;z9kXei0jUH55=`8 zC&sfV;A&OB8}U6~!E$Gj>DV2aLIrxSZH8wRCIOCdulqr$Nc7$@%?3njGN|e5 zLa{5xM|VSBy;%0?26AtYtp7V#1}01^+biVS1-(L==5`H)gB)R4- z&*-ZCzk}#aLCll|l<^VgU~>gUq8hjUZkmqyZ(xdvt7MV{RVjcd&4K_Cg$`Yq{_4@Z z^C%?_hO(gq({smQ93e^uon7=DB2Xd)^V9Voh4WwP#IGHzoX~8WW$oC&)$5kEmZ=@^0$*t*8e+t4sImN+#ueG zS9VxnoV<>{@z`kGR3ZD1@HK(RGKw7kGe5et8<6hu2ymR_3cp_tgFNwz-=GWY?s=Fv2Nr)}=ybiv13l9gf-wts;RTSjLyXBZzm!K~$E+=dXgd7*@Pv0T;15HJ26ce6+lE#wcEE=O$!yux-!a_8<0wGN zMGC)*xon$&;=ej(VCyJsc`kz*u&z$+w2qTVFgivPiNpSi_j7L(h2ta1KYDUrtGB?0 z5}I!RKD(B7(h|R(`pWzu><_$<78xQ6#8ZLAh|mEu%2fTp@t1g;Ch%M9K;r3}sNXI@ z+ghyn2;m0O4SYRUhqto!DQ;ueGa-WG{pmn7lbI@OlW1!F2WE7l0F?EKd?f;5gn&Ul zbGsgKBm`JZ_@o^!)Z-*NkUe=Af}Pi4&9et<1}P&#yk0o^f#nwN3#zNQC4_`a6Nq~9 zA8a^(D{lKvra#j2TZGFbvJ>X8DEGH7oI1 zteP3t>@w)Y&w)4Eo1=Cfj7=P^Q4s7rdYUR7FY6*9a89h*DsiQ&W2d*_3G7;-X{&gV zR7~>^F~m_SUCW~nx3$dR&%fvP!^+tHCud&3avacYP5wuTGw*Y2QqNO@Fs(c?O}g$r zZKXl;%z-!bx9nl(w_r^@XNbvF4lFp<)yq+nw+pU63_*iIJ68DwIuIhM>}W|6-tym!dAqoa z+RXqxBh<6JZN|R&AVa6~vaf-M{c%p{p=YI?M30 zMN^!_0E}7zX7tG^KGEPpYE?3rK1a1)6*?0bw!Armnqb&gF`@9~a<@0>%s9{SVjWv@ zMiom>r&o~In{roKtc@0wgZUyPmd?GZ}tsuLhe@a zhrvXW5S`M?oQM6GCfqsIPwusiZ>DJMsH&*XOv+C^MxMHY0b-|$+#_QeM!-~b|7nc_ zrm1LG#7_#%9v{MVOYQr8{KA;Vl_&wVn0h07VDs0Rtm7nxO$F{)i>EV_^nX(4gYA)M zo-%e6T0O0_SH(XChZE@ST3O0}0rP7UP^V}O8N183K*^0f_~9q7-gp~2B?T@S{Dl8s zx$^*83FvykJ549d$9t2-YX$d*Sxm=JPgFC0b&rv+NA*C<^i9g%cMcF&b%t|YINB52 z%oyD}a*z*wQMzkj6XrRV+|+)JiBOLK0>sJvI#*ES7$U~%P#K1F7oN_IC7r`NYtySai z5TB?V6eC%9svLCmWc3`MpOH3^S}DLpZj@l?PiZ*EkEIG^_!~rz5Q;zR)}mR431#5& zo!KWJL=tH@KE1s<(+6n)8W24X{^$TL0{!-Mt?iSw2DjMPTkwrR9D^bv54vJ*HH|IH9^7BiHr7z$vJdWSxZHj#8crASB!~|rg@M8W`q!Ofo z@^18c5#nGebE_{U(A+Ua^#|9|B$0*(5kV$g)qjCahyx;d5F0E@Y-ZZnbP7T1co_?c zcLdCWpzr8n6#3MVClb&t_aaX6EHzh8W+tA{rk}nCI=(7`6Pz!|d%NqIH9=!>6ItQo zz*y+xG4v`QJmwzQaw;}6-LyZDpkz3EbM;>yf^g4H}Wff0s0TL%y6a|6*&7TV>^obG4ZxEH=$uKg#{hrIy zDkZY@fUz*cuZQoURsxuy>;eBq(D{s$=;AYeGY_|IZR20(iTXu8p!ftV^12?fXXsyD zi~&|GhN9nq9m7c1epm+hsiMDRA0ju*5JK7G%9Ox={Q07V_fH3~P6pP5d9UnOG5<6V zdtgNfd68@XZ!bX%+5yYXXIixXzD5#D^bq@C#34NAJv6{h5gh8WHj{m=KKm_^r1|#H^E(dJ6EEin|)wAzkmM%nk=}uZZf96^q)Q0Cd3NrGJ-D1P`{iBGEMeK`ew3j_7&Hf zL@vm#&H+1FK?k4qCW#ESKm4Da;{SdRXrKS=-OizasDFv36`w|KxZduA2bM2~`^qM#{X JE^89_{{VAxX666@ literal 16626 zcma)^bzD?k`|e?=p&3GH28NXG?nXcbM5H^Vk(Ta8I-~^=M39#55D-K`QaVKGlsapC zpXYbZd(J=S`NPjMmV*BuhGK$0 zcX`&*QBa6bR25`(yitF>!fw_0HaC#(m{(-`B~0n(j{;dX?6fy3a`!IEUS@PNr4c=$ zV1UJ_P^i)Ib7M#2mA@&O_$m|4x?e4H( zKJU6xq9`yXh@k+Au3X?B48ibCyZ6}s@y*r6SyoA;jskDeKCkH&PXhS^YrHh!m9vND zhq$qr_aHGSP*Qf?XSU1T;ZN$E7XFm8X_p$-J>QvvL=w;tll8$_EP@VtM9d|4tH@2_ z_)Q*}A1W&BrQAhz^kIat8hx-FO2elVu>I(Bv=MUs=j79qdi%$s%V8u8Pb1UQtf4#s z!-)&hf4DA$xsz#GL6d(8h1sFK6*S7Sc#OG{W>CI(aO6!ugT8atg`hK_7GjB z;HoPWD+dha4OIAEj0^{nDL6pgXbLVDJp?a|1aYBODv$|=Xc*Mnr)Ais_t5__fkjC{ z;)MHYRugAaGiB(*6ZA0Mul;*C~7*U(Xs2ehiG7ZemhSs{0VD=RDA z$k=u3rvE&EMKM9*#QW)<-{TDqi2>KpLqFa7VbXbJUq5|tTgIuvf==!gC;g|g7aix` z--p8r!43@~*6xa zf<)uStPr~>@M}sbkKZ5u{yI7id}NTOam@Mqu{=~}Q1X#E4#hoST<&$qJ;frRh6=`(iidRON%~p-kP>2+B2GeK zVJb!UhR%j9L2aMeGw^uto3iQGz0rB|P*ziPowQu*b<9YvD8KS6FbASJcbYfzK0UgT z$)XLsa&@KNWNqFminZ*Gf(3sFqi%Ov5c642d$JbG-44yP8BS%(`#4=?M8!h`D|_Xc zo%`Z+#xR0|$S0XWajl=q8Bg>92k|}LK8V#jc@TsIxuuHt?JtEKX9u6!ykbJb#7lBo z_=vscw)x6yxIdmMQH^R?WBbc%CImwM-jgb7wZo*zg6QP)Jipy!mOO8{-HzLUr?uAc z0?vzuQ}0b4=p=-@&DJ}x;NIoJ)9Y{9Yu|~^5pgZr6dPCc^ztMF*VzVr|UM(p-UBi!{I;bILD%GQZcY>T?Siy(upXM9}w>EN|8}v!mcmuAyyFLjh zgkqkI@PCFfo*sRc#^s*LFbSC1kYCN_wTP&*|E3moxtSkW*}rbj+xt0-UwK?*kjG() zW7%rtt1^b82Qj&>HWFrEF0rY-+LS2SVhN{P&{`__yOft(d74D8Jw~OP+2Ua~1_+L5#15xQ_ zW#<;$LYI}A|NGv-yqtXr@D{z`&i;JEn36=0Ydx{eA?4}!@3zMp-U4_o@r7NVl}2dJ%GjLa~7QgSlAL8DWB$BIu)akvcSBKHiKu`>ZJu}8M7 zLQ8`kWqH18nGE7?ek0L>ECa5;^zS6wa?$zkqh`2)mtAeK)#tVE$pYSX*4=`xeKBOUN_fHx9wf5qxxW;H0@ZCoFeWBTHAuiM zDJM|dm0{oI)bD*)@M8UQ{*OGzpwAurpCz>Q0ukpSxLnoQPeCqfN(;pzoUQE$ym2|o z;L8yk2yU_ZyovIei>eA5M!Or*3$DrB|a*aZvXH56WL;Cwf zlh!_E>}9fMNa$_S6OV?v^K|(peSCAf63gA7n#CY~eLVTQzT!nwZ?tE~Yx-ncHT5jl z_|pLj;tgt*Qq5OCqkqoUS5y-yqF7>WH&1yv(T!6^6Dm^=U}w(LIiZp$)5}G(;S|^> zBU3UuDoLL&7WdQA8a;WlY`otC3Qy%BU_7>xzQ;)*ALSUdOqp}L9S{~{f3TnqHp9p! zJnKT2$G{WJ)U_~*t81Khi!G3JU1)ZzsgDH~PhLBwb~bc3_y1-|u?Jqjs^)U)ThXG6{>VI8*>~kdpDV#xm+<_L7d-P4MiM8vJzPSO}0B42R z-Y18f;zynyuVW@;94)IE~hI~l_x%DZVc=-qh5&+Pe3e13Pn6-(Dg1+R=NMG zgeh?7CDZSZU%@(~oLbNZ8=#~+cfrq7!0d@X*Ha~iX;;E0d`ZD=q(f!!IKE)LCDHzA zdJuewfwO6~@WJXnn?XY*lUO^Mocl6WiHuLeUE?MfGqc~=9}Y6oPqn2KmZ(gM6tEpq zm#AomC6&lB3&l0J^dGUV_lw69Yq#bHO}z(_U;y5Ezt!e*o)&nAELPm8I+e?9q29Tj z>qO~J=%(HBIAB2akEI66OS?Wc;yzBVlVkom`=4Li_P zlwH+b5e*z_TkzHj2uq|ET_XpdspZQkkSY$W+O+nR6fvAJ4AS&5?#NB~g?a8uvjKCVr8>KgH95Rs@S zEca_!!AeB4?*)wRlevC-z_strJ{cj=Gu7ZBpLhE8zZxGtdoD{WAur%CH6r%7FQ104 zk~rbLbgRh2JG~KTkFVwqB+2OTYuB;pe!QF_JB{yFrlqB=W;i~>Pt6hfHm0UteyUI} zjeOUMAw;+YmIv*fsk8yRE;PNgnnYMskd;V+J)&P27{NO4^uLMefTiN&w+5GtFy+XJ zVrAS*@tPBi^%Y*odoq!V*Sx9N7lo*g7PAE%Dp&QTs`^O!+Fx8gYc6??(J0>})%_Y) zl{mleA;Ql4x<`9T3Ix8B7s_GWsyD6x$GMu9rS_M8KK0aQ<~I*e2oAzud!p|d_Z-M{ z-6$nd(B6gfdItQSdY7|MLin^!%oWhR9MuN@}A|T(td=dH{B6-|c`#b@Iyp zaOi`>bd|-d3Q7QErXyy@1IAS9;qzto0eH6i@Ss4kx;w48{8j_IwF)bH1k%2SpYtRQ zxSH39%|7CfLW|5}o^kxlY&=_*ZNvHK&jRgs`iWZ9p3Vr|3xYTYU@Zx3Wp__`Zu43w7=ppZhEuv!!C z_r`7LoMnDzyDzh{?1Tjr#6#fl0uZX<@k06aA(s49AOf)|@iom3C<9iaS+r6MwhdkT z$mG7$1zyo75z~GMI5LlW>!A$~4<8D=n60zZYVmYzu>q@O4!X9Zz&(LG5=lprFm0z$ zO#GLx?`Pmd5Il1a4yT)Y8b>2OmA)>L@GS|R!)G-NRf1)fx%Z=qDh!^q`W%H_XTa~} zOl;B_=*Wagb+H9j^rjvr>WL%k2T|Fe@&^7fk<~YqrcC|mQX`ak@lPZoSE55MV64ajszOjIh!Y1Y8x9sP>b z^XAA`p5x(^7|3nNoFJzJN*v2K0%jlJ)jmhoJGUe1Bsf1_FEKMKIZoRn6Cec2%BzT? zz{yZU)cF(JfemPlMn;SNIMqr_W^0Ek;Zfh&DB2jAdDuhqm`jAp9;W~Ka-`c{+Zm3@ z#1V$%5BECfAB$rBYYrD3w>NXy3#VHXJrM`=jMnY8^8Q%e!VFC*^v)aq5p`25Yg(CTdJXpljD4H!{Y3M8E!M`lP;TuB|RBC`y z=ozcGW5CVD=DW{4^VLhFB-~^E@zT$}^Xy<+FLefYW5xK(cL#`-tlsyR^6zauix*xb z>c03%D{X1i;+aM%Xs zku~DACi<-<35zDFVds9mqyb66i)F(2I;7~7G55zCn!d5sFWLLi(J}8jK*OlYEV>}j z5S;uZ&fm;3CAmSV6?Yj~9#8Ob(u7p183c>KqP84~f zH`#rHw_|`%P9PNuGH7xsqf`<1RU6mC8G;mu-@2rSa+84(Yh#FUM zBRhL13(Jt?AMrfbx_!Cyj8h3?0@Lwvrk&OEx$gd!Ha3YAe3pZRpE{Uno z$(@m`LlDV2)aHpyjkem(yg$=AL8d&3h`fH?MEB9`$dfY^tUsG?dZdyV$jfn{@<6{t zHHBHX)~$zT00xC3aE8tF69m~S_rE8W-Ou2%taVTknXD7uFv*vCu?EVNjG+{kPe2=T zR;p$#>CskgpL%F-3n9L@n3#|8$H}N{W*r5_x0+eLPFA6<7)jk41O=OE`Q0J6dJaW6 z90_w?sa6k1{e4#52oSQRePTzp`F=Tb=*7s&+v?Kw3O3j#r^r@`)Lu2K5f=YKL=uwi1@~|W zzI@E4H%p?yIO%+&-dIy~B(#uc`Q^rpabuvtan2r(oX7NWt@WrU|0wYhrfoP|BFbva zK_57mkC$Hb5EXt~0vjY@)si`7jVO0gqy3>qqfK@l?WChS&1Z`gpQk#R0(M`>`2|0| zmyaaC%7m<25r0;)TNsK*S&ek<^)@%;Z6~)Wed7PcR5LPh6-IJ!mH~j@a5PI^6TL~h z{|xgSJsCDGnhTn=i@^5ascq73vfW>@y~BNPCafm)>c;QHZ@Pz zlb)xL+#^`R3|NBZE!oq`DIhzeUb7#cJ6v2}p4BpMWHyvXo%hI$ zleqr9MoN^PJeIrE#=f#T+5L2mW>8FtedYqvcI)cm=)T11cMG@e*BNTd-Tq}> z>J*eN)aae~SDi44E;9eF8OwLJ3W;m7oq`Lr&e_zDCmprh!8)MNuykL&G25=}^+v`u z#$?$8?y*k-Wp8ZTJE1}B=OO&wIjR0>&YHfAa7ZwCaIT3B+n$i_LJckSqQoF!-p2ym zLs=kujr=IWNH3pwFR|c&VzZCw6&h}@i5VtBr>>20_>t!Bf$Ue5!`IY$WmX%Zwt}tCt7^uq+lQx1|w`lj*xzdSbKoVscBgt zpsVch9!W_pIJ{JpCVmShiLNQEc$w`aFLu-F#PV{x!L9-P;tw2!cbyG9gA9P^?mWnM zVljTumA`4K-_Os>BFPXWqn72Qj6%pM2TQUH3d%5D1z3m9R91?DGWV?`dSG7YwuuG8 zcMUHXhuJ`<)hWmA1PL3->66NI%C+z*g`Er;luqmfWr>zV_a#CYC*Bmp9!~x)J{T8Q zgfkHhy6-P_scmHVs(CQah(nb0s2=D@kXe90FWKk z;KxtNk4*@Oz->|orHeeRV~UYkVJPTLZTifdtX~RVlVgE8&KQ{(1o&=+P$Y5z*ZQO6 zcxrj+945LXQkIB8!|tn3*oCK4I-_^$_UEY3(?{0}~kF%(qLXmrQOx7I~}NgJH{6P)`{Qd4k2v)!hY6BO^k zJV2D;pjC=6N#<<}O}hPjF0M(aT!ADagW!%xebf<;%+a)=29o|}V>xlv-+GMQ#{{$n z2ji9YKgMsLdb+<_mFEZ5gp4`dWox`}MCavvK{iqEG04)Nynei3Y4O?{(=dT-NV+Tq zab7NUg`!R}>Y=B*QEBANlAB2v8H_f!B>O0xQcNI4pB725Q>j5Yyp&2*dPPnB@@y{y zKu1+j0VAPVT9IO`8t5Kafig{WFF8N=#h>FEtHAv(tN?QoJ{65dlEWI?Vqz*(N29lJ zq9^7+HD$(83aY(*T)`|KftSpzkv;geTzefL-)PqMCq~cHEG;buMK^OvCfw?I{;Eud zXc@po*Ha!O+@$UUSb1kLE%~j@#z>Z2R`R_>x~m`lM;awDwd=iUnEUae(^Y3fGst^VZ&yqh&-x>m)M@Mxw=iH$Rxba%uq-KivUhCvb1gz^P!dMZ+ zi8R<2VLFvnWTdF@De!E;E0KP3UN?!Q5o3+{mMO!~yjGroP+~s_$w3dhak&T24_05R zBr_Zye&W90=(O-G+q^GkCMM0KXJX_vUI51%TZ zyf|B6Y4Q9`9PrR2;9`A+^L^WCw&VI>GGe_bmg|G`qTlH+w%eP__xN77*ZVz$4H5!^ z0hP{+tusmow9IrX?V)GC=WNKJ0pmyQH-NAG@=Fy;-smBeuJb`0a98!BmrERv%Qw(f z?}G0*Y;s*AJod)KI-+p7-m)-ybYrs&0v^N#E>h!jK3%TOGE-v_sq^00NK^7eCri*F z-Sk&y);R!=u7}WU62jF4@!ce=Pw7J;7`STTkje!16iSYDiy72L`mDck>OdCQ5UuR~UIMJU_(}m0rt=cC!LFo^&0y zm=C_oxB|h4i1MPH0OCKizudEaefFbqPnk62eaFr0%W-7k&LA_VM@#Pv3XApavi$TM zr;kJ0PEOp1YYjp3YutL(1)W<&xC)28BoDr?0J*-7ltTDaLfBcKU*8{rAv2Dsk+D9M!MV%zEdG-%-MW(8p+ZqoZhEj7bSvo7@hr#|zh?>8IgLK* zj3+fISt)#?$NM6B?cr$$SCX)6a`;|N&$2z=Tr2q_@b>!j*EOL_^DTJjB11pFRfIq1 zpw;{5_K@!jEB!;za%>40qZC_d-_wh6$>4x9SVzw@6Ab{WxYmw!0VA-J(SsfUO6pPz zwd}#ifo%F;9L_M2E{0c5^T&p5JU{5WOTtMs1?WWhX@P`Jh3;sC@~VkpG&TaOj#Q`9 zCjZ40G0w9G%I{kb)s{2Rrk&d_O06~>-nZ#y3p;b6s5HGtnMd}flJ2@b|M_*#V;kl6Aqkp=FC^3mE5iRTMtvP$8h8$g@)US23Q`U<mnCTF}oN>P|xa9Vf`B62nCDUKgMZ7v4Mxnptxg!aAC2Tt*-33OIkyH&60i ze|)~PmhDhQKTOHhd05Fg6NI?UOh@EKK4(D4~uelDjXF>ZR2{NSIY z%aD|o#?-piwv#FBoVV|Tr|krC+iU;h3FRq0GXQix07hsx-&FI>+k2o{j(Sf(s@SX< zvKpQ!ee<2`1rLd0*4JPdTEC_DqHJ+@5T2ZQe15&xVd0}kEMe%)8rcFvRR&hp)>>h& z`c@?MYppf>1|!Vz|78Jm(Sfc^%zFgYQ)~7ji_3A zI+ktV(xHwPLQD7{A~-G?{F-9hjKM)6CubmQq=L+>TF@aEjuZVpnSA|7)AOi+!c{}W z*jKM*Wsz*LIN4u%(-n8hU5=h-u8z4!1q0#xw?CYu3xp8U#wx8-HU`@$-zHrg9*@>1 zKvMvY)rFSW*ra6=A2mPV9kn+rsZ7R-zp^SxNj6eqrt%q4q4@V4Zpd@oAg;d%)RZN^ zRf4}Q-xvu{|Me}5XrK*y3c37$K}BtqSt2CWKG6B~o><#W@|(1V`w!lbJK^_ZJvXvL z%cWKpg@iQ}!bIH5kvgY@7;^rxroo-`Omo6|eAG&wCfK2JZv&M4JPb!)Ch+5qvL7sMYI1?)bjaz^3M=*<9G}PR`DA zr8^X6fA;RV{~eVU3aVk#fe)_rYG(SXJ#<>(efyucWnP(aeok_&olna5JgMld$%=ih}kNR9L4%abU^&wFn_VNRYMDb@LMh zi?nULh-el%tJ=pW&QA6FoG#lMdNAI3N8aD%QwyG#^RK$4-}JcxB36Bd)cAP$eyO2> z?FlsEv%kX@{q`h7ikNv3rIED0gOHd;ES*QK3+B?F@7(QO&cTMeJePGofQ9?T1My*W zjzhr`8hCXOxv+#IEa%Z>fq>4NFU*e6;YY*z=@#?|`RESs?=0T$#E2-y(}EW=r3($4gkFqv2Fuf2Cds z0>+CZ4yX*d_gTMSj#rMWTl`(BJsv6V6Hn+y_iGI!hsgu+C9 zwLhNZYW-w)Va|zo@DrVKMfEYzlwsGI=QvsABDu9IGpJAGP$1r^SOwmnPOg{mM)4SY zf7J}Efw@-Yy8}n_Hhg}>A z82kM_E#w(4BJS&L(d;5#*@<5CdG6=*dvg&givw|)<4F&1^(rl5vBgxB^)7ut#al_& zO6A--@zEoa93{y|yY5aD239z`Ze{fv1~!bqbfjiQ@$U5R^MsWO%P%nx|CpKmNie}8 z!r4uTQpQDaYscDJpXaY+pb>_cU^EGJvvCjxYk_?3B(mS|sRzNKiV;5~s64PnEg#dN zZlYJgpgB5$PYzN-bOZ{&gm;Bm_E?MK2w$4;eMHxw-KTU;A>2KIfUs4nM7Azu6WC=h zu!$z5?z}LefTtRp-fnO}be5RJ++0|}uyVCH+Kx9Dqv)O-gb0lQb(?iLi6k3lcM*>A zJxpGN1H7H|+&cP$V^s5L>`!K2QL}v}^Ouq3Q9qN7ah$D#m7c*_O7Unmt0xtxKWa&3 z6FX?Fm1#l~O~~rfP-VPvqNUxB-a&Zfh>k&N6)yv*Jx|5a@5UdqrPYEM z?J`dpTyuN&co`m|>?aQ#(2{8>B65ZIU z8uIZ=$(%?K6_ak}DS_`=l2j?O5juKLR@TR63AEkS z2T=L4p+P8+bcV2r=YzP;Ex#^NFH`bdynG3JFzy_p5DEXXeekBWM0W6Vmf$^brT7ne zBM3T$9uHbgn2$HGKaiYdK<;rT5VFNegvn=Se$+P3hB9xeADG1?7cvZjvsSIevp-w zB}8{QZ^qMgdG|vPaU$LAh)2!X0|ru@I{vC+PF{NEud zvGufKBiTv!)qi2g`3f-qI*nFFA-Mk%1NV+zh2){dqr)G!HyO5x)f$+ysqB@?g{ZOu zdIyj0(v`^iCs9(={OrLY2nh}xCnKqpzi_>+KWD=#!;gt@K zr_cLMC5-F4EYRYa3b%FeyO&ks9weQgbiRiKZij@Yv1#|eO!T6hMW^tMEPU=GEwa}n z(3P3~P*v&Oh!9#Zsv;=^A2#B_v4ogC)`K|{KVA|$~j!fWr`n4}F&nHsw zD~;#zWXiO-KAv?M92JbX!Fe&o4eYCbQo>=Z4^9)8ZdNa^V33A*KjkLzF5gY0stGLP6l3WJNSDPJH`k zbsI!#pTo(C21VlF)vV$Ur+eD}jLRE|S@u{8P6lvM!45< zf82n1eIBv%g8DCZTY32W;}ePz>T5r=gnts7dALj-sOTM$C8@>Z{3#N2)I7A$2o>V^ z7%2z{nubOi_;XYv^PijXCW=~8%mZybu1nxwLgW7_|bY$phiMk#YQ z7(5DCnu+Yt51%c3eEy}$b=6bhqbVo1|KEf6-R%>|>0Kn;k9kXJKqO_xylpx*oDDR0E%QgH35v64zjqh)u(=Bw6|q3dLoAS=Q>af)Tn3=Zmy>vERU+q zdYW{jc_BzPI(s*MEBOja&1WQ%C+cgEqSOXbzt;A6y8EM1tpy`9JL?SQs_oGXH97P-Z zM^w4Q zugaZtyv=O^u6v7ZeZV?atP3#rSAfE9j9a}At`kbiW*uYQP21RCXB;1D8BNoN?+k*$|x&#ccaXA5>n%P?onP$N73FU z$_Tq>;hASsH1^Crei2h@Cj$`k?yE>ApI~%pBLT-Lor@~Dd427Fw zwuvNI1bz#+y*}duB`Y*FyIS#_U%8{VZVC*!w3+bY|1u}bjlIDp3nqe@{%yO&3GY2q zQ(v^*dOi#{-Kenwt?=|*q_LBNAG0Mmb=$Z)p@3I|7n_z}t3S#iVX@C}Pr%L4-J|pg z;Dmmfpz*~k3NlMk6v}GcL4T8b#UpdKv2zJWp@42}h z{d)T$Ktnhy?T(S%Ya>A3_&l~AQh}OZsNAsmgT&>pTA?bf*J>YpPwa<=hhG9`pW#%M z5&LI}qqvc5!TY{vyPQZ9A}|c7AxS9k(PR)xop+x4O%y5qC7ejEM2MmSa$!yY|sZra#=pt6@{U}!6ZQMOaKRDwl%4> zu~3G)Er;LLCuY|!jjNW4Emf=xOuYG*1^l_WzWhYvHBZlW-Z*$%UYlGIXJ}y=J;C^1 zaPr>8NIh7P72&$KB_UmAm)U#!0fW@9tq zRKl7B)FN;I)8m1oxl{AV=WcKIlvRcibER`UwWyYUqZ23Y-9yO=ueV=Yg%pf{Q(j|q z%L{m@)iSs^|EuY}kwNaDkYzm@#n$Py z=rf>s$s2zLkhn@TG1D`#vmdG~uNVRHBdTktsQNhk@=I}|)K8@y)RRVJ$*qh4wKyD5QI0^`G-8KZ^T{Qek)z*ZyHg9_TsARgI{`~{!#56}0 zMSWHRUY%361o!iiGE9V0+~9M`ovC*zPmFyO+s`3b`!}&YbJ45RRd>DgZ?tI$*5}%4 zfwg^KBkGpktsT~S&`%{l0?VT-m6KapAKO7d(T@j&7rY#vbL57wiUI|}5t@xALhtYyGEGgYfn zz_;J9*T4MmdmDkr*w`2W>AEm=BKuN*1AhQXFWbXtHqB0l`WP88L}yj^G2M^wR&suR zehg=-Uqj*Cy-4zB{}7;?dfL^QySSfec4HeAWAA7+IvKTa-*x@(V%T)r^7X~uZFDrY5n$>)5##eeciHJkK3)v5A(lv7^2y%^%?tO# zLD2bqSHU%0`a*rEIe7_fr~{zi1`Wei!PlTUE%yh|;4gn-dmV6^9^LT)mUjP2g=jWi z6$i)?t`iWHK6vp$?w>lZs=0!1x*{WaXiADH(G1Ls%E z4nXIo)=Hi$j6R-9xWO;{(dm8eHbzq!k?v#oWKo;%$xG1I!Ja;kxB{{KEyVY19U@g1 z+R(BN%(QM6Ols;ia{4=9`k)d*z=nx>8Ku@-*Xp_U7kUe&xo*&@owZD%~lc(qlWh(5|h%6+0yt7HmnF zTPzMPT(4?TXKKHKsc`r*z}oY{&yT>*m( z^n)c@7Lp;R+b#y)zM$H@+ygdn;MBk9#jO27-W#u^+zF=J;L!W?o>Av+R*ZYRir9Lb zy5NlsLHuLWCkyC1GFQe87HBp3fHb>?H~qgh{c^CJPPqivb1+PBNu4jDajk>qP2Hu} z(h+=f=R5#PbUKPVa*pq0!x? z5y83Yg7u}aOussAe`&Xk#V6k-Qci@sxto?Cvi#y7=(4CKypv2jRtSYVu!~8-ei|mz zdOc);5Qk#C`gF(Cx$=LE`CUk3eo5bqk+_@5hcJ3u!(24gcK?fnXtyCW$7mG+!m+Lr z+leAMqpyLWXERq~Yx1nCJN|!s`L4EVN!Zi2fw}Z%W5Jd{W8}T5GHSuu0sF%|lW4!Y z?wz8(OTKjJbBLNhof^(qT_G$Kyrx$v+>5bA{| zTNCoT07W{5*Wd9=jtwN&NTOMVHWnxBgke9a(kp_KS@i1>9`-9oKmd!={Isv#YaYjT$7(>Pd6~=Up-4C(7UJ zr;Qz=4}p0+0}x%`eb=K%H_zP8UQ)Fi+tNqoG0Y#?^cp->VNvLiq|aLu#lLa0GX#|& z>Vjsh+NPMYJ^Ns!nC1^uz$u z;P*PNN8fW0x73?1H_h&wIE>LS)SdfvB<3H1$idL+i-J_hPG!O$WhlT2{-9(X1FrfK zyZ^4OHn|V7wKWCrHWDwIH3_`_M(I}YST@&xGh8OFx3)^rV4F~;QByf<0$ryB_pgM@um4U4`T09~9W5+=F;&L0UWN;cV`zxqP zOsgk0b8AH<_!-~yYIB|KrjpXVbqgF5-GuJ&+fu8C@{aZ=^sOzgf1WYmF^A_jnhq{4 zXpVI8h6Szdo5~v5-cLn~p5UHM)KxGs;sn@8sIZqKmro^eT+C2=-)SgTr z8*wNh8$X++N+G_Y3~FA%CFsOOiJ| zI8f>^8`*?Gw!34%YOe@0|GtdR21pi>2yiVXOIc)!p#1$p$J|82-W zcKGCje@<`(df{%yGQ=A?=4#!Mr5Z@5$vk2oaMxi_KG?kY9Snn-{}kPWRkJGNt8H@dJg?Wt65@=3!T4v zP{UEW?!D2!%uWmc{t}XM1f=(jbK&=&ArjsZwqP&VL)x2P=cZ{c{@2TW!5`p4)NfXP zBb{ikc@MQw%?7Ho#XJH)THT)`}R*1Y!eei+!!LlqUX zUHAXt&JS`Ke>oVMC|PmWX8-FyPovqsTD&qwM$}sh>1Sbi-Sq$Z^TU77&NRHD@o~k8o!%#TAdy^z zp1AeI&^4SW;xSE0Zz>%vXLX$gcNyptnR)3qG>hC`9XU$f6k747Me0UQK5mUB3Gi2q zCj~n%4yfzzBIPzFM7_DjIIIhm5_i(elI03Vp1E?}v{HsLjwrLr!q*uz^1APk*@~0j zFW9bL=*<;%M`u{gbAuNGnhd4wn!&%*gDpTi{B!z!zNwDvLK4h}m97VR$nXrKTbEKK z@HzE>KEa0oMMJSDVr?-AtKY?dQc#DZ%&8X~RAZ*5rL9N*Qz6am&h!%0>-7{qGBb{JPvD}s@KJ9Gp+k^3iez<|F@Ev&4-@o!>5ZU8ChT?>{2eC4aGj9(Fy zksrxbua4_}$H;`i2J@u@h3Jx%n)Em|VIo|AE!Eg*nKH7-{yPT*=-OM1K-W{HTQ&%< zLXhjgdGT;@bTkoiSG0-&`pEk!HsIrwPHI509axP(Sxq=lMgv>6|M~UI%#1|@9);U@ zEBsg6jW*a}fU+8oJckq$^TUU#is*F@MCDB%gVj*E!EVypYwUvqmm=K%uc0}`Jq`8< z*sPIP+J{#IZjf%RzdlVX>FeEnEC-9a1Bv4YpkVBseDsi_+-DH0C0SEI8wD}($gAIi zEhQ~k)&~k(ivC0@UHTMH;<)=MR!3W6|I(p)@Nk--&-l1waZ;EyDBWl6%6{*R7xn~$ zIsu!TL^wE)EZ7D1U!bb?SB)GR_-6yWkpEu5P}C;arY}>7oX< Date: Sun, 21 Sep 2025 09:52:32 +0200 Subject: [PATCH 5/5] Update architecture diagram format from SVG to PNG in README --- hazelcast/architecture.png | Bin 16242 -> 24010 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hazelcast/architecture.png b/hazelcast/architecture.png index e6010a7e45456ed354f5cbdcf3705d4662e817ac..25f390e687372ac92dfec918d5d221583d93647d 100644 GIT binary patch literal 24010 zcmeIa1z43`w>An0x)6|(6zT2`>F!WM8Wy?ePLYz75~T$s1W`azLXhr86p>JAQIL|Z zGaur8{l5L}efIh5+WWuGCE{B1na|8I$GFEm#xznxO&;qi=~W~oBrHV*nL9{G$o=5+ zI_xs|{qo^*01^@@n!Bv7yMwotjlCrj9gp)9ghqhH#gkbnccz$ZtV(p zaASA0bO%M?Io#UP@w|enldp}vJ)DkPj*p!aJYrOZo7*_LJGmj~c%;C0MMrl_d+;wP z2EWxc!7p9#my6Sci_b)W34D}vcDA>?YiXuz16r5k;}Kxz;RnTx$_iSlDs~U72MV4k0zjzdRn@=**H0#O@>>LotvHK zYzl7XaC^(MVy?3iGbdLIOV_g^FcWS%9$7k0NzexL!y|pZ3gC+)9Q1vlS%i$)#1$raPm5P|KIG(*+O0{r>m0_Xz!10`}6TdB?oV5OM6Hp zFV^wAA0RpZ-{1XfHC+EX5&u)oDcJMLI9kd}!{r@#_EH$0s=1_GnAYh;j;qG96{uu6Rel9OSuBF`EU7hSK zrJd}ZAlbLDw1RusgGH1AO2Pi3)X~WiGzE_H={PK1-7PN!^{mJl{`d4xSL8q5gTHq| z-V&T+cUK><8|N(wo-f~p+(UJtUcLSnB3}OUGQ=MO#LatN2tOBG>%W?YUjNT*E~s-Z z8~^d}Aw~JmA|$8Hc}GzHwvN588MlL*t%V(*GaJ{raQw@Cf|lON)g9qv?c@lzS8;Lz zn{>K)wwCVhKIi)b_i%Rt_5Rp9OGgVy=yZb0=bHjb6GQu6$PgN=m+ zbcCf`E!}K<;by1D8QMl?CtyQQ1({EZj!y=Z{M(KFm%DQzbLVRPyh&)!&l-S6@DGRg ze_-RzPbwQQyaL?kcIy1NUf9C_^xpnwy8l~xG@xbqTUW51o5a65KmUFqL{3&#ZWoZ{ z|6KuGbaSc({!&c;@c?-MI{9C$H2D6dbZMUJ`oC3%ERebLQmMby|9@Mx0+ckQr~mI) zE9Wx$hgwm9`&!zY!vW;x=7&1~J0Rs~<_7%(zMq<6Ggt7*8Zye#_8xAKDmh)N|C$Qu zTz>x#C?HOD9&W*NE&Z1YI9r@jM7Vr=8{7VWigizDj)yB~p z99Ag^ZUYC-!okMzq88AHW)~GN%Knz$ixS|boeA_sftAy#V*gvD`CU99EH4E;U<1Yx zSV_niz(mH>4%l)@1{ZAn2 zv$gs+==ap^{9k2ec`nfIxs(By_pIAL5HZ(9oj(!rMcIWk{ucnmV6Fe%<^CVGT)=(M z1t1IBE`YOKee@tG%+7c5RR)49P~)c$WuR3&`}V&JNS{yg{|C|+ZqT__{6nSucL37o z+xUOLjsYOe&ChvmH_uP`dGG&c>=@gHckq{rIXkBpn&ZDCjy_+&KZNeWD*R=h{;S(D zFoiSx_kX1wXHi18|kv2^~^vQLkwZ6pK|au`W5mlFG=sp+IWXk;U~=T#ZI zzb5!bTCmD^%Z731tHcZ4$=}~G8s8C}8mQe#zqcdgwR+!QY*h4KiA~9tQQ^_DHP+xO zGpoY6Hi`Qef3lXv0*5NK3w639gZ2Z@|41<1H{FsC70T`oHH?52Fj7;ZfS+ty%50Jz ztJ~Q!5~$#(ML|M}C%QO?J2XD9hZd?pnyF2JgNzIP1i7OtjHo0h%tQvlLgE6IXi
YW@P6}!xK=u}v#Zi=X@VfK8y@?HEl%|8ASbE%rX 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 TWz;GGB}j_0YBH~-OoRU)!;Ft9 literal 16242 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 JE^89_{{VAxX666@