From 591ea50d8257bb8c5f3aa1b4af6192ad47fc4078 Mon Sep 17 00:00:00 2001 From: Tuan-Dat Tran Date: Fri, 8 Nov 2024 21:38:45 +0100 Subject: [PATCH] Initial commit Signed-off-by: Tuan-Dat Tran --- .../aoi_cache_simulation-checkpoint.ipynb | 1005 ++++++++++++++++ aoi_cache_simulation.ipynb | 1025 +++++++++++++++++ note.md | 24 + 3 files changed, 2054 insertions(+) create mode 100644 .ipynb_checkpoints/aoi_cache_simulation-checkpoint.ipynb create mode 100644 aoi_cache_simulation.ipynb create mode 100644 note.md diff --git a/.ipynb_checkpoints/aoi_cache_simulation-checkpoint.ipynb b/.ipynb_checkpoints/aoi_cache_simulation-checkpoint.ipynb new file mode 100644 index 0000000..df1a99f --- /dev/null +++ b/.ipynb_checkpoints/aoi_cache_simulation-checkpoint.ipynb @@ -0,0 +1,1005 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "befdd01f-254a-409c-bcdf-fcd31b023212", + "metadata": {}, + "source": [ + "# Description\n", + "\n", + "This is a simulation of a Client, Cache, DB setup.\n", + "The client sends requests to the Cache for certain objects.\n", + "The rate at which the client sends request is ~exp(REQUEST_FREQUENCY)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "920665b8-9204-42df-ab59-1b9324387750", + "metadata": {}, + "outputs": [], + "source": [ + "import simpy\n", + "import random\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Constants\n", + "SEED = 256\n", + "CACHE_TTL = 5 # Cache TTL in seconds\n", + "CACHE_CAPACITY = 100 # Maximum number of objects the cache can hold\n", + "SIMULATION_TIME = 60 # Total time to run the simulation\n", + "REQUEST_FREQUENCY = 1 # Mean time between client requests\n", + "ZIPF_SHAPE = 1.2 # Shape parameter for the Zipf distribution (controls skewness)\n", + "\n", + "\n", + "# Set random seeds\n", + "random.seed(SEED)\n", + "np.random.seed(SEED)\n", + "\n", + "# Initialize simulation environment\n", + "env = simpy.Environment()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5cea042f-e9fc-4a1e-9750-de212ca70601", + "metadata": {}, + "outputs": [], + "source": [ + "class Database:\n", + " def __init__(self):\n", + " # Each object now has a specific refresh rate 'mu'\n", + " self.data = {i: f\"Object {i}\" for i in range(1, CACHE_CAPACITY + 1)}\n", + " self.mu_values = {i: random.uniform(1, 10) for i in range(1, CACHE_CAPACITY + 1)} # Assign a random mu for each object\n", + "\n", + "\n", + " def get_object(self, obj_id):\n", + " print(f\"[{env.now:.2f}] Database: Fetched {self.data.get(obj_id, 'Unknown')} for ID {obj_id}\")\n", + " return self.data.get(obj_id, None)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "499bf543-b2c6-4e4d-afcc-0a6665ce3ae1", + "metadata": {}, + "outputs": [], + "source": [ + "class Cache:\n", + " def __init__(self, env, db):\n", + " self.env = env\n", + " self.db = db\n", + " self.storage = {} # Dictionary to store cached objects\n", + " self.ttl = {} # Dictionary to store TTLs\n", + " self.age = {} # Dictionary to store age of each object\n", + " self.cache_state_over_time = [] # To record cache state at each interval\n", + " self.hits = {i: 0 for i in range(1, CACHE_CAPACITY + 1)} # Track hits per object\n", + " self.misses = {i: 0 for i in range(1, CACHE_CAPACITY + 1)} # Track misses per object\n", + " self.cumulative_age = {i: 0 for i in range(1, CACHE_CAPACITY + 1)} # Track cumulative age per object\n", + " self.access_count = {i: 0 for i in range(1, CACHE_CAPACITY + 1)} # Track access count per object\n", + " self.next_refresh = {} # Track the next refresh time for each cached object\n", + " \n", + " def get(self, obj_id):\n", + " if obj_id in self.storage and self.ttl[obj_id] > env.now:\n", + " # Cache hit: increment hit count and update cumulative age\n", + " self.hits[obj_id] += 1\n", + " self.cumulative_age[obj_id] += self.age[obj_id]\n", + " self.access_count[obj_id] += 1\n", + " else:\n", + " # Cache miss: increment miss count\n", + " self.misses[obj_id] += 1\n", + " self.access_count[obj_id] += 1\n", + " \n", + " # Fetch the object from the database if it’s not in cache\n", + " obj = self.db.get_object(obj_id)\n", + " \n", + " # If the cache is full, evict the oldest object\n", + " if len(self.storage) >= CACHE_CAPACITY:\n", + " self.evict_oldest()\n", + " \n", + " # Add the object to cache, set TTL, reset age, and schedule next refresh\n", + " self.storage[obj_id] = obj\n", + " self.ttl[obj_id] = env.now + CACHE_TTL\n", + " self.age[obj_id] = 0\n", + " self.next_refresh[obj_id] = env.now + np.random.exponential(self.db.mu_values[obj_id]) # Schedule refresh\n", + "\n", + " \n", + " def evict_oldest(self):\n", + " \"\"\"Remove the oldest item from the cache to make space.\"\"\"\n", + " oldest_id = max(self.age, key=self.age.get) # Find the oldest item by age\n", + " print(f\"[{env.now:.2f}] Cache: Evicting object {oldest_id} to make space\")\n", + " del self.storage[oldest_id]\n", + " del self.ttl[oldest_id]\n", + " del self.age[oldest_id]\n", + " \n", + " def refresh_object(self, obj_id):\n", + " \"\"\"Refresh the object from the database to keep it up-to-date.\"\"\"\n", + " obj = self.db.get_object(obj_id)\n", + " self.storage[obj_id] = obj\n", + " self.ttl[obj_id] = env.now + CACHE_TTL\n", + " self.age[obj_id] = 0\n", + " print(f\"[{env.now:.2f}] Cache: Refreshed object {obj_id}\")\n", + " \n", + " def age_objects(self):\n", + " \"\"\"Increment age of each cached object.\"\"\"\n", + " for obj_id in list(self.age.keys()):\n", + " if self.ttl[obj_id] > env.now:\n", + " self.age[obj_id] += 1\n", + " print(f\"[{env.now:.2f}] Cache: Object {obj_id} aged to {self.age[obj_id]}\")\n", + " else:\n", + " # Remove object if its TTL expired\n", + " print(f\"[{env.now:.2f}] Cache: Object {obj_id} expired\")\n", + " del self.storage[obj_id]\n", + " del self.ttl[obj_id]\n", + " del self.age[obj_id]\n", + " \n", + " def record_cache_state(self):\n", + " \"\"\"Record the current cache state (number of objects in cache) over time.\"\"\"\n", + " self.cache_state_over_time.append((env.now, len(self.storage)))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7286d498-aa6c-4efb-bb28-fe29736eab64", + "metadata": {}, + "outputs": [], + "source": [ + "def age_cache_process(env, cache):\n", + " \"\"\"Process that ages cache objects over time, removes expired items, and refreshes based on object-specific intervals.\"\"\"\n", + " while True:\n", + " cache.age_objects() # Age objects and remove expired ones\n", + "\n", + " # Refresh objects based on their individual refresh intervals\n", + " for obj_id in list(cache.storage.keys()):\n", + " # Check if it's time to refresh this object based on next_refresh\n", + " if env.now >= cache.next_refresh[obj_id]:\n", + " cache.refresh_object(obj_id)\n", + " # Schedule the next refresh based on the object's mu\n", + " cache.next_refresh[obj_id] = env.now + np.random.exponential(cache.db.mu_values[obj_id])\n", + " \n", + " cache.record_cache_state() # Record cache state at each time step\n", + " yield env.timeout(1) # Run every second\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "687f5634-8edf-4337-b42f-bbb292d47f0f", + "metadata": {}, + "outputs": [], + "source": [ + "def client_request_process(env, cache):\n", + " \"\"\"Client process that makes requests for objects from the cache.\"\"\"\n", + " while True:\n", + " # Use numpy's exponential distribution for request interval\n", + " next_request = np.random.exponential(REQUEST_FREQUENCY)\n", + " yield env.timeout(next_request)\n", + "\n", + " # Use numpy's Zipf distribution to select object ID, reroll if out of bounds\n", + " while True:\n", + " obj_id = np.random.zipf(ZIPF_SHAPE)\n", + " if obj_id <= 100: # Ensure obj_id is within range [1, 100]\n", + " break # Valid obj_id, exit loop\n", + " # If obj_id is out of bounds, reroll (continue the loop)\n", + " \n", + " print(f\"[{env.now:.2f}] Client: Requesting object {obj_id}\")\n", + " cache.get(obj_id)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c8516830-9880-4d9e-a91b-000338baf9d6", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.05] Client: Requesting object 82\n", + "[0.05] Database: Fetched Object 82 for ID 82\n", + "[0.07] Client: Requesting object 13\n", + "[0.07] Database: Fetched Object 13 for ID 13\n", + "[1.00] Cache: Object 82 aged to 1\n", + "[1.00] Cache: Object 13 aged to 1\n", + "[1.00] Database: Fetched Object 82 for ID 82\n", + "[1.00] Cache: Refreshed object 82\n", + "[1.00] Database: Fetched Object 13 for ID 13\n", + "[1.00] Cache: Refreshed object 13\n", + "[1.71] Client: Requesting object 11\n", + "[1.71] Database: Fetched Object 11 for ID 11\n", + "[1.97] Client: Requesting object 1\n", + "[1.97] Database: Fetched Object 1 for ID 1\n", + "[2.00] Cache: Object 82 aged to 1\n", + "[2.00] Cache: Object 13 aged to 1\n", + "[2.00] Cache: Object 11 aged to 1\n", + "[2.00] Cache: Object 1 aged to 1\n", + "[3.00] Cache: Object 82 aged to 2\n", + "[3.00] Cache: Object 13 aged to 2\n", + "[3.00] Cache: Object 11 aged to 2\n", + "[3.00] Cache: Object 1 aged to 2\n", + "[4.00] Cache: Object 82 aged to 3\n", + "[4.00] Cache: Object 13 aged to 3\n", + "[4.00] Cache: Object 11 aged to 3\n", + "[4.00] Cache: Object 1 aged to 3\n", + "[4.00] Database: Fetched Object 13 for ID 13\n", + "[4.00] Cache: Refreshed object 13\n", + "[4.00] Database: Fetched Object 11 for ID 11\n", + "[4.00] Cache: Refreshed object 11\n", + "[4.00] Database: Fetched Object 1 for ID 1\n", + "[4.00] Cache: Refreshed object 1\n", + "[4.49] Client: Requesting object 5\n", + "[4.49] Database: Fetched Object 5 for ID 5\n", + "[4.72] Client: Requesting object 22\n", + "[4.72] Database: Fetched Object 22 for ID 22\n", + "[5.00] Cache: Object 82 aged to 4\n", + "[5.00] Cache: Object 13 aged to 1\n", + "[5.00] Cache: Object 11 aged to 1\n", + "[5.00] Cache: Object 1 aged to 1\n", + "[5.00] Cache: Object 5 aged to 1\n", + "[5.00] Cache: Object 22 aged to 1\n", + "[5.00] Database: Fetched Object 82 for ID 82\n", + "[5.00] Cache: Refreshed object 82\n", + "[6.00] Cache: Object 82 aged to 1\n", + "[6.00] Cache: Object 13 aged to 2\n", + "[6.00] Cache: Object 11 aged to 2\n", + "[6.00] Cache: Object 1 aged to 2\n", + "[6.00] Cache: Object 5 aged to 2\n", + "[6.00] Cache: Object 22 aged to 2\n", + "[6.00] Database: Fetched Object 5 for ID 5\n", + "[6.00] Cache: Refreshed object 5\n", + "[6.00] Client: Requesting object 63\n", + "[6.00] Database: Fetched Object 63 for ID 63\n", + "[6.64] Client: Requesting object 1\n", + "[7.00] Cache: Object 82 aged to 2\n", + "[7.00] Cache: Object 13 aged to 3\n", + "[7.00] Cache: Object 11 aged to 3\n", + "[7.00] Cache: Object 1 aged to 3\n", + "[7.00] Cache: Object 5 aged to 1\n", + "[7.00] Cache: Object 22 aged to 3\n", + "[7.00] Cache: Object 63 aged to 1\n", + "[7.00] Database: Fetched Object 1 for ID 1\n", + "[7.00] Cache: Refreshed object 1\n", + "[7.63] Client: Requesting object 65\n", + "[7.63] Database: Fetched Object 65 for ID 65\n", + "[8.00] Cache: Object 82 aged to 3\n", + "[8.00] Cache: Object 13 aged to 4\n", + "[8.00] Cache: Object 11 aged to 4\n", + "[8.00] Cache: Object 1 aged to 1\n", + "[8.00] Cache: Object 5 aged to 2\n", + "[8.00] Cache: Object 22 aged to 4\n", + "[8.00] Cache: Object 63 aged to 2\n", + "[8.00] Cache: Object 65 aged to 1\n", + "[8.00] Database: Fetched Object 82 for ID 82\n", + "[8.00] Cache: Refreshed object 82\n", + "[8.00] Database: Fetched Object 11 for ID 11\n", + "[8.00] Cache: Refreshed object 11\n", + "[8.40] Client: Requesting object 1\n", + "[9.00] Cache: Object 82 aged to 1\n", + "[9.00] Cache: Object 13 expired\n", + "[9.00] Cache: Object 11 aged to 1\n", + "[9.00] Cache: Object 1 aged to 2\n", + "[9.00] Cache: Object 5 aged to 3\n", + "[9.00] Cache: Object 22 aged to 5\n", + "[9.00] Cache: Object 63 aged to 3\n", + "[9.00] Cache: Object 65 aged to 2\n", + "[9.00] Database: Fetched Object 5 for ID 5\n", + "[9.00] Cache: Refreshed object 5\n", + "[9.00] Database: Fetched Object 22 for ID 22\n", + "[9.00] Cache: Refreshed object 22\n", + "[9.00] Database: Fetched Object 65 for ID 65\n", + "[9.00] Cache: Refreshed object 65\n", + "[9.66] Client: Requesting object 3\n", + "[9.66] Database: Fetched Object 3 for ID 3\n", + "[10.00] Cache: Object 82 aged to 2\n", + "[10.00] Cache: Object 11 aged to 2\n", + "[10.00] Cache: Object 1 aged to 3\n", + "[10.00] Cache: Object 5 aged to 1\n", + "[10.00] Cache: Object 22 aged to 1\n", + "[10.00] Cache: Object 63 aged to 4\n", + "[10.00] Cache: Object 65 aged to 1\n", + "[10.00] Cache: Object 3 aged to 1\n", + "[10.00] Database: Fetched Object 63 for ID 63\n", + "[10.00] Cache: Refreshed object 63\n", + "[10.01] Client: Requesting object 5\n", + "[11.00] Cache: Object 82 aged to 3\n", + "[11.00] Cache: Object 11 aged to 3\n", + "[11.00] Cache: Object 1 aged to 4\n", + "[11.00] Cache: Object 5 aged to 2\n", + "[11.00] Cache: Object 22 aged to 2\n", + "[11.00] Cache: Object 63 aged to 1\n", + "[11.00] Cache: Object 65 aged to 2\n", + "[11.00] Cache: Object 3 aged to 2\n", + "[11.00] Database: Fetched Object 11 for ID 11\n", + "[11.00] Cache: Refreshed object 11\n", + "[11.17] Client: Requesting object 1\n", + "[11.25] Client: Requesting object 31\n", + "[11.25] Database: Fetched Object 31 for ID 31\n", + "[11.69] Client: Requesting object 2\n", + "[11.69] Database: Fetched Object 2 for ID 2\n", + "[12.00] Cache: Object 82 aged to 4\n", + "[12.00] Cache: Object 11 aged to 1\n", + "[12.00] Cache: Object 1 expired\n", + "[12.00] Cache: Object 5 aged to 3\n", + "[12.00] Cache: Object 22 aged to 3\n", + "[12.00] Cache: Object 63 aged to 2\n", + "[12.00] Cache: Object 65 aged to 3\n", + "[12.00] Cache: Object 3 aged to 3\n", + "[12.00] Cache: Object 31 aged to 1\n", + "[12.00] Cache: Object 2 aged to 1\n", + "[12.00] Database: Fetched Object 31 for ID 31\n", + "[12.00] Cache: Refreshed object 31\n", + "[12.50] Client: Requesting object 3\n", + "[13.00] Cache: Object 82 expired\n", + "[13.00] Cache: Object 11 aged to 2\n", + "[13.00] Cache: Object 5 aged to 4\n", + "[13.00] Cache: Object 22 aged to 4\n", + "[13.00] Cache: Object 63 aged to 3\n", + "[13.00] Cache: Object 65 aged to 4\n", + "[13.00] Cache: Object 3 aged to 4\n", + "[13.00] Cache: Object 31 aged to 1\n", + "[13.00] Cache: Object 2 aged to 2\n", + "[13.00] Database: Fetched Object 11 for ID 11\n", + "[13.00] Cache: Refreshed object 11\n", + "[13.52] Client: Requesting object 41\n", + "[13.52] Database: Fetched Object 41 for ID 41\n", + "[13.87] Client: Requesting object 6\n", + "[13.87] Database: Fetched Object 6 for ID 6\n", + "[14.00] Cache: Object 11 aged to 1\n", + "[14.00] Cache: Object 5 expired\n", + "[14.00] Cache: Object 22 expired\n", + "[14.00] Cache: Object 63 aged to 4\n", + "[14.00] Cache: Object 65 expired\n", + "[14.00] Cache: Object 3 aged to 5\n", + "[14.00] Cache: Object 31 aged to 2\n", + "[14.00] Cache: Object 2 aged to 3\n", + "[14.00] Cache: Object 41 aged to 1\n", + "[14.00] Cache: Object 6 aged to 1\n", + "[14.00] Database: Fetched Object 63 for ID 63\n", + "[14.00] Cache: Refreshed object 63\n", + "[14.04] Client: Requesting object 1\n", + "[14.04] Database: Fetched Object 1 for ID 1\n", + "[14.09] Client: Requesting object 2\n", + "[14.56] Client: Requesting object 1\n", + "[15.00] Cache: Object 11 aged to 2\n", + "[15.00] Cache: Object 63 aged to 1\n", + "[15.00] Cache: Object 3 expired\n", + "[15.00] Cache: Object 31 aged to 3\n", + "[15.00] Cache: Object 2 aged to 4\n", + "[15.00] Cache: Object 41 aged to 2\n", + "[15.00] Cache: Object 6 aged to 2\n", + "[15.00] Cache: Object 1 aged to 1\n", + "[15.00] Database: Fetched Object 11 for ID 11\n", + "[15.00] Cache: Refreshed object 11\n", + "[15.00] Database: Fetched Object 31 for ID 31\n", + "[15.00] Cache: Refreshed object 31\n", + "[15.00] Database: Fetched Object 2 for ID 2\n", + "[15.00] Cache: Refreshed object 2\n", + "[15.17] Client: Requesting object 6\n", + "[15.47] Client: Requesting object 2\n", + "[16.00] Cache: Object 11 aged to 1\n", + "[16.00] Cache: Object 63 aged to 2\n", + "[16.00] Cache: Object 31 aged to 1\n", + "[16.00] Cache: Object 2 aged to 1\n", + "[16.00] Cache: Object 41 aged to 3\n", + "[16.00] Cache: Object 6 aged to 3\n", + "[16.00] Cache: Object 1 aged to 2\n", + "[16.00] Database: Fetched Object 31 for ID 31\n", + "[16.00] Cache: Refreshed object 31\n", + "[17.00] Cache: Object 11 aged to 2\n", + "[17.00] Cache: Object 63 aged to 3\n", + "[17.00] Cache: Object 31 aged to 1\n", + "[17.00] Cache: Object 2 aged to 2\n", + "[17.00] Cache: Object 41 aged to 4\n", + "[17.00] Cache: Object 6 aged to 4\n", + "[17.00] Cache: Object 1 aged to 3\n", + "[18.00] Cache: Object 11 aged to 3\n", + "[18.00] Cache: Object 63 aged to 4\n", + "[18.00] Cache: Object 31 aged to 2\n", + "[18.00] Cache: Object 2 aged to 3\n", + "[18.00] Cache: Object 41 aged to 5\n", + "[18.00] Cache: Object 6 aged to 5\n", + "[18.00] Cache: Object 1 aged to 4\n", + "[18.00] Database: Fetched Object 11 for ID 11\n", + "[18.00] Cache: Refreshed object 11\n", + "[19.00] Cache: Object 11 aged to 1\n", + "[19.00] Cache: Object 63 expired\n", + "[19.00] Cache: Object 31 aged to 3\n", + "[19.00] Cache: Object 2 aged to 4\n", + "[19.00] Cache: Object 41 expired\n", + "[19.00] Cache: Object 6 expired\n", + "[19.00] Cache: Object 1 aged to 5\n", + "[19.00] Database: Fetched Object 31 for ID 31\n", + "[19.00] Cache: Refreshed object 31\n", + "[19.02] Client: Requesting object 6\n", + "[19.02] Database: Fetched Object 6 for ID 6\n", + "[20.00] Cache: Object 11 aged to 2\n", + "[20.00] Cache: Object 31 aged to 1\n", + "[20.00] Cache: Object 2 expired\n", + "[20.00] Cache: Object 1 expired\n", + "[20.00] Cache: Object 6 aged to 1\n", + "[20.00] Database: Fetched Object 6 for ID 6\n", + "[20.00] Cache: Refreshed object 6\n", + "[20.38] Client: Requesting object 4\n", + "[20.38] Database: Fetched Object 4 for ID 4\n", + "[20.57] Client: Requesting object 3\n", + "[20.57] Database: Fetched Object 3 for ID 3\n", + "[20.90] Client: Requesting object 15\n", + "[20.90] Database: Fetched Object 15 for ID 15\n", + "[21.00] Cache: Object 11 aged to 3\n", + "[21.00] Cache: Object 31 aged to 2\n", + "[21.00] Cache: Object 6 aged to 1\n", + "[21.00] Cache: Object 4 aged to 1\n", + "[21.00] Cache: Object 3 aged to 1\n", + "[21.00] Cache: Object 15 aged to 1\n", + "[21.00] Database: Fetched Object 11 for ID 11\n", + "[21.00] Cache: Refreshed object 11\n", + "[21.00] Database: Fetched Object 31 for ID 31\n", + "[21.00] Cache: Refreshed object 31\n", + "[21.52] Client: Requesting object 2\n", + "[21.52] Database: Fetched Object 2 for ID 2\n", + "[22.00] Cache: Object 11 aged to 1\n", + "[22.00] Cache: Object 31 aged to 1\n", + "[22.00] Cache: Object 6 aged to 2\n", + "[22.00] Cache: Object 4 aged to 2\n", + "[22.00] Cache: Object 3 aged to 2\n", + "[22.00] Cache: Object 15 aged to 2\n", + "[22.00] Cache: Object 2 aged to 1\n", + "[22.00] Database: Fetched Object 6 for ID 6\n", + "[22.00] Cache: Refreshed object 6\n", + "[22.00] Database: Fetched Object 4 for ID 4\n", + "[22.00] Cache: Refreshed object 4\n", + "[22.00] Database: Fetched Object 15 for ID 15\n", + "[22.00] Cache: Refreshed object 15\n", + "[22.00] Database: Fetched Object 2 for ID 2\n", + "[22.00] Cache: Refreshed object 2\n", + "[23.00] Cache: Object 11 aged to 2\n", + "[23.00] Cache: Object 31 aged to 2\n", + "[23.00] Cache: Object 6 aged to 1\n", + "[23.00] Cache: Object 4 aged to 1\n", + "[23.00] Cache: Object 3 aged to 3\n", + "[23.00] Cache: Object 15 aged to 1\n", + "[23.00] Cache: Object 2 aged to 1\n", + "[23.00] Database: Fetched Object 11 for ID 11\n", + "[23.00] Cache: Refreshed object 11\n", + "[23.00] Database: Fetched Object 6 for ID 6\n", + "[23.00] Cache: Refreshed object 6\n", + "[23.00] Database: Fetched Object 4 for ID 4\n", + "[23.00] Cache: Refreshed object 4\n", + "[23.57] Client: Requesting object 1\n", + "[23.57] Database: Fetched Object 1 for ID 1\n", + "[24.00] Client: Requesting object 1\n", + "[24.00] Cache: Object 11 aged to 1\n", + "[24.00] Cache: Object 31 aged to 3\n", + "[24.00] Cache: Object 6 aged to 1\n", + "[24.00] Cache: Object 4 aged to 1\n", + "[24.00] Cache: Object 3 aged to 4\n", + "[24.00] Cache: Object 15 aged to 2\n", + "[24.00] Cache: Object 2 aged to 2\n", + "[24.00] Cache: Object 1 aged to 1\n", + "[24.00] Database: Fetched Object 4 for ID 4\n", + "[24.00] Cache: Refreshed object 4\n", + "[24.00] Database: Fetched Object 3 for ID 3\n", + "[24.00] Cache: Refreshed object 3\n", + "[24.00] Database: Fetched Object 2 for ID 2\n", + "[24.00] Cache: Refreshed object 2\n", + "[25.00] Cache: Object 11 aged to 2\n", + "[25.00] Cache: Object 31 aged to 4\n", + "[25.00] Cache: Object 6 aged to 2\n", + "[25.00] Cache: Object 4 aged to 1\n", + "[25.00] Cache: Object 3 aged to 1\n", + "[25.00] Cache: Object 15 aged to 3\n", + "[25.00] Cache: Object 2 aged to 1\n", + "[25.00] Cache: Object 1 aged to 2\n", + "[25.00] Database: Fetched Object 4 for ID 4\n", + "[25.00] Cache: Refreshed object 4\n", + "[25.32] Client: Requesting object 3\n", + "[25.41] Client: Requesting object 1\n", + "[26.00] Cache: Object 11 aged to 3\n", + "[26.00] Cache: Object 31 expired\n", + "[26.00] Cache: Object 6 aged to 3\n", + "[26.00] Cache: Object 4 aged to 1\n", + "[26.00] Cache: Object 3 aged to 2\n", + "[26.00] Cache: Object 15 aged to 4\n", + "[26.00] Cache: Object 2 aged to 2\n", + "[26.00] Cache: Object 1 aged to 3\n", + "[26.00] Database: Fetched Object 11 for ID 11\n", + "[26.00] Cache: Refreshed object 11\n", + "[26.40] Client: Requesting object 2\n", + "[27.00] Cache: Object 11 aged to 1\n", + "[27.00] Cache: Object 6 aged to 4\n", + "[27.00] Cache: Object 4 aged to 2\n", + "[27.00] Cache: Object 3 aged to 3\n", + "[27.00] Cache: Object 15 expired\n", + "[27.00] Cache: Object 2 aged to 3\n", + "[27.00] Cache: Object 1 aged to 4\n", + "[27.00] Database: Fetched Object 11 for ID 11\n", + "[27.00] Cache: Refreshed object 11\n", + "[27.00] Database: Fetched Object 6 for ID 6\n", + "[27.00] Cache: Refreshed object 6\n", + "[27.37] Client: Requesting object 20\n", + "[27.37] Database: Fetched Object 20 for ID 20\n", + "[27.73] Client: Requesting object 6\n", + "[27.82] Client: Requesting object 13\n", + "[27.82] Database: Fetched Object 13 for ID 13\n", + "[28.00] Cache: Object 11 aged to 1\n", + "[28.00] Cache: Object 6 aged to 1\n", + "[28.00] Cache: Object 4 aged to 3\n", + "[28.00] Cache: Object 3 aged to 4\n", + "[28.00] Cache: Object 2 aged to 4\n", + "[28.00] Cache: Object 1 aged to 5\n", + "[28.00] Cache: Object 20 aged to 1\n", + "[28.00] Cache: Object 13 aged to 1\n", + "[28.00] Database: Fetched Object 4 for ID 4\n", + "[28.00] Cache: Refreshed object 4\n", + "[28.00] Database: Fetched Object 3 for ID 3\n", + "[28.00] Cache: Refreshed object 3\n", + "[28.00] Database: Fetched Object 1 for ID 1\n", + "[28.00] Cache: Refreshed object 1\n", + "[28.37] Client: Requesting object 1\n", + "[29.00] Cache: Object 11 aged to 2\n", + "[29.00] Cache: Object 6 aged to 2\n", + "[29.00] Cache: Object 4 aged to 1\n", + "[29.00] Cache: Object 3 aged to 1\n", + "[29.00] Cache: Object 2 expired\n", + "[29.00] Cache: Object 1 aged to 1\n", + "[29.00] Cache: Object 20 aged to 2\n", + "[29.00] Cache: Object 13 aged to 2\n", + "[29.00] Database: Fetched Object 6 for ID 6\n", + "[29.00] Cache: Refreshed object 6\n", + "[29.00] Database: Fetched Object 4 for ID 4\n", + "[29.00] Cache: Refreshed object 4\n", + "[30.00] Cache: Object 11 aged to 3\n", + "[30.00] Cache: Object 6 aged to 1\n", + "[30.00] Cache: Object 4 aged to 1\n", + "[30.00] Cache: Object 3 aged to 2\n", + "[30.00] Cache: Object 1 aged to 2\n", + "[30.00] Cache: Object 20 aged to 3\n", + "[30.00] Cache: Object 13 aged to 3\n", + "[30.00] Database: Fetched Object 6 for ID 6\n", + "[30.00] Cache: Refreshed object 6\n", + "[30.00] Database: Fetched Object 4 for ID 4\n", + "[30.00] Cache: Refreshed object 4\n", + "[30.00] Database: Fetched Object 3 for ID 3\n", + "[30.00] Cache: Refreshed object 3\n", + "[30.00] Database: Fetched Object 13 for ID 13\n", + "[30.00] Cache: Refreshed object 13\n", + "[30.01] Client: Requesting object 1\n", + "[30.95] Client: Requesting object 88\n", + "[30.95] Database: Fetched Object 88 for ID 88\n", + "[31.00] Cache: Object 11 aged to 4\n", + "[31.00] Cache: Object 6 aged to 1\n", + "[31.00] Cache: Object 4 aged to 1\n", + "[31.00] Cache: Object 3 aged to 1\n", + "[31.00] Cache: Object 1 aged to 3\n", + "[31.00] Cache: Object 20 aged to 4\n", + "[31.00] Cache: Object 13 aged to 1\n", + "[31.00] Cache: Object 88 aged to 1\n", + "[31.00] Database: Fetched Object 11 for ID 11\n", + "[31.00] Cache: Refreshed object 11\n", + "[31.00] Database: Fetched Object 20 for ID 20\n", + "[31.00] Cache: Refreshed object 20\n", + "[31.48] Client: Requesting object 4\n", + "[32.00] Cache: Object 11 aged to 1\n", + "[32.00] Cache: Object 6 aged to 2\n", + "[32.00] Cache: Object 4 aged to 2\n", + "[32.00] Cache: Object 3 aged to 2\n", + "[32.00] Cache: Object 1 aged to 4\n", + "[32.00] Cache: Object 20 aged to 1\n", + "[32.00] Cache: Object 13 aged to 2\n", + "[32.00] Cache: Object 88 aged to 2\n", + "[32.00] Database: Fetched Object 11 for ID 11\n", + "[32.00] Cache: Refreshed object 11\n", + "[32.00] Database: Fetched Object 20 for ID 20\n", + "[32.00] Cache: Refreshed object 20\n", + "[33.00] Cache: Object 11 aged to 1\n", + "[33.00] Cache: Object 6 aged to 3\n", + "[33.00] Cache: Object 4 aged to 3\n", + "[33.00] Cache: Object 3 aged to 3\n", + "[33.00] Cache: Object 1 expired\n", + "[33.00] Cache: Object 20 aged to 1\n", + "[33.00] Cache: Object 13 aged to 3\n", + "[33.00] Cache: Object 88 aged to 3\n", + "[33.00] Database: Fetched Object 20 for ID 20\n", + "[33.00] Cache: Refreshed object 20\n", + "[34.00] Cache: Object 11 aged to 2\n", + "[34.00] Cache: Object 6 aged to 4\n", + "[34.00] Cache: Object 4 aged to 4\n", + "[34.00] Cache: Object 3 aged to 4\n", + "[34.00] Cache: Object 20 aged to 1\n", + "[34.00] Cache: Object 13 aged to 4\n", + "[34.00] Cache: Object 88 aged to 4\n", + "[34.00] Database: Fetched Object 4 for ID 4\n", + "[34.00] Cache: Refreshed object 4\n", + "[34.00] Database: Fetched Object 3 for ID 3\n", + "[34.00] Cache: Refreshed object 3\n", + "[34.00] Database: Fetched Object 13 for ID 13\n", + "[34.00] Cache: Refreshed object 13\n", + "[34.63] Client: Requesting object 1\n", + "[34.63] Database: Fetched Object 1 for ID 1\n", + "[35.00] Cache: Object 11 aged to 3\n", + "[35.00] Cache: Object 6 expired\n", + "[35.00] Cache: Object 4 aged to 1\n", + "[35.00] Cache: Object 3 aged to 1\n", + "[35.00] Cache: Object 20 aged to 2\n", + "[35.00] Cache: Object 13 aged to 1\n", + "[35.00] Cache: Object 88 aged to 5\n", + "[35.00] Cache: Object 1 aged to 1\n", + "[35.00] Database: Fetched Object 4 for ID 4\n", + "[35.00] Cache: Refreshed object 4\n", + "[36.00] Cache: Object 11 aged to 4\n", + "[36.00] Cache: Object 4 aged to 1\n", + "[36.00] Cache: Object 3 aged to 2\n", + "[36.00] Cache: Object 20 aged to 3\n", + "[36.00] Cache: Object 13 aged to 2\n", + "[36.00] Cache: Object 88 expired\n", + "[36.00] Cache: Object 1 aged to 2\n", + "[36.00] Database: Fetched Object 4 for ID 4\n", + "[36.00] Cache: Refreshed object 4\n", + "[37.00] Cache: Object 11 expired\n", + "[37.00] Cache: Object 4 aged to 1\n", + "[37.00] Cache: Object 3 aged to 3\n", + "[37.00] Cache: Object 20 aged to 4\n", + "[37.00] Cache: Object 13 aged to 3\n", + "[37.00] Cache: Object 1 aged to 3\n", + "[37.54] Client: Requesting object 3\n", + "[37.61] Client: Requesting object 36\n", + "[37.61] Database: Fetched Object 36 for ID 36\n", + "[37.81] Client: Requesting object 32\n", + "[37.81] Database: Fetched Object 32 for ID 32\n", + "[37.93] Client: Requesting object 5\n", + "[37.93] Database: Fetched Object 5 for ID 5\n", + "[38.00] Cache: Object 4 aged to 2\n", + "[38.00] Cache: Object 3 aged to 4\n", + "[38.00] Cache: Object 20 expired\n", + "[38.00] Cache: Object 13 aged to 4\n", + "[38.00] Cache: Object 1 aged to 4\n", + "[38.00] Cache: Object 36 aged to 1\n", + "[38.00] Cache: Object 32 aged to 1\n", + "[38.00] Cache: Object 5 aged to 1\n", + "[38.00] Database: Fetched Object 4 for ID 4\n", + "[38.00] Cache: Refreshed object 4\n", + "[38.36] Client: Requesting object 1\n", + "[39.00] Cache: Object 4 aged to 1\n", + "[39.00] Cache: Object 3 expired\n", + "[39.00] Cache: Object 13 expired\n", + "[39.00] Cache: Object 1 aged to 5\n", + "[39.00] Cache: Object 36 aged to 2\n", + "[39.00] Cache: Object 32 aged to 2\n", + "[39.00] Cache: Object 5 aged to 2\n", + "[39.00] Database: Fetched Object 4 for ID 4\n", + "[39.00] Cache: Refreshed object 4\n", + "[39.39] Client: Requesting object 5\n", + "[40.00] Cache: Object 4 aged to 1\n", + "[40.00] Cache: Object 1 expired\n", + "[40.00] Cache: Object 36 aged to 3\n", + "[40.00] Cache: Object 32 aged to 3\n", + "[40.00] Cache: Object 5 aged to 3\n", + "[40.00] Database: Fetched Object 36 for ID 36\n", + "[40.00] Cache: Refreshed object 36\n", + "[41.00] Cache: Object 4 aged to 2\n", + "[41.00] Cache: Object 36 aged to 1\n", + "[41.00] Cache: Object 32 aged to 4\n", + "[41.00] Cache: Object 5 aged to 4\n", + "[41.00] Database: Fetched Object 5 for ID 5\n", + "[41.00] Cache: Refreshed object 5\n", + "[41.49] Client: Requesting object 1\n", + "[41.49] Database: Fetched Object 1 for ID 1\n", + "[41.82] Client: Requesting object 1\n", + "[42.00] Cache: Object 4 aged to 3\n", + "[42.00] Cache: Object 36 aged to 2\n", + "[42.00] Cache: Object 32 aged to 5\n", + "[42.00] Cache: Object 5 aged to 1\n", + "[42.00] Cache: Object 1 aged to 1\n", + "[42.00] Database: Fetched Object 36 for ID 36\n", + "[42.00] Cache: Refreshed object 36\n", + "[42.79] Client: Requesting object 1\n", + "[43.00] Cache: Object 4 aged to 4\n", + "[43.00] Cache: Object 36 aged to 1\n", + "[43.00] Cache: Object 32 expired\n", + "[43.00] Cache: Object 5 aged to 2\n", + "[43.00] Cache: Object 1 aged to 2\n", + "[43.00] Database: Fetched Object 1 for ID 1\n", + "[43.00] Cache: Refreshed object 1\n", + "[44.00] Cache: Object 4 expired\n", + "[44.00] Cache: Object 36 aged to 2\n", + "[44.00] Cache: Object 5 aged to 3\n", + "[44.00] Cache: Object 1 aged to 1\n", + "[44.00] Database: Fetched Object 36 for ID 36\n", + "[44.00] Cache: Refreshed object 36\n", + "[44.00] Database: Fetched Object 5 for ID 5\n", + "[44.00] Cache: Refreshed object 5\n", + "[44.12] Client: Requesting object 3\n", + "[44.12] Database: Fetched Object 3 for ID 3\n", + "[44.45] Client: Requesting object 5\n", + "[45.00] Cache: Object 36 aged to 1\n", + "[45.00] Cache: Object 5 aged to 1\n", + "[45.00] Cache: Object 1 aged to 2\n", + "[45.00] Cache: Object 3 aged to 1\n", + "[45.00] Database: Fetched Object 36 for ID 36\n", + "[45.00] Cache: Refreshed object 36\n", + "[45.25] Client: Requesting object 7\n", + "[45.25] Database: Fetched Object 7 for ID 7\n", + "[45.54] Client: Requesting object 2\n", + "[45.54] Database: Fetched Object 2 for ID 2\n", + "[46.00] Cache: Object 36 aged to 1\n", + "[46.00] Cache: Object 5 aged to 2\n", + "[46.00] Cache: Object 1 aged to 3\n", + "[46.00] Cache: Object 3 aged to 2\n", + "[46.00] Cache: Object 7 aged to 1\n", + "[46.00] Cache: Object 2 aged to 1\n", + "[46.97] Client: Requesting object 6\n", + "[46.97] Database: Fetched Object 6 for ID 6\n", + "[47.00] Cache: Object 36 aged to 2\n", + "[47.00] Cache: Object 5 aged to 3\n", + "[47.00] Cache: Object 1 aged to 4\n", + "[47.00] Cache: Object 3 aged to 3\n", + "[47.00] Cache: Object 7 aged to 2\n", + "[47.00] Cache: Object 2 aged to 2\n", + "[47.00] Cache: Object 6 aged to 1\n", + "[47.00] Database: Fetched Object 1 for ID 1\n", + "[47.00] Cache: Refreshed object 1\n", + "[47.50] Client: Requesting object 2\n", + "[48.00] Cache: Object 36 aged to 3\n", + "[48.00] Cache: Object 5 aged to 4\n", + "[48.00] Cache: Object 1 aged to 1\n", + "[48.00] Cache: Object 3 aged to 4\n", + "[48.00] Cache: Object 7 aged to 3\n", + "[48.00] Cache: Object 2 aged to 3\n", + "[48.00] Cache: Object 6 aged to 2\n", + "[48.00] Database: Fetched Object 3 for ID 3\n", + "[48.00] Cache: Refreshed object 3\n", + "[48.00] Database: Fetched Object 2 for ID 2\n", + "[48.00] Cache: Refreshed object 2\n", + "[49.00] Cache: Object 36 aged to 4\n", + "[49.00] Cache: Object 5 expired\n", + "[49.00] Cache: Object 1 aged to 2\n", + "[49.00] Cache: Object 3 aged to 1\n", + "[49.00] Cache: Object 7 aged to 4\n", + "[49.00] Cache: Object 2 aged to 1\n", + "[49.00] Cache: Object 6 aged to 3\n", + "[49.00] Database: Fetched Object 2 for ID 2\n", + "[49.00] Cache: Refreshed object 2\n", + "[49.93] Client: Requesting object 1\n", + "[50.00] Cache: Object 36 expired\n", + "[50.00] Cache: Object 1 aged to 3\n", + "[50.00] Cache: Object 3 aged to 2\n", + "[50.00] Cache: Object 7 aged to 5\n", + "[50.00] Cache: Object 2 aged to 1\n", + "[50.00] Cache: Object 6 aged to 4\n", + "[50.00] Database: Fetched Object 7 for ID 7\n", + "[50.00] Cache: Refreshed object 7\n", + "[50.00] Database: Fetched Object 2 for ID 2\n", + "[50.00] Cache: Refreshed object 2\n", + "[51.00] Cache: Object 1 aged to 4\n", + "[51.00] Cache: Object 3 aged to 3\n", + "[51.00] Cache: Object 7 aged to 1\n", + "[51.00] Cache: Object 2 aged to 1\n", + "[51.00] Cache: Object 6 aged to 5\n", + "[51.00] Database: Fetched Object 7 for ID 7\n", + "[51.00] Cache: Refreshed object 7\n", + "[51.27] Client: Requesting object 6\n", + "[52.00] Cache: Object 1 expired\n", + "[52.00] Cache: Object 3 aged to 4\n", + "[52.00] Cache: Object 7 aged to 1\n", + "[52.00] Cache: Object 2 aged to 2\n", + "[52.00] Cache: Object 6 expired\n", + "[53.00] Cache: Object 3 expired\n", + "[53.00] Cache: Object 7 aged to 2\n", + "[53.00] Cache: Object 2 aged to 3\n", + "[53.04] Client: Requesting object 5\n", + "[53.04] Database: Fetched Object 5 for ID 5\n", + "[53.78] Client: Requesting object 29\n", + "[53.78] Database: Fetched Object 29 for ID 29\n", + "[54.00] Cache: Object 7 aged to 3\n", + "[54.00] Cache: Object 2 aged to 4\n", + "[54.00] Cache: Object 5 aged to 1\n", + "[54.00] Cache: Object 29 aged to 1\n", + "[54.89] Client: Requesting object 2\n", + "[55.00] Cache: Object 7 aged to 4\n", + "[55.00] Cache: Object 2 expired\n", + "[55.00] Cache: Object 5 aged to 2\n", + "[55.00] Cache: Object 29 aged to 2\n", + "[55.03] Client: Requesting object 12\n", + "[55.03] Database: Fetched Object 12 for ID 12\n", + "[56.00] Cache: Object 7 expired\n", + "[56.00] Cache: Object 5 aged to 3\n", + "[56.00] Cache: Object 29 aged to 3\n", + "[56.00] Cache: Object 12 aged to 1\n", + "[56.34] Client: Requesting object 17\n", + "[56.34] Database: Fetched Object 17 for ID 17\n", + "[56.82] Client: Requesting object 54\n", + "[56.82] Database: Fetched Object 54 for ID 54\n", + "[57.00] Cache: Object 5 aged to 4\n", + "[57.00] Cache: Object 29 aged to 4\n", + "[57.00] Cache: Object 12 aged to 2\n", + "[57.00] Cache: Object 17 aged to 1\n", + "[57.00] Cache: Object 54 aged to 1\n", + "[57.00] Database: Fetched Object 29 for ID 29\n", + "[57.00] Cache: Refreshed object 29\n", + "[57.00] Database: Fetched Object 12 for ID 12\n", + "[57.00] Cache: Refreshed object 12\n", + "[58.00] Cache: Object 5 aged to 5\n", + "[58.00] Cache: Object 29 aged to 1\n", + "[58.00] Cache: Object 12 aged to 1\n", + "[58.00] Cache: Object 17 aged to 2\n", + "[58.00] Cache: Object 54 aged to 2\n", + "[58.00] Database: Fetched Object 12 for ID 12\n", + "[58.00] Cache: Refreshed object 12\n", + "[58.50] Client: Requesting object 13\n", + "[58.50] Database: Fetched Object 13 for ID 13\n", + "[59.00] Cache: Object 5 expired\n", + "[59.00] Cache: Object 29 aged to 2\n", + "[59.00] Cache: Object 12 aged to 1\n", + "[59.00] Cache: Object 17 aged to 3\n", + "[59.00] Cache: Object 54 aged to 3\n", + "[59.00] Cache: Object 13 aged to 1\n", + "[59.00] Database: Fetched Object 17 for ID 17\n", + "[59.00] Cache: Refreshed object 17\n", + "[59.52] Client: Requesting object 5\n", + "[59.52] Database: Fetched Object 5 for ID 5\n" + ] + } + ], + "source": [ + "# Instantiate components\n", + "db = Database()\n", + "cache = Cache(env, db)\n", + "\n", + "# Start processes\n", + "env.process(age_cache_process(env, cache))\n", + "env.process(client_request_process(env, cache))\n", + "\n", + "# Run the simulation\n", + "env.run(until=SIMULATION_TIME)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "3b6f7c1f-ea54-4496-bb9a-370cee2d2751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Object 1: Hit Rate = 0.71, Average Age = 1.50\n", + "Object 2: Hit Rate = 0.62, Average Age = 2.20\n", + "Object 3: Hit Rate = 0.50, Average Age = 2.33\n", + "Object 4: Hit Rate = 0.50, Average Age = 1.00\n", + "Object 5: Hit Rate = 0.43, Average Age = 1.00\n", + "Object 6: Hit Rate = 0.50, Average Age = 2.33\n" + ] + } + ], + "source": [ + "# Calculate and print hit rate and average age for each object\n", + "for obj_id in range(1, CACHE_CAPACITY + 1):\n", + " if cache.hits[obj_id] != 0:\n", + " hit_rate = cache.hits[obj_id] / max(1, cache.access_count[obj_id]) # Avoid division by zero\n", + " avg_age = cache.cumulative_age[obj_id] / max(1, cache.hits[obj_id]) # Only average over hits\n", + " print(f\"Object {obj_id}: Hit Rate = {hit_rate:.2f}, Average Age = {avg_age:.2f}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "01f8f9ee-c278-4a22-8562-ba02e77f5ddd", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAACU8AAAHWCAYAAABNZ+o8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3QU9dvG4c/upvcECCWE3nsJQUBAUcSGiChNCIEAIvb6sysqCiqK2GghEBALClYEwQIoSAi9995DIL3uzvtHJK9IkUCS2ST3dY7nmNnZ79yzWYZl99nnsRiGYSAiIiIiIiIiIiIiIiIiIiIiIlLGWM0OICIiIiIiIiIiIiIiIiIiIiIiYgYVT4mIiIiIiIiIiIiIiIiIiIiISJmk4ikRERERERERERERERERERERESmTVDwlIiIiIiIiIiIiIiIiIiIiIiJlkoqnRERERERERERERERERERERESkTFLxlIiIiIiIiIiIiIiIiIiIiIiIlEkqnhIRERERERERERERERERERERkTJJxVMiIiIiIiIiIiIiIiIiIiIiIlImqXhKRERERERERERERERERERERETKJBVPiYiIiIiIiEip9/vvv2OxWPjqq6/MjnJZjh8/zt133025cuWwWCyMHz++0Nbet28fFouFd9555z/3feWVV7BYLIV27OJgsVh45ZVXzI5RKCwWCw8++KDZMUq0GjVqEBkZaXYMEREREREREXFiKp4SERERERERkUIxffp0LBYLHh4eHD58+Lzbr7vuOpo0aWJCspLnscceY+HChTz77LPMnDmTm2+++ZL7p6Wl8dprr9GsWTO8vLzw9/enY8eOxMbGYhhGMaUuuPnz55eYQqfff/+du+66i0qVKuHm5kZwcDDdu3dn7ty5ZkcrFDk5OUyYMIE2bdrg6+uLj48Pbdq0YcKECeTk5JgdL9/ZQsjL+U9ERERERERE5HK4mB1AREREREREREqXrKwsxowZwwcffGB2lBLr119/pUePHjz55JP/ue/x48e54YYb2Lp1K3379uXBBx8kMzOTr7/+mkGDBjF//nw+/fRTbDZbgXO88MILPPPMM1dyCpdl/vz5fPTRR4VaQJWRkYGLS+G+5fXyyy/z6quvUrduXe677z6qV6/OqVOnmD9/Pr169eLTTz+lf//+hXrM4pSWlsZtt93GkiVLuP3224mMjMRqtbJgwQIeeeQR5s6dy48//oi3t7fZUWnYsCEzZ848Z9uzzz6Lj48Pzz///Hn7b9++HatV3x8VERERERERkYtT8ZSIiIiIiIiIFKoWLVowZcoUnn32WapUqWJ2nGKVlpZWKAUmJ06cICAg4LL2HTRoEFu3bmXevHnccccd+dsffvhhnnrqKd555x1atmzJ//73vwLncHFxKfRCpKLm4eFRqOt99dVXvPrqq9x9993Mnj0bV1fX/NueeuopFi5c6FSdma7E448/zpIlS/jggw/OGRN4//3389FHH/Hggw/y5JNP8sknnxRbJsMwyMzMxNPT85ztFStWZMCAAedsGzNmDOXLlz9vO4C7u3uR5hQRERERERGRkk9fuxIRERERERGRQvXcc89ht9sZM2bMJffbt28fFouF6dOnn3ebxWI5pxvRK6+8gsViYceOHQwYMAB/f38qVKjAiy++iGEYHDx4kB49euDn50elSpUYN27cBY9pt9t57rnnqFSpEt7e3txxxx0cPHjwvP1WrlzJzTffjL+/P15eXnTu3Jk///zznH3OZtqyZQv9+/cnMDCQa6+99pLnvGfPHu655x6CgoLw8vLimmuu4ccff8y//ezoQ8Mw+Oijj/5z/Nhff/3FwoULiYyMPKdw6qw333yTunXrMnbsWDIyMs67/b333qN69ep4enrSuXNnNm3adMFz/LdZs2bRunVrPD09CQoKom/fvhd9HG+99VYCAwPx9vamWbNmvP/++wBERkby0UcfAVxw1Nrnn39O69at8fX1xc/Pj6ZNm+bf91Iu9tzZtWsXkZGRBAQE4O/vz+DBg0lPT//P9V588UWCgoKYNm3aOYVTZ3Xr1o3bb78dgOzsbF566SVat26Nv78/3t7edOzYkd9+++28+zkcDt5//32aNm2Kh4cHFSpU4OabbyY+Pv68fb/55huaNGmCu7s7jRs3ZsGCBeftc/jwYYYMGULFihXz95s2bdp/nt+hQ4eIjo6mS5cu5xROnfXAAw9w/fXXM3XqVA4dOgRAkyZNuP766y94TiEhIdx9993nbBs/fjyNGzfGw8ODihUrct9993H69Olz7lujRg1uv/12Fi5cSFhYGJ6enkyaNOk/8/+XGjVqEBkZmf/z2T9jf/zxBw8//DAVKlQgICCA++67j+zsbM6cOUNERASBgYEEBgby9NNPnzf68nLPSURERERERERKBhVPiYiIiIiIiEihqlmzJhEREUyZMoUjR44U6tp9+vTB4XAwZswY2rZty+uvv8748ePp2rUrISEhjB07ljp16vDkk0+ydOnS8+4/evRofvzxR/73v//x8MMPs2jRIm688cZzCot+/fVXOnXqRHJyMi+//DJvvPEGZ86coUuXLsTFxZ235j333EN6ejpvvPEGw4YNu2j248eP0759exYuXMjIkSMZPXo0mZmZ3HHHHcybNw+ATp065Y8k69q1KzNnzjxvRNk/ff/99wBERERc8HYXFxf69+/P6dOnzyv+io2NZcKECTzwwAM8++yzbNq0iS5dunD8+PGLHg/yHsOIiAjq1q3Lu+++y6OPPsovv/xCp06dOHPmTP5+ixYtolOnTmzZsoVHHnmEcePGcf311/PDDz8AcN9999G1a1eA/PM8e66LFi2iX79+BAYGMnbsWMaMGcN111133jkURO/evUlJSeHNN9+kd+/eTJ8+nVGjRl3yPjt37mTbtm3ceeed+Pr6/ucxkpOTmTp1Ktdddx1jx47llVde4eTJk3Tr1o1169ads29UVBSPPvoooaGhjB07lmeeeQYPDw/++uuvc/b7448/GDlyJH379uWtt94iMzOTXr16cerUqfx9jh8/zjXXXMPixYt58MEHef/996lTpw5RUVGMHz/+kpl/+ukn7Hb7RZ9DkPf8ys3NzS/a6tOnD0uXLuXYsWPnZT1y5Ah9+/bN33bffffx1FNP0aFDB95//30GDx7Mp59+Srdu3c7r2LV9+3b69etH165def/992nRosUls1+Nhx56iJ07dzJq1CjuuOMOJk+ezIsvvkj37t2x2+288cYbXHvttbz99tvn/RksyDmJiIiIiIiISAlgiIiIiIiIiIgUgpiYGAMwVq1aZezevdtwcXExHn744fzbO3fubDRu3Dj/57179xqAERMTc95agPHyyy/n//zyyy8bgDF8+PD8bbm5uUbVqlUNi8VijBkzJn/76dOnDU9PT2PQoEH523777TcDMEJCQozk5OT87V9++aUBGO+//75hGIbhcDiMunXrGt26dTMcDkf+funp6UbNmjWNrl27npepX79+l/X4PProowZgLFu2LH9bSkqKUbNmTaNGjRqG3W4/5/wfeOCB/1zzzjvvNADj9OnTF91n7ty5BmBMmDDBMIz/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jz8usjyxsbHnjCf76quvOHr0KLfccgsArVu3pnbt2rzzzjukpqaed/+TJ09e8bFvvfVW4uLiWLFiRf62tLQ0Jk+eTI0aNa6oM1T79u258cYbiYmJ4Ycffjjv9ueff54dO3bw9NNPn1fo8c0333D48OH8n+Pi4li5cmX+Y3Ehd911FzabjVGjRp3XsckwjPxRia1ataJmzZqMHz/+vOK4f97P29sbOL+A7t8jF61Wa36BW1ZW1kXzFYVRo0Zx6tQphg4dSm5u7nm3//zzz/mP/dmuRf88x5UrV57zOwfo1asXhmEwatSo89YraMc0m81Gr169+Prrr9m0adN5t//XczY0NJTBgwezePFiPvnkk/NunzhxIr/++itRUVFUrVr1nNv69OnDX3/9xbRp00hISDhnZB9A7969sdvtvPbaa+etm5ube97vvSQojeckIiIiIiIiUtap85SIiIiIiIiIFKnnn3+emTNnsn37dho3bnzObUOHDmXMmDEMHTqUsLAwli5dyo4dO4osS1BQENdeey2DBw/m+PHjjB8/njp16jBs2DAgr0hn6tSp3HLLLTRu3JjBgwcTEhLC4cOH+e233/Dz8+P777+/omM/88wzfPbZZ9xyyy08/PDDBAUFMWPGDPbu3cvXX3+N1Xpl33GLjY3lhhtuoEePHvTv35+OHTuSlZXF3Llz+f333+nTpw9PPfXUeferU6cO1157Lffffz9ZWVmMHz+ecuXK8fTTT1/0WLVr1+b111/n2WefZd++fdx55534+vqyd+9e5s2bx/Dhw3nyySexWq188skndO/enRYtWjB48GAqV67Mtm3b2Lx5MwsXLgTyitUAHn74Ybp164bNZqNv374MHTqUxMREunTpQtWqVdm/fz8ffPABLVq0yB8zV1z69OnDxo0bGT16NGvXrqVfv35Ur16dU6dOsWDBAn755Rdmz54N5HUCmzt3Lj179uS2225j7969TJw4kUaNGp1TjHf99dczcOBAJkyYwM6dO7n55ptxOBwsW7aM66+/ngcffLBAGceMGcNvv/1G27ZtGTZsGI0aNSIxMZE1a9awePFiEhMTL3n/9957j23btjFy5EgWLFiQ32Fq4cKFfPvtt3Tu3Jlx48add7/evXvz5JNP8uSTTxIUFHRe56vOnTtz33338eabb7Ju3TpuuukmXF1d2blzJ3PmzOH999/n7rvvLtC5mq00npOIiIiIiIhIWafiKREREREREREpUnXq1GHAgAHMmDHjvNteeuklTp48yVdffcWXX37JLbfcwk8//URwcHCRZHnuuefYsGEDb775JikpKdxwww18/PHHeHl55e9z3XXXsWLFCl577TU+/PBDUlNTqVSpEm3btuW+++674mNXrFiR5cuX87///Y8PPviAzMxMmjVrxvfff89tt912xetWrlyZuLg4xo0bx5w5c/j6669xcXGhWbNmTJ8+nYiIiAuOx4uIiMBqtTJ+/HhOnDhBeHg4H374IZUrV77k8Z555hnq1avHe++9l985KTQ0lJtuuok77rgjf79u3brx22+/MWrUKMaNG4fD4aB27dr5hWqQ18nqoYce4vPPP2fWrFkYhkHfvn0ZMGAAkydP5uOPP+bMmTNUqlSJPn368Morr1xxkdnVeP311+nSpQsTJkzgk08+ITExkcDAQK655hq+/fbb/POOjIzk2LFjTJo0iYULF9KoUSNmzZrFnDlz+P33389ZMyYmhmbNmhEdHc1TTz2Fv78/YWFhtG/fvsD5KlasSFxcHK+++ipz587l448/ply5cjRu3PiCIzP/zcfHh19++YWPP/6YWbNm8dRTT2EYBg0aNGD8+PGMHDkSV1fX8+5XtWpV2rdvz59//snQoUMvuM/EiRNp3bo1kyZN4rnnnsPFxYUaNWowYMCA80ZJlhSl8ZxEREREREREyjKLUdBe4CIiIiIiIiIiUia8+OKLvPnmmxccVyciIiIiIiIiIlIaFP9X9UREREREREREpEQ4evQo5cuXNzuGiIiIiIiIiIhIkdHYPhEREREREREROceePXuYN28ec+bM4fbbbzc7joiIiIiIiIiISJFR5ykRERERERERETnH0qVLGTVqFJ07d+bdd981O46IiIiIiIiIiEiRsRiGYZgdQkREREREREREREREREREREREpLip85SIiIiIiIiIiIiIiIiIiIiIiJRJKp4SEREREREREREREREREREREZEyycXsAFfD4XBw5MgRfH19sVgsZscRERERERERERERERERERERERGTGYZBSkoKVapUwWq9dG+pEl08deTIEUJDQ82OISIiIiIiIiIiIiIiIiIiIiIiTubgwYNUrVr1kvuU6OIpX19fIO9E/fz8TE4jF5OTk8PPP//MTTfdhKurq9lxRETKPF2XRUSci67LIiLOR9dmERHnouuyiIhz0XVZRMS56Lp8YcnJyYSGhubXFl1KiS6eOjuqz8/PT8VTTiwnJwcvLy/8/Pz0B1VExAnouiwi4lx0XRYRcT66NouIOBddl0VEnIuuyyIizkXX5Us7W1t0KZce6iciIiIiIiIiIiIiIiIiIiIiIlJKqXhKRERERERERERERERERERERETKJBVPiYiIiIiIiIiIiIiIiIiIiIhImeRidgARERERERERERERERERERERcW6GYZCbm4vdbjc7ivxDTk4OLi4uZGZmlqnfjc1mw8XFBYvFctVrqXhKRERERERERERERERERERERC4qOzubo0ePkp6ebnYU+RfDMKhUqRIHDx4slEKiksTLy4vKlSvj5uZ2VeuoeEpERERERERERERERERERERELsjhcLB3715sNhtVqlTBzc2tzBXpODOHw0Fqaio+Pj5YrVaz4xQLwzDIzs7m5MmT7N27l7p1617Vuat4SkREREREREREREREREREREQuKDs7G4fDQWhoKF5eXmbHkX9xOBxkZ2fj4eFRZoqnADw9PXF1dWX//v3553+lys6jJiIiIiIiIiIiIiIiIiIiIiJXpCwV5kjJUFjPST2zRURERERERERERERERERERESkTFLxlIiIiIiIiIiIiIiIiIiIiIiIlEkqnhIRERERERERERERERERERGRMq1GjRqMHz/+qvcpbrVq1eKTTz4xO8ZlccbHD1Q8JSIiIiIiIiIiIiIiIiIiIiKl1MGDBxkyZAhVqlTBzc2N6tWr88gjj3Dq1KkCr7Vq1SqGDx9eaNkKo5ho5cqVDBo06Kqz7Nq1i8GDB1O1alXc3d2pWbMm/fr1Iz4+/qrXdnYqnhIRERERERERERERERERERGRUmfPnj2EhYWxc+dOPvvsM3bt2sXEiRP55ZdfaNeuHYmJiQVar0KFCnh5eRVR2itTGJni4+Np3bo1O3bsYNKkSWzZsoV58+bRoEEDnnjiiUJK6rxUPCUiIiLyt4OJ6QydEc+nK/ebHUVERERERERERERERMRpGYZBenZusf9nGEaBcj7wwAO4ubnx888/07lzZ6pVq8Ytt9zC4sWLOXz4MM8///w5+6ekpNCvXz+8vb0JCQnho48+Ouf2f3eKOnPmDEOHDqVChQr4+fnRpUsX1q9ff859vv/+e9q0aYOHhwfly5enZ8+eAFx33XXs37+fxx57DIvFgsViAWD//v10796dwMBAvL29ady4MfPnz7/oOf57bJ/FYmHq1Kn07NkTLy8v6taty3fffXfR+xuGQWRkJHXr1mXZsmXcdttt1K5dmxYtWvDyyy/z7bff5u/7v//9j3r16uHl5UWtWrV48cUXycnJuazzPSs9PZ0hQ4bg6+tLtWrVmDx58jm3Hzx4kN69exMQEEBQUBA9evRg3759F81fGFyKdHURERGREuJESiYDoley/1Q6i7ceB+DettVNTiUiIiIiIiIiIiIiIuJ8MnLsNHppYbEfd8ur3fByu7xSl8TERBYuXMjo0aPx9PQ857ZKlSpx77338sUXX/Dxxx/nFy69/fbbPPfcc4waNYqFCxfyyCOPUK9ePbp27XrBY9xzzz14enry008/4e/vz6RJk7jhhhvYsWMHQUFB/Pjjj/Ts2ZPnn3+e2NhYsrOz8wuh5s6dS/PmzRk+fDjDhg3LX/OBBx4gOzubpUuX4u3tzZYtW/Dx8SnQ4zRq1Cjeeust3n77bT744APuvfde9u/fT1BQ0Hn7rlu3js2bNzN79mys1vN7MAUEBOT/v6+vL9OnT6dKlSps3LiRYcOG4evry9NPPw1wyfM9a9y4cbz22ms899xzfPXVV9x///107tyZ+vXrk5OTQ7du3WjXrh3Lli3DxcWF119/nZtvvpkNGzbg5uZWoMfhcql4SkRERMq8pIwcBk1bxf5T6Xi72UjLtvPCN5sI8HTjtmaVzY4nIiIiIiIiIiIiIiIiBbRz504Mw6Bhw4YXvL1hw4acPn2akydPEhwcDECHDh145plnAKhXrx5//vkn77333gWLp/744w/i4uI4ceIE7u7uALzzzjt88803fPXVVwwfPpzRo0fTt29fRo0alX+/5s2bAxAUFITNZsPX15dKlSrl337gwAF69epF06ZNgbzOUgUVGRlJv379AHjjjTeYMGECcXFx3HzzzRd8nAAaNGjwn+u+8MIL+f9fo0YNnnzyST7//PP84qlLne9Zt956KyNHjgTyOlm99957/Pbbb9SvX58vvvgCh8PB1KlT8wvaYmJiCAgI4Pfff+emm24qyMNw2VQ8JSIiImVaZo6dYTPi2Xo0mfI+7nw1oh2Tl+1h9soDPPrFWvw8XehYt4LZMUVERERERERERERERJyGp6uNLa92M+W4BVWQUX/t2rU77+d/jun7p/Xr15Oamkq5cuXO2Z6RkcHu3buBvK5O/+wqdTkefvhh7r//fn7++WduvPFGevXqRbNmzQq0xj/39/b2xs/PjxMnTlxw34I8Pl988QUTJkxg9+7dpKamkpubi5+fX/7tl3O+/8xmsVioVKlSfrb169eza9cufH19z7lPZmZm/mNaFFQ8JSIiImVWjt3Bg7PXELcvEV8PF2KHhFOjvDev9WhCUnoOP248yn0zVzN72DW0CA0wO66IiIiIiIiIiIiIiIhTsFgslz0+zyx16tTBYrGwdetWevbsed7tW7duJTAwkAoVruxL9KmpqVSuXJnff//9vNvOjrr797jAyzF06FC6devGjz/+yM8//8ybb77JuHHjeOihhy57DVdX13N+tlgsOByOC+5br149ALZt20bLli0vuuaKFSu49957GTVqFN26dcPf35/PP/+ccePG5e9zOed7qWypqam0bt2aTz/99Lz7Xenv6XKcP6xQREREpAxwOAz+99UGFm89gbuLlehBbWhUJa8y3ma18G6f5nSsW570bDuRMXHsOpFicmIRERERERERERERERG5XOXKlaNr1658/PHHZGRknHPbsWPH+PTTT+nTp0/+eDiAv/7665z9/vrrr4uO/WvVqhXHjh3DxcWFOnXqnPNf+fLlgbwuS7/88stFM7q5uWG328/bHhoayogRI5g7dy5PPPEEU6ZMuezzLqgWLVrQqFEjxo0bd8ECqzNnzgCwfPlyqlevzvPPP09YWBh169Zl//795+z7X+f7X1q1asXOnTsJDg4+7zH19/e/4nX/i4qnREREpMwxDIPXf9zK3LWHsVktfHxvK8JrBp2zj7uLjYkDWtM8NIAz6TkMmBrHodPpJiUWERERERERERERERGRgvrwww/JysqiW7duLF26lIMHD7JgwQK6du1KSEgIo0ePPmf/P//8k7feeosdO3bw0UcfMWfOHB555JELrn3jjTfSrl077rzzTn7++Wf27dvH8uXLef7554mPjwfg5Zdf5rPPPuPll19m69atbNy4kbFjx+avUaNGDZYuXcrhw4dJSEgA4NFHH2XhwoXs3buXNWvW8Ntvv120gKswWCwWYmJi2LFjBx07dmT+/Pns2bOHDRs2MHr0aHr06AFA3bp1OXDgAJ9//jm7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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Extract recorded data for plotting\n", + "times, cache_sizes = zip(*cache.cache_state_over_time)\n", + "\n", + "# Plot the cache size over time\n", + "plt.figure(figsize=(30, 5))\n", + "plt.plot(times, cache_sizes, label=\"Objects in Cache\")\n", + "plt.xlabel(\"Time (s)\")\n", + "plt.ylabel(\"Number of Cached Objects\")\n", + "plt.title(\"Number of Objects in Cache Over Time\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "99cac143-ef09-4205-a73e-8816eecc9a1e", + "metadata": {}, + "source": [ + "Object 1: Hit Rate = 0.99, Average Age = 0.00\n", + "Object 2: Hit Rate = 0.97, Average Age = 0.55\n", + "Object 3: Hit Rate = 0.96, Average Age = 0.87\n", + "Object 4: Hit Rate = 0.94, Average Age = 1.24\n", + "Object 5: Hit Rate = 0.18, Average Age = 2.33\n", + "Object 6: Hit Rate = 0.09, Average Age = 4.00\n", + "Object 9: Hit Rate = 0.25, Average Age = 2.33\n", + "Object 10: Hit Rate = 0.08, Average Age = 0.00\n", + "Object 11: Hit Rate = 0.25, Average Age = 1.00\n", + "Object 12: Hit Rate = 0.29, Average Age = 1.00" + ] + }, + { + "cell_type": "markdown", + "id": "88918958-f883-4a67-8212-31a8c9355634", + "metadata": {}, + "source": [ + "Object 1: Hit Rate = 0.99, Average Age = 0.00\n", + "Object 2: Hit Rate = 0.97, Average Age = 0.56\n", + "Object 3: Hit Rate = 0.96, Average Age = 0.78\n", + "Object 4: Hit Rate = 0.92, Average Age = 1.83\n", + "Object 5: Hit Rate = 0.14, Average Age = 0.00\n", + "Object 7: Hit Rate = 0.29, Average Age = 2.00\n", + "Object 24: Hit Rate = 0.50, Average Age = 1.00\n", + "Object 44: Hit Rate = 0.33, Average Age = 1.00" + ] + }, + { + "cell_type": "markdown", + "id": "3d911168-f981-4552-8d7d-99a47916312f", + "metadata": {}, + "source": [ + "Object 1: Hit Rate = 0.99, Average Age = 0.00\n", + "Object 2: Hit Rate = 0.97, Average Age = 0.42\n", + "Object 3: Hit Rate = 0.95, Average Age = 1.38\n", + "Object 4: Hit Rate = 0.96, Average Age = 1.44\n", + "Object 7: Hit Rate = 0.33, Average Age = 3.20\n", + "Object 23: Hit Rate = 0.50, Average Age = 1.00" + ] + }, + { + "cell_type": "markdown", + "id": "536e087f-3992-4192-b5da-62c496df2741", + "metadata": {}, + "source": [ + "Object 1: Hit Rate = 0.99, Average Age = 0.00\n", + "Object 2: Hit Rate = 0.97, Average Age = 0.65\n", + "Object 3: Hit Rate = 0.96, Average Age = 0.81\n", + "Object 4: Hit Rate = 0.91, Average Age = 1.90\n", + "Object 5: Hit Rate = 0.08, Average Age = 3.00\n", + "Object 6: Hit Rate = 0.12, Average Age = 3.50\n", + "Object 7: Hit Rate = 0.12, Average Age = 3.00\n", + "Object 15: Hit Rate = 0.33, Average Age = 4.00\n", + "Object 65: Hit Rate = 0.50, Average Age = 0.00" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "graphs", + "language": "python", + "name": "graphs" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoi_cache_simulation.ipynb b/aoi_cache_simulation.ipynb new file mode 100644 index 0000000..b1da81b --- /dev/null +++ b/aoi_cache_simulation.ipynb @@ -0,0 +1,1025 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "befdd01f-254a-409c-bcdf-fcd31b023212", + "metadata": {}, + "source": [ + "# Description\n", + "\n", + "This is a simulation of a Client, Cache, DB setup.\n", + "\n", + "## Client\n", + "The client sends requests to the Cache for certain objects.\n", + "The rate at which the client sends request is ~exp(REQUEST_FREQUENCY).\n", + "The kind of object that are requested follow a Zipf distribution.\n", + "\n", + "## Cache\n", + "The cache is an intermediate storage for the objects.\n", + "It saves the objects, along with their age in the cache and TTL.\n", + "When the TTL is over the object expires from the cache.\n", + "The age of the object describes the \"freshness\" of the object from the point when it was pulled from the database.\n", + "\n", + "The cache regularly refreshes the objects in its database, based on ~exp(mu).\n", + "The mu is a fixed value, individual to each object.\n", + "\n", + "When the client requests an object and it isn't in the cache, a cache miss occurs and the cache has to get the object from the database.\n", + "When the object is in the database at the time the client requests it a cache hit occurs and the TTL of the object is refreshed.\n", + "\n", + "## Database\n", + "The database stores the available objects and provides them to the cache when requested.\n", + "Along with a value, the database also stores the refresh rate mu for each object.\n", + "The refresh rate is used by the cache to periodically refresh the cache information from the database." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "920665b8-9204-42df-ab59-1b9324387750", + "metadata": {}, + "outputs": [], + "source": [ + "import simpy\n", + "import random\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Constants\n", + "SEED = 256\n", + "CACHE_TTL = 5 # Cache TTL in seconds\n", + "CACHE_CAPACITY = 100 # Maximum number of objects the cache can hold\n", + "SIMULATION_TIME = 60 # Total time to run the simulation\n", + "REQUEST_FREQUENCY = 1 # Mean time between client requests\n", + "OBJECT_FREQUENCY_LAMBDA = 1 # Shape parameter for the Zipf distribution (controls skewness)\n", + "\n", + "\n", + "# Set random seeds\n", + "random.seed(SEED)\n", + "np.random.seed(SEED)\n", + "\n", + "# Initialize simulation environment\n", + "env = simpy.Environment()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5cea042f-e9fc-4a1e-9750-de212ca70601", + "metadata": {}, + "outputs": [], + "source": [ + "class Database:\n", + " def __init__(self):\n", + " # Each object now has a specific refresh rate 'mu'\n", + " self.data = {i: f\"Object {i}\" for i in range(1, CACHE_CAPACITY + 1)}\n", + " self.mu_values = {i: random.uniform(1, 10) for i in range(1, CACHE_CAPACITY + 1)} # Assign a random mu for each object\n", + "\n", + "\n", + " def get_object(self, obj_id):\n", + " print(f\"[{env.now:.2f}] Database: Fetched {self.data.get(obj_id, 'Unknown')} for ID {obj_id}\")\n", + " return self.data.get(obj_id, None)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "499bf543-b2c6-4e4d-afcc-0a6665ce3ae1", + "metadata": {}, + "outputs": [], + "source": [ + "class Cache:\n", + " def __init__(self, env, db):\n", + " self.env = env\n", + " self.db = db\n", + " self.storage = {} # Dictionary to store cached objects\n", + " self.ttl = {} # Dictionary to store TTLs\n", + " self.age = {} # Dictionary to store age of each object\n", + " self.cache_state_over_time = [] # To record cache state at each interval\n", + " self.hits = {i: 0 for i in range(1, CACHE_CAPACITY + 1)} # Track hits per object\n", + " self.misses = {i: 0 for i in range(1, CACHE_CAPACITY + 1)} # Track misses per object\n", + " self.cumulative_age = {i: 0 for i in range(1, CACHE_CAPACITY + 1)} # Track cumulative age per object\n", + " self.access_count = {i: 0 for i in range(1, CACHE_CAPACITY + 1)} # Track access count per object\n", + " self.next_refresh = {} # Track the next refresh time for each cached object\n", + " \n", + " def get(self, obj_id):\n", + " if obj_id in self.storage and self.ttl[obj_id] > env.now:\n", + " # Cache hit: increment hit count and update cumulative age\n", + " self.hits[obj_id] += 1\n", + " self.cumulative_age[obj_id] += self.age[obj_id]\n", + " self.access_count[obj_id] += 1\n", + " else:\n", + " # Cache miss: increment miss count\n", + " self.misses[obj_id] += 1\n", + " self.access_count[obj_id] += 1\n", + " \n", + " # Fetch the object from the database if it’s not in cache\n", + " obj = self.db.get_object(obj_id)\n", + " \n", + " # If the cache is full, evict the oldest object\n", + " if len(self.storage) >= CACHE_CAPACITY:\n", + " self.evict_oldest()\n", + " \n", + " # Add the object to cache, set TTL, reset age, and schedule next refresh\n", + " self.storage[obj_id] = obj\n", + " self.ttl[obj_id] = env.now + CACHE_TTL\n", + " self.age[obj_id] = 0\n", + " self.next_refresh[obj_id] = env.now + np.random.exponential(self.db.mu_values[obj_id]) # Schedule refresh\n", + "\n", + " \n", + " def evict_oldest(self):\n", + " \"\"\"Remove the oldest item from the cache to make space.\"\"\"\n", + " oldest_id = max(self.age, key=self.age.get) # Find the oldest item by age\n", + " print(f\"[{env.now:.2f}] Cache: Evicting object {oldest_id} to make space\")\n", + " del self.storage[oldest_id]\n", + " del self.ttl[oldest_id]\n", + " del self.age[oldest_id]\n", + " \n", + " def refresh_object(self, obj_id):\n", + " \"\"\"Refresh the object from the database to keep it up-to-date.\"\"\"\n", + " obj = self.db.get_object(obj_id)\n", + " self.storage[obj_id] = obj\n", + " self.ttl[obj_id] = env.now + CACHE_TTL\n", + " self.age[obj_id] = 0\n", + " print(f\"[{env.now:.2f}] Cache: Refreshed object {obj_id}\")\n", + " \n", + " def age_objects(self):\n", + " \"\"\"Increment age of each cached object.\"\"\"\n", + " for obj_id in list(self.age.keys()):\n", + " if self.ttl[obj_id] > env.now:\n", + " self.age[obj_id] += 1\n", + " print(f\"[{env.now:.2f}] Cache: Object {obj_id} aged to {self.age[obj_id]}\")\n", + " else:\n", + " # Remove object if its TTL expired\n", + " print(f\"[{env.now:.2f}] Cache: Object {obj_id} expired\")\n", + " del self.storage[obj_id]\n", + " del self.ttl[obj_id]\n", + " del self.age[obj_id]\n", + " \n", + " def record_cache_state(self):\n", + " \"\"\"Record the current cache state (number of objects in cache) over time.\"\"\"\n", + " self.cache_state_over_time.append((env.now, len(self.storage)))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7286d498-aa6c-4efb-bb28-fe29736eab64", + "metadata": {}, + "outputs": [], + "source": [ + "def age_cache_process(env, cache):\n", + " \"\"\"Process that ages cache objects over time, removes expired items, and refreshes based on object-specific intervals.\"\"\"\n", + " while True:\n", + " cache.age_objects() # Age objects and remove expired ones\n", + "\n", + " # Refresh objects based on their individual refresh intervals\n", + " for obj_id in list(cache.storage.keys()):\n", + " # Check if it's time to refresh this object based on next_refresh\n", + " if env.now >= cache.next_refresh[obj_id]:\n", + " cache.refresh_object(obj_id)\n", + " # Schedule the next refresh based on the object's mu\n", + " cache.next_refresh[obj_id] = env.now + np.random.exponential(cache.db.mu_values[obj_id])\n", + " \n", + " cache.record_cache_state() # Record cache state at each time step\n", + " yield env.timeout(1) # Run every second\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "687f5634-8edf-4337-b42f-bbb292d47f0f", + "metadata": {}, + "outputs": [], + "source": [ + "def client_request_process(env, cache):\n", + " \"\"\"Client process that makes requests for objects from the cache.\"\"\"\n", + " while True:\n", + " # Use numpy's exponential distribution for request interval\n", + " next_request = np.random.exponential(REQUEST_FREQUENCY)\n", + " yield env.timeout(next_request)\n", + "\n", + " # Use numpy's Zipf distribution to select object ID, reroll if out of bounds\n", + " while True:\n", + " obj_id = np.random.zipf(OBJECT_FREQUENCY_LAMBDA)\n", + " if obj_id <= 100: # Ensure obj_id is within range [1, 100]\n", + " break # Valid obj_id, exit loop\n", + " # If obj_id is out of bounds, reroll (continue the loop)\n", + " \n", + " print(f\"[{env.now:.2f}] Client: Requesting object {obj_id}\")\n", + " cache.get(obj_id)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c8516830-9880-4d9e-a91b-000338baf9d6", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.05] Client: Requesting object 82\n", + "[0.05] Database: Fetched Object 82 for ID 82\n", + "[0.07] Client: Requesting object 13\n", + "[0.07] Database: Fetched Object 13 for ID 13\n", + "[1.00] Cache: Object 82 aged to 1\n", + "[1.00] Cache: Object 13 aged to 1\n", + "[1.00] Database: Fetched Object 82 for ID 82\n", + "[1.00] Cache: Refreshed object 82\n", + "[1.00] Database: Fetched Object 13 for ID 13\n", + "[1.00] Cache: Refreshed object 13\n", + "[1.71] Client: Requesting object 11\n", + "[1.71] Database: Fetched Object 11 for ID 11\n", + "[1.97] Client: Requesting object 1\n", + "[1.97] Database: Fetched Object 1 for ID 1\n", + "[2.00] Cache: Object 82 aged to 1\n", + "[2.00] Cache: Object 13 aged to 1\n", + "[2.00] Cache: Object 11 aged to 1\n", + "[2.00] Cache: Object 1 aged to 1\n", + "[3.00] Cache: Object 82 aged to 2\n", + "[3.00] Cache: Object 13 aged to 2\n", + "[3.00] Cache: Object 11 aged to 2\n", + "[3.00] Cache: Object 1 aged to 2\n", + "[4.00] Cache: Object 82 aged to 3\n", + "[4.00] Cache: Object 13 aged to 3\n", + "[4.00] Cache: Object 11 aged to 3\n", + "[4.00] Cache: Object 1 aged to 3\n", + "[4.00] Database: Fetched Object 13 for ID 13\n", + "[4.00] Cache: Refreshed object 13\n", + "[4.00] Database: Fetched Object 11 for ID 11\n", + "[4.00] Cache: Refreshed object 11\n", + "[4.00] Database: Fetched Object 1 for ID 1\n", + "[4.00] Cache: Refreshed object 1\n", + "[4.49] Client: Requesting object 5\n", + "[4.49] Database: Fetched Object 5 for ID 5\n", + "[4.72] Client: Requesting object 22\n", + "[4.72] Database: Fetched Object 22 for ID 22\n", + "[5.00] Cache: Object 82 aged to 4\n", + "[5.00] Cache: Object 13 aged to 1\n", + "[5.00] Cache: Object 11 aged to 1\n", + "[5.00] Cache: Object 1 aged to 1\n", + "[5.00] Cache: Object 5 aged to 1\n", + "[5.00] Cache: Object 22 aged to 1\n", + "[5.00] Database: Fetched Object 82 for ID 82\n", + "[5.00] Cache: Refreshed object 82\n", + "[6.00] Cache: Object 82 aged to 1\n", + "[6.00] Cache: Object 13 aged to 2\n", + "[6.00] Cache: Object 11 aged to 2\n", + "[6.00] Cache: Object 1 aged to 2\n", + "[6.00] Cache: Object 5 aged to 2\n", + "[6.00] Cache: Object 22 aged to 2\n", + "[6.00] Database: Fetched Object 5 for ID 5\n", + "[6.00] Cache: Refreshed object 5\n", + "[6.00] Client: Requesting object 63\n", + "[6.00] Database: Fetched Object 63 for ID 63\n", + "[6.64] Client: Requesting object 1\n", + "[7.00] Cache: Object 82 aged to 2\n", + "[7.00] Cache: Object 13 aged to 3\n", + "[7.00] Cache: Object 11 aged to 3\n", + "[7.00] Cache: Object 1 aged to 3\n", + "[7.00] Cache: Object 5 aged to 1\n", + "[7.00] Cache: Object 22 aged to 3\n", + "[7.00] Cache: Object 63 aged to 1\n", + "[7.00] Database: Fetched Object 1 for ID 1\n", + "[7.00] Cache: Refreshed object 1\n", + "[7.63] Client: Requesting object 65\n", + "[7.63] Database: Fetched Object 65 for ID 65\n", + "[8.00] Cache: Object 82 aged to 3\n", + "[8.00] Cache: Object 13 aged to 4\n", + "[8.00] Cache: Object 11 aged to 4\n", + "[8.00] Cache: Object 1 aged to 1\n", + "[8.00] Cache: Object 5 aged to 2\n", + "[8.00] Cache: Object 22 aged to 4\n", + "[8.00] Cache: Object 63 aged to 2\n", + "[8.00] Cache: Object 65 aged to 1\n", + "[8.00] Database: Fetched Object 82 for ID 82\n", + "[8.00] Cache: Refreshed object 82\n", + "[8.00] Database: Fetched Object 11 for ID 11\n", + "[8.00] Cache: Refreshed object 11\n", + "[8.40] Client: Requesting object 1\n", + "[9.00] Cache: Object 82 aged to 1\n", + "[9.00] Cache: Object 13 expired\n", + "[9.00] Cache: Object 11 aged to 1\n", + "[9.00] Cache: Object 1 aged to 2\n", + "[9.00] Cache: Object 5 aged to 3\n", + "[9.00] Cache: Object 22 aged to 5\n", + "[9.00] Cache: Object 63 aged to 3\n", + "[9.00] Cache: Object 65 aged to 2\n", + "[9.00] Database: Fetched Object 5 for ID 5\n", + "[9.00] Cache: Refreshed object 5\n", + "[9.00] Database: Fetched Object 22 for ID 22\n", + "[9.00] Cache: Refreshed object 22\n", + "[9.00] Database: Fetched Object 65 for ID 65\n", + "[9.00] Cache: Refreshed object 65\n", + "[9.66] Client: Requesting object 3\n", + "[9.66] Database: Fetched Object 3 for ID 3\n", + "[10.00] Cache: Object 82 aged to 2\n", + "[10.00] Cache: Object 11 aged to 2\n", + "[10.00] Cache: Object 1 aged to 3\n", + "[10.00] Cache: Object 5 aged to 1\n", + "[10.00] Cache: Object 22 aged to 1\n", + "[10.00] Cache: Object 63 aged to 4\n", + "[10.00] Cache: Object 65 aged to 1\n", + "[10.00] Cache: Object 3 aged to 1\n", + "[10.00] Database: Fetched Object 63 for ID 63\n", + "[10.00] Cache: Refreshed object 63\n", + "[10.01] Client: Requesting object 5\n", + "[11.00] Cache: Object 82 aged to 3\n", + "[11.00] Cache: Object 11 aged to 3\n", + "[11.00] Cache: Object 1 aged to 4\n", + "[11.00] Cache: Object 5 aged to 2\n", + "[11.00] Cache: Object 22 aged to 2\n", + "[11.00] Cache: Object 63 aged to 1\n", + "[11.00] Cache: Object 65 aged to 2\n", + "[11.00] Cache: Object 3 aged to 2\n", + "[11.00] Database: Fetched Object 11 for ID 11\n", + "[11.00] Cache: Refreshed object 11\n", + "[11.17] Client: Requesting object 1\n", + "[11.25] Client: Requesting object 31\n", + "[11.25] Database: Fetched Object 31 for ID 31\n", + "[11.69] Client: Requesting object 2\n", + "[11.69] Database: Fetched Object 2 for ID 2\n", + "[12.00] Cache: Object 82 aged to 4\n", + "[12.00] Cache: Object 11 aged to 1\n", + "[12.00] Cache: Object 1 expired\n", + "[12.00] Cache: Object 5 aged to 3\n", + "[12.00] Cache: Object 22 aged to 3\n", + "[12.00] Cache: Object 63 aged to 2\n", + "[12.00] Cache: Object 65 aged to 3\n", + "[12.00] Cache: Object 3 aged to 3\n", + "[12.00] Cache: Object 31 aged to 1\n", + "[12.00] Cache: Object 2 aged to 1\n", + "[12.00] Database: Fetched Object 31 for ID 31\n", + "[12.00] Cache: Refreshed object 31\n", + "[12.50] Client: Requesting object 3\n", + "[13.00] Cache: Object 82 expired\n", + "[13.00] Cache: Object 11 aged to 2\n", + "[13.00] Cache: Object 5 aged to 4\n", + "[13.00] Cache: Object 22 aged to 4\n", + "[13.00] Cache: Object 63 aged to 3\n", + "[13.00] Cache: Object 65 aged to 4\n", + "[13.00] Cache: Object 3 aged to 4\n", + "[13.00] Cache: Object 31 aged to 1\n", + "[13.00] Cache: Object 2 aged to 2\n", + "[13.00] Database: Fetched Object 11 for ID 11\n", + "[13.00] Cache: Refreshed object 11\n", + "[13.52] Client: Requesting object 41\n", + "[13.52] Database: Fetched Object 41 for ID 41\n", + "[13.87] Client: Requesting object 6\n", + "[13.87] Database: Fetched Object 6 for ID 6\n", + "[14.00] Cache: Object 11 aged to 1\n", + "[14.00] Cache: Object 5 expired\n", + "[14.00] Cache: Object 22 expired\n", + "[14.00] Cache: Object 63 aged to 4\n", + "[14.00] Cache: Object 65 expired\n", + "[14.00] Cache: Object 3 aged to 5\n", + "[14.00] Cache: Object 31 aged to 2\n", + "[14.00] Cache: Object 2 aged to 3\n", + "[14.00] Cache: Object 41 aged to 1\n", + "[14.00] Cache: Object 6 aged to 1\n", + "[14.00] Database: Fetched Object 63 for ID 63\n", + "[14.00] Cache: Refreshed object 63\n", + "[14.04] Client: Requesting object 1\n", + "[14.04] Database: Fetched Object 1 for ID 1\n", + "[14.09] Client: Requesting object 2\n", + "[14.56] Client: Requesting object 1\n", + "[15.00] Cache: Object 11 aged to 2\n", + "[15.00] Cache: Object 63 aged to 1\n", + "[15.00] Cache: Object 3 expired\n", + "[15.00] Cache: Object 31 aged to 3\n", + "[15.00] Cache: Object 2 aged to 4\n", + "[15.00] Cache: Object 41 aged to 2\n", + "[15.00] Cache: Object 6 aged to 2\n", + "[15.00] Cache: Object 1 aged to 1\n", + "[15.00] Database: Fetched Object 11 for ID 11\n", + "[15.00] Cache: Refreshed object 11\n", + "[15.00] Database: Fetched Object 31 for ID 31\n", + "[15.00] Cache: Refreshed object 31\n", + "[15.00] Database: Fetched Object 2 for ID 2\n", + "[15.00] Cache: Refreshed object 2\n", + "[15.17] Client: Requesting object 6\n", + "[15.47] Client: Requesting object 2\n", + "[16.00] Cache: Object 11 aged to 1\n", + "[16.00] Cache: Object 63 aged to 2\n", + "[16.00] Cache: Object 31 aged to 1\n", + "[16.00] Cache: Object 2 aged to 1\n", + "[16.00] Cache: Object 41 aged to 3\n", + "[16.00] Cache: Object 6 aged to 3\n", + "[16.00] Cache: Object 1 aged to 2\n", + "[16.00] Database: Fetched Object 31 for ID 31\n", + "[16.00] Cache: Refreshed object 31\n", + "[17.00] Cache: Object 11 aged to 2\n", + "[17.00] Cache: Object 63 aged to 3\n", + "[17.00] Cache: Object 31 aged to 1\n", + "[17.00] Cache: Object 2 aged to 2\n", + "[17.00] Cache: Object 41 aged to 4\n", + "[17.00] Cache: Object 6 aged to 4\n", + "[17.00] Cache: Object 1 aged to 3\n", + "[18.00] Cache: Object 11 aged to 3\n", + "[18.00] Cache: Object 63 aged to 4\n", + "[18.00] Cache: Object 31 aged to 2\n", + "[18.00] Cache: Object 2 aged to 3\n", + "[18.00] Cache: Object 41 aged to 5\n", + "[18.00] Cache: Object 6 aged to 5\n", + "[18.00] Cache: Object 1 aged to 4\n", + "[18.00] Database: Fetched Object 11 for ID 11\n", + "[18.00] Cache: Refreshed object 11\n", + "[19.00] Cache: Object 11 aged to 1\n", + "[19.00] Cache: Object 63 expired\n", + "[19.00] Cache: Object 31 aged to 3\n", + "[19.00] Cache: Object 2 aged to 4\n", + "[19.00] Cache: Object 41 expired\n", + "[19.00] Cache: Object 6 expired\n", + "[19.00] Cache: Object 1 aged to 5\n", + "[19.00] Database: Fetched Object 31 for ID 31\n", + "[19.00] Cache: Refreshed object 31\n", + "[19.02] Client: Requesting object 6\n", + "[19.02] Database: Fetched Object 6 for ID 6\n", + "[20.00] Cache: Object 11 aged to 2\n", + "[20.00] Cache: Object 31 aged to 1\n", + "[20.00] Cache: Object 2 expired\n", + "[20.00] Cache: Object 1 expired\n", + "[20.00] Cache: Object 6 aged to 1\n", + "[20.00] Database: Fetched Object 6 for ID 6\n", + "[20.00] Cache: Refreshed object 6\n", + "[20.38] Client: Requesting object 4\n", + "[20.38] Database: Fetched Object 4 for ID 4\n", + "[20.57] Client: Requesting object 3\n", + "[20.57] Database: Fetched Object 3 for ID 3\n", + "[20.90] Client: Requesting object 15\n", + "[20.90] Database: Fetched Object 15 for ID 15\n", + "[21.00] Cache: Object 11 aged to 3\n", + "[21.00] Cache: Object 31 aged to 2\n", + "[21.00] Cache: Object 6 aged to 1\n", + "[21.00] Cache: Object 4 aged to 1\n", + "[21.00] Cache: Object 3 aged to 1\n", + "[21.00] Cache: Object 15 aged to 1\n", + "[21.00] Database: Fetched Object 11 for ID 11\n", + "[21.00] Cache: Refreshed object 11\n", + "[21.00] Database: Fetched Object 31 for ID 31\n", + "[21.00] Cache: Refreshed object 31\n", + "[21.52] Client: Requesting object 2\n", + "[21.52] Database: Fetched Object 2 for ID 2\n", + "[22.00] Cache: Object 11 aged to 1\n", + "[22.00] Cache: Object 31 aged to 1\n", + "[22.00] Cache: Object 6 aged to 2\n", + "[22.00] Cache: Object 4 aged to 2\n", + "[22.00] Cache: Object 3 aged to 2\n", + "[22.00] Cache: Object 15 aged to 2\n", + "[22.00] Cache: Object 2 aged to 1\n", + "[22.00] Database: Fetched Object 6 for ID 6\n", + "[22.00] Cache: Refreshed object 6\n", + "[22.00] Database: Fetched Object 4 for ID 4\n", + "[22.00] Cache: Refreshed object 4\n", + "[22.00] Database: Fetched Object 15 for ID 15\n", + "[22.00] Cache: Refreshed object 15\n", + "[22.00] Database: Fetched Object 2 for ID 2\n", + "[22.00] Cache: Refreshed object 2\n", + "[23.00] Cache: Object 11 aged to 2\n", + "[23.00] Cache: Object 31 aged to 2\n", + "[23.00] Cache: Object 6 aged to 1\n", + "[23.00] Cache: Object 4 aged to 1\n", + "[23.00] Cache: Object 3 aged to 3\n", + "[23.00] Cache: Object 15 aged to 1\n", + "[23.00] Cache: Object 2 aged to 1\n", + "[23.00] Database: Fetched Object 11 for ID 11\n", + "[23.00] Cache: Refreshed object 11\n", + "[23.00] Database: Fetched Object 6 for ID 6\n", + "[23.00] Cache: Refreshed object 6\n", + "[23.00] Database: Fetched Object 4 for ID 4\n", + "[23.00] Cache: Refreshed object 4\n", + "[23.57] Client: Requesting object 1\n", + "[23.57] Database: Fetched Object 1 for ID 1\n", + "[24.00] Client: Requesting object 1\n", + "[24.00] Cache: Object 11 aged to 1\n", + "[24.00] Cache: Object 31 aged to 3\n", + "[24.00] Cache: Object 6 aged to 1\n", + "[24.00] Cache: Object 4 aged to 1\n", + "[24.00] Cache: Object 3 aged to 4\n", + "[24.00] Cache: Object 15 aged to 2\n", + "[24.00] Cache: Object 2 aged to 2\n", + "[24.00] Cache: Object 1 aged to 1\n", + "[24.00] Database: Fetched Object 4 for ID 4\n", + "[24.00] Cache: Refreshed object 4\n", + "[24.00] Database: Fetched Object 3 for ID 3\n", + "[24.00] Cache: Refreshed object 3\n", + "[24.00] Database: Fetched Object 2 for ID 2\n", + "[24.00] Cache: Refreshed object 2\n", + "[25.00] Cache: Object 11 aged to 2\n", + "[25.00] Cache: Object 31 aged to 4\n", + "[25.00] Cache: Object 6 aged to 2\n", + "[25.00] Cache: Object 4 aged to 1\n", + "[25.00] Cache: Object 3 aged to 1\n", + "[25.00] Cache: Object 15 aged to 3\n", + "[25.00] Cache: Object 2 aged to 1\n", + "[25.00] Cache: Object 1 aged to 2\n", + "[25.00] Database: Fetched Object 4 for ID 4\n", + "[25.00] Cache: Refreshed object 4\n", + "[25.32] Client: Requesting object 3\n", + "[25.41] Client: Requesting object 1\n", + "[26.00] Cache: Object 11 aged to 3\n", + "[26.00] Cache: Object 31 expired\n", + "[26.00] Cache: Object 6 aged to 3\n", + "[26.00] Cache: Object 4 aged to 1\n", + "[26.00] Cache: Object 3 aged to 2\n", + "[26.00] Cache: Object 15 aged to 4\n", + "[26.00] Cache: Object 2 aged to 2\n", + "[26.00] Cache: Object 1 aged to 3\n", + "[26.00] Database: Fetched Object 11 for ID 11\n", + "[26.00] Cache: Refreshed object 11\n", + "[26.40] Client: Requesting object 2\n", + "[27.00] Cache: Object 11 aged to 1\n", + "[27.00] Cache: Object 6 aged to 4\n", + "[27.00] Cache: Object 4 aged to 2\n", + "[27.00] Cache: Object 3 aged to 3\n", + "[27.00] Cache: Object 15 expired\n", + "[27.00] Cache: Object 2 aged to 3\n", + "[27.00] Cache: Object 1 aged to 4\n", + "[27.00] Database: Fetched Object 11 for ID 11\n", + "[27.00] Cache: Refreshed object 11\n", + "[27.00] Database: Fetched Object 6 for ID 6\n", + "[27.00] Cache: Refreshed object 6\n", + "[27.37] Client: Requesting object 20\n", + "[27.37] Database: Fetched Object 20 for ID 20\n", + "[27.73] Client: Requesting object 6\n", + "[27.82] Client: Requesting object 13\n", + "[27.82] Database: Fetched Object 13 for ID 13\n", + "[28.00] Cache: Object 11 aged to 1\n", + "[28.00] Cache: Object 6 aged to 1\n", + "[28.00] Cache: Object 4 aged to 3\n", + "[28.00] Cache: Object 3 aged to 4\n", + "[28.00] Cache: Object 2 aged to 4\n", + "[28.00] Cache: Object 1 aged to 5\n", + "[28.00] Cache: Object 20 aged to 1\n", + "[28.00] Cache: Object 13 aged to 1\n", + "[28.00] Database: Fetched Object 4 for ID 4\n", + "[28.00] Cache: Refreshed object 4\n", + "[28.00] Database: Fetched Object 3 for ID 3\n", + "[28.00] Cache: Refreshed object 3\n", + "[28.00] Database: Fetched Object 1 for ID 1\n", + "[28.00] Cache: Refreshed object 1\n", + "[28.37] Client: Requesting object 1\n", + "[29.00] Cache: Object 11 aged to 2\n", + "[29.00] Cache: Object 6 aged to 2\n", + "[29.00] Cache: Object 4 aged to 1\n", + "[29.00] Cache: Object 3 aged to 1\n", + "[29.00] Cache: Object 2 expired\n", + "[29.00] Cache: Object 1 aged to 1\n", + "[29.00] Cache: Object 20 aged to 2\n", + "[29.00] Cache: Object 13 aged to 2\n", + "[29.00] Database: Fetched Object 6 for ID 6\n", + "[29.00] Cache: Refreshed object 6\n", + "[29.00] Database: Fetched Object 4 for ID 4\n", + "[29.00] Cache: Refreshed object 4\n", + "[30.00] Cache: Object 11 aged to 3\n", + "[30.00] Cache: Object 6 aged to 1\n", + "[30.00] Cache: Object 4 aged to 1\n", + "[30.00] Cache: Object 3 aged to 2\n", + "[30.00] Cache: Object 1 aged to 2\n", + "[30.00] Cache: Object 20 aged to 3\n", + "[30.00] Cache: Object 13 aged to 3\n", + "[30.00] Database: Fetched Object 6 for ID 6\n", + "[30.00] Cache: Refreshed object 6\n", + "[30.00] Database: Fetched Object 4 for ID 4\n", + "[30.00] Cache: Refreshed object 4\n", + "[30.00] Database: Fetched Object 3 for ID 3\n", + "[30.00] Cache: Refreshed object 3\n", + "[30.00] Database: Fetched Object 13 for ID 13\n", + "[30.00] Cache: Refreshed object 13\n", + "[30.01] Client: Requesting object 1\n", + "[30.95] Client: Requesting object 88\n", + "[30.95] Database: Fetched Object 88 for ID 88\n", + "[31.00] Cache: Object 11 aged to 4\n", + "[31.00] Cache: Object 6 aged to 1\n", + "[31.00] Cache: Object 4 aged to 1\n", + "[31.00] Cache: Object 3 aged to 1\n", + "[31.00] Cache: Object 1 aged to 3\n", + "[31.00] Cache: Object 20 aged to 4\n", + "[31.00] Cache: Object 13 aged to 1\n", + "[31.00] Cache: Object 88 aged to 1\n", + "[31.00] Database: Fetched Object 11 for ID 11\n", + "[31.00] Cache: Refreshed object 11\n", + "[31.00] Database: Fetched Object 20 for ID 20\n", + "[31.00] Cache: Refreshed object 20\n", + "[31.48] Client: Requesting object 4\n", + "[32.00] Cache: Object 11 aged to 1\n", + "[32.00] Cache: Object 6 aged to 2\n", + "[32.00] Cache: Object 4 aged to 2\n", + "[32.00] Cache: Object 3 aged to 2\n", + "[32.00] Cache: Object 1 aged to 4\n", + "[32.00] Cache: Object 20 aged to 1\n", + "[32.00] Cache: Object 13 aged to 2\n", + "[32.00] Cache: Object 88 aged to 2\n", + "[32.00] Database: Fetched Object 11 for ID 11\n", + "[32.00] Cache: Refreshed object 11\n", + "[32.00] Database: Fetched Object 20 for ID 20\n", + "[32.00] Cache: Refreshed object 20\n", + "[33.00] Cache: Object 11 aged to 1\n", + "[33.00] Cache: Object 6 aged to 3\n", + "[33.00] Cache: Object 4 aged to 3\n", + "[33.00] Cache: Object 3 aged to 3\n", + "[33.00] Cache: Object 1 expired\n", + "[33.00] Cache: Object 20 aged to 1\n", + "[33.00] Cache: Object 13 aged to 3\n", + "[33.00] Cache: Object 88 aged to 3\n", + "[33.00] Database: Fetched Object 20 for ID 20\n", + "[33.00] Cache: Refreshed object 20\n", + "[34.00] Cache: Object 11 aged to 2\n", + "[34.00] Cache: Object 6 aged to 4\n", + "[34.00] Cache: Object 4 aged to 4\n", + "[34.00] Cache: Object 3 aged to 4\n", + "[34.00] Cache: Object 20 aged to 1\n", + "[34.00] Cache: Object 13 aged to 4\n", + "[34.00] Cache: Object 88 aged to 4\n", + "[34.00] Database: Fetched Object 4 for ID 4\n", + "[34.00] Cache: Refreshed object 4\n", + "[34.00] Database: Fetched Object 3 for ID 3\n", + "[34.00] Cache: Refreshed object 3\n", + "[34.00] Database: Fetched Object 13 for ID 13\n", + "[34.00] Cache: Refreshed object 13\n", + "[34.63] Client: Requesting object 1\n", + "[34.63] Database: Fetched Object 1 for ID 1\n", + "[35.00] Cache: Object 11 aged to 3\n", + "[35.00] Cache: Object 6 expired\n", + "[35.00] Cache: Object 4 aged to 1\n", + "[35.00] Cache: Object 3 aged to 1\n", + "[35.00] Cache: Object 20 aged to 2\n", + "[35.00] Cache: Object 13 aged to 1\n", + "[35.00] Cache: Object 88 aged to 5\n", + "[35.00] Cache: Object 1 aged to 1\n", + "[35.00] Database: Fetched Object 4 for ID 4\n", + "[35.00] Cache: Refreshed object 4\n", + "[36.00] Cache: Object 11 aged to 4\n", + "[36.00] Cache: Object 4 aged to 1\n", + "[36.00] Cache: Object 3 aged to 2\n", + "[36.00] Cache: Object 20 aged to 3\n", + "[36.00] Cache: Object 13 aged to 2\n", + "[36.00] Cache: Object 88 expired\n", + "[36.00] Cache: Object 1 aged to 2\n", + "[36.00] Database: Fetched Object 4 for ID 4\n", + "[36.00] Cache: Refreshed object 4\n", + "[37.00] Cache: Object 11 expired\n", + "[37.00] Cache: Object 4 aged to 1\n", + "[37.00] Cache: Object 3 aged to 3\n", + "[37.00] Cache: Object 20 aged to 4\n", + "[37.00] Cache: Object 13 aged to 3\n", + "[37.00] Cache: Object 1 aged to 3\n", + "[37.54] Client: Requesting object 3\n", + "[37.61] Client: Requesting object 36\n", + "[37.61] Database: Fetched Object 36 for ID 36\n", + "[37.81] Client: Requesting object 32\n", + "[37.81] Database: Fetched Object 32 for ID 32\n", + "[37.93] Client: Requesting object 5\n", + "[37.93] Database: Fetched Object 5 for ID 5\n", + "[38.00] Cache: Object 4 aged to 2\n", + "[38.00] Cache: Object 3 aged to 4\n", + "[38.00] Cache: Object 20 expired\n", + "[38.00] Cache: Object 13 aged to 4\n", + "[38.00] Cache: Object 1 aged to 4\n", + "[38.00] Cache: Object 36 aged to 1\n", + "[38.00] Cache: Object 32 aged to 1\n", + "[38.00] Cache: Object 5 aged to 1\n", + "[38.00] Database: Fetched Object 4 for ID 4\n", + "[38.00] Cache: Refreshed object 4\n", + "[38.36] Client: Requesting object 1\n", + "[39.00] Cache: Object 4 aged to 1\n", + "[39.00] Cache: Object 3 expired\n", + "[39.00] Cache: Object 13 expired\n", + "[39.00] Cache: Object 1 aged to 5\n", + "[39.00] Cache: Object 36 aged to 2\n", + "[39.00] Cache: Object 32 aged to 2\n", + "[39.00] Cache: Object 5 aged to 2\n", + "[39.00] Database: Fetched Object 4 for ID 4\n", + "[39.00] Cache: Refreshed object 4\n", + "[39.39] Client: Requesting object 5\n", + "[40.00] Cache: Object 4 aged to 1\n", + "[40.00] Cache: Object 1 expired\n", + "[40.00] Cache: Object 36 aged to 3\n", + "[40.00] Cache: Object 32 aged to 3\n", + "[40.00] Cache: Object 5 aged to 3\n", + "[40.00] Database: Fetched Object 36 for ID 36\n", + "[40.00] Cache: Refreshed object 36\n", + "[41.00] Cache: Object 4 aged to 2\n", + "[41.00] Cache: Object 36 aged to 1\n", + "[41.00] Cache: Object 32 aged to 4\n", + "[41.00] Cache: Object 5 aged to 4\n", + "[41.00] Database: Fetched Object 5 for ID 5\n", + "[41.00] Cache: Refreshed object 5\n", + "[41.49] Client: Requesting object 1\n", + "[41.49] Database: Fetched Object 1 for ID 1\n", + "[41.82] Client: Requesting object 1\n", + "[42.00] Cache: Object 4 aged to 3\n", + "[42.00] Cache: Object 36 aged to 2\n", + "[42.00] Cache: Object 32 aged to 5\n", + "[42.00] Cache: Object 5 aged to 1\n", + "[42.00] Cache: Object 1 aged to 1\n", + "[42.00] Database: Fetched Object 36 for ID 36\n", + "[42.00] Cache: Refreshed object 36\n", + "[42.79] Client: Requesting object 1\n", + "[43.00] Cache: Object 4 aged to 4\n", + "[43.00] Cache: Object 36 aged to 1\n", + "[43.00] Cache: Object 32 expired\n", + "[43.00] Cache: Object 5 aged to 2\n", + "[43.00] Cache: Object 1 aged to 2\n", + "[43.00] Database: Fetched Object 1 for ID 1\n", + "[43.00] Cache: Refreshed object 1\n", + "[44.00] Cache: Object 4 expired\n", + "[44.00] Cache: Object 36 aged to 2\n", + "[44.00] Cache: Object 5 aged to 3\n", + "[44.00] Cache: Object 1 aged to 1\n", + "[44.00] Database: Fetched Object 36 for ID 36\n", + "[44.00] Cache: Refreshed object 36\n", + "[44.00] Database: Fetched Object 5 for ID 5\n", + "[44.00] Cache: Refreshed object 5\n", + "[44.12] Client: Requesting object 3\n", + "[44.12] Database: Fetched Object 3 for ID 3\n", + "[44.45] Client: Requesting object 5\n", + "[45.00] Cache: Object 36 aged to 1\n", + "[45.00] Cache: Object 5 aged to 1\n", + "[45.00] Cache: Object 1 aged to 2\n", + "[45.00] Cache: Object 3 aged to 1\n", + "[45.00] Database: Fetched Object 36 for ID 36\n", + "[45.00] Cache: Refreshed object 36\n", + "[45.25] Client: Requesting object 7\n", + "[45.25] Database: Fetched Object 7 for ID 7\n", + "[45.54] Client: Requesting object 2\n", + "[45.54] Database: Fetched Object 2 for ID 2\n", + "[46.00] Cache: Object 36 aged to 1\n", + "[46.00] Cache: Object 5 aged to 2\n", + "[46.00] Cache: Object 1 aged to 3\n", + "[46.00] Cache: Object 3 aged to 2\n", + "[46.00] Cache: Object 7 aged to 1\n", + "[46.00] Cache: Object 2 aged to 1\n", + "[46.97] Client: Requesting object 6\n", + "[46.97] Database: Fetched Object 6 for ID 6\n", + "[47.00] Cache: Object 36 aged to 2\n", + "[47.00] Cache: Object 5 aged to 3\n", + "[47.00] Cache: Object 1 aged to 4\n", + "[47.00] Cache: Object 3 aged to 3\n", + "[47.00] Cache: Object 7 aged to 2\n", + "[47.00] Cache: Object 2 aged to 2\n", + "[47.00] Cache: Object 6 aged to 1\n", + "[47.00] Database: Fetched Object 1 for ID 1\n", + "[47.00] Cache: Refreshed object 1\n", + "[47.50] Client: Requesting object 2\n", + "[48.00] Cache: Object 36 aged to 3\n", + "[48.00] Cache: Object 5 aged to 4\n", + "[48.00] Cache: Object 1 aged to 1\n", + "[48.00] Cache: Object 3 aged to 4\n", + "[48.00] Cache: Object 7 aged to 3\n", + "[48.00] Cache: Object 2 aged to 3\n", + "[48.00] Cache: Object 6 aged to 2\n", + "[48.00] Database: Fetched Object 3 for ID 3\n", + "[48.00] Cache: Refreshed object 3\n", + "[48.00] Database: Fetched Object 2 for ID 2\n", + "[48.00] Cache: Refreshed object 2\n", + "[49.00] Cache: Object 36 aged to 4\n", + "[49.00] Cache: Object 5 expired\n", + "[49.00] Cache: Object 1 aged to 2\n", + "[49.00] Cache: Object 3 aged to 1\n", + "[49.00] Cache: Object 7 aged to 4\n", + "[49.00] Cache: Object 2 aged to 1\n", + "[49.00] Cache: Object 6 aged to 3\n", + "[49.00] Database: Fetched Object 2 for ID 2\n", + "[49.00] Cache: Refreshed object 2\n", + "[49.93] Client: Requesting object 1\n", + "[50.00] Cache: Object 36 expired\n", + "[50.00] Cache: Object 1 aged to 3\n", + "[50.00] Cache: Object 3 aged to 2\n", + "[50.00] Cache: Object 7 aged to 5\n", + "[50.00] Cache: Object 2 aged to 1\n", + "[50.00] Cache: Object 6 aged to 4\n", + "[50.00] Database: Fetched Object 7 for ID 7\n", + "[50.00] Cache: Refreshed object 7\n", + "[50.00] Database: Fetched Object 2 for ID 2\n", + "[50.00] Cache: Refreshed object 2\n", + "[51.00] Cache: Object 1 aged to 4\n", + "[51.00] Cache: Object 3 aged to 3\n", + "[51.00] Cache: Object 7 aged to 1\n", + "[51.00] Cache: Object 2 aged to 1\n", + "[51.00] Cache: Object 6 aged to 5\n", + "[51.00] Database: Fetched Object 7 for ID 7\n", + "[51.00] Cache: Refreshed object 7\n", + "[51.27] Client: Requesting object 6\n", + "[52.00] Cache: Object 1 expired\n", + "[52.00] Cache: Object 3 aged to 4\n", + "[52.00] Cache: Object 7 aged to 1\n", + "[52.00] Cache: Object 2 aged to 2\n", + "[52.00] Cache: Object 6 expired\n", + "[53.00] Cache: Object 3 expired\n", + "[53.00] Cache: Object 7 aged to 2\n", + "[53.00] Cache: Object 2 aged to 3\n", + "[53.04] Client: Requesting object 5\n", + "[53.04] Database: Fetched Object 5 for ID 5\n", + "[53.78] Client: Requesting object 29\n", + "[53.78] Database: Fetched Object 29 for ID 29\n", + "[54.00] Cache: Object 7 aged to 3\n", + "[54.00] Cache: Object 2 aged to 4\n", + "[54.00] Cache: Object 5 aged to 1\n", + "[54.00] Cache: Object 29 aged to 1\n", + "[54.89] Client: Requesting object 2\n", + "[55.00] Cache: Object 7 aged to 4\n", + "[55.00] Cache: Object 2 expired\n", + "[55.00] Cache: Object 5 aged to 2\n", + "[55.00] Cache: Object 29 aged to 2\n", + "[55.03] Client: Requesting object 12\n", + "[55.03] Database: Fetched Object 12 for ID 12\n", + "[56.00] Cache: Object 7 expired\n", + "[56.00] Cache: Object 5 aged to 3\n", + "[56.00] Cache: Object 29 aged to 3\n", + "[56.00] Cache: Object 12 aged to 1\n", + "[56.34] Client: Requesting object 17\n", + "[56.34] Database: Fetched Object 17 for ID 17\n", + "[56.82] Client: Requesting object 54\n", + "[56.82] Database: Fetched Object 54 for ID 54\n", + "[57.00] Cache: Object 5 aged to 4\n", + "[57.00] Cache: Object 29 aged to 4\n", + "[57.00] Cache: Object 12 aged to 2\n", + "[57.00] Cache: Object 17 aged to 1\n", + "[57.00] Cache: Object 54 aged to 1\n", + "[57.00] Database: Fetched Object 29 for ID 29\n", + "[57.00] Cache: Refreshed object 29\n", + "[57.00] Database: Fetched Object 12 for ID 12\n", + "[57.00] Cache: Refreshed object 12\n", + "[58.00] Cache: Object 5 aged to 5\n", + "[58.00] Cache: Object 29 aged to 1\n", + "[58.00] Cache: Object 12 aged to 1\n", + "[58.00] Cache: Object 17 aged to 2\n", + "[58.00] Cache: Object 54 aged to 2\n", + "[58.00] Database: Fetched Object 12 for ID 12\n", + "[58.00] Cache: Refreshed object 12\n", + "[58.50] Client: Requesting object 13\n", + "[58.50] Database: Fetched Object 13 for ID 13\n", + "[59.00] Cache: Object 5 expired\n", + "[59.00] Cache: Object 29 aged to 2\n", + "[59.00] Cache: Object 12 aged to 1\n", + "[59.00] Cache: Object 17 aged to 3\n", + "[59.00] Cache: Object 54 aged to 3\n", + "[59.00] Cache: Object 13 aged to 1\n", + "[59.00] Database: Fetched Object 17 for ID 17\n", + "[59.00] Cache: Refreshed object 17\n", + "[59.52] Client: Requesting object 5\n", + "[59.52] Database: Fetched Object 5 for ID 5\n" + ] + } + ], + "source": [ + "# Instantiate components\n", + "db = Database()\n", + "cache = Cache(env, db)\n", + "\n", + "# Start processes\n", + "env.process(age_cache_process(env, cache))\n", + "env.process(client_request_process(env, cache))\n", + "\n", + "# Run the simulation\n", + "env.run(until=SIMULATION_TIME)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "3b6f7c1f-ea54-4496-bb9a-370cee2d2751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Object 1: Hit Rate = 0.71, Average Age = 1.50\n", + "Object 2: Hit Rate = 0.62, Average Age = 2.20\n", + "Object 3: Hit Rate = 0.50, Average Age = 2.33\n", + "Object 4: Hit Rate = 0.50, Average Age = 1.00\n", + "Object 5: Hit Rate = 0.43, Average Age = 1.00\n", + "Object 6: Hit Rate = 0.50, Average Age = 2.33\n" + ] + } + ], + "source": [ + "# Calculate and print hit rate and average age for each object\n", + "for obj_id in range(1, CACHE_CAPACITY + 1):\n", + " if cache.hits[obj_id] != 0:\n", + " hit_rate = cache.hits[obj_id] / max(1, cache.access_count[obj_id]) # Avoid division by zero\n", + " avg_age = cache.cumulative_age[obj_id] / max(1, cache.hits[obj_id]) # Only average over hits\n", + " print(f\"Object {obj_id}: Hit Rate = {hit_rate:.2f}, Average Age = {avg_age:.2f}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "01f8f9ee-c278-4a22-8562-ba02e77f5ddd", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAACU8AAAHWCAYAAABNZ+o8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3QU9dvG4c/upvcECCWE3nsJQUBAUcSGiChNCIEAIvb6sysqCiqK2GghEBALClYEwQIoSAi9995DIL3uzvtHJK9IkUCS2ST3dY7nmNnZ79yzWYZl99nnsRiGYSAiIiIiIiIiIiIiIiIiIiIiIlLGWM0OICIiIiIiIiIiIiIiIiIiIiIiYgYVT4mIiIiIiIiIiIiIiIiIiIiISJmk4ikRERERERERERERERERERERESmTVDwlIiIiIiIiIiIiIiIiIiIiIiJlkoqnRERERERERERERERERERERESkTFLxlIiIiIiIiIiIiIiIiIiIiIiIlEkqnhIRERERERERERERERERERERkTJJxVMiIiIiIiIiIiIiIiIiIiIiIlImqXhKRERERERERERERERERERERETKJBVPiYiIiIiIiEip9/vvv2OxWPjqq6/MjnJZjh8/zt133025cuWwWCyMHz++0Nbet28fFouFd9555z/3feWVV7BYLIV27OJgsVh45ZVXzI5RKCwWCw8++KDZMUq0GjVqEBkZaXYMEREREREREXFiKp4SERERERERkUIxffp0LBYLHh4eHD58+Lzbr7vuOpo0aWJCspLnscceY+HChTz77LPMnDmTm2+++ZL7p6Wl8dprr9GsWTO8vLzw9/enY8eOxMbGYhhGMaUuuPnz55eYQqfff/+du+66i0qVKuHm5kZwcDDdu3dn7ty5ZkcrFDk5OUyYMIE2bdrg6+uLj48Pbdq0YcKECeTk5JgdL9/ZQsjL+U9ERERERERE5HK4mB1AREREREREREqXrKwsxowZwwcffGB2lBLr119/pUePHjz55JP/ue/x48e54YYb2Lp1K3379uXBBx8kMzOTr7/+mkGDBjF//nw+/fRTbDZbgXO88MILPPPMM1dyCpdl/vz5fPTRR4VaQJWRkYGLS+G+5fXyyy/z6quvUrduXe677z6qV6/OqVOnmD9/Pr169eLTTz+lf//+hXrM4pSWlsZtt93GkiVLuP3224mMjMRqtbJgwQIeeeQR5s6dy48//oi3t7fZUWnYsCEzZ848Z9uzzz6Lj48Pzz///Hn7b9++HatV3x8VERERERERkYtT8ZSIiIiIiIiIFKoWLVowZcoUnn32WapUqWJ2nGKVlpZWKAUmJ06cICAg4LL2HTRoEFu3bmXevHnccccd+dsffvhhnnrqKd555x1atmzJ//73vwLncHFxKfRCpKLm4eFRqOt99dVXvPrqq9x9993Mnj0bV1fX/NueeuopFi5c6FSdma7E448/zpIlS/jggw/OGRN4//3389FHH/Hggw/y5JNP8sknnxRbJsMwyMzMxNPT85ztFStWZMCAAedsGzNmDOXLlz9vO4C7u3uR5hQRERERERGRkk9fuxIRERERERGRQvXcc89ht9sZM2bMJffbt28fFouF6dOnn3ebxWI5pxvRK6+8gsViYceOHQwYMAB/f38qVKjAiy++iGEYHDx4kB49euDn50elSpUYN27cBY9pt9t57rnnqFSpEt7e3txxxx0cPHjwvP1WrlzJzTffjL+/P15eXnTu3Jk///zznH3OZtqyZQv9+/cnMDCQa6+99pLnvGfPHu655x6CgoLw8vLimmuu4ccff8y//ezoQ8Mw+Oijj/5z/Nhff/3FwoULiYyMPKdw6qw333yTunXrMnbsWDIyMs67/b333qN69ep4enrSuXNnNm3adMFz/LdZs2bRunVrPD09CQoKom/fvhd9HG+99VYCAwPx9vamWbNmvP/++wBERkby0UcfAVxw1Nrnn39O69at8fX1xc/Pj6ZNm+bf91Iu9tzZtWsXkZGRBAQE4O/vz+DBg0lPT//P9V588UWCgoKYNm3aOYVTZ3Xr1o3bb78dgOzsbF566SVat26Nv78/3t7edOzYkd9+++28+zkcDt5//32aNm2Kh4cHFSpU4OabbyY+Pv68fb/55huaNGmCu7s7jRs3ZsGCBeftc/jwYYYMGULFihXz95s2bdp/nt+hQ4eIjo6mS5cu5xROnfXAAw9w/fXXM3XqVA4dOgRAkyZNuP766y94TiEhIdx9993nbBs/fjyNGzfGw8ODihUrct9993H69Olz7lujRg1uv/12Fi5cSFhYGJ6enkyaNOk/8/+XGjVqEBkZmf/z2T9jf/zxBw8//DAVKlQgICCA++67j+zsbM6cOUNERASBgYEEBgby9NNPnzf68nLPSURERERERERKBhVPiYiIiIiIiEihqlmzJhEREUyZMoUjR44U6tp9+vTB4XAwZswY2rZty+uvv8748ePp2rUrISEhjB07ljp16vDkk0+ydOnS8+4/evRofvzxR/73v//x8MMPs2jRIm688cZzCot+/fVXOnXqRHJyMi+//DJvvPEGZ86coUuXLsTFxZ235j333EN6ejpvvPEGw4YNu2j248eP0759exYuXMjIkSMZPXo0mZmZ3HHHHcybNw+ATp065Y8k69q1KzNnzjxvRNk/ff/99wBERERc8HYXFxf69+/P6dOnzyv+io2NZcKECTzwwAM8++yzbNq0iS5dunD8+PGLHg/yHsOIiAjq1q3Lu+++y6OPPsovv/xCp06dOHPmTP5+ixYtolOnTmzZsoVHHnmEcePGcf311/PDDz8AcN9999G1a1eA/PM8e66LFi2iX79+BAYGMnbsWMaMGcN111133jkURO/evUlJSeHNN9+kd+/eTJ8+nVGjRl3yPjt37mTbtm3ceeed+Pr6/ucxkpOTmTp1Ktdddx1jx47llVde4eTJk3Tr1o1169ads29UVBSPPvoooaGhjB07lmeeeQYPDw/++uuvc/b7448/GDlyJH379uWtt94iMzOTXr16cerUqfx9jh8/zjXXXMPixYt58MEHef/996lTpw5RUVGMHz/+kpl/+ukn7Hb7RZ9DkPf8ys3NzS/a6tOnD0uXLuXYsWPnZT1y5Ah9+/bN33bffffx1FNP0aFDB95//30GDx7Mp59+Srdu3c7r2LV9+3b69etH165def/992nRosUls1+Nhx56iJ07dzJq1CjuuOMOJk+ezIsvvkj37t2x2+288cYbXHvttbz99tvn/RksyDmJiIiIiIiISAlgiIiIiIiIiIgUgpiYGAMwVq1aZezevdtwcXExHn744fzbO3fubDRu3Dj/57179xqAERMTc95agPHyyy/n//zyyy8bgDF8+PD8bbm5uUbVqlUNi8VijBkzJn/76dOnDU9PT2PQoEH523777TcDMEJCQozk5OT87V9++aUBGO+//75hGIbhcDiMunXrGt26dTMcDkf+funp6UbNmjWNrl27npepX79+l/X4PProowZgLFu2LH9bSkqKUbNmTaNGjRqG3W4/5/wfeOCB/1zzzjvvNADj9OnTF91n7ty5BmBMmDDBMIz/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jz8usjyxsbHnjCf76quvOHr0KLfccgsArVu3pnbt2rzzzjukpqaed/+TJ09e8bFvvfVW4uLiWLFiRf62tLQ0Jk+eTI0aNa6oM1T79u258cYbiYmJ4Ycffjjv9ueff54dO3bw9NNPn1fo8c0333D48OH8n+Pi4li5cmX+Y3Ehd911FzabjVGjRp3XsckwjPxRia1ataJmzZqMHz/+vOK4f97P29sbOL+A7t8jF61Wa36BW1ZW1kXzFYVRo0Zx6tQphg4dSm5u7nm3//zzz/mP/dmuRf88x5UrV57zOwfo1asXhmEwatSo89YraMc0m81Gr169+Prrr9m0adN5t//XczY0NJTBgwezePFiPvnkk/NunzhxIr/++itRUVFUrVr1nNv69OnDX3/9xbRp00hISDhnZB9A7969sdvtvPbaa+etm5ube97vvSQojeckIiIiIiIiUtap85SIiIiIiIiIFKnnn3+emTNnsn37dho3bnzObUOHDmXMmDEMHTqUsLAwli5dyo4dO4osS1BQENdeey2DBw/m+PHjjB8/njp16jBs2DAgr0hn6tSp3HLLLTRu3JjBgwcTEhLC4cOH+e233/Dz8+P777+/omM/88wzfPbZZ9xyyy08/PDDBAUFMWPGDPbu3cvXX3+N1Xpl33GLjY3lhhtuoEePHvTv35+OHTuSlZXF3Llz+f333+nTpw9PPfXUeferU6cO1157Lffffz9ZWVmMHz+ecuXK8fTTT1/0WLVr1+b111/n2WefZd++fdx55534+vqyd+9e5s2bx/Dhw3nyySexWq188skndO/enRYtWjB48GAqV67Mtm3b2Lx5MwsXLgTyitUAHn74Ybp164bNZqNv374MHTqUxMREunTpQtWqVdm/fz8ffPABLVq0yB8zV1z69OnDxo0bGT16NGvXrqVfv35Ur16dU6dOsWDBAn755Rdmz54N5HUCmzt3Lj179uS2225j7969TJw4kUaNGp1TjHf99dczcOBAJkyYwM6dO7n55ptxOBwsW7aM66+/ngcffLBAGceMGcNvv/1G27ZtGTZsGI0aNSIxMZE1a9awePFiEhMTL3n/9957j23btjFy5EgWLFiQ32Fq4cKFfPvtt3Tu3Jlx48add7/evXvz5JNP8uSTTxIUFHRe56vOnTtz33338eabb7Ju3TpuuukmXF1d2blzJ3PmzOH999/n7rvvLtC5mq00npOIiIiIiIhIWafiKREREREREREpUnXq1GHAgAHMmDHjvNteeuklTp48yVdffcWXX37JLbfcwk8//URwcHCRZHnuuefYsGEDb775JikpKdxwww18/PHHeHl55e9z3XXXsWLFCl577TU+/PBDUlNTqVSpEm3btuW+++674mNXrFiR5cuX87///Y8PPviAzMxMmjVrxvfff89tt912xetWrlyZuLg4xo0bx5w5c/j6669xcXGhWbNmTJ8+nYiIiAuOx4uIiMBqtTJ+/HhOnDhBeHg4H374IZUrV77k8Z555hnq1avHe++9l985KTQ0lJtuuok77rgjf79u3brx22+/MWrUKMaNG4fD4aB27dr5hWqQ18nqoYce4vPPP2fWrFkYhkHfvn0ZMGAAkydP5uOPP+bMmTNUqlSJPn368Morr1xxkdnVeP311+nSpQsTJkzgk08+ITExkcDAQK655hq+/fbb/POOjIzk2LFjTJo0iYULF9KoUSNmzZrFnDlz+P33389ZMyYmhmbNmhEdHc1TTz2Fv78/YWFhtG/fvsD5KlasSFxcHK+++ipz587l448/ply5cjRu3PiCIzP/zcfHh19++YWPP/6YWbNm8dRTT2EYBg0aNGD8+PGMHDkSV1fX8+5XtWpV2rdvz59//snQoUMvuM/EiRNp3bo1kyZN4rnnnsPFxYUaNWowYMCA80ZJlhSl8ZxEREREREREyjKLUdBe4CIiIiIiIiIiUia8+OKLvPnmmxccVyciIiIiIiIiIlIaFP9X9UREREREREREpEQ4evQo5cuXNzuGiIiIiIiIiIhIkdHYPhEREREREREROceePXuYN28ec+bM4fbbbzc7joiIiIiIiIiISJFR5ykRERERERERETnH0qVLGTVqFJ07d+bdd981O46IiIiIiIiIiEiRsRiGYZgdQkREREREREREREREREREREREpLip85SIiIiIiIiIiIiIiIiIiIiIiJRJKp4SEREREREREREREREREREREZEyycXsAFfD4XBw5MgRfH19sVgsZscRERERERERERERERERERERERGTGYZBSkoKVapUwWq9dG+pEl08deTIEUJDQ82OISIiIiIiIiIiIiIiIiIiIiIiTubgwYNUrVr1kvuU6OIpX19fIO9E/fz8TE4jF5OTk8PPP//MTTfdhKurq9lxRETKPF2XRUSci67LIiLOR9dmERHnouuyiIhz0XVZRMS56Lp8YcnJyYSGhubXFl1KiS6eOjuqz8/PT8VTTiwnJwcvLy/8/Pz0B1VExAnouiwi4lx0XRYRcT66NouIOBddl0VEnIuuyyIizkXX5Us7W1t0KZce6iciIiIiIiIiIiIiIiIiIiIiIlJKqXhKRERERERERERERERERERERETKJBVPiYiIiIiIiIiIiIiIiIiIiIhImeRidgARERERERERERERERERERERcW6GYZCbm4vdbjc7ivxDTk4OLi4uZGZmlqnfjc1mw8XFBYvFctVrqXhKRERERERERERERERERERERC4qOzubo0ePkp6ebnYU+RfDMKhUqRIHDx4slEKiksTLy4vKlSvj5uZ2VeuoeEpERERERERERERERERERERELsjhcLB3715sNhtVqlTBzc2tzBXpODOHw0Fqaio+Pj5YrVaz4xQLwzDIzs7m5MmT7N27l7p1617Vuat4SkREREREREREREREREREREQuKDs7G4fDQWhoKF5eXmbHkX9xOBxkZ2fj4eFRZoqnADw9PXF1dWX//v3553+lys6jJiIiIiIiIiIiIiIiIiIiIiJXpCwV5kjJUFjPST2zRURERERERERERERERERERESkTFLxlIiIiIiIiIiIiIiIiIiIiIiIlEkqnhIRERERERERERERERERERGRMq1GjRqMHz/+qvcpbrVq1eKTTz4xO8ZlccbHD1Q8JSIiIiIiIiIiIiIiIiIiIiKl1MGDBxkyZAhVqlTBzc2N6tWr88gjj3Dq1KkCr7Vq1SqGDx9eaNkKo5ho5cqVDBo06Kqz7Nq1i8GDB1O1alXc3d2pWbMm/fr1Iz4+/qrXdnYqnhIRERERERERERERERERERGRUmfPnj2EhYWxc+dOPvvsM3bt2sXEiRP55ZdfaNeuHYmJiQVar0KFCnh5eRVR2itTGJni4+Np3bo1O3bsYNKkSWzZsoV58+bRoEEDnnjiiUJK6rxUPCUiIiLyt4OJ6QydEc+nK/ebHUVERERERERERERERMRpGYZBenZusf9nGEaBcj7wwAO4ubnx888/07lzZ6pVq8Ytt9zC4sWLOXz4MM8///w5+6ekpNCvXz+8vb0JCQnho48+Ouf2f3eKOnPmDEOHDqVChQr4+fnRpUsX1q9ff859vv/+e9q0aYOHhwfly5enZ8+eAFx33XXs37+fxx57DIvFgsViAWD//v10796dwMBAvL29ady4MfPnz7/oOf57bJ/FYmHq1Kn07NkTLy8v6taty3fffXfR+xuGQWRkJHXr1mXZsmXcdttt1K5dmxYtWvDyyy/z7bff5u/7v//9j3r16uHl5UWtWrV48cUXycnJuazzPSs9PZ0hQ4bg6+tLtWrVmDx58jm3Hzx4kN69exMQEEBQUBA9evRg3759F81fGFyKdHURERGREuJESiYDoley/1Q6i7ceB+DettVNTiUiIiIiIiIiIiIiIuJ8MnLsNHppYbEfd8ur3fByu7xSl8TERBYuXMjo0aPx9PQ857ZKlSpx77338sUXX/Dxxx/nFy69/fbbPPfcc4waNYqFCxfyyCOPUK9ePbp27XrBY9xzzz14enry008/4e/vz6RJk7jhhhvYsWMHQUFB/Pjjj/Ts2ZPnn3+e2NhYsrOz8wuh5s6dS/PmzRk+fDjDhg3LX/OBBx4gOzubpUuX4u3tzZYtW/Dx8SnQ4zRq1Cjeeust3n77bT744APuvfde9u/fT1BQ0Hn7rlu3js2bNzN79mys1vN7MAUEBOT/v6+vL9OnT6dKlSps3LiRYcOG4evry9NPPw1wyfM9a9y4cbz22ms899xzfPXVV9x///107tyZ+vXrk5OTQ7du3WjXrh3Lli3DxcWF119/nZtvvpkNGzbg5uZWoMfhcql4SkRERMq8pIwcBk1bxf5T6Xi72UjLtvPCN5sI8HTjtmaVzY4nIiIiIiIiIiIiIiIiBbRz504Mw6Bhw4YXvL1hw4acPn2akydPEhwcDECHDh145plnAKhXrx5//vkn77333gWLp/744w/i4uI4ceIE7u7uALzzzjt88803fPXVVwwfPpzRo0fTt29fRo0alX+/5s2bAxAUFITNZsPX15dKlSrl337gwAF69epF06ZNgbzOUgUVGRlJv379AHjjjTeYMGECcXFx3HzzzRd8nAAaNGjwn+u+8MIL+f9fo0YNnnzyST7//PP84qlLne9Zt956KyNHjgTyOlm99957/Pbbb9SvX58vvvgCh8PB1KlT8wvaYmJiCAgI4Pfff+emm24qyMNw2VQ8JSIiImVaZo6dYTPi2Xo0mfI+7nw1oh2Tl+1h9soDPPrFWvw8XehYt4LZMUVERERERERERERERJyGp6uNLa92M+W4BVWQUX/t2rU77+d/jun7p/Xr15Oamkq5cuXO2Z6RkcHu3buBvK5O/+wqdTkefvhh7r//fn7++WduvPFGevXqRbNmzQq0xj/39/b2xs/PjxMnTlxw34I8Pl988QUTJkxg9+7dpKamkpubi5+fX/7tl3O+/8xmsVioVKlSfrb169eza9cufH19z7lPZmZm/mNaFFQ8JSIiImVWjt3Bg7PXELcvEV8PF2KHhFOjvDev9WhCUnoOP248yn0zVzN72DW0CA0wO66IiIiIiIiIiIiIiIhTsFgslz0+zyx16tTBYrGwdetWevbsed7tW7duJTAwkAoVruxL9KmpqVSuXJnff//9vNvOjrr797jAyzF06FC6devGjz/+yM8//8ybb77JuHHjeOihhy57DVdX13N+tlgsOByOC+5br149ALZt20bLli0vuuaKFSu49957GTVqFN26dcPf35/PP/+ccePG5e9zOed7qWypqam0bt2aTz/99Lz7Xenv6XKcP6xQREREpAxwOAz+99UGFm89gbuLlehBbWhUJa8y3ma18G6f5nSsW570bDuRMXHsOpFicmIRERERERERERERERG5XOXKlaNr1658/PHHZGRknHPbsWPH+PTTT+nTp0/+eDiAv/7665z9/vrrr4uO/WvVqhXHjh3DxcWFOnXqnPNf+fLlgbwuS7/88stFM7q5uWG328/bHhoayogRI5g7dy5PPPEEU6ZMuezzLqgWLVrQqFEjxo0bd8ECqzNnzgCwfPlyqlevzvPPP09YWBh169Zl//795+z7X+f7X1q1asXOnTsJDg4+7zH19/e/4nX/i4qnREREpMwxDIPXf9zK3LWHsVktfHxvK8JrBp2zj7uLjYkDWtM8NIAz6TkMmBrHodPpJiUWERERERERERERERGRgvrwww/JysqiW7duLF26lIMHD7JgwQK6du1KSEgIo0ePPmf/P//8k7feeosdO3bw0UcfMWfOHB555JELrn3jjTfSrl077rzzTn7++Wf27dvH8uXLef7554mPjwfg5Zdf5rPPPuPll19m69atbNy4kbFjx+avUaNGDZYuXcrhw4dJSEgA4NFHH2XhwoXs3buXNWvW8Ntvv120gKswWCwWYmJi2LFjBx07dmT+/Pns2bOHDRs2MHr0aHr06AFA3bp1OXDgAJ9//jm7d+9mwoQJzJs375y1/ut8/8u9995L+fLl6dGjB8uWLWPv3r38/vvvPPzwwxw6dKhQz/ufVDwlIiIiZc7Hv+9m2p97AXj77mbc0LDiBffzdndhemQb6gT7cCw5k4joOE6lZhVnVBEREREREREREREREblCdevWJT4+nlq1atG7d29q167N8OHDuf7661mxYgVBQed+uf6JJ54gPj6eli1b8vrrr/Puu+/SrVu3C65tsViYP38+nTp1YvDgwdSrV4++ffuyf/9+KlbM++zpuuuuY86cOXz33Xe0aNGCLl26EBcXl7/Gq6++yr59+6hdu3b+WDq73c4DDzxAw4YNufnmm6lXrx4ff/xxET1CecLDw4mPj6dOnToMGzaMhg0bcscdd7B582bGjx8PwB133MFjjz3Ggw8+SIsWLVi+fDkvvvjiOev81/n+Fy8vL5YuXUq1atW46667aNiwIVFRUWRmZuLn51eYp3wOi2EYRpGtXsSSk5Px9/cnKSmpSB8kuTo5OTnMnz+fW2+99bzZlSIiUvzK+nV59soDPDdvIwAv3d6IIdfW/M/7HE3K4O5PVnD4TAZNQ/z5bPg1+Lg79xxvESk5yvp1WUTEGenaLCLiXHRdFhFxLroui5Q9mZmZ7N27l5o1a+Lh4WF2HFNVrlyZ1157jaFDh5odJZ/D4SA5ORk/Pz+s1rLVQ+lSz82C1BSVrUdNREREyrT5G4/y/Dd5hVMPXl/nsgqnACr7ezIzKpwgbzc2Hk5ieGw8mTnnz58WERERERERERERERGR0ic9PZ1FixZx/PhxGjdubHYcKWQqnhIREZEyYdnOkzzy+VoMA/q3rcYTN9Ur0P1rVfBhxuBwvN1sLN99ikc+X0uu3VFEaUVERERERERERERERMRZTJ48mb59+/Loo4/Srl07s+NIIVPxlIiIiJR66w6e4b6Zq8mxG9zWtDKv9WiCxWIp8DpNq/ozZVAYbjYrCzcf5/l5myjBE5BFRERERERERERERETkMjz66KOcOnWKd9991+woUgRUPCUiIiKl2q4TKUTGxJGebadj3fK826c5NmvBC6fOal+7PBP6tcRqgS/iDzJ2wfZCTCsiIiIiIiIiIiIiIiIixUnFUyIiIlJqHT6TwcDoOM6k59A8NICJA1rj7mK76nVvblKJMXc1A2Dikt1MXrr7qtcUERERERERERERERFxZprGIc6msJ6TKp4SERGRUulUahYDo1dyNCmTOsE+TI9sg7e7S6Gt37tNKM/c0gCAN+Zv48v4g4W2toiIiIiIiIiIiIiIiLNwdXUFID093eQkIuc6+5w8+xy9UoX3CaKIiIiIk0jNyiUyZhV7TqYREuDJzKhwAr3dCv04IzrX5nRaNpOW7uGZrzfg7+lKt8aVCv04IiIiIiIiIiIiIiIiZrHZbAQEBHDixAkAvLy8sFgsJqeSsxwOB9nZ2WRmZmK1lo0eSoZhkJ6ezokTJwgICMBmu7rJMyqeEhERkVIlM8fO8Nh4Nh5OIsjbjdiocCr7exbZ8Z65pQGn07P5Mv4QD322lhmDw2lXu1yRHU9ERERERERERERERKS4VaqU9+XxswVU4jwMwyAjIwNPT88yV9QWEBCQ/9y8GiqeEhERkVIj1+7gkc/Xsnz3KbzdbMwYHE7tCj5FekyLxcIbPZtyJj2Hn7ccZ1hsPJ8Pv4YmIf5FelwREREREREREREREZHiYrFYqFy5MsHBweTk5JgdR/4hJyeHpUuX0qlTp6seX1eSuLq6XnXHqbNUPCUiIiKlgmEYPD9vEws3H8fNZmXKoDCaVi2eAiYXm5UJ/VoSGRPHX3sSGTQtjjkj2lGriAu3REREREREREREREREipPNZiu0ghUpHDabjdzcXDw8PMpU8VRhKhvDDkVERKTUG7tgO1/EH8RqgQn9WtK+dvliPb6Hq40pEWE0CfHjVFo2A6PjOJaUWawZRERERERERERERERERKRgVDwlIiIiJd7kpbuZuGQ3AG/e1ZSbm1z9bOMr4evhyvTB4dQq783hMxkMjF7JmfRsU7KIiIiIiIiIiIiIiIiIyH9T8ZSIiIiUaF/GH+SN+dsAeOaWBvRpU83UPOV93ImNCqeSnwc7T6QSGbOKtKxcUzOJiIiIiIiIiIiIiIiIyIWpeEpERERKrIWbj/HM1xsAuK9TLUZ0rm1yojxVA72YGRVOgJcr6w6eYcSs1WTnOsyOJSIiIiIiIiIiIiIiIiL/ouIpERERKZFW7D7FQ5+txWFA77CqPHNLA7MjnaNuRV9iItvg5WZj2c4EHv9yHXaHYXYsEREREREREREREREREfkHFU+JiIhIibPpcBLDYuPJznVwU6OKvNGzKRaLxexY52lZLZCJA1rjarPww4ajvPzdJgxDBVQiIiIiIiIiIiIiIiIizkLFUyIiIlKi7DmZyqBpcaRm5XJNrSAm9GuJi815X9J0qleB9/q0wGKBWX8d4L3FO82OJCIiIiIiIiIiIiIiIiJ/c95PGkVERET+5VhSJgOj4ziVlk2TED+mRITh4WozO9Z/ur1ZFV7t0QSACb/sJObPvSYnEhERERERERERERERERFQ8ZSIiIiUEGfSsxkYvZLDZzKoWd6b6YPD8fVwNTvWZRt4TXWe6FoPgFHfb+GbtYdNTiQiIiIiIiIiIiIiIiIiKp4SERERp5eWlUtkzCp2nkilkp8HM6PCKe/jbnasAnuwSx0Gd6gBwJNz1vPrtuPmBhIREREREREREREREREp41Q8JSIiIk4tO9fBiFmrWXfwDAFersyMCqdqoJfZsa6IxWLhxdsa0bNlCLkOg/tnrWHVvkSzY4mIiIiIiIiIiIiIiIiUWSqeEhEREadldxg8/uU6lu1MwMvNRkxkG+pW9DU71lWxWi28dXczujQIJivXwZDpq9h6NNnsWCIiIiIiIiIiIiIiIiJlkoqnRERExCkZhsEr323mhw1HcbVZmDigNS2rBZodq1C42qx81L8VbWoEkpKZS8S0OA6cSjc7loiIiIiIiIiIiIiIiEiZo+IpERERcUrvLd7JzL/2Y7HAu71b0KleBbMjFSpPNxtTB7WhQSVfTqZkMSB6JSdSMs2OJSIiIiIiIiIiIiIiIlKmqHhKREREnE7Mn3uZ8MtOAF7t0YTuzauYnKho+Hu6EjsknGpBXhxITCciOo6kjByzY4mIiIiIiIiIiIiIiIiUGSqeEhEREafyzdrDjPp+CwBPdK3HwGuqm5yoaAX7eTArqi0VfN3ZdiyFoTNWkZFtNzuWiIiIiIiIiIiIiIiISJmg4ikRERFxGr9tO8GTc9YDMLhDDR7sUsfkRMWjWjkvYoeE4+vhwqp9p3lg9hpy7A6zY4mIiIiIiIiIiIiIiIiUeqYWT9ntdl588UVq1qyJp6cntWvX5rXXXsMwDDNjiYiIiAni9yVy/6eryXUY9GwZwou3NcJisZgdq9g0rOzHtMg2uLtY+XXbCZ7+agMOh14TiYiIiIiIiIiIiIiIiBQlU4unxo4dyyeffMKHH37I1q1bGTt2LG+99RYffPCBmbFERESkmG09msyQ6avIzHHQpUEwb93dDKu17BROndWmRhCfDGiFzWph3trDvPbjFhWVi4iIiIiIiIiIiIiIiBQhU4unli9fTo8ePbjtttuoUaMGd999NzfddBNxcXFmxhIREZFidOBUOhHT4kjOzCWseiAf9W+Fq63sThbu0qAi79zTDICYP/fx0W+7TE4kIiIiIiIiIiIiIiIiUnq5mHnw9u3bM3nyZHbs2EG9evVYv349f/zxB+++++4F98/KyiIrKyv/5+TkZABycnLIyckplsxScGd/N/odiUhx+TL+ELF/HeDJm+pyXb0KZsdxKlk5dv43dyO/bbXx4tpfcYapeBk5DrJzHTSo6MOke1vgYnGQk+MwO5apbm9SkVMp9Xl9/nbe+XkHvu42+oeHmh1LRIqIXi/LlVqx5xQvf7eVxPRss6Pk8/Nw5flb63NDg2Czo8glZGTbGT5rDYFebrzdqwnurjazIzkdZ7o2z1p5gE+W7CUr1252lHyhgV6Mu7sptSp4mx1FRMoIZ7oui4iIrssiIs5G1+ULK8jjYTFMnAXjcDh47rnneOutt7DZbNjtdkaPHs2zzz57wf1feeUVRo0add722bNn4+XlVdRxRUSkBIg/aWHmrrwPf1wtBiMa2anjZ3IoJ2E3IGa7lY2nna+rU7CHwYON7fi7mZ3Eucw/YGXhYSsWDAbVddCyvEb4iYhInv0p8OEWG9kOJ6iE/hcXi8GIhg7q+uvvLWe17JiFr/bmvWZuFuQgsp4Dm/M9lQRYcdzC53ucs7gtwM3gsSZ2AtzNTiIiIiIiIiIicr709HT69+9PUlISfn6X/sDY1OKpzz//nKeeeoq3336bxo0bs27dOh599FHeffddBg0adN7+F+o8FRoaSkJCwn+eqJgnJyeHRYsW0bVrV1xdXc2OIyKl2O87TnL/p+vIdRhU8nPnWHIWPu4ufBoVRqPKZfvvCcMwePabzXy95ghuNisRdXLoeUN7XFxMbUKZr1qQJy5leFTfxRiGwSs/bGV23CFcbRYmDWhJxzrlzY4lIoVMr5eloHadSKV/9CpOp+fQvnYQL93WEGeoezGAcYt2smjrCbzdbXw6pA2Nq5Tt12DOKNfu4Kb3/+Tg6Yz8bfe0DmF0j0ZYnKEtqZNwhmvzws3HefiL9TgMiOpQnd6tq5qS498yc+089uUG9iSkU7uCN58NbUOgl74FISJFyxmuyyIi8v90XRYRcS66Ll9YcnIy5cuXv6ziKVM/MX3qqad45pln6Nu3LwBNmzZl//79vPnmmxcsnnJ3d8fd/fyvs7m6uuoJUALo9yQiRSl+XyIPfb6eXIfBnS2q8MZdTYmctoq4fYlExa7lqxHtqFG+7I6UeHP+Vr5ecwSrBd7v04zsvfHUq+yv63IJ8NqdzUjOtPPDhqM8MHs9s4e1pWW1QLNjiUgR0OtluRyHz2QwJHYNp9NzaB4awJSINni7O0cxNMAH/VsRGRPHX3sSiYpdw5wR7ahVwcfsWPIPC7ce4eDpDAK9XHm5e2Me/3Idc1YfppyPB8/c0sDseE7HrGvz8l0JPD5nIw4D+rYJ5YXbGztVcdvModdw9yfL2X0yjWGz1jF7aFunuhaJSOml18wiIs5F12UREeei6/K5CvJYmNriIT09Hav13Ag2mw2Hw2FSIhERKYm2Hk1myPRVZOY46NIgmLfvaY6XmwtTI8NoWNmPhNQsBkSv5HhyptlRTTFxyW4mLd0DwJhezbixYbDJiaQgbFYL7/ZuQce65cnIsTN4+ip2Hk8xO5aIiJjgVGoWA6NXcjQpkzrBPsREOlfhFICHq40pEWE0CfHjVFo2A6PjOJqU8d93lGJhGAaTluS9LoxoV4M7W4bw5l1Ngb9fMy7ZbWY8+duGQ2cYFhtPtt3BzY0rMbpnU6cqnAIICfBkZlQ4gV6urD94hhGzVpOVazc7loiIiIiIiIjIFTG1eKp79+6MHj2aH3/8kX379jFv3jzeffddevbsaWYsEREpQQ6cSidiWhzJmbmEVQ/ko/6tcP17/JufhyuxQ8KpUc6LQ6cziIiOIyk9x+TExevzuAOM+WkbAM/f2pDeYaEmJ5Ir4eZiZeKA1rQIDeBMeg4Do+M4dDrd7FgiIlKMUrNyiYxZxZ6TaflFC0Hezjkmy9fDlemDw6lV3pvDZ/Jeg51OyzY7lgAr9pxi4+EkPFytRLSrDkCfNtXyO069+dM2vlx10MyIZd6uE6lExqwiLdtOhzrleL9fC2xW5yqcOqtOsC8xg8PxcrOxbGcCj3+xHrvDMDuWiIiIiIiIiEiBmVo89cEHH3D33XczcuRIGjZsyJNPPsl9993Ha6+9ZmYsEREpIU6kZDIgeiUnU7JoUMmX6Mg2eLrZztmngq87M6PaEuzrzvbjKQyZsYr07FyTEhevBZuO8ty8jQDcf11thnWqZXIiuRre7i7ERLahbrAPx5IziYiOIyE1y+xYIiJSDDJz7AyPjWfj4SSCvN2IjQqnsr+n2bEuqbyPO7FR4VTy82DniVQGT19FWlbZeA3mzM52neodFko5H/f87SM61+a+v18rPjN3Aws3HzMlX1l35EwGEdErSUzLpllVfyYNDMPdxfbfdzRRi9AAJg8Mw9Vm4ceNR3nx200YhgqoRERERERERKRkMbV4ytfXl/Hjx7N//34yMjLYvXs3r7/+Om5uzvntWRERcR5JGTlERMdxIDGdakFexA4Jx9/zwnNrQ4O8mBnVFj8PF1bvP83IT9eQYy/dI2KX70rg4c/W4TCgb5tQnu5W3+xIUggCvd2YGdWWkABP9iSkERkTR0pm2eqmJiJS1tgdBo9+vo7lu0/h7WZjxuBwalfwMTvWZaka6MXMqHACvFxZ9/dYr+zc0v0azJltPZrMkh0nsVpg6LXnF9U/c0sDeodVxWHAQ5+tZcXuUyakLLsS07IZGL2SI0mZ1KrgzfTB4fg42VjOi7m2bnne79sSiwVmrzzAuJ93mB1JRERERERERKRATC2eEhERuRIZ2XaGzljFtmMplPdxZ2ZUOMF+Hpe8T/1KvsQMboOHq5Xft5/kyTnrcZTSkRIbDp1hWGw82XYHNzeuxOt3NsFicc5RH1Jwlfw9mBkVTjlvNzYdTmZYbDyZOXazY4mISBEwDIPn521kweZjuNmsTIkIo2lVf7NjFUjdir7ERLb5/7FeX67TWC+TTF6a13Xq1qaVqVbO67zbLRYLb/Rsyk2NKpKd62BYbDybDicVd8wyKTUrl8Excew+mUZlfw9mRrV12rGcF3Nr08q8fmcTAD78bRfRf+w1OZGIiIiIiIiIyOVT8ZSIiJQoOXYHD85ew6p9p/H1cCF2SDjVy3lf1n1bVw/ikwGtcbFa+HbdEUZ9v7nUjZTYfTKVyJhVpGXbaV+7HOP7tsDFpr/uS5taFXzyuxH8tSeRhz9bS24p76YmIlIWvbVwO5+vOojVAhP6taB9nfJmR7oiLasFMnFAa1xtFn7YcJSXNNar2B06nc53648AcF+n2hfdz8VmZUK/llxTK4jUrFwGTYtjz8nU4opZJmXl2hkxczXrDyUR6OXKzKhwQgKceyznxdzbtjpP/d3x9rUftjB3zSGTE4mIiIiIiIiIXB59mioiIiWGw2Hw9Fcb+GXbCdxdrEyLbEOjKn4FWuP6+sGM690ciwVmrNjPhF92FVHa4nfkTAYDp64kMS2bZlX9mRwRhoerzexYUkSaVvVnSkQYbi5Wft5ynOfmbdQH0SIipcjkpbv55PfdALx5V1NublLZ5ERXp1O9CrzXpwUWC3y68gDvLdJYr+I07Y992B0GHeqU+8/uZR6uNqZEhNEkxI9TadkMjI7jaFJGMSUtW+wOg8e+WMcfuxLwcrMxfXA4dYJ9zY51VUZeV5uoa2sC8NRXG1i85bjJiURERERERERE/puKp0REpEQwDIPXftzCvLWHsVktfDKgFW1qBF3RWj1ahPBK98YAvLd4B7Er9hViUnMkpmUzMHolR5IyqVXBm5jINvi4u5gdS4pYu9rl+KBfS6wW+DL+EGMWbDM7koiIFIIv4w/yxvy8a/oztzSgT5tqJicqHLc3q8JrPfLGek34dRfTNNarWJxJz+bzVQeAS3ed+idfD1emDw6nZnlvDp/JICI6jtNp2UUZs8wxDIMXvtnE/I15YzknDwyjeWiA2bGumsVi4flbG3JXqxDsDoMHZq8hbm+i2bFERERERERERC5JxVMiIlIifPTbLmL+3AfAO/c0o0uDile13qD2NXj0xroAvPzdZr5dd/hqI5omNSuXwTFx7D6ZRmV/D2ZGtaWcj7vZsaSYdGtciTG9mgEwackeJi7ZbXIiERG5Ggs3H+OZrzcAMLxTLUZ0vrxil5JiwDXVeaJrPQBe/WEL89ZqrFdRm/XXftKz7TSs7EfHupc/+rG8jzszo8Kp5OfBzhOpDJ6+irSs3CJMWra88/N2Pos7gNUC7/dtwbUF+N04O6vVwthezbixYTBZuQ6ipq9i85Eks2OJiIiIiIiIiFyUiqdERMTpzfprP+/8nDfa5aXbG9GzZdVCWfeRG+oyqF11DAOe+HI9v28/USjrFqesXDsjZq5m/aEkAr1cmRkVTkiAp9mxpJj1DgvluVsbADDmp2188Xd3CRERKVlW7D7FQ5+txWHAPa2r8uwtDcyOVCQe7FKHwR1qAPDknA38uk1jvYpKZo6d6cv3ATCicy0sFkuB7l810IuZUeEEeLmy7uAZRsxaTVauvQiSli1Tl+3ho9/yCt5H92zKLU1L9ljOC3G1WfmwfyvCawSRkpXLoGmr2JeQZnYsEREREREREZELUvGUiIg4tR82HOHFbzcB8FCXOgy5tmahrW2xWHi5e2PuaF6FXIfBiFmrWb3/dKGtX9TsDoPHvljHH7sS8HKzETM4nDrBvmbHEpMM71Sb+zrXAuDZuRtZsOmYyYlERKQgNh1OYlhsPNm5Dro2qsibdzUtcKFLSWGxWHjxtkb0bJk31uv+WWtYtU9jvYrC3DWHSUjNJiTAk1uvsECnbkVfYiLb4OVmY9nOBB7/cj12h1HIScuOr1cf4vUftwLwVLf69AsvHWM5L8TD1caUQWE0rOxHQmoWA6et5ERyptmxRERERERERETOo+IpERFxWst2nuSxL9ZhGHBv22o8/veIl8JktVp4557mdK5XgcwcB0Omr2L7sZRCP05hMwyDF7/dxPyNx3C1WZg8MIwWoQFmxxKTPXNzA/qEheIw4OHP1rJ8d4LZkURE5DLsOZnKoGlxpGbl0rZmEB/0a4mLrXT/c91qtfDW3c3o0iBvrNeQ6avYejTZ7Filit1hMGXZHgCirq2J61U8p1pWC2TigNa42iz8uOEoL327CcNQAVVBLd5ynKf/Hss59NqajLyudI3lvBB/T1dmDGlD9XJeHEzMIGJaHEnpOWbHEhERERERERE5R+l+N1ZEREqstQdOc9/M1eTYDW5rVplXezQpsu4Lbi5WPhnQilbVAkjKyGFg9EoOJqYXybEKy7ifdzB75QEsFni/b0uurVve7EjiBCwWC6N7NqFb44pk2x0Mj13NxkNJZscSEZFLOJaUycDoOE6lZdMkxI+pg8LwcLWZHatYuNqsfNS/FW1qBJKSmUvEtDj2n9JYr8KyaMsx9iak4e/pSp82oVe9Xqd6FXi3dwssFvh05QHeW7SjEFKWHSv3nOKB2WuwOwx6tarKc7c2LLXd5f4t2NeDWVFtCfZ1Z9uxFIbMWEVGtsY/ioiIiIiIiIjzUPGUiIg4nZ3HUxg8fRXp2XY61i3Pe71bYLMW7QcLXm4uTItsQ/2KvpxIyWJg9EpOpmQV6TGv1NRle/jwt10AjL6z6RWPYJHSycVm5f2+LWlXqxypWbkMiolj98lUs2OJiMgFnEnPZmD0Sg6fyaBmeW+mDw7H18PV7FjFytPNxtRBbWhQyZeTKVkMjI7TWK9CYBgGnyzJ6zoV0a463u4uhbJu9+ZVeLVHEwAm/LqLaX/sLZR1S7vNR5IYOiOerFwHNzasyNheTbEW8b9vnE1okBexUeH4ebiwev9p7v90NTl2h9mxREREREREREQAFU+JiIiTOXQ6nYHRcZxJz6FFaAATB7TGzaV4/roK8HIjNiqcqoGe7DuVzqBpcSRnOtdIia9XH+L1H7cC8FS3+vRvW83kROKMPFxtTI5oTdMQfxLTsomIjuNoUobZsURE5B/SsnKJjFnFzhOpVPRzJ3ZIOOV93M2OZQp/T1dih4RTLciLA4npGutVCOL2JrL+4BncXKwMal+jUNceeE11nvh7nParP2xh3tpDhbp+abM3IY1B0+JIycolvGYQH/Yv/WM5L6ZBJT9iBrfBw9XK79tP8uSc9TgcGv8oIiIiIiIiIuYrm+/WiIiIU0pIzSIiOo5jyZnUCfYhJrJNoX1L/nJV9MsbKVHex40tR5MZOiOezBznGCmxeMtxnv56AwBR19Zk5HW1TU4kzszXw5Xpg9tQq7w3h89kMDA6jtNp2WbHEhERIDvXwYhZq1l38Az+nq7MjGpLaJCX2bFMFfz3a7AKf4/1itJYr6syaWle16l7WlctkqK8B7vUYXCHGgA8OWcDv247XujHKA2OJ2cyMHolCanZNKpctsZyXkzr6kF8MqA1LlYL3647wqjvN2MYKqASEREREREREXOpeEpERJxCSmYOkTFx7ElIIyTAk5lR4QR6u5mSpcbZsTnuLsTtTeTB2WvJNXmkxMo9p3hg9hrsDoO7WoXw/K0NsVjK1qgPKbhyPu7ERoVTyc+DXSdSiZy+irSsXLNjiYiUaXaHweNfrmPZzgQ8XW3EDG5DvYq+ZsdyCtXKeRE7JBxfDxfi95/mgdlrNNbrCmw/lsKv205gscCwjrWK5BgWi4UXb2tEz5Yh2B0G989aw6p9iUVyrJIqKT2HiOg4Dp3OoEY5L2YMCcevjI3lvJjr6wczrndzAGas2M+EX3aZnEhEREREREREyjoVT4mIiOkyc+wMi41n0+Fkynm7MTMqnMr+nqZmahLiz9RBYbi7WFm89Tj/+3qjaSMlNh9JYuiMeLJyHdzYMJixvZphtapwSi5P1UAvZkaFE+DlyvqDZxgxazVZuerkISJiBsMweOW7zfyw4SiuNgsTB7amVbVAs2M5lYaV/ZgW2QZ3Fyu/bjvB019t0FivApr8d9epW5pUokZ57yI7jtVq4a27m9GlQTBZuQ6GTF/F1qPJRXa8kiQ9O5chM1ax/XgKwb7uzPy7q5r8vx4tQnileyMA3lu8g5kr9pkbSERERERERETKNBVPiYiIqXLtDh7+bC1/7UnEx92F6YPDqVXBx+xYALStVY4P+7fCZrXw9ZpDvDF/a7GPlNiXkMagaatIycolvEYQH/ZvhatNf31LwdSt6EtMZBu83Gws25nA41+ux64PokVEit17i3cy86/9WCwwrncLOterYHYkp9SmRhCfDMh7DTZv7WFe/WGLxnpdpqNJGXy77jAA93Uq+hHPrjYrH/VvRVj1QFIyc4mYFsf+U2lFflxnlp3r4P5Za1i9/zR+Hi4ay3kJkR1q8sgNdQF46bvNfLf+iMmJRERERERERKSs0qevIiJiGsMweG7eRn7echw3m5XJEa1pWtXf7Fjn6NqoIm/1agbA1D/28smS3cV27OPJmQyIXklCahYNK/sxNTIMD1dbsR1fSpeW1QKZNLA1rjYLP244yovfbtIH0SIixSjmz71M+GUnAK/2aMIdzauYnMi5dWlQkXfuyXsNNn35Pj78VWO9Lse0P/aS6zC4plYQzUMDiuWYnm42oiPb0KCSLydTshgYHceJ5MxiObazcTgMnpyzniU7Tv49ljOc+pU0lvNSHr2xLhHtqmMY8PgX6/h9+wmzI4mIiIiIiIhIGaTiKRERMc2YBdv4Mv4QVgtM6NeS9rXLmx3pgnq1rsoLtzUE4K0F2/ks7kCRHzMpPYeI6DgOnc6gejkvYoeE4+fhWuTHldKtY90KjO/TEosFZq88wLuLdpgdSUSkTPhm7WFGfb8FgMe71mPgNdVNTlQy9GxZlZf/Hus1btEOZv613+REzi0pI4fP4g4CcF/nou869U/+nq7EDgmnWpAXBxLTiZgWR1J6TrFmMJthGIz6Pq97kovVwicDWtG6usZy/heLxcIr3RvTvXkVch1GftcuEREREREREZHipOIpERExxcQlu5m0ZA8AY+5qxs1NKpmc6NKGdqzFyOvyPoR6ft5G5m88WmTHSs/OZciMVWw/nkKwrzuzotpSwde9yI4nZcttzSrz+p1NAPjg111E/7HX5EQiIqXbr9uO8+Sc9QBEtq/BQ13qmJyoZBncoSYP//2YvfTtJr7XWK+Lmr3yAKlZudSv6Mt1JoyEDPbzYGZUOOV93Nl2LIWoGavIyLYXew6zvP/LTmasODuWsznX1Q82O1KJYbVaGHdPczrVq0BGjp0h01ex/ViK2bFEREREREREpAxR8ZSIiBS7L1YdYMxP2wB49pYG9G4TanKiy/NUt/r0Cw/FYcCjn6/jz10JhX6MHLuDkZ/mfdvaz8OF2KhwQoO8Cv04Urbd27Y6T95UD4DXftjC3DWHTE4kIlI6xe9LZOSna8h1GNzZogov3d4Ii8VidqwS57Gu9bi3bbW8sV5frmPpjpNmR3I6Wbl2pv2ZVxA9vFMt055n1ct5EzskHF8PF+L3n2bkp6vJsTtMyVKcZizfx/jFeWM5X+nemB4tQkxOVPK4uViZOKAVLasFkJSRQ8S0lRxMTDc7loiIiIiIiIiUESqeEhGRYrVg0zGenbsRgPs61yr2kSJXw2Kx8PqdTbmlSSWy7Q6Gx8az/uCZQlvf4TB4cs56ft9+Eg9XKzGD29Cgkl+hrS/yTw9cX4chHWoC8NRXG/hl63GTE4mIlC5bjyYzZPoqMnMcXFe/Am/f0xyrVYVTV8JisfBqjybc1qwyOXaD+2auZs0BjfX6p2/WHuZkShaV/T3o3ryKqVkaVfFjWmQb3F2s/Lb9JE9/tQGHwzA1U1H6dt1hXvl+MwCP3liXQe1rmBuoBPNycyEmsg31KvpwPDmLgdErOZmSZXYsERERERERESkDVDwlIiLFZvnuBB7+bC0OA3qHVeWZmxuYHanAbFYL4/u2oEOdcqRl24mMiWPXidSrXtcwDEZ9v5lv1x3BxWrhkwGtaV09qBASi1yYxWLhhdsaclfLEOwOg5GfriFub6LZsURESoUDp9KJmBZHcmYuYdUD+eTe1rja9M/vq2GzWnivdws61i2fP9Zrx3GN9YK8AvxJS/PGYUddWxM3F/Ofa21qBPHJgFbYrBbmrT3Mqz9swTBKXwHV79tP8MSX6zEMGNSuOo/cUNfsSCVegJcbsUPaUjXQk32n0omMiSM5M8fsWCIiIiIiIiJSypn/jpqIiJQJGw8lMTx2Ndl2Bzc1qsgbPZuW2LE17i42Jg0Mo3lVf06n5zAweiWHz2Rc1ZoTftnFjBX7sVhgXO/mXF8/uJDSilyc1Wph7N3NuKFBMFm5DqJmrGLLkWSzY4mIlGgnUjIZ8He3lAaVfIke1AZPN5vZsUqFvLFerWkRGsCZv1+DaawXLN56nD0n0/D1cKFveDWz4+Tr0qAi79zTDIDpy/fx4a+7TE5UuFbvT2TErNXkOgzuaF6Fl7s3LrH/vnE2lfw9mBnVlvI+bmw+kszQGfFk5tjNjiUiIiIiIiIipZiKp0REpMjtPpnKoJg4UrNyuaZWEBP6tcSlhHdf8HF3IWZwOLUreHM0KZOB0Ss5lXplIyViV+zjvcU7AHile2N6tAgpzKgil+Rqs/LRva1oUyOQlMxcIqbFsf9UmtmxRERKpKSMHCKi4ziQmE5okCexQ8Lx93I1O1ap4u2eN9arbnDeWK+IaXEkXOFrsNLibNepgddUx8fdxeQ05+rZsiov3d4IgHGLdjDzr/0mJyoc244lMzgmbyxn53oVeEdjOQtdzfLeTB8cjq+7C3F7E3lw9lpy7Q6zY4mIiIiIiIhIKVWyP7kWERGndzQpg4joOBLTsmkS4seUiDA8XEtH94UgbzdmRrWlir8He06mMXj6KlKzcgu0xrfrDvPyd5sBeOSGugxqX6MIkopcmoerjamD2tCgki8JqVkMiF7JieRMs2OJiJQoGdl2hs5YxbZjKZT3cWdWVFuC/TzMjlUqBXq7ERsVTkiAJ3sT0hg0LY6UMjrWK35fIqv3n8bNZiWyQw2z41zQkGtr8lCXOgC89O0mvl9/xOREV+dgYjoR0XljOVtVC+CTAa2cYlRiadQkxJ8pg8Jwc7GyeOtx/vf1RhyO0jf+UURERERERETMp3d3RESkyJxOy2ZgdByHz2RQ6+w3hz1KV/eFKgGexEa1JdDLlQ2HkhgeG09W7uWNlPh9+wme+HI9hgER7arz6I11izityMX5e7oSGxVO9XJeHEzMIGJaHEnpZfODaBGRgsqxO3hg9hpW7TuNr4cLsUPCqV7O2+xYpVplf09mRoVTzrtsj/WauCSv61Sv1iEE+zpvsd7jXetxb9tqGAY8/uU6luw4aXakK3Iy5e8i85Qs6lf0ZVpkG7zcnKvbV2lzTa1yfNS/FTarha/XHOKN+VsxDBVQiYiIiIiIiEjhUvGUiIgUibSsXCKnr2LXiVQq+XkQGxVOeR93s2MViTrBPkwfHI63m43lu0/xyGfrsP/HN6JX7z/NiFmryXUY3NG8Cq90b4zFolEfYq5gXw9mDmlLBV93th1LIWrGKjKyy94H0SIiBeFwGDz91QZ+3XYCdxcr0YPa0KiKn9mxyoRaFfJeg/m4u7BybyIPf1a2xnrtOpHC4q3HsVhgaMdaZse5JIvFwqs9mnBbs8rk2A1GzFzNmgOnzY5VIMmZOX+PN06naqAnsVHhBHi5mR2rTOjaqCJjezUDYOofe/lkyW6TE4mIiIiIiIhIaaPiKRERKXRZuXZGzFrN+oNnCPByZWZUOFUDvcyOVaSahwYwOSIMN5uVBZuP8cI3Gy/6jejtx1IYMn0VmTkOOterwDv3NMdqVeGUOIdq5byIHRKOn4cL8ftPM/LT1eSUoQ+iRUQKwjAMXvtxC/PWHsZmtfDxva0IrxlkdqwypWlVf6ZE5I31+nnLcZ6de/HXYKXN5KV5XadualSR2hV8TE7z32xWC+/1bkHHuuXJyLEzZPoqdhxPMTvWZcnMsTN0RjxbjyZT3seNWVFtqaixnMXq7tZVeeG2hgC8tWA7n8UdMDmRiIiIiIiIiJQmKp4SEZFCZXcYPP7lepbtTMDLzUZMZBvqVvQ1O1ax6FCnPO/3bYHVAp/FHeTthdvP2+dgYjoDo1eSlJFDq2oBfDKgFW4u+utYnEvDyn5Mi2yDh6uV37af5Kk563H8Rzc1EZGy6KPfdhHz5z4A3r67GTc0rGhuoDKqXe1yfNCvJVYLzFl9iDE/bTM7UpE7npzJN2uPADC8U22T01w+NxcrEwe0pkVoAGfScxgYvZKDielmx7qkXLuDB2evIW5vIr7uLswYEk6N8hrLaYahHWtx/3V5z/fn523kp41HTU4kIiIiIiIiIqWFPq0VEZFCYxgGL367iR83HMXVZmHigNa0rBZodqxidUvTyozu2RSAj3/fzZS/OwIAnEzJYmD0Sk6kZFGvog/TItvg5eZiVlSRSwqrEcQn97bGxWrhm3VHePWHLWWmk4eIyOWY9dd+3vl5BwAv3t6Iu1pVNTlR2datcSXG3JU31mvS0j1MLOVjvWL+3Ee23UGbGoG0rl6yXm97u7sQE9mGOsE+HE/OImJaHAmpWWbHuiCHAc99u4XFW/PGck4dFEbjKv5mxyrTnu5Wn75tQnEY8Mjn6/hzV4LZkURERERERESkFFDxlIiIFJp3F+1g9soDWCzwXp8WdKpXwexIpugXXo2nb64PwOj5W5kTf5DkzBwGTYtj36l0qgZ6EjukLQFebiYnFbm06xsE8849zQGYvnwfH/y6y+REIiLO4YcNR3jx200APHh9HaKurWlyIgHo3SaUZ29pAMCYn7bxeSkd65WSmcOnf+0H4L4S1HXqnwK93ZgZFU5IgCd7E9IYNC2OlMwcs2OdwzAMvt1vZd7aI9isFj7s34q2tcqZHavMs1gsjO7ZlJsbVyLb7mB4bDzrD54xO5aIiIiIiIiIlHBqdyEiIoUi+o+9+YUVr/Vowu3NqpicyFz3d67N6bRspizbyzNzNzJ12V62H0+hvI8bM6PaUsnfw+yIIpflzpYhnE7PZtT3W3h30Q78PV25J0zdVaTgrBYLHq42s2NICWQYBhk5drNj5Fu5N5HHvliHYUD/ttV44qZ6ZkeSf7ivc20S07OZtGQPz83bSICXKzc3qWx2rEL1WdwBUrJyqRPsQ5cGwWbHuWKV/T2ZGRXOPRNXsPlIMkNnxDN5YBiuLhazowEwdelefj+a953Dt3o1o2sjjeV0Fjarhff7tWDI9FX8uesUkTFxzB52DdXLeZkdzSnpNZiIiJQk2bkOch0Os2Pkc7VZcbWpD4WIiEhZoOIpERG5anPXHOK1H7YA8ETXegy4prrJicxnsVh47taGnE7P4avVh9h+PAVfdxemDw6nZnlvs+OJFMjgDjU5nZ7DhF928vJ3m3n5u81mR5IS6vGu9Xj4hrpmx5AS5MiZDAbHrGL78RSzo5zntqaVea1HEywW5yj0kP/3zM0NOJOWwxfxB3n4s3VMH+xK+zrlzY5VKLJzHUT/sReA4Z1qYbWW7OdfrQo+TB8cTr8pf7FybyLNX/3Z7Ejnee6W+vRqrcJxZ+PuYmPSwDD6T/mLDYeSuOX9ZWZHcloWC/QPr8ZrPZqU+GtGaffA7DWsO3CGeSPbE+ynL1yJSNkzJ/4gL3+3mfRs5/nyjI+7C6/f2YQ7W4aYHUVERESKmMqlRUTkqvyy9ThPfbUBgMEdavBglzomJ3IeFouFMXc1pWfLECr4ujNlUBhNQvzNjiVyRR67sS73daqFTR+4yFWIXbEfh8MwO4aUEIlp2QyMXumUhVO3NKnEu32a65ropPLGejWhW+OKZNsdDIuNZ8OhM2bHKhTfrjvM8eQsKvq506NF6ej02rSqP5MjWlPex7lGWrvaLNwaamdwe30xxFn5/P3llOahAWZHcWqGAZ+uPMCrP2zBMPQ6zFmt3n+aHzcc5fCZDKL/3Gt2HBGRYrdg0zH+9/UGpyqcAkjNyuWJOetZvOW42VFERESkiKnzlIiIXLG4vYmM/HQNdodBz5YhvHhbI3Vf+BcXm5X3+rTA4TD0LV8p0SwWC8/e2pDHutbDoQ9dpIByHQYdxvxKQmoWaw+eoXX1QLMjiZNLzcplcEwcu0+mUdnfg9nDrqGin7vZsQCwYMHTTeOPnJ2Lzcr7fVsyOGYVK/acIjJmFXNGtKN2BR+zo10xh8Ng8tI9AAzpUBN3l9LzPGxfuzx/PXsD2XbnGdHisNv55ecFZseQ/xDk7cY3I9s71XhXZ/PTxmM8MWc905fvo5y3Gw+pC6hTmrx0d/7/z/7rAA9cXwc/D1cTE4mIFJ/luxN4+LO1OAzoExbKS90b4QxvMRsGvPjNJuauPcwDs9cwM6ot4TWDzI4lIiIiRUTFUyIickW2HEkmasYqsnIddGkQzFt3N1Nx0CXosZHSwsO19HxQK8XruvrBfL/+CIu3HlfxlFxSVq6dETNXs/5QEoFersyM0shbuTIerjYmR7Sm35S/2HQ4mYFTV/LV/e2pEuBpdrQr8tv2E+w8kYqvuwv92lYzO06hc7FZcbE5T4P0nBwVi5cUFosFLze9xXkxvVpXJTkzh1Hfb2Hcoh0EeLsx8Bp1VHMmu0+m8vPfHU0q+3twNCmTz1Ye4L7OtU1OJiJS9DYcOsOwGfFk2x10a1yR0T2bONVrwrF3NyMpI4dftp0gavoqPr/vGhpX0WQBERGR0sh5XoGIiEiJsf9UGhHT4kjJzKVNjUA+6t8KVyf6R62IiDifGxsGA7BIre7lEuwOg8e+WMcfuxLwcrMRMzicOsG+ZseSEszXw5Xpg8OpVd6bI0mZREyL43RattmxrsikJXldp/pfU03dSESkQAZ3qMnDXeoA8NK3m/hhwxGTE8k/TV22B8OAGxtW5PGu9QCY9udesnLVUU1ESrfdJ1OJjFlFWraddrXK8X7flk5VOAXgarPy0b2tCK8RREpWLoOmrWL/qTSzY4mIiEgRcK5XISIi4vROJGcyIHolCalZNKjky9RBbTS6RkRE/tN19YNxsVrYdSKVvQl6o1HOZxgGL367ifkbj+FqszB5YBgtQgPMjiWlQHkfd2Kjwqnk58GuE6lETl9FWlau2bEKZM2B08TtS8TVZmFIh5pmxxGREuixrvUYcE01DAMe+2IdS3ecNDuSACdSMvl69WEARnSuRY8WIVT0c+d4chbfrlORm4iUXkeTMoiIjiMxLZumIf5MjmjttN3OPVxtTBkURsPKfiSkZjEgeiUnkjPNjiUiIiKF7KqLp5KTk/nmm2/YunVrYeQREREnlpSeQ8S0OA4mZlAtyIvYIeH4e+pb7yIi8t/8PV25plY5ABar+5RcwLifdzB75QEsFni/b0uurVve7EhSilQN9GJmVDgBXq6sP3iGEbNWl6iOHpP/7jp1Z4sQKvp5mJxGREoii8XCqDuacHuzyuTYDe6buZo1B06bHavMm/7nPrLtDlpXDySsRhBuLlairs0rkp28dA8Oh0aIikjpczotm4HRcRw+k0Gt8t5MH9wGXyfvrOrv6cqMIW2oXs6Lg4kZREyLIyk9x+xYIiIiUogKXDzVu3dvPvzwQwAyMjIICwujd+/eNGvWjK+//rrQA4qIiHPIyLYTNWMV246lUMHXnVlRbQnWBzciIlIAGt0nFzN12R4+/G0XAKPvbMqtTSubnEhKo7oVfYmJbIOXm41lOxN4/Iv12EvAh9J7TqaycMsxAIZ3qmVyGhEpyWxWC+/2bkHHuuXJyLEzZPoqdhxPMTtWmZWalcvMv/YD517f+4VXw9fdhV0nUvl12wmz4omIFIm0rFwip69i14lUKvl5MHNoW8r5uJsd67IE+3owc0hbKvi6s+1YCkNmrCIju+R8IUNEREQurcDFU0uXLqVjx44AzJs3D8MwOHPmDBMmTOD1118v9IAiImK+HLuDkZ+uJn7/aXw9XIgdEk61cl5mxxIRkRLmxkYVAYjfn0hiWrbJacRZfL36EK//mNfJ+Klu9enftprJiaQ0a1ktkEkDW+Nqs/DjxqO8+O0mDMO5C6imLNuLYeQVoNat6Gt2HBEp4dxcrEwc0JoWoQGcSc9hYPRKDiammx2rTPo87gApmbnUKu9N14YV87f7erjS/5q810OTlu42K56ISKHLyrUzYtZq1h88Q4CXKzOjwgkJ8DQ7VoFUK5c3jcHPw4XV+09z/6erybE7zI4lIiIihaDAxVNJSUkEBQUBsGDBAnr16oWXlxe33XYbO3fuLPSAIiJiLofD4Kk56/lt+0k8XK1Mi2xDw8p+ZscSEZESqGqgFw0r++Ew0LfoBcgb4fj01xsAiLq2JiOvq21yIikLOtatwHt9WmCxwOyVBxj38w6zI13UiZRMvl5zCID7OuvPh4gUDm93F2Ii21A32IfjyVlETIsjITXL7FhlSo7dQfQfe4G8rlNWq+Wc24d0qImrzcKqfadZvV/jFUWk5LM7DB7/Yj3Ldibg5WbL+3uohH4xoGFlP6ZFtsHD1crv20/y5Jz1GrMqIiJSChS4eCo0NJQVK1aQlpbGggULuOmmmwA4ffo0Hh4a3yQiUpoYhsGrP2zhm3VHcLFa+OTe1rSpEWR2LBERKcG6/t19atHfI6ik7Fq55xQPzF6D3WFwV6sQnr+1IRaL5b/vKFIIbm9Whdd6NAHgw9925X+A7WxmLN9Hdq6DVtUCCKseaHYcESlFAr3dmBnVlpAAT/YmpDFoWhwpmTlmxyozvl9/hKNJmVTwdefOliHn3V7Rz4Oef2+frO5TIlLCGYbBi99u4seNR3G1WZg0sDUtq5Xs17ZhNYL45N7WuFgtfLvuCK/+sMXpO9qKiIjIpRW4eOrRRx/l3nvvpWrVqlSpUoXrrrsOyBvn17Rp08LOJyIiJvrg111MX74PgHfuac71DYLNDSQiIiXeTX8XTy3dkUBmjt3kNGKWzUeSGDojnqxcBzc2DGZsr2bndVwQKWoDrqnOkzfVA+C1H7Yw9+8OT84iNSuXmSv2A3ldp1RcKCKFrZK/BzOjwinn7cbmI8kMi43X67NiYBgGk5bsAWBwhxp4uNouuN/wTrUA+HnLcXafTC22fCIihe3dRTuYvfIAFguM79OSjnUrmB2pUFzfIJhxvZsDMH35Pj74dZfJiURERORqFLh4auTIkfz1119MmzaNP/74A6s1b4latWoxevToQg8oIiLmmPnXft5dlDfC5OXujS74TUgREZGCalzFj8r+HmTk2Fm+O8HsOGKCfQlpDJq2ipSsXMJrBPFh/1a42gr8T1ORQvHA9XUY0qEmAE99tYHFW46bnOj/fR53gOTMXGqV96Zrw4pmxxGRUqpWBR9mDAnHx92Fv/Yk8vBna8m1O8yOVar9vuMk24+n4O1m49621S+6X51gX25sWBHDgKnL9hRjQhGRwhP9x978oqLX72zCbc0qm5yocPVoEcIr3RsBeUViM1fsMzeQiIiIXLECv0P96quv0rBhQ3r27ImPj0/+9i5durB48eJCDSciIub4fv0RXvp2EwAPd6nD4L8/UBIREblaFouFGxueHd13wuQ0UtyOJ2cyIHolCalZNKzsx9TIsIt2WxApDhaLhRdua8hdLUOwOwwemL2GuL2JZscix+7IHyU4vFMtdWYTkSLVJMSfKRFhuLlY+XnLcZ6du1Gjh4rQpCV5Y/j6t62Gv6frJfcd0Tmv+9TXqw9zIiWzyLOJiBSmuWsO8doPWwB48qZ6lywYLckiO9TkkRvqAvDSd5v5bv0RkxOJiIjIlShw8dSoUaNITT2/TXB6ejqjRo0qlFAiImKeJTtO8viX6zAMGHBNNR7rWs/sSCIiUsrc+PfovsVbj+Nw6IO5siIpPYeI6DgOnc6gejkvZgxpg5/HpT8wFCkOVquFsXc3o0uDYLJyHURNX8XmI0mmZvp+/RGOJmVSwdddHWBFpFi0q12OD/q1xGqBOasPMeanbWZHKpXWHTzDX3sScbFaGHLtf39RLaxGEK2rB5JtdzD9z31FH1BEpJAs3nKcp77aAMCQDjV54Po6JicqWo/eWJeIdtUxDHj8i3X8vl1fFhMRESlpClw8ZRgGFsv533hcv349QUFBhRJKRETMsebAaUbMXE2O3eD2ZpUZdUeTC17zRURErsY1tYLwcXfhZEoW6w+dMTuOFIOMbDtDZqxi+/EUgn3dmRXVlmBfD7NjieRztVn5qH8r2tQIJCUrl0HTVrH/VJopWQzDYPLSvPFMgzvUUHc2ESk23RpXYkyvZgBMWrqHiX93SJLCM3lp3mPao0UIlf09L+s+93XK6z4186/9pGblFlk2EZHCErc3kQdmr8HuMLirZQgv3Naw1L/HbLFYeKV7Y7o3r0Kuw+D+WWtYvf+02bFERESkAC67eCowMJCgoCAsFgv16tUjKCgo/z9/f3+6du1K7969izKriIgUoR3HUxgcs4qMHDsd65bn3d4tsGk8iIiIFAF3Fxud61cA8rpPSemWY3dw/6erWb3/NH4eLsRGhRMa5GV2LJHzeLrZmDqoDQ0q+ZKQmsWA6JWcSC7+EUlLdpxk27EUvN1spXa0iYg4r95hoTx3awMAxvy0jS9WHTA5UemxLyGNnzYdA/JGsl6uGxtWpFYFb1Iyc/k8Tr8PEXFuW44kEzVjFVm5Dm5oEMzYu5uVmRHUVquFcfc0p1O9CmTk2BkyfRU7jqeYHUtEREQu02UXT40fP553330XwzAYNWoU7733Xv5/EydO5I8//uCjjz4qyqwiIlJEDiamMzB6JUkZObSsFsCkga1xcylwc0IREZHL1rVh3ui+RVtUPFWaORwGT85Zz+/bT+LhaiVmcBsaVPIzO5bIRfl7uhIbFU71cl4cTMwgYlocSek5xZph0pK8rlP9wqvh76nRliJS/IZ3qs2IzrUBeHbuRhb8XfAjV2fKsj0YBnRpEEz9Sr6XfT+r1ZLffSr6j71k5zqKKqKIyFXZfyqNiGlxpGTmEl4jiI/ubYWrrWy9x+zmYmXigFa0rBZAUkYOA6NXcjAx3exYIiIichlcLnfHQYMGAVCzZk06dOiAi8tl31VERJxYQmoWEdPiOJ6cRb2KPsREtsHLTdd4EREpWtfXD8ZmtbDjeCr7T6VRvZy32ZGkkBmGwajvN/PtuiO4WC18MqA1ratr1Ls4v2BfD2YOaUuvicvZdiyFITNWMSuqLZ5uRT8+b/3BM6zYcwoXq4Uh19Ys8uOJiFzM/26uz+m0bL6IP8jDn61l+pA2tK9d3uxYJdbJlCzmrD4E/P8YvoK4s2UI7/y8g6NJmXy//gi9Wlct7IgiIlflRHImA6JXkpCaRcPKfkwZFFZmx097ubkQE9mG3pNWsON4KgOjVzJnRHsq+LqbHU1EREQuocAl32lpafzyyy/nbV+4cCE//fRToYQSEZHikZKZw6BpcexNSCMkwJPYIW0J8HIzO5aIiJQB/l6uhNfIK6RR96nSacIvu5ixYj8A43o35/r6wSYnErl81cp5ETskHD8PF1bvP839n64mx170nT4mL83rOnVHiypUCfAs8uOJiFyMxWJhdM8m3Ny4Etl2B8NmxLPh0BmzY5VYsSv2kZ3roHloAOE1C15M7u5iY3CHGgBMWrobwzAKOaGIyJVLSs8hYlocBxMzqF7OixlD2pT5DqoBXm7EDmlL1UBP9p1KJzImjuTM4u1oKyIiIgVT4OKpZ555Brvdft52wzB45plnCiWUiIgUvcwcO0NnxLP5SDLlvN2YGRVOJX8Ps2OJiEgZ0rWRRveVVrEr9vHe4h0AvNK9ET1ahJicSKTgGlb2Y1pkGzxcrfy+/SRPzlmPw1F0H1bvS0jjp01HARh+BV1JREQKm4vNyvi+LWhXqxxp2XYiY1ax+2Sq2bFKnLSsXGL/Ligf0akWFovlita5t211vN1s7Dieyu/bTxZmRBGRK5aRbWfIjFVsO5ZCBV93Zg5pS7Cv3mMGqOTvwcyotpT3cWPzkWSGzognM+f8z1dFRETEORS4eGrnzp00atTovO0NGjRg165dhRJKRESKVq7dwUOfrWXl3kR83F2YMSScWhV8zI4lIiJlzNniqfj9pzmdlm1yGiks3647zMvfbQbgkRvqEtlBo8ek5AqrEcQn97bGxWrh23VHePWHLUXW7WPqH3twGHB9/Qo0qORXJMcQESkoD1cbkyNa0zTEn8S0bAZOXcnRpAyzY5UoX8YfJCkjhxrlvLipcaUrXsff05X+basBed2nRETMlmN3cP+nq1m9/zR+Hi7EDgmnWjkvs2M5lZrlvZk+OBxfdxfi9iby4Oy15BZDR1sREREpuAIXT/n7+7Nnz57ztu/atQtvb+9CCSUiIkXHMAyenbuRRVuO4+ZiZUpEGE1C/M2OJSIiZVBokBcNKvlidxj8tv2E2XGkEPy+/QRPfLkew4CIdtV59Ma6ZkcSuWrXNwjmnXuaAzB9+T4++LXwvziWkJrFnPhDANzXuXahry8icjV8PVyZPrgNtcp7cyQpk4HRcSp8v0w5dgdTl+0FYFinWtisV9Z16qwh19bExWrhrz2JrDt4phASiohcGYfD4Kk56/l9+0k8XK1Mi2xDw8r6AsCFNAnxZ8qgMNxcrCzeepxn5m7U+FUREREnVODiqR49evDoo4+ye/f/f7tl165dPPHEE9xxxx2FGk5ERArfmJ+2MWf1IawW+LBfS9rVLmd2JBERKcPOdp9avFWj+0q61ftPc/+sNeQ6DO5oXoVXuje+4rE0Is7mzpYhvNw9rwv3u4t2MHPFvkJdP3b5PrJyHTQPDaBtzaBCXVtEpDCU83Fn5tC2VPb3YNeJVCKnryItK9fsWE5v/sajHD6TQXkfN3q1qnrV61X298wfhzxZ3adExCSGYfDqD1v4Zt0RXKwWPrm3NWE19Br2Uq6pVY6P+rfCZrXw1epDvDF/qwqoREREnEyBi6feeustvL29adCgATVr1qRmzZo0bNiQcuXK8c477xRFRhERKSQTl+xm0tK87oFjejW7qnbxIiIiheHGhnnFU0u2nyQr125yGrlS24+lMGT6KjJy7HSuV4F37mmO9So7K4g4m8EdavLwDXnd1F76bjPfrT9SKOumZeUyY8V+AEZ0qqWiQxFxWiEBnsyMCifQy5X1B88wYtZqvX67BMMwmLgk7z2YyPY18HC1Fcq6wzvVAuCnTcfYl5BWKGuKiBTEB7/uYvryfQCM692c6xsEmxuohOjaqCJjezUDYMqyvfl/R4iIiIhzuKKxfcuXL+fHH39k5MiRPPHEE/zyyy/8+uuvBAQEFEFEEREpDJ/HHWDMT9sAeP7WhvQOCzU5kYiICDQN8aeinztp2XaW7z5ldhy5AgcT0xkYvZKkjBxaVQvgkwGtcHMp8D81RUqEx26sy8BrqmMY8PgX61iy4+RVr/ll/EGSMnKoUc5LX24QEadXJ9iXmMHheLnZWLYzgce/WI/doc4ZF7JsZwJbjybj5WZjwDXVC23d+pV86dIgGMOAKcv0wbuIFK+ZK/bx7qIdALzSvVF+Nzy5PHe3rsoLtzUEYOyCbXwWd8DkRCIiInLWFb2jbbFYuOmmm3jooYd44IEH6NSpU2HnEhGRQrRg01Gem7cRgBGdazPs728pioiImM1qteR3n1q8RaP7SpqTKVkMjF7JiZQs6lX0YVpkG7zcXMyOJVJkLBYLo+5oTPfmVch1GIyYuZo1B05f8Xq5dgdTl+0FYFinWtjUsU1ESoAWoQFMHhiGq83CjxuP8uK3mzR66AIm/T1Wr2+bagR4uRXq2vf9/b7OnNWHOJmSVahri4hczHfrj/DSd5sBePiGukR2qGlyopJpaMda3H9dbQCen7eRBZuOmpxIRERE4AqKpxwOB6+99hohISH4+Piwd2/em3wvvvgi0dHRhR5QRESuzvJdCTz82TocBvQJC+V/N9c3O5KIiMg5bmz0d/HU1uM41LmgxEjOzCEyJo59p9KpGuhJ7JC2hf7BoIgzslotjLunOZ3qVSAjx87gmFXsOJ5yRWv9uPEoh89kUM7bjV6tqhZyUhGRonNt3fKM79MSiwVmrzyQ34VE8mw8lMSfu05hs1qI6lj4xQXhNYNoERpAdq6D2BX7Cn19EZF/W7LjJE98uQ7DgIHXVOexG+uaHalEe7pbffq2CcVhwMOfrWP5rgSzI4mIiJR5BS6eev3115k+fTpvvfUWbm7//8Z4kyZNmDp1aqGGExGRq7Ph0BmGxcaTbXdwc+NKjO7ZBItF32YXERHn0r52ObzdbBxPzmLTkSSz48hlyMyxM3RGPJuPJFPex42ZUW2p5O9hdiyRYuPmYmXigFa0rBZAUkYOA6NXcjAxvUBrGIbBpCV545Yi29fAw9VWFFFFRIrMbc0q8/qdTQD44NddRP+x1+REzuNs16k7mlchJMCz0Ne3WCyM6JzXfSp2xX7SsnIL/RgiImetOXCaETNXk2M36N68CqPuaKz3mK+SxWJhdM+m3Ny4Etl2B8Ni49lw6IzZsURERMq0AhdPxcbGMnnyZO69915stv9/Y6958+Zs27atUMOJiMiV230ylciYVaRl22lfuxzj+7bAxXZF01pFRESKlLuLjc71KwCwSKP7nF6u3cGDs9cStzcRX3cXpg8Op2Z5b7NjiRQ7LzcXYiLbUK+iD8eT80ZYFmR00h+7EthyNBlPVxsD21UvwqQiIkXn3rbVeapbXofr137Ywtw1h0xOZL4Dp9KZvzFvBNPwv8frFYWujSpRs7w3SRk5fLHqYJEdR0TKth3HUxgcs4qMHDud6lVg3D3NsWrUdKGwWS28368FHeqUIy3bTmTMKnadSDU7loiISJlV4E/RDx8+TJ06dc7b7nA4yMnJKZRQIiJydY6cyWDg1JUkpmXTrKo/kyPC9E12ERFxajc2zBvdp+Ip5+ZwGPzv640s3nocdxcrUweF0STE3+xYIqYJ8HIjdkhbQgI82XcqnciYOJIzL++9kbNdp/qGh2rkpYiUaCOvq03UtXmj6Z76agOLy/jrual/7MFhQKd6FWhY2a/IjmOzWhj690jA6D/2kmN3FNmxRKRsOpiYzsDolSRl5NCyWgATB7TCzUVfzi1M7i42Jg0Mo1lVfxLTsomIXsmRMxlmxxIRESmTCvwqp1GjRixbtuy87V999RUtW7YslFAiInLlEtOyGRi9kiNJmdSq4E1MZBt83F3MjiUiInJJXRoEY7Na2HYspcCjr6R4GIbBmz9t5es1h7BZLXzYvxVta5UzO5aI6Sr5ezBraFvKebux+Ugyw2bEk5ljv+R9Nh1O4o9dCdislvyCAxGRkspisfD8rQ25q1UIdofBA7PXELc30exYpkhMy+bL+LwuUCOKsOvUWb1aVaW8jxuHz2Tw44ajRX48ESk7ElLzOqseT86iXkUfYiLb4OWm95iLgs/fHZ1rVfDmSFImA6PzvhQtIiIixavAxVMvvfQSDz74IGPHjsXhcDB37lyGDRvG6NGjeemll4oio4iIXKbUrFwGx8Sx+2Qalf09mBnVlnI+7mbHEhER+U8BXm6EVQ8E1H3KWU1csocpy/YCMLZXM7o2qmhyIhHnUbO8NzOGhOPr7sLKvYk89Nlaci/RAWTS0ryuU92bVaZqoFdxxRQRKTJWq4WxvZpxY8NgsnIdRM1YxZYjyWbHKnaxK/aRmeOgaYg/7WoXfZG5h6uNyPY1AJi4ZDeGYRT5MUWk9EvJzGHQtDj2nUonJMCT2CFt1Sm1iAV5uzErqi1V/D3YfTKNwTFxpGblmh1LRESkTClw8VSPHj34/vvvWbx4Md7e3rz00kts3bqV77//nq5duxZFRhERuQxZuXZGzFzN+kNJBHq5MjMqnJAAT7NjiYiIXLazxTiLt6p4ytl8FneAsQu2AfDCbQ25u3VVkxOJOJ8mIf5MGRSGm4uVRVuO88zcjRf8EPtgYjo/bjgCwPBOtYs7pohIkXG1WfmwfyvCawSRkplLxLQ49p9KMztWscnItjNj+T4A7utcC4vFUizHHXBNdbzcbGw7lsLSnQnFckwRKb0yc+wMnRHP5iPJlPN2Y9bQtlTy9zA7VplQJcCT2Ki2BHq5sv5QEiNmriYr99IdbUVERKTwXNFw4o4dO7Jo0SJOnDhBeno6f/zxBzfddFNhZxMRkctkdxg8/sV6/tiVgJebjZjB4dQJ9jU7loiISIGcLZ5auTeRpPQck9PIWT9tPMrz8zYCMPK62gztWPQjaERKqmtqlePDfi2xWuCr1Yd4Y/7W8wqopi7bg8OATvUq0KiKn0lJRUSKhoerjSmDwmhY2Y+E1CwGRK/kRHKm2bGKxZzVBzmdnkO1IC9ublyp2I4b4OVG3zbVAJi8dHexHVdESp9cu4OHPlvLyr2J+Lq7MGNIODXLe5sdq0ypE+zD9MHheLnZ+GNXAo99sQ67Q10FRUREisMVFU+JiIjzMAyDF7/dxI8bj+JqszB5YBgtQgPMjiUiIlJg1ct5U6+iD3aHwW/bT5gdR4A/dyXwyOfrcBjQLzyUp7rVNzuSiNO7qXElxvRqBsCUZXuZuGRP/m2Jadl8EX8QgBGdVIgoIqWTv6crM4a0oXo5Lw4mZhAxLa7UF8bn2h1MWZZ3vR/WsSYutuJ92z2qY01sVgt/7jrFxkNJxXpsESkdDMPgmbkbWbTlOG4uVqYMCqNJiL/Zscqk5qEBTB4YhpvNyvyNx3jhm00ayyoiIlIMLutfcUFBQSQk5LX8DQwMJCgo6KL/VatWjVtuuYUNGzZcVoDDhw8zYMAAypUrh6enJ02bNiU+Pv7Kz0hEpIwZ9/MOZq88gMUC7/dtybV1y5sdSURE5Iqd7T61SKP7TLf+4BmGx8aTbXdwS5NKvH5n02IbPyNS0vUOC+X5WxsCMHbBNj6POwBA7Ip9ZOY4aBriT7va5cyMKCJSpIJ9PZgV1ZZgX3e2HUthyIxVZGSX3tFDP206xsHEDIK83bi7dWixHz8kwJM7mlcBYJK6T4lIARmGwRvzt/LV6kPYrBY+6t+Ka2rptaqZrq1bnvf7tsBqgc/iDvDOz9vNjiQiIlLquVzOTu+99x6+vnnjn8aPH3/JfbOyspg/fz6DBw9m9erVl9z39OnTdOjQgeuvv56ffvqJChUqsHPnTgIDAy8vvYhIGTd12R4+/G0XAKPvbMqtTSubnEhEROTq3NiwIh/9tpsl20+SlWvH3cVmdqQyadeJVCJj4kjLttOhTjnG922BzarCKZGCGNapFonp2Xzy+26em7cRD1cbsSv2AzC8Uy0VI4pIqRca5EVsVDi9J65g9f7T3P/paqZEhOFazF2ZipphGPkFS4Pa1cDTzZzXr8M71WLe2sPM33iUA6fSqVbOy5QcIlLyTFyyhynL9gIw5q6m+V9qEnPd0rQyo3s25dm5G/not90EerkxtKO614qIiBSVyyqeGjRo0AX//2JuueUWWrdu/Z/7jR07ltDQUGJiYvK31axZ83IiiYgUu7SsXI4lZ5odI99fe07x+o9bAXiqW336t61mciIREZGr17xqAMG+7pxIyWLlnkQ61atgdqQy58iZDCKiV3I6PYdmVf2ZNDBMRWwiV+jpbvU5nZbN56sO8ugX6wAIDfLkliaVzA0mIlJMGlTyI2ZwG+6dupLft5/kqTnrebd3C6ylqCh7+e5TbDqcjKerjYh21U3L0bCyH53rVWDJjpNM/WMPr/ZoYloWESk5Po87wNgF2wB4/taG3BNW/N3z5OL6hVfjdHo2by3Yzus/biXQy41erauaHUtERKRUuqziqQuJj49n69a8D+0bNmxIWFhY/m2hoaGcOHHiP9f47rvv6NatG/fccw9LliwhJCSEkSNHMmzYsAvun5WVRVZWVv7PycnJAOTk5JCTk3OlpyJF7OzvRr8jKcmSMnK4ecKfJKRmmx3lPIPbV2dYh2r6MyaXTddlEXF219evwBfxh1i46SjtagaYHafIOdt1eeSnqzmSlEmt8l5MGdASd6vhNNlESqJXbm9AYloWP2/Je59kSPvqGA47OY7SO76qNHC2a7NISdasii8f9m3OiE/X8c26I/h6uPDirfVLTQe+T37P6wh+d+sQfNwspl43hnaozpIdJ/ky/iAjO9eknLebaVkKm67LIoVv4+Eknpu3EYD7OtYksl2o/ow5oaHtq5GQnMm05ft5+usNeLtZuKFBsNmxdF0WEXEyui5fWEEeD4thGEZBFj906BD9+vXjzz//JCAgAIAzZ87Qvn17Pv/8c6pWvfyKZw8PDwAef/xx7rnnHlatWsUjjzzCxIkTL9jh6pVXXmHUqFHnbZ89ezZeXmpDLCJFZ9FhCz8csGGzGLg7SXd5iwXaVDDoUd1BKfrCpoiICJtPW5i8zUaAm8ErreyUks/VSoSETHhtrQtWDF5sZSfI3exEIqVDjgM+3WUlJQfua+DApIlOIiKmij9pYeauvAvgraF2ulUt0NvSTulQGry9Ie+10wst7ZTzMDePYcC4jTYOplm4uaqDW0Id5gYSEacWvd3KhkQrLYIcRNZz6N/eTsxhwGe7rcSdtOJqMRjRyE4dP7NTiYiIOL/09HT69+9PUlISfn6X/suzwMVTN998M2fOnGHGjBnUr18fgO3btzN48GD8/PxYsGDBZa/l5uZGWFgYy5cvz9/28MMPs2rVKlasWHHe/hfqPBUaGkpCQsJ/nqiYJycnh0WLFtG1a1dcXV3NjiNSYFk5dq57dxkJqdm806sJPVpUMTuSyFXRdVlEnF1Wjp02b/5GRo6Db+6/hsZVSvdrfWe6Lk/7cx9vLthBu1pBxA4O++87iIiUUs50bRYpTWL/OsBrP+aNh3rl9gbc27aayYmuzuNzNvD9hmPc1rQS43s3MzsOAPM3HuORLzcQ6OXK7090xMvtiodPOBVdl0UK196ENLpN+BPDgPkPtadusI/ZkeQ/5NodPPj5en7ZdhIfdxc+jQqjUWXz3i/RdVlExLnounxhycnJlC9f/rKKpwr8L6clS5awfPny/MIpgPr16/PBBx/QsWPHAq1VuXJlGjVqdM62hg0b8vXXX19wf3d3d9zdz//qs6urq54AJYB+T1JSfbX2KAmp2VTx96BHq1BcbU7SekrkKum6LCLOytXVlU71KrBw83F+3XGKFtXLmR2pWDjDdfnX7QkA3NS4kulZREScgTNcm0VKk6iOtUnOtPP+LzsZ9eM2gnw9uaN5yfyS2sHEdOZvOg7A/dfVcZprxW3NQxi3eBcHEtP5Zv1xBrWvYXakQqXrskjhiFlxEMOAGxsG0ygk0Ow4chlcXeGje1sTMS2OuL2JRMWuYc6I9tQs721yLl2XRUScia7L5yrIY1HgCoDQ0AvPPLbb7VSpUrB/6Hbo0IHt27efs23Hjh1Ur169oLFERIqE3WEwZekeAKI61lLhlIiISDHp2qgSAIu2HDc5SdlxOi2bVfsSAbixYUWT04iIiEhp9eiNdYloVx3DgMe/WMeSHSfNjnRFov/Yi91hcG2d8jQJ8Tc7Tj4Xm5VhHWsCMGXZHnLtGt0nIuc6kZLJ12sOATC8U22T00hBeLjamDoor+NUQmo2A6NXcjw50+xYIiIipUKBqwDefvttHnroIeLj4/O3xcfH88gjj/DOO+8UaK3HHnuMv/76izfeeINdu3Yxe/ZsJv8fe/cd3mZ9tn38lGR5xna8sxyv7D2dPVoSKKNQ9sxeUCirA9rSUvq0fQoFXjooJCE7hA1lFhoCZGNn70FiZ8dxHO8tS3r/sBPKE4adSP5J8vdzHD4OIsvSiZ3ckqXzvq45c3T33Xc3NRYAeMXy3aeUU1ChqNAg3TI42XQcAABajO93S5TVIu05WapjRZWm47QIn+7Ll8stdWsTqeTYcNNxAABAgLJYLPrdD3vq6r7tVOdy684lm7T5SJHpWE1SVFGrVzYclSTNGpNuOM35bhiYrNiIYB0rqtIHO/NMxwHgYxatO6TaOpf6d2ytwalMnfI3UaF2LZqaqdS4cB0rqtLEedkqqTx/6AUAAGiaRpWnYmJiFBsbq9jYWE2ZMkVbt27VkCFDzq3RGzJkiDZv3qypU6c26c4HDx6st956Sy+99JJ69eql//mf/9Ezzzyj22+//YL+ZwDAk9xut2avOihJmjAsRREhTd50CgAALlBsRLAGpcRKkj5m+lSzODvla3wPpk4BAADvslotevLGvhrdJUFVDqemLNig/afKTMdqtKWfH1aVw6kebaM0slO86TjnCQu2adKwVEnS7JUH5Xa7zQYC4DPKa+q0ZP1hSdKs0RmyWCyGE+FCJESGaMm0IUqMDNG+U2WaumiDKmvrTMcCAMCvNaoJ8Mwzz3gtwFVXXaWrrrrKa7cPABdq4+EibTlSrOAgqyYNTzUdBwCAFmd8jyRlHyrUx3vyNXlEmuk4Aa3a4Ty3MofyFAAAaA7BQVY9f8cA3f5ClrYcKdaEeVl6/c7hPj8Bs9rh1MJ1hyTVT53y1eLBxGEpen7lQe06Uap1B89ohA+WvAA0v5ezj6i0uk7p8RH87ufnkmPDtWTaEN34/DptOlyku5Zu1tyJgxQc1OSlQwAAQI0sT02aNMnbOQDA58xeWT916voBHZQYGWo4DQAALc+4Hkn64wd79HnOGZVUORQdZjcdKWCtzzmjylqnkqJC1Lt9tOk4AACghQgPDtKCyYN10+z12n+qXBPmZem1O4crITLEdLRv9PqmYzpTUav2rcN0Ze+2puN8o5iIYN08OFkL1x3S8ysPUp4CIIfTpflrciVJM0any2b1zfInGq9rm0gtmJKpO17I0sr9p/Wz17bpmZv7ycrPFgCAJmty/fj48eP629/+pnvuuUf33HOP/v73v+v48ePeyAYAxnxxqkwf78mXxSLNGMWkCwAATEiLj1CnxFaqc7n12b5803EC2tmVfeO6J/ns9AQAABCYWocHa/HUIeoQE6ZDZyo1eUG2SqsdpmN9LafLrbmrcyTVv14UZPPt6R7TRqbJZrVo9RcF2nWixHQcAIa9t/2ETpRUK75ViK7t3950HHjIwJQYPXfHAAVZLXpn2wk99u4u1rUCAHABmvTb3T//+U9lZGTo/vvv19KlS7V06VLdd999ysjI0D//+U9vZQSAZjdnVf0LYZf1aKP0hFaG0wAA0HKdXSPw8R7KU97icrm1Yk99eYq1DQAAwIQ20aFaMm2I4lsFa9eJUs1YtFHVDqfpWOf5aFeeDp+pVOtwu24anGw6zndKjg0/Nx3r7GtdAFomt9ut2SvrjwNTRqQq1G4znAieNLZrop66qa8sFmnR+sP664ovTEcCAMDvNLo89f777+vee+/VPffco+PHj6u4uFjFxcU6fvy4fvzjH+u+++7TBx984M2sANAs8kqq9a+t9RP1Zo1JN5wGAICWbVz3+jLPZ3vzVVvnMpwmMO04XqJTpTWKCLZpWEac6TgAAKCFSouP0MIpmYoMCVJWbqF+8tIW1Tl95/lfffHgoCRp4rBUhQcHGU7UODNH17+29d72kzpaWGk4DQBTVu4/rb15ZYoItumOISmm48ALrunXXo9d3VOS9MzHX2jx+kNmAwEA4GcaXZ76y1/+oocfflhPPvmk2rb9cpd727Zt9fTTT+uhhx7SE0884ZWQANCcFqzNlcPpVmZarPp3jDEdBwCAFq1/cmvFtwpRWU2dsnMLTccJSGdX9o3pmqCQIM4+BgAA5vRqH625kwYpOMiq5btP6eE3d/jM6qHPcwq17ViJQoKsmjTMf4oHvdpHa1TneDldbs1bk2s6DgBDzk6dujWzo6LD7YbTwFsmDkvV/eM6S5IefWeX3m44SRwAAHy3RpenNm/erAkTJnzj5ydMmKDNmzd7JBQAmFJa7dCLWUckSXcydQoAAOOsVovGdU+UJC3fnWc4TWD6mJV9AADAhwxNj9Oztw2QzWrR65uO6U8f7PGJAtXsVfVTp24c1EFxrUIMp2mas9OnXtlwVEUVtYbTAGhu244Wa33OGQVZLZo6Ms10HHjZfZd01qRhKXK7pZ++uk2f7cs3HQkAAL/Q6PKU0+mU3f7NbXS73S6n0/f20ANAUyzLOqLymjp1SWqlsV0STccBAAD6cnXf8t2nfOKNs0BytLBSe/PKZLNa9L2uPPcBAAC+YXyPJD1+fR9J0tzVuXq+YWKKKXtOluqzfadltUjTR/rfyXYjO8WrR9soVTmcWvL5YdNxADSzOavqj6FX92undq3DDKeBt1ksFj36w566um871bncunPpJm06zCRvAAC+S6PLUz179tTbb7/9jZ//17/+pZ49e3okFACYUFPn1PyG8eUzR2fIarUYTgQAACRpZOd4hdqtOlFSrd0nS03HCShnV/YNTo1R6/Bgw2kAAAC+dMPADnrkyu6SpMc/3KuXso8YyzK3oXhwea+2So2PMJbjQlksFs1qmLC+cN0hVTs4CRpoKQ4VVOjfO09K+nIKHQKf1WrRkzf21diuCap2uDRlwQbtzeP1FAAAvk2jy1N33323fv3rX+uf//yn6urqzl1eV1enZ599Vo888oh+/OMfeyUkADSHt7ecUH5ZjdpEherqvu1MxwEAAA1C7TaN6pwg6cuyDzzj7Pfz7HQvAAAAXzJ9VLp+PDZDkvTrt3bow4YCQHM6UVyld7adkOTfxYMre7dV+9ZhKqyo1WubjpmOA6CZvLAmRy63NLZrgrq1iTIdB80oOMiq524fqIEpMSqtrtPEedk6WlhpOhYAAD6r0eWpSZMm6cc//rHuuecexcXFacCAAerfv7/i4uJ07733atasWZo8ebIXowKA97hcbs1edVCSNHVkqoKDGn14BAAAzWB8j/pyz8d7KE95SnFlrbIP1Y/uv7RHG8NpAAAAvt7PL+uqWzOT5XJL9760VesOFDTr/c9fk6s6l1vD0uPUN7l1s963JwXZrJoxKk1S/SQtp4t12ECgKyiv0Wsb68uSs0ZnGE4DE8KCbZo/abC6JkUqv6xGd8zL0umyGtOxAADwSU1qBzz55JNat26dJk+erDZt2qht27aaMmWK1q5dq//3//6ftzICgNet2Juvg6crFBkSpFszO5qOAwAA/o9LuiXKYpF2Hi/VieIq03ECwmf7TsvpcqtrUqQ6xoWbjgMAAPC1LBaL/vCj3vpBzzaqdbo0Y/FGbT9W3Cz3XVLpOLcu8OzaO3920+BktQ6360hhpT7cmWc6DgAvW7zukGrqXOrbIVpD02NNx4Eh0eF2LZ6WqQ4xYTp8plKT5mertNphOhYAAD6nyaNVhg4dqr/+9a/64IMP9MEHH+iZZ57R0KFDvZENAJrN7JX1U6duH5qiyFC74TQAAOD/imsVooEdYyQxfcpTzq3s65FoOAkAAMC3s1kt+uut/TSiU5wqap2avGCDDuSXe/1+l2YdVkWtU93aRGpMlwSv35+3hQcHaeKwVEnS7FUH5XYzfQoIVJW1dVr8+WFJ0qwxGbJYLIYTwaSkqFAtnTZE8a2CtftkqaYv2qhqh9N0LAAAfAp7qQC0eJsOF2rj4SIF26yaMiLVdBwAAPANzq7uO1v6wYWrqXNq5f7TkqTxrOwDAAB+ICTIptkTBqlPh2gVVtRq4rwsr04krXY4tWDtIUn1U6cCpXgwaViKQoKs2n6sRJ/nFJqOA8BLXt1wVMWVDqXEheuynvzOByk1PkKLpmYqMiRI2bmFumfZZtU5XaZjAQDgMyhPAWjxZq/MkSRd27+9kqJCDacBAADfZFxDeerznDOMmL9In+cUqrymTomRIerTPtp0HAAAgEZpFRKkhVMylZ4QoRMl1ZowL0uFFbVeua+3thxXQXmN2kWH6qo+7bxyHybEtQrRTYOSJdVPnwIQeOqcLs1dnStJmjEqXTZrYJQ/cfF6tovWC5MGKSTIqo/35OuhN3bI5WIKIQAAEuUpAC3cgfxyLW9Y/TNjdLrhNAAA4NtkJLRSekKEHE63VjVMTcKFWb47T5J0SfckWXkhHQAA+JHYiGAtmTZEbaNDdfB0haYsyFZ5TZ1H78PpcmvuqvqT7aaNSpfdFlgvo08flSarRfps32ntOVlqOg4AD3t/x0kdL65SXESwbhjYwXQc+Jgh6XF69rYBslktemPzMf3xgz2scQUAQJSnALRwL6zOkdtdvwaoU2Ir03EAAMB3YHXfxXO73fp4d74k6dKG7ycAAIA/ad86TEumZSom3K5tx0p055JNqqlzeuz2l+8+pZyCCkWH2XXL4GSP3a6vSImL0OW920rSuZIYgMDgdrvPbVqYPDxVoXab4UTwReN6JOmJ6/tIkuatydU/P2MSIQAAlKcAtFj5pdV6c/NxSdKdY5g6BQCAPxjfvb7s8+nefDmcLsNp/NPO46XKK61WeLBNwzLiTMcBAAC4IJ0SI7VwSqbCg21ac6BAD7yyVU4PrB5yu916fmX9m8gThqYoIiToom/TF81qmMD+zrYTOl5cZTgNAE9Zc6BAu0+WKsxu04RhKabjwIddP7CDHrmyuyTpLx/t00vZRwwnAgDArEb95te/f39ZLI1b5bB58+aLCgQAzWXBukOqdbo0KCVGA1NiTccBAACN0L9jjOIignWmolYbcgs1vFO86Uh+5+zK4tGdEzgLGQAA+LW+ya01Z8IgTV24QR/syFN02E796dpejX4t++tsOFSkrUeLFRxk1aThqZ4L62P6dGitYelxWp9zRvPX5Oo3V/UwHQmAB5ydOnVLZrJahwcbTgNfN31Uuooqa/Xspwf167d2KDrMrisaJhMCANDSNGry1I9+9CNdc801uuaaa3TZZZfp4MGDCgkJ0dixYzV27FiFhobq4MGDuuyyy7ydFwA8oqzaoaWfH5YkzRqTYTgNAABoLJvVou93S5Qk/YfVfRfk7MrD8azsAwAAAWBk53j99ZZ+slqkl7KP6Mn/7Luo25vdMHXq+gEdlBAZ4omIPmtWwyT2l7KPqKTSYTgNgIu183iJ1hwokM1q0bSRaabjwE/87NKuujWzo1xu6f6Xt2rNFwWmIwEAYESjylOPPvrouY/Tp0/r3nvv1fr16/X000/r6aef1rp163T//ffr1CnevADgH17OPqqy6jplJETokoY3YAEAgH84W/r5eM8pud0Xv5qlJTlaWKk9J0tltUjf4zkQAAAIEJf3bqs/XttbkvTspwf1wuqcC7qd/afKtGJvviwWacaowC8ejOmSoG5tIlVZ69TSrMOm4wC4SLNX1R/7ftinrTrEhBtOA39hsVj0hx/10hW926jW6dLMJRu19Wix6VgAADS7RpWn/ttrr72miRMnnnf5HXfcoTfeeMMjoQDAm2rrXJq3JleSNGt0hqzWCx/lDgAAmt+ozgkKCbLqWFGV9uaVmY7jV1Y0rOwblBqr2AhWOAAAgMBxa2ZH/fyyrpKkP7y/R29sOtbk25jTUDy4rEcbpSe08mg+X2SxWM5Nn1qwNlfVDqfhRAAu1NHCSr2//YQkaeZoNi2gaWxWi/7fzf00olOcKmudmrIgWwfyeb0FANCyNLk8FRYWprVr1553+dq1axUaGuqRUADgTe9sO6G80molRobomv7tTMcBAABNFBZs06jO8ZK+XEGHxlneUJ4a352VfQAAIPD8eGyGpjesqvrFG9v1cROeK+aVVOvtrcclfbnOriW4qk87tYsOVUF5rd7cfNx0HAAX6IXVOXK5pVGd49WjXZTpOPBDIUE2zZ4wSH07RKuo0qEJ87J1vLjKdCwAAJpNk8tT999/v+666y7de++9Wrp0qZYuXaqf/OQnuvvuu/XAAw94IyMAeIzL5dacVQclSVNGpCkkyGY4EQAAuBD/vboPjVNS5VBWTqGkL79/AAAAgcRisehXV3TX9QM6yOly6+5lm5WVc6ZRX7tgba4cTrcy02LVv2OMl5P6DrvNqmmj6stic1fnyOliLTbgbworavXKxqOSpDvHMHUKF65VSJAWTMlURkKETpZUa8K8LJ0przEdCwCAZtHk8tTDDz+sRYsWadOmTbr33nt17733avPmzVqwYIEefvhhb2QEAI/5bH++9p8qV6uQIN02pKPpOAAA4AJ9v1uSLBZp+7ES5ZVUm47jFz7bl686l1udE1spNT7CdBwAAACvsFotevz63hrXPUk1dS5NX7RRu06UfOvXlFY79GLWEUnSnS1o6tRZtwxOVnSYXbkFFVq+O890HABNtHj9IVU7XOrVPkrDM+JMx4Gfi40I1pJpQ9QuOlQ5pys0ZeEGldfUmY4FAIDXNbk8JUk33XST1q5dq8LCQhUWFmrt2rW66aabPJ0NADxu9socSdJtQzoqOsxuOA0AALhQCZEh6p/cWhLTpxrr7IrDcUydAgAAAS7IZtU/buuvzLRYldXUadL8bOUWVHzj9ZdlHVF5TZ26JLXS2C6JzZjUN0SEBGnC0BRJ0vMrc+R2M30K8BdVtU4tWndIkjRrdIYsFovZQAgI7VqHafG0IYqNCNb2YyWauXijauqcpmMBAOBVF1SeKi4u1gsvvKBf/epXKiysX/uwefNmHT/OTnQAvmvLkSJl5RbKbrNoyohU03EAAMBFGt+jjaQvS0H4ZrV1Lq3cd1oSK/sAAEDLEGq36YVJg9SjbZQKyms1YV6WTpWeP7G0ps6p+WtyJUkzR2fIam2ZxYNJw1MVHGTV1qPF2nCoyHQcAI30+qajKqp0KDk2TJf3amM6DgJIp8RWWjhlsCKCbVp38Izue2krq10BAAGtyeWp7du3q0uXLnr88cf1l7/8RcXFxZKkN998U7/85S89nQ8APGbOqvqpU9f0a6+20WGG0wAAgIs1vkf9VID1B88wQv47ZOWeUVlNneJbhahfh9am4wAAADSLqFC7Fk3NVGpcuI4VVWnivGyVVDq+cp23t5xQflmN2kSF6uq+7QwlNS8hMkQ3DOwgSZq98qDhNAAao87p0tzV9eXPGaPSFWS7oHkJwDfq06G15kwcpGCbVR/uytOv39rBdEIAQMBq8jOpBx98UJMnT9YXX3yh0NDQc5dfccUVWrVqlUfDAYCn5BZU6MNdeZKkmaPTDacBAACekJHQSmnxEap1urRq/2nTcXzax2dX9nVPbLHTFAAAQMuUEBmiJdOGKDEyRPtOlWnqog2qrK0v3rtcbs1eVV8UmjYyTcFBLbt4MGNUuiwWacXefO0/VWY6DoDv8OGuPB0prFRMuF03Dkw2HQcBakSneP3t1n6yWqSXNxzVEx/tMx0JAACvaPJvgxs2bNCsWbPOu7x9+/bKy8vzSCgA8LS5q3PkdkuXdEtUl6RI03EAAIAHWCyWcyvoWN33zdxu97nvDyv7AABAS5QcG64l04YoKjRImw4X6a6lm1Vb59KKvfk6eLpCkSFBuiWT4kFafIQua1iNfXaCOwDf5Ha7NXtl/b/TScNTFRZsM5wIgewHvdrqT9f2liQ999lBzeUxAgAQgJpcngoJCVFpael5l+/fv18JCQkeCQUAnnS6rEavbzomSZo1JsNwGgAA4EnjuteXgT7Zmy+H02U4jW/adaJUJ0qqFWa3aUSneNNxAAAAjOjaJlILpmQqzG7Tyv2n9bPXtun5hvV0tw9NUWSo3XBC3zBrTP3E9re3HtfJkirDaQB8k/UHz2jH8RKF2q2aOCzVdBy0ALdkdtRDP+gmSfrjB3v0xubjhhMBAOBZQU39gquvvlq///3v9eqrr0qqP9v7yJEjeuihh3T99dd7PCAAXKxF6w6pts6l/h1ba3BqjOk4AADAgwamxCgm3K6iSoc2HirSsIw405F8zsd76qdOjeocr1A7ZyMDAICWa2BKjJ67Y4CmL9qod7adkCQF26yaMiLVbDAf0r9jjDLTYpWdW6gFaw/pV1d0Nx0J38HlciunoEIZCRGyWFjR3VI83zD55+ZByYqNCDacBi3FnWPSVVhRo7mrc/Xrt3fruhSLog+eUZCtyW83e0WPdlH8ewA87EB+ufJKqk3H8GnJsWFKiYswHQMe0ORHs6eeeko33HCDEhMTVVVVpTFjxigvL0/Dhg3TH//4R29kBIALVlFTp8XrD0mSZo3O4AUEAAACjM1q0fe7JemNzce0fPcpylNf4+zKvnGs7AMAANDYrol66qa+uv+VrXK7pWv7t1dSVKjpWD7lzjHpys4t1JL1h3VVn7bq06G16Uj4BnVOl+5culkf7zmlmwZ10OPX9+H1zxZg94lSrdp/WlaLNH1Uuuk4aEEsFot+dUV3FVU69PqmY3ot16bXcjeZjnVOaly4lj84RnZbkxcvAfgaO4+X6Jpn18rpcpuO4tN+8v1O+umlXU3HgAc0uTwVHR2t5cuXa82aNdq+fbvKy8s1YMAAjRs3zhv5AOCivLzhqEqr65QeH6HxvGEIAEBAGt+joTy1J0+/uao7bxb8lxPFVdp1olRWi3RJt0TTcQAAAHzCNf3ay+F0619bjuu+cZ1Nx/E5Y7skamSneK05UKDJCzbotTuHKSOhlelY+D9cLrceemPHuUmzr248ppjwYP2SaWEBb86q+pWjV/Zpp+TYcMNp0NJYLBb9+breigyx6cOthxQVGekTr8McPlOpQ2cq9f72k/pR//am4wAB4bmVB+V0uZUQGaI4prp9o/hWIaYjwEMueI7iyJEjNXLkSE9mAQCPcjhdmre6fnzxjNHpslnNP4EHAACeN7pLvIKDrDpaWKX9p8rVtU2k6Ug+4+wbKQNTYhTHL/IAAADn3DCwg24Y2MF0DJ9ktVr03B0DdNvcLO04XqIJL2Tp9buGq13rMNPR0MDtdutPH+zRG5uPyWa16JbByXox64hmr8pRTESw7hyTYToivORYUaXe3X5SkjRrNFOnYEaQzapfXd5V/dwHdcUVw2W3201H0rOfHtBfPtqn51ce1DX92vlEoQvwZ4fPVOjfO+ofb5ZMy1S3NlGGEwHed0HlqRUrVmjFihXKz8+Xy+X6yufmz5/vkWAAcLHe235CJ0qqFd8qRNdypgEAAAErPDhIIzvF65O9+Vq+O4/y1H85t7KvOxM4AQAA0HiRoXYtnDJYNz6/XjkFFZowL0uv3TlcsUwd8AnPrTyoF9bkSpKeuL6Prh/YQSlx4frTB3v153/vVUy4XTcP7mg4Jbxh3ppcOV1ujegUp17to03HAXzGHUNS9OynB7Q3r0yrvijQmC4JpiMBfu2F1blyuaUxXRIoTqHFaPLS18cee0yXXnqpVqxYoYKCAhUVFX3lAwB8gdvt1uyV9VOnpoxIVajdZjgRAADwprPreZfvyTecxHeUVjv0ec4ZSWJ9MQAAAJosrlWIlkwforbRoTp4ukJTFm5QRU2d6Vgt3kvZR/TEh/skSY9c2V3XN0xQmzk6Q7PG1E8i+uWbO/ThzjxjGeEdRRW1ejn7qCRp1mimiwH/LTrcrlsaSqOzVx40nAbwb2fKa/TqxobHmzFMOUTL0eTJU88//7wWLlyoCRMmeCMPAHjEqi8KtDevTOHBNt0xJMV0HAAA4GWXdEuUJG07WqxTpdVKigo1nMi8lftOy+F0KyMhQukJrUzHAQAAgB9q3zpMS6Zl6obn12vb0WLduXSTXpg0SCFBnKhowgc7TurXb+2QJP14bIamj/rqG5oP/6CbiiscemXjUd370hYtnDpYwzPiTUSFFyz9/LCqHE51bxulUZ35uQL/17RRaVq0/pDWHTyjHcdK1LsD09mAC7F4/WHV1LnUp0O0hqXHmY4DNJsmT56qra3V8OHDvZEFADzm7JkFt2Z2VHS4+X3bAADAuxKjQtUvubUkaQXTpyRJH+9pWNnH1CkAAABchE6JkVowebDCg21a/UWBHnxlm5wut+lYLc6aLwp0/8tb5XJLt2Ym6+eXdT3vOhaLRX+8tpcu65mkWqdLMxZt1PZjxc0fFh5X7XBq0fpDkqQ7x6TLYrGYDQT4oPatw3R133aSpNmrmD4FXIjK2jotbni8mTU6g8cbtChNLk9Nnz5dy5Yt80YWAPCI7ceKte7gGQVZLZo6Ms10HAAA0EzOre7bzXoKh9OlT/fWl8gupTwFAACAi9S/Y4xmTxgou82i93ec1G/e3im3mwJVc9l2tFgzl2xUrdOly3u10R9+1Psb38wMsln111v6a1h6nCpqnZq8YIMOni5v5sTwtDc2H1NBea3atw7TFb3bmo4D+KyZo+sn8n2w46SOnKk0nAbwP69tPKaiSoc6xobrB73amI4DNKtGre178MEHz/23y+XSnDlz9PHHH6tPnz6y27860eXpp5/2bEIAaKLZq3IkSVf3baf2rcMMpwEAAM1lfI8k/eWjfVp78IwqauoUEdLkLeUBIzu3UKXVdYqLCFa/5BjTcQAAABAARnVO0DM399c9L23Wsqwjig0P1s++ZvoRPOtAfrkmL8hWZa1TIzrF6Zlb+slm/fYpEKF2m+ZMHKjb5mZpx/ESTZyXrdfvGqa20bxW6o+cLrfmNrzmPX1Umuy2Js9FAFqM7m2jNKZLglbuP60X1uTo99f0Mh0J8Bt1Tpfmrq5/vJkxOv07n28AgaZRz7C2bNly7mPbtm3q16+frFardu7c+ZXPbd261ctxAeDbHT5ToX/vOClJmjkm3XAaAADQnDontlJKXLhq61xa/cVp03GMWr67fmXfJd0TeaEDAAAAHnNln7b6w4/q34j+x6cHNG9NruFEge14cZUmzMtSUaVDfTtEa/aEQQoJsjXqayND7Vo4ZbDS4yMabidbRRW1Xk4Mb/jPrjwdOlOp1uF23Tw42XQcwOfNanhv6NWNR3WmvMZwGsB/fLAzT8eKqhQXEawbB3YwHQdodo06FfvTTz/1dg4A8IgXVufK5ZbGdk1QtzZRpuMAAIBmZLFYNK57kuatydV/dp/SD3q1zFUGbrf7XHlqfA/GawMAAMCzbh+SouJKh/7y0T79z3u7FRNu13UDeIPN086U12jCvCydLKlWRkKEFkzJVKsmTteNaxWiJdOH6Pp/rqufYLVwg5ZNH9Kip/T6G7fbredXHpQkTRyaovBgfnbAdxmWHqc+HaK1/ViJFq8/rAfGdzEdCfB5brdbsxsebyYNT1WovXFlbSCQNHm2Z0lJiQoLC8+7vLCwUKWlpR4JBQAX4kx5jV7deFSSNGt0huE0AADAhPE9kiRJn+7NV53TZTiNGXvzynS8uEqhdqtGdoo3HQcAAAAB6MdjMzR1RJok6eevb9fHDeV9eEZ5TZ2mLNygnNMVahcdqiXThig2IviCbqt96zAtmZap1uF2bTtarDuXblJNndPDieEtWbmF2nasRCFBVk0cnmo6DuAXLBbLufeIFq8/pMraOsOJAN+39sAZ7TpRqjC7TROGppiOAxjR5PLULbfcopdffvm8y1999VXdcsstHgkFABdi0frDqqlzqW+HaA1NjzUdBwAAGDAoJUatw+0qqnRo0+Ei03GMODt1amSnBIUFc5YYAAAAPM9iseiRK7vruv7t5XS5dfeyzcrOPf+kazRdTZ1TMxdv1PZjJYoJt2vxtCFq1zrsom6zc1KkFkwerPBgm1Z/UaAHX9kmp8vtocTwprNTQG4c1EHxrUIMpwH8xw96tVHH2HAVVTr02sZjpuMAPm/2qvrHm5sHJyvmAgvbgL9rcnkqKytL3/ve9867fOzYscrKyvJIKABoqsraOi1ef0iSNGtMhiwWi9lAAADAiCCbVd/vmijpyxJRS/Plyr5Ew0kAAAAQyKxWix6/oY8u6ZaomjqXpi3coF0nSkzH8mtOl1v3vbRV6w6eUUSwTQunZKpTYiuP3Hb/jjGaPWGg7DaL3t9xUr95e6fcbgpUvmxvXqk+3XdaVos0fWS66TiAX7FZLZoxuv7fzdzVOS12OjnQGDuPl2j1FwWyWS2aNjLNdBzAmCaXp2pqalRXd/54Q4fDoaqqKo+EAoCmenXDURVXOpQSF67LerYxHQcAABh0dnXf8j2nWtybASdLqrTjeIksFun73ZJMxwEAAECAs9usevb2AcpMjVVZTZ0mzd+gQwUVpmP5JbfbrUf+tUMf7spTsM2qORMHqW9ya4/ex6jOCXrm5v6yWKRlWUf09PL9Hr19eNacVTmSpMt7tVVqfIThNID/uXFgB8VGBOtYUZU+2JlnOg7gs84+3lzZu62SY8MNpwHMaXJ5KjMzU3PmzDnv8ueff14DBw70SCgAaIo6p0tzV+dKkqaPSpfNytQpAABaslFdEhRss+rwmUodyC83HadZfbwnX5I0oGOMEiJZ6QAAAADvC7XbNHfSIHVvG6WC8hpNmJ+l/NJq07H8zl8+2qeXso/KapH+dms/jegU75X7ubJPW/3hR70kSX//5IDmrcn1yv3g4pwortI7W09IkmaOZuoUcCFC7TZNGpYqqX4FZks7wQ5ojKOFlXp/x0lJPN4ATS5P/eEPf9ALL7yg0aNH67HHHtNjjz2m0aNHa/78+frTn/7kjYwA8K3e33FSx4urFBcRrBsHdjAdBwAAGNYqJEjDO8VJqp8+1ZJ83LCyb1x3pk4BAACg+USH2bVo6mClxIXraGGVJs7PVkmlw3QsvzF3VY7++dlBSdKfru2tH/Rq69X7u31Iin5+WVdJ0v+8t1tvbj7m1ftD081fk6s6l1tD02M9PoEMaEkmDktRmN2mXSdKtfbAGdNxAJ8zb02unC63RnWOV6/20abjAEY1uTw1YsQIrV+/XsnJyXr11Vf17rvvqlOnTtq+fbtGjRrljYwA8I3cbrdmr6wfJzlpeKpC7TbDiQAAgC84t7pvd8spT5XX1Gn9wfoXAs/+/wMAAADNJTEyVEunDVFiZIj25pVp6qINqqp1mo7l817beFR//GCPJOkXP+iqWzI7Nsv9/nhshqaOSJMk/fz17edOxIB5JZUOvZR9RJI0a0yG4TSAf4uJCNbNg5MlSbNXHTScBvAtRRW1emXDUUnSrNE83gBNLk9JUr9+/fTiiy9q165d2rhxo+bPn6/OnTt7OhsAfKe1B85o98lShdltmjA0xXQcAADgI85OXtp6tFj5ZS1jZcjKfadV63QpLT5CGQkRpuMAAACgBUqODdfiaZmKCg3SpsNFuuvFTXI4XaZj+az/7MrTw2/ukCTNGJWmu5qxKGOxWPTIld11Xf/2crrcunvZZmXnFjbb/eObLc06rIpap7omRWpslwTTcQC/N21kmmxWi1Z/UaBdJ0pMxwF8xpLPD6vK4VTPdlEa0TDFH2jJLqg8dVZ1dbVKS0u/8gEAzensmQI3D05WTESw4TQAAMBXJEWFqm+HaLnd0id78k3HaRYfN6woHN8jSRaLxXAaAAAAtFTd2kRp/uTBCrVb9dm+0/rZa9vkcrlNx/I5n+ec0T0vbZHT5dYNAzvoV1d0b/bn8VarRY/f0EeXdEtUTZ1L0xZt0O4TvM9jUrXDqYXrDkmSZo1J53c7wAOSY8N1Ze/6dahzVuUYTgP4hq8+3mTweAPoAspTlZWVuueee5SYmKiIiAjFxMR85QMAmsvO4yVa/UWBbFaLpo1MMx0HAAD4mLPTp1rC6j6H06VP9taXxFjZBwAAANMGpcbqudsHKshq0dtbT+j37+2W202B6qydx0s0Y9FG1da5NK57kv58XW9jb1rabVY9e/sAZabGqqy6ThPnZ+vwmQojWSD9a8txnS6rUbvoUP2wbzvTcYCAMXN0uiTpve0ndbSw0nAawLzXNh1TYUWtOsSE6YpebUzHAXxCk8tTP//5z/XJJ5/oueeeU0hIiF544QU99thjateunRYvXuyNjADwtc6eIXBVn7ZKjg03nAYAAPia8T3rS0RrDhSosrbOcBrv2nioSCVVDsVGBGtAR05qAQAAgHnf65aop27qK0lauO6Q/v7JAcOJfENuQYUmL8hWWU2dhqTF6h+39VeQ7aKWhFy0ULtNcycNUve2USoor9Ed87KUX9oy1p/7EpfLfe4176kj02Q3/PcCCCS92kdrVOd4OV1uzVuTazoOYJTT5dbchsebGaPSjT8PAXxFk/8lvPvuu/rnP/+p66+/XkFBQRo1apQeeeQR/elPf9KLL77ojYwAcJ6jhZV6f8dJSV+eMQAAAPDfuiZFKjk2TDV1Lq3+osB0HK86O13r+90SZbMyZhsAAAC+4Zp+7fW7H/aQJD29fL+WrD9kNpBheSXVuuOFLBWU16pnuyjNnTRIoXab6ViSpOgwuxZNHayUuHAdLazSxPnZKql0mI7Voizfc0o5BRWKCg3SLZkdTccBAs6s0RmSpFc2HFVRRa3hNIA5H+7M05HCSsWE23XjoA6m4wA+o8nlqcLCQqWn1xcVoqKiVFhYKEkaOXKkVq1a5dl0APAN5q3JldPl1qjO8erZLtp0HAAA4IMsFkuLWN3ndru1fE+epC9XFQIAAAC+YvKINN13SWdJ0m/f2aV3tp0wnMiM4spaTZyfpePFVUqNC9fCKZmKCrWbjvUViZGhWjJ1iBIiQ7Q3r0zTFm1QVa3TdKwWwe126/mVByVJE4alqFVIkOFEQOAZ0SlOPdtFqcrh1JLPD5uOAxjx3483E4elKjyYxxvgrCaXp9LT05WbWz/OsFu3bnr11Vcl1U+kat26tUfDAcDXKayo1csbjkiS7hyTYTgNAADwZeN71JeJPtmbL6fLbTiNd+w/Va6jhVUKCbJqdJd403EAAACA89w/rrMmDkuR2y09+MpWfbYv33SkZlVZW6cpCzdo/6lyJUWFaMm0+oKSL+oYF67FUzMVFRqkjYeL9OMXN8nhdJmOFfA2Hi7SliPFCg6yatLwVNNxgIBksVg0q+E9pYXrDqnaQTkULc/6nDPacbxEoXarJg5LMR0H8ClNLk9NmTJF27ZtkyQ9/PDDevbZZxUaGqoHHnhAP//5zz0eEAD+ryXrD6va4VKv9lEanhFnOg4AAPBhg1NjFR1mV2FFrTYfKTIdxyuW766fOjWyUzxniwEAAMAnWSwW/e6HPfXDvu1U53LrrqWbtelwYD4//79q61y6a+lmbTlSrOgwuxZPHaLk2HDTsb5V97ZRmj95sELtVn2677R+/to2uQL0ZBRfMbthCsj1AzooMTLUcBogcF3Rq406xISpsKJWr206ZjoO0Oxmr8yRJN04MFlxrXyzyA2Y0uTy1AMPPKB7771XkjRu3Djt3btXy5Yt05YtW3Tfffd5PCAA/LeqWqcWrT8kqX4/tcViMRsIAAD4NLvNqu91TZAkfRygq/uW76k/a39cD1b2AQAAwHdZrRY9dWNfje6SoCqHU1MXbtD+U2WmY3mVy+XWT1/bppX7TyvMbtP8yYPVtU2k6ViNMig1Vs/dPlBBVov+tfWEfv/ebrndFKi84YtTZfp4T74sFmnGqDTTcYCAFmSzavrI+n9nc1flBOyUcuDr7DlZqpX7T8tqkabzeAOcp8nlqf8rJSVF1113nfr06eOJPADwrV7fdFSFFbVKjg3T5b3amI4DAAD8wPge9c8ZlgdgeepUabW2HS2WxSJd0j3RdBwAAADgWwUHWfX8HQPUv2NrlVQ5NGFelo4WVpqO5RVut1u/e3eX3t12QnabRc9PGKiBKTGmYzXJ97ol6qmb+kqqX3H1908OGE4UmOasqp8CcmmPJKUntDKcBgh8Nw1OVutwu44UVurDnXmm4wDNZm7D483lvdsqJS7CcBrA9zS6PPXJJ5+oR48eKi0tPe9zJSUl6tmzp1avXu3RcADw3+qcLs1dnStJmj4yXUG2i+5/AgCAFmB0l3jZbRblFFToQH656Tge9fGe+kJYv+TWrHYAAACAXwgPDtKCyYPVJamVTpXWaMK8LJ0uqzEdy+Oe+fgLLV5/WBaL9NRN/TSmS4LpSBfkmn7t9bsf9pAkPb18v5Y0bAWAZ+SVVOtfW49LkmaNyTCcBmgZwoODNHFYqiRp9qqDTNVDi3C8uErvbDshSZo1Ot1wGsA3Nbp58Mwzz2jGjBmKioo673PR0dGaNWuWnn76aY+GA4D/9uGuPB0prFRMuF03DupgOg4AAPATkaF2DcuIl/Rl2ShQnF1FOK47K/sAAADgP1qHB2vx1CHqEBOmQ2cqNXlBtkqrHaZjeczCtbn664ovJEm/v6aXru7bznCiizN5RJruu6SzJOm37+w69+YrLt6CtblyON3KTI3VgI7+NZkM8GeThqUoJMiq7cdK9HlOoek4gNfNX5OrOpdbwzPi1KdDa9NxAJ/U6PLUtm3b9IMf/OAbP3/ppZdq06ZNHgkFAP+X2+3W7JX14yQnDktVeHCQ4UQAAMCfjO9RXy4KpNV9FTV1WnvwjKT69Q4AAACAP2kTHaol04YovlWwdp0o1YxFG1XtcJqOddHe3npcv3t3tyTpgXFdNGFoiuFEnnH/uM6aOCxFbrf001e3auX+06Yj+b3SaodezDoiSZo1hikgQHOKaxWimwYlS6qfPgUEspJKh17KPvt4w5RD4Js0ujx16tQp2e32b/x8UFCQTp/myTIA71ifc0Y7jpco1G7VxGGB8YIDAABoPuO6J0qSNh8pCpiVIKu/OK3aOpdS4sLVKbGV6TgAAABAk6XFR2jhlExFhgQpK7dQP3lpi+qcLtOxLtin+/L101e3SZImD0/VvZd0MpzIcywWi373w576Yd92cjjdunPJJm0+UmQ6ll97KeuIymvq1Dmxlb7XNdF0HKDFmT4qTVaL9Nm+09pzstR0HMBrlmYdVmWtU93aRGp053jTcQCf1ejyVPv27bVz585v/Pz27dvVtm1bj4QCgP/r7NSpmwYlK65ViOE0AADA37SNDlPv9tFyu6VP9+abjuMR/2mYojW+e5IsFovhNAAAAMCF6dU+WnMnDVJwkFXLd5/Sw2/ukNvtNh2ryTYdLtRdSzepzuXWNf3a6bdX9Qi45+lWq0VP3dhXo7skqMrh1JQFG7T/VJnpWH6pps6p+WtzJUkzR6fLag2svyuAP0iJi9Dlvevf2567KsdwGsA7qh1OLWh4vLlzTEbAPTcBPKnR5akrrrhCv/nNb1RdXX3e56qqqvToo4/qqquu8mg4AJCkPSdLtXL/aVkt0vSRjC8GAAAXZlz3+tV2/wmA1X11Tpc+aSiBjWdlHwAAAPzc0PQ4PXvbANmsFr2+6Zj+9MEevypQ7c0r1ZQFG1TtcGls1wQ9eWPfgC3DBAdZ9fwdA9S/Y2uVVDk0YV6WjhZWmo7ld97eekKnSmuUFBWia/q1Nx0HaLFmja5/z+mdbSd0vLjKcBrA897cfFwF5bVq3zpMV/ZhEA7wbRpdnnrkkUdUWFioLl266IknntDbb7+tt99+W48//ri6du2qwsJC/frXv/ZmVgAt1JyGxv8VvduqY1y44TQAAMBfnS0ZrTlwWlW1TsNpLs6mw0UqrnSodbhdA1NiTMcBAAAALtr4Hkl6/Po+kqS5q3P1/Er/mAJy5EylJs7LVml1nQalxOi52wfKbmv0Wy9+KTw4SAsmD1aXpFY6VVqjCfOyVFAeGOvRm4PL5T73mve0kWkKDgrsvy+AL+vTobWGZ8SpzuXW/DW5puMAHuV0uTV39ZePN4H+/AS4WI3+F5KUlKR169apV69e+uUvf6lrr71W1157rX71q1+pV69eWrNmjZKSOOMZgGcdK6rUO9tOSJJmjc4wnAYAAPiz7m0j1b51mKodLq05UGA6zkVZ3jA96/vdEhXECx8AAAAIEDcM7KBHruwuSXr8w716KfuI4UTfLr+sWhPmZym/rEbd2kRq3qTBCgu2mY7VLFqHB2vx1CHqEBOmQ2cqNWl+tsqqHaZj+YVP9ubrQH65IkOCdGtmR9NxgBZvZsP0qZeyj6ikkuMYAsfy3XnKLahQdJhdNw9ONh0H8HlNepU9JSVFH3zwgQoKCpSVlaXPP/9cBQUF+uCDD5SWlnZRQf785z/LYrHo/vvvv6jbARBY5q85JKfLrRGd4tS7Q7TpOAAAwI9ZLJZz06eW784znObCud1uLd9TX54a350TWAAAABBYpo9K111j60+i/PVbO/ThzpOGE329kiqHJs3foMNnKpUcG6bFUzMVHW43HatZtYkO1ZJpQxTfKli7TpRq+qKNqnb495Tf5jB71UFJ0u1DUxQZ2rL+zgC+aEyXBHVrE6nKWqeWZh02HQfwCLfbfW6K54ShKYoICTKcCPB9F3SKckxMjAYPHqzMzEzFxFz8iogNGzZo9uzZ6tOnz0XfFoDAUVxZq5c31J9dxtQpAADgCWfLUyv25MvpchtOc2EO5Jfr8JlKBQdZNbpLguk4AAAAgMf94rKuumVwslxu6d6Xtmp9zhnTkb6i2uHUjEUbtedkqeJbhWjJ1CFKjAo1HcuItPgILZySqciQIGXlFuonL21RndNlOpbP2nS4UBsOFSnYZtWUEamm4wBQ/cl2s8bUT59asDaXEigCwoZDRdp6tFjBQVZNGp5qOg7gF4xXDMvLy3X77bdr7ty5+sMf/mA6DtCsqmqdWr7nlGp4Iva1snILVVnrVPe2URrVOd50HAAAEAAy02IVGRqkMxW12nq0SANTYk1HarL/NKzsG5ERx1ljAAAACEgWi0V/vLa3iisd+nBXnu56casub29R1ebjstnMr8V7f8dJZR8qVGRokBZPzVRqfITpSEb1ah+tuZMGaeL8bC3ffUoPv7lDf7mhjywWi+loPmd2wxSQa/u3V1ILLdwBvuiqPu30lw/36URJtd7cfFy3DWGlprcUV9Zq69FijeqcIJuVxwlvmb2yfsrhDQM7KCEyxHAawD8Yf6X97rvv1pVXXqlx48Z9Z3mqpqZGNTU15/5cWloqSXI4HHI42EHrq87+bPgZne+P7+/R0qyjpmP4vOkjUlRXV2c6BhAwOC4DaOnGdI7Xezvy9ORH+zR3wgCFBF3QQF6Paepx+ezKwe91jedYDgBewnNmAPANT97QS6VVtVqXU6jXc216PXeX6UjnhARZNfv2/uqcEMbjhaSByVH62019dPfL2/T6pmOKDrXpocu6UKD6L+9uP3nuZJgpwzvy9wZ+LRCfL08enqI//Xuf5qw6qOv6taHY4yX3vbRFK78o0A0D2utPP+rB44QXfHGqXCv25stikaYMSw6of6f4ZoF4XPaEpnw/LG6329iuipdffll//OMftWHDBoWGhmrs2LHq16+fnnnmma+9/u9+9zs99thj512+bNkyhYeHezkt4FllDumxTTY53BZ1iXYpiOcGXyshTLomxSUb3x8AAOAhxyukv+60qcZlUb9YlyZ1cclfXg8rrZV+u8kmtyz6/cA6RQebTgQAAAB4V7VTev+IVQXVppN8KcgqjWnjUqdo00l8T3a+RS8erJ8O9sOOTo1r75/r0j1tT5FFc/ZZ5XJbNKatS9elstoQ8DU1Tul3m2yqdFo0tYtTfeM4fnnasQrpL9u/nO1ySTuXrk7heOhpLx6wKvu0VX1jXZrale8vWrbKykrddtttKikpUVRU1Ldet1GTpwYMGKAVK1YoJiZGv//97/Wzn/3sostKR48e1X333afly5crNLRxo0l/+ctf6sEHHzz359LSUiUnJ+vSSy/9zv9RmONwOLR8+XKNHz9edrvddByf8cyKA3K4c9S3Q7Rem5lJsxpAs+G4DABSzwFnNH3JZm0ttKprXUf9z9XdjT0fa8px+ZWNx+TetFt92kfp1h8NbaaEANDy8JwZAHzLDzku+40rJHVce0j/++F+vXvEpqH9e+imQR1MxzJq85FiPbRwo1xul67q3UZP3dBbVn85gwf4BoH6fDk37As9tzJXmypj9fAdvHfnaQ++tl1SntLiwpV7plIrTlg1sHdXzRiZZjpawDhZUq2fZa+W5NYjNwxVv+TWpiOhmQTqcflind1m1xiNKk/t2bNHFRUViomJ0WOPPaY777zzostTmzZtUn5+vgYMGHDuMqfTqVWrVukf//iHampqzttdHhISopCQ83dy2u12/gL4AX5OX6qoqTu3ru+usRkKDmZkAIDmx3EZQEs2plsb/e2W/rp72Wa9svGY4iND9PPLuhnN1Jjj8qf7CiRJl/ZswzEcAJoBz5kBwLdwXPYPs8Z2VnG1U899dlC/eWe34iJD9YNebU3HMmJfXplmLNmsaodLY7ok6Omb+yvY8Op4wJMC7bg8dWSG5q09rG3HSrT1eLky02JNRwoYRwsr9cHO+tWlf79tgNYcKNCf/71XT3z0heJbhemmwcmGEwaGpdkH5HC6NSQtVoPTE0zHgQGBdly+WE35XjSqPNWvXz9NmTJFI0eOlNvt1pNPPqlWrVp97XV/+9vfNuqOL7nkEu3YseMrl02ZMkXdunXTQw89dF5xCggkr248qpIqh9LiIzS+RxvTcQAAAFqky3u31R+v7a1fvrlDz356UDHhwZo+Kt10rG9UWVunNQfqy1M8hwQAAADgy35xWVcVVdTq5Q1Hde9LW7Vwil3DO8WbjtWsjhZWasK8LJVW12lAx9Z67o4BFKcAH5cQGaIbBnbQsqwjmr3yIOUpD5q3JldOl1ujOserV/to9WofraKKWs1elaOH39yu6HC7LuvJ610Xo6TKoWVZRyRJd47JMJwG8D+NKk8tXLhQjz76qN577z1ZLBb9+9//VlDQ+V9qsVgaXZ6KjIxUr169vnJZRESE4uLizrscCCQOp0svrM6VJM0YlS4b43kBAACMuTWzo4oqa/XEh/v0h/f3KCY8WNcP9M2VEqu/KFBNnUvJsWHqkvT1J7MAAAAAgC+wWCz647W9VVzp0Ie78jRj8Ua9NHOo+nRobTpaszhdVqMJ87KUX1ajrkmRmj95sMKDG/WWHADDZoxK10vZR7Rib772nypTl6RI05H8XlFFrV7ZUL+RZ+boL09cfPjybiqsqNVrm47pJy9t0aIpmRqWEWcqpt9blnVE5TV16poUqbFdmToFNFWjKu5du3bVyy+/rA0bNsjtdmvFihXasmXLeR+bN2/2dl7A732w46SOF1cpvlWwrhvQ3nQcAACAFu+uMRmaMSpNkvSLN7br492nDCf6essbco3v3kYWCwV8AAAAAL7NZrXor7f204hOcaqodWrygg06kF9uOpbXlVY7NGl+tg6dqVSHmDAtnpap1uHBpmMBaKS0+Aj9oGEC0pxVOYbTBIYlnx9WlcOpHm2jNPK/phBaLBb973W9Nb5HkmrrXJqxeKN2Hi8xmNR/1dQ5NX9t/fCOmaPTee0QuABNng/qcrmUmJjojSz67LPP9Mwzz3jltgFf4Ha79fzK+idak4enKtTOekoAAADTLBaLfnVFd90wsIOcLrfuXrZZWTlnTMf6CqfLrU/25kuSxvXwzu9jAAAAAOBpIUE2zZ4wSH06RKuwolYT52XpRHGV6VheU+1wavqijdp9slTxrYK1dNoQJUWFmo4FoInOTkd6e+txnSwJ3GNWc6h2OLVw3SFJ0qwx55d6gmxW/f3W/hqSFqvymjpNmp+tnNOBX7T1tH9tOa7TZTVqExWqH/ZtZzoO4JcuaLnywYMH9ZOf/ETjxo3TuHHjdO+99+rgwYOezgYEnNVfFGjPyVKFB9t0x9AU03EAAADQwGKx6M/X9da47kmqqXNp+qKN2nXCd85023ykSIUVtYoOsyszNdZ0HAAAAABotFYhQVo4JVPpCRE6UVKtCfOyVFhRazqWx9U5Xbpn2RZl5xYqMiRIi6ZmKjU+wnQsABegf8cYZabFyuF0a8HaQ6bj+LXXNh1TYUWt2rcO05W9237tdULtNr0waZB6tY/SmYpaTZiXTWmtCVwut2Y3TEmbNjJNwUEXVAEBWrwm/8v56KOP1KNHD2VnZ6tPnz7q06ePsrKy1LNnTy1fvtwbGYGAMXtVfcnwlsEdGdMLAADgY4JsVv3jtv7KTItVWcOZbrkFFaZjSfpyZd/3uyUqyMYLIAAAAAD8S2xEsJZMG6K20aE6eLpCUxZkq7ymznQsj3G53HrojR36eM8phQRZ9cKkQerZLtp0LAAX4c4x9dOnlmUdUUmVw3Aa/+R0ufXC6vpSz4xRad/6mlZkqF0Lp2QqLT5Cx4urNHFetooCsGjrDSv25ivndIUiQ4N0S2ay6TiA32ryq+4PP/ywHnjgAWVlZenpp5/W008/raysLN1///166KGHvJERCAg7jpVo7YEzslktmjYqzXQcAAAAfI2zZ7r1aBulgvJaTZiXpVOl1aZj6eOG8tS47kmGkwAAAADAhWnfOkxLpmUqJtyubcdKdOeSTaqpc5qOddHcbrf+9MEevbH5mGxWi/5x2wANSY8zHQvARRrbJVFdklqpvKZOy7KOmI7jlz7alafDZyrVOtyumwZ/d6knvlWIlkzLVJuoUH2RX64pCzeoIoCKtt4ye2X98I47hqYoMtRuOA3gv5pcntqzZ4+mTZt23uVTp07V7t27PRIKCERnp05d3bed2rcOM5wGAAAA3yQq1F6/XiEuXMeK6s90K640d6bbgfxy5RRUKNhm1ZiuCcZyAAAAAMDF6pQYqYVTMhUebNOaAwV64JWtcrrcpmNdlOdWHtQLa3IlSU9c30fje3DSCxAIrFaLZo7OkCTNX5sbEGXP5uR2u8+VeiYOS1V4cFCjvq5DTLgWT8tUdJhdW48W686lm1Rb5/JmVL+28VChNh4uUrDNqinDU03HAfxak8tTCQkJ2rp163mXb926VYmJiZ7IBASco4WV+mDHSUnSzNHphtMAAADguyREhmjJtCFKigrRvlNlmrpwgyprzZzpdnZl37CMOLUKadwLTQAAAADgq/omt9acCYMUbLPqgx15euRfO+V2+2eB6qXsI3riw32SpEeu7K7rB3YwnAiAJ13dt53aRIXqdFmN/rXluOk4fuXznEJtO1aikCCrJg1LadLXdkmK1IIpgxVmt2n1FwV68FX/L9p6y+xV9WsRrxvQXolRoYbTAP6tyeWpGTNmaObMmXr88ce1evVqrV69Wn/+8581a9YszZgxwxsZAb/3wuocudzSmC4J6t42ynQcAAAANEJybLgWTx2i6DC7Nh8p1l1LNxs50+3jPQ0r+zh7GQAAAECAGNk5Xn+9pZ+slvoC0lP/2W86UpP9e8dJ/fqtHZKku7+XoemjOHEaCDTBQVZNG5kmSZqzKkcuCjyNdnYjz02DkhXXKqTJXz+gY4yenzBQdptF720/qd++7b9FW285kF+u5btPyWKRZjC8A7hoTS5P/eY3v9Fvf/tb/f3vf9eYMWM0ZswY/eMf/9Dvfvc7PfLII97ICPi1wopavbLxqCRp1hgeuAAAAPxJ1zaRmj+5/ky3lftP62evbWvWF8pOl9Vo85EiSdK47kz6BQAAABA4Lu/dVn+8trck6R+fHtALq3MMJ2q8tQcKdN/LW+VyS7dmdtTPLu1qOhIAL7klM1mRoUE6eLpCK/bmm47jF/acLNVn+07LapGmj0q74NsZ0yVBT9/UTxaL9GLWEf2/5f5XtPWmuQ1Tp8Z3T1JGQivDaQD/1+TylMVi0QMPPKBjx46ppKREJSUlOnbsmO677z5ZLBZvZAT82uL1h1TtcKlPh2gNS48zHQcAAABNNDAlRs/dMUBBVove2XZCj727q9nOdPt0b77cbql3+2i1jQ5rlvsEAAAAgOZya2ZH/fyy+uLRH97fozc2HTOc6LttO1qsmYs3qtbp0uW92ugPP+rF+2NAAIsMteuOofVr52avPGg4jX84W+q5vHdbpcRFXNRt/bBvO/3+ml6SpL99ckAL1uZedL5AcKq0Wm81rJKcNSbDcBogMDS5PPXfIiMjFRkZ6aksQMCpqnVq0bpDkqRZozP4BQoAAMBPje2aqKdu6iuLRVq0/rD+uuKLZrnf/+yuX9k3npV9AAAAAALUj8dmaHrDWqxfvLFdHzf8HuSLDuSXa/KCbFXUOjWiU5yeuaWfbFZe9wcC3ZThqQq2WbXxcJE2Hio0HcenHS+u0jvbTkiSZnloldyEoSn66fgukqTH3t2tfzWUhlqyBWsPqdbp0uDUGA1MiTEdBwgIF1WeAvDtXtt0VEWVDnWMDdcPerUxHQcAAAAX4Zp+7fX7q3tKkp75+ItzJXlvqap1as2B05IoTwEAAAAIXBaLRb+6oruuH9BBTpdbdy/brKycM6Zjned4cZUmzMtSUaVDfTtEa/aEQQoJspmOBaAZJEaF6tr+7SVJs1f5z4pRE+avyVWdy61h6XHq06G1x273nu930uThqZKkn722TZ/s9d2irbeVVTv04ueHJUkzRzN1CvAUylOAl9Q5XZrbsKN9xqg0zj4BAAAIABOGpeqBcfVnuj36zi69vdV7Z7qtOVCgaodL7VuHqVsbJv4CAAAACFxWq0WPX99b47onqabOpemLNmrXiRLTsc45U16jCfOydLKkWhkJEVowJVOtQoJMxwLQjGY0TFFavvuUDuSXG07jm0oqHXop+4gkadYYz0ydOstisei3V/XQj/q1U53LrbuWbtaGFjoF7KXsIyqrqVNGQoQu6ZZoOg4QMChPAV7y7515OlpYpdiIYN0wMNl0HAAAAHjIvZd00qRhKZKkn766TZ/ty/fK/SzfnSepfuoU658BAAAABLogm1X/uK2/MtNiVVZTp0nzN+hQQYXpWCqvqdOUhRuUc7pC7aJDtWTaEMVGBJuOBaCZdUpsdW4y+FymT32tpVmHVVnrVLc2kRrTJcHjt2+1WvSXG/vq+90SVVPn0tSFG7TnZKnH78eX1da5NH/NIUnSrNEZsjK8A/CYJpWnHA6HLrnkEn3xxRfeygMEBLfbrdmrDkqSJg1LVVgwo3sBAAAChcVi0aM/7Kmr+9af6Xbn0k3adNizZ7o5XW6t2FNfymJlHwAAAICWItRu0wuTBql72ygVlNfojnlZOlVabSxPTZ1Ts5Zs1PZjJYoJt2vxtCFq1zrMWB4AZt3ZME3prS3HjR6bfFG1w6kFa3Ml1U+d8taJgHabVc/eNkCDUmJUVl2nifOzdeRMpVfuyxe9s+2E8kqrlRgZomv6tzMdBwgoTSpP2e12bd++3VtZgICx7uAZ7TxeqjC7TRMbphIAAAAgcFitFj15Y1+N7ZqgaodLUxZs0N48z53ptvVokc5U1CoqNEiZabEeu10AAAAA8HVRoXYtnpqp1LhwHSuq0sR52SqpdDR7DqfLrftf3qq1B84oItimhVMy1SmxVbPnAOA7BqbEalBKjGqdLi1Ye8h0HJ/y5ubjKiivVbvoUF3Vx7ulnrBgm+ZNHqxubSJ1uqy+aJtfFvhlNpfLrTkNwzumjkxTSBDDOwBPavLavjvuuEPz5s3zRhYgYDy/sv6B6+bByYphfC8AAEBACg6y6rnbB2pgSoxKq+s0cV62jhZ65ky3/+w+JUn6XrdE2W1sWwcAAADQsiREhmjJtCFKjAzRvlNlmrpogypr65rt/t1utx751w79e2eegm1WzZk4SH2TWzfb/QPwXbPGZEiSXvz8sMqqm7/Y6YucLrdeWF2/ynDaqPRmeS0rOqy+aNsxNlxHCivri7ZVgf3z+Gx/vvafKlerkCDdNqSj6ThAwGnykauurk7PPfecBg0apFmzZunBBx/8ygfQ0u06UaLVXxTIZrVo2sg003EAAADgRWHBNs2fNFhdkyKV33Cm2+mymou+3Y8bylPjurOyDwAAAEDLlBwbriXThigqNEibDhfpxy9ulsPpapb7/stH+/RS9lFZLdLfbu2nEZ3im+V+Afi+S7olKiMhQmU1dXop+4jpOD5h+e5TyimoUHSYXbcMTm62+02MCtWSaZmKbxWivXllmr5og6pqnc12/83t+ZX1BbXbh3RUVKjdcBog8DS5PLVz504NGDBAkZGR2r9/v7Zs2XLuY+vWrV6ICPiXOavqH7iu7N1WybHhhtMAAADA26LD7Vo8LVPJsWE6fKZSE+df3JluOafLdfB0hew2i8Z0TfBgUgAAAADwL13bRGrBlEyF2W36bN9p/ey1bXK53F69zxdW5+ifn9Vvl/jTtb31g15tvXp/APyL1WrRrNH106fmrzmk2rrmKXX6KrfbfW4jz4ShKYoICWrW+0+Ji9DiqZmKDA3ShkNFuntZ8xVtm9PmI0XKzi2U3WbRlBEM7wC8ocnlqU8//fQbPz755BNvZAT8xrGiSr23/aQkaebodMNpAAAA0FySokK1ZOoQxbcK0Z6TpZqxaKOqHRd2ptvHe+qnTg1Nj+MsMgAAAAAt3sCUGD13xwAFWS16e+sJPfbuLrnd3ilQvb7pmP7w/h5J0i9+0FW3ZLIWCcD5runfTomRIcorrdY7206YjmPUhkNF2nq0WMFBVk0anmokQ492UZo/ebBCgqz6ZG++fvH6dq8XbZvbnIapUz/q115tokMNpwEC0wUvHD1w4IA++ugjVVVVSZLXnqgC/mTemlw5XW6N6hyvXu2jTccBAABAM0qNj9CiqYMVGRKk7EOFumfZZtVdwJluyxtW9o3vwco+AAAAAJCksV0T9dRNfWWxSIvWH9bfVhzw+H0s331KD72xXZI0Y1Sa7hqT4fH7ABAYQoJsmjqyfvrPnFUHA66o0xSzG6ZO3TCwgxIiQ4zlGJwaq+fuGCCb1aK3thzX/7y/O2D6Czmny/XR7jxJDO8AvKnJ5akzZ87okksuUZcuXXTFFVfo5Mn6KTvTpk3TT3/6U48HBPxFUUWtXs4+KknnxnUCAACgZenZLlovTBqkkCCrPt6Tr4fe2NGkF9DOlNdo0+EiSdK47pSnAAAAAOCsa/q11+9+2FOS9P8+3q/F6w957LY/zzmju5dtltPl1g0DO+hXV3SXxWLx2O0DCDy3DemoViFB2n+qXJ/tzzcdx4j9p8q0Ym++LBZpxijzpZ7vd0vSkzf2kSQtWHtIz37q+aKtCXNX58rtlsZ1T1TnpEjTcYCA1eTy1AMPPCC73a4jR44oPDz83OU333yzPvzwQ4+GA/zJ0s8Pq8rhVI+2URrRKc50HAAAABgyJD1Oz95Wf6bbG5uP6Y8f7Gn0mW6f7M2Xyy31bBeldq3DvJwUAAAAAPzLpOGpun9cZ0nSo+/s0ttbj1/0be48XqIZizaqts6lcd2T9OfrelOcAvCdokLtum1I/WrP5xtWqrU0c1bV/39f1qON0uIjDKepd23/Dnr0hz0kSU/+Z7+Wfn7YcKKLk19WrTc2H5MkzWR4B+BVTS5P/ec//9Hjjz+uDh06fOXyzp076/Bh/z74ABeq2uHUwnWHJEmzxqTzixUAAEALN65Hkp64vv5Mt3lrcvXPzw426utY2QcAAAAA3+6+Szpr0rAUud3ST1/dps/2XfjEl9yCCk1ekK2ymjoNSYvVP27rryBbk986A9BCTRmRKrvNouzcQm0+UmQ6TrM6WVJ1rsA6a4z5qVP/bcqINP3k+50kSb95e6fe237CcKILt2jdIdXWudS/Y2sNTo0xHQcIaE1+BlhRUfGViVNnFRYWKiTE3B5TwKTXNx3TmYpatW8dpit7tzUdBwAAAD7g+oEd9MiV3SVJf/lon5ZlHfnW61c7nFr9RYEkVvYBAAAAwDexWCx69Ic9dXXfdqpzuXXX0s3n1p83xanSak2Yl6WC8lr1aBuluZMGKdRu80JiAIGqbXSYrunXXpI0p4VNn1qw9pAcTrcy02LVv6PvlXoeHN9Ftw/pKLdbeuCVrVq1/7TpSE1WUVOnJevrh9fMGp3B8A7Ay5pcnho1apQWL1587s8Wi0Uul0tPPPGEvve973k0HOAPnC635q6uf0I0Y1QaZ6UAAADgnOmj0nX39+pHav/6Xzv0wY6T33jddTmFqnI41b51mHq2i2quiAAAAADgd6xWi568sa/GdElQlcOpqQs3aF9eWaO/vriyVhPnZetYUZVS48K1aGqmokLtXkwMIFDNHF0/demj3XnKOV1uOE3zKKlynDtJ8E4fmzp1lsVi0e+v6aUr+7SVw+nWnUs3aYufTQd7ecNRlVbXKT0+gin1QDNocsvjiSee0Jw5c3T55ZertrZWv/jFL9SrVy+tWrVKjz/+uDcyAj7to115OnymUq3D7bppcLLpOAAAAPAxP7u0q27NrD/T7b6Xt2hNw3Sp/2vFnvpVE+O6J3ImGQAAAAB8h+Agq567Y4AGdGytkiqHJszL0tHCyu/8usrauvqy1akyJUWFaMm0IUqIZLMKgAvTJSlSl3RLlNstzV2dazpOs1iWdUTlNXXqktRKY7skmo7zjWxWi/7fTf00qnO8KmudmrJwg7441fiirUkOp0vzzg7vGJ0um5XXCgFva3J5qlevXtq/f79Gjhypa665RhUVFbruuuu0ZcsWZWRkeCMj4LPcbrdmrzwoSZo4LFXhwUGGEwEAAMDXWCwW/eFHvXRF7zZyON2auWSjth4t/sp1XG7pk33148PHcSYZAAAAADRKeHCQ5k8erK5Jkcovq9GEeVk6XVbzjdevrXPprqWbtflIsaLD7Fo8dYiSY8ObMTGAQDRrTP175G9sPqb8smrDabyrps6p+WvrS2IzR2fI6uOlnuAgq56/Y6D6JbdWcaVDE+Zl61jRdxdtTXtv+wmdKKlWfKsQXdu/vek4QItwQfvFoqOj9etf/1qvvvqqPvjgA/3hD39Q27ZtPZ0N8Hmf5xRq27EShQRZNWlYiuk4AAAA8FE2q0X/7+Z+Gtmp4Uy3Bdk6kP/lmW5HyqWC8lpFhgRpSFqcwaQAAAAA4F9ahwdr8bRMdYgJ06EzlZo0P1ul1Y7zrudyufWz17Zp5f7TCrPb6ktXbSINJAYQaAanxqh/x9aqrXNp0bpDpuN41dtbTuh0WY3aRIXq6r7tTMdplIiQIC2YPFidE1spr7RaE+dlq6D8m4u2ptUP76ifOjVlRKpC7TbDiYCW4YLKU0VFRXryySc1bdo0TZs2TU899ZQKCws9nQ3webNX1U+dumlQsuJaMdYXAAAA3ywkyKbZEwaqb3JrFTWc6Xa8uEqStKOo/lezsd0SFRx0Qb+mAQAAAECLlRQVqqXThii+VbB2nyzV9EUbVe1wnvu82+3WY+/u0jvbTshus+j5CQM1MCXGYGIAgcRisWjW6PrpU0vWH1Z5TZ3hRN7hcrnPvTc6bWSaX72GFRNRX7Rt3zpMOQUVmrwgW2VfU7T1BSv3n9bevDJFBNt0xxCGdwDNpclHtFWrVik1NVV/+9vfVFRUpKKiIv3tb39TWlqaVq1a5Y2MgE/ac7JUn+07LatFmj4qzXQcAAAA+IGzZ7plJEToZEm1JszL0pmKWu0srB9xPq57ouGEAAAAAOCfUuMjtGhqpiJDgpSdW6h7lm1RndMlSfrrii+0aP1hWSzSUzf105guCYbTAgg043skKT0+QqXVdXplw1HTcbxixd58HTxdocjQIN2SmWw6TpO1jQ7TkmmZiosI1s7jpZq5eNNXira+4uzUqVszOyo63G44DdByNLk8dffdd+vmm29Wbm6u3nzzTb355pvKycnRLbfcorvvvtsbGQGfNHdV/QPX5b3bKiUuwnAaAAAA+IvYiGAtmTZE7aJDlXO6Qre9sEF5VRYFWS0a25XyFAAAAABcqJ7tovXCpEEKCbLq4z2n9NAbO7Rwba6e+fgLSdLvr+7pN2umAPgXm9WiGaPTJUnzVufI0VDeDCSzV9ZPnbpjaIoiQ/2z1JOe0EoLp2SqVUiQ1uec0b0vfVm09QXbjhZrfc4ZBVktmjqS4R1Acwpq6hccOHBAr7/+umy2L3dr2mw2Pfjgg1q8eLFHwwG+6kRxld7ZdkKSNKvhiRAAAADQWO1ah2nxtCG6afZ65RRUSJIyU2MUHeafLzwBAAAAgK8Ykh6nf9w2QHcu3aQ3Nh/TG5vrL39gXBdNGJZqNBuAwHZt//Z66j/7daKkWu9uO6HrBnQwHcljNh4q1MbDRQq2WTVleKrpOBeld4dozZ04SJMWZOs/u0/prhc3q0/7aNOxJEmf7T8tSbq6Xzu1ax1mOA3QsjS5PDVgwADt2bNHXbt2/crle/bsUd++fT0WDPBl89fkqs7l1rD0OPXp0Np0HAAAAPihTomttHDKYN0653NV1DpZ2QcAAAAAHjK+R5KeuL6PfvraNknS5OGpuveSToZTAQh0oXabpoxI1V8+2qc/vL9HfZNbKyOhlelYHjG7YSPPtf3bKzEq1HCaizcsI05/v7W/7lq6Sct3n9Ly3adMR/qKmQzvAJpdo8pT27dvP/ff9957r+677z4dOHBAQ4cOlSR9/vnnevbZZ/XnP//ZOykBH1JS6dBL2UckSbPG8MAFAACAC9enQ2stnTpYs99bp5sGtjcdBwAAAAACxvUDOyg6zK6TJVW6fUiKLBaL6UgAWoApI1L14c487TheogkvZOmNHw9X22j/niB0IL/8XLloRgCVei7r2UaLpw7RBztPyu02neZLA1Ni1K1NlOkYQIvTqPJUv379ZLFY5P6vo8YvfvGL865322236eabb/ZcOsAHLc06rIpap7q1idSYLgmm4wAAAMDP9WofpcuTXQqx2777ygAAAACARhvXI8l0BAAtTHhwkBZOGawbn1+vnIIKTZiXrddmDVNMRLDpaBdsbsPUqfE9ktQpMTAmaZ01snO8RnaONx0DgA9oVHkqNzfX2zkAv1DtcGrB2kOS6qdOcaYKAAAAAAAAAAAAgLPiWoVo8bRM3fDceh3IL9fkhRu0bPoQRYQ06q15n3KqtFpvbTkuSbqTjTwAAlijjtApKSnezgH4hbe2HFdBeY3aRYfqqj7tTMcBAAAAAAAAAAAA4GM6xIRrybRM3Th7vbYdLdadSzfphUmDFBLkX5PHF6w9pFqnS4NSYjQwJdZ0HADwmguqt544cUJr1qxRfn6+XC7XVz537733eiQY4GucLve5sZTTRqXLbrMaTgQAAAAAAAAAAADAF3VOitSCyYN1+wtZWv1FgR58ZZv+dmt/2az+sdmmrNqhFz8/LEmaNSbDcBoA8K4ml6cWLlyoWbNmKTg4WHFxcV9ZW2axWChPIWAt331KOQUVig6z65bByabjAAAAAAAAAAAAAPBh/TvGaPaEgZq6cIPe33FS0eF2/fFHvb7yHruvein7iMpq6pSREKFLuiWajgMAXtXk0Tm/+c1v9Nvf/lYlJSU6dOiQcnNzz33k5OR4IyNgnNvt1vMrD0qSJgxN8cudxAAAAAAAAAAAAACa16jOCXrm5v6yWKRlWUf09PL9piN9p9o6l+avOSRJmjU6Q1Y/mZYFABeqyeWpyspK3XLLLbJaWVmGlmPDoSJtPVqs4CCrJg1PNR0HAAAAAAAAAAAAgJ+4sk9b/eFHvSRJf//kgOatyTWc6Nu9s+2E8kqrlRgZomv6tzMdBwC8rskNqGnTpum1117zRhbAZ81umDp1w8AOSogMMZwGAAAAAAAAAAAAgD+5fUiKfnZpF0nS/7y3W29uPmY40ddzudyas6r+vdGpI9MUEmQznAgAvK/Ju8f+93//V1dddZU+/PBD9e7dW3a7/Suff/rppz0WDvAF+0+VacXefFks0oxR6abjAAAAAAAAAAAAAPBDd3+vkworHJq/Nlc/f327okLtGtcjyXSsr/hsf772nypXq5Ag3Tako+k4ANAsLqg89dFHH6lr166SJIvly/2m//3fQKCYsypHknRZjzZKi48wnAYAAAAAAAAAAACAP7JYLHrkyu4qrqzVm1uO6+5lm7Vk2hBlpsWajnbO8yvr3xu9bUhHRYXav+PaABAYmlyeeuqppzR//nxNnjzZC3EA35JXUq23tx6XJM0aw9QpAAAAAAAAAAAAABfOarXo8Rv6qKTKoRV78zVt0Qa9MnOYerSLMh1Nm48UKTu3UHabRVNGpJqOAwDNxtrULwgJCdGIESO8kQXwOQvW5srhdCszLVb9O8aYjgMAAAAAAAAAAADAz9ltVj17+wBlpsaqrLpOE+dn6/CZCtOxNKdh6tQ1/dqrbXSY4TQA0HyaXJ6677779Pe//90bWQCfUlrt0ItZRyRJdzJ1CgAAAAAAAAAAAICHhNptmjtpkLq3jVJBeY3umJel/NJqY3lyTpfro915kqSZo3lvFEDL0uS1fdnZ2frkk0/03nvvqWfPnrLbv7rn9M033/RYOMCkZVlHVF5Tpy5JrTS2S6LpOAAAAAAAAAAAAAACSHSYXYumDtaNz6/X4TOVmjg/W6/MHKbocPt3f7GHzV2dK7dbuqRborokRTb7/QOASU2ePNW6dWtdd911GjNmjOLj4xUdHf2VDyAQ1NQ5NX9NriRp5ugMWa0Ww4kAAAAAAAAAAAAABJrEyFAtmTpECZEh2ptXpmmLNqiq1tmsGfLLqvXG5mOSpFljMpr1vgHAFzR58tSCBQu8kQPwKW9vOaH8shq1iQrV1X3bmY4DAAAAAAAAAAAAIEB1jAvX4qmZunn2em08XKQfv7hJcyYOkt3W5FkoF2TRukOqrXOpf8fWGpwa0yz3CQC+pHmOtoAfcbncmr3qoCRp2sg0BQfxzwQAAAAAAAAAAACA93RvG6X5kwcr1G7Vp/tO6+evbZPL5fb6/ZbX1GnJ+sOSpFmjM2SxsJEHQMvT5MlTaWlp33rAzMnJuahAgGkr9ubr4OkKRYYG6ZbMZNNxAAAAAAAAAAAAALQAg1Jj9dztAzVj8Ub9a+sJtQ4P1qM/7OHVQtMrG46qtLpO6fERGt8jyWv3AwC+rMnlqfvvv/8rf3Y4HNqyZYs+/PBD/fznP/dULsCY2Svrp07dMTRFkaF2w2kAAAAAAAAAAAAAtBTf65aop27qq/te3qqF6w4pNiJY917S2Sv35XC6NG91/XCUGaPTZbMydQpAy9Tk8tR99933tZc/++yz2rhx40UHAkzaeKhQGw8XKdhm1ZThqabjAAAAAAAAAAAAAGhhrunXXkUVtfrdu7v19PL9iokI1oShKR6/n/e2n9CJkmrFtwrRtf3be/z2AcBfWD11Q5dffrneeOMNT90cYMTsVfXN6mv7t1diVKjhNAAAAAAAAAAAAABaoskj0s5NnPrt2zv17rYTHr19t9ut2Svr3xudMiJVoXabR28fAPyJx8pTr7/+umJjYz11c0CzO5BfruW7T0mqH0sJAAAAAAAAAAAAAKY8MK6zJgxNkdstPfjqVq3cf9pjt71y/2ntzStTeLBNdwzx/FQrAPAnTV7b179/f1ksX+46dbvdysvL0+nTp/XPf/7To+GA5jS3YerU+B5J6pTYynAaAAAAAAAAAAAAAC2ZxWLRY1f3VHGVQ+9uO6E7l2zSizOGaEDHmIu+7bNTp27N7KjocPtF3x4A+LMml6d+9KMffeXPVqtVCQkJGjt2rLp16+apXECzOlVarbe2HJck3TmGqVMAAAAAAAAAAAAAzLNaLXrqxr4qqXJo1f7TmrJgg167c5i6JEVe8G1uO1qs9TlnFGS1aOrINA+mBQD/1OTy1KOPPuqNHIBRC9YeUq3TpUEpMRqYwvpJAAAAAAAAAAAAAL4hOMiq5+8YoNtfyNKWI8WaMC9Lr985XMmx4Rd0e3MaNvJc3bed2rcO82RUAPBLVtMBANPKqh16MeuwJGnWmAzDaQAAAAAAAAAAAADgq8KDg7Rg8mB1SWqlU6U1mjg/WwXlNU2+nUMFFfr3zpOSpJls5AEASU0oT1mtVtlstm/9CApq8iArwLiXs4+qrLpOGQkRuqRbouk4AAAAAAAAAAAAAHCe1uHBWjx1iNq3DlNuQYUmzc9WWbWjSbfxwpocudzS2K4J6tYmyktJAcC/NLrt9NZbb33j59avX6+//e1vcrlcHgkFNJfaOpfmrcmVJM0anSGr1WI4EQAAAAAAAAAAAAB8vTbRoVo6fYhueG6ddp0o1fRFG7VoaqZC7bbv/NqC8hq9tvGYpPr3RgEA9RpdnrrmmmvOu2zfvn16+OGH9e677+r222/X73//e4+GA7ztnW0nlFdarcTIEF3Tv53pOAAAAAAAAAAAAADwrdLiI7RoaqZunfO5snIL9ZOXtui52wcoyPbti6cWrzukmjqX+naI1tD02GZKCwC+r9Fr+/7biRMnNGPGDPXu3Vt1dXXaunWrFi1apJSUFE/nA7zG5XJrzqqDkqSpI9MUEvTdbWwAAAAAAAAAAAAAMK1X+2jNnTRIwUFWLd99Sr98c4fcbvc3Xr+ytk6LPz8sSZo1JkMWCxt5AOCsJpWnSkpK9NBDD6lTp07atWuXVqxYoXfffVe9evXyVj7Aaz7bn6/9p8rVKiRItw3paDoOAAAAAAAAAAAAADTa0PQ4PXvbANmsFr226Zj+/O+933jdVzccVXGlQylx4bqsZ5tmTAkAvq/R5aknnnhC6enpeu+99/TSSy9p3bp1GjVqlDezAV71/MocSdJtQzoqKtRuOA0AAAAAAAAAAAAANM34Hkn683W9JUmzV+Xo+ZUHz7tOndOluatzJUnTR6XLZmXqFAD8t6DGXvHhhx9WWFiYOnXqpEWLFmnRokVfe70333zTY+EAb9l8pEjZuYWy2yyaMiLVdBwAAAAAAAAAAAAAuCA3DkpWcaVDf/xgj/78771qHWbXLZlfbt55f8dJHS+uUlxEsG4c2MFgUgDwTY0uT02cOJG9pwgYcxqmTl3Tr73aRocZTgMAAAAAAAAAAAAAF27G6HQVVtbquc8O6ldv7VDrcLt+0Kut3G63Zje8NzppeKpC7TbDSQHA9zS6PLVw4UKP3/n//u//6s0339TevXsVFham4cOH6/HHH1fXrl09fl/AWTmny/XR7jxJ0szR6YbTAAAAAAAAAAAAAMDF+8VlXVVUUauXNxzVvS9t1cIpdjndbu0+Waowu00ThqaYjggAPslq8s5Xrlypu+++W59//rmWL18uh8OhSy+9VBUVFSZjIcDNXZ0rt1u6pFuiuiRFmo4DAAAAAAAAAAAAABfNYrHoj9f21g96tlGt06UZizfqj+/vkSTdPDhZMRHBhhMCgG9q9OQpb/jwww+/8ueFCxcqMTFRmzZt0ujRo8+7fk1NjWpqas79ubS0VJLkcDjkcDi8GxYX7OzPxhd+RqfLavTG5mOSpGkjUnwiEwA0N186LgMAOC4DgC/i2AwAvoXjMgD4Fo7Lvu/JG3qptKpW63IKtTevTDarRZOGJvMzAwIUx+Wv15Tvh8Xtdru9mKVJDhw4oM6dO2vHjh3q1avXeZ//3e9+p8cee+y8y5ctW6bw8PDmiAg/994Rq5YftyqllVsP9HLKYjGdCAAAAAAAAAAAAAA8q9op/WOXTUcrLBoY79LEzi7TkQCgWVVWVuq2225TSUmJoqKivvW6PlOecrlcuvrqq1VcXKw1a9Z87XW+bvJUcnKyCgoKvvN/FOY4HA4tX75c48ePl91uN5ajoqZOo59cpdLqOj17a19d2iPJWBYAMMlXjssAgHoclwHA93BsBgDfwnEZAHwLx2X/UVrl0Hs78nRFrzZqHc7PCghUHJe/XmlpqeLj4xtVnjK6tu+/3X333dq5c+c3FqckKSQkRCEhIeddbrfb+QvgB0z/nN7IOqbS6jqlx0foB73by2Zl7BSAls30cRkA8FUclwHA93BsBgDfwnEZAHwLx2XfF2e3a9KIdNMxADQTjstf1ZTvhU+Up+655x699957WrVqlTp06GA6DgKQw+nSvNU5kqQZo9MpTgEAAAAAAAAAAAAAAMBsecrtdusnP/mJ3nrrLX322WdKS0szGQcB7L3tJ3SipFrxrUJ0bf/2puMAAAAAAAAAAAAAAADABxgtT919991atmyZ3n77bUVGRiovL0+SFB0drbCwMJPREEDcbrdmr6yfOjVlRKpC7TbDiQAAAAAAAAAAAAAAAOALrCbv/LnnnlNJSYnGjh2rtm3bnvt45ZVXTMZCgFm5/7T25pUpPNimO4akmI4DAAAAAAAAAAAAAAAAH2F8bR/gbWenTt2a2VHR4XbDaQAAAAAAAAAAAAAAAOArjE6eArxt29Firc85oyCrRVNHppmOAwAAAAAAAAAAAAAAAB9CeQoBbc6q+qlTV/dtp/atwwynAQAAAAAAAAAAAAAAgC+hPIWAdfhMhf6986QkaeaYdMNpAAAAAAAAAAAAAAAA4GsoTyFgvbA6Vy63NLZrgrq1iTIdBwAAAAAAAAAAAAAAAD6G8hQC0pnyGr268agkadboDMNpAAAAAAAAAAAAAAAA4IsoTyEgLVp/WDV1LvXtEK2h6bGm4wAAAAAAAAAAAAAAAMAHUZ5CwKmsrdPi9YckSbPGZMhisZgNBAAAAAAAAAAAAAAAAJ9EeQoB59UNR1Vc6VBKXLgu69nGdBwAAAAAAAAAAAAAAAD4KMpTCCh1Tpfmrs6VJE0flS6blalTAAAAAAAAAAAAAAAA+HqUpxBQ3t9xUseLqxQXEawbB3YwHQcAAAAAAAAAAAAAAAA+jPIUAobb7dbslTmSpEnDUxVqtxlOBAAAAAAAAAAAAAAAAF9GeQoBY82BAu0+Waowu00ThqaYjgMAAAAAAAAAAAAAAAAfR3kKAePs1KmbBycrJiLYcBoAAAAAAAAAAAAAAAD4OspTCAg7j5dozYEC2awWTRuZZjoOAAAAAAAAAAAAAAAA/ADlKQSEOavqp05d1aetkmPDDacBAAAAAAAAAAAAAACAP6A8Bb93tLBS7+84KUmaOTrdcBoAAAAAAAAAAAAAAAD4C8pT8Hvz1uTK6XJrVOd49WwXbToOAAAAAAAAAAAAAAAA/ATlKfi1wopavbzhiCTpzjEZhtMAAAAAAAAAAAAAAADAn1Cegl9bsv6wqh0u9WofpeEZcabjAAAAAAAAAAAAAAAAwI9QnoLfqqp1atH6Q5KkmaMzZLFYzAYCAAAAAAAAAAAAAACAX6E8Bb/1+qajKqyoVYeYMF3Rq43pOAAAAAAAAAAAAAAAAPAzlKfgl+qcLs1dnStJmjEqXUE2/ioDAAAAAAAAAAAAAACgaWicwC99uCtPRworFRNu142DOpiOAwAAAAAAAAAAAAAAAD9EeQp+x+12a/bKHEnSxGGpCg8OMpwIAAAAAAAAAAAAAAAA/ojyFPzO+pwz2nG8RKF2qyYOSzEdBwAAAAAAAAAAAAAAAH6K8hT8ztmpUzcNSlZcqxDDaQAAAAAAAAAAAAAAAOCvKE/Br+w5WaqV+0/LapGmj0w3HQcAAAAAAAAAAAAAAAB+jPIU/MqcVfVTp67o3VYd48INpwEAAAAAAAAAAAAAAIA/ozwFv3GsqFLvbDshSZo1OsNwGgAAAAAAAAAAAAAAAPg7ylPwG/PXHJLT5daITnHq3SHadBwAAAAAAAAAAAAAAAD4OcpT8AvFlbV6ecMRSUydAgAAAAAAAAAAAAAAgGdQnoJfWPr5YVXWOtW9bZRGdY43HQcAAAAAAAAAAAAAAAABgPIUfF61w6mF6w5JkmaNTpfFYjEbCAAAAAAAAAAAAAAAAAGB8hR83hubj6mgvFbtW4fpyj5tTccBAAAAAAAAAAAAAABAgKA8BZ/mdLn1wupcSdK0kWmy2/grCwAAAAAAAAAAAAAAAM+giQKftnx3nnILKhQdZtfNg5NNxwEAAAAAAAAAAAAAAEAAoTwFn+V2u/XcyhxJ0sRhKYoICTKcCAAAAAAAAAAAAAAAAIGE8hR8VnZuobYdLVZwkFWThqeajgMAAAAAAAAAAAAAAIAAQ3kKPmv2qvqpUzcO7KD4ViGG0wAAAAAAAAAAAAAAACDQUJ6CT9qXV6ZP9ubLYpFmjEo3HQcAAAAAAAAAAAAAAAABiPIUfNKchqlTl/dqo9T4CMNpAAAAAAAAAAAAAAAAEIgoT8HnnCyp0ttbj0uSZo3OMJwGAAAAAAAAAAAAAAAAgYryFHzO/DW5qnO5NTQ9Vn2TW5uOAwAAAAAAAAAAAAAAgABFeQo+paTKoWVZRyQxdQoAAAAAAAAAAAAAAADeRXkKPmVZ1hFV1DrVNSlSY7smmI4DAAAAAAAAAAAAAACAAEZ5Cj6jps6p+WtzJUkzR6fLYrEYTgQAAAAAAAAAAAAAAIBARnkKPuNfW47rdFmN2kaH6od925mOAwAAAAAAAAAAAAAAgABHeQo+weVya/aqHEnStJFpCg7iryYAAAAAAAAAAAAAAAC8i4YKfMLHe04p53SFIkODdEtmR9NxAAAAAAAAAAAAAAAA0AJQnoJPODt1asLQFLUKCTKcBgAAAAAAAAAAAAAAAC0B5SkYt/FQoTYdLlKwzarJI1JNxwEAAAAAAAAAAAAAAEALQXkKxj2/sn7q1PUD2ysxMtRwGgAAAAAAAAAAAAAAALQUlKdg1IH8Mn2855QsFmn6qHTTcQAAAAAAAAAAAAAAANCCUJ6CUXNW1U+durRHkjISWhlOAwAAAAAAAAAAAAAAgJaE8hSMOVVarX9tOSFJmjk6w3AaAAAAAAAAAAAAAAAAtDSUp2DMgrWHVOt0aXBqjAamxJiOAwAAAAAAAAAAAAAAgBaG8hSMKKt26MXPD0uSZjF1CgAAAAAAAAAAAAAAAAZQnoIRL2UfUVlNnTolttL3uyWajgMAAAAAAAAAAAAAAIAWiPIUml1tnUvz1uRKkmaOTpfVajGcCAAAAAAAAAAAAAAAAC0R5Sk0u7e3Htep0holRYXomn7tTMcBAAAAAAAAAAAAAABAC0V5Cs3K5XJrzqocSdLUEWkKCbIZTgQAAAAAAAAAAAAAAICWivIUmtWn+/L1RX65IkOCdOuQjqbjAAAAAAAAAAAAAAAAoAWjPIVmNXtl/dSp24Z2VFSo3XAaAAAAAAAAAAAAAAAAtGSUp9BsthwpVvahQtltFk0dkWY6DgAAAAAAAAAAAAAAAFo4ylNoNnPXHJIkXdu/vZKiQs2GAQAAAAAAAAAAAAAAQItHeQrNIr9K+nhvviRp5uh0w2kAAAAAAAAAAAAAAAAAHylPPfvss0pNTVVoaKiGDBmi7Oxs05HgYZ+esMrtlsZ1T1SnxEjTcQAAAAAAAAAAAAAAAADz5alXXnlFDz74oB599FFt3rxZffv21WWXXab8/HzT0eAhp8tqlH3aIkmaNSbDcBoAAAAAAAAAAAAAAACgnvHy1NNPP60ZM2ZoypQp6tGjh55//nmFh4dr/vz5pqPBQ5Z8fkR1bov6J0drUEqM6TgAAAAAAAAAAAAAAACAJCnI5J3X1tZq06ZN+uUvf3nuMqvVqnHjxmn9+vXnXb+mpkY1NTXn/lxaWipJcjgccjgc3g+MJiuvqdOL2UclSVOGJauurs5wIgDA2cdMHjsBwDdwXAYA38OxGQB8C8dlAPAtHJcBwLdwXP56Tfl+GC1PFRQUyOl0Kikp6SuXJyUlae/evedd/3//93/12GOPnXf5f/7zH4WHh3stJy7cpgKLSqttSgx1y3lkqz44utV0JABAg+XLl5uOAAD4LxyXAcD3cGwGAN/CcRkAfAvHZQDwLRyXv6qysrLR1zVanmqqX/7yl3rwwQfP/bm0tFTJycm69NJLFRUVZTAZvskVki7PLdDq9Rt02aXjZbfbTUcCgBbP4XBo+fLlGj+e4zIA+AKOywDgezg2A4Bv4bgMAL6F4zIA+BaOy1/v7Da7xjBanoqPj5fNZtOpU6e+cvmpU6fUpk2b864fEhKikJCQ8y632+38BfBhg9Lilb/Hzc8JAHwMx2UA8C0clwHA93BsBgDfwnEZAHwLx2UA8C0cl7+qKd8LqxdzfKfg4GANHDhQK1asOHeZy+XSihUrNGzYMIPJAAAAAAAAAAAAAAAAAAQ642v7HnzwQU2aNEmDBg1SZmamnnnmGVVUVGjKlCmmowEAAAAAAAAAAAAAAAAIYMbLUzfffLNOnz6t3/72t8rLy1O/fv304YcfKikpyXQ0AAAAAAAAAAAAAAAAAAHMeHlKku655x7dc889pmMAAAAAAAAAAAAAAAAAaEGspgMAAAAAAAAAAAAAAAAAgAmUpwAAAAAAAAAAAAAAAAC0SJSnAAAAAAAAAAAAAAAAALRIlKcAAAAAAAAAAAAAAAAAtEiUpwAAAAAAAAAAAAAAAAC0SJSnAAAAAAAAAAAAAAAAALRIlKcAAAAAAAAAAAAAAAAAtEiUpwAAAAAAAAAAAAAAAAC0SJSnAAAAAAAAAAAAAAAAALRIlKcAAAAAAAAAAAAAAAAAtEhBpgNcDLfbLUkqLS01nATfxuFwqLKyUqWlpbLb7abjAECLx3EZAHwLx2UA8D0cmwHAt3BcBgDfwnEZAHwLx+Wvd7ZLdLZb9G38ujxVVlYmSUpOTjacBAAAAAAAAAAAAAAAAIAvKSsrU3R09Ldex+JuTMXKR7lcLp04cUKRkZGyWCym4+AblJaWKjk5WUePHlVUVJTpOADQ4nFcBgDfwnEZAHwPx2YA8C0clwHAt3BcBgDfwnH567ndbpWVlaldu3ayWq3fel2/njxltVrVoUMH0zHQSFFRUfxDBQAfwnEZAHwLx2UA8D0cmwHAt3BcBgDfwnEZAHwLx+XzfdfEqbO+vVoFAAAAAAAAAAAAAAAAAAGK8hQAAAAAAAAAAAAAAACAFonyFLwuJCREjz76qEJCQkxHAQCI4zIA+BqOywDgezg2A4Bv4bgMAL7l/7d3tzFWlecagO/hSyYMDPI1MKEgBgqofAwfImKJpQghLSmpaCWUAqk2NSMUqGkkacEYA8bGlFIFqkmLJiK0ptDWBKhRSsWoCGRENEWkFNoqIFqojAKGmfOjcedMtKemnpmt7utKVrL3874r+9nz487OrCdryWWATxa5/PGVNTY2Nha7CQAAAAAAAAAAgJbmzlMAAAAAAAAAAEBJMjwFAAAAAAAAAACUJMNTAAAAAAAAAABASTI8BQAAAAAAAAAAlCTDUzSr++67LxdddFHat2+fMWPGZOfOncVuCaBk/PGPf8zUqVNTXV2dsrKybNq0qcl6Y2NjlixZkl69eqW8vDwTJ07MgQMHitMsQAlYvnx5Ro8enY4dO6ZHjx6ZNm1a9u/f32TPmTNnUltbm65du6aioiLXXnttjh07VqSOAT7bVq9enaFDh6ZTp07p1KlTxo4dm82bNxfWZTJAcd11110pKyvLggULCjXZDNBybr/99pSVlTU5Bg0aVFiXyQAt7+9//3u+8Y1vpGvXrikvL8+QIUOya9euwrprf/89w1M0mw0bNmTRokVZunRp9uzZk2HDhmXy5Mk5fvx4sVsDKAn19fUZNmxY7rvvvg9dv/vuu7Ny5cqsWbMmzz33XDp06JDJkyfnzJkzLdwpQGnYvn17amtr8+yzz+bxxx/Pe++9l0mTJqW+vr6wZ+HChfnd736XX/3qV9m+fXtee+21fO1rXyti1wCfXb17985dd92V3bt3Z9euXZkwYUK++tWv5qWXXkoikwGK6fnnn8/PfvazDB06tEldNgO0rEsvvTSvv/564dixY0dhTSYDtKx//OMfGTduXNq2bZvNmzfn5Zdfzj333JMLL7ywsMe1v/9eWWNjY2Oxm+CzacyYMRk9enTuvffeJElDQ0M+97nPZd68ebntttuK3B1AaSkrK8vGjRszbdq0JP+aPK+urs73vve93HrrrUmSU6dOpaqqKmvXrs0NN9xQxG4BSsMbb7yRHj16ZPv27Rk/fnxOnTqV7t27Z926dZk+fXqS5E9/+lMGDx6cZ555JldccUWROwb47OvSpUt+9KMfZfr06TIZoEhOnz6dESNGZNWqVbnzzjszfPjwrFixwu9lgBZ2++23Z9OmTamrq/vAmkwGaHm33XZbnn766Tz11FMfuu7a38fjzlM0i3PnzmX37t2ZOHFiodaqVatMnDgxzzzzTBE7AyBJDh06lKNHjzbJ6crKyowZM0ZOA7SQU6dOJfnXhfok2b17d957770m2Txo0KD06dNHNgM0s/Pnz2f9+vWpr6/P2LFjZTJAEdXW1ubLX/5ykwxO/F4GKIYDBw6kuro6F198cWbOnJkjR44kkckAxfDb3/42o0aNynXXXZcePXqkpqYmDzzwQGHdtb+Px/AUzeLEiRM5f/58qqqqmtSrqqpy9OjRInUFwPvez2I5DVAcDQ0NWbBgQcaNG5fLLrssyb+yuV27duncuXOTvbIZoPm8+OKLqaioyAUXXJDvfOc72bhxYy655BKZDFAk69evz549e7J8+fIPrMlmgJY1ZsyYrF27Nlu2bMnq1atz6NChfOELX8jbb78tkwGK4M9//nNWr16dAQMGZOvWrbn55pszf/78PPjgg0lc+/u42hS7AQAAgFJTW1ubffv2ZceOHcVuBaCkDRw4MHV1dTl16lQeffTRzJ49O9u3by92WwAl6a9//Wu++93v5vHHH0/79u2L3Q5AyZsyZUrh9dChQzNmzJj07ds3v/zlL1NeXl7EzgBKU0NDQ0aNGpVly5YlSWpqarJv376sWbMms2fPLnJ3n37uPEWz6NatW1q3bp1jx441qR87diw9e/YsUlcAvO/9LJbTAC3vlltuyWOPPZZt27ald+/ehXrPnj1z7ty5nDx5ssl+2QzQfNq1a5f+/ftn5MiRWb58eYYNG5af/OQnMhmgCHbv3p3jx49nxIgRadOmTdq0aZPt27dn5cqVadOmTaqqqmQzQBF17tw5n//85/Pqq6/6vQxQBL169coll1zSpDZ48ODCI1Vd+/t4DE/RLNq1a5eRI0fmiSeeKNQaGhryxBNPZOzYsUXsDIAk6devX3r27Nkkp//5z3/mueeek9MAzaSxsTG33HJLNm7cmCeffDL9+vVrsj5y5Mi0bdu2STbv378/R44ckc0ALaShoSFnz56VyQBF8KUvfSkvvvhi6urqCseoUaMyc+bMwmvZDFA8p0+fzsGDB9OrVy+/lwGKYNy4cdm/f3+T2iuvvJK+ffsmce3v4/LYPprNokWLMnv27IwaNSqXX355VqxYkfr6+sydO7fYrQGUhNOnT+fVV18tvD906FDq6urSpUuX9OnTJwsWLMidd96ZAQMGpF+/fvnhD3+Y6urqTJs2rXhNA3yG1dbWZt26dfnNb36Tjh07Fp4zX1lZmfLy8lRWVuZb3/pWFi1alC5duqRTp06ZN29exo4dmyuuuKLI3QN89ixevDhTpkxJnz598vbbb2fdunX5wx/+kK1bt8pkgCLo2LFjLrvssia1Dh06pGvXroW6bAZoObfeemumTp2avn375rXXXsvSpUvTunXrzJgxw+9lgCJYuHBhrrzyyixbtizXX399du7cmfvvvz/3339/kqSsrMy1v4/B8BTN5utf/3reeOONLFmyJEePHs3w4cOzZcuWVFVVFbs1gJKwa9eufPGLXyy8X7RoUZJk9uzZWbt2bb7//e+nvr4+3/72t3Py5MlcddVV2bJlS9q3b1+slgE+01avXp0kufrqq5vUf/GLX2TOnDlJkh//+Mdp1apVrr322pw9ezaTJ0/OqlWrWrhTgNJw/PjxfPOb38zrr7+eysrKDB06NFu3bs0111yTRCYDfBLJZoCW87e//S0zZszIm2++me7du+eqq67Ks88+m+7duyeRyQAtbfTo0dm4cWMWL16cO+64I/369cuKFSsyc+bMwh7X/v57ZY2NjY3FbgIAAAAAAAAAAKCltSp2AwAAAAAAAAAAAMVgeAoAAAAAAAAAAChJhqcAAAAAAAAAAICSZHgKAAAAAAAAAAAoSYanAAAAAAAAAACAkmR4CgAAAAAAAAAAKEmGpwAAAAAAAAAAgJJkeAoAAAAAAAAAAChJhqcAAAAAKJo5c+Zk2rRpRfv8WbNmZdmyZR9p7w033JB77rmnmTsCAAAAoCWVNTY2Nha7CQAAAAA+e8rKyv7P9aVLl2bhwoVpbGxM586dW6ap/+WFF17IhAkTcvjw4VRUVPzH/fv27cv48eNz6NChVFZWtkCHAAAAADQ3w1MAAAAANIujR48WXm/YsCFLlizJ/v37C7WKioqPNLTUXG688ca0adMma9as+cjnjB49OnPmzEltbW0zdgYAAABAS/HYPgAAAACaRc+ePQtHZWVlysrKmtQqKio+8Ni+q6++OvPmzcuCBQty4YUXpqqqKg888EDq6+szd+7cdOzYMf3798/mzZubfNa+ffsyZcqUVFRUpKqqKrNmzcqJEyf+bW/nz5/Po48+mqlTpzapr1q1KgMGDEj79u1TVVWV6dOnN1mfOnVq1q9f//H/OAAAAAB8IhieAgAAAOAT5cEHH0y3bt2yc+fOzJs3LzfffHOuu+66XHnlldmzZ08mTZqUWbNm5Z133kmSnDx5MhMmTEhNTU127dqVLVu25NixY7n++uv/7Wfs3bs3p06dyqhRowq1Xbt2Zf78+bnjjjuyf//+bNmyJePHj29y3uWXX56dO3fm7NmzzfPlAQAAAGhRhqcAAAAA+EQZNmxYfvCDH2TAgAFZvHhx2rdvn27duuWmm27KgAEDsmTJkrz55pvZu3dvkuTee+9NTU1Nli1blkGDBqWmpiY///nPs23btrzyyisf+hmHDx9O69at06NHj0LtyJEj6dChQ77yla+kb9++qampyfz585ucV11dnXPnzjV5JCEAAAAAn16GpwAAAAD4RBk6dGjhdevWrdO1a9cMGTKkUKuqqkqSHD9+PEnywgsvZNu2bamoqCgcgwYNSpIcPHjwQz/j3XffzQUXXJCysrJC7Zprrknfvn1z8cUXZ9asWXn44YcLd7d6X3l5eZJ8oA4AAADAp5PhKQAAAAA+Udq2bdvkfVlZWZPa+wNPDQ0NSZLTp09n6tSpqaura3IcOHDgA4/de1+3bt3yzjvv5Ny5c4Vax44ds2fPnjzyyCPp1atXlixZkmHDhuXkyZOFPW+99VaSpHv37v8v3xUAAACA4jI8BQAAAMCn2ogRI/LSSy/loosuSv/+/ZscHTp0+NBzhg8fniR5+eWXm9TbtGmTiRMn5u67787evXvzl7/8JU8++WRhfd++fendu3e6devWbN8HAAAAgJZjeAoAAACAT7Xa2tq89dZbmTFjRp5//vkcPHgwW7duzdy5c3P+/PkPPad79+4ZMWJEduzYUag99thjWblyZerq6nL48OE89NBDaWhoyMCBAwt7nnrqqUyaNKnZvxMAAAAALcPwFAAAAACfatXV1Xn66adz/vz5TJo0KUOGDMmCBQvSuXPntGr1iN0KQQAAAR1JREFU7//9deONN+bhhx8uvO/cuXN+/etfZ8KECRk8eHDWrFmTRx55JJdeemmS5MyZM9m0aVNuuummZv9OAAAAALSMssbGxsZiNwEAAAAALe3dd9/NwIEDs2HDhowdO/Y/7l+9enU2btyY3//+9y3QHQAAAAAtwZ2nAAAAAChJ5eXleeihh3LixImPtL9t27b56U9/2sxdAQAAANCS3HkKAAAAAAAAAAAoSe48BQAAAAAAAAAAlCTDUwAAAAAAAAAAQEkyPAUAAAAAAAAAAJQkw1MAAAAAAAAAAEBJMjwFAAAAAAAAAACUJMNTAAAAAAAAAABASTI8BQAAAAAAAAAAlCTDUwAAAAAAAAAAQEkyPAUAAAAAAAAAAJSk/wEFvbDHXqtdOQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Extract recorded data for plotting\n", + "times, cache_sizes = zip(*cache.cache_state_over_time)\n", + "\n", + "# Plot the cache size over time\n", + "plt.figure(figsize=(30, 5))\n", + "plt.plot(times, cache_sizes, label=\"Objects in Cache\")\n", + "plt.xlabel(\"Time (s)\")\n", + "plt.ylabel(\"Number of Cached Objects\")\n", + "plt.title(\"Number of Objects in Cache Over Time\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "99cac143-ef09-4205-a73e-8816eecc9a1e", + "metadata": {}, + "source": [ + "Object 1: Hit Rate = 0.99, Average Age = 0.00\n", + "Object 2: Hit Rate = 0.97, Average Age = 0.55\n", + "Object 3: Hit Rate = 0.96, Average Age = 0.87\n", + "Object 4: Hit Rate = 0.94, Average Age = 1.24\n", + "Object 5: Hit Rate = 0.18, Average Age = 2.33\n", + "Object 6: Hit Rate = 0.09, Average Age = 4.00\n", + "Object 9: Hit Rate = 0.25, Average Age = 2.33\n", + "Object 10: Hit Rate = 0.08, Average Age = 0.00\n", + "Object 11: Hit Rate = 0.25, Average Age = 1.00\n", + "Object 12: Hit Rate = 0.29, Average Age = 1.00" + ] + }, + { + "cell_type": "markdown", + "id": "88918958-f883-4a67-8212-31a8c9355634", + "metadata": {}, + "source": [ + "Object 1: Hit Rate = 0.99, Average Age = 0.00\n", + "Object 2: Hit Rate = 0.97, Average Age = 0.56\n", + "Object 3: Hit Rate = 0.96, Average Age = 0.78\n", + "Object 4: Hit Rate = 0.92, Average Age = 1.83\n", + "Object 5: Hit Rate = 0.14, Average Age = 0.00\n", + "Object 7: Hit Rate = 0.29, Average Age = 2.00\n", + "Object 24: Hit Rate = 0.50, Average Age = 1.00\n", + "Object 44: Hit Rate = 0.33, Average Age = 1.00" + ] + }, + { + "cell_type": "markdown", + "id": "3d911168-f981-4552-8d7d-99a47916312f", + "metadata": {}, + "source": [ + "Object 1: Hit Rate = 0.99, Average Age = 0.00\n", + "Object 2: Hit Rate = 0.97, Average Age = 0.42\n", + "Object 3: Hit Rate = 0.95, Average Age = 1.38\n", + "Object 4: Hit Rate = 0.96, Average Age = 1.44\n", + "Object 7: Hit Rate = 0.33, Average Age = 3.20\n", + "Object 23: Hit Rate = 0.50, Average Age = 1.00" + ] + }, + { + "cell_type": "markdown", + "id": "536e087f-3992-4192-b5da-62c496df2741", + "metadata": {}, + "source": [ + "Object 1: Hit Rate = 0.99, Average Age = 0.00\n", + "Object 2: Hit Rate = 0.97, Average Age = 0.65\n", + "Object 3: Hit Rate = 0.96, Average Age = 0.81\n", + "Object 4: Hit Rate = 0.91, Average Age = 1.90\n", + "Object 5: Hit Rate = 0.08, Average Age = 3.00\n", + "Object 6: Hit Rate = 0.12, Average Age = 3.50\n", + "Object 7: Hit Rate = 0.12, Average Age = 3.00\n", + "Object 15: Hit Rate = 0.33, Average Age = 4.00\n", + "Object 65: Hit Rate = 0.50, Average Age = 0.00" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "graphs", + "language": "python", + "name": "graphs" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/note.md b/note.md new file mode 100644 index 0000000..49af5f4 --- /dev/null +++ b/note.md @@ -0,0 +1,24 @@ +System Design +Client -> TTL Cache -> Database +Capacity C + +TTL increases on cache hit +Age of information / Age of the entry in the cache +Database has latest object, cache entry may be old (we don't know) + +Age of entry should have low age of information + +Update function from cache to refresh based on mu (refresh rate) + +Loss function based on TTL and age in cache called beta(i) + +Event based simulation + +lambda(i) is zipf distribution describing the rate the client requests the object "i" + +Inter arrival time of each object => exponential + +We need +Hit rate and the average age of the object based on TTL and + +C = n (example: 100)