Abhijeet Mendhe commited on
Upload folder using huggingface_hub
Browse files- .gitignore +7 -0
- README.md +22 -12
- app.py +166 -0
- cache_download.py +17 -0
- chroma_db/default__vector_store.json +0 -0
- chroma_db/docstore.json +0 -0
- chroma_db/graph_store.json +1 -0
- chroma_db/image__vector_store.json +1 -0
- chroma_db/index_store.json +1 -0
- index_builder.py +24 -0
- main.py +6 -0
- pyproject.toml +24 -0
- requirements.txt +0 -0
- uv.lock +0 -0
.gitignore
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__pycache__/
|
| 2 |
+
*.pkl
|
| 3 |
+
.env
|
| 4 |
+
.venv
|
| 5 |
+
hf_cache/
|
| 6 |
+
.github/
|
| 7 |
+
.python-version
|
README.md
CHANGED
|
@@ -1,12 +1,22 @@
|
|
| 1 |
-
---
|
| 2 |
-
title: YourHonor
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: YourHonor
|
| 3 |
+
app_file: app.py
|
| 4 |
+
sdk: gradio
|
| 5 |
+
sdk_version: 4.44.0
|
| 6 |
+
---
|
| 7 |
+
# 🇮🇳 Constitution of India RAG Chatbot
|
| 8 |
+
|
| 9 |
+
Production-grade Q&A over full Constitution text using **Phi-3-mini + LlamaIndex + ChromaDB**.
|
| 10 |
+
|
| 11 |
+
## Features
|
| 12 |
+
- ✅ Semantic search (handles typos: "Artical 14" → Article 14)
|
| 13 |
+
- ✅ Chat history (auto-truncated)
|
| 14 |
+
- ✅ Citations & hallucination-proof
|
| 15 |
+
- ✅ Edge cases: "Not found" responses
|
| 16 |
+
- ✅ HF Spaces CPU-Basic (~4GB RAM)
|
| 17 |
+
|
| 18 |
+
## Deploy HF Spaces
|
| 19 |
+
1. Push all files (incl. `chroma_db/`)
|
| 20 |
+
2. Create Gradio Space → Auto-builds!
|
| 21 |
+
|
| 22 |
+
**Try:** "Article 21 fundamental right?" → Perfect answer + context!
|
app.py
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
""" Interactive RAG chatbot using Gradio.
|
| 2 |
+
Name: Constitution Of India RAG Chatbot
|
| 3 |
+
Phi3-mini-4k + MiniLM + chromaDB
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import os
|
| 7 |
+
from pathlib import Path
|
| 8 |
+
from turtle import undo
|
| 9 |
+
import gradio as gr
|
| 10 |
+
from llama_index.core import StorageContext, load_index_from_storage, VectorStoreIndex, PromptTemplate,Settings
|
| 11 |
+
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
|
| 12 |
+
from llama_index.llms.huggingface import HuggingFaceLLM
|
| 13 |
+
from llama_index.core.memory import ChatMemoryBuffer
|
| 14 |
+
from textblob import TextBlob
|
| 15 |
+
from typing import List, Tuple
|
| 16 |
+
from transformers import AutoTokenizer
|
| 17 |
+
|
| 18 |
+
EMBED_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
|
| 19 |
+
CHROMA_DB_PATH = "./chroma_db"
|
| 20 |
+
MODEL_NAME = "microsoft/Phi-3-mini-4k-instruct"
|
| 21 |
+
MODEL_NAME = "Qwen/Qwen2-1.5B-Instruct" # ✅ No tokenizer bugs
|
| 22 |
+
MAX_HISTORY_TOKENS = 8000
|
| 23 |
+
TOP_K = 4
|
| 24 |
+
|
| 25 |
+
# user query embeded with this model
|
| 26 |
+
Settings.embed_model = HuggingFaceEmbedding(model_name=EMBED_MODEL, device="cpu")
|
| 27 |
+
# phi3 LLm (downloads ~2GB on first use)
|
| 28 |
+
# Model name and its tokenizer name are the same most of the times. check HF for tokenizer name if not found.
|
| 29 |
+
|
| 30 |
+
def only_in_case_phi3_model_loading():
|
| 31 |
+
# Pre-initialize tokenizer to ensure pad_token is set correctly
|
| 32 |
+
tokenizer = AutoTokenizer.from_pretrained(
|
| 33 |
+
MODEL_NAME,
|
| 34 |
+
trust_remote_code=True,
|
| 35 |
+
padding_side="left"
|
| 36 |
+
)
|
| 37 |
+
# Ensure pad_token is set for Phi-3
|
| 38 |
+
if tokenizer.pad_token is None:
|
| 39 |
+
tokenizer.pad_token = tokenizer.eos_token
|
| 40 |
+
tokenizer.pad_token_id = tokenizer.eos_token_id
|
| 41 |
+
|
| 42 |
+
# Create HuggingFaceLLM - try with tokenizer parameter first
|
| 43 |
+
try:
|
| 44 |
+
llm = HuggingFaceLLM(
|
| 45 |
+
model_name=MODEL_NAME,
|
| 46 |
+
tokenizer_name=MODEL_NAME,
|
| 47 |
+
context_window=4000,
|
| 48 |
+
max_new_tokens=512,
|
| 49 |
+
device_map="cpu",
|
| 50 |
+
model_kwargs={
|
| 51 |
+
"trust_remote_code": True,
|
| 52 |
+
"low_cpu_mem_usage": True,
|
| 53 |
+
"use_safetensors": True
|
| 54 |
+
},
|
| 55 |
+
tokenizer=tokenizer # Passing tokenizer avoids init error, but may fail later if not properly supported
|
| 56 |
+
)
|
| 57 |
+
except (TypeError, ValueError):
|
| 58 |
+
# If tokenizer parameter not supported, use workaround with __dict__
|
| 59 |
+
llm = HuggingFaceLLM(
|
| 60 |
+
model_name=MODEL_NAME,
|
| 61 |
+
tokenizer_name=MODEL_NAME,
|
| 62 |
+
context_window=4000,
|
| 63 |
+
max_new_tokens=512,
|
| 64 |
+
device_map="cpu",
|
| 65 |
+
model_kwargs={
|
| 66 |
+
"trust_remote_code": True,
|
| 67 |
+
"low_cpu_mem_usage": True,
|
| 68 |
+
"use_safetensors": True
|
| 69 |
+
},
|
| 70 |
+
tokenizer_kwargs={
|
| 71 |
+
"trust_remote_code": True,
|
| 72 |
+
"padding_side": "left"
|
| 73 |
+
}
|
| 74 |
+
)
|
| 75 |
+
# Bypass Pydantic's __setattr__ to set internal tokenizer attribute
|
| 76 |
+
object.__setattr__(llm, '_tokenizer', tokenizer)
|
| 77 |
+
|
| 78 |
+
return llm
|
| 79 |
+
|
| 80 |
+
# llm = only_in_case_phi3_model_loading()
|
| 81 |
+
if (1==1):
|
| 82 |
+
llm = HuggingFaceLLM(
|
| 83 |
+
model_name=MODEL_NAME,
|
| 84 |
+
tokenizer_name=MODEL_NAME,
|
| 85 |
+
context_window=32768,
|
| 86 |
+
max_new_tokens=512,
|
| 87 |
+
device_map="cpu")
|
| 88 |
+
|
| 89 |
+
qa_prompt = PromptTemplate(
|
| 90 |
+
"""<|im_start|>system
|
| 91 |
+
You are an expert on the Constitution of India. Your job is to answer questions using ONLY the provided Constitution text excerpts.
|
| 92 |
+
|
| 93 |
+
RULES (MANDATORY):
|
| 94 |
+
1. Answer using ONLY the context provided below
|
| 95 |
+
2. If the answer is NOT in the context, respond EXACTLY: "❌ Not found in Constitution of India"
|
| 96 |
+
3. Cite specific Article/Section numbers when possible
|
| 97 |
+
4. Never use external knowledge or general facts
|
| 98 |
+
5. Be precise, legal, and constitutional in tone
|
| 99 |
+
6. If asked about creator - Respond with Abhijeet M
|
| 100 |
+
|
| 101 |
+
CONTEXT FROM CONSTITUTION:
|
| 102 |
+
{context_str}
|
| 103 |
+
|
| 104 |
+
QUESTION: {query_str}<|im_end|>
|
| 105 |
+
<|im_start|>assistant"""
|
| 106 |
+
)
|
| 107 |
+
|
| 108 |
+
class ConstitutionRAGChatBot:
|
| 109 |
+
def __init__(self):
|
| 110 |
+
if not os.path.exists(CHROMA_DB_PATH):
|
| 111 |
+
raise FileNotFoundError(f"ChromaDB index not found at {CHROMA_DB_PATH}. Run indexing first.")
|
| 112 |
+
|
| 113 |
+
# load index from storage -- already computed by index_builder.py
|
| 114 |
+
storage_context = StorageContext.from_defaults(persist_dir=CHROMA_DB_PATH)
|
| 115 |
+
self.index = load_index_from_storage(storage_context)
|
| 116 |
+
|
| 117 |
+
self.query_engine = self.index.as_query_engine(llm=llm, chat_mode=True, similarity_top_k=TOP_K, response_mode="compact", text_qa_template=qa_prompt, memory=ChatMemoryBuffer.from_defaults(token_limit=MAX_HISTORY_TOKENS))
|
| 118 |
+
|
| 119 |
+
def preprocess_query(self, query: str) -> str:
|
| 120 |
+
""" Preprocess user query to improve accuracy. """
|
| 121 |
+
# correct spelling
|
| 122 |
+
corrected_query = TextBlob(query.strip()).correct()
|
| 123 |
+
return str(corrected_query)
|
| 124 |
+
|
| 125 |
+
def chat(self, message: str, history: List[Tuple[str, str]]) -> str:
|
| 126 |
+
""" Callback """
|
| 127 |
+
if not message.strip():
|
| 128 |
+
return "Please, Stick to the questions regarding the Constitutions. Thanks!"
|
| 129 |
+
|
| 130 |
+
try:
|
| 131 |
+
clean_query = self.preprocess_query(message)
|
| 132 |
+
# query RAG (auto embed, retrives, generate)
|
| 133 |
+
response = self.query_engine.query(clean_query)
|
| 134 |
+
|
| 135 |
+
if "Not Found" in response.response.lower():
|
| 136 |
+
return "Its my Bad. Might be there is no information on this topic into the constitution of India or Legal language is too hard for me too.. ;)"
|
| 137 |
+
return response.response
|
| 138 |
+
except Exception as e:
|
| 139 |
+
return f"Error: {str(e)}.\n Try rephrasing your question in less workds"
|
| 140 |
+
|
| 141 |
+
def create_demo():
|
| 142 |
+
rag = ConstitutionRAGChatBot()
|
| 143 |
+
demo = gr.ChatInterface(
|
| 144 |
+
fn=rag.chat,
|
| 145 |
+
title = 'YourHonor',
|
| 146 |
+
description="Ask precise questions about Articles, Rights, Duties, Amendments. ",
|
| 147 |
+
theme="soft",
|
| 148 |
+
examples=[
|
| 149 |
+
"What does Article 14 say?",
|
| 150 |
+
"Fundamental Rights list?",
|
| 151 |
+
"President election process?",
|
| 152 |
+
"Emergency provisions?",
|
| 153 |
+
],
|
| 154 |
+
cache_examples=False,
|
| 155 |
+
retry_btn="Ask Again",
|
| 156 |
+
undo_btn="Undo",
|
| 157 |
+
submit_btn="Order!Order!"
|
| 158 |
+
)
|
| 159 |
+
return demo
|
| 160 |
+
|
| 161 |
+
|
| 162 |
+
if __name__ == "__main__":
|
| 163 |
+
# Local test
|
| 164 |
+
demo = create_demo()
|
| 165 |
+
#demo.launch(server_name="0.0.0.0", server_port=7860, debug=True)
|
| 166 |
+
demo.launch(server_name="0.0.0.0", server_port=7860, share=True)
|
cache_download.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# cache_download.py - Run ONCE
|
| 2 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 3 |
+
import os
|
| 4 |
+
|
| 5 |
+
MODEL_NAME = "microsoft/Phi-3-mini-4k-instruct"
|
| 6 |
+
MODEL_NAME = "Qwen/Qwen2-1.5B-Instruct" # ✅ No tokenizer bugs
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
print("Caching Phi-3...")
|
| 10 |
+
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir="./hf_cache")
|
| 11 |
+
model = AutoModelForCausalLM.from_pretrained(
|
| 12 |
+
MODEL_NAME,
|
| 13 |
+
cache_dir="./hf_cache",
|
| 14 |
+
torch_dtype="auto",
|
| 15 |
+
device_map="cpu"
|
| 16 |
+
)
|
| 17 |
+
print("✅ Cached to ./hf_cache/")
|
chroma_db/default__vector_store.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
chroma_db/docstore.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
chroma_db/graph_store.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"graph_dict": {}}
|
chroma_db/image__vector_store.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"embedding_dict": {}, "text_id_to_ref_doc_id": {}, "metadata_dict": {}}
|
chroma_db/index_store.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"index_store/data": {"cfcece5f-fd5f-4c24-8dc8-8ffc66d51a9a": {"__type__": "vector_store", "__data__": "{\"index_id\": \"cfcece5f-fd5f-4c24-8dc8-8ffc66d51a9a\", \"summary\": null, \"nodes_dict\": {\"20d385ba-acd4-49f7-819b-4e2d437f6d5e\": \"20d385ba-acd4-49f7-819b-4e2d437f6d5e\", \"f3beb51b-972b-42f2-903f-f08e01eee71f\": \"f3beb51b-972b-42f2-903f-f08e01eee71f\", \"71cb511e-6a10-465d-8266-3c4b6bca45d7\": \"71cb511e-6a10-465d-8266-3c4b6bca45d7\", \"f2760738-2776-4bad-af1b-97c660567d34\": \"f2760738-2776-4bad-af1b-97c660567d34\", \"62785a2b-bebf-4c6e-82e7-beaccba7176c\": \"62785a2b-bebf-4c6e-82e7-beaccba7176c\", \"b9bb3564-c44d-4ecf-a714-8f703925f18d\": \"b9bb3564-c44d-4ecf-a714-8f703925f18d\", \"655f8cc5-e41b-41ef-bac0-ee29195d0baf\": \"655f8cc5-e41b-41ef-bac0-ee29195d0baf\", \"85c1759b-4dda-4f4e-9762-7ba60a190f10\": \"85c1759b-4dda-4f4e-9762-7ba60a190f10\", \"4021bbbb-b184-43fa-8714-dba450501d42\": \"4021bbbb-b184-43fa-8714-dba450501d42\", \"0f92576d-19a1-4d7d-b34d-12215c5140dc\": \"0f92576d-19a1-4d7d-b34d-12215c5140dc\", \"d5be7462-0462-48e5-ac48-11e0c01fcaff\": \"d5be7462-0462-48e5-ac48-11e0c01fcaff\", \"55199386-176a-40e1-894b-8dd0144c0da9\": \"55199386-176a-40e1-894b-8dd0144c0da9\", \"32b9183c-9779-40f3-9350-0da0bc8b97a0\": \"32b9183c-9779-40f3-9350-0da0bc8b97a0\", \"703d7366-ca6d-42a0-8203-2bf562a327ed\": \"703d7366-ca6d-42a0-8203-2bf562a327ed\", \"caad8199-f5bd-419d-b3f2-26b5331dfb6e\": \"caad8199-f5bd-419d-b3f2-26b5331dfb6e\", \"21343f5e-7feb-4889-ab2f-017aea3c2a34\": \"21343f5e-7feb-4889-ab2f-017aea3c2a34\", \"aece1d6f-7b40-4661-a91d-d4bdcd2f0fdc\": \"aece1d6f-7b40-4661-a91d-d4bdcd2f0fdc\", \"5e0d6675-7a90-4ff0-a648-fd9fd4c46790\": \"5e0d6675-7a90-4ff0-a648-fd9fd4c46790\", \"7b4f9b8a-9b2f-4301-ab1d-947f0e53b5cb\": \"7b4f9b8a-9b2f-4301-ab1d-947f0e53b5cb\", \"d8692f6c-52c8-4b25-9631-1813c31211b0\": \"d8692f6c-52c8-4b25-9631-1813c31211b0\", \"b650f4d1-7dae-42dc-8a4f-7f6e42acface\": \"b650f4d1-7dae-42dc-8a4f-7f6e42acface\", \"9dd50ac4-11c7-4e25-a4c6-2f2b00061f0b\": \"9dd50ac4-11c7-4e25-a4c6-2f2b00061f0b\", \"c2bbdfbe-8806-4df1-99fa-4b7866320a2e\": \"c2bbdfbe-8806-4df1-99fa-4b7866320a2e\", \"5ba56874-7e2a-4ccd-a84f-25cfd87bbd7c\": \"5ba56874-7e2a-4ccd-a84f-25cfd87bbd7c\", \"41ad9e5a-3edf-43ef-bbd5-86503bd79c89\": \"41ad9e5a-3edf-43ef-bbd5-86503bd79c89\", \"6680b085-67c2-4c70-9379-28514e7a0c21\": \"6680b085-67c2-4c70-9379-28514e7a0c21\", \"89678897-036e-4472-8dda-e9abdf66f394\": \"89678897-036e-4472-8dda-e9abdf66f394\", \"4663cf7f-ba91-4f18-a3b3-48c1bac7bc23\": \"4663cf7f-ba91-4f18-a3b3-48c1bac7bc23\", \"9e6033f1-8175-4761-af63-b7ff79205782\": \"9e6033f1-8175-4761-af63-b7ff79205782\", \"5adc46cd-2e7e-455c-8406-5a6f4d7a808a\": \"5adc46cd-2e7e-455c-8406-5a6f4d7a808a\", \"210de35a-4975-4d65-a182-dd6d60edeb06\": \"210de35a-4975-4d65-a182-dd6d60edeb06\", \"d2bbfb20-5e83-4c29-b5be-23a2a0f66ff5\": \"d2bbfb20-5e83-4c29-b5be-23a2a0f66ff5\", \"dfbf5440-7bb0-4082-af36-d83160bc0290\": \"dfbf5440-7bb0-4082-af36-d83160bc0290\", \"8198993d-dcb7-483e-bde4-aaa454c31aad\": \"8198993d-dcb7-483e-bde4-aaa454c31aad\", \"df6323ae-0713-4a9d-a915-23578a67d578\": \"df6323ae-0713-4a9d-a915-23578a67d578\", \"0022ee7d-a351-4c05-8c84-0f71b26aa6d7\": \"0022ee7d-a351-4c05-8c84-0f71b26aa6d7\", \"cd85751a-1e53-4ada-b3b4-b3c01f65ee21\": \"cd85751a-1e53-4ada-b3b4-b3c01f65ee21\", \"659d03c7-39a2-4457-ba4c-bd2b4d537c91\": \"659d03c7-39a2-4457-ba4c-bd2b4d537c91\", \"619c9d4b-0460-49fa-b56b-2da8b8c3b5b9\": \"619c9d4b-0460-49fa-b56b-2da8b8c3b5b9\", \"91a99dd2-9cc3-4ea1-8834-7631d36d4bf7\": \"91a99dd2-9cc3-4ea1-8834-7631d36d4bf7\", \"690115d2-437a-4c03-9f52-3a07a0714ae8\": \"690115d2-437a-4c03-9f52-3a07a0714ae8\", \"3f250e15-df54-48f2-b43a-f3b3422bd2f7\": \"3f250e15-df54-48f2-b43a-f3b3422bd2f7\", \"8f76f139-c327-4dcb-8a9d-fff5619be023\": \"8f76f139-c327-4dcb-8a9d-fff5619be023\", \"bac4ef9b-3006-4e3e-892e-6a9457abbf92\": \"bac4ef9b-3006-4e3e-892e-6a9457abbf92\", \"cd3e503b-7de6-476e-8246-ddbe1b87cbac\": \"cd3e503b-7de6-476e-8246-ddbe1b87cbac\", \"53f12f44-dc4e-47f2-8d63-b7079896bf8b\": \"53f12f44-dc4e-47f2-8d63-b7079896bf8b\", \"4080036b-3b6d-4cb1-b577-82f4e82810b0\": \"4080036b-3b6d-4cb1-b577-82f4e82810b0\", \"ffb50f9d-6132-44d2-a961-2afe99b8d270\": \"ffb50f9d-6132-44d2-a961-2afe99b8d270\", \"8f2c8ac4-7297-47fa-9781-680d24a92266\": \"8f2c8ac4-7297-47fa-9781-680d24a92266\", \"3cbc6645-ee8f-4a3a-9f45-fd3dfee83aa0\": \"3cbc6645-ee8f-4a3a-9f45-fd3dfee83aa0\", \"9c443f2b-9689-422f-b679-f07165d40a2c\": \"9c443f2b-9689-422f-b679-f07165d40a2c\", \"4b204dae-de7f-41df-9f9e-08211fac0f26\": \"4b204dae-de7f-41df-9f9e-08211fac0f26\", \"7fb5f86b-6e9c-4577-8b42-e0383d0f8f9a\": \"7fb5f86b-6e9c-4577-8b42-e0383d0f8f9a\", \"1fe3b315-4c90-4d68-8573-826056918513\": \"1fe3b315-4c90-4d68-8573-826056918513\", \"72417213-f823-40b4-a8bb-dfe8c9e3d75e\": \"72417213-f823-40b4-a8bb-dfe8c9e3d75e\", \"14dc1259-f7c6-4c14-8cd0-6ded00153c4d\": \"14dc1259-f7c6-4c14-8cd0-6ded00153c4d\", \"8c74e0ed-9b9d-44a1-9914-a0496bd4a2bb\": \"8c74e0ed-9b9d-44a1-9914-a0496bd4a2bb\", \"4f0a44d1-7c3d-4df0-8d1b-79ff6c89f69c\": \"4f0a44d1-7c3d-4df0-8d1b-79ff6c89f69c\", \"d08105ca-dfc7-4a2a-a41d-ba57335fbeda\": \"d08105ca-dfc7-4a2a-a41d-ba57335fbeda\", \"5393f9f0-597c-4e36-aed6-eaa9f61b1fce\": \"5393f9f0-597c-4e36-aed6-eaa9f61b1fce\", \"c4680cdb-555d-46e9-80b2-ab1e7ddb43a8\": \"c4680cdb-555d-46e9-80b2-ab1e7ddb43a8\", \"438e7723-bad0-45ef-bf9b-1efba9a237fe\": \"438e7723-bad0-45ef-bf9b-1efba9a237fe\", \"c15e3bcd-4404-4f68-b743-490d60fe8705\": \"c15e3bcd-4404-4f68-b743-490d60fe8705\", \"75801be5-7ce3-4ed0-8b64-d074f1884148\": \"75801be5-7ce3-4ed0-8b64-d074f1884148\", \"7184abe5-ea05-472e-a6bf-56c82b7d5dfe\": \"7184abe5-ea05-472e-a6bf-56c82b7d5dfe\", \"1c1ea1d0-0861-4337-af7e-343aeb95fe37\": \"1c1ea1d0-0861-4337-af7e-343aeb95fe37\", \"94d45a92-db86-43b4-b69a-b8c591ed2f26\": \"94d45a92-db86-43b4-b69a-b8c591ed2f26\", \"d825ba4a-3971-4207-a081-18c5f259dd37\": \"d825ba4a-3971-4207-a081-18c5f259dd37\", \"d7f42970-135e-4674-b3c9-28ea34981793\": \"d7f42970-135e-4674-b3c9-28ea34981793\", \"c633c1f4-9620-4f91-ab1f-0298b0071241\": \"c633c1f4-9620-4f91-ab1f-0298b0071241\", \"ae31f0f8-7d77-43e6-a220-cfdf3ecf8733\": \"ae31f0f8-7d77-43e6-a220-cfdf3ecf8733\", \"692f4c8b-eb5e-4df1-9e75-850eedf61c31\": \"692f4c8b-eb5e-4df1-9e75-850eedf61c31\", \"9a3f204a-6001-4b71-b523-762ad0822caa\": \"9a3f204a-6001-4b71-b523-762ad0822caa\", \"e9e5875f-368d-452b-a939-25feaf91d9f2\": \"e9e5875f-368d-452b-a939-25feaf91d9f2\", \"740d3778-3deb-4f9b-8c12-b363e1d10ee5\": \"740d3778-3deb-4f9b-8c12-b363e1d10ee5\", \"1863091a-64b7-48dd-a643-cb548ef5ddb1\": \"1863091a-64b7-48dd-a643-cb548ef5ddb1\", \"a6273a2d-d737-4f1d-9de9-7d4ab73dda86\": \"a6273a2d-d737-4f1d-9de9-7d4ab73dda86\", \"21d22c2b-5357-4e9e-bc09-1f7ee39d2eb2\": \"21d22c2b-5357-4e9e-bc09-1f7ee39d2eb2\", \"8855c2a2-2539-44d1-8a0c-db4095f3b0eb\": \"8855c2a2-2539-44d1-8a0c-db4095f3b0eb\", \"68d3ab5a-f44e-4625-9603-378bd29ed17d\": \"68d3ab5a-f44e-4625-9603-378bd29ed17d\", \"58764574-66c4-4543-ba90-89548c7ddc4d\": \"58764574-66c4-4543-ba90-89548c7ddc4d\", \"764bccd8-6f00-458f-91dd-4b73f5ee449b\": \"764bccd8-6f00-458f-91dd-4b73f5ee449b\", \"14d2b842-2bf1-4441-83ad-9a1932c7267c\": \"14d2b842-2bf1-4441-83ad-9a1932c7267c\", \"3467f377-8ff8-4534-b234-57b382d3b12a\": \"3467f377-8ff8-4534-b234-57b382d3b12a\", \"f27864ea-3f8b-4bf1-801e-8b532c9ffb44\": \"f27864ea-3f8b-4bf1-801e-8b532c9ffb44\", \"8a13b66b-9a16-47df-8121-6199d2856855\": \"8a13b66b-9a16-47df-8121-6199d2856855\", \"0883a81b-ca0e-42c3-9160-bbf9225d70bb\": \"0883a81b-ca0e-42c3-9160-bbf9225d70bb\", \"9cf30eff-3355-449a-b3ac-6618004cd844\": \"9cf30eff-3355-449a-b3ac-6618004cd844\", \"4922bd02-f3c6-41e7-9707-647a9e95431c\": \"4922bd02-f3c6-41e7-9707-647a9e95431c\", \"81537668-a33c-47dd-a606-0300dcb9693c\": \"81537668-a33c-47dd-a606-0300dcb9693c\", \"cfad8120-58ae-4dd3-be73-4f00d49a892e\": \"cfad8120-58ae-4dd3-be73-4f00d49a892e\", \"30c30d95-a2b8-472f-89a9-a635abd54524\": \"30c30d95-a2b8-472f-89a9-a635abd54524\", \"6a464c37-a553-453a-bc30-3a1cd0cba117\": \"6a464c37-a553-453a-bc30-3a1cd0cba117\", \"aaa25476-966a-4b2e-931a-f86afbd9776c\": \"aaa25476-966a-4b2e-931a-f86afbd9776c\", \"7fdfe480-4105-4ddc-a52c-09c97e7306f0\": \"7fdfe480-4105-4ddc-a52c-09c97e7306f0\", \"64368110-a64b-40d6-afa8-efe352e7f14f\": \"64368110-a64b-40d6-afa8-efe352e7f14f\", \"7129c8b9-2cc9-411b-b409-ac3c253e5a85\": \"7129c8b9-2cc9-411b-b409-ac3c253e5a85\", \"8e9f86e6-f92d-46ad-b4a3-2d0922823b4b\": \"8e9f86e6-f92d-46ad-b4a3-2d0922823b4b\", \"862f209b-4726-4280-ac39-707335232ad3\": \"862f209b-4726-4280-ac39-707335232ad3\", \"24e42146-6afd-48b7-92b2-d59ea0cc6e66\": \"24e42146-6afd-48b7-92b2-d59ea0cc6e66\", \"75c02bcb-59e9-4b2b-9cfc-3282b991aad4\": \"75c02bcb-59e9-4b2b-9cfc-3282b991aad4\", \"a24e65a0-3250-4128-9a7e-5abcf5680507\": \"a24e65a0-3250-4128-9a7e-5abcf5680507\", \"870ca7b2-927f-46c9-bda0-08a2580e40ae\": \"870ca7b2-927f-46c9-bda0-08a2580e40ae\", \"775eb4a5-7bbc-4295-8669-3c26bc72657b\": \"775eb4a5-7bbc-4295-8669-3c26bc72657b\", \"a7a4901f-ce58-4cad-bcb8-db5cdb2228ca\": \"a7a4901f-ce58-4cad-bcb8-db5cdb2228ca\", \"72bbe8d7-eda1-4878-9252-2374467c5315\": \"72bbe8d7-eda1-4878-9252-2374467c5315\", \"5d10e8b2-e80e-4a10-a245-c53b071b1a41\": \"5d10e8b2-e80e-4a10-a245-c53b071b1a41\", \"95ea2a7e-35bd-43c0-a36c-930fdd67327d\": \"95ea2a7e-35bd-43c0-a36c-930fdd67327d\", \"c218c00d-cdd8-43af-ace0-1822b4ac2f00\": \"c218c00d-cdd8-43af-ace0-1822b4ac2f00\", \"2a8bf9b0-3084-46aa-89f6-1c52f4caab5d\": \"2a8bf9b0-3084-46aa-89f6-1c52f4caab5d\", \"37a85f2d-c14f-43e9-9c6c-08278d986919\": \"37a85f2d-c14f-43e9-9c6c-08278d986919\", \"e75e15d4-fade-43b6-9f80-d32ca046e7bc\": \"e75e15d4-fade-43b6-9f80-d32ca046e7bc\", \"e44cbf4c-3fcb-4e75-a53b-a6f924c4ec8c\": \"e44cbf4c-3fcb-4e75-a53b-a6f924c4ec8c\", \"2c8056b3-98dc-4639-b258-0e3fe3b7b04c\": \"2c8056b3-98dc-4639-b258-0e3fe3b7b04c\", \"a3a27200-1ebe-41f1-b02b-3c12ffebf94b\": \"a3a27200-1ebe-41f1-b02b-3c12ffebf94b\", \"c3ff5897-e6e9-4ed0-a539-9d811fc2cf6c\": \"c3ff5897-e6e9-4ed0-a539-9d811fc2cf6c\", \"176ccf10-042c-41f1-b166-30ada0f525e4\": \"176ccf10-042c-41f1-b166-30ada0f525e4\", \"2322e675-4816-4296-9104-2c58df0d546a\": \"2322e675-4816-4296-9104-2c58df0d546a\", \"9ea96c96-0882-4cc0-ad0e-a752d748b1c3\": \"9ea96c96-0882-4cc0-ad0e-a752d748b1c3\", \"e6a44a71-8e3a-4f42-a5a4-810df17c3ec1\": \"e6a44a71-8e3a-4f42-a5a4-810df17c3ec1\", \"82f30e46-df86-463a-a64c-40a79ada45df\": \"82f30e46-df86-463a-a64c-40a79ada45df\", \"2e0ef556-019e-474d-aa7f-02ea3ae2a795\": \"2e0ef556-019e-474d-aa7f-02ea3ae2a795\", \"a39ebcb8-8064-4ee4-8485-75bafe7296b5\": \"a39ebcb8-8064-4ee4-8485-75bafe7296b5\", \"e71ab875-f4fc-4260-9c2b-26e255422601\": \"e71ab875-f4fc-4260-9c2b-26e255422601\", \"fba4e54e-1666-4b66-8812-ebd591eb6ba0\": \"fba4e54e-1666-4b66-8812-ebd591eb6ba0\", \"62ee6418-1cb0-4dc5-a926-e697e4fff2ab\": \"62ee6418-1cb0-4dc5-a926-e697e4fff2ab\", \"19d559d1-461c-4b51-b6ef-793c711aea53\": \"19d559d1-461c-4b51-b6ef-793c711aea53\", \"5d493805-28c8-4afc-ab28-9c58aa36b73e\": \"5d493805-28c8-4afc-ab28-9c58aa36b73e\", \"9904fc59-314b-455c-9973-28368c08ed5f\": \"9904fc59-314b-455c-9973-28368c08ed5f\", \"9e6fd54b-2260-47f0-bd33-4eeaa5769294\": \"9e6fd54b-2260-47f0-bd33-4eeaa5769294\", \"6070eb35-c944-4aa2-9a81-a56c5c4cd3e3\": \"6070eb35-c944-4aa2-9a81-a56c5c4cd3e3\", \"3747c285-545c-46f9-bf12-19a14ba2151d\": \"3747c285-545c-46f9-bf12-19a14ba2151d\", \"00dc87d9-b724-4a74-bc82-878d34605fb8\": \"00dc87d9-b724-4a74-bc82-878d34605fb8\", \"5e22cdd6-8fd5-4fe0-afef-d812698f89ee\": \"5e22cdd6-8fd5-4fe0-afef-d812698f89ee\", \"32c369e4-a2e4-4d6b-91f0-091d516fcc9b\": \"32c369e4-a2e4-4d6b-91f0-091d516fcc9b\", \"50a7f005-1eb6-432f-a9ac-5c2c409fdb71\": \"50a7f005-1eb6-432f-a9ac-5c2c409fdb71\", \"67d3d857-e28a-4c05-b71e-5d61e482c440\": \"67d3d857-e28a-4c05-b71e-5d61e482c440\", \"93ce97dc-7a10-47c3-8aa7-eb7f5b340fd1\": \"93ce97dc-7a10-47c3-8aa7-eb7f5b340fd1\", \"bc12f24e-16d7-49a6-977e-327a09a7563a\": \"bc12f24e-16d7-49a6-977e-327a09a7563a\", \"99f3d392-2b19-45f9-863e-4e986aa56f13\": \"99f3d392-2b19-45f9-863e-4e986aa56f13\", \"5d1cb808-bcc1-4898-94ca-505bf610c96d\": \"5d1cb808-bcc1-4898-94ca-505bf610c96d\", \"d5f4b944-088f-4c14-bb73-b66295bb10ea\": \"d5f4b944-088f-4c14-bb73-b66295bb10ea\", \"54a5ed84-c936-4c24-870a-8f371e7be815\": \"54a5ed84-c936-4c24-870a-8f371e7be815\", \"14102fd0-c524-404e-a303-ad5686b0d9d8\": \"14102fd0-c524-404e-a303-ad5686b0d9d8\", \"f94e3ae4-a636-4956-b377-d5c293ebb9a8\": \"f94e3ae4-a636-4956-b377-d5c293ebb9a8\", \"6a6bf203-a3ff-46c1-aea5-aa00775f5b5c\": \"6a6bf203-a3ff-46c1-aea5-aa00775f5b5c\", \"78b60af6-0d29-43ee-9b6d-150767a7a333\": \"78b60af6-0d29-43ee-9b6d-150767a7a333\", \"74ed6cd2-35d7-4184-82ee-ded4ea1fa3e5\": \"74ed6cd2-35d7-4184-82ee-ded4ea1fa3e5\", \"9713dca6-528a-4344-b969-1716fd3dcc01\": \"9713dca6-528a-4344-b969-1716fd3dcc01\", \"f21fcc32-680a-46a9-80b8-061829697dbf\": \"f21fcc32-680a-46a9-80b8-061829697dbf\", \"6788ba9a-cebe-4c15-8066-cea6c950d18e\": \"6788ba9a-cebe-4c15-8066-cea6c950d18e\", \"8ba8aff1-5aff-407d-acfd-0b7d225a5048\": \"8ba8aff1-5aff-407d-acfd-0b7d225a5048\", \"30b047d1-2851-44af-ac6a-3ccea5caf17f\": \"30b047d1-2851-44af-ac6a-3ccea5caf17f\", \"df4fac70-10d2-4ccf-9f96-9dc02d429c65\": \"df4fac70-10d2-4ccf-9f96-9dc02d429c65\", \"4b222dbc-e684-493c-9ae1-f20755289052\": \"4b222dbc-e684-493c-9ae1-f20755289052\", \"6a5c1ddf-1830-4688-8d75-3ef63980f3d9\": \"6a5c1ddf-1830-4688-8d75-3ef63980f3d9\", \"12f4167a-7068-4d88-b089-5b6d6b6575e8\": \"12f4167a-7068-4d88-b089-5b6d6b6575e8\", \"b9e3ba0e-239b-484e-96f3-1c7da0da9942\": \"b9e3ba0e-239b-484e-96f3-1c7da0da9942\", \"62941bf3-892f-419e-8d66-512d961ba1a2\": \"62941bf3-892f-419e-8d66-512d961ba1a2\", \"86dca8fa-b952-45e3-9774-5aad5ea7e1b8\": \"86dca8fa-b952-45e3-9774-5aad5ea7e1b8\", \"fb6df953-3ea8-47e3-aaa0-3e24eca8ca45\": \"fb6df953-3ea8-47e3-aaa0-3e24eca8ca45\", \"e5702624-c74c-4920-9323-7771d5125988\": \"e5702624-c74c-4920-9323-7771d5125988\", \"ddffe038-b071-49e2-abf2-0d5a6a3ff643\": \"ddffe038-b071-49e2-abf2-0d5a6a3ff643\", \"d86144fc-f112-48d6-90d9-f7c8b0dede02\": \"d86144fc-f112-48d6-90d9-f7c8b0dede02\", \"8d2117f7-3e8d-4f75-8505-44bfc1652fee\": \"8d2117f7-3e8d-4f75-8505-44bfc1652fee\", \"7a9d435a-1111-4c05-b610-3b3a13eb46ae\": \"7a9d435a-1111-4c05-b610-3b3a13eb46ae\", \"0d1c89a2-710b-4af6-b4ac-b3678044ca7a\": \"0d1c89a2-710b-4af6-b4ac-b3678044ca7a\", \"a369d952-38ca-46b5-b2fb-80181ca695bc\": \"a369d952-38ca-46b5-b2fb-80181ca695bc\", \"85134143-0333-4e66-a062-237fe1b851c4\": \"85134143-0333-4e66-a062-237fe1b851c4\", \"77f268d7-c2eb-4af2-9674-d6c673c1de18\": \"77f268d7-c2eb-4af2-9674-d6c673c1de18\", \"fa9dcf79-3fa5-4ec8-bc95-0d6fbb583f86\": \"fa9dcf79-3fa5-4ec8-bc95-0d6fbb583f86\", \"43e2ef6e-054d-4ab9-a4d0-108ad63629c9\": \"43e2ef6e-054d-4ab9-a4d0-108ad63629c9\", \"884f583e-27b8-4560-ada5-1938b1e4ad35\": \"884f583e-27b8-4560-ada5-1938b1e4ad35\", \"a8209104-6069-4614-9b69-81a52b5c940b\": \"a8209104-6069-4614-9b69-81a52b5c940b\", \"f59832fd-0fbe-4a94-a873-900cb31b1829\": \"f59832fd-0fbe-4a94-a873-900cb31b1829\", \"218fa7e0-273f-4608-afbf-d1c0d82b7268\": \"218fa7e0-273f-4608-afbf-d1c0d82b7268\", \"372c7e12-b6d0-4b34-bfa4-8e34ad24de47\": \"372c7e12-b6d0-4b34-bfa4-8e34ad24de47\", \"0fbb60f5-d588-4415-b6ad-52d747f45d12\": \"0fbb60f5-d588-4415-b6ad-52d747f45d12\", \"b065986b-0c97-47cb-a0f2-673a8667c9da\": \"b065986b-0c97-47cb-a0f2-673a8667c9da\", \"08b307f7-2cd0-46c7-beae-26eebab0daa8\": \"08b307f7-2cd0-46c7-beae-26eebab0daa8\", \"8dbdf3b5-3370-45ba-8f04-104cde1d5554\": \"8dbdf3b5-3370-45ba-8f04-104cde1d5554\", \"4176d9fd-e020-478c-90ff-4ca14eb3049b\": \"4176d9fd-e020-478c-90ff-4ca14eb3049b\", \"82a6cc3c-99c4-4dcf-89d0-5d59cfd51276\": \"82a6cc3c-99c4-4dcf-89d0-5d59cfd51276\", \"b5e98281-32db-487a-bfa1-ab793ec64765\": \"b5e98281-32db-487a-bfa1-ab793ec64765\", \"d9d8ff19-3a4b-4f7c-aa37-d9784fba8d59\": \"d9d8ff19-3a4b-4f7c-aa37-d9784fba8d59\", \"997af7c0-663c-4ac4-8d5c-e6a370fdd578\": \"997af7c0-663c-4ac4-8d5c-e6a370fdd578\", \"3171acd9-3d09-4d35-b9c1-9b39dc300a34\": \"3171acd9-3d09-4d35-b9c1-9b39dc300a34\", \"19bccbdd-3416-4da2-b30c-be229c7e145a\": \"19bccbdd-3416-4da2-b30c-be229c7e145a\", \"c5789c2a-1b34-4231-9a5e-b4d5b803e302\": \"c5789c2a-1b34-4231-9a5e-b4d5b803e302\", \"26334702-f85a-4b1a-ba20-3a647f01c1f6\": \"26334702-f85a-4b1a-ba20-3a647f01c1f6\", \"5fa05891-d28c-408f-8c8c-a43826518cd5\": \"5fa05891-d28c-408f-8c8c-a43826518cd5\", \"63deae96-b42a-47ad-ab8d-ff65e21918bc\": \"63deae96-b42a-47ad-ab8d-ff65e21918bc\", \"d5770a97-4358-4f49-b051-1fd11ee4f4a9\": \"d5770a97-4358-4f49-b051-1fd11ee4f4a9\", \"53670fa9-f0cc-45a0-92af-73ae0bff98dd\": \"53670fa9-f0cc-45a0-92af-73ae0bff98dd\", \"27fc2ced-43a9-438b-802d-cd4fdbefaa49\": \"27fc2ced-43a9-438b-802d-cd4fdbefaa49\", \"7f3524c0-df73-4843-bfdb-d2a399fde378\": \"7f3524c0-df73-4843-bfdb-d2a399fde378\", \"f563a401-4582-4420-b157-b6c599199346\": \"f563a401-4582-4420-b157-b6c599199346\", \"06fb7a43-859c-41e1-85fe-139f18576942\": \"06fb7a43-859c-41e1-85fe-139f18576942\", \"1b1b2896-f1c8-4aef-952c-d95922d96e06\": \"1b1b2896-f1c8-4aef-952c-d95922d96e06\", \"3fd18fa4-e4b8-46c8-a945-b2dc674a30b8\": \"3fd18fa4-e4b8-46c8-a945-b2dc674a30b8\", \"408d302f-dc35-4b07-930a-a38851b4a4c4\": \"408d302f-dc35-4b07-930a-a38851b4a4c4\", \"bfdedf13-d185-4c4e-994c-6bd561fcefa1\": \"bfdedf13-d185-4c4e-994c-6bd561fcefa1\", \"bae03037-7206-40b6-a768-4d559297aa6f\": \"bae03037-7206-40b6-a768-4d559297aa6f\", \"6223f231-d3e6-41ae-b3ae-f0ac3df439bd\": \"6223f231-d3e6-41ae-b3ae-f0ac3df439bd\", \"add500ec-633f-452f-b1fe-347ef5f792f4\": \"add500ec-633f-452f-b1fe-347ef5f792f4\", \"30cdb631-41f9-481e-a4f8-c6ab459ea913\": \"30cdb631-41f9-481e-a4f8-c6ab459ea913\", \"821ed684-3c9d-49ca-a8b9-d960d10747b0\": \"821ed684-3c9d-49ca-a8b9-d960d10747b0\", \"e6771ac0-5cf8-47f5-9860-bf6b3458a616\": \"e6771ac0-5cf8-47f5-9860-bf6b3458a616\", \"c5210397-649e-4128-bc7b-cc3271bc7223\": \"c5210397-649e-4128-bc7b-cc3271bc7223\", \"45155a49-33fe-4e7a-9abc-576481295c5d\": \"45155a49-33fe-4e7a-9abc-576481295c5d\", \"8f7e646c-8a88-492b-839a-0b4651c36034\": \"8f7e646c-8a88-492b-839a-0b4651c36034\", \"e3a5f99a-2b63-4e48-8496-c2c92f9d95eb\": \"e3a5f99a-2b63-4e48-8496-c2c92f9d95eb\", \"2503ba42-7446-49aa-9b58-bdd27197c539\": \"2503ba42-7446-49aa-9b58-bdd27197c539\", \"89c87226-c62f-478d-80ec-b5ddd549f6d4\": \"89c87226-c62f-478d-80ec-b5ddd549f6d4\", \"30f3a1de-f5f0-4824-9f38-4b01feda9b53\": \"30f3a1de-f5f0-4824-9f38-4b01feda9b53\", \"154eeae8-c19c-4efd-8c95-acaf18122f4b\": \"154eeae8-c19c-4efd-8c95-acaf18122f4b\", \"904fee45-74f8-4d38-94de-d29fdc092b82\": \"904fee45-74f8-4d38-94de-d29fdc092b82\", \"5cc9b3c4-c69b-4e50-892c-e8bbc20d1d2a\": \"5cc9b3c4-c69b-4e50-892c-e8bbc20d1d2a\", \"40cd068b-e130-4b69-9ef0-73aa297a8ff9\": \"40cd068b-e130-4b69-9ef0-73aa297a8ff9\", \"95ad0cf1-db39-4b41-8a2f-1a3cfaa52b45\": \"95ad0cf1-db39-4b41-8a2f-1a3cfaa52b45\", \"8e494d99-a489-402f-95e3-b6249a8ff4c5\": \"8e494d99-a489-402f-95e3-b6249a8ff4c5\", \"c85ac059-02ef-408b-a6aa-688ea6509007\": \"c85ac059-02ef-408b-a6aa-688ea6509007\", \"94464ed7-2ac4-4ac4-a565-99498088c773\": \"94464ed7-2ac4-4ac4-a565-99498088c773\", \"aa03daf7-8fae-47ea-b641-d6fe58ed4f4a\": \"aa03daf7-8fae-47ea-b641-d6fe58ed4f4a\", \"fd6e5211-4078-4df1-8f7f-9ad8d31b12fd\": \"fd6e5211-4078-4df1-8f7f-9ad8d31b12fd\", \"56d54d5c-2fa2-4fae-9e87-7d5feba8a0cf\": \"56d54d5c-2fa2-4fae-9e87-7d5feba8a0cf\", \"87d35aef-e1ad-48e9-985d-4643704f7ad5\": \"87d35aef-e1ad-48e9-985d-4643704f7ad5\", \"d0baa760-2772-424e-aefc-c43106b26e01\": \"d0baa760-2772-424e-aefc-c43106b26e01\", \"8e5545d4-5867-498e-8afa-76960381b84f\": \"8e5545d4-5867-498e-8afa-76960381b84f\", \"b72ab46a-03f1-4fa3-a155-15c113b6e850\": \"b72ab46a-03f1-4fa3-a155-15c113b6e850\", \"76052fc7-9dc6-4bb7-a3e6-b52e920ad64b\": \"76052fc7-9dc6-4bb7-a3e6-b52e920ad64b\", \"0606b707-c603-4a6d-bb46-a5c687db9aeb\": \"0606b707-c603-4a6d-bb46-a5c687db9aeb\", \"1da574e4-e3dd-4b6a-9793-005cc1f57aa1\": \"1da574e4-e3dd-4b6a-9793-005cc1f57aa1\", \"6b5684d1-942b-4604-8647-1340e4d434a7\": \"6b5684d1-942b-4604-8647-1340e4d434a7\", \"570cabe6-4dcd-44ae-870d-4710c7d8d96d\": \"570cabe6-4dcd-44ae-870d-4710c7d8d96d\", \"b38dbf02-1768-46fa-9803-0cd64e64059a\": \"b38dbf02-1768-46fa-9803-0cd64e64059a\", \"97da02f8-deb4-4fef-9e8d-38b4e9460ebb\": \"97da02f8-deb4-4fef-9e8d-38b4e9460ebb\", \"6d5f6dd5-c1b5-42bf-b113-27f689b73301\": \"6d5f6dd5-c1b5-42bf-b113-27f689b73301\", \"82591632-9621-4039-852a-675ff994cc53\": \"82591632-9621-4039-852a-675ff994cc53\", \"520490c6-2b1d-44f0-b72d-f376f5d98c52\": \"520490c6-2b1d-44f0-b72d-f376f5d98c52\", \"9e5dea02-8a76-463e-81da-4e2ab7668845\": \"9e5dea02-8a76-463e-81da-4e2ab7668845\", \"25437fd0-a91d-46c1-970a-89e8183e02e6\": \"25437fd0-a91d-46c1-970a-89e8183e02e6\", \"f297983f-d89b-41ca-b101-1fc2bac6b246\": \"f297983f-d89b-41ca-b101-1fc2bac6b246\", \"977c9bc9-feb7-4f87-9925-bbb1cdebc4a2\": \"977c9bc9-feb7-4f87-9925-bbb1cdebc4a2\", \"91b3be2e-7089-4370-87dd-b85cfd85af76\": \"91b3be2e-7089-4370-87dd-b85cfd85af76\", \"878d9eaf-14ef-43b4-b28a-14da08c076fb\": \"878d9eaf-14ef-43b4-b28a-14da08c076fb\", \"f73f8251-d004-4b64-b476-fa0e93978687\": \"f73f8251-d004-4b64-b476-fa0e93978687\", \"68a59ec6-a429-45d2-82d9-5dceb68e9bcb\": \"68a59ec6-a429-45d2-82d9-5dceb68e9bcb\", \"46329dba-2014-4b2b-bd7c-5d2d18b43e2e\": \"46329dba-2014-4b2b-bd7c-5d2d18b43e2e\", \"b470fff3-7e38-4fc7-a4f8-3a95af3f211d\": \"b470fff3-7e38-4fc7-a4f8-3a95af3f211d\", \"181591bc-9ac5-4795-9f8f-e4202fc8fce1\": \"181591bc-9ac5-4795-9f8f-e4202fc8fce1\", \"7cc4fb49-7cc3-4b45-9343-e972d64078d5\": \"7cc4fb49-7cc3-4b45-9343-e972d64078d5\", \"9c1d954e-f717-4a74-a44f-5c748c8b5df9\": \"9c1d954e-f717-4a74-a44f-5c748c8b5df9\", \"285e0341-2c91-4fce-ab61-05b08403e88e\": \"285e0341-2c91-4fce-ab61-05b08403e88e\", \"7d2ff61a-b826-408b-bbd0-ad17163f11ef\": \"7d2ff61a-b826-408b-bbd0-ad17163f11ef\", \"a65d3c4b-a1d6-4e79-b94b-1761976e55a8\": \"a65d3c4b-a1d6-4e79-b94b-1761976e55a8\", \"1a2de8f3-dbb3-4f01-be08-7e6e89efe6d1\": \"1a2de8f3-dbb3-4f01-be08-7e6e89efe6d1\", \"f54ba03d-8f8f-49d4-8ab0-68455b750a36\": \"f54ba03d-8f8f-49d4-8ab0-68455b750a36\", \"dfd9e75d-fbfe-4246-810f-01615479ccab\": \"dfd9e75d-fbfe-4246-810f-01615479ccab\", \"65e78e71-470e-4dcd-941b-cb4ee7330106\": \"65e78e71-470e-4dcd-941b-cb4ee7330106\", \"456ec3ac-8882-4069-8be2-825f4a06c6aa\": \"456ec3ac-8882-4069-8be2-825f4a06c6aa\", \"1323401d-882c-4dd9-a82d-3270feb8ffcf\": \"1323401d-882c-4dd9-a82d-3270feb8ffcf\", \"2ba4900e-870a-498c-a501-bac0c3b3c8f7\": \"2ba4900e-870a-498c-a501-bac0c3b3c8f7\", \"4919541d-b9a7-4b51-8e1d-f3704af91f20\": \"4919541d-b9a7-4b51-8e1d-f3704af91f20\", \"8dbb6da8-57a3-4aca-ab51-1a433c990a4c\": \"8dbb6da8-57a3-4aca-ab51-1a433c990a4c\", \"56240f7d-0190-4200-b695-88e7c5cd75c9\": \"56240f7d-0190-4200-b695-88e7c5cd75c9\", \"22f63f73-edf9-4eee-a4aa-3b05ec3cf1c5\": \"22f63f73-edf9-4eee-a4aa-3b05ec3cf1c5\", \"fac7b472-a6f8-4eb8-9f44-0868a686373a\": \"fac7b472-a6f8-4eb8-9f44-0868a686373a\", \"e9b4f3f9-8122-4161-bc3c-85dc1b40274b\": \"e9b4f3f9-8122-4161-bc3c-85dc1b40274b\", \"8806bb02-4e6d-4868-bf52-5cac18777587\": \"8806bb02-4e6d-4868-bf52-5cac18777587\", \"b6aa2d0c-f821-4058-8eae-fcb473ada3bc\": \"b6aa2d0c-f821-4058-8eae-fcb473ada3bc\", \"b3daa57e-00e1-4223-a00c-d54fe6dea006\": \"b3daa57e-00e1-4223-a00c-d54fe6dea006\", \"05db6345-f308-454d-aa58-3b42e18f8d83\": \"05db6345-f308-454d-aa58-3b42e18f8d83\", \"5e4c8c98-cebf-4165-9ec8-afd4b30214a3\": \"5e4c8c98-cebf-4165-9ec8-afd4b30214a3\", \"8017edaa-0d55-4551-8136-c9c845b069a7\": \"8017edaa-0d55-4551-8136-c9c845b069a7\", \"e8454562-0706-4325-ac93-d916bc8951b7\": \"e8454562-0706-4325-ac93-d916bc8951b7\", \"1a94c570-9a63-4bbb-af72-7b78bdf0d506\": \"1a94c570-9a63-4bbb-af72-7b78bdf0d506\", \"fa5a9297-4719-44a9-a7a2-705626287241\": \"fa5a9297-4719-44a9-a7a2-705626287241\", \"869e155e-3dd9-45c9-b14c-7e7fdf362997\": \"869e155e-3dd9-45c9-b14c-7e7fdf362997\", \"2af3a8d6-8f58-4b97-9946-34b6085f7b97\": \"2af3a8d6-8f58-4b97-9946-34b6085f7b97\", \"2ebdac59-28ba-4271-9657-51cfc6d2c010\": \"2ebdac59-28ba-4271-9657-51cfc6d2c010\", \"94f8f0ca-686c-4db8-8c8f-40e31073e055\": \"94f8f0ca-686c-4db8-8c8f-40e31073e055\", \"3bc1f4b9-b289-48a1-a56c-b27103907e6a\": \"3bc1f4b9-b289-48a1-a56c-b27103907e6a\", \"ef7d4481-24ef-4953-a0f3-8db20eb7dfda\": \"ef7d4481-24ef-4953-a0f3-8db20eb7dfda\", \"ea6a4e1f-b721-4677-b852-6bffeecba927\": \"ea6a4e1f-b721-4677-b852-6bffeecba927\", \"75cc0338-ec03-4542-828a-5ec219922fcc\": \"75cc0338-ec03-4542-828a-5ec219922fcc\", \"d4b53160-806b-4b86-9223-f1f079bdc6ea\": \"d4b53160-806b-4b86-9223-f1f079bdc6ea\", \"4aae69cc-bbab-4562-a830-ff73df99a2fc\": \"4aae69cc-bbab-4562-a830-ff73df99a2fc\", \"5eef04a1-f606-4c2b-ad06-a076a583c443\": \"5eef04a1-f606-4c2b-ad06-a076a583c443\", \"62f95efd-a96c-496f-a2cc-f028b85c8f02\": \"62f95efd-a96c-496f-a2cc-f028b85c8f02\", \"b61209f0-d595-4baa-8423-2419e25f0849\": \"b61209f0-d595-4baa-8423-2419e25f0849\", \"889df466-c26e-46b7-82bf-87a6caba9459\": \"889df466-c26e-46b7-82bf-87a6caba9459\", \"2f58a185-d183-46ef-90a0-d67c39ce9682\": \"2f58a185-d183-46ef-90a0-d67c39ce9682\", \"cd1f1676-8746-44d6-82d1-775625820c42\": \"cd1f1676-8746-44d6-82d1-775625820c42\", \"b10699b6-9c69-4d11-adae-214feea455e6\": \"b10699b6-9c69-4d11-adae-214feea455e6\", \"f7a539eb-75dc-4ff5-8b53-5bd183a40fd8\": \"f7a539eb-75dc-4ff5-8b53-5bd183a40fd8\", \"bc6bade1-248e-456e-8b80-92123b82d53a\": \"bc6bade1-248e-456e-8b80-92123b82d53a\", \"d4e49ec7-a56f-43de-9d02-2c4e008f9841\": \"d4e49ec7-a56f-43de-9d02-2c4e008f9841\", \"34761701-c67a-4e5d-8dd6-0cf78ade81b7\": \"34761701-c67a-4e5d-8dd6-0cf78ade81b7\", \"a07ba6a7-e315-4320-832f-0f82a9088500\": \"a07ba6a7-e315-4320-832f-0f82a9088500\", \"882343df-68d4-4418-8397-46cab8454b6b\": \"882343df-68d4-4418-8397-46cab8454b6b\", \"c3611632-dbab-4bb7-8bd7-4e2282437db3\": \"c3611632-dbab-4bb7-8bd7-4e2282437db3\", \"e6561e22-6546-4af7-ab08-562d59cc4acb\": \"e6561e22-6546-4af7-ab08-562d59cc4acb\", \"21f36b78-3d42-4b01-af02-f65f57d46bd7\": \"21f36b78-3d42-4b01-af02-f65f57d46bd7\", \"5e1a8eb5-502d-460b-8dc0-8f697555650b\": \"5e1a8eb5-502d-460b-8dc0-8f697555650b\", \"c7709fd8-879c-4ce9-b40e-cc04580a8293\": \"c7709fd8-879c-4ce9-b40e-cc04580a8293\", \"f4230546-1a86-417a-b043-0797b5181cb8\": \"f4230546-1a86-417a-b043-0797b5181cb8\", \"52dcddff-9ae6-44f2-b7f4-910fd4ec2e77\": \"52dcddff-9ae6-44f2-b7f4-910fd4ec2e77\", \"9e9f6d33-7087-40de-a698-588bc1292705\": \"9e9f6d33-7087-40de-a698-588bc1292705\", \"6d719738-b4e3-4c65-b2a7-64607e521b02\": \"6d719738-b4e3-4c65-b2a7-64607e521b02\", \"1c17dbd8-310a-4173-8547-c29641d0d692\": \"1c17dbd8-310a-4173-8547-c29641d0d692\", \"92bcfae6-692e-4f6a-b77b-696be245cc4b\": \"92bcfae6-692e-4f6a-b77b-696be245cc4b\", \"3972000a-61fc-4759-be17-85c1bb9a18b4\": \"3972000a-61fc-4759-be17-85c1bb9a18b4\", \"6b4f86b7-460f-4226-af7e-cf9167e53606\": \"6b4f86b7-460f-4226-af7e-cf9167e53606\", \"88f27290-0d40-408b-8dd0-c1d2fa878a44\": \"88f27290-0d40-408b-8dd0-c1d2fa878a44\", \"8387e7da-6c97-41b6-8137-fe75a4ed66b4\": \"8387e7da-6c97-41b6-8137-fe75a4ed66b4\", \"58f239bc-4642-4322-b9fb-217d4fffb51d\": \"58f239bc-4642-4322-b9fb-217d4fffb51d\", \"39a73316-98a6-49a9-9183-c95c68fee3d2\": \"39a73316-98a6-49a9-9183-c95c68fee3d2\", \"73d48ed3-8c18-4edf-af48-cfffd2606642\": \"73d48ed3-8c18-4edf-af48-cfffd2606642\", \"ea9ba602-2078-4bcc-b194-85a1b28e4082\": \"ea9ba602-2078-4bcc-b194-85a1b28e4082\", \"b0d50aef-24fc-401a-80b1-a7d98d115198\": \"b0d50aef-24fc-401a-80b1-a7d98d115198\", \"07f6fed7-1949-4c9e-a9f0-d3ede1d6d724\": \"07f6fed7-1949-4c9e-a9f0-d3ede1d6d724\", \"f7a6403a-dd70-4c0c-8161-f9106e69ed6e\": \"f7a6403a-dd70-4c0c-8161-f9106e69ed6e\", \"8b6c3acd-155d-45a2-a864-0671853fe58a\": \"8b6c3acd-155d-45a2-a864-0671853fe58a\", \"d8feeef9-23c8-4f2b-9cfe-9dd80ea70f7c\": \"d8feeef9-23c8-4f2b-9cfe-9dd80ea70f7c\", \"ad84e575-0b40-447c-8463-06595f977f95\": \"ad84e575-0b40-447c-8463-06595f977f95\", \"a8a53daf-84de-4616-9b94-32f8e402a575\": \"a8a53daf-84de-4616-9b94-32f8e402a575\", \"f4b9f3d1-745b-4445-b451-b03ff10538f8\": \"f4b9f3d1-745b-4445-b451-b03ff10538f8\", \"4025d90f-1a54-410a-8603-f4cfd3aa43ae\": \"4025d90f-1a54-410a-8603-f4cfd3aa43ae\", \"2c573a61-d0e6-4457-95be-34ea2376a477\": \"2c573a61-d0e6-4457-95be-34ea2376a477\", \"1b51edeb-e388-4e52-9e23-a42fc2796854\": \"1b51edeb-e388-4e52-9e23-a42fc2796854\", \"9a7808ed-ea82-411e-b001-ea5a3012e89a\": \"9a7808ed-ea82-411e-b001-ea5a3012e89a\", \"268eb146-683d-40fa-86b2-5a355bc5f693\": \"268eb146-683d-40fa-86b2-5a355bc5f693\", \"9f7a5700-d85a-4100-8f0d-bf17141ab974\": \"9f7a5700-d85a-4100-8f0d-bf17141ab974\", \"d23bf1c2-3433-4631-a6b0-6cbd3d877014\": \"d23bf1c2-3433-4631-a6b0-6cbd3d877014\", \"762e1491-96c2-4af2-bf04-7124968d7a70\": \"762e1491-96c2-4af2-bf04-7124968d7a70\", \"20401826-972a-4b64-9d56-8bfa25ec56bc\": \"20401826-972a-4b64-9d56-8bfa25ec56bc\", \"a319a0c4-036c-4bea-8b23-8605501acbed\": \"a319a0c4-036c-4bea-8b23-8605501acbed\", \"615d3e08-7855-4486-92b6-ae49fe18a068\": \"615d3e08-7855-4486-92b6-ae49fe18a068\", \"1f91cb52-67a3-42c0-b522-8413c9ecba36\": \"1f91cb52-67a3-42c0-b522-8413c9ecba36\", \"cf40998a-21e0-4806-bd77-6a303d636efc\": \"cf40998a-21e0-4806-bd77-6a303d636efc\", \"5d5f760d-0af6-486f-918e-c9c146a568d7\": \"5d5f760d-0af6-486f-918e-c9c146a568d7\", \"2b161a4b-5c45-40fe-9a3a-4d626f9d94d2\": \"2b161a4b-5c45-40fe-9a3a-4d626f9d94d2\", \"9e8154cb-8f14-4413-ae1c-cfac66d58fee\": \"9e8154cb-8f14-4413-ae1c-cfac66d58fee\", \"8ba5898c-8e83-4c9a-9976-ec115f5352ac\": \"8ba5898c-8e83-4c9a-9976-ec115f5352ac\", \"1e88cac6-ef91-4f87-8aea-dc984819a8eb\": \"1e88cac6-ef91-4f87-8aea-dc984819a8eb\", \"a8d97de3-4fd6-4a91-a8d7-5b87d4a1fac0\": \"a8d97de3-4fd6-4a91-a8d7-5b87d4a1fac0\", \"e893064d-8b16-45ee-951b-63ed95f02031\": \"e893064d-8b16-45ee-951b-63ed95f02031\", \"02be2994-7fde-4481-8b4f-4939833f7da9\": \"02be2994-7fde-4481-8b4f-4939833f7da9\", \"9c99577c-e66d-488f-b57c-d93aae1c207c\": \"9c99577c-e66d-488f-b57c-d93aae1c207c\", \"4edd043a-9865-4974-9b98-6686740e080d\": \"4edd043a-9865-4974-9b98-6686740e080d\", \"9f7c1305-54d9-4dde-b9ee-608052fe5073\": \"9f7c1305-54d9-4dde-b9ee-608052fe5073\", \"06ffa14b-3d26-4ddc-ac53-e240931c5e7b\": \"06ffa14b-3d26-4ddc-ac53-e240931c5e7b\", \"103718e7-a31f-4284-9775-038e3e993c06\": \"103718e7-a31f-4284-9775-038e3e993c06\", \"1f318e0b-9d4a-4c5d-87e0-19d50157bda8\": \"1f318e0b-9d4a-4c5d-87e0-19d50157bda8\", \"f0b4a233-6324-4d61-ad46-de3f652f579d\": \"f0b4a233-6324-4d61-ad46-de3f652f579d\", \"96206ff1-2be6-4ed9-908c-81f722e5e082\": \"96206ff1-2be6-4ed9-908c-81f722e5e082\", \"7a44eb29-7805-4ee6-bbda-7709db02e2c5\": \"7a44eb29-7805-4ee6-bbda-7709db02e2c5\", \"2277f73f-462c-433b-a082-699f1601cbe3\": \"2277f73f-462c-433b-a082-699f1601cbe3\", \"05223e82-0451-40ee-811e-165e071981d2\": \"05223e82-0451-40ee-811e-165e071981d2\", \"a1eef6bc-d50e-428c-bb80-d1bd2dfc7c58\": \"a1eef6bc-d50e-428c-bb80-d1bd2dfc7c58\", \"f76f11d9-fd23-46b2-b68b-d73dc1c5f421\": \"f76f11d9-fd23-46b2-b68b-d73dc1c5f421\", \"e72d2a04-918d-4470-9a22-6bed6d492eaf\": \"e72d2a04-918d-4470-9a22-6bed6d492eaf\", \"46ef1fbd-da87-4392-86ea-6f2251e8ead2\": \"46ef1fbd-da87-4392-86ea-6f2251e8ead2\", \"e32f1380-7288-4692-86a9-f5b3753539d2\": \"e32f1380-7288-4692-86a9-f5b3753539d2\", \"ee389c1e-cd7e-40ed-b741-f55799fb77d0\": \"ee389c1e-cd7e-40ed-b741-f55799fb77d0\", \"cfad148e-f7b5-4b2a-b9fd-fb53e0880a12\": \"cfad148e-f7b5-4b2a-b9fd-fb53e0880a12\", \"20a18027-7280-439e-877b-c1b6e17784b1\": \"20a18027-7280-439e-877b-c1b6e17784b1\", \"1fad430f-6cfc-41e5-8470-444d7e9c8485\": \"1fad430f-6cfc-41e5-8470-444d7e9c8485\", \"5d3bf44d-204d-45b4-be82-0ddf6dfd984a\": \"5d3bf44d-204d-45b4-be82-0ddf6dfd984a\", \"2bcfac43-e307-4d03-b4bb-d2668df2d5bd\": \"2bcfac43-e307-4d03-b4bb-d2668df2d5bd\", \"c165a09d-7c99-4825-b743-0c250765a5bd\": \"c165a09d-7c99-4825-b743-0c250765a5bd\", \"0285531e-f844-4013-bcb8-785dd5f4eafd\": \"0285531e-f844-4013-bcb8-785dd5f4eafd\", \"c8fb156e-adc9-4ddf-8d67-7c66e4ad1148\": \"c8fb156e-adc9-4ddf-8d67-7c66e4ad1148\", \"e65aab05-1120-45ad-ab1a-2d0ddd251cd6\": \"e65aab05-1120-45ad-ab1a-2d0ddd251cd6\", \"04e1649b-a9d6-4209-9f16-3769fef5a014\": \"04e1649b-a9d6-4209-9f16-3769fef5a014\", \"6135b93c-4e66-4485-a6b2-dbe927489951\": \"6135b93c-4e66-4485-a6b2-dbe927489951\", \"9f1af8ac-471e-4a57-80f1-b518c6b57128\": \"9f1af8ac-471e-4a57-80f1-b518c6b57128\", \"448bf765-34ed-4421-ab1b-6fb0a4be246c\": \"448bf765-34ed-4421-ab1b-6fb0a4be246c\", \"e912aa88-2bf4-41cc-8970-826fdcc431f9\": \"e912aa88-2bf4-41cc-8970-826fdcc431f9\", \"b108bdb5-7a0d-49ea-8d87-51eb7f84301d\": \"b108bdb5-7a0d-49ea-8d87-51eb7f84301d\", \"f504e81a-677e-4778-adf0-54d199f3839f\": \"f504e81a-677e-4778-adf0-54d199f3839f\", \"b84d312b-4426-4d40-a97d-a3760a143aaf\": \"b84d312b-4426-4d40-a97d-a3760a143aaf\", \"726d7694-1e20-423d-95b1-f4a00b70e6cf\": \"726d7694-1e20-423d-95b1-f4a00b70e6cf\", \"355a185c-356f-48f1-b706-c67e1cc64052\": \"355a185c-356f-48f1-b706-c67e1cc64052\", \"8678ddc9-e0ad-4a6e-b1e0-b4e40a6e2ae1\": \"8678ddc9-e0ad-4a6e-b1e0-b4e40a6e2ae1\", \"de3a2928-ab8e-42cb-8b01-89d4c19420cb\": \"de3a2928-ab8e-42cb-8b01-89d4c19420cb\", \"4bddaa03-2bb6-4ef3-b53a-ee46e276fcf0\": \"4bddaa03-2bb6-4ef3-b53a-ee46e276fcf0\", \"3d2a3411-56eb-43f8-a1b7-efc7e5e7fce1\": \"3d2a3411-56eb-43f8-a1b7-efc7e5e7fce1\", \"cc33b42b-fd8b-4c79-b4fb-8e17e5d70058\": \"cc33b42b-fd8b-4c79-b4fb-8e17e5d70058\", \"24de5879-adf3-4bea-8915-6a8a86049bb8\": \"24de5879-adf3-4bea-8915-6a8a86049bb8\", \"a3d01c11-a0b1-400b-9f12-6d8ecb724f4c\": \"a3d01c11-a0b1-400b-9f12-6d8ecb724f4c\", \"aa04dbee-762d-45ee-b149-a1c33e0aeb5f\": \"aa04dbee-762d-45ee-b149-a1c33e0aeb5f\", \"4eed16cb-823f-45c4-ab50-46cf84ff62b3\": \"4eed16cb-823f-45c4-ab50-46cf84ff62b3\", \"ab9e21d7-bd38-4df3-850c-55a7bb5f3133\": \"ab9e21d7-bd38-4df3-850c-55a7bb5f3133\", \"bfe32152-cf51-490b-90b5-6e53c8aec389\": \"bfe32152-cf51-490b-90b5-6e53c8aec389\", \"9a51c390-4282-4b39-9a47-33ba2edcbdba\": \"9a51c390-4282-4b39-9a47-33ba2edcbdba\", \"a50cf33e-d334-4e85-8def-f0970a3876ed\": \"a50cf33e-d334-4e85-8def-f0970a3876ed\", \"bbae29e3-9b38-423d-bb67-9b4841411d49\": \"bbae29e3-9b38-423d-bb67-9b4841411d49\", \"4c61b6f2-66c9-4245-8dfa-55b19760ff61\": \"4c61b6f2-66c9-4245-8dfa-55b19760ff61\", \"079f0936-7112-40e0-a633-5b4d78249b17\": \"079f0936-7112-40e0-a633-5b4d78249b17\", \"b2abf2d2-5039-4acc-b5a8-f0bd53831581\": \"b2abf2d2-5039-4acc-b5a8-f0bd53831581\", \"4e4b29fd-1f40-463f-a913-3543391643ce\": \"4e4b29fd-1f40-463f-a913-3543391643ce\", \"9ba45ca9-a35c-47ad-b8ec-f6d4fb40aab6\": \"9ba45ca9-a35c-47ad-b8ec-f6d4fb40aab6\", \"0be5c555-fc2d-473f-8e40-969fd7a3a42a\": \"0be5c555-fc2d-473f-8e40-969fd7a3a42a\"}, \"doc_id_dict\": {}, \"embeddings_dict\": {}}"}}}
|
index_builder.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
""" One time indexing: Load constitution PDF -> chunks -> embed -> store in ChromaDB
|
| 2 |
+
Robust: Handles tables/images """
|
| 3 |
+
|
| 4 |
+
import os
|
| 5 |
+
from pathlib import Path
|
| 6 |
+
from llama_index.core import Settings, VectorStoreIndex, SimpleDirectoryReader
|
| 7 |
+
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
|
| 8 |
+
from llama_index.core.node_parser import SimpleNodeParser
|
| 9 |
+
|
| 10 |
+
Settings.embed_model = HuggingFaceEmbedding(model_name="all-MiniLM-L6-v2",
|
| 11 |
+
device="cpu")
|
| 12 |
+
|
| 13 |
+
def build_index():
|
| 14 |
+
print("Building index...")
|
| 15 |
+
reader = SimpleDirectoryReader(input_dir="./data", recursive=True, file_extractor={"pdf": "llama_index.readers.file.PDFReader"})
|
| 16 |
+
documents = reader.load_data()
|
| 17 |
+
node_parser = SimpleNodeParser(chunk_size=1024, chunk_overlap=200)
|
| 18 |
+
index = VectorStoreIndex.from_documents(documents, show_progress=True, transformations=[node_parser])
|
| 19 |
+
index.storage_context.persist(persist_dir="./chroma_db")
|
| 20 |
+
print("Index built successfully!")
|
| 21 |
+
|
| 22 |
+
if __name__ == "__main__":
|
| 23 |
+
build_index()
|
| 24 |
+
|
main.py
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
def main():
|
| 2 |
+
print("Hello from askyourhonor!")
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
if __name__ == "__main__":
|
| 6 |
+
main()
|
pyproject.toml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[project]
|
| 2 |
+
name = "YourHonor"
|
| 3 |
+
version = "0.1.0"
|
| 4 |
+
description = "Indian Constitution Based RAG model"
|
| 5 |
+
readme = "README.md"
|
| 6 |
+
requires-python = ">=3.10"
|
| 7 |
+
|
| 8 |
+
dependencies = [
|
| 9 |
+
"llama-index-core==0.10.57",
|
| 10 |
+
"llama-index-llms-huggingface==0.2.5",
|
| 11 |
+
"llama-index-embeddings-huggingface==0.2.1",
|
| 12 |
+
"llama-index-vector-stores-chroma==0.1.10",
|
| 13 |
+
"transformers==4.41.2",
|
| 14 |
+
"torch==2.4.1",
|
| 15 |
+
"gradio==4.44.0",
|
| 16 |
+
"llama-index-readers-file==0.1.9",
|
| 17 |
+
"chromadb==0.5.3",
|
| 18 |
+
"sentence-transformers==2.7.0",
|
| 19 |
+
"accelerate==1.0.1", # Spell correction
|
| 20 |
+
"textblob==0.18.0",
|
| 21 |
+
"watchfiles>=1.1.1",
|
| 22 |
+
]
|
| 23 |
+
|
| 24 |
+
|
requirements.txt
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
uv.lock
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|