From 68ff4574341582ecf106c918da23404ea08165fd Mon Sep 17 00:00:00 2001 From: Muhammad Kharisma Azhari Date: Wed, 7 Aug 2024 21:32:35 +0700 Subject: [PATCH] Improve LLM use case and fix dashboard bugs. --- .env.example | 2 +- README.md | 4 +- autocode/dashboard.py | 36 +- autocode/database.db | Bin 16076800 -> 12288 bytes autocode/model.py | 32 +- autocode/setting.py | 2 +- autocode/use_case.py | 247 ++--- example/client/app_account/go.mod | 2 +- example/client/app_account/go.sum | 4 +- example/client/app_gateway/go.mod | 2 +- example/client/app_gateway/go.sum | 4 +- example/client/app_product/go.mod | 2 +- example/client/app_product/go.sum | 4 +- example/controller.ipynb | 1573 ++++------------------------- example/controller.py | 2 - example/controller2.py | 20 +- example/requirements.txt | 2 +- setup.py | 4 +- 18 files changed, 380 insertions(+), 1562 deletions(-) diff --git a/.env.example b/.env.example index 286acad..e8c4298 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -openai_api_key= +OPENAI_API_KEY= LANGCHAIN_TRACING_V2=true LANGCHAIN_ENDPOINT=https://api.smith.langchain.com LANGCHAIN_PROJECT=autocode diff --git a/README.md b/README.md index c0dbce3..e6a6def 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ companies. 1. Install the requirements ```bash -pip install autocode-py +pip install -U autocode-py ``` 2. Prepare software to be processed as in the [`./example/client`](https://github.com/muazhari/autocode/tree/main/example/client) folder. @@ -33,7 +33,7 @@ pip install autocode-py 4. Prepare controller as in the [`./example/controller.ipynb`](https://github.com/muazhari/autocode/blob/main/example/controller.ipynb) file. 5. Instantiate `optimization` and execute `optimization.deploy()` in controller. 6. Open dashboard in `http://localhost:{dashboard_port}/` to see the process in real-time. -7. Wait until all client are ready (need to wait for long time because the libraries need to be re-download for each client & refresh the dashboard manually because of bug). +7. Wait until all client are ready (need to wait for long time because the libraries need to be re-downloaded for each client). 8. Execute `optimization.run()` in controller. 9. Wait until the run is finished. 10. Analyze and decide the best values. diff --git a/autocode/dashboard.py b/autocode/dashboard.py index e7c6ef3..8f0d688 100644 --- a/autocode/dashboard.py +++ b/autocode/dashboard.py @@ -55,16 +55,19 @@ client: OptimizationClient = dill.loads(client_cache.value) variables.update(client.variables) clients[client.id] = client - client_df_list.append(client.model_dump(mode="json")) + client_json: Dict[str, Any] = client.model_dump(mode="json") + client_json["port"] = str(client.port) + client_df_list.append(client_json) - with client_df_placeholder: - client_df: pd.DataFrame = pd.DataFrame(client_df_list) - client_df = client_df.astype(dtype=str) + client_df: pd.DataFrame = pd.DataFrame(client_df_list) + + with client_df_placeholder.container(): st.dataframe(client_df, height=500) if len(objective_caches) > 0: break + session.close() time.sleep(0.01) if len(objective_caches) == 0 and len(client_caches) == 0: @@ -91,12 +94,7 @@ else: st.error("Preparation data cache is not valid.") -plot_0_placeholder = st.empty() -plot_1_placeholder = st.empty() -st.subheader("Objective Space") -plot_f_df_placeholder = st.empty() -st.subheader("Solution Space") -plot_x_df_placeholder = st.empty() +plot_placeholder = st.empty() while True: try: @@ -137,12 +135,6 @@ decision_index=decision_index ) - with plot_0_placeholder: - st.pyplot(plots[0].fig) - - with plot_1_placeholder: - st.pyplot(plots[1].fig) - list_dict_x: List[List[Dict[str, Any]]] = [] list_dict_f: List[Dict[str, Any]] = [] for index, (x, f) in enumerate(zip(result.X, result.F)): @@ -178,13 +170,17 @@ dict_f[f"f{index + 1}"] = f_value list_dict_f.append(dict_f) - with plot_f_df_placeholder: - f_df: pd.DataFrame = pd.DataFrame(list_dict_f) - st.dataframe(f_df, height=500) + f_df: pd.DataFrame = pd.DataFrame(list_dict_f) - with plot_x_df_placeholder: + with plot_placeholder.container(): + st.subheader("Objective Space") + st.pyplot(plots[0].fig) + st.pyplot(plots[1].fig) + st.subheader("Solution Space") + st.dataframe(f_df, height=500) st.json(list_dict_x, expanded=False) st.session_state["old_result_caches"].add(cache) + session.close() time.sleep(0.01) diff --git a/autocode/database.db b/autocode/database.db index fcdc94d0027fec409ff0d3234d4c86ff1661a0dc..167e57854b913209e7ffddad48aa3493c25b321c 100644 GIT binary patch delta 103 zcmZozaFx9wVSKffsy}!}&|u mHJRANZN(WUU*=cl2WjR2Y2yVE0-G5Xe(_Jcu#bfa$_4-e(-gx1 literal 16076800 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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ z;Qz2g56c1|i55j~q06>y+qP}nwr$(CZQHi(s&<*Z-~4^T%7{J5JduM%fB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAVA=M?A!-{Bkz#V;u!9%o3Cg%($ z9VUn4IF6ii&KzKDFz9=_C+y7bXf@`uIDvmFJsY~K-md!9zpLtft7-@kAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF 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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly nK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=DytHA#US)5GC diff --git a/autocode/model.py b/autocode/model.py index e18c08f..9c50ba1 100644 --- a/autocode/model.py +++ b/autocode/model.py @@ -22,42 +22,35 @@ class BaseModel(PydanticBaseModelV2): class CodeScoring(BaseModelV1): """ - Score code in based on the following statements: - Error Potentiality - this code is potentially error-prone; - Readability - this code is easy to read; - Understandability - the semantic meaning of this code is clear; - Complexity - this code is complex; - Modularity - this code should be broken into smaller pieces; - Overall maintainability - overall, this code is maintainable. - The score scale from 1 (strongly agree) to 100 (strongly disagree). - You must score in precision, i.e. 14.3, 47.456, 75.45, 58.58495, 3.141598, etc. + Score the code. """ - error_potentiality: float = FieldV1(description="Error potential score.") + analysis: List[str] = FieldV1(description="Step-by-step analysis before scoring the code.") readability: float = FieldV1(description="Readability score.") understandability: float = FieldV1(description="Understandability score.") complexity: float = FieldV1(description="Complexity score.") modularity: float = FieldV1(description="Modularity score.") + error_potentiality: float = FieldV1(description="Error potential score.") overall_maintainability: float = FieldV1(description="Overall maintainability score.") class CodeVariation(BaseModelV1): """ - Code variation is a code snippet that is a variation of the original code. + Propose code variation. """ - variation: Optional[str] = FieldV1(description="Code variation.", default=None) + analysis: List[str] = FieldV1(description="Step-by-step analysis before proposing the code variation.") + variation: str = FieldV1(description="Proposed code variation.") class ScoringState(TypedDict): - code: str - analysis: str - score: List[CodeScoring] + programming_language: str + existing_code: str + score: CodeScoring class VariationState(TypedDict): - code: str - analysis: str - variation: List[CodeVariation] - new_function_name: str + programming_language: str + existing_code: str + variations: List[CodeVariation] class OptimizationVariable(BaseModel): @@ -141,6 +134,7 @@ class OptimizationClient(BaseModel): class OptimizationPrepareRequest(BaseModel): + language: str variables: Dict[str, OptimizationBinary | OptimizationChoice | OptimizationInteger | OptimizationReal] host: Optional[str] = Field(default=None) port: int diff --git a/autocode/setting.py b/autocode/setting.py index 4ec3244..8453d11 100644 --- a/autocode/setting.py +++ b/autocode/setting.py @@ -12,4 +12,4 @@ class ApplicationSetting(BaseSettings): server_host: str = Field(default="0.0.0.0") server_port: int = Field(default=10000) dashboard_port: int = Field(default=10001) - openai_api_key: str = Field(default="") + OPENAI_API_KEY: str = Field(default="") diff --git a/autocode/use_case.py b/autocode/use_case.py index 0ce250f..bbb8bf2 100644 --- a/autocode/use_case.py +++ b/autocode/use_case.py @@ -10,8 +10,9 @@ import ray import sqlalchemy.exc from langchain_core.output_parsers import PydanticToolsParser -from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate, \ - AIMessagePromptTemplate +from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate +from langchain_core.runnables import RunnableSerializable +from langchain_core.runnables.utils import Output from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph from pymoo.algorithms.moo.sms import SMSEMOA @@ -202,161 +203,154 @@ def __init__( self.variation_graph = self.get_variation_graph() def get_scoring_graph(self): - chat = ChatOpenAI( + chat: ChatOpenAI = ChatOpenAI( model="gpt-4o-mini", - api_key=self.application_setting.openai_api_key + api_key=self.application_setting.OPENAI_API_KEY ) - tools = [CodeScoring] - parser = PydanticToolsParser(tools=tools) - - def node_scoring_analyze(state: ScoringState): - prompt = ChatPromptTemplate.from_messages([ - SystemMessagePromptTemplate.from_template(""" - You are target group of our study. The target group of our study are software quality analysts, researchers with a background in software quality, and software engineers that are involved with maintaining software. Some participants have up to 15 years of experience in quality assessments. In sum, 70 professionals participated. First, we invited selected experts to participate in the study. Second, we asked them to disseminate the study to interested and qualified colleagues. The survey was also promoted in relevant net- works. The participants are affiliated with companies including Airbus, Audi, BMW, Boston Consulting Group, Celonis, cesdo Software Quality GmbH, CQSE GmbH, Facebook, fortiss, itestra GmbH, Kinexon GmbH, MaibornWolff GmbH, Munich Re, Oracle, and three universities. However, 7 participants did not want to share their affiliation. During the study, we followed a systematic approach to assess software maintainability. The following steps were taken: - """), - HumanMessagePromptTemplate.from_template(""" - Analyze readability, understandability, complexity, modularity, and overall maintainability metrics of the following code. - You must use step by step comprehensive reasoning to explain your analysis. - - {code} - - """), - ]) - chain = prompt | chat - response = chain.invoke({ - "code": state["code"], - }) - state["analysis"] = response.content - return state + parser: PydanticToolsParser = PydanticToolsParser( + tools=[CodeScoring] + ) def node_scoring(state: ScoringState): prompt = ChatPromptTemplate.from_messages([ SystemMessagePromptTemplate.from_template(""" - You are target group of our study. The target group of our study are software quality analysts, researchers with a background in software quality, and software engineers that are involved with maintaining software. Some participants have up to 15 years of experience in quality assessments. In sum, 70 professionals participated. First, we invited selected experts to participate in the study. Second, we asked them to disseminate the study to interested and qualified colleagues. The survey was also promoted in relevant networks. The participants are affiliated with companies including Airbus, Audi, BMW, Boston Consulting Group, Celonis, cesdo Software Quality GmbH, CQSE GmbH, Facebook, fortiss, itestra GmbH, Kinexon GmbH, MaibornWolff GmbH, Munich Re, Oracle, and three universities. However, 7 participants did not want to share their affiliation. During the study, we followed a systematic approach to assess software maintainability. The following steps were taken: - """), - HumanMessagePromptTemplate.from_template(""" - Analyze error potentiality, readability, understandability, complexity, modularity, and overall maintainability metrics of the following code. - You must use step by step comprehensive reasoning to explain your analysis. - - {code} - - """), - AIMessagePromptTemplate.from_template(""" - {analysis} - """), + You are target group of our study. The target group of our study are software quality analysts, researchers with a background in software quality, and software engineers that are involved with maintaining software. + Some participants have up to 15 years of experience in quality assessments. + In sum, 70 professionals participated. + First, we invited selected experts to participate in the study. + Second, we asked them to disseminate the study to interested and qualified colleagues. + The survey was also promoted in relevant networks. + The participants are affiliated with companies including Airbus, Audi, BMW, Boston Consulting Group, Celonis, cesdo Software Quality GmbH, CQSE GmbH, Facebook, fortiss, itestra GmbH, Kinexon GmbH, MaibornWolff GmbH, Munich Re, Oracle, and three universities. + However, 7 participants did not want to share their affiliation. + During the study, we followed a systematic approach to assess software maintainability. + The following steps were taken: + """), HumanMessagePromptTemplate.from_template(""" - Based on your analysis and the provided code, score the code based on the following criteria: - Error potentiality - this code is potentially error-prone; - Readability - this code is easy to read; - Understandability - the semantic meaning of this code is clear; - Complexity - this code is complex; - Modularity - this code should be broken into smaller pieces; - Overall maintainability - overall, this code is maintainable. - The score scale from 1 (strongly agree) to 100 (strongly disagree). - You must score in precision, i.e. 14, 47.456, 75, 58.58495, 3.141598, etc. - """), + Comprehensively step-by-step analyze then score the existing code using a "CodeScoring" tool. + Readability - this code is easy to read; + Understandability - the semantic meaning of this code is clear; + Complexity - this code is complex; + Modularity - this code should be broken into smaller pieces; + Error Potentiality - this code is potentially error-prone; + Overall maintainability - overall, this code is maintainable. + The score scale from 0 (strongly disagree) to 100 (strongly agree). + You must score the code in precision, example: 14.3, 42.456, 99.45, 78.58495, 3.141598, 0.579, etc. + You must in context to the programming language. + Ignore the function name, input-output parameters, and input-output types. + + {programming_language} + + + {existing_code} + + """), ]) - chain = prompt | chat.bind_tools(tools=tools) | parser - response = chain.invoke({ - "code": state["code"], - "analysis": state["analysis"] + chain: RunnableSerializable = ( + prompt | + chat.bind_tools( + tools=parser.tools, + strict=True, + tool_choice="required" + ) | + parser + ) + response: Output = chain.invoke({ + "programming_language": state["programming_language"], + "existing_code": state["existing_code"], }) - state["score"] = response + state["score"] = response[0] + return state graph = StateGraph(ScoringState) graph.set_entry_point(node_scoring.__name__) - # graph.add_node(node_scoring_analyze.__name__, node_scoring_analyze) graph.add_node(node_scoring.__name__, node_scoring) - # graph.add_edge(node_scoring_analyze.__name__, node_scoring.__name__) graph.set_finish_point(node_scoring.__name__) compiled_graph = graph.compile() return compiled_graph def get_variation_graph(self): - chat = ChatOpenAI( + chat: ChatOpenAI = ChatOpenAI( model="gpt-4o-mini", - api_key=self.application_setting.openai_api_key + api_key=self.application_setting.OPENAI_API_KEY ) - tools = [CodeVariation] - parser = PydanticToolsParser(tools=tools) - - def node_variation_analyze(state: VariationState): - prompt = ChatPromptTemplate.from_messages([ - SystemMessagePromptTemplate.from_template(""" - You are target group of our study. The target group of our study are software quality analysts, researchers with a background in software quality, and software engineers that are involved with maintaining software. Some participants have up to 15 years of experience in quality assessments. In sum, 70 professionals participated. First, we invited selected experts to participate in the study. Second, we asked them to disseminate the study to interested and qualified colleagues. The survey was also promoted in relevant net- works. The participants are affiliated with companies including Airbus, Audi, BMW, Boston Consulting Group, Celonis, cesdo Software Quality GmbH, CQSE GmbH, Facebook, fortiss, itestra GmbH, Kinexon GmbH, MaibornWolff GmbH, Munich Re, Oracle, and three universities. However, 7 participants did not want to share their affiliation. During the study, we followed a systematic approach to assess software maintainability. The following steps were taken: - """), - HumanMessagePromptTemplate.from_template(""" - Analyze the existing code to propose many possible variations. - You can use libraries in the possible variations. - - {code} - - """), - ]) - chain = prompt | chat - response = chain.invoke({ - "code": state["code"], - }) - state["analysis"] = response.content - return state + parser: PydanticToolsParser = PydanticToolsParser( + tools=[CodeVariation] + ) def node_variation(state: VariationState): prompt = ChatPromptTemplate.from_messages([ SystemMessagePromptTemplate.from_template(""" - You are target group of our study. The target group of our study are software quality analysts, researchers with a background in software quality, and software engineers that are involved with maintaining software. Some participants have up to 15 years of experience in quality assessments. In sum, 70 professionals participated. First, we invited selected experts to participate in the study. Second, we asked them to disseminate the study to interested and qualified colleagues. The survey was also promoted in relevant networks. The participants are affiliated with companies including Airbus, Audi, BMW, Boston Consulting Group, Celonis, cesdo Software Quality GmbH, CQSE GmbH, Facebook, fortiss, itestra GmbH, Kinexon GmbH, MaibornWolff GmbH, Munich Re, Oracle, and three universities. However, 7 participants did not want to share their affiliation. During the study, we followed a systematic approach to assess software maintainability. The following steps were taken: - """), - HumanMessagePromptTemplate.from_template(""" - Analyze the existing code to propose many possible variations. - You can use libraries in the possible variations. - - {code} - - """), - AIMessagePromptTemplate.from_template(""" - {analysis} + You are target group of our study. The target group of our study are software quality analysts, researchers with a background in software quality, and software engineers that are involved with maintaining software. + Some participants have up to 15 years of experience in quality assessments. + In sum, 70 professionals participated. + First, we invited selected experts to participate in the study. + Second, we asked them to disseminate the study to interested and qualified colleagues. + The survey was also promoted in relevant networks. + The participants are affiliated with companies including Airbus, Audi, BMW, Boston Consulting Group, Celonis, cesdo Software Quality GmbH, CQSE GmbH, Facebook, fortiss, itestra GmbH, Kinexon GmbH, MaibornWolff GmbH, Munich Re, Oracle, and three universities. + However, 7 participants did not want to share their affiliation. + During the study, we followed a systematic approach to assess software maintainability. + The following steps were taken: """), HumanMessagePromptTemplate.from_template(""" - Generate necessary code variations using "CodeVariation" tools. - If you are using libraries, ensure to import them. - Ignore to import "autocode" library, it is already imported. - Ensure function name, input-output parameters, and input-output types in the code variations are exactly same as the existing code. + Comprehensively step-by-step analyze the existing code then propose necessary code variations using "CodeVariation" tools. + You must in context to the programming language. + You can use other libraries in the code variations. + If you are using other libraries, ensure to import them. + Do not try to use "autocode" library in the code variations. + Do not try to add, remove, and change the function name, input-output parameters, and input-output types in the code variations, make them exactly as in the existing code. + + {programming_language} + + + {existing_code} + """), ]) - chain = prompt | chat.bind_tools(tools=tools) | parser - response = chain.invoke({ - "code": state["code"], - "analysis": state["analysis"], + chain: RunnableSerializable = ( + prompt | + chat.bind_tools( + tools=parser.tools, + strict=True, + tool_choice="auto" + ) | + parser + ) + response: Output = chain.invoke({ + "programming_language": state["programming_language"], + "existing_code": state["existing_code"], }) - state["variation"] = response + state["variations"] = response + return state graph = StateGraph(VariationState) graph.set_entry_point(node_variation.__name__) - # graph.add_node(node_variation_analyze.__name__, node_variation_analyze) graph.add_node(node_variation.__name__, node_variation) - # graph.add_edge(node_variation_analyze.__name__, node_variation.__name__) graph.set_finish_point(node_variation.__name__) compiled_graph = graph.compile() return compiled_graph - async def function_scoring(self, function: OptimizationValueFunction) -> List[CodeScoring]: + async def function_scoring(self, language: str, function: OptimizationValueFunction) -> CodeScoring: state: ScoringState = await self.scoring_graph.ainvoke({ - "code": function.string + "programming_language": language, + "existing_code": function.string }) return state["score"] - async def generate_function_variation(self, function: OptimizationValueFunction) -> List[CodeVariation]: + async def generate_function_variation(self, language: str, function: OptimizationValueFunction) -> List[ + CodeVariation]: state: VariationState = await self.variation_graph.ainvoke({ - "code": function.string, + "programming_language": language, + "existing_code": function.string, }) - return state["variation"] + return state["variations"] class OptimizationProblemRunner: @@ -425,7 +419,7 @@ def prepare(self, request: OptimizationPrepareRequest) -> OptimizationPrepareRes if self.client_name_to_variables.get(client.name, None) is not None: client.variables = self.client_name_to_variables[client.name] else: - list_variation_futures: List[Coroutine] = [] + list_code_variation_futures: List[Coroutine] = [] list_variables: List[OptimizationVariable] = [] list_functions: List[OptimizationValueFunction] = [] @@ -434,17 +428,22 @@ def prepare(self, request: OptimizationPrepareRequest) -> OptimizationPrepareRes for option_id, option in variable.options.items(): if option.type == OptimizationValueFunction.__name__: function: OptimizationValueFunction = option.data - future_variation: Coroutine = self.llm_use_case.generate_function_variation(function) - list_variation_futures.append(future_variation) + future_code_variation: Coroutine = self.llm_use_case.generate_function_variation( + language=request.language, + function=function + ) + list_code_variation_futures.append(future_code_variation) list_variables.append(variable) list_functions.append(function) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) - list_variations = asyncio.get_event_loop().run_until_complete(asyncio.gather(*list_variation_futures)) - for variable, variations, function in zip(list_variables, list_variations, list_functions): - for variation in variations: + list_code_variations = asyncio.get_event_loop().run_until_complete( + asyncio.gather(*list_code_variation_futures) + ) + for variable, code_variations, function in zip(list_variables, list_code_variations, list_functions): + for code_variation in code_variations: new_option_id: str = str(uuid.uuid4()) copied_function: OptimizationValueFunction = copy.deepcopy(function) new_function_name: str = "variation_" + uuid.uuid4().hex @@ -454,31 +453,35 @@ def prepare(self, request: OptimizationPrepareRequest) -> OptimizationPrepareRes copied_function.string = re.sub( pattern=r"func (.+?)\(", repl="func " + new_function_name + "(", - string=variation.variation + string=code_variation.variation ) variable.options[new_option_id] = OptimizationValue( id=new_option_id, data=copied_function ) - list_functions: List[str] = [] + list_functions: List[OptimizationValueFunction] = [] list_scoring_futures: List[Coroutine] = [] for variable_id, variable in client.variables.items(): if variable.type == OptimizationChoice.__name__: for option_id, option in variable.options.items(): if option.type == OptimizationValueFunction.__name__: - future_scoring: Coroutine = self.llm_use_case.function_scoring(option.data) + function: OptimizationValueFunction = option.data + future_scoring: Coroutine = self.llm_use_case.function_scoring( + language=request.language, + function=function + ) list_scoring_futures.append(future_scoring) - list_functions.append(option.data) + list_functions.append(function) list_scores = asyncio.get_event_loop().run_until_complete(asyncio.gather(*list_scoring_futures)) for function, score in zip(list_functions, list_scores): - function.understandability = score[0].understandability - function.error_potentiality = score[0].error_potentiality - function.readability = score[0].readability - function.complexity = score[0].complexity - function.modularity = score[0].modularity - function.overall_maintainability = score[0].overall_maintainability + function.understandability = score.understandability + function.readability = score.readability + function.complexity = score.complexity + function.modularity = score.modularity + function.error_potentiality = score.error_potentiality + function.overall_maintainability = score.overall_maintainability for variable in client.variables.values(): variable.set_client_id(client.id) diff --git a/example/client/app_account/go.mod b/example/client/app_account/go.mod index 057df91..25cfd6b 100644 --- a/example/client/app_account/go.mod +++ b/example/client/app_account/go.mod @@ -4,7 +4,7 @@ go 1.22.5 require ( github.com/gorilla/mux v1.8.1 - github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4 + github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7 github.com/stretchr/testify v1.9.0 ) diff --git a/example/client/app_account/go.sum b/example/client/app_account/go.sum index a4f7cff..08b5c31 100644 --- a/example/client/app_account/go.sum +++ b/example/client/app_account/go.sum @@ -11,8 +11,8 @@ github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ib github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4 h1:/tm83P28LJYCTU7TOSKNiqp5KH+Gxa5BWe6vWUQFH0A= -github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4/go.mod h1:pKKR6T6V1G0M3vdBtIIX65hIweojOWg0Lsz/G5UlzUA= +github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7 h1:dVYgEhQcF+wMmt4kfLY68QiDKB2dUxqxVZkMxiJgl1U= +github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7/go.mod h1:pKKR6T6V1G0M3vdBtIIX65hIweojOWg0Lsz/G5UlzUA= github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6 h1:bVd+/pTg3Vmmev3bfvqFMYfBtCI1WLJFT4OgTOCpYmk= github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6/go.mod h1:TpqeUBTRIqg+V3AdDQkZWvzlbvUm5Lj5toOWN9Ifkao= github.com/peterh/liner v1.2.2 h1:aJ4AOodmL+JxOZZEL2u9iJf8omNRpqHc/EbrK+3mAXw= diff --git a/example/client/app_gateway/go.mod b/example/client/app_gateway/go.mod index 6c9171d..a43f71b 100644 --- a/example/client/app_gateway/go.mod +++ b/example/client/app_gateway/go.mod @@ -4,7 +4,7 @@ go 1.22.5 require ( github.com/gorilla/mux v1.8.1 - github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4 + github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7 ) require ( diff --git a/example/client/app_gateway/go.sum b/example/client/app_gateway/go.sum index a4f7cff..08b5c31 100644 --- a/example/client/app_gateway/go.sum +++ b/example/client/app_gateway/go.sum @@ -11,8 +11,8 @@ github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ib github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4 h1:/tm83P28LJYCTU7TOSKNiqp5KH+Gxa5BWe6vWUQFH0A= -github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4/go.mod h1:pKKR6T6V1G0M3vdBtIIX65hIweojOWg0Lsz/G5UlzUA= +github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7 h1:dVYgEhQcF+wMmt4kfLY68QiDKB2dUxqxVZkMxiJgl1U= +github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7/go.mod h1:pKKR6T6V1G0M3vdBtIIX65hIweojOWg0Lsz/G5UlzUA= github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6 h1:bVd+/pTg3Vmmev3bfvqFMYfBtCI1WLJFT4OgTOCpYmk= github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6/go.mod h1:TpqeUBTRIqg+V3AdDQkZWvzlbvUm5Lj5toOWN9Ifkao= github.com/peterh/liner v1.2.2 h1:aJ4AOodmL+JxOZZEL2u9iJf8omNRpqHc/EbrK+3mAXw= diff --git a/example/client/app_product/go.mod b/example/client/app_product/go.mod index 93a6b35..2902b97 100644 --- a/example/client/app_product/go.mod +++ b/example/client/app_product/go.mod @@ -4,7 +4,7 @@ go 1.22.5 require ( github.com/gorilla/mux v1.8.1 - github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4 + github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7 github.com/stretchr/testify v1.9.0 ) diff --git a/example/client/app_product/go.sum b/example/client/app_product/go.sum index a4f7cff..08b5c31 100644 --- a/example/client/app_product/go.sum +++ b/example/client/app_product/go.sum @@ -11,8 +11,8 @@ github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ib github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4 h1:/tm83P28LJYCTU7TOSKNiqp5KH+Gxa5BWe6vWUQFH0A= -github.com/muazhari/autocode-go v0.0.0-20240806052715-4093b1b479f4/go.mod h1:pKKR6T6V1G0M3vdBtIIX65hIweojOWg0Lsz/G5UlzUA= +github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7 h1:dVYgEhQcF+wMmt4kfLY68QiDKB2dUxqxVZkMxiJgl1U= +github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7/go.mod h1:pKKR6T6V1G0M3vdBtIIX65hIweojOWg0Lsz/G5UlzUA= github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6 h1:bVd+/pTg3Vmmev3bfvqFMYfBtCI1WLJFT4OgTOCpYmk= github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6/go.mod h1:TpqeUBTRIqg+V3AdDQkZWvzlbvUm5Lj5toOWN9Ifkao= github.com/peterh/liner v1.2.2 h1:aJ4AOodmL+JxOZZEL2u9iJf8omNRpqHc/EbrK+3mAXw= diff --git a/example/controller.ipynb b/example/controller.ipynb index e7fdcc7..6c86ecf 100644 --- a/example/controller.ipynb +++ b/example/controller.ipynb @@ -3,8 +3,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-08-06T12:56:02.952049Z", - "start_time": "2024-08-06T12:55:59.119293Z" + "end_time": "2024-08-07T11:31:43.001353Z", + "start_time": "2024-08-07T11:31:37.824723Z" } }, "cell_type": "code", @@ -12,11 +12,12 @@ "from autocode import Optimization\n", "\n", "optimization: Optimization = Optimization(\n", - " num_cpus=12,\n", + " num_cpus=2,\n", " server_host=\"0.0.0.0\",\n", " server_port=10000,\n", " dashboard_port=10001,\n", - ")" + ")\n", + "optimization.reset()" ], "id": "fe6274905d54ad44", "outputs": [ @@ -24,14 +25,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-08-06 19:56:02,398\tINFO worker.py:1743 -- Started a local Ray instance. View the dashboard at \u001B[1m\u001B[32mhttp://172.25.4.192:8265 \u001B[39m\u001B[22m\n" + "2024-08-07 18:31:42,454\tINFO worker.py:1743 -- Started a local Ray instance. View the dashboard at \u001B[1m\u001B[32mhttp://172.25.4.192:8265 \u001B[39m\u001B[22m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Available resources: {'accelerator_type:G': 1.0, 'node:__internal_head__': 1.0, 'node:172.25.4.192': 1.0, 'CPU': 12.0, 'object_store_memory': 4375123968.0, 'memory': 8750247936.0, 'GPU': 1.0}\n", + "Available resources: {'accelerator_type:G': 1.0, 'node:__internal_head__': 1.0, 'node:172.25.4.192': 1.0, 'CPU': 12.0, 'memory': 9207683483.0, 'object_store_memory': 4603841740.0, 'GPU': 1.0}\n", "Server is healthy.\n" ] } @@ -41,35 +42,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-08-06T12:56:05.770631Z", - "start_time": "2024-08-06T12:56:05.713214Z" - } - }, - "cell_type": "code", - "source": [ - "import dotenv\n", - "from autocode import OptimizationUseCase, ApplicationSetting\n", - "from autocode.container import ApplicationContainer\n", - "\n", - "dotenv.load_dotenv(dotenv.find_dotenv())\n", - "application_container: ApplicationContainer = ApplicationContainer()\n", - "application_setting: ApplicationSetting = application_container.settings.application()\n", - "application_setting.num_cpus = 12\n", - "application_setting.server_host = \"0.0.0.0\"\n", - "application_setting.server_port = 10000\n", - "application_setting.dashboard_port = 10001\n", - "optimization_use_case: OptimizationUseCase = application_container.use_cases.optimization()\n", - "# optimization_use_case.reset()" - ], - "id": "e79f7e07e3b46f41", - "outputs": [], - "execution_count": 2 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-08-06T12:56:41.474338Z", - "start_time": "2024-08-06T12:56:07.168477Z" + "end_time": "2024-08-07T14:31:18.035304Z", + "start_time": "2024-08-07T14:30:04.597839Z" } }, "cell_type": "code", @@ -89,104 +63,201 @@ "text": [ "#0 building with \"default\" instance using docker driver\n", "\n", - "#1 [app-account internal] load build definition from .Dockerfile\n", + "#1 [app-product internal] load build definition from .Dockerfile\n", "#1 transferring dockerfile: 119B 0.0s done\n", "#1 DONE 0.0s\n", "\n", - "#2 [app-gateway internal] load build definition from .Dockerfile\n", + "#2 [app-account internal] load build definition from .Dockerfile\n", "#2 transferring dockerfile: 119B 0.0s done\n", "#2 DONE 0.0s\n", "\n", - "#3 [app-product internal] load build definition from .Dockerfile\n", + "#3 [app-gateway internal] load build definition from .Dockerfile\n", "#3 transferring dockerfile: 119B 0.0s done\n", "#3 DONE 0.0s\n", "\n", - "#4 [app-product internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 2.1s\n", + "#4 [app-gateway internal] load metadata for docker.io/library/golang:latest\n", + "#4 DONE 1.9s\n", "\n", "#5 [app-gateway internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", + "#5 transferring context: 2B done\n", "#5 DONE 0.0s\n", "\n", - "#6 [app-product internal] load .dockerignore\n", - "#6 transferring context: 2B 0.0s done\n", + "#6 [app-account internal] load .dockerignore\n", + "#6 transferring context: 2B done\n", "#6 DONE 0.0s\n", "\n", - "#7 [app-account 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", + "#7 [app-product internal] load .dockerignore\n", + "#7 transferring context: 2B 0.0s done\n", "#7 DONE 0.0s\n", "\n", - "#8 [app-account internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", + "#8 [app-account 1/5] FROM docker.io/library/golang:latest@sha256:2bd56f00ff47baf33e64eae7996b65846c7cb5e0a46e0a882ef179fd89654afa\n", "#8 DONE 0.0s\n", "\n", "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.1s done\n", - "#9 DONE 0.1s\n", + "#9 transferring context: 5.04kB 0.0s done\n", + "#9 DONE 0.0s\n", "\n", - "#10 [app-gateway 2/5] WORKDIR /workdir\n", - "#10 CACHED\n", + "#10 [app-account internal] load build context\n", + "#10 transferring context: 5.06kB 0.0s done\n", + "#10 DONE 0.0s\n", "\n", - "#11 [app-gateway 3/5] COPY . .\n", + "#11 [app-account 2/5] WORKDIR /workdir\n", "#11 CACHED\n", "\n", - "#12 [app-gateway 4/5] RUN go mod tidy\n", - "#12 CACHED\n", + "#12 [app-product internal] load build context\n", + "#12 transferring context: 5.06kB 0.0s done\n", + "#12 DONE 0.0s\n", "\n", - "#13 [app-gateway 5/5] RUN go get ./...\n", - "#13 CACHED\n", + "#13 [app-gateway 3/5] COPY . .\n", + "#13 DONE 0.0s\n", "\n", - "#14 [app-gateway] exporting to image\n", - "#14 exporting layers done\n", - "#14 writing image sha256:f4c5ffc1277bcf5eb84e30894a5868ccf4c4174312c7c29dd87f397afe597ead done\n", - "#14 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", + "#14 [app-account 3/5] COPY . .\n", "#14 DONE 0.0s\n", "\n", - "#15 [app-product internal] load build context\n", - "#15 transferring context: 335B 0.1s done\n", - "#15 DONE 0.1s\n", + "#15 [app-product 3/5] COPY . .\n", + "#15 DONE 0.0s\n", "\n", - "#16 [app-account internal] load build context\n", - "#16 transferring context: 335B 0.1s done\n", - "#16 DONE 0.1s\n", + "#16 [app-account 4/5] RUN go mod tidy\n", + "#16 0.504 go: downloading github.com/stretchr/testify v1.9.0\n", + "#16 0.505 go: downloading github.com/gorilla/mux v1.8.1\n", + "#16 0.508 go: downloading github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7\n", + "#16 0.944 go: downloading github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6\n", + "#16 0.944 go: downloading github.com/google/uuid v1.6.0\n", + "#16 0.944 go: downloading github.com/valyala/fasthttp v1.55.0\n", + "#16 1.056 go: downloading gopkg.in/yaml.v3 v3.0.1\n", + "#16 1.056 go: downloading github.com/davecgh/go-spew v1.1.1\n", + "#16 1.056 go: downloading github.com/pmezard/go-difflib v1.0.0\n", + "#16 ...\n", "\n", "#17 [app-product 4/5] RUN go mod tidy\n", - "#17 CACHED\n", + "#17 0.502 go: downloading github.com/stretchr/testify v1.9.0\n", + "#17 0.504 go: downloading github.com/gorilla/mux v1.8.1\n", + "#17 0.505 go: downloading github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7\n", + "#17 0.963 go: downloading gopkg.in/yaml.v3 v3.0.1\n", + "#17 0.963 go: downloading github.com/davecgh/go-spew v1.1.1\n", + "#17 0.964 go: downloading github.com/pmezard/go-difflib v1.0.0\n", + "#17 0.964 go: downloading github.com/google/uuid v1.6.0\n", + "#17 0.964 go: downloading github.com/valyala/fasthttp v1.55.0\n", + "#17 0.964 go: downloading github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6\n", + "#17 5.221 go: downloading github.com/klauspost/compress v1.17.9\n", + "#17 5.221 go: downloading github.com/andybalholm/brotli v1.1.0\n", + "#17 5.221 go: downloading github.com/valyala/bytebufferpool v1.0.0\n", + "#17 6.088 go: downloading gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405\n", + "#17 ...\n", "\n", - "#18 [app-product 3/5] COPY . .\n", - "#18 CACHED\n", + "#16 [app-account 4/5] RUN go mod tidy\n", + "#16 8.155 go: downloading github.com/klauspost/compress v1.17.9\n", + "#16 8.155 go: downloading github.com/andybalholm/brotli v1.1.0\n", + "#16 8.155 go: downloading github.com/valyala/bytebufferpool v1.0.0\n", + "#16 8.900 go: downloading gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405\n", + "#16 ...\n", + "\n", + "#18 [app-gateway 4/5] RUN go mod tidy\n", + "#18 0.506 go: downloading github.com/gorilla/mux v1.8.1\n", + "#18 0.506 go: downloading github.com/muazhari/autocode-go v0.0.0-20240807125218-6ca4153954b7\n", + "#18 0.507 go: downloading github.com/stretchr/testify v1.9.0\n", + "#18 1.040 go: downloading github.com/valyala/fasthttp v1.55.0\n", + "#18 1.040 go: downloading github.com/muazhari/gomacro-custom v0.0.0-20240731093833-a6136ef7aaa6\n", + "#18 1.041 go: downloading github.com/google/uuid v1.6.0\n", + "#18 1.178 go: downloading github.com/davecgh/go-spew v1.1.1\n", + "#18 1.178 go: downloading gopkg.in/yaml.v3 v3.0.1\n", + "#18 1.178 go: downloading github.com/pmezard/go-difflib v1.0.0\n", + "#18 8.407 go: downloading github.com/andybalholm/brotli v1.1.0\n", + "#18 8.408 go: downloading github.com/klauspost/compress v1.17.9\n", + "#18 8.408 go: downloading github.com/valyala/bytebufferpool v1.0.0\n", + "#18 10.06 go: downloading gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405\n", + "#18 11.98 go: downloading golang.org/x/tools v0.14.0\n", + "#18 11.98 go: downloading github.com/peterh/liner v1.2.2\n", + "#18 11.98 go: downloading github.com/mattn/go-runewidth v0.0.15\n", + "#18 ...\n", "\n", - "#19 [app-account 3/5] COPY . .\n", - "#19 CACHED\n", + "#17 [app-product 4/5] RUN go mod tidy\n", + "#17 13.31 go: downloading github.com/peterh/liner v1.2.2\n", + "#17 13.31 go: downloading golang.org/x/tools v0.14.0\n", + "#17 13.32 go: downloading github.com/mattn/go-runewidth v0.0.15\n", + "#17 13.40 go: downloading golang.org/x/sys v0.21.0\n", + "#17 13.44 go: downloading github.com/rivo/uniseg v0.2.0\n", + "#17 ...\n", "\n", - "#10 [app-account 2/5] WORKDIR /workdir\n", - "#10 CACHED\n", + "#16 [app-account 4/5] RUN go mod tidy\n", + "#16 18.40 go: downloading golang.org/x/tools v0.14.0\n", + "#16 18.41 go: downloading github.com/peterh/liner v1.2.2\n", + "#16 18.41 go: downloading github.com/mattn/go-runewidth v0.0.15\n", + "#16 21.93 go: downloading golang.org/x/sys v0.21.0\n", + "#16 21.97 go: downloading github.com/rivo/uniseg v0.2.0\n", + "#16 ...\n", + "\n", + "#18 [app-gateway 4/5] RUN go mod tidy\n", + "#18 16.49 go: downloading golang.org/x/sys v0.21.0\n", + "#18 16.68 go: downloading github.com/rivo/uniseg v0.2.0\n", + "#18 ...\n", "\n", - "#20 [app-account 4/5] RUN go mod tidy\n", - "#20 CACHED\n", + "#17 [app-product 4/5] RUN go mod tidy\n", + "#17 26.49 go: downloading golang.org/x/mod v0.13.0\n", + "#17 26.49 go: downloading golang.org/x/sync v0.4.0\n", + "#17 ...\n", "\n", - "#21 [app-account 5/5] RUN go get ./...\n", - "#21 CACHED\n", + "#16 [app-account 4/5] RUN go mod tidy\n", + "#16 32.03 go: downloading golang.org/x/mod v0.13.0\n", + "#16 32.03 go: downloading golang.org/x/sync v0.4.0\n", + "#16 ...\n", "\n", - "#22 [app-product 5/5] RUN go get ./...\n", - "#22 CACHED\n", + "#18 [app-gateway 4/5] RUN go mod tidy\n", + "#18 32.68 go: downloading golang.org/x/mod v0.13.0\n", + "#18 32.68 go: downloading golang.org/x/sync v0.4.0\n", + "#18 ...\n", "\n", - "#23 [app-account] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:3d6da7ef3da4053ba142861579056b3e30722d89a5588e95af465385db95d517 done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#23 DONE 0.0s\n", + "#17 [app-product 4/5] RUN go mod tidy\n", + "#17 DONE 60.9s\n", + "\n", + "#19 [app-product 5/5] RUN go get ./...\n", + "#19 DONE 1.4s\n", + "\n", + "#18 [app-gateway 4/5] RUN go mod tidy\n", + "#18 ...\n", + "\n", + "#20 [app-product] exporting to image\n", + "#20 exporting layers\n", + "#20 exporting layers 0.4s done\n", + "#20 writing image sha256:4482d7e68dc4e3ff889e1dc560a814e47dda3ac7c10805bbdb815c92f9f3f9ef done\n", + "#20 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", + "#20 DONE 0.4s\n", + "\n", + "#21 [app-product] resolving provenance for metadata file\n", + "#21 DONE 0.0s\n", + "\n", + "#18 [app-gateway 4/5] RUN go mod tidy\n", + "#18 DONE 63.8s\n", + "\n", + "#16 [app-account 4/5] RUN go mod tidy\n", + "#16 ...\n", + "\n", + "#22 [app-gateway 5/5] RUN go get ./...\n", + "#22 DONE 0.8s\n", + "\n", + "#16 [app-account 4/5] RUN go mod tidy\n", + "#16 ...\n", + "\n", + "#23 [app-gateway] exporting to image\n", + "#23 exporting layers 0.4s done\n", + "#23 writing image sha256:bb4698dc73e6f0b18e2432d43a1aeee80fbb262702c2fdaa45c6e5923c3c431a done\n", + "#23 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", + "#23 DONE 0.4s\n", "\n", "#24 [app-gateway] resolving provenance for metadata file\n", "#24 DONE 0.0s\n", "\n", - "#25 [app-product] exporting to image\n", - "#25 exporting layers done\n", - "#25 writing image sha256:e0224c219203055a3da7518d4bf76dd5d481ea680119f438776f4d0a94aa8b22 done\n", - "#25 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#25 DONE 0.0s\n", + "#16 [app-account 4/5] RUN go mod tidy\n", + "#16 DONE 65.5s\n", "\n", - "#26 [app-product] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", + "#25 [app-account 5/5] RUN go get ./...\n", + "#25 DONE 0.6s\n", + "\n", + "#26 [app-account] exporting to image\n", + "#26 exporting layers 0.3s done\n", + "#26 writing image sha256:9431857543db398269e173d840e28a9f0ac3a665cba76798340965e0bb336987 done\n", + "#26 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", + "#26 DONE 0.3s\n", "\n", "#27 [app-account] resolving provenance for metadata file\n", "#27 DONE 0.0s\n" @@ -196,15 +267,20 @@ "name": "stderr", "output_type": "stream", "text": [ + " Network autocode-worker-0_default Creating\n", + " Network autocode-worker-0_default Created\n", + " Container autocode-worker-0-app-account-1 Creating\n", + " Container autocode-worker-0-app-gateway-1 Creating\n", + " Container autocode-worker-0-app-product-1 Creating\n", + " Container autocode-worker-0-app-account-1 Created\n", " Container autocode-worker-0-app-product-1 Created\n", " Container autocode-worker-0-app-gateway-1 Created\n", - " Container autocode-worker-0-app-account-1 Created\n", " Container autocode-worker-0-app-product-1 Starting\n", " Container autocode-worker-0-app-gateway-1 Starting\n", " Container autocode-worker-0-app-account-1 Starting\n", + " Container autocode-worker-0-app-product-1 Started\n", " Container autocode-worker-0-app-account-1 Started\n", - " Container autocode-worker-0-app-gateway-1 Started\n", - " Container autocode-worker-0-app-product-1 Started\n" + " Container autocode-worker-0-app-gateway-1 Started\n" ] }, { @@ -213,11 +289,11 @@ "text": [ "#0 building with \"default\" instance using docker driver\n", "\n", - "#1 [app-product internal] load build definition from .Dockerfile\n", + "#1 [app-gateway internal] load build definition from .Dockerfile\n", "#1 transferring dockerfile: 119B 0.0s done\n", "#1 DONE 0.0s\n", "\n", - "#2 [app-gateway internal] load build definition from .Dockerfile\n", + "#2 [app-product internal] load build definition from .Dockerfile\n", "#2 transferring dockerfile: 119B 0.0s done\n", "#2 DONE 0.0s\n", "\n", @@ -226,20 +302,20 @@ "#3 DONE 0.0s\n", "\n", "#4 [app-account internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.3s\n", + "#4 DONE 1.2s\n", "\n", "#5 [app-product internal] load .dockerignore\n", "#5 transferring context: 2B 0.0s done\n", "#5 DONE 0.0s\n", "\n", - "#6 [app-account 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", + "#6 [app-gateway 1/5] FROM docker.io/library/golang:latest@sha256:2bd56f00ff47baf33e64eae7996b65846c7cb5e0a46e0a882ef179fd89654afa\n", "#6 DONE 0.0s\n", "\n", - "#7 [app-gateway internal] load .dockerignore\n", + "#7 [app-account internal] load .dockerignore\n", "#7 transferring context: 2B 0.0s done\n", "#7 DONE 0.0s\n", "\n", - "#8 [app-account internal] load .dockerignore\n", + "#8 [app-gateway internal] load .dockerignore\n", "#8 transferring context: 2B 0.0s done\n", "#8 DONE 0.0s\n", "\n", @@ -270,43 +346,43 @@ "#16 [app-product 3/5] COPY . .\n", "#16 CACHED\n", "\n", - "#17 [app-account 3/5] COPY . .\n", + "#17 [app-product 5/5] RUN go get ./...\n", "#17 CACHED\n", "\n", "#18 [app-account 4/5] RUN go mod tidy\n", "#18 CACHED\n", "\n", - "#19 [app-account 2/5] WORKDIR /workdir\n", + "#19 [app-product 2/5] WORKDIR /workdir\n", "#19 CACHED\n", "\n", - "#20 [app-account 5/5] RUN go get ./...\n", + "#20 [app-account 3/5] COPY . .\n", "#20 CACHED\n", "\n", - "#21 [app-product 5/5] RUN go get ./...\n", + "#21 [app-account 5/5] RUN go get ./...\n", "#21 CACHED\n", "\n", "#22 [app-gateway] exporting to image\n", "#22 exporting layers done\n", - "#22 writing image sha256:ce10a1271da49aeb4e4cd49ec115acb9dba0e6ccc7cdb3a8fd8cb41a6e1d167d done\n", + "#22 writing image sha256:cd7ab7f9a7b66c181619a268695088e957b29b3dbb3bd774f04f5df304e73a40 done\n", "#22 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", "#22 DONE 0.0s\n", "\n", "#23 [app-product] exporting to image\n", "#23 exporting layers done\n", - "#23 writing image sha256:870ab11aebc06e828ed10f354042773c80bf6254a1368477d7a183cc22b394da done\n", + "#23 writing image sha256:611728c1bf6d24cab8c134510c040f79c639a9049846dab0f7a8e63678272004 done\n", "#23 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", "#23 DONE 0.0s\n", "\n", "#24 [app-account] exporting to image\n", "#24 exporting layers done\n", - "#24 writing image sha256:b7b6adc410287cb2036bb20c80e1fe9ab7b57b1d006636e890fa0bf1c90c2bc0 done\n", + "#24 writing image sha256:b54cbf0aed71707492fe18d7afd50f640d672ae5302f544dab982e66d0fc84cf done\n", "#24 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", "#24 DONE 0.0s\n", "\n", - "#25 [app-gateway] resolving provenance for metadata file\n", + "#25 [app-product] resolving provenance for metadata file\n", "#25 DONE 0.0s\n", "\n", - "#26 [app-product] resolving provenance for metadata file\n", + "#26 [app-gateway] resolving provenance for metadata file\n", "#26 DONE 0.0s\n", "\n", "#27 [app-account] resolving provenance for metadata file\n", @@ -317,1285 +393,30 @@ "name": "stderr", "output_type": "stream", "text": [ + " Network autocode-worker-1_default Creating\n", + " Network autocode-worker-1_default Created\n", + " Container autocode-worker-1-app-account-1 Creating\n", + " Container autocode-worker-1-app-product-1 Creating\n", + " Container autocode-worker-1-app-gateway-1 Creating\n", + " Container autocode-worker-1-app-gateway-1 Created\n", " Container autocode-worker-1-app-account-1 Created\n", " Container autocode-worker-1-app-product-1 Created\n", - " Container autocode-worker-1-app-gateway-1 Created\n", - " Container autocode-worker-1-app-account-1 Starting\n", " Container autocode-worker-1-app-product-1 Starting\n", " Container autocode-worker-1-app-gateway-1 Starting\n", + " Container autocode-worker-1-app-account-1 Starting\n", + " Container autocode-worker-1-app-gateway-1 Started\n", " Container autocode-worker-1-app-product-1 Started\n", - " Container autocode-worker-1-app-account-1 Started\n", - " Container autocode-worker-1-app-gateway-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-gateway internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-product internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-account internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-account internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.4s\n", - "\n", - "#5 [app-gateway internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-account internal] load .dockerignore\n", - "#6 transferring context: 2B 0.0s done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-account 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-product internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-product internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-account internal] load build context\n", - "#11 transferring context: 335B 0.0s done\n", - "#11 DONE 0.0s\n", - "\n", - "#12 [app-gateway 3/5] COPY . .\n", - "#12 CACHED\n", - "\n", - "#13 [app-gateway 4/5] RUN go mod tidy\n", - "#13 CACHED\n", - "\n", - "#14 [app-gateway 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-product 3/5] COPY . .\n", - "#15 CACHED\n", - "\n", - "#16 [app-product 4/5] RUN go mod tidy\n", - "#16 CACHED\n", - "\n", - "#17 [app-product 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-account 3/5] COPY . .\n", - "#18 CACHED\n", - "\n", - "#19 [app-account 4/5] RUN go mod tidy\n", - "#19 CACHED\n", - "\n", - "#20 [app-account 2/5] WORKDIR /workdir\n", - "#20 CACHED\n", - "\n", - "#21 [app-account 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-account] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:f544d1aa5f2121ade34cc9032f990cb347456f0e806e1370e39ad240d0b72b15 done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-gateway] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:7d966022f6400734973f64917b088f296d6a45547a2435cb4500f6699d7ebe6f done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-product] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:329659d3c3d9e004e2a82cdcfb7c8f1cb0fbe8ca43bb68923d5d584304e5a6ab done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-account] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-gateway] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-product] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-2_default Creating\n", - " Network autocode-worker-2_default Created\n", - " Container autocode-worker-2-app-product-1 Creating\n", - " Container autocode-worker-2-app-account-1 Creating\n", - " Container autocode-worker-2-app-gateway-1 Creating\n", - " Container autocode-worker-2-app-gateway-1 Created\n", - " Container autocode-worker-2-app-product-1 Created\n", - " Container autocode-worker-2-app-account-1 Created\n", - " Container autocode-worker-2-app-product-1 Starting\n", - " Container autocode-worker-2-app-gateway-1 Starting\n", - " Container autocode-worker-2-app-account-1 Starting\n", - " Container autocode-worker-2-app-product-1 Started\n", - " Container autocode-worker-2-app-gateway-1 Started\n", - " Container autocode-worker-2-app-account-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-account internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-product internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-gateway internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-gateway internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 1.2s\n", - "\n", - "#5 [app-account internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-gateway internal] load .dockerignore\n", - "#6 transferring context: 2B 0.0s done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-gateway 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-product internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-account internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-product internal] load build context\n", - "#11 transferring context: 335B 0.0s done\n", - "#11 DONE 0.0s\n", - "\n", - "#12 [app-account 3/5] COPY . .\n", - "#12 CACHED\n", - "\n", - "#13 [app-account 4/5] RUN go mod tidy\n", - "#13 CACHED\n", - "\n", - "#14 [app-account 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-product 3/5] COPY . .\n", - "#15 CACHED\n", - "\n", - "#16 [app-product 4/5] RUN go mod tidy\n", - "#16 CACHED\n", - "\n", - "#17 [app-product 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-gateway 3/5] COPY . .\n", - "#18 CACHED\n", - "\n", - "#19 [app-gateway 4/5] RUN go mod tidy\n", - "#19 CACHED\n", - "\n", - "#20 [app-account 2/5] WORKDIR /workdir\n", - "#20 CACHED\n", - "\n", - "#21 [app-gateway 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-product] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:fc79ef83d63925a832fc4f261f8866f8b7a73e2314f10f56b7cde014ceaac26a done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-account] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:c369728f7df20cf92b1bba83fac37baf574c719b50265a7e4c2e01853ed6530b done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-gateway] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:c96181e48bccd0ac6d614deead562e0a2b62d29c55e115e3f435d129c0f67af7 done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-account] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-product] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-gateway] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-3_default Creating\n", - " Network autocode-worker-3_default Created\n", - " Container autocode-worker-3-app-gateway-1 Creating\n", - " Container autocode-worker-3-app-account-1 Creating\n", - " Container autocode-worker-3-app-product-1 Creating\n", - " Container autocode-worker-3-app-product-1 Created\n", - " Container autocode-worker-3-app-account-1 Created\n", - " Container autocode-worker-3-app-gateway-1 Created\n", - " Container autocode-worker-3-app-account-1 Starting\n", - " Container autocode-worker-3-app-product-1 Starting\n", - " Container autocode-worker-3-app-gateway-1 Starting\n", - " Container autocode-worker-3-app-gateway-1 Started\n", - " Container autocode-worker-3-app-product-1 Started\n", - " Container autocode-worker-3-app-account-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-account internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-gateway internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-product internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-product internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.4s\n", - "\n", - "#5 [app-account internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-gateway internal] load .dockerignore\n", - "#6 transferring context: 2B 0.0s done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-gateway 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-product internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-account internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-product internal] load build context\n", - "#11 transferring context: 335B 0.0s done\n", - "#11 DONE 0.0s\n", - "\n", - "#12 [app-gateway 4/5] RUN go mod tidy\n", - "#12 CACHED\n", - "\n", - "#13 [app-gateway 3/5] COPY . .\n", - "#13 CACHED\n", - "\n", - "#14 [app-gateway 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-account 4/5] RUN go mod tidy\n", - "#15 CACHED\n", - "\n", - "#16 [app-account 3/5] COPY . .\n", - "#16 CACHED\n", - "\n", - "#17 [app-account 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-product 4/5] RUN go mod tidy\n", - "#18 CACHED\n", - "\n", - "#19 [app-account 2/5] WORKDIR /workdir\n", - "#19 CACHED\n", - "\n", - "#20 [app-product 3/5] COPY . .\n", - "#20 CACHED\n", - "\n", - "#21 [app-product 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-gateway] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:fd4db656bd20d2aef2871788a3840cfc92dd1943ac6c4dbd3518230373c97407 done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-product] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:45e68bf28ef3689fa8e676e179945b0ab3cdda5a0fe9a2cfb2bc334d41afab8d done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-account] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:48860552161807a41d35cf9a90d3eb1f27b906d0436c9d5ff1cd4bc54dfdecea done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-gateway] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-product] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-account] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-4_default Creating\n", - " Network autocode-worker-4_default Created\n", - " Container autocode-worker-4-app-account-1 Creating\n", - " Container autocode-worker-4-app-product-1 Creating\n", - " Container autocode-worker-4-app-gateway-1 Creating\n", - " Container autocode-worker-4-app-product-1 Created\n", - " Container autocode-worker-4-app-account-1 Created\n", - " Container autocode-worker-4-app-gateway-1 Created\n", - " Container autocode-worker-4-app-gateway-1 Starting\n", - " Container autocode-worker-4-app-account-1 Starting\n", - " Container autocode-worker-4-app-product-1 Starting\n", - " Container autocode-worker-4-app-gateway-1 Started\n", - " Container autocode-worker-4-app-account-1 Started\n", - " Container autocode-worker-4-app-product-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-gateway internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-product internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-account internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-account internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.5s\n", - "\n", - "#5 [app-gateway internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-account internal] load .dockerignore\n", - "#6 transferring context: 2B 0.0s done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-product 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-product internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-account internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-gateway 3/5] COPY . .\n", - "#11 CACHED\n", - "\n", - "#12 [app-gateway 4/5] RUN go mod tidy\n", - "#12 CACHED\n", - "\n", - "#13 [app-product internal] load build context\n", - "#13 transferring context: 335B 0.0s done\n", - "#13 DONE 0.0s\n", - "\n", - "#14 [app-gateway 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-account 4/5] RUN go mod tidy\n", - "#15 CACHED\n", - "\n", - "#16 [app-account 3/5] COPY . .\n", - "#16 CACHED\n", - "\n", - "#17 [app-account 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-product 3/5] COPY . .\n", - "#18 CACHED\n", - "\n", - "#19 [app-product 4/5] RUN go mod tidy\n", - "#19 CACHED\n", - "\n", - "#20 [app-product 2/5] WORKDIR /workdir\n", - "#20 CACHED\n", - "\n", - "#21 [app-product 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-account] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:dad2eedaf241be32b71d88f9021330ccbd4c7a2c588c2df9c1e019edd2c96fa8 done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-gateway] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:279f9ff249d3db55e4259d98768f8221a03bf811d05ea285136b01d1c0e3c26f done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-product] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:b58eb6aa2ef18032c31f7b6a2f1bc19d617a2b66ed8b884575c2cc12dd85c57e done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-gateway] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-account] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-product] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-5_default Creating\n", - " Network autocode-worker-5_default Created\n", - " Container autocode-worker-5-app-gateway-1 Creating\n", - " Container autocode-worker-5-app-product-1 Creating\n", - " Container autocode-worker-5-app-account-1 Creating\n", - " Container autocode-worker-5-app-gateway-1 Created\n", - " Container autocode-worker-5-app-product-1 Created\n", - " Container autocode-worker-5-app-account-1 Created\n", - " Container autocode-worker-5-app-account-1 Starting\n", - " Container autocode-worker-5-app-product-1 Starting\n", - " Container autocode-worker-5-app-gateway-1 Starting\n", - " Container autocode-worker-5-app-gateway-1 Started\n", - " Container autocode-worker-5-app-account-1 Started\n", - " Container autocode-worker-5-app-product-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-gateway internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-account internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-product internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-product internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.5s\n", - "\n", - "#5 [app-gateway internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-product internal] load .dockerignore\n", - "#6 transferring context: 2B 0.0s done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-account 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-account internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-product internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-account internal] load build context\n", - "#11 transferring context: 335B 0.0s done\n", - "#11 DONE 0.0s\n", - "\n", - "#12 [app-gateway 3/5] COPY . .\n", - "#12 CACHED\n", - "\n", - "#13 [app-gateway 4/5] RUN go mod tidy\n", - "#13 CACHED\n", - "\n", - "#14 [app-gateway 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-account 4/5] RUN go mod tidy\n", - "#15 CACHED\n", - "\n", - "#16 [app-account 3/5] COPY . .\n", - "#16 CACHED\n", - "\n", - "#17 [app-account 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-product 3/5] COPY . .\n", - "#18 CACHED\n", - "\n", - "#19 [app-product 2/5] WORKDIR /workdir\n", - "#19 CACHED\n", - "\n", - "#20 [app-product 4/5] RUN go mod tidy\n", - "#20 CACHED\n", - "\n", - "#21 [app-product 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-account] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:1c3507453ac47261f58b5c19372e53f8f46bbf073f661fb74999825d77d43118 done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-gateway] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:424525b36e1b07eaf6120721a8226e494ec83dba5a8d29c17df68f6be690f45a done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-product] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:af4b87d0554226662519e5733e196dca667e0beffa07f0f87d9cc90d01f031f6 done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-account] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-gateway] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-product] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-6_default Creating\n", - " Network autocode-worker-6_default Created\n", - " Container autocode-worker-6-app-account-1 Creating\n", - " Container autocode-worker-6-app-product-1 Creating\n", - " Container autocode-worker-6-app-gateway-1 Creating\n", - " Container autocode-worker-6-app-account-1 Created\n", - " Container autocode-worker-6-app-product-1 Created\n", - " Container autocode-worker-6-app-gateway-1 Created\n", - " Container autocode-worker-6-app-product-1 Starting\n", - " Container autocode-worker-6-app-gateway-1 Starting\n", - " Container autocode-worker-6-app-account-1 Starting\n", - " Container autocode-worker-6-app-account-1 Started\n", - " Container autocode-worker-6-app-product-1 Started\n", - " Container autocode-worker-6-app-gateway-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-gateway internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-account internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-product internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-product internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.5s\n", - "\n", - "#5 [app-account internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-gateway 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-product internal] load .dockerignore\n", - "#7 transferring context: 2B 0.0s done\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-gateway internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-account internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-product internal] load build context\n", - "#11 transferring context: 335B 0.0s done\n", - "#11 DONE 0.0s\n", - "\n", - "#12 [app-gateway 3/5] COPY . .\n", - "#12 CACHED\n", - "\n", - "#13 [app-gateway 4/5] RUN go mod tidy\n", - "#13 CACHED\n", - "\n", - "#14 [app-gateway 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-account 4/5] RUN go mod tidy\n", - "#15 CACHED\n", - "\n", - "#16 [app-account 3/5] COPY . .\n", - "#16 CACHED\n", - "\n", - "#17 [app-account 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-product 4/5] RUN go mod tidy\n", - "#18 CACHED\n", - "\n", - "#19 [app-product 3/5] COPY . .\n", - "#19 CACHED\n", - "\n", - "#20 [app-product 2/5] WORKDIR /workdir\n", - "#20 CACHED\n", - "\n", - "#21 [app-product 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-account] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:23693c2337d00330db716165ae09a8c97080033aa76d33c318293a1a01acaf4b done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-gateway] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:e66d5276983a37ad8787be5b8e07fde17e91fc51eeed2df59f48242b27af3aa0 done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-product] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:fb8ffb50290c2aac74588a683f37495cb9d359590280847497613806dbe94e61 done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-account] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-gateway] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-product] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-7_default Creating\n", - " Network autocode-worker-7_default Created\n", - " Container autocode-worker-7-app-product-1 Creating\n", - " Container autocode-worker-7-app-account-1 Creating\n", - " Container autocode-worker-7-app-gateway-1 Creating\n", - " Container autocode-worker-7-app-gateway-1 Created\n", - " Container autocode-worker-7-app-account-1 Created\n", - " Container autocode-worker-7-app-product-1 Created\n", - " Container autocode-worker-7-app-gateway-1 Starting\n", - " Container autocode-worker-7-app-account-1 Starting\n", - " Container autocode-worker-7-app-product-1 Starting\n", - " Container autocode-worker-7-app-account-1 Started\n", - " Container autocode-worker-7-app-gateway-1 Started\n", - " Container autocode-worker-7-app-product-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-account internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-gateway internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-product internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-product internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.8s\n", - "\n", - "#5 [app-account internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-product 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-gateway internal] load .dockerignore\n", - "#7 transferring context: 2B 0.0s done\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-product internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-account internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-product internal] load build context\n", - "#11 transferring context: 335B 0.0s done\n", - "#11 DONE 0.0s\n", - "\n", - "#12 [app-gateway 3/5] COPY . .\n", - "#12 CACHED\n", - "\n", - "#13 [app-gateway 4/5] RUN go mod tidy\n", - "#13 CACHED\n", - "\n", - "#14 [app-gateway 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-product 4/5] RUN go mod tidy\n", - "#15 CACHED\n", - "\n", - "#16 [app-product 3/5] COPY . .\n", - "#16 CACHED\n", - "\n", - "#17 [app-product 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-account 3/5] COPY . .\n", - "#18 CACHED\n", - "\n", - "#19 [app-account 2/5] WORKDIR /workdir\n", - "#19 CACHED\n", - "\n", - "#20 [app-account 4/5] RUN go mod tidy\n", - "#20 CACHED\n", - "\n", - "#21 [app-account 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-gateway] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:29a1105a85c2a4da50cf2b7bd62fb9293a8f80de68ebe1274c7971bc522b97be done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-account] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:45d16b9017cd5e787e74b6f1b88e728eb4580077ce1052f7dd3fb0003b7454f9 done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-product] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:6e76293cb7f236c981cf3f930dc83c8a07c4497afc48d7a28ae08fc2e742b88c done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-gateway] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-account] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-product] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-8_default Creating\n", - " Network autocode-worker-8_default Created\n", - " Container autocode-worker-8-app-gateway-1 Creating\n", - " Container autocode-worker-8-app-account-1 Creating\n", - " Container autocode-worker-8-app-product-1 Creating\n", - " Container autocode-worker-8-app-account-1 Created\n", - " Container autocode-worker-8-app-gateway-1 Created\n", - " Container autocode-worker-8-app-product-1 Created\n", - " Container autocode-worker-8-app-gateway-1 Starting\n", - " Container autocode-worker-8-app-account-1 Starting\n", - " Container autocode-worker-8-app-product-1 Starting\n", - " Container autocode-worker-8-app-gateway-1 Started\n", - " Container autocode-worker-8-app-product-1 Started\n", - " Container autocode-worker-8-app-account-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-product internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-account internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-gateway internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-gateway internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.8s\n", - "\n", - "#5 [app-gateway internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-product internal] load .dockerignore\n", - "#6 transferring context: 2B 0.0s done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-account 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-account internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-gateway 3/5] COPY . .\n", - "#10 CACHED\n", - "\n", - "#11 [app-gateway 4/5] RUN go mod tidy\n", - "#11 CACHED\n", - "\n", - "#12 [app-gateway 5/5] RUN go get ./...\n", - "#12 CACHED\n", - "\n", - "#13 [app-product internal] load build context\n", - "#13 transferring context: 335B 0.0s done\n", - "#13 DONE 0.0s\n", - "\n", - "#14 [app-account internal] load build context\n", - "#14 transferring context: 335B 0.0s done\n", - "#14 DONE 0.0s\n", - "\n", - "#15 [app-product 4/5] RUN go mod tidy\n", - "#15 CACHED\n", - "\n", - "#16 [app-product 3/5] COPY . .\n", - "#16 CACHED\n", - "\n", - "#17 [app-gateway] exporting to image\n", - "#17 exporting layers done\n", - "#17 writing image sha256:11581c16d5b3accbf3b24f79eb6efd26971a0739b8328853a93dda40a2abf310 done\n", - "#17 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#17 DONE 0.0s\n", - "\n", - "#18 [app-account 4/5] RUN go mod tidy\n", - "#18 CACHED\n", - "\n", - "#19 [app-account 2/5] WORKDIR /workdir\n", - "#19 CACHED\n", - "\n", - "#20 [app-account 3/5] COPY . .\n", - "#20 CACHED\n", - "\n", - "#21 [app-product 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-account 5/5] RUN go get ./...\n", - "#22 CACHED\n", - "\n", - "#23 [app-product] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:c86a3ad287055ff9060395f320c87930f9b0c851975c16fe711bfe75a07e6eb0 done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-account] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:f76a119d1ceab6de8561205fe0ea5a9cdf139016fde1c404a35f161fec40da3c done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-gateway] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-product] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-account] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-9_default Creating\n", - " Network autocode-worker-9_default Created\n", - " Container autocode-worker-9-app-account-1 Creating\n", - " Container autocode-worker-9-app-product-1 Creating\n", - " Container autocode-worker-9-app-gateway-1 Creating\n", - " Container autocode-worker-9-app-gateway-1 Created\n", - " Container autocode-worker-9-app-account-1 Created\n", - " Container autocode-worker-9-app-product-1 Created\n", - " Container autocode-worker-9-app-gateway-1 Starting\n", - " Container autocode-worker-9-app-product-1 Starting\n", - " Container autocode-worker-9-app-account-1 Starting\n", - " Container autocode-worker-9-app-product-1 Started\n", - " Container autocode-worker-9-app-account-1 Started\n", - " Container autocode-worker-9-app-gateway-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-gateway internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-product internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-account internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-account internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.8s\n", - "\n", - "#5 [app-gateway internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-account 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-product internal] load .dockerignore\n", - "#7 transferring context: 2B 0.0s done\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-account internal] load .dockerignore\n", - "#8 transferring context: 2B done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-product internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-gateway 3/5] COPY . .\n", - "#11 CACHED\n", - "\n", - "#12 [app-gateway 4/5] RUN go mod tidy\n", - "#12 CACHED\n", - "\n", - "#13 [app-account internal] load build context\n", - "#13 transferring context: 335B 0.0s done\n", - "#13 DONE 0.0s\n", - "\n", - "#14 [app-gateway 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-product 4/5] RUN go mod tidy\n", - "#15 CACHED\n", - "\n", - "#16 [app-product 3/5] COPY . .\n", - "#16 CACHED\n", - "\n", - "#17 [app-product 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-account 4/5] RUN go mod tidy\n", - "#18 CACHED\n", - "\n", - "#19 [app-account 3/5] COPY . .\n", - "#19 CACHED\n", - "\n", - "#20 [app-account 2/5] WORKDIR /workdir\n", - "#20 CACHED\n", - "\n", - "#21 [app-account 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-gateway] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:ce89624b67a9378bad97f942eff6282bc65686658f9a6ba3442b5dae2f2e3759 done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-product] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:538f748bc94f352d54cf624dab91c301fdc4121fdcb6ea7603570b962377e864 done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-account] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:73023280a1a34941f6d30ae9edad6469272e3beb6a43d5f747fe86d59665b327 done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-product] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-gateway] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-account] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-10_default Creating\n", - " Network autocode-worker-10_default Created\n", - " Container autocode-worker-10-app-product-1 Creating\n", - " Container autocode-worker-10-app-account-1 Creating\n", - " Container autocode-worker-10-app-gateway-1 Creating\n", - " Container autocode-worker-10-app-gateway-1 Created\n", - " Container autocode-worker-10-app-account-1 Created\n", - " Container autocode-worker-10-app-product-1 Created\n", - " Container autocode-worker-10-app-account-1 Starting\n", - " Container autocode-worker-10-app-gateway-1 Starting\n", - " Container autocode-worker-10-app-product-1 Starting\n", - " Container autocode-worker-10-app-account-1 Started\n", - " Container autocode-worker-10-app-product-1 Started\n", - " Container autocode-worker-10-app-gateway-1 Started\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#0 building with \"default\" instance using docker driver\n", - "\n", - "#1 [app-product internal] load build definition from .Dockerfile\n", - "#1 transferring dockerfile: 119B 0.0s done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [app-account internal] load build definition from .Dockerfile\n", - "#2 transferring dockerfile: 119B 0.0s done\n", - "#2 DONE 0.0s\n", - "\n", - "#3 [app-gateway internal] load build definition from .Dockerfile\n", - "#3 transferring dockerfile: 119B 0.0s done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [app-gateway internal] load metadata for docker.io/library/golang:latest\n", - "#4 DONE 0.7s\n", - "\n", - "#5 [app-gateway internal] load .dockerignore\n", - "#5 transferring context: 2B 0.0s done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [app-product 1/5] FROM docker.io/library/golang:latest@sha256:86a3c48a61915a8c62c0e1d7594730399caa3feb73655dfe96c7bc17710e96cf\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [app-account internal] load .dockerignore\n", - "#7 transferring context: 2B 0.0s done\n", - "#7 DONE 0.0s\n", - "\n", - "#8 [app-product internal] load .dockerignore\n", - "#8 transferring context: 2B 0.0s done\n", - "#8 DONE 0.0s\n", - "\n", - "#9 [app-gateway internal] load build context\n", - "#9 transferring context: 299B 0.0s done\n", - "#9 DONE 0.0s\n", - "\n", - "#10 [app-account internal] load build context\n", - "#10 transferring context: 335B 0.0s done\n", - "#10 DONE 0.0s\n", - "\n", - "#11 [app-product internal] load build context\n", - "#11 transferring context: 335B 0.0s done\n", - "#11 DONE 0.0s\n", - "\n", - "#12 [app-gateway 3/5] COPY . .\n", - "#12 CACHED\n", - "\n", - "#13 [app-gateway 4/5] RUN go mod tidy\n", - "#13 CACHED\n", - "\n", - "#14 [app-gateway 5/5] RUN go get ./...\n", - "#14 CACHED\n", - "\n", - "#15 [app-account 3/5] COPY . .\n", - "#15 CACHED\n", - "\n", - "#16 [app-account 4/5] RUN go mod tidy\n", - "#16 CACHED\n", - "\n", - "#17 [app-account 5/5] RUN go get ./...\n", - "#17 CACHED\n", - "\n", - "#18 [app-product 3/5] COPY . .\n", - "#18 CACHED\n", - "\n", - "#19 [app-account 2/5] WORKDIR /workdir\n", - "#19 CACHED\n", - "\n", - "#20 [app-product 4/5] RUN go mod tidy\n", - "#20 CACHED\n", - "\n", - "#21 [app-product 5/5] RUN go get ./...\n", - "#21 CACHED\n", - "\n", - "#22 [app-gateway] exporting to image\n", - "#22 exporting layers done\n", - "#22 writing image sha256:5deb36b1f2f6b1d30a7d8d15b029e7c3461b8232128bb011e00c1f505bf57b28 done\n", - "#22 naming to docker.io/muazhari/autocode-example-app-gateway:latest done\n", - "#22 DONE 0.0s\n", - "\n", - "#23 [app-account] exporting to image\n", - "#23 exporting layers done\n", - "#23 writing image sha256:21ff29ce88ff822369aa138cb99a3c0fa934289535fa5e6dc48ae5842609cdac done\n", - "#23 naming to docker.io/muazhari/autocode-example-app-account:latest done\n", - "#23 DONE 0.0s\n", - "\n", - "#24 [app-product] exporting to image\n", - "#24 exporting layers done\n", - "#24 writing image sha256:5cafc1bc1c5f087ea138b9d6a3f798a36f2c5c8aabef99291605b0503d2d8b78 done\n", - "#24 naming to docker.io/muazhari/autocode-example-app-product:latest done\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [app-gateway] resolving provenance for metadata file\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [app-account] resolving provenance for metadata file\n", - "#26 DONE 0.0s\n", - "\n", - "#27 [app-product] resolving provenance for metadata file\n", - "#27 DONE 0.0s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " Network autocode-worker-11_default Creating\n", - " Network autocode-worker-11_default Created\n", - " Container autocode-worker-11-app-gateway-1 Creating\n", - " Container autocode-worker-11-app-account-1 Creating\n", - " Container autocode-worker-11-app-product-1 Creating\n", - " Container autocode-worker-11-app-gateway-1 Created\n", - " Container autocode-worker-11-app-product-1 Created\n", - " Container autocode-worker-11-app-account-1 Created\n", - " Container autocode-worker-11-app-account-1 Starting\n", - " Container autocode-worker-11-app-product-1 Starting\n", - " Container autocode-worker-11-app-gateway-1 Starting\n", - " Container autocode-worker-11-app-gateway-1 Started\n", - " Container autocode-worker-11-app-account-1 Started\n", - " Container autocode-worker-11-app-product-1 Started\n" + " Container autocode-worker-1-app-account-1 Started\n" ] } ], - "execution_count": 3 + "execution_count": 21 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-08-06T13:20:52.765726Z", - "start_time": "2024-08-06T13:20:52.666906Z" + "end_time": "2024-08-07T14:20:15.227546Z", + "start_time": "2024-08-07T14:20:15.223748Z" } }, "cell_type": "code", @@ -1669,7 +490,7 @@ ], "id": "5daf173cc5c82482", "outputs": [], - "execution_count": 4 + "execution_count": 16 }, { "metadata": { diff --git a/example/controller.py b/example/controller.py index 8c8174a..afed8bf 100644 --- a/example/controller.py +++ b/example/controller.py @@ -1,11 +1,9 @@ -import dotenv import uvicorn from fastapi import FastAPI from starlette.middleware.cors import CORSMiddleware from autocode import OptimizationUseCase, ApplicationContainer, ApplicationSetting -dotenv.load_dotenv(dotenv.find_dotenv()) application_container: ApplicationContainer = ApplicationContainer() application_setting: ApplicationSetting = application_container.settings.application() application_setting.num_cpus = 2 diff --git a/example/controller2.py b/example/controller2.py index f6789a8..71e3a3e 100644 --- a/example/controller2.py +++ b/example/controller2.py @@ -1,8 +1,5 @@ -import dotenv - from autocode import OptimizationUseCase, ApplicationContainer, ApplicationSetting -dotenv.load_dotenv(dotenv.find_dotenv()) application_container: ApplicationContainer = ApplicationContainer() application_setting: ApplicationSetting = application_container.settings.application() application_setting.num_cpus = 2 @@ -20,6 +17,7 @@ OptimizationObjective( type="minimize", ), + OptimizationObjective( type="maximize", ), @@ -39,9 +37,6 @@ type="maximize", ), - OptimizationObjective( - type="minimize", - ), OptimizationObjective( type="maximize", ), @@ -64,8 +59,19 @@ def evaluator(inputs: List[OptimizationEvaluateRunResponse]) -> Dict[str, Any]: + f_gateway: List[float] = [] + f_account: List[float] = [] + f_product: List[float] = [] + for input in inputs: + if "gateway" in input.get_client().name: + f_gateway = input.objectives + elif "account" in input.get_client().name: + f_account = input.objectives + elif "product" in input.get_client().name: + f_product = input.objectives + output: Dict[str, Any] = { - "F": inputs[0].objectives + inputs[1].objectives, + "F": f_gateway + f_account + f_product } return output diff --git a/example/requirements.txt b/example/requirements.txt index 2dc3e05..059762d 100644 --- a/example/requirements.txt +++ b/example/requirements.txt @@ -12,5 +12,5 @@ numpy<2 python-on-whales uvicorn langchain -langchain-openai +langchain-openai>=0.1.21rc1 langgraph \ No newline at end of file diff --git a/setup.py b/setup.py index b78dc69..5fe27e5 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name='autocode-py', - version='0.0.1.post6', + version='0.0.1.post8', author='muazhari', url='https://github.com/muazhari/autocode', description='autocode: Auto Code Improvement by Metrics Optimization.', @@ -38,7 +38,7 @@ 'python-on-whales', 'uvicorn', 'langchain', - 'langchain-openai', + 'langchain-openai>=0.1.21rc1', 'langgraph', ], )