From 9c0df18909c57917abcab35dafbf274bfa9f15d0 Mon Sep 17 00:00:00 2001 From: Engr-farrukh-khan Date: Fri, 4 Jul 2025 23:55:06 +0500 Subject: [PATCH 1/5] Initial commit - sentient-core framework --- sentient-core/app/main.py | 1 + sentient-core/app/ui/sidebar.py | 104 ++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/sentient-core/app/main.py b/sentient-core/app/main.py index a6c3e01..ed27149 100644 --- a/sentient-core/app/main.py +++ b/sentient-core/app/main.py @@ -2,6 +2,7 @@ import sys import os from dotenv import load_dotenv +from app.ui.sidebar import render_sidebar # Ensure the project root is in the Python path project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) diff --git a/sentient-core/app/ui/sidebar.py b/sentient-core/app/ui/sidebar.py index e69de29..77751bc 100644 --- a/sentient-core/app/ui/sidebar.py +++ b/sentient-core/app/ui/sidebar.py @@ -0,0 +1,104 @@ +# sentient-core/app/ui/sidebar.py + +import streamlit as st +from core.models import AppState, TaskStatus, LogEntry + +def render_sidebar(): + """Render the sidebar UI for the Multi-Agent RAG system.""" + with st.sidebar: + st.header("šŸ¤– Multi-Agent RAG System") + + # --- Workflow Mode --- + mode_options = ["intelligent", "multi_agent", "legacy"] + current_index = mode_options.index(st.session_state.workflow_mode) if st.session_state.workflow_mode in mode_options else 0 + + st.session_state.workflow_mode = st.selectbox( + "Workflow Mode", + options=mode_options, + index=current_index, + help="Select workflow: Intelligent (NLU), Multi-Agent RAG, or Legacy" + ) + + st.divider() + + # --- Display Options --- + st.subheader("šŸ“Š Display Options") + st.session_state.show_step_details = st.toggle( + "Show Step Details", + value=st.session_state.show_step_details, + help="Show step-by-step reasoning and execution logs" + ) + + st.session_state.show_raw_output = st.toggle( + "Show Raw Output", + value=st.session_state.show_raw_output, + help="Show raw agent outputs alongside friendly responses" + ) + + st.divider() + + # --- Progress --- + st.subheader("šŸ”„ Workflow Progress") + if st.session_state.app_state.tasks: + completed = sum(1 for t in st.session_state.app_state.tasks if t.status == TaskStatus.COMPLETED) + total = len(st.session_state.app_state.tasks) + st.progress(completed / total, text=f"Tasks: {completed}/{total}") + + if st.session_state.app_state.logs: + st.info(f"Current: {st.session_state.app_state.logs[-1].source}") + + st.divider() + + # --- Logs --- + st.subheader("šŸ“ Action Logs") + if st.session_state.app_state.logs: + with st.expander("View Logs", expanded=False): + for log in st.session_state.app_state.logs[-10:]: + st.text(f"[{log.source}] {log.message}") + else: + st.text("No logs yet") + + st.divider() + + # --- Session Controls --- + if st.button("šŸ”„ Reset Session", type="secondary"): + st.session_state.app_state = AppState() + st.rerun() + + st.header("🧰 Control Panel") + if st.button("Clear Session State", key="clear_session"): + st.session_state.app_state = AppState() + st.session_state.research_mode = None + st.session_state.show_raw_searches = False + st.session_state.search_streams = [] + st.rerun() + + # --- Task List --- + st.header("šŸ“Œ Tasks") + if not st.session_state.app_state.tasks: + st.info("No tasks created yet.") + else: + for i, task in enumerate(st.session_state.app_state.tasks): + col1, col2 = st.columns([4, 1]) + with col1: + icon = { + TaskStatus.COMPLETED: "āœ…", + TaskStatus.IN_PROGRESS: "ā³", + TaskStatus.PENDING: "šŸ“" + }.get(task.status, "ā”") + st.write(f"{icon} ({task.agent}) {task.description}") + with col2: + if task.status == TaskStatus.PENDING: + if st.button("Run", key=f"run_task_{task.id}_{i}"): + st.session_state.app_state.task_to_run_id = task.id + st.rerun() + + # --- Developer Logs --- + st.header("šŸ’» Developer Logs") + if st.toggle("Show Developer Logs", value=False, key="dev_logs_toggle"): + if st.session_state.app_state.logs: + log_container = st.container(height=300) + for log in reversed(st.session_state.app_state.logs): + log_container.info(f"[{log.source}] {log.message}") + else: + st.info("No log entries yet.") From 67a9697d34f87c4d7890fd167c38bd3783136f3a Mon Sep 17 00:00:00 2001 From: Engr-farrukh-khan Date: Sat, 5 Jul 2025 15:31:06 +0500 Subject: [PATCH 2/5] testing test_agent_execution.py --- agent_execution_results.json | 86 ++++++++++++++++++ core/memory_vectors/chroma.sqlite3 | Bin 0 -> 163840 bytes memory_management.db | Bin 0 -> 24576 bytes .../app/__pycache__/__init__.cpython-313.pyc | Bin 142 -> 165 bytes .../core/__pycache__/__init__.cpython-313.pyc | Bin 143 -> 166 bytes .../core/__pycache__/models.cpython-313.pyc | Bin 7788 -> 7860 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 2265 -> 2288 bytes .../monitoring_agent.cpython-313.pyc | Bin 10635 -> 10658 bytes .../research_agent.cpython-313.pyc | Bin 26963 -> 26986 bytes .../ultra_orchestrator.cpython-313.pyc | Bin 10756 -> 10779 bytes sentient-core/core/agents/base_agent.py | 1 + sentient-core/core/graphs/research_graph.py | 3 + sentient-core/core/models.py | 1 + .../__pycache__/__init__.cpython-313.pyc | Bin 809 -> 832 bytes .../__pycache__/llm_service.cpython-313.pyc | Bin 20640 -> 20663 bytes sentient-core/test_agent_execution.py | 6 +- sentient-core/test_memory_store.py | 2 +- .../__pycache__/__init__.cpython-313.pyc | Bin 144 -> 167 bytes .../conftest.cpython-313-pytest-8.4.1.pyc | Bin 634 -> 657 bytes .../test_agents.cpython-313-pytest-8.4.1.pyc | Bin 147 -> 170 bytes ...orchestration.cpython-313-pytest-8.4.1.pyc | Bin 23183 -> 23211 bytes ...test_services.cpython-313-pytest-8.4.1.pyc | Bin 149 -> 172 bytes 22 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 agent_execution_results.json create mode 100644 core/memory_vectors/chroma.sqlite3 create mode 100644 memory_management.db diff --git a/agent_execution_results.json b/agent_execution_results.json new file mode 100644 index 0000000..39e09b5 --- /dev/null +++ b/agent_execution_results.json @@ -0,0 +1,86 @@ +{ + "total_tests": 9, + "status_counts": { + "PASS": 8, + "FAIL": 1 + }, + "detailed_results": [ + { + "test_name": "Research Agent: Initialization", + "status": "PASS", + "details": "Successfully initialized ResearchAgent with LLM service", + "data": null, + "timestamp": "2025-07-05T15:14:07.697792" + }, + { + "test_name": "Research Agent: Planning", + "status": "PASS", + "details": "Generated 5 research steps", + "data": { + "steps_count": 5, + "first_step": "" + }, + "timestamp": "2025-07-05T15:14:11.712175" + }, + { + "test_name": "Research Agent: Search Execution", + "status": "PASS", + "details": "Completed 1 research steps", + "data": { + "completed_steps": 1, + "first_result": "## Research Findings: Vietnamese Natural Language Processing (NLP) Libraries for Mobile Development\n" + }, + "timestamp": "2025-07-05T15:14:19.269345" + }, + { + "test_name": "Ultra Orchestrator: Initialization", + "status": "PASS", + "details": "Successfully initialized UltraOrchestrator", + "data": null, + "timestamp": "2025-07-05T15:14:19.578118" + }, + { + "test_name": "Ultra Orchestrator: Message Processing", + "status": "PASS", + "details": "Generated response: 361 characters", + "data": { + "response_length": 361, + "response_preview": "T\u00f4i c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n t\u1ea1o \u1ee9ng d\u1ee5ng h\u1ecdc ti\u1ebfng Vi\u1ec7t v\u1edbi ch\u1ee9c n\u0103ng nh\u1eadn d\u1ea1ng gi\u1ecdng n\u00f3i. \u0110\u1ec3 b\u1eaft \u0111\u1ea7u, b\u1ea1n c\u00f3 th\u1ec3 cho t\u00f4i bi\u1ebft \u1ee9ng d\u1ee5ng n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng ch..." + }, + "timestamp": "2025-07-05T15:14:20.516074" + }, + { + "test_name": "Workflow Graph: Import", + "status": "PASS", + "details": "Successfully imported research workflow graph", + "data": null, + "timestamp": "2025-07-05T15:14:21.030713" + }, + { + "test_name": "Workflow Graph: Execution", + "status": "FAIL", + "details": "Workflow execution failed or returned invalid result", + "data": null, + "timestamp": "2025-07-05T15:15:46.530313" + }, + { + "test_name": "E2E Workflow: Orchestration", + "status": "PASS", + "details": "Orchestrator successfully processed research request", + "data": null, + "timestamp": "2025-07-05T15:15:47.651986" + }, + { + "test_name": "E2E Workflow: Complete Research", + "status": "PASS", + "details": "Complete research workflow executed successfully", + "data": { + "steps_planned": 5, + "steps_completed": 1, + "report_length": 3646 + }, + "timestamp": "2025-07-05T15:16:05.478564" + } + ], + "timestamp": "2025-07-05T15:16:05.481230" +} \ No newline at end of file diff --git a/core/memory_vectors/chroma.sqlite3 b/core/memory_vectors/chroma.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..ad7072e05c3a1b32b36aa18159bae9a99dc94863 GIT binary patch literal 163840 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 delta 287 zcmdmD`^JXvGcPX}0}x0&OwV{BypeAz3$u=k)#MEJxC>Ol3uY(*R~oH4AdKsHc}9V8aRrNj`!9n4|LSi}><3zy@B%kc%t0hOTv zuzGM#jmLYow!qKuqHKh&c&# diff --git a/sentient-core/core/agents/__pycache__/research_agent.cpython-313.pyc b/sentient-core/core/agents/__pycache__/research_agent.cpython-313.pyc index 7ebfc5eed63c418c137a1a5d46f4c46d6ff78bc3..002bcf7011a39c8eabf40aae84f70f2c4c5f5c91 100644 GIT binary patch delta 57 zcmcb7iSgAXM!wIyyj%=G@bP&@Ms?IizMV``LGD&DsTIkoMah}PsWHW=c_o=ZoSa{j Ky7?4SXBq%_9Ts5# delta 34 ocmaELiShC!M!wIyyj%=GVEH3Gqak7=-%ciGYZt4{51BgC0NMx)8~^|S diff --git a/sentient-core/core/agents/__pycache__/ultra_orchestrator.cpython-313.pyc b/sentient-core/core/agents/__pycache__/ultra_orchestrator.cpython-313.pyc index 77b02fdbb447145549924ae6597909576692e6b9..b264d84f3de9b70aa685b8785d0a6ad4b40625df 100644 GIT binary patch delta 43 xcmZn(nH|FYnU|M~0SG=m&)CSlh?zGm-6|%vB004vIkPx*@&;zH%{!UB)c`%H4&nd+ delta 29 jcmbOo(h|b`nU|M~0SF`>rf=k4#LR5(Vzv1=bBG!Med!2d diff --git a/sentient-core/core/agents/base_agent.py b/sentient-core/core/agents/base_agent.py index 466b629..bbec2bf 100644 --- a/sentient-core/core/agents/base_agent.py +++ b/sentient-core/core/agents/base_agent.py @@ -46,6 +46,7 @@ class ActivityType(str, Enum): RESOURCE_ACCESS = "resource_access" DECISION_MADE = "decision_made" CUSTOM = "custom" + PROCESSING = "processing" class BaseAgent(ABC): """Base class for all agents in the multi-agent system diff --git a/sentient-core/core/graphs/research_graph.py b/sentient-core/core/graphs/research_graph.py index 745896e..91b4fa4 100644 --- a/sentient-core/core/graphs/research_graph.py +++ b/sentient-core/core/graphs/research_graph.py @@ -60,3 +60,6 @@ def create_research_graph(llm_service: EnhancedLLMService): # Compile and return the graph return workflow.compile() +# Create a default research_app instance using EnhancedLLMService +llm_service = EnhancedLLMService() +research_app = create_research_graph(llm_service) diff --git a/sentient-core/core/models.py b/sentient-core/core/models.py index 44ee845..4da5339 100644 --- a/sentient-core/core/models.py +++ b/sentient-core/core/models.py @@ -103,6 +103,7 @@ class LogEntry(BaseModel): class ResearchStep(BaseModel): """Represents a single step in a research process.""" query: str + description: Optional[str] = "" # āœ… Add this line status: str = "pending" result: Optional[str] = None sources: List[str] = Field(default_factory=list) diff --git a/sentient-core/core/services/__pycache__/__init__.cpython-313.pyc b/sentient-core/core/services/__pycache__/__init__.cpython-313.pyc index 5bd9110d7899deca7c46793c350a79fdd1e472b2..d26586c8ac470e319a4afbd79cdf6251e5c2dc58 100644 GIT binary patch delta 53 zcmZ31aF{ 1: response_content = result.messages[-1].content @@ -221,7 +221,7 @@ async def test_workflow_graph_execution(self): ) # Execute the workflow - result = research_app.invoke(initial_state) + result = await research_app.ainvoke(initial_state) if result and hasattr(result, 'final_report') and result.final_report: self.log_result( @@ -287,7 +287,7 @@ async def test_end_to_end_research_workflow(self): ) # Step 1: Orchestrator processes the request - orchestrated_result = await orchestrator.process_message(app_state) + orchestrated_result = await orchestrator.invoke(app_state) if orchestrated_result: self.log_result( diff --git a/sentient-core/test_memory_store.py b/sentient-core/test_memory_store.py index d303a9c..2442a3c 100644 --- a/sentient-core/test_memory_store.py +++ b/sentient-core/test_memory_store.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +sentient-core/#!/usr/bin/env python3 import asyncio import requests diff --git a/sentient-core/tests/__pycache__/__init__.cpython-313.pyc b/sentient-core/tests/__pycache__/__init__.cpython-313.pyc index b96d4ecd7680aa622277520837d08a636e513e60..af40c07a0f48693f942bda383b7c7b2ecf81b90c 100644 GIT binary patch delta 39 tcmbQhxSWyuGcPX}0}yOV diff --git a/sentient-core/tests/__pycache__/conftest.cpython-313-pytest-8.4.1.pyc b/sentient-core/tests/__pycache__/conftest.cpython-313-pytest-8.4.1.pyc index 7898d1013840fcd06c0ccb92fd0b92dd224eddf8..e1dd9da9a1d1efaea5713999807be12f6735c1cd 100644 GIT binary patch delta 42 xcmeyxGLe=0GcPX}0}yb8`1m{{BWNQp8?#inyH!kTMRICUa%ORAOmS*nNhS~{=NF}J Y7Gqu%#-P_Amxrotca!iyl0H637*Z=?k delta 49 zcmZ3zm9c*-BkyNkUM>b8(6vd;@Y~4C#?0*CVl`QTS!}a2b59tf+~li~ix}M}S40^D E08G3M-~a#s diff --git a/sentient-core/tests/__pycache__/test_services.cpython-313-pytest-8.4.1.pyc b/sentient-core/tests/__pycache__/test_services.cpython-313-pytest-8.4.1.pyc index ca8ef025a7b44ae1737023211f9c8c1856b705a0..fc8dfae5279327f0da3260b2a94eb16b12043727 100644 GIT binary patch delta 39 tcmbQrxQ3DYGcPX}0}y Date: Sat, 5 Jul 2025 15:58:56 +0500 Subject: [PATCH 3/5] testing_working_agents.py --- sentient-core/test_working_agents.py | 343 +++++++++------------------ working_agent_results.json | 91 +++++++ 2 files changed, 207 insertions(+), 227 deletions(-) create mode 100644 working_agent_results.json diff --git a/sentient-core/test_working_agents.py b/sentient-core/test_working_agents.py index 13bcfd5..ea86a97 100644 --- a/sentient-core/test_working_agents.py +++ b/sentient-core/test_working_agents.py @@ -6,24 +6,21 @@ import asyncio import json from datetime import datetime -from typing import Dict, Any, List +from typing import Dict -# Import the actual agents and models from core.agents.ultra_orchestrator import UltraOrchestrator from core.agents.research_agent import ResearchAgent -from core.models import AppState, Message, ResearchState, ResearchStep, LogEntry +from core.models import AppState, Message, ResearchState from core.services.llm_service import EnhancedLLMService from core.graphs.research_graph import research_app + class WorkingAgentTester: - """Tests actual agent functionality with proper async handling and interfaces.""" - def __init__(self): self.results = [] self.llm_service = EnhancedLLMService() - + def log_result(self, test_name: str, status: str, message: str, details: Dict = None): - """Log test results with timestamp.""" result = { "test_name": test_name, "status": status, @@ -32,47 +29,33 @@ def log_result(self, test_name: str, status: str, message: str, details: Dict = "timestamp": datetime.now().isoformat() } self.results.append(result) - - # Console output with emoji emoji = "āœ…" if status == "PASS" else "āš ļø" if status == "PARTIAL" else "āŒ" print(f"{emoji} {test_name}: {message}") if details: print(f" Details: {details}") - - def test_ultra_orchestrator_basic(self): - """Test UltraOrchestrator basic functionality.""" + + async def test_ultra_orchestrator_basic(self): print("\n=== Testing UltraOrchestrator Basic Functionality ===") - try: - # Initialize orchestrator orchestrator = UltraOrchestrator(self.llm_service) - self.log_result( - "UltraOrchestrator: Initialization", - "PASS", - "Successfully initialized UltraOrchestrator" - ) - - # Test with a simple app state + self.log_result("UltraOrchestrator: Initialization", "PASS", "Successfully initialized UltraOrchestrator") + app_state = AppState( - messages=[ - Message(sender="user", content="I want to build a simple todo app with user authentication") - ], - tasks=[], - logs=[] + messages=[Message(sender="user", content="I want to build a simple todo app with user authentication")], + tasks=[], logs=[] ) - - # Test invoke method - result = orchestrator.invoke(app_state) - - if isinstance(result, dict) and "messages" in result: + + result = await orchestrator.invoke(app_state) + + if isinstance(result, AppState): self.log_result( "UltraOrchestrator: Invoke Method", "PASS", "Successfully processed user request", { - "messages_count": len(result.get("messages", [])), - "tasks_count": len(result.get("tasks", [])), - "next_action": result.get("next_action") + "messages_count": len(result.messages), + "tasks_count": len(result.tasks), + "next_action": getattr(result, "next_action", None) } ) else: @@ -81,147 +64,61 @@ def test_ultra_orchestrator_basic(self): "FAIL", f"Unexpected result format: {type(result)}" ) - + except Exception as e: - self.log_result( - "UltraOrchestrator: Basic Test", - "FAIL", - f"Test failed with error: {str(e)}" - ) - + self.log_result("UltraOrchestrator: Basic Test", "FAIL", f"Test failed with error: {str(e)}") + async def test_research_agent_basic(self): - """Test ResearchAgent basic functionality.""" print("\n=== Testing ResearchAgent Basic Functionality ===") - try: - # Initialize research agent research_agent = ResearchAgent(self.llm_service) - self.log_result( - "ResearchAgent: Initialization", - "PASS", - "Successfully initialized ResearchAgent" - ) - - # Test planning functionality + self.log_result("ResearchAgent: Initialization", "PASS", "Successfully initialized ResearchAgent") + research_state = ResearchState( original_query="Best practices for React authentication", - steps=[], - logs=[], - final_report=None + steps=[], logs=[], final_report=None ) - - # Test plan_steps method + planned_state = await research_agent.plan_steps(research_state) - - if planned_state.steps and len(planned_state.steps) > 0: + + if planned_state.steps: self.log_result( "ResearchAgent: Planning", "PASS", f"Successfully planned {len(planned_state.steps)} research steps", { "steps_count": len(planned_state.steps), - "first_step_query": planned_state.steps[0].query if planned_state.steps else "None" + "first_step_query": planned_state.steps[0].query } ) else: - self.log_result( - "ResearchAgent: Planning", - "FAIL", - "No research steps were planned" - ) - - except Exception as e: - self.log_result( - "ResearchAgent: Basic Test", - "FAIL", - f"Test failed with error: {str(e)}" - ) - - async def test_research_workflow_async(self): - """Test the research workflow graph with proper async handling.""" - print("\n=== Testing Research Workflow (Async) ===") - - try: - # Test workflow import - self.log_result( - "Research Workflow: Import", - "PASS", - "Successfully imported research workflow" - ) - - # Create initial state - initial_state = ResearchState( - original_query="Modern JavaScript frameworks comparison 2024", - steps=[], - logs=[], - final_report=None - ) - - # Test workflow execution with async - result = await research_app.ainvoke(initial_state) - - if result and hasattr(result, 'steps'): - completed_steps = [step for step in result.steps if step.status == "completed"] - self.log_result( - "Research Workflow: Execution", - "PASS" if completed_steps else "PARTIAL", - f"Workflow executed with {len(completed_steps)} completed steps", - { - "total_steps": len(result.steps), - "completed_steps": len(completed_steps), - "has_final_report": bool(result.final_report) - } - ) - else: - self.log_result( - "Research Workflow: Execution", - "FAIL", - "Workflow execution failed or returned invalid result" - ) - + self.log_result("ResearchAgent: Planning", "FAIL", "No research steps were planned") + except Exception as e: - self.log_result( - "Research Workflow: Async Test", - "FAIL", - f"Test failed with error: {str(e)}" - ) - + self.log_result("ResearchAgent: Basic Test", "FAIL", f"Test failed with error: {str(e)}") + async def test_conversation_flow(self): - """Test a realistic conversation flow between user and orchestrator.""" print("\n=== Testing Realistic Conversation Flow ===") - try: orchestrator = UltraOrchestrator(self.llm_service) - - # Simulate a multi-turn conversation + conversations = [ "Hi, I need help with a project", "I want to build a web application for managing personal finances", "It should have user accounts, expense tracking, budget planning, and financial reports" ] - + app_state = AppState(messages=[], tasks=[], logs=[]) - + for i, user_input in enumerate(conversations): - # Add user message app_state.messages.append(Message(sender="user", content=user_input)) - - # Get orchestrator response - result_dict = await orchestrator.invoke(app_state) - - # Update app_state from result - app_state.messages = [Message(**msg) for msg in result_dict.get("messages", [])] - app_state.tasks = result_dict.get("tasks", []) - app_state.logs = result_dict.get("logs", []) - app_state.next_action = result_dict.get("next_action") - - print(f"Turn {i+1}: User: {user_input}") + app_state = await orchestrator.invoke(app_state) + + print(f"Turn {i + 1}: User: {user_input}") if app_state.messages: - last_response = app_state.messages[-1].content - print(f"Turn {i+1}: Assistant: {last_response[:100]}...") - - # Check final state - if app_state.next_action == "create_plan" and app_state.tasks: + print(f"Turn {i + 1}: Assistant: {app_state.messages[-1].content[:100]}...") + + if getattr(app_state, "next_action", None) == "create_plan" and app_state.tasks: self.log_result( "Conversation Flow: Multi-turn", "PASS", @@ -238,115 +135,110 @@ async def test_conversation_flow(self): "PARTIAL", f"Conversation completed but didn't reach plan creation. Final action: {app_state.next_action}" ) - + except Exception as e: - self.log_result( - "Conversation Flow: Multi-turn", - "FAIL", - f"Test failed with error: {str(e)}" - ) - + self.log_result("Conversation Flow: Multi-turn", "FAIL", f"Test failed with error: {str(e)}") + async def test_end_to_end_research(self): - """Test complete research process from planning to synthesis.""" print("\n=== Testing End-to-End Research Process ===") - try: research_agent = ResearchAgent(self.llm_service) - - # Step 1: Plan research + initial_state = ResearchState( original_query="Best database choices for a Node.js e-commerce application", - steps=[], - logs=[], - final_report=None + steps=[], logs=[], final_report=None ) - + planned_state = await research_agent.plan_steps(initial_state) - if not planned_state.steps: + self.log_result("E2E Research: Planning", "FAIL", "No research steps were planned") + return + + executed_state = await research_agent.execute_search(planned_state) + completed_steps = [step for step in executed_state.steps if step.status == "completed"] + + if completed_steps: self.log_result( - "E2E Research: Planning", - "FAIL", - "No research steps were planned" + "E2E Research: Execution", + "PASS", + "Successfully executed search step", + { + "completed_steps": len(completed_steps), + "result_length": len(completed_steps[0].result) if completed_steps[0].result else 0 + } ) - return - - # Step 2: Execute one search step (to avoid long execution) - if planned_state.steps: - executed_state = await research_agent.execute_search(planned_state) - - completed_steps = [step for step in executed_state.steps if step.status == "completed"] - if completed_steps: + + final_state = await research_agent.synthesize_report(executed_state) + + if final_state.final_report: self.log_result( - "E2E Research: Execution", + "E2E Research: Synthesis", "PASS", - f"Successfully executed search step", + "Successfully synthesized final report", { - "completed_steps": len(completed_steps), - "result_length": len(completed_steps[0].result) if completed_steps[0].result else 0 + "report_length": len(final_state.final_report), + "suggestions_count": len(final_state.continual_search_suggestions or []) } ) - - # Step 3: Synthesize report - final_state = await research_agent.synthesize_report(executed_state) - - if final_state.final_report: - self.log_result( - "E2E Research: Synthesis", - "PASS", - f"Successfully synthesized final report", - { - "report_length": len(final_state.final_report), - "suggestions_count": len(final_state.continual_search_suggestions or []) - } - ) - else: - self.log_result( - "E2E Research: Synthesis", - "FAIL", - "Failed to synthesize final report" - ) else: - self.log_result( - "E2E Research: Execution", - "FAIL", - "No search steps were completed" - ) - + self.log_result("E2E Research: Synthesis", "FAIL", "Failed to synthesize final report") + else: + self.log_result("E2E Research: Execution", "FAIL", "No search steps were completed") + except Exception as e: - self.log_result( - "E2E Research: Complete Process", - "FAIL", - f"Test failed with error: {str(e)}" + self.log_result("E2E Research: Complete Process", "FAIL", f"Test failed with error: {str(e)}") + + async def test_research_workflow_async(self): + print("\n=== Testing Research Workflow (Async) ===") + try: + self.log_result("Research Workflow: Import", "PASS", "Successfully imported research workflow") + + initial_state = ResearchState( + original_query="Modern JavaScript frameworks comparison 2024", + steps=[], logs=[], final_report=None ) - + + result = await research_app.ainvoke(initial_state) + + if result and hasattr(result, "steps"): + completed_steps = [step for step in result.steps if step.status == "completed"] + self.log_result( + "Research Workflow: Execution", + "PASS" if completed_steps else "PARTIAL", + f"Workflow executed with {len(completed_steps)} completed steps", + { + "total_steps": len(result.steps), + "completed_steps": len(completed_steps), + "has_final_report": bool(result.final_report) + } + ) + else: + self.log_result("Research Workflow: Execution", "FAIL", "Workflow execution returned invalid result") + + except Exception as e: + self.log_result("Research Workflow: Async Test", "FAIL", f"Test failed with error: {str(e)}") + async def run_all_tests(self): - """Run all tests and generate summary.""" print("šŸš€ Starting Working Agent Tests...\n") - - # Run synchronous tests - self.test_ultra_orchestrator_basic() - - # Run async tests + + await self.test_ultra_orchestrator_basic() await self.test_research_agent_basic() await self.test_conversation_flow() await self.test_end_to_end_research() await self.test_research_workflow_async() - - # Generate summary + total_tests = len(self.results) passed_tests = len([r for r in self.results if r["status"] == "PASS"]) partial_tests = len([r for r in self.results if r["status"] == "PARTIAL"]) failed_tests = len([r for r in self.results if r["status"] == "FAIL"]) - - print(f"\nšŸ“Š Test Summary:") + + print("\nšŸ“Š Test Summary:") print(f" Total Tests: {total_tests}") print(f" āœ… Passed: {passed_tests}") print(f" āš ļø Partial: {partial_tests}") print(f" āŒ Failed: {failed_tests}") - print(f" Success Rate: {(passed_tests/total_tests)*100:.1f}%") - - # Save detailed results + print(f" Success Rate: {(passed_tests / total_tests) * 100:.1f}%") + with open("working_agent_results.json", "w") as f: json.dump({ "summary": { @@ -354,17 +246,14 @@ async def run_all_tests(self): "passed": passed_tests, "partial": partial_tests, "failed": failed_tests, - "success_rate": (passed_tests/total_tests)*100 + "success_rate": (passed_tests / total_tests) * 100 }, "detailed_results": self.results }, f, indent=2) - - print(f"\nšŸ’¾ Detailed results saved to: working_agent_results.json") - print(f"\nšŸŽ‰ Working agent testing completed!") + + print("\nšŸ’¾ Detailed results saved to: working_agent_results.json") + print("šŸŽ‰ Working agent testing completed!") + if __name__ == "__main__": - async def main(): - tester = WorkingAgentTester() - await tester.run_all_tests() - - asyncio.run(main()) \ No newline at end of file + asyncio.run(WorkingAgentTester().run_all_tests()) diff --git a/working_agent_results.json b/working_agent_results.json new file mode 100644 index 0000000..8dd8fce --- /dev/null +++ b/working_agent_results.json @@ -0,0 +1,91 @@ +{ + "summary": { + "total_tests": 9, + "passed": 8, + "partial": 0, + "failed": 1, + "success_rate": 88.88888888888889 + }, + "detailed_results": [ + { + "test_name": "UltraOrchestrator: Initialization", + "status": "PASS", + "message": "Successfully initialized UltraOrchestrator", + "details": {}, + "timestamp": "2025-07-05T15:55:32.913421" + }, + { + "test_name": "UltraOrchestrator: Invoke Method", + "status": "PASS", + "message": "Successfully processed user request", + "details": { + "messages_count": 2, + "tasks_count": 0, + "next_action": "request_clarification" + }, + "timestamp": "2025-07-05T15:55:33.987867" + }, + { + "test_name": "ResearchAgent: Initialization", + "status": "PASS", + "message": "Successfully initialized ResearchAgent", + "details": {}, + "timestamp": "2025-07-05T15:55:33.990083" + }, + { + "test_name": "ResearchAgent: Planning", + "status": "PASS", + "message": "Successfully planned 5 research steps", + "details": { + "steps_count": 5, + "first_step_query": "top options and alternatives for React authentication" + }, + "timestamp": "2025-07-05T15:55:36.239433" + }, + { + "test_name": "Conversation Flow: Multi-turn", + "status": "PASS", + "message": "Successfully guided conversation to plan creation with 3 tasks", + "details": { + "conversation_turns": 3, + "final_action": "create_plan", + "tasks_created": 3 + }, + "timestamp": "2025-07-05T15:55:39.413733" + }, + { + "test_name": "E2E Research: Execution", + "status": "PASS", + "message": "Successfully executed search step", + "details": { + "completed_steps": 1, + "result_length": 5430 + }, + "timestamp": "2025-07-05T15:55:51.094008" + }, + { + "test_name": "E2E Research: Synthesis", + "status": "PASS", + "message": "Successfully synthesized final report", + "details": { + "report_length": 2797, + "suggestions_count": 4 + }, + "timestamp": "2025-07-05T15:55:57.026699" + }, + { + "test_name": "Research Workflow: Import", + "status": "PASS", + "message": "Successfully imported research workflow", + "details": {}, + "timestamp": "2025-07-05T15:55:57.027447" + }, + { + "test_name": "Research Workflow: Execution", + "status": "FAIL", + "message": "Workflow execution returned invalid result", + "details": {}, + "timestamp": "2025-07-05T15:56:54.787458" + } + ] +} \ No newline at end of file From 2ca61c599fd13d64296c4d040bc093be70c2cb07 Mon Sep 17 00:00:00 2001 From: Engr-farrukh-khan Date: Sat, 5 Jul 2025 17:33:32 +0500 Subject: [PATCH 4/5] testing_done of sentientcore --- core/memory_vectors/chroma.sqlite3 | Bin 163840 -> 172032 bytes .../data_level0.bin | Bin 0 -> 16760000 bytes .../header.bin | Bin 0 -> 100 bytes .../length.bin | Bin 0 -> 40000 bytes .../link_lists.bin | 0 memory_management.db | Bin 24576 -> 24576 bytes real_functionality_results.json | 106 ++++++++++++++++++ real_system_test_results.json | 101 +++++++++++++++++ requirements.txt | 16 +++ state_management.db | Bin 0 -> 36864 bytes system_test_results.json | 19 ++++ 11 files changed, 242 insertions(+) create mode 100644 core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/data_level0.bin create mode 100644 core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/header.bin create mode 100644 core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/length.bin create mode 100644 core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/link_lists.bin create mode 100644 real_functionality_results.json create mode 100644 real_system_test_results.json create mode 100644 requirements.txt create mode 100644 state_management.db create mode 100644 system_test_results.json diff --git a/core/memory_vectors/chroma.sqlite3 b/core/memory_vectors/chroma.sqlite3 index ad7072e05c3a1b32b36aa18159bae9a99dc94863..1985160c14d83ed572ec04a6e212f96c9792dfeb 100644 GIT binary patch delta 12825 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 diff --git a/core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/data_level0.bin b/core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/data_level0.bin new file mode 100644 index 0000000000000000000000000000000000000000..09cffb602cb74a6c7739455213fb6aecf2c31a6c GIT binary patch literal 16760000 zcmeFtfdBvi0Dz$VsTV1P3IhfV7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjm>oJ0000000P=rrgaii; z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=0qoF$000000FeJ{BP2L*;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4rqst1poj500#M64`Od2WWay{0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM h7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pG7fdI>~00961 literal 0 HcmV?d00001 diff --git a/core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/header.bin b/core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/header.bin new file mode 100644 index 0000000000000000000000000000000000000000..e85f4658a3abf704e4023ee132dd4208664aa979 GIT binary patch literal 100 tcmZQ%KmY-C1RKQaVT15nU^G4geRJ4fg;5 literal 0 HcmV?d00001 diff --git a/core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/length.bin b/core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/length.bin new file mode 100644 index 0000000000000000000000000000000000000000..aa4c7747457cf5b30cf509549c2acfb088632beb GIT binary patch literal 40000 zcmeI#Pfrs;7{~D+iSI)W#@mvjNPvVyELG3~8>&Q;P3ltqh+-veLA>($W#MVae?W>wRQ zznebh)zFM?sP49=Zu-1mTXAdMXR|Kvx?IwtrZp;gWJ6V-N0f+A^XPlJl_EENb&SY8 zrlw{0*F0|4=Sz;U=+=g#v^1r{W4c;b$KQoERJzvDuInS(b6ZQ#wC4W8$G&?0Zo75M ztx*hDZDdf~oDsdXe>zv>v9sXfybReW4?#0ei2U;o?@+Pdo2%u&ZRmhRW~_-cx= z;r>lO@4EVNW*oD0w77rAb7}j0$5%#_UV4sruH$W)uOIh(CVan2iZkl|Nw<|LRy;{B z%}B{DbV9tp8oyiS$$svi6APP|^|t4?X2ETHtR{_Ev0p17XT`kNJhGypJI;bAPtSlE z8}C@8v{dQ%b&I!L+jc$oIz00lb$lK83*dp0~~IOXVYTGM_Gb^Kh>yX)&( zsa|+|++|RHZ8~bty=yMJsaCpt;t^4Hy^3Au-O0D%&+~0M^ZW11w4dp3xqtpMkGu|p z5g+?L&iceP-S^5Zd&Oe)mc5d(Zf706;4$&OpZ2bw|9sDXr8DPQ=`3j5@Ud5Ykiooj zvudq5&;97Fo^}Ssj#fBtwtU2Xc6@isoXL@AnRlrP?-FC)GbUXh^;zsuk+Usl-N}1~ z?QQQGRj<+Uz1bK3{2WLJAIA@sf4cNK_WhSrd#|G8g8%{uAbSO0(HL*;Mccf?Vt>-D$kcg2T6k!VK%0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**{ttm4+khLY literal 0 HcmV?d00001 diff --git a/core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/link_lists.bin b/core/memory_vectors/fbed693c-d4d2-41e8-b64a-85e82277d750/link_lists.bin new file mode 100644 index 0000000..e69de29 diff --git a/memory_management.db b/memory_management.db index 28325974af39527335bca35bea49897d608d2a34..d240631270f5b54efec9adab1a330205564a6469 100644 GIT binary patch literal 24576 zcmeI)&u`jh7zc10Cs5i_SL!s>!?ssk8cQLv!Qh1TFt)NN8Y3GcQggCi>^H)U@j1Ysta(`@D}|e{3HfWAe?{ zbthot$n|iy;=vo!B&Kh<9#iOAGOH-!_tU*t9-{%XO&Y{| zt}pE7JaWl?&Ks4cl+1plh!3W_=+Ytc;@Q_0vPVHn5=YyWCmUia9QV^}0d05ZMB=Fv zXQ^A&PwTZg4zh8T%uS){&~$9ls@-pqubO*bR-1?9i`wDlLg;viQCwrcMH&b7`eKmf z_5+@CoNjekj|J4G0gd7ovjnu`uV|V(ql8}#b#kxvdG(;)BHEU^n2cH$^L^8D2Yg(6 zjaF^9)|~cO5`TU!R}5ir!iOGRGf_YcO8GdE%c|VkNxsdf zbF}ppJ)-J0?6Tw#a^DryLMg8rd9~Ei3YCIZ(Y38@wXEwqt6IwH=x%~b?LJ9GQrnDa z)H<>?-D0Kkj=p3!%cLGT!7&NT-P6b>9N=MD$c&aAOG2iw4{0Z;|HUZ_&}%S0JxMwX2UOZb@>1U3r>JmjA^L6VJ&0SL(B0st<;7PJ5W diff --git a/real_functionality_results.json b/real_functionality_results.json new file mode 100644 index 0000000..928f9fb --- /dev/null +++ b/real_functionality_results.json @@ -0,0 +1,106 @@ +{ + "summary": { + "total_tests": 8, + "passed": 5, + "partial": 0, + "failed": 3, + "success_rate": 62.5 + }, + "detailed_results": [ + { + "test_name": "LLM Service: API Keys", + "status": "PASS", + "message": "Found 2 API key(s)", + "details": { + "available_keys": [ + "GROQ_API_KEY", + "GEMINI_API_KEY" + ] + }, + "timestamp": "2025-07-05T17:13:06.458192" + }, + { + "test_name": "LLM Service: Initialization", + "status": "PASS", + "message": "Successfully initialized with 2 provider(s)", + "details": { + "providers": [ + "groq", + "gemini" + ], + "fallback_chain": [ + "groq", + "gemini" + ] + }, + "timestamp": "2025-07-05T17:13:06.792388" + }, + { + "test_name": "LLM Call: Simple Test", + "status": "PASS", + "message": "Successfully received response from LLM", + "details": { + "response_length": 26, + "response_preview": "Two plus two equals four.\n" + }, + "timestamp": "2025-07-05T17:13:08.811584" + }, + { + "test_name": "Orchestrator: Real Conversation", + "status": "FAIL", + "message": "Unexpected result format: ", + "details": {}, + "timestamp": "2025-07-05T17:13:09.507284" + }, + { + "test_name": "Research Agent: Planning", + "status": "PASS", + "message": "Successfully planned 5 research steps", + "details": { + "steps_count": 5, + "first_step": "top options and alternatives for Best practices for React state management in 2024" + }, + "timestamp": "2025-07-05T17:13:11.655035" + }, + { + "test_name": "Research Agent: Execution", + "status": "PASS", + "message": "Successfully executed research step", + "details": { + "completed_steps": 1, + "result_preview": "## Research Findings: Best Practices for React State Management in 2024\n\n**Introduction:**\n\nReact state management remains a crucial aspect of building scalable and maintainable applications. Choosin..." + }, + "timestamp": "2025-07-05T17:13:19.133059" + }, + { + "test_name": "Research Workflow: Real Execution", + "status": "FAIL", + "message": "Workflow execution failed or returned invalid result", + "details": {}, + "timestamp": "2025-07-05T17:14:17.397990" + }, + { + "test_name": "Multi-Turn: Conversation", + "status": "FAIL", + "message": "Multi-turn conversation failed: 1 validation error for EnhancedTask\nagent_type\n Input should be 'ultra_orchestrator', 'monitoring_agent', 'research_agent', 'architect_planner', 'frontend_developer', 'backend_developer', 'coding_agent' or 'specialized_agent' [type=enum, input_value='integration_specialist', input_type=str]\n For further information visit https://errors.pydantic.dev/2.11/v/enum", + "details": {}, + "timestamp": "2025-07-05T17:14:20.674654" + } + ], + "llm_service_stats": { + "usage_by_provider": { + "gemini": 2, + "groq": 6 + }, + "errors_by_provider": { + "groq_general_error": 2 + }, + "average_response_times": { + "gemini": 4.518127083778381, + "groq": 1.0166371663411458 + }, + "total_requests": 8, + "total_errors": 2, + "recent_requests_count": 10 + } +} \ No newline at end of file diff --git a/real_system_test_results.json b/real_system_test_results.json new file mode 100644 index 0000000..821ea39 --- /dev/null +++ b/real_system_test_results.json @@ -0,0 +1,101 @@ +{ + "total_tests": 13, + "status_counts": { + "PASS": 3, + "FAIL": 10 + }, + "detailed_results": [ + { + "test_name": "Direct Import: UltraOrchestrator", + "status": "PASS", + "details": "Successfully imported UltraOrchestrator class", + "data": null, + "timestamp": "2025-07-05T17:12:10.345319" + }, + { + "test_name": "Direct Import: ResearchAgent", + "status": "PASS", + "details": "Successfully imported ResearchAgent class", + "data": null, + "timestamp": "2025-07-05T17:12:10.345741" + }, + { + "test_name": "Direct Import: ResearchWorkflow", + "status": "PASS", + "details": "Successfully imported research workflow graph", + "data": null, + "timestamp": "2025-07-05T17:12:11.040898" + }, + { + "test_name": "Conversation: Project Planning Request", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/chat/message (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:15.178344" + }, + { + "test_name": "Conversation: Technical Research Request", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/chat/message (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:19.302833" + }, + { + "test_name": "Conversation: Architecture Question", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/chat/message (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:23.403209" + }, + { + "test_name": "Agent: List Available Agents", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/agents (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:27.469640" + }, + { + "test_name": "Agent: Research Agent", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/agents/research (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:31.530102" + }, + { + "test_name": "Agent: Architect Agent", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/agents/architect (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:35.638285" + }, + { + "test_name": "Workflow: List Available Workflows", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/workflows (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:39.769384" + }, + { + "test_name": "Workflow: Research Workflow", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/workflows/research (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:43.864796" + }, + { + "test_name": "Workflow: Design Workflow", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/workflows/design (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:48.007802" + }, + { + "test_name": "System Integration: Full Workflow", + "status": "FAIL", + "details": "Exception: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/chat/message (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "data": null, + "timestamp": "2025-07-05T17:12:52.090623" + } + ], + "timestamp": "2025-07-05T17:12:52.103567" +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1836199 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,16 @@ +fastapi +uvicorn[standard] +pydantic +python-dotenv +langchain +langgraph +groq +google-generativeai +pyautogen +chromadb +sentence-transformers +tavily-python +exa-py +duckduckgo-search +numpy +faiss-cpu diff --git a/state_management.db b/state_management.db new file mode 100644 index 0000000000000000000000000000000000000000..1db3ae239c02c6c729e817542771ab4854bf6c1b GIT binary patch literal 36864 zcmeI%%}>*C9LMoi#vUL%T+B|!dLWTtc*qW(Oq^H~!ax{ZBB!QyKd@nINBbM#86o}) z{wrSm6Fl(Gc(e~0j;$+G!)19l=~&xuOMkD=w@sHG?AIJAv?I@NTT-hii;Ai$uQg3k zlw3HM!nrp^%hBAM)ZUkjzd2>~dU}EU zKmY**{!ZZXS)ou~TT`!2rS-8T0%=KM+Mk4d((xQu216@~n{~Zv=$cV|Q`5Df&D!%B zEoJ(1MAK<%hW^3O_Uc)ndNfSW^|pZHkNFv=u&snO0YZ`Gm{Kx%Ee8ZVaVTx_mrc zC|4@#)qWiF@Zf@!Rrxznrxc6|yPt0CxVwSyd(Dv^UU&vlTqJ(!6_zcXvk)h0hO9Pd zS%Eae_7;A$hv#PGHb%7FPMH0_MXTrY<-^LTXj90|jg*yzFO{i6d1XcY`Xr8bpvwmq zb9Z7L*f=86+p4kSjC!z}WT0hVx^~z1lZ#g*mwI}(9p5|lMG$D={imk&E}!+)_4M-a z|NDKRq!-y2O$}##%_`Vlj67G?gah(5XzE`W5I_I{1Q0*~0R#|0009ILn0x`=|4)9#j1U0?5I_I{1Q0*~0R#|000G|r(*p<~ zfB*srAb: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "timestamp": "2025-07-05T17:20:15.585141" + } + }, + "frontend_tests": { + "health_check": { + "status": "FAIL", + "details": "HTTPConnectionPool(host='localhost', port=3001): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))", + "timestamp": "2025-07-05T17:20:19.699954" + } + }, + "memory_tests": {}, + "orchestrator_tests": {}, + "development_stage": {} +} \ No newline at end of file From 29e77d2fd77abf07f8aac063fe85f1d83b2b1b95 Mon Sep 17 00:00:00 2001 From: mbpfws <60363657+mbpfws@users.noreply.github.com> Date: Sat, 5 Jul 2025 22:16:56 +0700 Subject: [PATCH 5/5] feat: initialize core framework with interactive workflow models and orchestration tests --- project-doc/break-down-build.md | 167 ++++++++ sentient-core/core/agents/research_agent.py | 192 ++++++--- .../frontend/components/chat-interface.tsx | 133 +++++- .../components/research-progress-view.tsx | 405 ++++++++++++++++++ sentient-core/frontend/lib/api/index.ts | 1 + .../frontend/lib/api/research-service.ts | 155 +++++++ .../test_research_agent_integration.py | 215 ++++++++++ 7 files changed, 1197 insertions(+), 71 deletions(-) create mode 100644 project-doc/break-down-build.md create mode 100644 sentient-core/frontend/components/research-progress-view.tsx create mode 100644 sentient-core/frontend/lib/api/research-service.ts create mode 100644 sentient-core/test_research_agent_integration.py diff --git a/project-doc/break-down-build.md b/project-doc/break-down-build.md new file mode 100644 index 0000000..2aa90fc --- /dev/null +++ b/project-doc/break-down-build.md @@ -0,0 +1,167 @@ + +Each build stage will result in a tangible, end-to-end feature that you can test on your front-end. I will define the **Goal** for each build, the **Components to Build/Refactor**, and the specific **End-to-End Test** you can perform. + +--- + +### **Build 1: The Core Conversation & Orchestration Loop** + +This first build focuses on establishing the absolute core of the system: the `Ultra Orchestrator Agent` and its ability to manage a basic conversation within a stateful graph. + +* **Goal**: Create a persistent, stateful conversational agent that can handle user input, maintain conversation history, and respond. This validates the foundational `Orchestrator Graph` and state management. + +* **Components to Build/Refactor**: + 1. **Ultra Orchestrator Agent (Initial Version)**: + * Refactor your existing agent logic to act as the primary node in the graph. + * Implement basic **Conversation Management**: It should be able to receive input and use an LLM to generate a response. + 2. **LLM Integration (Single Model)**: + * Connect to one primary LLM API (e.g., **Groq API with Llama 3.1**) for fast, initial responses. We'll add fallbacks later. + 3. **Orchestrator Graph (Simple)**: + * Create the main `LangGraph` instance. + * Define a simple state object that includes `conversation_history` (a list of messages). + * The graph will have two nodes: `get_user_input` and `call_orchestrator`. It will simply loop, passing the growing history back to the orchestrator. + 4. **Short-Term Memory (Basic)**: + * The `conversation_history` in the graph's state *is* the initial short-term memory. It ensures the agent remembers the last thing said. + +* **End-to-End Test**: + * **Action**: On the front-end, send a series of simple messages to the system (e.g., "Hello, how are you?", "What is your purpose?"). + * **Expected Outcome**: + 1. The `Ultra Orchestrator Agent` responds to each message contextually. + 2. The agent remembers previous messages in the same session (e.g., if you ask "What was the first thing I said?", it should answer correctly). + 3. The front-end successfully displays the back-and-forth conversation. + +--- + +### **Build 2: Introducing the First Specialized Agent & Tool Use** + +Now we introduce the concept of delegation. The Orchestrator will learn to recognize a specific task (research) and delegate it to a specialized agent who can use an external tool. + +* **Goal**: Enable the Orchestrator to delegate a research task to a `Research Agent`, which uses an external search API to find information and return it to the main flow. + +* **Components to Build/Refactor**: + 1. **Ultra Orchestrator Agent (Upgraded)**: + * Add logic to its prompt/function-calling capabilities to recognize when a user's request requires external research (e.g., contains "what is," "find information about," etc.). + * This is the first implementation of "Autonomously determines which specialized agents... are required." + 2. **Research Agent (Initial Version)**: + * Create a new agent function that takes a research query as input. + 3. **External Search Service Integration**: + * Integrate a search tool like **Tavily** or **Exa**. + * The `Research Agent` will use this tool to execute the search. + 4. **Research Graph (Initial Version)**: + * Create a simple, dedicated graph for the research process: `receive_query` -> `call_search_tool` -> `summarize_results`. + 5. **Orchestrator Graph (Upgraded)**: + * Add a conditional edge. The graph will now decide: is this a simple chat message OR a research request? + * If it's a research request, the graph will invoke the `Research Graph`. The state will be passed and updated accordingly. + +* **End-to-End Test**: + * **Action**: Give the system a research-oriented prompt, like: **"I want a solution for my weak English. Can you research some popular language learning apps?"** + * **Expected Outcome**: + 1. The Orchestrator identifies this as a research task. + 2. It calls the `Research Agent`. + 3. The `Research Agent` uses Tavily/Exa to search for "popular language learning apps". + 4. The agent returns a summarized list of apps (e.g., Duolingo, Babbel, etc.) to the user. + 5. The conversation can then continue (e.g., User: "Tell me more about Duolingo."). + +--- + +### **Build 3: The Monitoring Agent & Verbose Front-End Feedback** + +Transparency is key. This build focuses on making the system's internal actions visible to the user, fulfilling a core objective. + +* **Goal**: Provide a real-time, verbose log of agent actions and state transitions to the front-end. + +* **Components to Build/Refactor**: + 1. **Monitoring Agent (as a State Logger)**: + * This "agent" won't be an LLM-powered entity initially. It will be a logging utility integrated into the graph state. + * Modify the main graph state object to include a `monitoring_log` (a list of strings). + 2. **Refactor All Agent Nodes**: + * Update every node in both the `Orchestrator Graph` and `Research Graph`. + * Before executing its logic, each node must append a message to the `monitoring_log` (e.g., "`[Orchestrator]`: Delegating to Research Agent."). + * After execution, it can log the result (e.g., "`[Research Agent]`: Found 5 articles. Summarizing now."). + 3. **Front-End Integration**: + * The front-end will need an endpoint to fetch or stream the contents of the `monitoring_log` from the current session's state. + +* **End-to-End Test**: + * **Action**: Repeat the test from **Build 2**: "Research popular language learning apps." + * **Expected Outcome**: + 1. The chat interface shows the final summarized answer. + 2. A separate panel or area on the front-end displays a running log in real-time: + * `[Orchestrator]: Identified research intent.` + * `[Orchestrator]: Invoking Research Graph.` + * `[Research Agent]: Received query: 'popular language learning apps'.` + * `[Research Agent]: Calling Tavily Search tool.` + * `[Research Agent]: Consolidating results.` + * `[Orchestrator]: Received summary from Research Agent. Formatting for user.` + +--- + +### **Build 4: Architect Planner & Foundational Long-Term Memory** + +Here we introduce the next step in the development lifecycle: planning. This also requires us to start building the persistent, multi-layered memory. + +* **Goal**: After research, have an `Architect Planner Agent` create a high-level plan (e.g., a PRD) and save it as an artifact in a structured, long-term memory system. + +* **Components to Build/Refactor**: + 1. **Architect Planner Agent (Initial Version)**: + * Create a new agent responsible for taking research findings and a user goal, and synthesizing them into a structured document (e.g., a Markdown file). + 2. **Project Architecture Graph (Initial Version)**: + * A new graph that takes research results as input and has nodes for `generate_prd` and `save_plan`. + 3. **Long-Term Memory (Layers 1 & 2)**: + * Create a directory structure for your knowledge base (e.g., `./memory/`). + * **Layer 1 (Knowledge Synthesis)**: The `Research Agent` will now save its detailed consolidated reports as `.md` files in `./memory/layer1_research_docs/`. + * **Layer 2 (Build Conversation)**: The `Architect Planner Agent` will save its generated PRD into `./memory/layer2_build_artifacts/`. + 4. **Orchestrator Graph (Upgraded)**: + * Add more complex conditional logic: `User Input` -> `Clarify/Research` -> `Propose Plan?` -> `Invoke Architect Graph`. + +* **End-to-End Test**: + * **Action**: Use the conversational flow from your example: + 1. User: "I want a solution for my weak English. I'm a software developer and struggle with documentation." + 2. Let the system perform research (from Build 2). + 3. The Orchestrator should then ask: "Based on this research, would you like me to create a development plan for a tool to help you?" + 4. User: "Yes." + * **Expected Outcome**: + 1. The `Monitoring Agent` shows the `Architect Planner Agent` is activated. + 2. The `Architect Planner Agent` generates a PRD document. + 3. The system notifies the user: "I have created a Product Requirements Document for your review." + 4. **Crucially**: You can verify that a `.md` file containing the PRD now exists in the `layer2_build_artifacts` directory, and the research report exists in the `layer1_research_docs` directory. The front-end should provide a link to download this artifact. + +--- + +### **Build 5: The Development Team & Sandboxed Code Execution** + +This is a major leap. We will now generate actual code based on the plan and run it in a secure environment. + +* **Goal**: Based on an approved plan, have the `Front-end`, `Back-end`, and `Coding` agents collaborate to produce a simple, runnable prototype within a sandboxed environment like E2B. + +* **Components to Build/Refactor**: + 1. **Developer Agents (FE/BE)**: Create agent functions that can break down a PRD from the `Architect` into specific, actionable coding tasks (e.g., "Create a Flask server with one endpoint `/api/suggest`"). + 2. **Coding Agent (Executor)**: This agent doesn't plan; it just takes a precise task (e.g., a block of code to write to a file) and executes it. + 3. **E2B Integration**: Set up the E2B SDK. The `Coding Agent` will use E2B to: + * Start a sandbox. + * Write files (e.g., `app.py`, `index.html`). + * Install dependencies (`pip install flask`). + * Run the application. + 4. **Build Execution Graph**: Create a new graph to manage the build process. It will take the PRD as input and orchestrate the `FE/BE Developer Agents`, who in turn use the `Coding Agent` as a tool. + 5. **Long-Term Memory (Layers 3 & 4)**: + * **Layer 3 (Codebase)**: The `Coding Agent` will save the generated code to `./memory/layer3_codebase/`. + * **Layer 4 (Dependencies)**: It will save `requirements.txt` to `./memory/layer4_dependencies/`. + +* **End-to-End Test**: + * **Action**: Continue from Build 4. After the PRD is generated, the user says: **"This plan looks good. Please build a simple prototype."** + * **Expected Outcome**: + 1. The `Monitoring Agent` shows the `Build Execution Graph` and developer agents being activated. + 2. It logs actions like: "Creating sandbox environment via E2B," "Writing `app.py`," "Installing Flask," "Starting server." + 3. The system returns a URL from E2B that lets the user see and interact with the live, rendered prototype (e.g., a simple Streamlit/Flask page). + 4. You can verify that the corresponding code and dependency files are saved in the LTM directories. + +--- + +### **Subsequent Builds (To be detailed after the first 5 are stable)** + +Once this core pipeline is functional, we can move on to the more advanced and nuanced features. + +* **Build 6: Full RAG and Memory Retrieval**: Upgrade the LTM from a simple file store to a fully indexed and vectorized knowledge base. Refactor agents to *retrieve* information (RAG) from memory before acting, enabling context from previous sessions. +* **Build 7: Advanced Orchestrator Capabilities**: Implement multi-LLM fallbacks (Groq -> Gemini), anti-exploitation policies, and multimodal (vision) input for the Orchestrator. +* **Build 8: Iterative Refinement & User Feedback Loop**: Implement the full back-and-forth interaction. A user should be able to say "Change the button color in the prototype to blue," and the system should be able to trace that back to the relevant agent and code file, make the change, and redeploy to E2B. +* **Build 9: Dynamic Agent & Graph Creation**: The final, most advanced step. The `Ultra Orchestrator` analyzes a problem so novel that it designs and instantiates a new, temporary agent and graph on the fly to solve it. + +This phased approach allows you to build and test incrementally, ensuring each layer of complexity is added to a stable foundation. I am ready to elaborate on any of these steps or begin with the technical specifications for **Build 1**. \ No newline at end of file diff --git a/sentient-core/core/agents/research_agent.py b/sentient-core/core/agents/research_agent.py index 8a64ace..08ad034 100644 --- a/sentient-core/core/agents/research_agent.py +++ b/sentient-core/core/agents/research_agent.py @@ -1,10 +1,16 @@ from core.models import EnhancedTask, AppState, TaskStatus, ResearchState, ResearchStep, LogEntry from core.services.llm_service import EnhancedLLMService from core.agents.base_agent import BaseAgent, AgentCapability, ActivityType +import os +import asyncio +import base64 +import time import json import re +from abc import ABC, abstractmethod from typing import Dict, List, Tuple, Optional from enum import Enum +from datetime import datetime class ResearchMode(Enum): """Research modes that determine the depth and approach of research.""" @@ -29,14 +35,22 @@ def __init__(self, llm_service: EnhancedLLMService, agent_id: str = "research_ag ) self.llm_service = llm_service - # Model selection based on research complexity + # Model selection based on research complexity with agentic capabilities self.models = { "planning": "compound-beta", # Best for planning and tool use - "search": "compound-mini-beta", # Efficient for search tasks + "search": "compound-beta", # Full-featured for search with tool access + "search_efficient": "compound-mini-beta", # Efficient for simpler search tasks "synthesis": "compound-beta", # Best for complex synthesis "reasoning": "compound-beta" # Best for deep reasoning } - + + # Track search progress for frontend visualization + self.current_searches = {} + self.search_history = [] + + # Initialize memory persistence flag + self.persist_to_memory = True + def can_handle_task(self, task: EnhancedTask) -> bool: """ Determines if this agent can handle the given task. @@ -255,78 +269,116 @@ async def execute_search(self, state: ResearchState, stream_callback=None) -> Re 2. Look for multiple sources and perspectives 3. Include specific facts, figures, and data points 4. Note any conflicting information or debates -5. Provide source context where relevant - -Format your response as a detailed research finding with clear structure. -""" + + # Generate a unique ID for tracking this search + search_id = f"{pending_step.query[:10].replace(' ', '_')}_{len(self.search_history) + 1}" + self.current_searches[search_id] = { + "status": "in_progress", + "query": pending_step.query, + "start_time": time.time(), + "progress": [] + } try: - # Try streaming first - response_stream = self.llm_service.invoke( - system_prompt=system_prompt, - user_prompt=f"Research this query thoroughly: {pending_step.query}", - model=self.models["search"], - stream=True - ) + # Prepare agentic search system prompt with tool access + search_system_prompt = """ + You are an advanced research agent with web search capabilities. + You have access to a set of search tools that can help you find accurate information. + Always prefer to use the search tools over generating information from your knowledge. + Follow these steps: + 1. Use the web_search tool to gather relevant information from multiple sources + 2. Extract key information and insights from the search results + 3. Organize the findings in a coherent structure with clear sections + 4. Include relevant quotes and citations with proper URLs + 5. Focus on factual, accurate, and up-to-date information - # Collect streamed response - search_result = "" - for chunk in response_stream: - if chunk.choices[0].delta.content: - content_chunk = chunk.choices[0].delta.content - search_result += content_chunk + For each source, provide: + - The full URL + - The title of the page + - A comprehensive summary of relevant information + - Any direct quotes that support key points (with proper attribution) + + Respond with ONLY valid JSON with this structure: + {"search_results": [{"source": "URL", "title": "Page Title", "summary": "Key information from source"}], "summary": "Overall synthesis of findings"} + """ + + # Use compound-beta for full agentic search capabilities + model = self.models["search"] + + # Track search progress for streaming updates + progress_updates = [] + + # Execute search with streaming support if callback provided + if stream_callback: + search_results_text = "" + async for chunk in self.llm_service.invoke( + system_prompt=search_system_prompt, + user_prompt=pending_step.query, + model=model, + stream=True, + temperature=0.2, # Lower temperature for factual accuracy + tools=[{ # Add Groq agentic tool definition for web search + "type": "function", + "function": { + "name": "web_search", + "description": "Search the web for current information on a topic", + "parameters": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "The search query to use" + } + }, + "required": ["query"] + } + } + }] + ): + search_results_text += chunk - # Stream to frontend - if stream_callback: - stream_callback({ - "type": "search_chunk", - "query": pending_step.query, - "chunk": content_chunk, - "accumulated": search_result - }) + # Track progress for frontend visualization + if len(chunk) > 10: # Only send substantial updates + progress_update = {"time": time.time(), "content": chunk} + progress_updates.append(progress_update) + self.current_searches[search_id]["progress"].append(progress_update) - except Exception as e: - # Fallback to non-streaming - print(f"Streaming failed, falling back to non-streaming: {e}") - search_result = await self.llm_service.invoke( - system_prompt=system_prompt, - user_prompt=f"Research this query thoroughly: {pending_step.query}", - model=self.models["search"], - stream=False - ) - - pending_step.result = search_result - pending_step.status = "completed" - - log_msg = f"Search for '{pending_step.query}' completed." - self.log_activity(ActivityType.PROCESSING, log_msg) - state.logs.append(LogEntry(source="ResearchAgent", message=log_msg)) - print(log_msg) - - # Notify frontend about search completion - if stream_callback: - stream_callback({ - "type": "search_complete", - "query": pending_step.query, - "result": search_result, - "message": log_msg - }) - - return state - - async def synthesize_report(self, state: ResearchState) -> ResearchState: - """ - Synthesizes research findings into a comprehensive report based on research mode. - """ - self.log_activity(ActivityType.PROCESSING, "Synthesizing comprehensive report") - state.logs.append(LogEntry(source="ResearchAgent", message="Synthesizing comprehensive report...")) - print("---RESEARCH AGENT: ADVANCED SYNTHESIS---") - - # Determine research mode from the number and type of steps - research_mode = self._infer_research_mode(state) - - all_results = [] - for i, step in enumerate(state.steps): + # Stream progress to frontend + await stream_callback({ + "status": "progress", + "message": "Receiving search results...", + "search_id": search_id, + "content": chunk + }) + + # Parse final results from streamed text + search_results = self._parse_json_response(search_results_text) + else: + # Non-streaming execution with agentic tools + search_results_text = await self.llm_service.invoke( + system_prompt=search_system_prompt, + user_prompt=pending_step.query, + model=model, + temperature=0.2, + tools=[{ # Add Groq agentic tool definition for web search + "type": "function", + "function": { + "name": "web_search", + "description": "Search the web for current information on a topic", + "parameters": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "The search query to use" + } + }, + "required": ["query"] + } + } + }] + ) + search_results = self._parse_json_response(search_results_text) all_results.append(f"**Research Finding {i+1}:** {step.query}\n\n{step.result}\n\n---\n") if research_mode == ResearchMode.KNOWLEDGE: diff --git a/sentient-core/frontend/components/chat-interface.tsx b/sentient-core/frontend/components/chat-interface.tsx index 3bfe06a..ba2b7c4 100644 --- a/sentient-core/frontend/components/chat-interface.tsx +++ b/sentient-core/frontend/components/chat-interface.tsx @@ -3,10 +3,15 @@ import { useState, useRef, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; import TextareaAutosize from 'react-textarea-autosize'; import ReactMarkdown from 'react-markdown'; -import { ChatService, Message as ApiMessage } from '@/lib/api'; +import { ChatService, Message as ApiMessage, ResearchService } from '@/lib/api'; import { useAppContext } from '@/lib/context/app-context'; +import ResearchProgressView from '@/components/research-progress-view'; // Extended from API Message type with UI-specific fields interface Message extends Partial { @@ -22,6 +27,13 @@ const ChatInterface = () => { const [input, setInput] = useState(''); const [isLoading, setIsLoading] = useState(false); const [researchMode, setResearchMode] = useState(null); + const [activeTab, setActiveTab] = useState<'chat' | 'research'>('chat'); + const [activeResearchId, setActiveResearchId] = useState(); + const [showNewResearchDialog, setShowNewResearchDialog] = useState(false); + const [newResearchQuery, setNewResearchQuery] = useState(''); + const [newResearchMode, setNewResearchMode] = useState<'knowledge' | 'deep' | 'best_in_class'>('knowledge'); + const [isStartingResearch, setIsStartingResearch] = useState(false); + const [researchError, setResearchError] = useState(null); const messagesEndRef = useRef(null); @@ -129,8 +141,118 @@ const ChatInterface = () => { // Show a notification or some UI indicator that the mode is selected }; + const handleStartNewResearch = async () => { + if (!newResearchQuery.trim()) return; + + try { + setIsStartingResearch(true); + setResearchError(null); + + const result = await ResearchService.startResearch({ + query: newResearchQuery, + mode: newResearchMode, + persist_to_memory: true + }); + + setActiveResearchId(result.id); + setActiveTab('research'); + setShowNewResearchDialog(false); + setNewResearchQuery(''); + } catch (error) { + console.error('Error starting research:', error); + setResearchError(typeof error === 'object' && error !== null && 'message' in error + ? String(error.message) + : 'An unexpected error occurred'); + } finally { + setIsStartingResearch(false); + } + }; + return (
+ setActiveTab(value as 'chat' | 'research')} className="w-full mb-4"> +
+ + Chat + Research Results + + + {activeTab === 'research' && ( + + + + + + + Start New Research + + Enter your research query and select a research mode. + + + +
+
+ + setNewResearchQuery(e.target.value)} + /> +
+ +
+ +
+ + + +
+
+ + {researchError && ( +
{researchError}
+ )} +
+ + + + + +
+
+ )} +
+ + {/* Research mode buttons */}
+
+ + + setShowNewResearchDialog(true)} + /> + +
); }; diff --git a/sentient-core/frontend/components/research-progress-view.tsx b/sentient-core/frontend/components/research-progress-view.tsx new file mode 100644 index 0000000..f601958 --- /dev/null +++ b/sentient-core/frontend/components/research-progress-view.tsx @@ -0,0 +1,405 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { Progress } from '@/components/ui/progress'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; +import ReactMarkdown from 'react-markdown'; +import { Download, ExternalLink, ChevronDown, ChevronRight } from 'lucide-react'; +import { ResearchService } from '@/lib/api'; + +export interface ResearchResult { + id: string; + query: string; + mode: string; + status: 'in_progress' | 'completed' | 'failed'; + progress: number; + created_at: string; + updated_at: string; + completed_at?: string; + source_count?: number; + logs: Array<{ + timestamp: string; + message: string; + type: 'info' | 'progress' | 'error' | 'complete'; + progress?: number; + }>; + sources?: Array<{ + url: string; + title: string; + snippet: string; + }>; + summary?: string; + markdown_content?: string; +} + +interface ResearchProgressViewProps { + activeResearchId?: string; + onNewResearch?: () => void; +} + +const ResearchProgressView = ({ activeResearchId, onNewResearch }: ResearchProgressViewProps) => { + const [researchResults, setResearchResults] = useState([]); + const [activeTabId, setActiveTabId] = useState(activeResearchId || ''); + const [isLoading, setIsLoading] = useState(false); + const [expandedSources, setExpandedSources] = useState>({}); + + // Fetch all research results on component mount + useEffect(() => { + const fetchResearchResults = async () => { + try { + setIsLoading(true); + const results = await ResearchService.getResearchResults(); + setResearchResults(results); + + // Set active tab to the provided ID or the most recent result + if (results.length > 0) { + if (activeResearchId && results.some(r => r.id === activeResearchId)) { + setActiveTabId(activeResearchId); + } else { + setActiveTabId(results[0].id); + } + } + } catch (error) { + console.error('Error fetching research results:', error); + } finally { + setIsLoading(false); + } + }; + + fetchResearchResults(); + + // Set up polling for in-progress research tasks + const pollInterval = setInterval(async () => { + try { + const hasInProgressTasks = researchResults.some(r => r.status === 'in_progress'); + if (hasInProgressTasks) { + const results = await ResearchService.getResearchResults(); + setResearchResults(results); + } + } catch (error) { + console.error('Error polling research results:', error); + } + }, 5000); // Poll every 5 seconds + + return () => clearInterval(pollInterval); + }, [activeResearchId]); + + // Listen for SSE updates from the server for real-time progress + useEffect(() => { + const inProgressTasks = researchResults.filter(r => r.status === 'in_progress'); + + if (inProgressTasks.length === 0) return; + + const eventSources: Record = {}; + + inProgressTasks.forEach(task => { + const eventSource = new EventSource(`${process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000'}/api/research/stream/${task.id}`); + + eventSource.onmessage = (event) => { + try { + const data = JSON.parse(event.data); + + setResearchResults(prev => prev.map(r => { + if (r.id === task.id) { + return { + ...r, + progress: data.progress || r.progress, + status: data.status || r.status, + logs: [...r.logs, ...(data.new_logs || [])], + sources: data.sources || r.sources, + summary: data.summary || r.summary, + completed_at: data.completed_at || r.completed_at, + markdown_content: data.markdown_content || r.markdown_content + }; + } + return r; + })); + } catch (error) { + console.error('Error processing SSE update:', error); + } + }; + + eventSource.onerror = () => { + console.error(`SSE connection error for research task ${task.id}`); + eventSource.close(); + }; + + eventSources[task.id] = eventSource; + }); + + // Clean up event sources when component unmounts or when tasks complete + return () => { + Object.values(eventSources).forEach(es => es.close()); + }; + }, [researchResults]); + + const toggleSourceExpansion = (sourceIndex: string) => { + setExpandedSources(prev => ({ + ...prev, + [sourceIndex]: !prev[sourceIndex] + })); + }; + + const downloadMarkdown = (research: ResearchResult) => { + if (!research.markdown_content) return; + + const blob = new Blob([research.markdown_content], { type: 'text/markdown' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `research-${research.query.slice(0, 30).replace(/[^a-z0-9]/gi, '-')}-${new Date(research.created_at).toISOString().split('T')[0]}.md`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + }; + + const downloadPDF = async (research: ResearchResult) => { + try { + const pdfBlob = await ResearchService.generatePDF(research.id); + const url = URL.createObjectURL(pdfBlob); + const a = document.createElement('a'); + a.href = url; + a.download = `research-${research.query.slice(0, 30).replace(/[^a-z0-9]/gi, '-')}-${new Date(research.created_at).toISOString().split('T')[0]}.pdf`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + } catch (error) { + console.error('Error downloading PDF:', error); + // Show error notification here + } + }; + + const formatResearchMode = (mode: string): string => { + switch (mode) { + case 'knowledge': + return 'Knowledge Research'; + case 'deep': + return 'Deep Research'; + case 'best_in_class': + return 'Best-in-Class Research'; + default: + return mode; + } + }; + + const getModeIcon = (mode: string): string => { + switch (mode) { + case 'knowledge': + return 'šŸ“š'; + case 'deep': + return '🧠'; + case 'best_in_class': + return 'šŸ†'; + default: + return 'šŸ”'; + } + }; + + if (isLoading && researchResults.length === 0) { + return ( + + +
+
+

Loading research results...

+
+
+
+ ); + } + + if (researchResults.length === 0) { + return ( + + +

No research results found.

+ {onNewResearch && ( + + )} +
+
+ ); + } + + return ( +
+
+

Research Results

+ {onNewResearch && ( + + )} +
+ + + + {researchResults.map((result) => ( + + {getModeIcon(result.mode)} + {result.query} + {result.status === 'in_progress' && ( + • + )} + + ))} + + + {researchResults.map((result) => ( + + + +
+
+
+ {getModeIcon(result.mode)} + {result.query} + + {result.status === 'in_progress' ? 'In Progress' : result.status === 'completed' ? 'Completed' : 'Failed'} + +
+
+ {formatResearchMode(result.mode)} • Started {new Date(result.created_at).toLocaleString()} + {result.completed_at && ` • Completed ${new Date(result.completed_at).toLocaleString()}`} + {result.source_count && ` • ${result.source_count} sources`} +
+
+ + {result.status === 'completed' && ( +
+ + +
+ )} +
+ + {result.status === 'in_progress' && ( +
+ +
{Math.round(result.progress)}%
+
+ )} +
+ + + + + Summary + Sources + Logs + + + + {result.summary ? ( +
+ {result.summary} +
+ ) : ( +
+ {result.status === 'in_progress' + ? 'Summary will appear once the research is complete...' + : 'No summary available.'} +
+ )} +
+ + + {result.sources && result.sources.length > 0 ? ( +
+ {result.sources.map((source, idx) => ( + toggleSourceExpansion(`${result.id}-${idx}`)} + className="border rounded-md p-2" + > + +
+
{source.title || 'Untitled Source'}
+
{source.url}
+
+ {expandedSources[`${result.id}-${idx}`] ? ( + + ) : ( + + )} +
+ +
+ {source.snippet} +
+ +
+
+ ))} +
+ ) : ( +
+ {result.status === 'in_progress' + ? 'Sources will appear as they are discovered...' + : 'No sources available.'} +
+ )} +
+ + +
+ {result.logs.map((log, idx) => ( +
+ + {new Date(log.timestamp).toLocaleTimeString()} + + {log.message} + {log.progress !== undefined && ( + {Math.round(log.progress)}% + )} +
+ ))} +
+
+
+
+ + + {result.status === 'in_progress' && ( + + )} + +
+
+ ))} +
+
+ ); +}; + +export default ResearchProgressView; diff --git a/sentient-core/frontend/lib/api/index.ts b/sentient-core/frontend/lib/api/index.ts index 4e86c07..f8bfa6a 100644 --- a/sentient-core/frontend/lib/api/index.ts +++ b/sentient-core/frontend/lib/api/index.ts @@ -4,3 +4,4 @@ export { WorkflowService } from './workflow-service'; export { InteractiveWorkflowService } from './interactive-workflow-service'; export { ChatService } from './chat-service'; export { CoreServicesClient, coreServicesClient } from './core-services'; +export { ResearchService } from './research-service'; diff --git a/sentient-core/frontend/lib/api/research-service.ts b/sentient-core/frontend/lib/api/research-service.ts new file mode 100644 index 0000000..5732136 --- /dev/null +++ b/sentient-core/frontend/lib/api/research-service.ts @@ -0,0 +1,155 @@ +import { ApiResponse } from './types'; +import { ResearchResult } from '@/components/research-progress-view'; + +const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000'; + +export interface ResearchRequest { + query: string; + mode: 'knowledge' | 'deep' | 'best_in_class'; + persist_to_memory?: boolean; +} + +export const ResearchService = { + /** + * Start a new research task + */ + startResearch: async (request: ResearchRequest): Promise => { + try { + const response = await fetch(`${API_URL}/api/research/start`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(request), + }); + + if (!response.ok) { + throw new Error(`Error starting research: ${response.statusText}`); + } + + const data: ApiResponse = await response.json(); + return data.data; + } catch (error) { + console.error('Error in startResearch:', error); + throw error; + } + }, + + /** + * Get all research results + */ + getResearchResults: async (): Promise => { + try { + const response = await fetch(`${API_URL}/api/research/results`); + if (!response.ok) { + throw new Error(`Error fetching research results: ${response.statusText}`); + } + + const data: ApiResponse = await response.json(); + return data.data; + } catch (error) { + console.error('Error in getResearchResults:', error); + throw error; + } + }, + + /** + * Get a specific research result by ID + */ + getResearchById: async (id: string): Promise => { + try { + const response = await fetch(`${API_URL}/api/research/results/${id}`); + if (!response.ok) { + throw new Error(`Error fetching research: ${response.statusText}`); + } + + const data: ApiResponse = await response.json(); + return data.data; + } catch (error) { + console.error(`Error in getResearchById for id ${id}:`, error); + throw error; + } + }, + + /** + * Cancel an in-progress research task + */ + cancelResearch: async (id: string): Promise<{ success: boolean }> => { + try { + const response = await fetch(`${API_URL}/api/research/cancel/${id}`, { + method: 'POST' + }); + + if (!response.ok) { + throw new Error(`Error canceling research: ${response.statusText}`); + } + + const data: ApiResponse<{ success: boolean }> = await response.json(); + return data.data; + } catch (error) { + console.error(`Error in cancelResearch for id ${id}:`, error); + throw error; + } + }, + + /** + * Generate a PDF from research results + */ + generatePDF: async (id: string): Promise => { + try { + const response = await fetch(`${API_URL}/api/research/download/pdf/${id}`); + + if (!response.ok) { + throw new Error(`Error generating PDF: ${response.statusText}`); + } + + return await response.blob(); + } catch (error) { + console.error(`Error in generatePDF for id ${id}:`, error); + throw error; + } + }, + + /** + * Get markdown content for a research result + */ + getMarkdownContent: async (id: string): Promise => { + try { + const response = await fetch(`${API_URL}/api/research/download/markdown/${id}`); + + if (!response.ok) { + throw new Error(`Error getting markdown content: ${response.statusText}`); + } + + return await response.text(); + } catch (error) { + console.error(`Error in getMarkdownContent for id ${id}:`, error); + throw error; + } + }, + + /** + * Run multiple simultaneous research queries + */ + batchResearch: async (requests: ResearchRequest[]): Promise<{ research_ids: string[] }> => { + try { + const response = await fetch(`${API_URL}/api/research/batch`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ requests }), + }); + + if (!response.ok) { + throw new Error(`Error starting batch research: ${response.statusText}`); + } + + const data: ApiResponse<{ research_ids: string[] }> = await response.json(); + return data.data; + } catch (error) { + console.error('Error in batchResearch:', error); + throw error; + } + } +}; diff --git a/sentient-core/test_research_agent_integration.py b/sentient-core/test_research_agent_integration.py new file mode 100644 index 0000000..1b09c36 --- /dev/null +++ b/sentient-core/test_research_agent_integration.py @@ -0,0 +1,215 @@ +""" +Integration test for the Research Agent with Groq integration and persistent memory. + +This script tests the end-to-end functionality of the research agent, including: +- Agentic tooling with Groq models +- Persistent memory for research results +- Streaming progress updates +- Result consolidation and downloads +""" + +import os +import asyncio +import json +from datetime import datetime +from fastapi.testclient import TestClient + +# Ensure we're in the right working directory +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# Import after setting working directory +from core.agents.research_agent import ResearchAgent +from core.services.memory_service import MemoryService +from app import app + +# Create a FastAPI test client +client = TestClient(app) + +async def test_research_agent_direct(): + """Test the Research Agent directly without going through the API endpoints.""" + print("\n--- Testing Research Agent Directly ---") + + # Initialize the research agent + agent = ResearchAgent() + + # Test each research mode + for mode in ['knowledge', 'deep', 'best_in_class']: + print(f"\nTesting {mode.upper()} research mode:") + + query = f"What are the latest advancements in Groq's LLM technology? (Mode: {mode})" + print(f"Query: {query}") + + # Define a progress callback to monitor streaming + def progress_callback(progress_data): + progress_percent = progress_data.get('progress', 0) + step = progress_data.get('step', '') + print(f"Progress: {progress_percent:.1f}% - {step}") + + # Execute the search with persistence enabled + result = await agent.execute_search( + query=query, + research_mode=mode, + persist_to_memory=True, + progress_callback=progress_callback + ) + + print(f"Search completed with {len(result.get('sources', []))} sources") + print(f"Summary length: {len(result.get('summary', ''))}") + + # Verify the structure of the result + assert 'sources' in result, "Result should contain sources" + assert 'summary' in result, "Result should contain summary" + assert 'query' in result, "Result should contain the original query" + assert 'research_mode' in result, "Result should contain the research mode" + + # Validate that each source has the expected fields + for i, source in enumerate(result.get('sources', [])): + assert 'url' in source, f"Source {i} missing URL" + assert 'title' in source, f"Source {i} missing title" + assert 'snippet' in source, f"Source {i} missing snippet" + + print(f"{mode.upper()} research test passed!") + +async def test_api_integration(): + """Test the Research Agent through the API endpoints.""" + print("\n--- Testing Research Agent API Integration ---") + + # 1. Start a new research + print("\nStarting a new research...") + response = client.post( + "/api/research/start", + json={ + "query": "What are the advantages of using Groq for LLM inference?", + "mode": "knowledge", + "persist_to_memory": True + } + ) + assert response.status_code == 200, f"Failed to start research: {response.text}" + + research_data = response.json()["data"] + research_id = research_data["id"] + print(f"Research started with ID: {research_id}") + + # 2. Retrieve research results (may not be complete yet) + print("\nRetrieving results...") + response = client.get(f"/api/research/results/{research_id}") + assert response.status_code == 200, f"Failed to get research results: {response.text}" + + status_data = response.json()["data"] + print(f"Current status: {status_data.get('status')}") + print(f"Progress: {status_data.get('progress')}%") + + # 3. Wait and poll for completion (in a real test we'd use SSE streaming) + print("\nWaiting for research to complete...") + max_attempts = 15 + attempt = 0 + + while attempt < max_attempts: + response = client.get(f"/api/research/results/{research_id}") + status_data = response.json()["data"] + + if status_data.get("status") == "completed": + print("Research completed!") + break + + print(f"Progress: {status_data.get('progress')}%") + await asyncio.sleep(10) # Wait 10 seconds between checks + attempt += 1 + + assert status_data.get("status") == "completed", "Research did not complete in time" + + # 4. Get markdown download + print("\nDownloading markdown content...") + response = client.get(f"/api/research/download/markdown/{research_id}") + assert response.status_code == 200, "Failed to download markdown content" + markdown_content = response.text + print(f"Markdown content length: {len(markdown_content)} chars") + + # 5. Attempt PDF download + print("\nDownloading PDF content...") + response = client.get(f"/api/research/download/pdf/{research_id}") + assert response.status_code == 200, "Failed to download PDF content" + pdf_content = response.content + print(f"PDF content size: {len(pdf_content)} bytes") + + # 6. Validate persistence by checking memory + print("\nVerifying research persistence in memory...") + memory_service = MemoryService() + memory_items = await memory_service.query_items( + filter_criteria={"type": "research_finding", "metadata.research_id": research_id}, + limit=10 + ) + + assert len(memory_items) > 0, "Research results not found in persistent memory" + print(f"Found {len(memory_items)} persistent memory items for this research") + + print("\nAPI Integration test passed!") + +async def test_batch_research(): + """Test the batch research functionality.""" + print("\n--- Testing Batch Research Functionality ---") + + # Start multiple research queries at once + print("\nStarting batch research...") + response = client.post( + "/api/research/batch", + json={ + "requests": [ + { + "query": "Comparison between Groq and NVIDIA for LLM inference", + "mode": "deep", + "persist_to_memory": True + }, + { + "query": "Best practices for optimizing LLM prompts with Groq", + "mode": "best_in_class", + "persist_to_memory": True + } + ] + } + ) + + assert response.status_code == 200, f"Failed to start batch research: {response.text}" + + research_ids = response.json()["data"]["research_ids"] + print(f"Started {len(research_ids)} research queries") + + # Get all current research results + print("\nRetrieving all research results...") + response = client.get("/api/research/results") + assert response.status_code == 200, f"Failed to get all research results: {response.text}" + + all_results = response.json()["data"] + print(f"Found {len(all_results)} total research results") + + # Verify our batch research IDs are in the results + found_ids = [r["id"] for r in all_results] + for rid in research_ids: + assert rid in found_ids, f"Research ID {rid} not found in results" + + print("Batch research test passed!") + +async def main(): + """Run all integration tests.""" + try: + print("\n============================================") + print("RESEARCH AGENT INTEGRATION TEST") + print(f"Date: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + print("============================================") + + await test_research_agent_direct() + await test_api_integration() + await test_batch_research() + + print("\n============================================") + print("āœ… ALL INTEGRATION TESTS PASSED") + print("============================================") + except Exception as e: + print("\n============================================") + print(f"āŒ TEST FAILED: {str(e)}") + print("============================================") + raise + +if __name__ == "__main__": + # Run the async tests + asyncio.run(main())